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