Ignore mousing over border of select

This commit is contained in:
Jakub Vrana 2013-07-19 13:04:14 -07:00
parent 32ff363ee3
commit 9e2592f35f
3 changed files with 14 additions and 9 deletions

View file

@ -34,7 +34,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
document.body.className = document.body.className.replace(/ nojs/, ' js'); document.body.className = document.body.className.replace(/ nojs/, ' js');
</script> </script>
<div id="help" class="jush-<?php echo $jush; ?> jsonly hidden" onmouseover="helpOpen = 1;" onmouseout="helpMouseout();"></div> <div id="help" class="jush-<?php echo $jush; ?> jsonly hidden" onmouseover="helpOpen = 1;" onmouseout="helpMouseout(this, event);"></div>
<div id="content"> <div id="content">
<?php <?php

View file

@ -474,5 +474,5 @@ function doc_link($path) {
* @return string * @return string
*/ */
function on_help($command, $side = 0) { function on_help($command, $side = 0) {
return " onmouseover='helpMouseover(getTarget(event), " . h($command) . ", $side);' onmouseout='helpMouseout();'"; return " onmouseover='helpMouseover(this, event, " . h($command) . ", $side);' onmouseout='helpMouseout(this, event);'";
} }

View file

@ -614,36 +614,41 @@ function schemaMouseup(ev, db) {
} }
} }
var helpOpen; var helpOpen, helpIgnore; // when mouse outs <option> then it mouse overs border of <select> - ignore it
/** Display help /** Display help
* @param HTMLElement * @param HTMLElement
* @param MouseEvent
* @param string * @param string
* @param bool display on left side (otherwise on top) * @param bool display on left side (otherwise on top)
*/ */
function helpMouseover(el, text, side) { function helpMouseover(el, event, text, side) {
var target = getTarget(event);
if (!text) { if (!text) {
helpClose(); helpClose();
} else if (window.jush) { } else if (window.jush && (!helpIgnore || el != target)) {
helpOpen = 1; helpOpen = 1;
var help = document.getElementById('help'); var help = document.getElementById('help');
help.innerHTML = text; help.innerHTML = text;
jush.highlight_tag([ help ]); jush.highlight_tag([ help ]);
alterClass(help, 'hidden'); alterClass(help, 'hidden');
var top = 0, left = 0, parent = el; var top = 0, left = 0, parent = target;
do { do {
top += parent.offsetTop; top += parent.offsetTop;
left += parent.offsetLeft; left += parent.offsetLeft;
} while (parent = parent.offsetParent); } while (parent = parent.offsetParent);
help.style.top = (top - (side ? (help.offsetHeight - el.offsetHeight) / 2 : help.offsetHeight)) + 'px'; help.style.top = (top - (side ? (help.offsetHeight - target.offsetHeight) / 2 : help.offsetHeight)) + 'px';
help.style.left = (left - (side ? help.offsetWidth : (help.offsetWidth - el.offsetWidth) / 2)) + 'px'; help.style.left = (left - (side ? help.offsetWidth : (help.offsetWidth - target.offsetWidth) / 2)) + 'px';
} }
} }
/** Close help after timeout /** Close help after timeout
* @param HTMLElement
* @param MouseEvent
*/ */
function helpMouseout() { function helpMouseout(el, event) {
helpOpen = 0; helpOpen = 0;
helpIgnore = (el != getTarget(event));
setTimeout(function () { setTimeout(function () {
if (!helpOpen) { if (!helpOpen) {
helpClose(); helpClose();