From 7fc13f0c9e30cf3df4b9650cb198ac03e90d0b95 Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Thu, 14 Nov 2013 07:39:33 +0000 Subject: [PATCH] portal highlighter system - add an alternative API that includes a setSelected callback, so highlighters know when they're turned on/off - fix bug where highlighters were selected multiple times - a few other cleanups --- code/portal_highlighter.js | 57 +++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/code/portal_highlighter.js b/code/portal_highlighter.js index ba72f52e..bb2ee292 100644 --- a/code/portal_highlighter.js +++ b/code/portal_highlighter.js @@ -1,37 +1,49 @@ // Portal Highlighter ////////////////////////////////////////////////////////// // these functions handle portal highlighters - +// an object mapping highlighter names to the object containing callback functions window._highlighters = null; + +// the name of the current highlighter window._current_highlighter = localStorage.portal_highlighter; + window._no_highlighter = 'No Highlights'; -if(window._current_highlighter !== undefined) { - if (typeof android !== 'undefined' && android && android.setActiveHighlighter) - android.setActiveHighlighter(window._current_highlighter); -} - -window.addPortalHighlighter = function(name, callback) { +window.addPortalHighlighter = function(name, data) { if(_highlighters === null) { _highlighters = {}; } - _highlighters[name] = callback; + + // old-format highlighters just passed a callback function. this is the same as just a highlight method + if (!data.highlight) { + data = {highlight: data} + } + + _highlighters[name] = data; if (typeof android !== 'undefined' && android && android.addPortalHighlighter) android.addPortalHighlighter(name); - if(localStorage.portal_highlighter === undefined) { + if(window._current_highlighter === undefined) { _current_highlighter = name; + } + + if (_current_highlighter == name) { if (typeof android !== 'undefined' && android && android.setActiveHighlighter) android.setActiveHighlighter(name); - localStorage.portal_highlighter = name; + // call the setSelected callback + if (_highlighters[_current_highlighter].setSelected) { + _highlighters[_current_highlighter].setSelected(true); + } + } - portalHighlighterControl(); + updatePortalHighlighterControl(); } -window.portalHighlighterControl = function() { +// (re)creates the highlighter dropdown list +window.updatePortalHighlighterControl = function() { if (typeof android !== 'undefined' && android && android.addPortalHighlighter) { $('#portal_highlight_select').remove(); return; @@ -40,6 +52,9 @@ window.portalHighlighterControl = function() { if(_highlighters !== null) { if($('#portal_highlight_select').length === 0) { $("body").append(""); + $("#portal_highlight_select").change(function(){ changePortalHighlights($(this).val());}); + $(".leaflet-top.leaflet-left").css('padding-top', '20px'); + $(".leaflet-control-scale-line").css('margin-top','25px'); } $("#portal_highlight_select").html(''); $("#portal_highlight_select").append($("