// ==UserScript==
// @name WME KeepMyLayers (Dev)
// @description Resets WME layers to your preferred state plus other fancy stuff.
// @namespace https://greasyfork.org/users/11629-TheLastTaterTot
// @version 0.4
// @include https://editor-beta.waze.com/*editor/*
// @include https://www.waze.com/*editor/*
// @exclude https://www.waze.com/user/*editor/*
// @author TheLastTaterTot
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_deleteValue
// @run-at document-start
// @icon data:image/png;base64,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
// ==/UserScript==
(function () {
function kmllog(str, _) {
console.log('WMEKMLayers:', str);
}
var kmlPLlayers = '',
kmlPLhref = false,
kmlPLhost = false,
kmlPLpath = false,
kmlayersBetaChk,
kmlayersStartupChk = [(localStorage.WME_KMLSettings.indexOf('&x') !== -1), (
localStorage.WME_KMLSettings.indexOf('&b') !== -1), (localStorage.WME_KMLSettings
.indexOf('&l') !== -1)];
if (location.href.lastIndexOf('&kmlayers') === -1) { //not a layers-removal redirect
//if (!kmlayersStartupChk[0] || kmlayersStartupChk[1] || kmlayersStartupChk[2]) {
if (!kmlayersStartupChk[0]) { // allow autocheck layers at startup
kmlPLhref = location.href.match(/&layers=(\d+)/);
if (kmlPLhref && kmlPLhref[1]) {
kmlPLlayers = ('&kmlayers=' + kmlPLhref[1]);
kmlPLhref = location.href.replace(kmlPLhref[0], '');
} // else PL has no layers
setTimeout(function () {
if (localStorage.WME_KeepMyLayers_lV) {
localStorage.layerVisibility = localStorage.WME_KeepMyLayers_lV;
} // children
if (localStorage.WME_KeepMyLayers_lF) {
sessionStorage.layerFilters_orig = localStorage.layerFilters; // save a duplicate as backup
localStorage.layerFilters = localStorage.WME_KeepMyLayers_lF;
}
}, 0);
}
}
//if (kmlayersBetaChk === true || kmlayersBetaChk === false || kmlayersLangChk === true) {
if (kmlayersStartupChk[1] && location.href.substr(-18).indexOf('&b') === -1) { // beta toggle check
kmlayersBetaChk = GM_getValue("WMEKMLayers_Beta");
if (kmlayersBetaChk === true && //if set to beta-editor
location.host.indexOf('editor-b') === -1) { //if PL is not editor-beta.waze.com
kmlPLhost = 'https://editor-beta.waze.com';
} else if (kmlayersBetaChk === false && //if set to production editor
location.host.indexOf('www.waze') === -1) { //if PL is not www.waze.com
kmlPLhost = 'http://www.waze.com';
}
}
if (kmlayersStartupChk[2]) { // language check
if (GM_getValue("WMEKMLayers_Lang") === true) { //if set to filter out language
if (location.pathname !== '/editor/') {
kmlPLpath = '/editor/';
}
}
}
switch (true) {
case (!kmlPLhost && !kmlPLpath && !kmlPLhref): //no modifications are necessary
break;
default:
if (!kmlPLhost) kmlPLhost = location.origin;
if (!kmlPLpath) kmlPLpath = location.pathname;
if (!kmlPLhref) kmlPLhref = location.href;
//mllog(location.origin, '/');
//kmllog(location.pathname, '/'); //kmllog('Redirecting to ' + kmlPLhost + kmlPLpath + location.href.substring(
// location.href.indexOf('?'), location.href.length), '/');
location.replace(kmlPLhost + kmlPLhref.substr(kmlPLhref.indexOf(kmlPLpath)) +
kmlPLlayers);
}
//==========================================================================
var resetLocalWithKMLayers = function () {
if (localStorage.WME_KeepMyLayers_lV) {
//sessionStorage.layerVisibility_orig = localStorage.layerVisibility; // save a duplicate as backup
localStorage.layerVisibility = localStorage.WME_KeepMyLayers_lV;
} // children
if (localStorage.WME_KeepMyLayers_lF) {
sessionStorage.layerFilters_orig = localStorage.layerFilters; // save a duplicate as backup
localStorage.layerFilters = localStorage.WME_KeepMyLayers_lF;
}
};
//==========================================================================
var KeepMyLayers = function () {
var kml = Array(10).fill(0), //counter
kml_W_map_layers = unsafeWindow.Waze.map.layers,
$ = unsafeWindow.$,
myKMLayers, kmlVersion = '0.4';
// ---------------------------------------------------------------------
var getSavedKMLayers = function () {
//kmllog('getSavedKMLayers()', '/');
var myKMLayers;
if (typeof myKMLayers !== "undefined") {
if (myKMLayers.visibleInLayersMenu !== undefined) {
//kmllog('Replaced myKMLayers in memory with saved from disk.', '/');
myKMLayers = JSON.parse(localStorage.WME_KeepMyLayers);
myKMLayers.reset = false;
return myKMLayers;
} else {
return false;
}
} else if (localStorage.WME_KeepMyLayers !== undefined) {
//kmllog('Found some saved settings to load!','/');
myKMLayers = JSON.parse(localStorage.WME_KeepMyLayers);
myKMLayers.reset = false;
if (myKMLayers.visibleInLayersMenu !== undefined) { //check that required object key is present
/* ~~~~~~ TEMP ~~~~~~~ */
if (myKMLayers.visibleInLayersMenu.constructor !== Array) {
var tempHoldingVar = JSON.parse(JSON.stringify(myKMLayers.visibleInLayersMenu));
myKMLayers.visibleInLayersMenu = [tempHoldingVar];
myKMLayers.layerSetNames = ['My default layers'];
myKMLayers.idx = 0;
}
/* ~~~~~~ TEMP ~~~~~~~ */
return myKMLayers;
} else {
return false;
}
} else { // myKMLayers has not been saved yet
/* TODO: Call to popup of instructions for saving default layers set will maybe go here */
return false;
}
};
// W.map.layers.forEach(function(a,i){console.debug('[' + i + ']', a["name"] + ':', a["visibility"])});
var getWazeMapLayersFromSwitcher = function (wazeMapLayers) { // get OL layers that show up under the WME Layer switcher panel
var kml_lay = wazeMapLayers.length,
kml_layerName, kml_layerUniqName,
kml_layerSwitcher = {
accelerator: {},
uniqueName: {}
};
while (kml_lay--) {
kml_layerName = wazeMapLayers[kml_lay].accelerator;
kml_layerUniqName = wazeMapLayers[kml_lay].uniqueName;
if (kml_layerName !== undefined) { // accelerator is a marker with high specificity and selectivity of whether the layer appears in the layer switcher menu
if (kml_layerUniqName !== undefined) { // uniqueName is used by WME for resetting layers to last PL
kml_layerSwitcher.uniqueName[kml_layerUniqName] = kml_lay;
kml_layerSwitcher.accelerator[kml_layerName] = kml_lay;
} else {
kml_layerSwitcher.accelerator[kml_layerName] = kml_lay;
}
}
}
return kml_layerSwitcher;
};
// -------------------------------------------------------------------------
var saveKMLayers = function () {
//kmllog('saveKMLayers()', '/');
var kml_j, kml_lname,
kml_layerSwitcher = getWazeMapLayersFromSwitcher(kml_W_map_layers),
kml_layerNames = Object.keys(kml_layerSwitcher.accelerator),
kml_numLayers = kml_layerNames.length,
visibleInLayersMenu = {};
// Get names of visible menu layers
for (kml_j = kml_numLayers; kml_j--;) {
kml_lname = kml_layerNames[kml_j];
if (kml_W_map_layers[kml_layerSwitcher.accelerator[kml_lname]].getVisibility()) {
visibleInLayersMenu[kml_lname] = true;
}
}
myKMLayers = getSavedKMLayers();
if (!myKMLayers) {
// Save to localStorage
localStorage.WME_KeepMyLayers_lV = localStorage.layerVisibility;
if (localStorage.layerFilters) {
localStorage.WME_KeepMyLayers_lF = localStorage.layerFilters;
} else {
localStorage.WME_KeepMyLayers_lF =
'{"update_requests":' + kml_W_map_layers[kml_layerSwitcher.accelerator.toggleUpdateRequests]
.visibility + ',"problems":' +
kml_W_map_layers[kml_layerSwitcher.accelerator.toggleMapProblems].visibility +
',"mapProblem":0,"mapUpdateRequest":0,"venue":1}';
}
myKMLayers = {
idx: 0,
layerSetNames: ["My default layers"],
visibleInLayersMenu: []
};
}
myKMLayers.visibleInLayersMenu[myKMLayers.idx] = visibleInLayersMenu; //save only visible
localStorage.WME_KeepMyLayers = JSON.stringify(myKMLayers);
$('#layer-switcher-list').after(
'<div id="KMLpopup" style="font-weight: bold; color: #DD3300; position: absolute; display: block; bottom: -30px; right: 14px">Saved <</div>'
);
document.getElementById('iKMLsaveLayers').classList.remove("kml-icn-nsave");
//document.getElementById('iKMLsaveLayers').className = document.getElementById('iKMLsaveLayers').className.replace(' kml-icn-nsave','');
setTimeout(function () {
document.getElementById('KMLpopup').remove();
}, 800);
//return myKMLayers;
};
var enableUndoKMLayersReset = function (kml_layerSwitcher) {
//kmllog('enableUndoKMLayersReset()', '/');
var convertLayersToObj = function () {
var getLayersFromPL = function () {
kmlayers = location.href.match(/&kmlayers=(\d*)/);
if (kmlayers && kmlayers[1]) {
return kmlayers[1];
}
};
var kml_layerVisibility_orig = {},
uniqueLayerVal = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2080],
kml_uniqueName = ['satellite_imagery', 'cities', 'roads', 'gps_points',
'area_managers', 'landmarks', 'speed_cameras', 'problems',
'update_requests', 'editable_areas', 'live_users', 'place_updates'
],
kml_lay = uniqueLayerVal.length,
kmlayers = getLayersFromPL();
if (kmlayers !== undefined && kmlayers !== null) {
while (kml_lay--) {
if (kmlayers > uniqueLayerVal[kml_lay]) {
kmlayers = kmlayers - uniqueLayerVal[kml_lay];
kml_layerVisibility_orig[kml_uniqueName[kml_lay]] = true;
} else {
kml_layerVisibility_orig[kml_uniqueName[kml_lay]] = false;
}
}
sessionStorage.layerVisibility_orig = JSON.stringify(
kml_layerVisibility_orig);
return kml_layerVisibility_orig;
} else {
return JSON.parse(localStorage.WME_KeepMyLayers_lV);
}
};
// the following blocks of code needs cleaning up....
if (document.getElementById('iKMLtempUndo') !== null &&
$("a.kml-icn").length < 4) {
kml[2] = 0; //reset counter
if (typeof myKMLayers !== "undefined" &&
myKMLayers.reset !== undefined && myKMLayers.reset === true) {
var kml_layerVisibility_orig = convertLayersToObj(),
kml_layerVisibility_kmlayers = JSON.parse(localStorage.WME_KeepMyLayers_lV),
kml_layerNames = Object.keys(kml_layerVisibility_orig),
kml_numlnames = kml_layerNames.length,
kml_toggledLayers = [];
kml[3] = 0;
while (kml_numlnames--) {
if (kml_layerVisibility_kmlayers[kml_layerNames[kml_numlnames]] !== undefined) {
if (kml_layerVisibility_orig[kml_layerNames[kml_numlnames]] !==
kml_layerVisibility_kmlayers[kml_layerNames[kml_numlnames]]
) {
kml_toggledLayers[kml[3]++] = kml_layerNames[kml_numlnames];
}
}
}
//TOG = kml_toggledLayers;
//KML = myKMLayers;
var nToggled = kml_toggledLayers.length;
if (nToggled !== 0) {
//kmllog('Layer visibilities were reset to preferred default setting.', '/');
$('#iKMLtempUndo').wrap(
'<a href="javascript:void(0)" class="kml-icn"></a>');
$('#iKMLtempUndo').toggleClass("kml-icn-off");
document.getElementById("iKMLtempUndo").onclick = function () {
var kml_tog = nToggled;
while (kml_tog--) {
kml_W_map_layers[kml_layerSwitcher.uniqueName[kml_toggledLayers[
kml_tog]]]
.setVisibility(!kml_W_map_layers[kml_layerSwitcher.uniqueName[
kml_toggledLayers[kml_tog]]].getVisibility());
}
};
} // else do nothing, as there is nothing to undo bc layers were not reset
}
} else if ($("a.kml-icn").length > 3) {
kml[2] = 0;
return true; //button already enabled
} else if (kml[2]++ < 30) {
setTimeout(enableUndoKMLayersReset, 200);
} else {
console.warn('WMEKMLayers:',
'Unable to activate "Undo KMLayers Reset".',
'Element #iKMLtempUndo not found on page.');
}
};
//----------------------------------------------------------------------
/* ["toggleLiveUsers", "toggleRouteCheckerScript", "toggleJunctionAngleInfo",
"toggleWMEClosestSegment", "toggleRoadClosures", "toggleEditableAreas",
"toggleUpdateRequests", "toggleMapProblems", "toggleSpeedcameras", "toggleJunctionboxes",
"togglePlaceupdates", "togglePlaces", "toggleAreaManagers", "toggleGPSpoints",
"toggleRoads", "toggleCities", "toggleSatelliteImagery"] */
var checkForReqLayers = function (permalink) {
switch (true) {
case permalink.indexOf('&mapUp') !== -1:
return "toggleUpdateRequests";
case permalink.indexOf('&ven') !== -1:
return "togglePlaces";
case permalink.indexOf('&mapPr') !== -1:
return "toggleMapProblems";
case permalink.indexOf('&bigJ') !== -1:
return "toggleJunctionboxes";
case permalink.indexOf('&cam') !== -1:
return "toggleSpeedcameras";
default:
return false;
}
};
//----------------------------------------------------------------------
var resetLayersToSavedKMLayers = function (kml_exclude) {
//kmllog('resetLayersToSavedKMLayers(' + kml_exclude + ')', '/');
var resetLayersCatchUp = function (callback) {
// check if any W.map.layers are missing compared to saved set
var maxWait = 20, //4 seconds
kml_wait = 0,
kml_m = visibleMyKMLayersAccelName.length,
kmlWaitAccelName = [];
while (kml_m--) {
// Identify missing layers due to slower loading time
if (switcherAccelObj[visibleMyKMLayersAccelName[kml_m]] === undefined) {
kmlWaitAccelName.push(visibleMyKMLayersAccelName[kml_m]);
}
}
//kmllog('Missed setting layers for ' + kmlWaitAccelName);
var waitForMissedLayers = function () {
var kml_layerSwitcher_m = getWazeMapLayersFromSwitcher(kml_W_map_layers),
switcherAccelObj_m = kml_layerSwitcher_m.accelerator,
kmlWaitAccelName_m = [],
kml_m = kmlWaitAccelName.length;
//kmllog('start kml_m = ' + kml_m);
//kmllog('kml_wait = ' + kml_wait);
while (kml_m--) {
if (switcherAccelObj_m[kmlWaitAccelName[kml_m]] !== undefined) {
kml_W_map_layers[switcherAccelObj_m[kmlWaitAccelName[
kml_m]]].setVisibility(
visibleMyKMLayersAccelObj[kmlWaitAccelName[kml_m]]);
/*kmllog(kmlWaitAccelName[kml_m] + 'visibility set to ' +
visibleMyKMLayersAccelObj[kmlWaitAccelName[kml_m]],
'/');*/
} else {
kmlWaitAccelName_m.push(kmlWaitAccelName);
}
} //while
kmlWaitAccelName = kmlWaitAccelName_m;
if (kml_wait++ < maxWait && kml_m) {
setTimeout(waitForMissedLayers, 200);
} else {
callback(kml_layerSwitcher_m);
}
};
}; //resetLayersCatchUp()
if (typeof myKMLayers !== "undefined" && !myKMLayers) {
var kml_layerSwitcher = getWazeMapLayersFromSwitcher(kml_W_map_layers),
switcherAccelObj = kml_layerSwitcher.accelerator,
switcherAccelNames = Object.keys(switcherAccelObj),
kml_sw = switcherAccelNames.length,
kml_lname,
visibleMyKMLayersAccelObj = myKMLayers.visibleInLayersMenu[myKMLayers.idx],
visibleMyKMLayersAccelName = Object.keys(visibleMyKMLayersAccelObj);
// Adjust layer visibility if necessary
if (kml_exclude) visibleMyKMLayersAccelObj[kml_exclude] = true;
kml[4] = 0;
while (kml_sw--) {
kml_lname = switcherAccelNames[kml_sw];
kml_W_map_layers[switcherAccelObj[kml_lname]].setVisibility(!!visibleMyKMLayersAccelObj[kml_lname]);
}
myKMLayers.reset = true;
resetLayersCatchUp(enableUndoKMLayersReset);
//setTimeout(enableUndoKMLayersReset, 500);
}
};
// ---------------------------------------------------------------------
var applyAdditionalKMLSettings = function () {
//kmllog('applyAdditionalKMLSettings()', '/');
// ['&x', '&b', '&l', '&1', '&5', '&2']; //disable, beta, lang, city, am, roads
if (localStorage.WME_KMLSettings.indexOf('&1') !== -1) {
kml_W_map_layers[1].setOpacity(1);
//kmllog('Opacity of Cities layer increased.', '/');
} else {
kml_W_map_layers[1].setOpacity(0.5);
//kmllog('Opacity of Cities layer at default.', '/');
}
if (localStorage.WME_KMLSettings.indexOf('&5') !== -1) {
kml_W_map_layers[5].setOpacity(0.6);
//kmllog('Opacity of AM layer decreased.', '/');
} else {
kml_W_map_layers[5].setOpacity(1);
//kmllog('Opacity of AM layer at default.', '/');
}
if (localStorage.WME_KMLSettings.indexOf('&2') !== -1) {
kml_W_map_layers[2].setOpacity(0.8);
//kmllog('Opacity of Roads layer decreased.', '/');
} else {
kml_W_map_layers[2].setOpacity(1);
//kmllog('Opacity of Roads layer at default.', '/');
}
};
// ---------------------------------------------------------------------
var runSecondaryKMLayersCheck = function () {
//kmllog('runSecondaryKMLayersCheck()', '/');
if (localStorage.WME_KMLSettings === undefined) {
localStorage.WME_KMLSettings = ':';
}
if (localStorage.WME_KMLSettings.indexOf('&x') !== -1) { // user has set WMEKMLayers to be disabled
console.log('WMEKMLayers:',
'Autocheck of KeepMyLayers at startup is disabled (2).');
return false;
} else {
var myKMLayers = getSavedKMLayers();
//kmllog('Secondary check completed. Any saved layers will be applied (2).', '/');
if (myKMLayers) {
return myKMLayers;
} else {
return false;
}
}
};
//======================================================================
myKMLayers = runSecondaryKMLayersCheck();
//KML = myKMLayers;
if (myKMLayers) {
resetLayersToSavedKMLayers(checkForReqLayers(location.href));
}
applyAdditionalKMLSettings();
//======================================================================
var userResetOfLayersToSavedKMLayers = function () {
//kmllog('userResetOfLayersToSavedKMLayers()', '/');
if (getSavedKMLayers()) {
resetLayersToSavedKMLayers(false);
} else {
//kmllog('Nothing to reset.', '/');
return false;
}
};
//----------------------------------------------------------------------
// Beta Editor Toggle Button
var insertKMLBetaToggle = function (kmlBetaToggle) {
//kmllog('insertKMLBetaToggle()', '/');
var toggleBetaToggle = function (e, disableBetaTog) {
var getGMBetaValue = function (callback) {
setTimeout(function () {
callback(GM_getValue("WMEKMLayers_Beta"))
}, 0);
};
var enableKMLBetaToggle = function (kmlBetaToggleGM) {
//localStorage.WME_KMLSettings = localStorage.WME_KMLSettings.replace('#b', '&b');
// kmllog('kmlBetaToggleGM = ' + kmlBetaToggleGM)
kmlBetaToggleGM = (kmlBetaToggleGM.substr(kmlBetaToggleGM.indexOf('-') + 1) == "true");
// kmllog('WMEKMLayers_Beta = ' + kmlBetaToggleGM)
setTimeout(function () {
GM_setValue("WMEKMLayers_Beta", kmlBetaToggleGM)
}, 0);
document.getElementById('cbKMLtoggle').disabled = false;
document.getElementById('cbKMLtoggle').checked = kmlBetaToggleGM;
document.getElementsByClassName('kml-toggle-innerD')[0].className = "kml-toggle-inner";
document.getElementsByClassName('kml-toggle-switchD')[0].className = "kml-toggle-switch";
//setTimeout(function () {
// document.getElementsByClassName('kml-toggle')[0].ondblclick = toggleBetaToggle;
//}, 100);
};
var disableKMLBetaToggle = function () {
var kmlBetaToggleGM;
//localStorage.WME_KMLSettings = localStorage.WME_KMLSettings.replace('&b', '#b');
kmlBetaToggleGM = 'disabled-' + document.getElementById('cbKMLtoggle').checked;
setTimeout(function () {
GM_setValue("WMEKMLayers_Beta", kmlBetaToggleGM)
}, 0);
//kmllog('WMEKMLayers_Beta = ' + kmlBetaToggleGM)
document.getElementById('cbKMLtoggle').disabled = true;
document.getElementsByClassName('kml-toggle-inner')[0].className = "kml-toggle-innerD";
document.getElementsByClassName('kml-toggle-switch')[0].className = "kml-toggle-switchD";
//setTimeout(function () {
// document.getElementsByClassName('kml-toggle')[0].onclick = toggleBetaToggle;
//}, 100);
};
//kmllog('disableBetaTog = ' + disableBetaTog)
if (disableBetaTog === undefined || disableBetaTog === null) {
//kmllog("cbKMLtoggle status: " + document.getElementById('cbKMLtoggle').disabled);
if (document.getElementById('cbKMLtoggle').disabled) { //enable it
//kmllog('Enabling Beta Toggle...')
getGMBetaValue(enableKMLBetaToggle);
} else {
//kmllog('Disabling Beta Toggle...')
disableKMLBetaToggle();
}
} else if (disableBetaTog) {
disableKMLBetaToggle();
} else {
getGMBetaValue(enableKMLBetaToggle);
}
};
if ($('#user-details').length !== 0 && $('#cbKMLtoggle').length === 0) {
kml[4] = 0; //reset counter
//kmllog('kmlBetaToggle (before) = ' + kmlBetaToggle, '/');
if (kmlBetaToggle === undefined) {
kmlBetaToggle = !!GM_getValue("WMEKMLayers_Beta");
}
(kmlBetaToggle) ? kmlBetaToggle = 'checked': kmlBetaToggle = '';
//kmllog('kmlBetaToggle (after) = ' + kmlBetaToggle, '/');
$('#user-details').prepend(
'<div class="kml-toggle-container"><div class="kml-toggle">' +
'<input type="checkbox" name="kml-toggle" class="kml-toggle-checkbox" id="cbKMLtoggle"' +
kmlBetaToggle + '>' +
'<label class="kml-toggle-label" for="cbKMLtoggle">' +
'<span class="kml-toggle-inner"></span>' +
'<span class="kml-toggle-switch"></span></label></div></div>');
document.getElementById('cbKMLtoggle').onclick = function () {
setTimeout(function () {
GM_setValue("WMEKMLayers_Beta",
document.getElementById('cbKMLtoggle').checked);
}, 0)
};
document.getElementsByClassName('kml-toggle')[0].ondblclick = toggleBetaToggle;
/*if (localStorage.WME_KMLSettings.indexOf('#b') !== -1) {
toggleBetaToggle(null, true);
}*/
} else if ($('#cbKMLtoggle').length > 0) {
kml[4] = 0;
return true;
} else if (kml[4]++ < 20) {
setTimeout(insertKMLBetaToggle, 400);
} else {
console.warn('WMEKMLayers:',
'Unable to insert "Beta-Editor Toggle".',
'Element #user-details not found on page.')
}
};
//----------------------------------------------------------------------
var showKMLPrefsPanel = function () {
//kmllog('showKMLPrefsPanel()', '/');
// setup dimensions of settings box
var kmlInitStatus = !!(location.host.indexOf('editor-beta') + 1);
var applyKMLayersSettings = function () {
//kmllog('cbKML_0 checked? ' + document.getElementById("cbKML_0").checked,'/');
if (document.getElementById("cbKML_0").checked) {
setTimeout(function () {
GM_setValue("WMEKMLayers_Beta", kmlInitStatus)
}, 0);
/*kmllog(
'Beta toggle selected... adding var into GM scope and page.', '/')*/
insertKMLBetaToggle(kmlInitStatus);
} else {
/*kmllog(
'Beta toggle not selected... removing var from GM scope.', '/')*/
setTimeout(function () {
GM_deleteValue("WMEKMLayers_Beta")
}, 0);
document.getElementsByClassName('kml-toggle-container')[0].remove();
//kmllog('WMEKMLayers_Beta = ' + GM_deleteValue("WMEKMLayers_Beta"), '/')
}
//kmllog('cbKML_1 checked? ' + document.getElementById("cbKML_1").checked,'/');
if (document.getElementById("cbKML_1").checked) {
/*kmllog(
'Remove language specs from PL... adding var to GM scope.', '/')*/
setTimeout(function () {
GM_setValue("WMEKMLayers_Lang", true)
}, 0);
} else {
/*kmllog(
'Not removing lang specs from PL... var no longer in GM scope.', '/'
)*/
setTimeout(function () {
GM_deleteValue("WMEKMLayers_Lang")
}, 0);
}
var storeStr = ':';
if ($('#cbKML_5')[0].checked) storeStr += '&x'; //disable KML
if ($('#cbKML_0')[0].checked) storeStr += '&b'; //beta
if ($('#cbKML_1')[0].checked) storeStr += '&l'; //lang
if ($('#cbKML_2')[0].checked) storeStr += '&1'; //city
if ($('#cbKML_3')[0].checked) storeStr += '&5'; //am
if ($('#cbKML_4')[0].checked) storeStr += '&2'; //roads
localStorage.WME_KMLSettings = storeStr;
localStorage.WME_KeepMyLayers = JSON.stringify(myKMLayers);
applyAdditionalKMLSettings();
document.getElementById("KMLsettings").remove();
};
var kmlOptions, kmlSettingsUI;
// setup checkbox list for UI
kmlOptions = [
'Show WME Beta Editor toggle in the left side-panel', //[0]
'Remove language specifications from clicked permalinks', //[1]
'Increase the opacity of city polygons to make them more visible', //[2] layer 1 - 1city
'Make area manager polygons more translucent', //[3] layer 5 - 5am
'Add a small amount of transparency to Roads layer', //[4] layer 2 - 2roads
'Disable checking layers at startup'
]; //[5] xx
kmlSettingsUI =
'<div id="KMLsettings" class="kml-panel-blackout">' +
'<div class="kml-panel">' +
' <i id="iKMLsettings" class="icon-cog icon-4x pull-left fa fa-cog fa-4x fa-pull-left"></i>' +
' <h2>KeepMyLayers Preferences</h2>' +
' <hr class="kml-panel-hr">' +
' <div class="kml-panel-section">';
//TODO: Clean the following code up....
var selectedKML = Array(kmlOptions.length),
allStr = ['b', '&l', '&1', '&5', '&2', '&x'], //beta, lang, city, am, roads, disable
kmlayersBetaChk = GM_getValue("WMEKMLayers_Beta"),
kmlayersLangChk = GM_getValue("WMEKMLayers_Lang"),
cbKMLSettingsStr;
if (localStorage.WME_KMLSettings === undefined) {
localStorage.WME_KMLSettings = ':';
cbKMLSettingsStr = ':';
} else {
cbKMLSettingsStr = localStorage.WME_KMLSettings;
}
// Check for beta toggle setting in two locations for consistency
// Ensure consistency between vars in GM scope and settings saved in localStorage:
// ...Beta Toggler
if (localStorage.WME_KMLSettings.indexOf("&b") === -1) { // if not a saved setting in localStorage
if (kmlayersBetaChk === true || kmlayersBetaChk === false) { // but var exists in GM and defined as either T/F
localStorage.WME_KMLSettings += "&b";
cbKMLSettingsStr += "&b";
}
}
// ...Language specification in permalinks
if (localStorage.WME_KMLSettings.indexOf("&l") === -1) { // if not a saved setting in localStorage
if (kmlayersLangChk === true) { // but var exists in GM scope and is TRUE
localStorage.WME_KMLSettings += "&l";
cbKMLSettingsStr += "&l";
}
}
// Setup KMLayers settings panel
var kml_s, numKmlOpt = kmlOptions.length;
for (kml_s = 0; kml_s < numKmlOpt; kml_s++) {
(cbKMLSettingsStr.indexOf(allStr[kml_s]) !== -1) ? selectedKML[kml_s] =
' checked': selectedKML[kml_s] = ' ';
kmlSettingsUI +=
'<div class="controls-container">' +
'<input type="checkbox" id="cbKML_' + kml_s +
'" class="btn btn-default"' + selectedKML[kml_s] +
'></input>' +
'<label for="cbKML_' + kml_s + '">' + kmlOptions[kml_s] +
'</label>' +
'</div>';
}
kmlSettingsUI += '</div>' +
'<div style="font-size: 9pt; font-style: italic; margin-left: 35px; margin-top: 0px; margin-bottom: 0px;">' +
' Does not include any of the above settings' +
'</div>' +
'<hr class="kml-panel-hr">' +
'<div class="kml-panel-btn">' +
' <div id="KMLnote" style="line-height: 10pt; color: #D36343; position: absolute; left: 0px; display: inline-block; text-align: left; ' +
' width: 300px; vertical-align: middle">' + //line-height: 15px; height: 40px;
'' + // notes and layers menu go here
' </div>' +
' <div style="position: absolute; right: 0px; display: inline-block;">' +
' <button id="btnKMLsave" style="width: 85px" class="btn btn-primary kml-panel-btn">Save</button>' +
' <button id="btnKMLcancel" class="btn btn-default kml-panel-btn">Cancel</button>' +
' </div>' +
'</div></div></div>';
$('#map').append(kmlSettingsUI);
kmlSettingsUI = null;
// Notice about neding to save default layers
if (!getSavedKMLayers()) {
$('#KMLnote').append(
'<span style="font-size:10px">' +
'To save a default layers setting, select your layers under the Layer Switcher menu and then click ' +
' <div style="color: #48758C; font-size: 11pt; font-style: normal; margin-right: 4px; display:inline-block" ' +
' class="icon-save fa fa-save kml-icn-nsave"></div> (bottom-right).' +
'</span>'
);
} else { // Dropdown menu of saved layer settings
$('#KMLnote').append(
'<div class="" style="display: inline-block; vertical-align: middle;">' +
' <select id="selKMLset" class="" style="width: 200px;"></select>' +
' <div style="display: inline-block; vertical-align: middle;">' +
' <div id="addKMLset" style="color: #AAAAAA; margin-left: 4px; display:inline-block; cursor: pointer;" class="icon-plus-sign icon-2x fa fa-plus-circle fa-2x"></div>' +
' <div id="removeKMLset" style="color: #AAAAAA; margin-left: 4px; display:inline-block; cursor: pointer;" class="icon-minus-sign icon-2x fa fa-minus-circle fa-2x"></div>' +
'</div></div>' +
'');
var layerSetSelection = document.getElementById("selKMLset"),
addLayerSetBtn = document.getElementById("addKMLset"),
removeLayerSetBtn = document.getElementById("removeKMLset"),
btnKMLsaveLayers = document.getElementById("iKMLsaveLayers"),
kml_sel, numSets = myKMLayers.layerSetNames.length;
for (kml_sel = 0; kml_sel < numSets; kml_sel++) {
layerSetSelection.add(new Option(myKMLayers.layerSetNames[kml_sel]));
};
layerSetSelection.selectedIndex = myKMLayers.idx;
layerSetSelection.value = myKMLayers.layerSetNames[myKMLayers.idx];
layerSetSelection.onchange = function () {
myKMLayers.idx = layerSetSelection.selectedIndex;
if (Object.keys(myKMLayers.visibleInLayersMenu[myKMLayers.idx]).length === 0) {
btnKMLsaveLayers.classList.add('kml-icn-nsave');
} else {
btnKMLsaveLayers.classList.remove('kml-icn-nsave');
}
};
addLayerSetBtn.onclick = function () {
var newKMLayerSetName = prompt("Please enter a name", ""),
newKMLayerOpt = document.createElement('option');
newKMLayerOpt.appendChild(document.createTextNode(newKMLayerSetName));
layerSetSelection.appendChild(newKMLayerOpt);
layerSetSelection.selectedIndex = myKMLayers.layerSetNames.length;
myKMLayers.idx = myKMLayers.layerSetNames.length;
myKMLayers.layerSetNames[myKMLayers.idx] = newKMLayerSetName;
myKMLayers.visibleInLayersMenu[myKMLayers.idx] = {};
btnKMLsaveLayers.classList.add('kml-icn-nsave');
};
removeLayerSetBtn.onclick = function () {
if (myKMLayers.layerSetNames.length > 1) {
myKMLayers.layerSetNames.splice(layerSetSelection.selectedIndex, 1)
myKMLayers.visibleInLayersMenu.splice(layerSetSelection.selectedIndex, 1)
layerSetSelection.removeChild(layerSetSelection.options[layerSetSelection.selectedIndex]);
myKMLayers.idx = myKMLayers.layerSetNames.length - 1;
layerSetSelection.selectedIndex = myKMLayers.idx;
layerSetSelection.value = myKMLayers.layerSetNames[myKMLayers.idx];
}
};
}
document.getElementById('btnKMLsave').onclick = applyKMLayersSettings;
document.getElementById('btnKMLcancel').onclick = function () {
document.getElementById("KMLsettings").remove();
var tempResetHolder = myKMLayers.reset;
myKMLayers = getSavedKMLayers();
myKMLayers.reset = tempResetHolder;
if (Object.keys(myKMLayers.visibleInLayersMenu[myKMLayers.idx]).length === 0) {
btnKMLsaveLayers.classList.add('kml-icn-nsave');
} else {
btnKMLsaveLayers.classList.remove('kml-icn-nsave');
}
};
};
//======================================================================
var initKMLButtons = function () {
//kmllog('inside initKMLButtons()', '/');
if (document.getElementById("layer-switcher-list") && document.getElementById("iKMLsaveLayers") === null) {
kml[6] = 0; //reset counter
var panelHeight = 350,
panelWidth = 540,
kmlStyle = document.createElement("style");
// Create CSS container element
kmlStyle.type = "text/css";
kmlStyle.id = "kml-css-container";
// CSS for KMLayers icons under Layers dropdown menu
kmlStyle.innerHTML =
'div.kml-icn { position: absolute; display: inline-block; vertical-align: middle; ' +
' bottom: 0px; right: 0px; padding: 0; margin: 0px 10px 10px 0px; }\n' +
'.kml-icn-nsave { font-weight: 400; color: #D36343 !important; } \n' + // '.kml-icn-save { position: relative; display: block; bottom: 45px; right: 0px }\n' +
'.kml-icn-btn { position: relative; display: inline-block; padding-left: 4px; padding-right: 4px; }\n' + //right: 30px; top: 10px; 'width: 12px; height: 12px;
'.kml-icn:active, .kml-icn:focus, .kml-icn:hover, .kml-icn.active { ' +
' text-decoration: none; background-image: none; outline: 0; ' +
' -webkit-box-shadow: none; box-shadow: none; cursor: pointer }\n' +
'.kml-icn-off, .kml-icn-off:hover, .kml-icn-off:focus { ' +
' color: #B1D4DF !important; cursor: default !important; }\n' +
'span.kml-icn-btn { padding: 0; margin: 0px 10px 10px 0px; }\n';
// CSS for settings panel
kmlStyle.innerHTML +=
'div.kml-panel-blackout { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; ' +
' background: rgba(0,0,0,0.5); z-index: 2000; }\n' +
'div.kml-panel-clear { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; ' +
' background: transparent; z-index: 2001; }\n' +
'.kml-panel { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); ' +
' width: ' + panelWidth + 'px; ' + //height: ' + panelHeight + 'px; ' +
' padding: 10px; margin: 0; overflow-y: auto; overflow-x: auto; word-wrap: break-word; ' +
' background-color: white; box-shadow: 0px 5px 20px #555555; ' +
' border: 1px solid #858585; border-radius: 10px; }\n' +
'.kml-panel h2 { margin-top:10px; margin-bottom: 10px; font-size: 20pt; font-weight: bold; text-align: left; color: #C0C0C0 }\n' +
'div.kml-panel-section {display: block; font-size: 12pt; text-align: left; padding: 0px 5px; }\n' +
'.kml-panel-hr { display: block; border: 0; height: 0; border-top: 1px solid rgba(0, 0, 0, 0.1); ' +
' border-bottom: 1px solid rgba(255, 255, 255, 0.3); ' +
' margin-top: 8px; margin-bottom: 12px; }\n' +
'.kml-panel-btn { margin: 0px 5px 0px; padding: 0px 15px; display: inline-block; height: 32px; }\n' +
'div.kml-panel-btn {display: block; position: relative; padding: 0; width: 480px; margin: auto; ' +
' vertical-align: middle; height: 40px; }\n' +
'.kml-panel ul>li {padding-bottom: 4px}';
// CSS for beta-editor toggle
kmlStyle.innerHTML +=
'.kml-toggle-container { position: absolute; right: 10px; top: 10px; }\n' +
'.kml-toggle { position: relative; width: 40px; ' +
' -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; }\n' +
'.kml-toggle-checkbox { display: none; }\n' +
'.kml-toggle-label { display: block; overflow: hidden; cursor: pointer; border: 2px solid #DADBDC; border-radius: 20px; }\n' +
'.kml-toggle-inner { display: block; width: 200%; margin-left: -100%; transition: margin 0.2s ease-in 0s; }\n' +
'.kml-toggle-inner:before, .kml-toggle-inner:after { ' +
' display: block; float: left; width: 50%; height: 19px; ' +
' padding: 0; line-height: 20px; font-size: 10px; box-sizing: border-box; }\n' +
'.kml-toggle-inner:before { content: ""; padding-left: 5px; background-color: #FC6C70; }\n' +
'.kml-toggle-inner:after { content: ""; padding-right: 5px; background-color: #93C4D3; }\n' +
'.kml-toggle-switch { display: block; width: 22px; margin: 0px; ' +
' position: absolute; top: 0; bottom: 0; right: 17px; background: #FFFFFF; ' +
' border: 2px solid #DADBDC; border-radius: 20px; transition: all 0.2s ease-in 0s; }\n' +
'.kml-toggle-checkbox:checked + .kml-toggle-label .kml-toggle-inner { margin-left: 0; }\n' +
'.kml-toggle-checkbox:checked + .kml-toggle-label .kml-toggle-switch { right: 0px; }\n' +
'.kml-toggle-switchD { display: block; width: 22px; margin: 1px 0px 1px; ' +
' position: absolute; top: 0; bottom: 0; right: 17px; background: #FFFFFF; ' +
' border: 2px solid #DADBDC; border-radius: 20px; }\n' +
'.kml-toggle-innerD { display: block; width: 200%; margin-left: -100%; }\n' +
'.kml-toggle-innerD:before, .kml-toggle-innerD:after { ' +
' display: block; float: left; width: 50%; height: 20px; ' +
' padding: 0; line-height: 20px; font-size: 10px; box-sizing: border-box; }\n' +
'.kml-toggle-innerD:before { content: ""; padding-left: 5px; background-color: #DADBDC; }\n' +
'.kml-toggle-innerD:after { content: ""; padding-right: 5px; background-color: #DADBDC; }\n';
document.body.appendChild(kmlStyle);
kmlStyle = null;
// Add save layers icon to Layers switcher dropdown panel
var kmlDiv = document.createElement("div");
kmlDiv.className = "kml-icn";
kmlDiv.innerHTML =
'<a href="javascript:void(0)" class="kml-icn"><div id="iKMLsaveLayers" class="icon-save fa fa-save kml-icn-btn reload-button" data-toggle="tooltip" title="Save Current Set of Layers"></div></a>' +
'<a href="javascript:void(0)" class="kml-icn"><div id="iKMLsettings" class="icon-cog fa fa-cog kml-icn-btn reload-button" data-toggle="tooltip" title="Preferences"></div></a>' +
'<a href="javascript:void(0)" class="kml-icn"><div id="iKMLresetLayers" class="icon-magic fa fa-magic kml-icn-btn reload-button" data-toggle="tooltip" title="Reset Layers to My Default Set"></div></a>' +
'<div id="iKMLtempUndo" class="icon-eye-open fa fa-eye kml-icn-btn reload-button kml-icn-off" data-toggle="tooltip" title="Toggle Layers from Permalink"></div>';
document.getElementById("layer-switcher-list").parentNode.insertBefore(
kmlDiv, document.getElementById("layer-switcher-list").nextSibling);
kmlDiv = null;
//------------------ Setup event listeners -------------------
var btnKMLsaveLayers = document.getElementById("iKMLsaveLayers");
// buttons under layer menu
btnKMLsaveLayers.onclick = saveKMLayers;
document.getElementById("iKMLsettings").onclick = showKMLPrefsPanel;
document.getElementById("iKMLresetLayers").onclick = userResetOfLayersToSavedKMLayers;
$(".kml-icn-btn[data-toggle=tooltip]").tooltip();
//{ placement: 'bottom' }
// doubleclick layer menu shortcut for KMLayers preferences panel
document.getElementById("layer-switcher-menu").ondblclick = showKMLPrefsPanel;
// reset temporary disabling of beta editor redirection
var kmlInitStatus;
//if (localStorage.WME_KMLSettings.indexOf('#b') !== -1) {
// insertKMLBetaToggle();
//} else if (localStorage.WME_KMLSettings.indexOf('&b') !== -1) {
kmlInitStatus = GM_getValue("WMEKMLayers_Beta");
//kmllog('WMEKMLayers_Beta = ' + kmlInitStatus, '/');
if (kmlInitStatus !== true && kmlInitStatus !== false) {
//localStorage.WME_KMLSettings = localStorage.WME_KMLSettings.replace('&b', '#b');
GM_setValue("WMEKMLayers_Beta", "disabled-true");
insertKMLBetaToggle();
} else {
insertKMLBetaToggle(kmlInitStatus);
}
//}
// Make save button red if nothing saved
//kmllog('Checking for localStorage.WME_KeepMyLayers_lV');
setTimeout(function () {
switch (true) {
case !myKMLayers:
case !myKMLayers.visibleInLayersMenu:
case !Object.keys(myKMLayers.visibleInLayersMenu[myKMLayers.idx]).length:
btnKMLsaveLayers.classList.add('kml-icn-nsave');
break;
}
//kmllog('Done checking for localStorage.WME_KeepMyLayers_lV');
}, 300);
} else if (btnKMLsaveLayers !== null) {
kml[6] = 0;
return true; //icons already inserted into page
} else if (kml[6]++ < 20) {
setTimeout(initKMLButtons, 500);
} else {
console.warn('WMEKMLayers:',
'Unable to insert WME KeepMyLayers under Layers menu.',
'Element #layer-switcher-list not found on page.')
}
};
var initPermalinkReplacer = function () {
// make sure the welcome log-in screen is not up
//document.getElementById("welcome-popup").className.lastIndexOf('hide') === -1
if (document.getElementsByClassName('WazeControlPermalink')) {
var kmlAltBetaKey = !!(location.host.indexOf('editor-b') + 1), //if beta, then true
kmlPLselector = eval('document.querySelectorAll(\'a[href*="' + location.host +
location.pathname + '"]\')'), //NOTE: this returns an array
kmlPLElement = document.getElementsByClassName('WazeControlPermalink')[0].children[0],
kmlPLhref = kmlPLElement.getAttribute("href"),
kmlNewPL = kmlPLhref.substr(kmlPLhref.indexOf(location.pathname));
//if (kmlAltBetaKey) kmlPLElement = $("div > a:first-of-type.fa-link");
//else kmlPLElement = $("div > a:first-of-type.icon-link");
/*
var kmlPreventDefault = function(e) {
e.preventDefault();
};
var kmlAllowDefault = function(e) {
return true;
};
*/
var updateWMEPermalink = function (togSuffix) {
if (kmlAltBetaKey) { //if true, then beta-editor, so change PL to prod
kmlPLElement.setAttribute("href",
'https://www.waze.com' + kmlNewPL + togSuffix);
} else { // else, production editor
kmlPLElement.setAttribute("href",
'https://editor-beta.waze.com' + kmlNewPL + togSuffix);
}
};
var toggledBetaKey = false,
numPLsOnPage = kmlPLselector.length,
kml_sel;
for (kml_sel = 0; kml_sel < numPLsOnPage; kml_sel++) {
kmlPLselector[kml_sel].onmouseover = function (e) {
//if (e.altKey) {
// toggledBetaKey = true;
// updateWMEPermalink('&b=0');
//} else {
kmlPLselector[kml_sel].addEventListener("keypress", function (ee) {
if (ee.altKey) {
toggledBetaKey = true;
updateWMEPermalink('&b=0');
}
});
//}
};
kmlPLselector[kml_sel].onmouseout = function (e) {
if (toggledBetaKey) {
toggledBetaKey = false;
}
updateWMEPermalink('');
};
}
} else {
setTimeout(initPermalinkReplacer, 500);
}
/*var kmlKeys = {},
shiftE, ctrlE;
var kmlKeyPresses = function(e) {
kmlKeys['ctrlKey'] = e.ctrlKey;
kmlKeys['shiftKey'] = e.shiftKey;
if (e.shiftKey) shiftE = e;
if (e.ctrlKey) ctrlE = e;
if (kmlKeys.ctrlKey && kmlKeys.shiftKey) {
document.addEventListener("click", kmlPreventDefault, false);
kmlPreventDefault(shiftE);
kmlPreventDefault(ctrlE);
kmlAltBetaKey = !kmlAltBetaKey;
toggleBetaRedirect(true);
updateWMEPermalink();
Waze.map.events.register("move", Waze.map, updateWMEPermalink);
}
};
var kmlKeyUps = function(e) {
kmlKeys['ctrlKey'] = (kmlKeys.ctrlKey && !e.ctrlKey);
kmlKeys['shiftKey'] = (kmlKeys.shiftKey && !e.shiftKey);
if (e.shiftKey) shiftE = e;
if (e.ctrlKey) ctrlE = e;
if (!kmlKeys.ctrlKey && !kmlKeys.shiftKey) {
kmlAllowDefault(shiftE);
kmlAllowDefault(ctrlE);
kmlAltBetaKey = !kmlAltBetaKey
toggleBetaRedirect(false);
updateWMEPermalink();
Waze.map.events.unregister("move", Waze.map, updateWMEPermalink);
}
};
document.removeEventListener("click", kmlAllowDefault, false);
//document.addEventListener("keydown", kmlKeyPresses, false);
//document.addEventListener("keyup", kmlKeyUps, false);
*/
};
//==========================================================================
//kmllog('Stepping into initKMLButtons()...', '/');
initKMLButtons();
initPermalinkReplacer();
//==========================================================================
window.addEventListener("beforeunload", function () {
if (localStorage.WME_KMLSettings !== undefined &&
localStorage.WME_KMLSettings.indexOf('&x') === -1) { // user has NOT set WMEKMLayers to be disabled
resetLocalWithKMLayers();
}
}, false);
// ~~~ TEMP (clean-up) ~~~
localStorage.removeItem("WME_KML_Settings");
GM_deleteValue("WMEKML_Beta");
GM_deleteValue("WMEKML_Lang");
//kmllog('Done performing cleanup')
// ~~~~~~~~~~~~~~~~~~~~~~~
var kmlNoticePanel = function (kmlPanelType, kmlVersion, kmlNoticeText, kmlForumURL) {
var kmlNoticeUI = document.createElement("div");
kmlNoticeUI.id = "divKMLnotice";
kmlNoticeUI.innerHTML =
'<i id="iKMLnotice" class="icon-exclamation-sign icon-4x pull-left fa fa-exclamation-circle fa-4x fa-pull-left"></i>' +
'<h2>WME KMLayers Update</h2>' +
'<hr class="kml-panel-hr">';
kmlNoticeUI.innerHTML +=
'<div class="kml-panel-section" style="font-size: 10pt">' +
kmlNoticeText +
'</div>' +
'<div style="margin-top: 6px; font-size: 10pt">' +
'For details and screenshots of new features, please visit the forum post <a href="' + kmlForumURL + '" target="_blank">here</a>.' +
'</div>' +
'<div style="margin-top:10px; font-size: 8pt;"> ' +
'Note: This is a one-time message for WME KMLayers v. ' + kmlVersion +
'</div>';
kmlNoticeUI.innerHTML += '<hr class="kml-panel-hr">' +
'<div style="position: relative; width: 70px; display: block; left: 148px; bottom: 0px; margin: 10px; vertical-align: middle; padding: 0">' +
'<button id="btnKMLokay" style="width: 70px" class="btn btn-primary kml-panel-btn">OK</button></div>' +
'</div>';
switch (kmlPanelType) {
case "child": //requires also opening the settings panel beforehand
kmlNoticeUI.className = "kml-panel";
kmlNoticeUI.style.width = "500px";
kmlNoticeUI.style.height = "270px";
document.getElementsByClassName("kml-panel")[0].appendChild(kmlNoticeUI);
break;
case "blackout":
kmlNoticeUI.innerHTML = '<div class="kml-panel" style="width: 420px; padding-left: 15px; padding-right: 15px;">' +
kmlNoticeUI.innerHTML;
kmlNoticeUI.innerHTML += '</div>';
kmlNoticeUI.className = "kml-panel-blackout"
document.getElementById("map").appendChild(kmlNoticeUI);
break;
case "clear":
kmlNoticeUI.innerHTML = '<div class="kml-panel" style="width: 420px; padding-left: 15px; padding-right: 15px;">' +
kmlNoticeUI.innerHTML;
kmlNoticeUI.innerHTML += '</div>';
kmlNoticeUI.className = "kml-panel-clear"
document.getElementById("map").appendChild(kmlNoticeUI);
break;
}
//document.getElementsByClassName("kml-panel")[0].appendChild(kmlNoticeUI);
document.getElementById('btnKMLokay').onclick = function () {
document.getElementById('divKMLnotice').remove();
localStorage.WME_KMLSettings += '&' + kmlVersion;
};
};
/*
if (localStorage.WME_KMLSettings.indexOf(':') === -1) { // Display one-time message
showKMLPrefsPanel();
var kmlNoticeUI = document.createElement("div");
kmlNoticeUI.className = "kml-panel";
kmlNoticeUI.id = "divKMLalert";
kmlNoticeUI.style.width = "500px";
kmlNoticeUI.style.height = "270px";
kmlNoticeUI.innerHTML =
'<i id="iKMLsettings" class=" icon-exclamation-sign icon-4x pull-left fa fa-exclamation-circle fa-4x fa-pull-left"></i>' +
'<h2>WME KMLayers Update</h2>' +
'<hr class="kml-panel-hr">';
kmlNoticeUI.innerHTML +=
'<div class="kml-panel-section" style="font-size: 10pt">' +
'Thanks for everyone\'s input! KeepMyLayers has been updated to version 0.3.1 to work with both latest stable versions of Chrome and Firefox. ' +
'Several enhancements and bug-fixes were made. ' +
'A faster URL and layer interception method has been implemented, which means <b>you must resave your preferences</b>. (Sorry) ' +
' ' +
'For the full update list, please visit the forums <a href="https://www.waze.com/forum/viewtopic.php?f=819&t=172335&p=1301210&sid=9c9cc45ed5b8e9ab575506b1a0cf4b59#p1301210">here</a>. ' +
'<div style="margin-top:10px"> ' +
'Note: You will not see this message again for this domain, unless you clear your browser\'s local storage. ' +
'</div></div>';
kmlNoticeUI.innerHTML += '<hr class="kml-panel-hr">' +
'<div class="kml-panel-btn" style="position: absolute; display: block; left: 40%; bottom: 0px; width: 60px; margin: 10px; vertical-align: middle; padding: 0">' +
'<button id="btnKMLokay" style="width: 70px" class="btn btn-primary kml-panel-btn">OK</button></div>';
document.getElementsByClassName("kml-panel")[0].appendChild(kmlNoticeUI);
document.getElementById('btnKMLokay').onclick = function () {
document.getElementById('divKMLalert').remove();
localStorage.WME_KMLSettings += ':'
};
}
*/
if (localStorage.WME_KMLSettings.indexOf('&' + kmlVersion) === -1) { //Display update notice
var kmlNoticeText, kmlForumURL = "https://www.waze.com/forum/viewtopic.php?f=819&t=172335&p=1304954#p1304954";
kmlNoticeText = 'Woohoo! Another update! This update to version 0.4 brings you the following new beta features and bug-fixes:<p>' +
'<ul><li>Thanks to rickzabel\'s help, the bug that caused part of the URL to repeat itself <i>ad infinitum</i> has been found and squashed</li>' +
'<li>Double-click on the beta/prod toggle to quickly disable/enable</li>' +
'<li>Press <b>Alt</b>-key once while hovering the cursor over any PL within the WME window to switch it to the alternative editor (i.e., beta or prod) </li>' +
'<li>Within the preference pane, you can now add additional sets of layers to accommodate various editing contexts </li>' +
'<li>Double-click on the WME Layer menu icon for easy access to the KMLayers preference pane</li>' +
'</ul>';
kmlNoticePanel("blackout", kmlVersion, kmlNoticeText, kmlForumURL);
}
//KML = myKMLayers;
};
////////////////////////////////////////////////////////////////////////////
function waitForWazeMap_KMLayers() {
var waitCount = 0,
maxWait = 100; //5 seconds
//kmllog('Waiting for Waze...', '/');
var tryInit_KMLayers = function () {
try {
if (waitCount < maxWait &&
"undefined" !== typeof (unsafeWindow) && unsafeWindow.$ &&
unsafeWindow.Waze && unsafeWindow.Waze.map && unsafeWindow.Waze.map.layers
) {
//kmllog('Initializing...', '/');
KeepMyLayers();
} else if (waitCount++ < maxWait) {
setTimeout(tryInit_KMLayers, 50);
} else {
//kmllog('waitCount = ' + waitCount, '/');
//kmllog('typeof Waze = ' + typeof(unsafeWindow.Waze), '/');
//kmllog('Waze.map = ' + !!unsafeWindow.Waze.map, '/');
//kmllog('Waze.map.layers = ' + !!unsafeWindow.Waze.map.layers, '/');
console.error('WMEKMLayers:',
'KeepMyLayers could not find necessary Waze map objects.');
}
} catch (err) {
console.error(
'WMEKMLayers:',
'WME KeepMyLayers failed to load',
'due to some kind of technical script error. :(');
console.error(err);
}
};
tryInit_KMLayers();
};
////////////////////////////////////////////////////////////////////////////
document.onreadystatechange = function () {
//kmllog('<' + document.readyState + '>', '/');
if (document.readyState === 'interactive') {
//kmllog('Inside DOM interactive event interval.', '/');
setTimeout(waitForWazeMap_KMLayers, 0);
if (localStorage.WME_KMLSettings !== undefined &&
localStorage.WME_KMLSettings.indexOf('&x') !== -1) { // user has set WMEKMLayers to be disabled
console.log("WMEKMLayers:",
"Autocheck of KeepMyLayers at startup is disabled (1).");
} else {
resetLocalWithKMLayers();
}
}
};
})();