diff --git a/src/extensions/default/bramble/lib/MouseManagerRemote.js b/src/extensions/default/bramble/lib/MouseManagerRemote.js index 8797e672cc7..73a92cdb323 100644 --- a/src/extensions/default/bramble/lib/MouseManagerRemote.js +++ b/src/extensions/default/bramble/lib/MouseManagerRemote.js @@ -1,24 +1,46 @@ /*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, forin: true, maxerr: 50, regexp: true, bitwise: true */ /* global addEventListener, removeEventListener, sessionStorage */ -(function(transport) { + + var testSessionStorage = "testSessionStorage"; + var noop = function() {}; + var sessionStorage = { + getItem: noop, + setItem: noop + }; + + try + { + window.sessionStorage.setItem(testSessionStorage, testSessionStorage); + window.sessionStorage.removeItem(testSessionStorage); + sessionStorage = window.sessionStorage.bind(window); + } + + catch(e) + { + console.warn("[Bramble] Session storage not accessible for MouseManager."); + + (function(transport) + { "use strict"; var SCROLL_KEY = "___bramble-preview-scrollTop::" + window.___brambleFilename; var listening = false; - function sendHighlightInfo(e) { + function sendHighlightInfo(e) + { var x = e.pageX - window.pageXOffset; var y = e.pageY - window.pageYOffset; var elem = document.elementFromPoint(x, y); - if(!elem) { + if(!elem) + { return; } var ds = elem.dataset; if(!(ds.brambleStartLine && ds.brambleStartCh && ds.brambleEndLine && ds.brambleEndCh)) { return; - } + } // If the element has a brackets-id, and this was a click, // use that info to highlight it. Don't bother for mousemove. @@ -29,14 +51,17 @@ transport.send("bramble-highlight-lines:" + ds.brambleStartLine + "," + ds.brambleStartCh + "," + ds.brambleEndLine + "," + ds.brambleEndCh + bracketsId); - } + } - function shouldIgnoreElemEvent(e) { + function shouldIgnoreElemEvent(e) + { // Ignore mouseout for any inner elements (just for entire window) var from = e.relatedTarget || e.toElement; - if(!from || from.nodeName === "HTML") { + if(!from || from.nodeName === "HTML") + { // Further filter things by only responding to events close to the left/top - if(e.clientX <= 32 || e.clientY <= 32) { + if(e.clientX <= 32 || e.clientY <= 32) + { return false; } } @@ -44,8 +69,10 @@ return true; } - function startListener() { - if(listening) { + function startListener() + { + if(listening) + { return; } @@ -53,8 +80,11 @@ listening = true; } - function stopListener() { - if(!listening) { + + function stopListener() + { + if(!listening) + { return; } @@ -62,7 +92,8 @@ listening = false; } - addEventListener("load", function() { + addEventListener("load", function() + { // Restore last scroll position for this session (if any) document.body.scrollTop = sessionStorage.getItem(SCROLL_KEY)|0; @@ -70,19 +101,22 @@ // if there is no livedoc if(!transport) { return; - } + } startListener(); // If the user clicks on an element, stop inspecting with mousemove (pin editor) - addEventListener("click", function(e) { + addEventListener("click", function(e) + { transport.send("bramble-inspector-disable"); stopListener(); sendHighlightInfo(e); }); - addEventListener("mouseout", function(e) { - if(!shouldIgnoreElemEvent(e)) { + addEventListener("mouseout", function(e) + { + if(!shouldIgnoreElemEvent(e)) + { // Start listening for user inspecting elements (again) startListener(); return false; @@ -90,7 +124,8 @@ }); // Remember last scroll position for this document - addEventListener("scroll", function() { + addEventListener("scroll", function() + { sessionStorage.setItem(SCROLL_KEY, document.body.scrollTop); }, false);