diff --git a/libraries/display_tbl.lib.php3 b/libraries/display_tbl.lib.php3 index 11b2bc9b1..bc53b8c3d 100644 --- a/libraries/display_tbl.lib.php3 +++ b/libraries/display_tbl.lib.php3 @@ -1258,8 +1258,28 @@ if (!defined('PMA_DISPLAY_TBL_LIB_INCLUDED')) { // Displays data reset($vertical_display['desc']); + $row_no = 0; while (list($key, $val) = each($vertical_display['desc'])) { - echo '' . "\n"; + $row_no++; + + if (isset($GLOBALS['printview']) && ($GLOBALS['printview'] == '1')) { + $bgcolor = '#ffffff'; + } else { + $bgcolor = ($row_no % 2) ? $GLOBALS['cfg']['BgcolorOne'] : $GLOBALS['cfg']['BgcolorTwo']; + } + + $on_mouse = ''; + if (!isset($GLOBALS['printview']) || ($GLOBALS['printview'] != '1')) { + if ($GLOBALS['cfg']['BrowsePointerColor'] != '') { + $on_mouse = ' onmouseover="setVerticalPointer(this, ' . $row_no . ', \'over\', \'' . $GLOBALS['cfg']['BgcolorOne'] . '\', \'' . $GLOBALS['cfg']['BgcolorTwo'] . '\', \'' . $GLOBALS['cfg']['BrowsePointerColor'] . '\', \'' . $GLOBALS['cfg']['BrowseMarkerColor'] . '\');"' + . ' onmouseout="setVerticalPointer(this, ' . $row_no . ', \'out\', \'' . $GLOBALS['cfg']['BgcolorOne'] . '\', \'' . $GLOBALS['cfg']['BgcolorTwo'] . '\', \'' . $GLOBALS['cfg']['BrowsePointerColor'] . '\', \'' . $GLOBALS['cfg']['BrowseMarkerColor'] . '\');"'; + } + if ($GLOBALS['cfg']['BrowseMarkerColor'] != '') { + $on_mouse .= ' onmousedown="setVerticalPointer(this, ' . $row_no . ', \'click\', \'' . $GLOBALS['cfg']['BgcolorOne'] . '\', \'' . $GLOBALS['cfg']['BgcolorTwo'] . '\', \'' . $GLOBALS['cfg']['BrowsePointerColor'] . '\', \'' . $GLOBALS['cfg']['BrowseMarkerColor'] . '\');"'; + } + } // end if + + echo '' . "\n"; echo $val; $foo_counter = 0; diff --git a/libraries/functions.js b/libraries/functions.js index 3704cb19a..519f2a9a7 100644 --- a/libraries/functions.js +++ b/libraries/functions.js @@ -426,6 +426,121 @@ function setPointer(theRow, theRowNum, theAction, theDefaultColor, thePointerCol return true; } // end of the 'setPointer()' function +/* + * Sets/unsets the pointer and marker in vertical browse mode + * + * @param object the table row + * @param interger the row number + * @param string the action calling this script (over, out or click) + * @param string the default background color + * @param string the color to use for mouseover + * @param string the color to use for marking a row + * + * @return boolean whether pointer is set or not + * + * @author Garvin Hicking (rewrite of setPointer.) + */ +function setVerticalPointer(theRow, theRowNum, theAction, theDefaultColor1, theDefaultColor2, thePointerColor, theMarkColor) { + var theCells = null; + + // 1. Pointer and mark feature are disabled or the browser can't get the + // row -> exits + if ((thePointerColor == '' && theMarkColor == '') + || typeof(theRow.style) == 'undefined') { + return false; + } + + // 2. Gets the current row and exits if the browser can't get it + if (typeof(document.getElementsByTagName) != 'undefined') { + theCells = theRow.getElementsByTagName('td'); + } + else if (typeof(theRow.cells) != 'undefined') { + theCells = theRow.cells; + } + else { + return false; + } + + // 3. Gets the current color... + var rowCellsCnt = theCells.length; + var domDetect = null; + var currentColor = null; + var newColor = null; + + // 3.1 ... with DOM compatible browsers except Opera that does not return + // valid values with "getAttribute" + if (typeof(window.opera) == 'undefined' + && typeof(theCells[0].getAttribute) != 'undefined') { + currentColor = theCells[0].getAttribute('bgcolor'); + domDetect = true; + } + // 3.2 ... with other browsers + else { + domDetect = false; + } // end 3 + + var c = null; + // 5.1 ... with DOM compatible browsers except Opera + for (c = 0; c < rowCellsCnt; c++) { + if (domDetect) { + currentColor = theCells[c].getAttribute('bgcolor'); + } else { + currentColor = theCells[c].style.backgroundColor; + } + + // 4. Defines the new color + // 4.1 Current color is the default one + if (currentColor == '' + || currentColor.toLowerCase() == theDefaultColor1.toLowerCase() + || currentColor.toLowerCase() == theDefaultColor2.toLowerCase()) { + if (theAction == 'over' && thePointerColor != '') { + newColor = thePointerColor; + } else if (theAction == 'click' && theMarkColor != '') { + newColor = theMarkColor; + marked_row[theRowNum] = true; + } + } + // 4.1.2 Current color is the pointer one + else if (currentColor.toLowerCase() == thePointerColor.toLowerCase() + && (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])) { + if (theAction == 'out') { + if (c % 2) { + newColor = theDefaultColor1; + } else { + newColor = theDefaultColor2; + } + } + else if (theAction == 'click' && theMarkColor != '') { + newColor = theMarkColor; + marked_row[theRowNum] = true; + } + } + // 4.1.3 Current color is the marker one + else if (currentColor.toLowerCase() == theMarkColor.toLowerCase()) { + if (theAction == 'click') { + newColor = (thePointerColor != '') + ? thePointerColor + : ((c % 2) ? theDefaultColor1 : theDefaultColor2); + marked_row[theRowNum] = (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum]) + ? true + : null; + } + } // end 4 + + // 5. Sets the new color... + if (newColor) { + if (domDetect) { + theCells[c].setAttribute('bgcolor', newColor, 0); + } + // 5.2 ... with other browsers + else { + theCells[c].style.backgroundColor = newColor; + } + } // end 5 + } // end for + + return true; + } // end of the 'setVerticalPointer()' function /** * Checks/unchecks all tables