WME Wazebar

Displays a bar at the top of the editor that displays inbox, forum & wiki links

目前为 2017-03-10 提交的版本。查看 最新版本

// ==UserScript==
// @name         WME Wazebar
// @namespace    https://gf.qytechs.cn/users/30701-justins83-waze
// @version      0.3.0
// @description  Displays a bar at the top of the editor that displays inbox, forum & wiki links
// @author       JustinS83
// @include      https://beta.waze.com/*
// @include      https://www.waze.com/forum/*
// @include      https://www.waze.com/editor/*
// @include      https://www.waze.com/editor/*
// @include      https://www.waze.com/*/editor/*
// @exclude      https://www.waze.com/user/editor*
// @connect      wazestatus.wordpress.com
// @grant        GM_xmlhttpRequest
// ==/UserScript==

    var WazeBarSettings = [];
var isBeta = false;
var inboxInterval;
var forumInterval;
var forumPage = false;

(function() {
    'use strict';

      function bootstrap(tries) {
        tries = tries || 1;

        if (/forum/.test(location.href) || (W && W.map &&
            W.model && W.loginManager.user &&
            $ &&
            $('.app.container-fluid.show-sidebar').length > 0)) {
            preinit();
        } else if (tries < 1000)
            setTimeout(function () {bootstrap(tries++);}, 200);
    }

    bootstrap();

    function preinit(){
        isBeta = /beta/.test(location.href);
        forumPage= /forum/.test(location.href);

        if(forumPage){
            loadScript("https://use.fontawesome.com/73f886e1d5.js");
            loadScript("https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", init);
        }
        else
            init();
    }

    function loadScript(url, callback) {
        var script = document.createElement("script");
        script.type = "text/javascript";

        if (script.readyState) { //IE
            script.onreadystatechange = function () {
                if (script.readyState == "loaded" || script.readyState == "complete") {
                    script.onreadystatechange = null;
                    callback();
                }
            };
        } else { //Others
            script.onload = function () {
                callback();
            };
        }

        script.src = url;
        document.getElementsByTagName("head")[0].appendChild(script);
    }

    function init(){
        LoadSettingsObj();
        console.log("here");
        console.log(WazeBarSettings);
        if(!forumPage || (forumPage && WazeBarSettings.DisplayWazeForum)){
            injectCss();
            BuildWazebar();
            BuildSettingsInterface();
        }
    }

    function BuildWazebar(){
        $('#Wazebar').remove();
        var $Wazebar = $("<div>", {style:"min-height:20px", id:"Wazebar"});
        $Wazebar.html([
            '<div class="WazeBarIcon" id="WazeBarSettingsButton"><i class="fa fa-cog" aria-hidden="true"></i></div>',
            '<div class="WazeBarIcon" id="WazeBarRefreshButton"><i class="fa fa-refresh" aria-hidden="true"></i></div>',
            '<div class="WazeBarIcon" id="WazeBarFavoritesIcon"><i class="fa fa-star" aria-hidden="true""></i>',
            '<div id="WazeBarFavorites">',
            '<div id="WazeBarFavoritesList"></div>',
            '<div><div style="float:left;">',//textboxes div
            '<label for="WazeBarURL" style="display:inline-block; width:40px;">URL </label><input type="text" id="WazeBarURL" size="10" style="border: 1px solid #000000; height:20px;"/></br>',
            '<label for="WazeBarText" style="display:inline-block; width:40px;">Text </label><input type="text" id="WazeBarText" size="10" style="border: 1px solid #000000; height:20px;"/>',
			'</div>', //End textboxes div
			'<div style="float:right; text-align:center;">',//button div
			'<button id="WazeBarAddFavorite">Add</button>',
			'</div>',//End button div
			'</div></div></div>',
            '<div class="WazeBarText" id="Inbox"><a href="https://www.waze.com/forum/ucp.php?i=pm&folder=inbox" target="_blank">Forum Inbox</a></div>',
            WazeBarSettings.WMEBetaForum ? '<div class="WazeBarText" id="WMEBetaForum"><a href="https://www.waze.com/forum/viewforum.php?f=211" ' + LoadNewTab() + '>WME Beta Forum</a></div>' : '',
            WazeBarSettings.scriptsForum ? '<div class="WazeBarText" id="Scripts"><a href="https://www.waze.com/forum/viewforum.php?f=819" ' + LoadNewTab() + '>Scripts Forum</a></div>' : '',
            WazeBarSettings.USSMForum ? '<div class="WazeBarText" id="USSMForum"><a href="https://www.waze.com/forum/viewforum.php?f=1286" ' + LoadNewTab() + '>US SM Forum</a></div>' : '',
            WazeBarSettings.USChampForum ? '<div class="WazeBarText" id="USChampForum"><a href="https://www.waze.com/forum/viewforum.php?f=338" ' + LoadNewTab() + '>US Champ Forum</a></div>' : '',
            WazeBarSettings.USWikiForum ? '<div class="WazeBarText" id="USWikiForum"><a href="https://www.waze.com/forum/viewforum.php?f=1636" ' + LoadNewTab() + '>US Wiki Forum</a></div>' : '',
            BuildRegionForumEntries(),
            BuildStateForumEntries(),
            BuildStateUnlockEntries(),
            BuildRegionWikiEntries(),
            BuildStateWikiEntries(),
            WazeBarSettings.NAServerUpdate ? '<div style="display:inline;" id="WazebarStatus">NA Server Update: </div>' : ''
        ].join(' '));

        if(forumPage)
            $('.waze-header').before($Wazebar);
        else
            $('.app.container-fluid.show-sidebar').before($Wazebar);

        if(!isBeta){
            GetPMCount();
            checkForums();
            StartIntervals();
        }

        $('#WazeBarAddFavorite').click(function(){
            console.log($('#WazeBarURL').val());
            if($('#WazeBarText').val() !== "" && $('#WazeBarURL').val() !== ""){
                var url = $('#WazeBarURL').val();
                if(!url.startsWith("http://"))
                    url = "http://"+url;
                WazeBarSettings.Favorites.push({href:url, text:$('#WazeBarText').val()});
                $('#WazeBarURL').val("");
                $('#WazeBarText').val("");
                LoadFavorites();
                SaveSettings();
            }
        });

        $('#WazeBarFavoritesIcon').mouseleave(function() {
            $('#WazeBarFavorites').css({'display':'none'});
        });

        $('#WazeBarFavoritesIcon').mouseenter(function(){
            $('#WazeBarFavorites').css({'display':'block'});
        });

        LoadFavorites();

        $('#WazeBarFavoritesList a').click(function(){
            $('#WazeBarFavorites').css({'display':'none'});
        });

        if(WazeBarSettings.NAServerUpdate){
            GM_xmlhttpRequest({
                method: "GET",
                url: 'https://wazestatus.wordpress.com/category/main/feed',
                onload: ParseStatusFeed
            });
        }

        $('#WazeBarSettingsButton').click(function(){
            $('#WazeBarSettings').css({'visibility':'visible'});
            SelectedRegionChanged();
            setChecked('WazeForumSetting', WazeBarSettings.DisplayWazeForum);
            setChecked('WMEBetaForumSetting', WazeBarSettings.WMEBetaForum);
            setChecked('ScriptsForum', WazeBarSettings.scriptsForum);
            setChecked('USSMForumSetting', WazeBarSettings.USSMForum);
            setChecked('USChampForumSetting', WazeBarSettings.USChampForum);
            setChecked('USWikiForumSetting', WazeBarSettings.USWikiForum);
            setChecked('NAServerUpdateSetting', WazeBarSettings.NAServerUpdate);
            $('#inboxInterval')[0].value = WazeBarSettings.inboxInterval;
            $('#forumInterval')[0].value = WazeBarSettings.forumInterval;
        });

        $('#WazeBarRefreshButton').click(function(){
            $('#WazeBarRefreshButton i').addClass('fa-spin');
            window.clearInterval(inboxInterval);
            window.clearInterval(forumInterval);
            GetPMCount();
            checkForums();
            StartIntervals();
            $('#WazeBarRefreshButton i').removeClass('fa-spin');
        });

        $('body > div.app.container-fluid.show-sidebar').css('height', 'calc(100vh - ' + $('#Wazebar').height() + 'px)');
        window.dispatchEvent(new Event('resize')); //otherwise the WME editing area shifts up under Wazebar
    }

    function LoadNewTab(){
        return forumPage ? "" : ' target="_blank"';
    }

    function LoadFavorites(){
        //WazeBarSettings.Favorites = [];
        //WazeBarSettings.Favorites.push({href:"https://wazeopedia.waze.com/wiki/USA/Waze_Map_Editor/Welcome", text:"Map Editor Welcome"});
        //WazeBarSettings.Favorites.push({href:"https://wazeopedia.waze.com/wiki/USA/Waze_etiquette", text:"Etiquette"});
        //WazeBarSettings.Favorites.push({href:"https://wazeopedia.waze.com/wiki/USA/Glossary", text:"Glossary"});
        $('#WazeBarFavoritesList').empty();
        var links = "";
        for(var i=0;i<WazeBarSettings.Favorites.length;i++){
            links += '<div style="position:relative;"><a href="' + WazeBarSettings.Favorites[i].href + '" target="_blank">' + WazeBarSettings.Favorites[i].text + '</a><i id="WazeBarFavoritesListClose' + i + '" style="position:absolute; right:0; top:0;" class="fa fa-times" title="Remove from favorites"></i></div>';
        }

        $('#WazeBarFavoritesList').prepend(links);

        $('[id^="WazeBarFavoritesListClose"]').click(function(){
            WazeBarSettings.Favorites.splice(Number(this.id.replace('WazeBarFavoritesListClose','')),1);
            SaveSettings();
            LoadFavorites();
        });
    }

    function StartIntervals(){
        inboxInterval = setInterval(GetPMCount,WazeBarSettings.inboxInterval * 60000);
        forumInterval = setInterval(checkForums, WazeBarSettings.forumInterval * 60000);
    }

    function GetPMCount(){
        $.get('https://www.waze.com/forum/ucp.php?i=pm&folder=inbox', function(Inbox){
            if(Inbox.indexOf("Inbox (") != -1){
                var count = Inbox.match(/Inbox \((\d+)\)/)[1];
                $('#PMCount').remove();
                $('#Inbox a').append("<span style='color:red;font-weight:bold;' id='PMCount'> (" + count + ")</span>");
            }
            else
                $('#PMCount').remove();
        });
    }

    function checkForums(){
        if(WazeBarSettings.WMEBetaForum)
            checkUnreadTopics("https://www.waze.com/forum/viewforum.php?f=211", "WMEBetaForum", "WMEBetaForumCount");
        if(WazeBarSettings.scriptsForum)
            checkUnreadTopics("https://www.waze.com/forum/viewforum.php?f=819", "Scripts", "ScriptsCount"); //Scripts
        if(WazeBarSettings.USSMForum)
            checkUnreadTopics("https://www.waze.com/forum/viewforum.php?f=1286", "USSMForum", "USSMForumCount");
        if(WazeBarSettings.USChampForum)
            checkUnreadTopics("https://www.waze.com/forum/viewforum.php?f=338", "USChampForum", "USChampForumCount");
        if(WazeBarSettings.USWikiForum)
            checkUnreadTopics("https://www.waze.com/forum/viewforum.php?f=1636", "USWikiForum", "USWikiForumCount");

        Object.keys(WazeBarSettings.header).forEach(function(state,index) {
            if(WazeBarSettings.header[state].forum)
                checkUnreadTopics(WazeBarSettings.header[state].forum, state.replace(' ', '_') + 'Forum', state.replace(' ', '_')+'ForumCount');

            if(WazeBarSettings.header[state].unlock){
                var url = "https://www.waze.com/forum/search.php?keywords=" + state + "&terms=all&author=&sv=0&fid%5B%5D=622&sc=0&sf=all&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search";
                if(state === "Virginia")
                    url = "https://www.waze.com/forum/search.php?keywords=West%2BVirginia&terms=all&author=&sv=0&fid%5B%5D=622&sc=0&sf=all&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search";
                checkUnreadTopics(url, state.replace(' ', '_')+'Unlock', state.replace(' ', '_')+'UnlockCount');
            }
        });
        Object.keys(WazeBarSettings.header.region).forEach(function(region,index){
            if(WazeBarSettings.header.region[region].forum)
                checkUnreadTopics(WazeBarSettings.header.region[region].forum, region + 'Forum', region+'ForumCount');
        });
    }

    function checkUnreadTopics(path, parentID, spanID){
        var count = 0;
        $.get(path, function(page){
            var result = page.match(/topic_unread/g);
            count += result? result.length :0;
            result = page.match(/sticky_unread/g);
            count += result? result.length :0;
            result = page.match(/announce_unread/g);
            count += result? result.length :0;

            $('#' + spanID).remove();
            if(count > 0)
                $('#'+parentID+' a').append("<span style='color:red;font-weight:bold;' id='" + spanID + "'> (" + count + ")</span>");
        });

        return count;
    }

    function ParseStatusFeed(data){
        var re = /<title>NA map tiles were successfully updated to:(.*?)<\/title>/;
        var result = data.responseText.match(re)[1].trim();
        $('#WazebarStatus').append(result);
    }

    function BuildStateForumEntries(){
        var stateForums = "";
        Object.keys(WazeBarSettings.header).forEach(function(state,index) {
            if(WazeBarSettings.header[state].forum)
                stateForums += '<div class="WazeBarText" id="' + state.replace(' ', '_') + 'Forum"><a href="' + WazeBarSettings.header[state].forum + '" ' + LoadNewTab() + '>' + WazeBarSettings.header[state].abbr + ' Forum</a></div>';
        });
        return stateForums;
    }

    function BuildStateWikiEntries(){
        var stateWikis = "";
        Object.keys(WazeBarSettings.header).forEach(function(state,index) {
            if(WazeBarSettings.header[state].wiki)
                stateWikis += '<div class="WazeBarText"><a href="' + WazeBarSettings.header[state].wiki + '" target="_blank">' + WazeBarSettings.header[state].abbr + ' Wiki</a></div>';
        });
        return stateWikis;
    }

    function BuildStateUnlockEntries(){
        var stateUnlocks = "";
        Object.keys(WazeBarSettings.header).forEach(function(state,index) {
            if(WazeBarSettings.header[state].unlock){
                if(state !== "Virginia")
                    stateUnlocks += '<div class="WazeBarText" id="' + state.replace(' ', '_') + 'Unlock"><a href="https://www.waze.com/forum/search.php?keywords=' + state + '&terms=all&author=&sv=0&fid%5B%5D=622&sc=0&sf=all&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search" ' + LoadNewTab() + '>' + WazeBarSettings.header[state].abbr + ' Unlock</a></div>';
                else
                    stateUnlocks += '<div class="WazeBarText" id="' + state.replace(' ', '_') + 'Unlock"><a href="https://www.waze.com/forum/search.php?keywords=West%2BVirginia&terms=all&author=&sv=0&fid%5B%5D=622&sc=0&sf=all&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search" ' + LoadNewTab() + '>' + WazeBarSettings.header[state].abbr + ' Unlock</a></div>';
                //stateUnlocks += '<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;"><a href="' + WazeBarSettings.header[state].wiki + '" target="_blank">' + WazeBarSettings.header[state].abbr + ' Wiki</a></div>';
            }
        });
            return stateUnlocks;
    }

    function BuildRegionForumEntries(){
        //'<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;" id="GLR"><a href="https://www.waze.com/forum/viewforum.php?f=943" target="_blank">GLR Forum</a></div>',
        var regionForums = "";
        if(WazeBarSettings.header.region){
            Object.keys(WazeBarSettings.header.region).forEach(function(region,index) {
                if(WazeBarSettings.header.region[region].forum)
                    regionForums += '<div class="WazeBarText" id="' + region + 'Forum"><a href="' + WazeBarSettings.header.region[region].forum + '" ' + LoadNewTab() + '>' + WazeBarSettings.header.region[region].abbr + ' Forum</a></div>';
            });
        }
        return regionForums;
    }

    function BuildRegionWikiEntries(){
        //'<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;"><a href="https://wazeopedia.waze.com/wiki/USA/USA/Great_Lakes" target="_blank">GLR Wiki</a></div>',
        var regionWikis = "";
        if(WazeBarSettings.header.region){
            Object.keys(WazeBarSettings.header.region).forEach(function(region,index) {
                if(WazeBarSettings.header.region[region].wiki)
                    regionWikis += '<div class="WazeBarText"><a href="' + WazeBarSettings.header.region[region].wiki + '" target="_blank">' + WazeBarSettings.header.region[region].abbr + ' Wiki</a></div>';
            });
        }
        return regionWikis;
    }

    function BuildSettingsInterface(){
        var $section = $("<div>", {style:"padding:8px 16px", id:"WazeBarSettings"});
        $section.html([
            '<div id="WazeBarSettings" style="visibility:hidden; position:fixed; top:20%; left:50%; width:388px; min-height:150px; z-index:1000; background-color:white; border-width:3px; border-style:solid; border-radius:10px; padding:4px;">',
            '<input type="checkbox" id="WazeForumSetting" /><label for="WazeForumSetting">Display on Forum pages</label></br>',
            '<div style="margin-left:5px;">',
            'Inbox check frequency <input type="number" id="inboxInterval" min="1" style="width:50px;"></br>',
            'Forum check frequency <input type="number" id="forumInterval" min="1" style="width:50px;"></br>',
            '<input type="checkbox" id="WMEBetaForumSetting" /><label for="WMEBetaForumSetting">WME Beta Forum</label></br>',
            '<input type="checkbox" id="ScriptsForum" /><label for="ScriptsForum">Scripts Forum</label></br>',
            '<input type="checkbox" id="USSMForumSetting" /><label for="USSMForumSetting">US SM Forum</label></br>',
            (!forumPage && W.loginManager.user.isCountryManager()) ? '<input type="checkbox" id="USChampForumSetting" /><label for="USChampForumSetting">US Champ Forum</label></br>' : '',
            '<input type="checkbox" id="USWikiForumSetting" /><label for="USWikiForumSetting">US Wiki Forum</label></br>',
            '<input type="checkbox" id="NAServerUpdateSetting" /><label for="NAServerUpdateSetting">NA Server Update</label></br>',
            'Region ' + BuildRegionDropdown() + '<input type="checkbox" id="RegionForumSetting"/><label for="RegionForumSetting">Forum</label> <input type="checkbox" id="RegionWikiSetting"/><label for="RegionWikiSetting">Wiki</label>',
            '<div id="WBStates"></div>',
            '</div></br>',//close region div
            '<div style="position: relative; float:left; display: inline-block"><a href="https://www.waze.com/forum/viewtopic.php?f=819&t=219816" target="_blank">Forum thread</a></div>',
            '<div style="position: relative; float: right; display: inline-block">', //save/cancel buttons
            '<button id="WBSettingsSave" style="width: 85px;" class="btn btn-primary">Save</button>',
            '<button id="WBSettingsCancel" class="btn btn-default">Cancel</button>',
            '</div>',//end save/cancel buttons
            '</div>'
            ].join(' '));

        if(forumPage)
            $('body').append($section.html());
        else
            $("#WazeMap").append($section.html());

        //Region forum checkbox toggled
        $('#RegionForumSetting').change(function(){
            var selectedItem = $('#WBRegions')[0].options[$('#WBRegions')[0].selectedIndex];
            var region = selectedItem.value;
            var forum = selectedItem.getAttribute("data-forum");
            var abbr = selectedItem.getAttribute("data-abbr");
            if(!WazeBarSettings.header.region)
                WazeBarSettings.header.region = {};

            if(WazeBarSettings.header.region[region] == null)
                WazeBarSettings.header.region[region] = {};
            if(this.checked){
                WazeBarSettings.header.region[region].forum = forum;
                WazeBarSettings.header.region[region].abbr = abbr;
            }
            else
                delete WazeBarSettings.header.region[region].forum;

            SaveSettings();
        });

        //Region wiki checkbox toggled
        $('#RegionWikiSetting').change(function(){
            var selectedItem = $('#WBRegions')[0].options[$('#WBRegions')[0].selectedIndex];
            var region = selectedItem.value;
            var wiki = selectedItem.getAttribute("data-wiki");
            var abbr = selectedItem.getAttribute("data-abbr");

            if(!WazeBarSettings.header.region)
                WazeBarSettings.header.region = {};
            if(WazeBarSettings.header.region[region] == null)
                WazeBarSettings.header.region[region] = {};
            if(this.checked){
                WazeBarSettings.header.region[region].wiki = wiki;
                WazeBarSettings.header.region[region].abbr = abbr;
            }
            else
                delete WazeBarSettings.header.region[region].wiki;

            SaveSettings();
        });

        //Cancel button clicked
        $("#WBSettingsCancel").click(function(){
            $('#WazeBarSettings').css({'visibility':'hidden'}); //hide the settings window
        });

        //Save button clicked
        $("#WBSettingsSave").click(function(){
            WazeBarSettings.DisplayWazeForum = isChecked('WazeForumSetting');
            WazeBarSettings.WMEBetaForum = isChecked('WMEBetaForumSetting');
            WazeBarSettings.scriptsForum = isChecked('ScriptsForum');
            WazeBarSettings.USSMForum = isChecked('USSMForumSetting');
            WazeBarSettings.USChampForum = isChecked('USChampForumSetting');
            WazeBarSettings.USWikiForum = isChecked('USWikiForumSetting');
            WazeBarSettings.inboxInterval = $('#inboxInterval')[0].value;
            WazeBarSettings.forumInterval = $('#forumInterval')[0].value;
            WazeBarSettings.NAServerUpdate = isChecked('NAServerUpdateSetting');
            SaveSettings();

            BuildWazebar();
            $('#WazeBarSettings').css({'visibility':'hidden'}); //hide the settings window
        });

        //When they change the selected region, build a new state div.
        $('#WBRegions').change(SelectedRegionChanged);
    }

    function SelectedRegionChanged(){
        setChecked('RegionForumSetting', false);
        setChecked('RegionWikiSetting', false);

        var selectedItem = $('#WBRegions')[0].options[$('#WBRegions')[0].selectedIndex];
        var region = selectedItem.value;
        var wiki = selectedItem.getAttribute("data-wiki");
        var forum = selectedItem.getAttribute("data-forum");

        if(!WazeBarSettings.header.region)
            WazeBarSettings.header.region = {};
        if(WazeBarSettings.header.region[region] == null)
            WazeBarSettings.header.region[region] = {};

        if(WazeBarSettings.header.region[region].forum && WazeBarSettings.header.region[region].forum !== "")
            setChecked('RegionForumSetting', true);
        if(WazeBarSettings.header.region[region].wiki && WazeBarSettings.header.region[region].wiki !== "")
            setChecked('RegionWikiSetting', true);

        BuildStatesDiv();
    }

    function BuildStatesDiv(){
        //Get the state list for this region
            var selectedItem = $('#WBRegions')[0].options[$('#WBRegions')[0].selectedIndex];
            var states = selectedItem.getAttribute("data-states").split(",");
            var forum = selectedItem.getAttribute("data-forum");
            var wiki = selectedItem.getAttribute("data-wiki");

            var statesHTML = "";
            $('#WBStates').empty();

            for(var i=0;i<states.length;i++){
                statesHTML = states[i] + " <input type='checkbox' id='"+states[i].replace(' ', '_')+"ForumSetting'/><label for='"+states[i].replace(' ', '_')+"ForumSetting'>Forum</label> <input type='checkbox' id='"+states[i].replace(' ', '_')+"WikiSetting'/><label for='"+states[i]+"WikiSetting'>Wiki</label> <input type='checkbox' id='"+states[i].replace(' ', '_')+"UnlockSetting'/><label for='"+states[i]+"UnlockSetting'>Unlock</label></br>";
                $('#WBStates').append(statesHTML);
                //Check the forum/wiki/unlock checkboxes if it has been saved
                if(WazeBarSettings.header[states[i]]){
                    if(WazeBarSettings.header[states[i]].forum && WazeBarSettings.header[states[i]].forum !== "")
                        setChecked(states[i].replace(' ', '_') + 'ForumSetting', true);
                    if(WazeBarSettings.header[states[i]].wiki && WazeBarSettings.header[states[i]].wiki !== "")
                        setChecked(states[i].replace(' ', '_') + 'WikiSetting', true);
                    if(WazeBarSettings.header[states[i]].unlock && WazeBarSettings.header[states[i]].unlock !== "")
                        setChecked(states[i].replace(' ', '_') + 'UnlockSetting', true);
                }

                $('#'+states[i].replace(' ', '_')+'ForumSetting').change(function() {
                    var state = this.id.replace('ForumSetting', '').replace('_', ' ');
                    if(!WazeBarSettings.header[state])
                        WazeBarSettings.header[state] = {};
                    if(this.checked){
                        WazeBarSettings.header[state].forum = States[state].forum;
                        WazeBarSettings.header[state].abbr = States[state].abbr;
                    }
                    else
                        delete WazeBarSettings.header[state].forum;

                    SaveSettings();
                });
                $('#'+states[i].replace(' ', '_')+'WikiSetting').change(function() {
                    var state = this.id.replace('WikiSetting', '').replace('_', ' ');
                    if(!WazeBarSettings.header[state])
                        WazeBarSettings.header[state] = {};
                    if(this.checked){
                        WazeBarSettings.header[state].wiki = States[state].wiki;
                        WazeBarSettings.header[state].abbr = States[state].abbr;
                    }
                    else
                        delete WazeBarSettings.header[state].wiki;

                    SaveSettings();
                });
                $('#'+states[i].replace(' ', '_')+'UnlockSetting').change(function() {
                    var state = this.id.replace('UnlockSetting', '').replace('_', ' ');
                    if(!WazeBarSettings.header[state])
                        WazeBarSettings.header[state] = {};
                    if(this.checked){
                        WazeBarSettings.header[state].unlock = "https://www.waze.com/forum/search.php?keywords=" + state + "&terms=all&author=&sv=0&fid%5B%5D=622&sc=0&sf=all&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search";
                        WazeBarSettings.header[state].abbr = States[state].abbr;
                    }
                    else
                        delete WazeBarSettings.header[state].unlock;

                    SaveSettings();
                });
            }
    }

    function BuildRegionDropdown(){
        var $places = $("<div>");
        $places.html([
            '<select id="WBRegions">',
            '<option value="Northwest" data-abbr="NWR" data-states="Alaska,Idaho,Montana,Washington,Oregon,Wyoming" data-forum="https://www.waze.com/forum/viewforum.php?f=565" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Northwest">Northwest</option>',
            '<option value="Southwest" data-abbr="SWR" data-states="Arizona,California,Colorado,Hawaii,Nevada,New Mexico,Utah" data-forum="https://www.waze.com/forum/viewforum.php?f=566" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Southwest">Southwest</option>',
            '<option value="Plains" data-abbr="PLN" data-states="Iowa,Kansas,Minnesota,Missouri,Nebraska,North Dakota,South Dakota" data-forum="https://www.waze.com/forum/viewforum.php?f=567" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Plains">Plains</option>',
            '<option value="South Central" data-abbr="SCR" data-states="Arkansas,Louisiana,Mississippi,Oklahoma,Texas" data-forum="https://www.waze.com/forum/viewforum.php?f=568" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/South_Central">South Central</option>',
            '<option value="Great Lakes" data-abbr="GLR" data-states="Illinois,Indiana,Michigan,Ohio,Wisconsin" data-forum="https://www.waze.com/forum/viewforum.php?f=943" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Great_Lakes">Great Lakes</option>',
            '<option value="South Atlantic" data-abbr="SAT" data-states="Kentucky,North Carolina,South Carolina,Tennessee" data-forum="https://www.waze.com/forum/viewforum.php?f=570" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/South_Atlantic">South Atlantic</option>',
            '<option value="Southeast" data-abbr="SER" data-states="Alabama,Florida,Georgia" data-forum="https://www.waze.com/forum/viewforum.php?f=944" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Southeast">Southeast</option>',
            '<option value="New England" data-abbr="NER" data-states="Connecticut,Maine,Massachusetts,New Hampshire,Rhode Island,Vermont" data-forum="https://www.waze.com/forum/viewforum.php?f=945" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/New_England">New England</option>',
            '<option value="Northeast" data-abbr="NOR" data-states="Delaware,New Jersey,New York,Pennsylvania" data-forum="https://www.waze.com/forum/viewforum.php?f=569" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Northeast">Northeast</option>',
            '<option value="Mid Atlantic" data-abbr="MAR" data-states="District of Columbia,Maryland,Virginia,West Virginia" data-forum="https://www.waze.com/forum/viewforum.php?f=946" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Mid_Atlantic">Mid Atlantic</option>',
            '<option value="Territories" data-abbr="ATR" data-states="Puerto Rico,US Virgin Islands,South Pacific Territories" data-forum="https://www.waze.com/forum/viewforum.php?f=953" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Territories">Territories</option>'
            ].join(' '));

        return $places.html();
    }

    var States = {};
    States.Alabama = {forum:"https://www.waze.com/forum/viewforum.php?f=213", wiki:"https://wazeopedia.waze.com/wiki/USA/Southeast", abbr:"AL"};
    States.Alaska = {forum:"https://www.waze.com/forum/viewforum.php?f=254", wiki:"https://wazeopedia.waze.com/wiki/USA/Alaska", abbr:"AK"};
    States.Arizona = {forum:"https://www.waze.com/forum/viewforum.php?f=652", wiki:"https://wazeopedia.waze.com/wiki/USA/Arizona", abbr:"AZ"};
    States.Arkansas = {forum:"https://www.waze.com/forum/viewforum.php?f=598", wiki:"https://wazeopedia.waze.com/wiki/USA/Arkansas", abbr:"AR"};
    States.California = {forum:"https://www.waze.com/forum/viewforum.php?f=251", wiki:"https://wazeopedia.waze.com/wiki/USA/California", abbr:"CA"};
    States.Colorado = {forum:"https://www.waze.com/forum/viewforum.php?f=654", wiki:"https://wazeopedia.waze.com/wiki/USA/Colorado", abbr:"CO"};
    States.Connecticut = {forum:"https://www.waze.com/forum/viewforum.php?f=247", wiki:"https://wazeopedia.waze.com/wiki/USA/Connecticut", abbr:"CT"};
    States.Delaware = {forum:"https://www.waze.com/forum/viewforum.php?f=575", wiki:"https://wazeopedia.waze.com/wiki/USA/Delaware", abbr:"DE"};
    States["District of Columbia"] = {forum:"https://www.waze.com/forum/viewforum.php?f=258", wiki:"https://wazeopedia.waze.com/wiki/USA/District_of_Columbia", abbr:"DC"};
    States.Florida = {forum:"https://www.waze.com/forum/viewforum.php?f=193", wiki:"https://wazeopedia.waze.com/wiki/USA/Southeast", abbr:"FL"};
    States.Georgia = {forum:"https://www.waze.com/forum/viewforum.php?f=214", wiki:"https://wazeopedia.waze.com/wiki/USA/Southeast", abbr:"GA"};
    States.Hawaii = {forum:"https://www.waze.com/forum/viewforum.php?f=305", wiki:"https://wazeopedia.waze.com/wiki/USA/Hawaii", abbr:"HA"};
    States.Idaho = {forum:"https://www.waze.com/forum/viewforum.php?f=648", wiki:"https://wazeopedia.waze.com/wiki/USA/Idaho", abbr:"ID"};
    States.Illinois = {forum:"https://www.waze.com/forum/viewforum.php?f=253", wiki:"https://wazeopedia.waze.com/wiki/USA/Illinois", abbr:"IL"};
    States.Indiana = {forum:"https://www.waze.com/forum/viewforum.php?f=631", wiki:"https://wazeopedia.waze.com/wiki/USA/Indiana", abbr:"IN"};
    States.Iowa = {forum:"https://www.waze.com/forum/viewforum.php?f=632", wiki:"https://wazeopedia.waze.com/wiki/USA/Iowa", abbr:"IA"};
    States.Kansas = {forum:"https://www.waze.com/forum/viewforum.php?f=628", wiki:"https://wazeopedia.waze.com/wiki/USA/Kansas", abbr:"KS"};
    States.Kentucky = {forum:"https://www.waze.com/forum/viewforum.php?f=571", wiki:"https://wazeopedia.waze.com/wiki/USA/Kentucky", abbr:"KY"};
    States.Louisiana = {forum:"https://www.waze.com/forum/viewforum.php?f=594", wiki:"https://wazeopedia.waze.com/wiki/USA/Louisiana", abbr:"LA"};
    States.Maine = {forum:"https://www.waze.com/forum/viewforum.php?f=583", wiki:"https://wazeopedia.waze.com/wiki/USA/Maine", abbr:"ME"};
    States.Maryland = {forum:"https://www.waze.com/forum/viewforum.php?f=246", wiki:"https://wazeopedia.waze.com/wiki/USA/Maryland", abbr:"MD"};
    States.Massachusetts = {forum:"https://www.waze.com/forum/viewforum.php?f=618", wiki:"https://wazeopedia.waze.com/wiki/USA/Massachusetts", abbr:"MA"};
    States.Michigan = {forum:"https://www.waze.com/forum/viewforum.php?f=630", wiki:"https://wazeopedia.waze.com/wiki/USA/Michigan", abbr:"MI"};
    States.Minnesota = {forum:"https://www.waze.com/forum/viewforum.php?f=259", wiki:"https://wazeopedia.waze.com/wiki/USA/Minnesota", abbr:"MN"};
    States.Mississippi = {forum:"https://www.waze.com/forum/viewforum.php?f=596", wiki:"https://wazeopedia.waze.com/wiki/USA/Mississippi", abbr:"MS"};
    States.Missouri = {forum:"https://www.waze.com/forum/viewforum.php?f=414", wiki:"https://wazeopedia.waze.com/wiki/USA/Missouri", abbr:"MO"};
    States.Montana = {forum:"https://www.waze.com/forum/viewforum.php?f=649", wiki:"https://wazeopedia.waze.com/wiki/USA/Montana", abbr:"MT"};
    States.Nebraska = {forum:"https://www.waze.com/forum/viewforum.php?f=634", wiki:"https://wazeopedia.waze.com/wiki/USA/Nebraska", abbr:"NE"};
    States.Nevada = {forum:"https://www.waze.com/forum/viewforum.php?f=651", wiki:"https://wazeopedia.waze.com/wiki/USA/Nevada", abbr:"NV"};
    States["New Hampshire"] = {forum:"https://www.waze.com/forum/viewforum.php?f=585", wiki:"https://wazeopedia.waze.com/wiki/USA/New_Hampshire", abbr:"NH"};
    States["New Jersey"] = {forum:"https://www.waze.com/forum/viewforum.php?f=249", wiki:"https://wazeopedia.waze.com/wiki/USA/New_Jersey", abbr:"NJ"};
    States["New Mexico"] = {forum:"https://www.waze.com/forum/viewforum.php?f=653", wiki:"https://wazeopedia.waze.com/wiki/USA/New_Mexico", abbr:"NM"};
    States["New York"] = {forum:"https://www.waze.com/forum/viewforum.php?f=250", wiki:"https://wazeopedia.waze.com/wiki/USA/New_York", abbr:"NY"};
    States["North Carolina"] = {forum:"https://www.waze.com/forum/viewforum.php?f=255", wiki:"https://wazeopedia.waze.com/wiki/USA/North_Carolina", abbr:"NC"};
    States["North Dakota"] = {forum:"https://www.waze.com/forum/viewforum.php?f=624", wiki:"https://wazeopedia.waze.com/wiki/USA/North_Dakota", abbr:"ND"};
    States.Ohio = {forum:"https://www.waze.com/forum/viewforum.php?f=261", wiki:"https://wazeopedia.waze.com/wiki/USA/Ohio", abbr:"OH"};
    States.Oklahoma = {forum:"https://www.waze.com/forum/viewforum.php?f=600", wiki:"https://wazeopedia.waze.com/wiki/USA/Oklahoma", abbr:"OK"};
    States.Oregon = {forum:"https://www.waze.com/forum/viewforum.php?f=647", wiki:"https://wazeopedia.waze.com/wiki/USA/Oregon", abbr:"OR"};
    States.Pennsylvania = {forum:"https://www.waze.com/forum/viewforum.php?f=215", wiki:"https://wazeopedia.waze.com/wiki/USA/Pennsylvania", abbr:"PA"};
    States["Rhode Island"] = {forum:"https://www.waze.com/forum/viewforum.php?f=577", wiki:"https://wazeopedia.waze.com/wiki/USA/Rhode_Island", abbr:"RI"};
    States["South Carolina"] = {forum:"https://www.waze.com/forum/viewforum.php?f=256", wiki:"https://wazeopedia.waze.com/wiki/USA/South_Carolina", abbr:"SC"};
    States["South Dakota"] = {forum:"https://www.waze.com/forum/viewforum.php?f=626", wiki:"https://wazeopedia.waze.com/wiki/USA/South_Dakota", abbr:"SD"};
    States.Tennessee = {forum:"https://www.waze.com/forum/viewforum.php?f=210", wiki:"https://wazeopedia.waze.com/wiki/USA/Tennessee", abbr:"TN"};
    States.Texas = {forum:"https://www.waze.com/forum/viewforum.php?f=237", wiki:"https://wazeopedia.waze.com/wiki/USA/Texas", abbr:"TX"};
    States.Utah = {forum:"https://www.waze.com/forum/viewforum.php?f=364", wiki:"https://wazeopedia.waze.com/wiki/USA/Utah", abbr:"UT"};
    States.Vermont = {forum:"https://www.waze.com/forum/viewforum.php?f=587", wiki:"https://wazeopedia.waze.com/wiki/USA/Vermont", abbr:"VT"};
    States.Virginia = {forum:"https://www.waze.com/forum/viewforum.php?f=580", wiki:"https://wazeopedia.waze.com/wiki/USA/Virginia", abbr:"VA"};
    States.Washington = {forum:"https://www.waze.com/forum/viewforum.php?f=201", wiki:"https://wazeopedia.waze.com/wiki/USA/Washington", abbr:"WA"};
    States["West Virginia"] = {forum:"https://www.waze.com/forum/viewforum.php?f=582", wiki:"https://wazeopedia.waze.com/wiki/USA/West_Virginia", abbr:"WV"};
    States.Wisconsin = {forum:"https://www.waze.com/forum/viewforum.php?f=387", wiki:"https://wazeopedia.waze.com/wiki/USA/Wisconsin", abbr:"WI"};
    States.Wyoming = {forum:"https://www.waze.com/forum/viewforum.php?f=650", wiki:"https://wazeopedia.waze.com/wiki/USA/Wyoming", abbr:"WY"};
    States["Puerto Rico"] = {forum:"https://www.waze.com/forum/viewforum.php?f=202", wiki:"https://wazeopedia.waze.com/wiki/USA/Puerto_Rico", abbr:"PR"};
    States["US Virgin Islands"] = {forum:"https://www.waze.com/forum/viewforum.php?f=677", wiki:"https://wazeopedia.waze.com/wiki/USA/Virgin_Islands", abbr:""};
    States["South Pacific Territories"] = {forum:"https://www.waze.com/forum/viewforum.php?f=954", wiki:"", abbr:""};

    function injectCss() {
        var css =  [
            '.WazeBarText {display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;}',
            '.WazeBarIcon {display:inline; margin-left:3px; cursor:pointer;}',
            '#WazeBarFavorites {max-height:300px; z-index:100; overflow:auto; display:none; position:absolute; background-color:#f9f9f9; min-width:180px; box-shadow:0px 8px 16px 0px rgba(0, 0, 0, 0.2);}',
            '#WazeBarFavoritesList div a {color:black; padding:12px 16px; text-decoration:none; display:block; text-align:left;}',
            '#WazeBarFavoritesList div a:hover {background-color:#f1f1f1}'
        ].join(' ');
        $('<style type="text/css">' + css + '</style>').appendTo('head');
    }

    function isChecked(checkboxId) {
        return $('#' + checkboxId).is(':checked');
    }

    function setChecked(checkboxId, checked) {
        $('#' + checkboxId).prop('checked', checked);
    }

    function LoadSettingsObj() {
        var loadedSettings;
        try{
            loadedSettings = $.parseJSON(localStorage.getItem("Wazebar_Settings"));
        }
        catch(err){
            loadedSettings = null;
        }

        var defaultSettings = {
            inboxInterval: 5,
            forumInterval: 2,
            scriptsForum: false,
            header: {region:{}},
            USSMForum: false,
            USChampForum: false,
            USWikiForum: false,
            NAServerUpdate: true,
            WMEBetaForum: false,
            DisplayWazeForum: false,
            Favorites: [{"href":"https://wazeopedia.waze.com/wiki/USA/Waze_Map_Editor/Welcome","text":"Map Editor Welcome"},{"href":"https://wazeopedia.waze.com/wiki/USA/Waze_etiquette","text":"Etiquette"},{"href":"https://wazeopedia.waze.com/wiki/USA/Glossary","text":"Glossary"}]
        };
        WazeBarSettings = loadedSettings ? loadedSettings : defaultSettings;
        for (var prop in defaultSettings) {
            if (!WazeBarSettings.hasOwnProperty(prop))
                WazeBarSettings[prop] = defaultSettings[prop];
        }
    }

    function SaveSettings() {
        if (localStorage) {
            /*
            Object.keys(obj).forEach(function(key,index) {
            // key: the name of the object key
            // index: the ordinal position of the key within the object
            });
            */
            var localsettings = {
                inboxInterval: WazeBarSettings.inboxInterval,
                forumInterval: WazeBarSettings.forumInterval,
                scriptsForum: WazeBarSettings.scriptsForum,
                header: WazeBarSettings.header,
                USSMForum: WazeBarSettings.USSMForum,
                USChampForum: WazeBarSettings.USChampForum,
                USWikiForum: WazeBarSettings.USWikiForum,
                NAServerUpdate: WazeBarSettings.NAServerUpdate,
                WMEBetaForum: WazeBarSettings.WMEBetaForum,
                Favorites: WazeBarSettings.Favorites,
                DisplayWazeForum: WazeBarSettings.DisplayWazeForum
            };

            localStorage.setItem("Wazebar_Settings", JSON.stringify(localsettings));
        }
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址