diff --git a/webroot/rsrc/js/application/repository/repository-crossreference.js b/webroot/rsrc/js/application/repository/repository-crossreference.js --- a/webroot/rsrc/js/application/repository/repository-crossreference.js +++ b/webroot/rsrc/js/application/repository/repository-crossreference.js @@ -40,8 +40,7 @@ 'tag:span', function(e) { if (e.getType() === 'mouseout') { - highlighted && JX.DOM.alterClass(highlighted, classHighlight, false); - highlighted = null; + unhighlight(); return; } if (!isSignalkey(e)) { @@ -63,6 +62,10 @@ } }); } + function unhighlight() { + highlighted && JX.DOM.alterClass(highlighted, classHighlight, false); + highlighted = null; + } function openSearch(target, lang) { var symbol = target.textContent || target.innerText; @@ -110,6 +113,7 @@ linkAll(e.getData().container); }); + JX.Stratcom.listen( ['keydown', 'keyup'], null, @@ -117,14 +121,28 @@ if (e.getRawEvent().keyCode !== signalKey) { return; } - statics.active = (e.getType() === 'keydown'); - linked.forEach(function(element) { - JX.DOM.alterClass(element, classMouseCursor, statics.active); - }); + setCursorMode(e.getType() === 'keydown'); if (!statics.active) { - highlighted && JX.DOM.alterClass(highlighted, classHighlight, false); - highlighted = null; + unhighlight(); } }); + + JX.Stratcom.listen( + ['blur'], + null, + function(e) { + if (e.getTarget()) { + return; + } + unhighlight(); + setCursorMode(false); + }); + + function setCursorMode(active) { + statics.active = (active); + linked.forEach(function(element) { + JX.DOM.alterClass(element, classMouseCursor, statics.active); + }); + } });