WME Wazebar

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

当前为 2021-06-17 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME Wazebar
  3. // @namespace https://greasyfork.org/users/30701-justins83-waze
  4. // @version 2020.06.17.02
  5. // @description Displays a bar at the top of the editor that displays inbox, forum & wiki links
  6. // @author JustinS83
  7. // @include https://beta.waze.com/*
  8. // @include https://www.waze.com/forum/*
  9. // @include https://webnew.waze.com/forum/*
  10. // @include https://www.waze.com/editor*
  11. // @include https://www.waze.com/*/editor*
  12. // @exclude https://www.waze.com/user/editor*
  13. // @require https://greasyfork.org/scripts/27023-jscolor/code/JSColor.js
  14. // @require https://greasyfork.org/scripts/27254-clipboard-js/code/clipboardjs.js
  15. // @connect status.waze.com
  16. // @grant GM_xmlhttpRequest
  17. // @contributionURL https://github.com/WazeDev/Thank-The-Authors
  18. // ==/UserScript==
  19.  
  20.  
  21. /* global W */
  22. /* ecmaVersion 2017 */
  23. /* global $ */
  24. /* global I18n */
  25. /* global _ */
  26. /* global WazeWrap */
  27. /* global require */
  28.  
  29. var WazeBarSettings = [];
  30. var isBeta = false;
  31. var inboxInterval;
  32. var forumInterval;
  33. var forumPage = false;
  34. var currentState = "";
  35. var States = {};
  36.  
  37. (function() {
  38. 'use strict';
  39.  
  40. function bootstrap(tries = 1) {
  41. if ((/forum/.test(location.href) && $('#control_bar_handler').css('visibility') === 'visible') || (typeof(W) != "undefined" && W && W.map &&
  42. W.model && W.loginManager.user &&
  43. $ &&
  44. W.model.states.top &&
  45. window.jscolor &&
  46. $('.app.container-fluid.show-sidebar').length > 0)) {
  47. preinit();
  48. } else if (tries < 1000)
  49. setTimeout(function () {bootstrap(++tries);}, 200);
  50. }
  51.  
  52. bootstrap();
  53.  
  54. function preinit(){
  55. isBeta = /beta/.test(location.href);
  56. forumPage= /forum/.test(location.href);
  57.  
  58. if(forumPage){
  59. loadScript("https://use.fontawesome.com/73f886e1d5.js", null);
  60. loadScript("https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", init);
  61. }
  62. else
  63. init();
  64. }
  65.  
  66. function loadScript(url, callback) {
  67. var script = document.createElement("script");
  68. script.type = "text/javascript";
  69.  
  70. if (script.readyState) { //IE
  71. script.onreadystatechange = function () {
  72. if (script.readyState == "loaded" || script.readyState == "complete") {
  73. script.onreadystatechange = null;
  74. if(callback != null)
  75. callback();
  76. }
  77. };
  78. } else { //Others
  79. script.onload = function () {
  80. if(callback != null)
  81. callback();
  82. };
  83. }
  84.  
  85. script.src = url;
  86. document.getElementsByTagName("head")[0].appendChild(script);
  87. }
  88.  
  89. function init(){
  90. LoadSettingsObj();
  91. LoadStatesObj();
  92. if(!forumPage || (forumPage && WazeBarSettings.DisplayWazeForum)){
  93. if(!forumPage && W.model.states.top !== null){
  94. currentState = W.model.states.top.name;
  95. W.map.events.register("zoomend", this, function() {
  96. setTimeout(updateCurrentStateEntries, 100);
  97. });
  98. W.map.events.register("moveend", this, function() {
  99. setTimeout(updateCurrentStateEntries, 100);
  100. });
  101. W.model.events.register("mergeend", this, function() {
  102. setTimeout(updateCurrentStateEntries, 100);
  103. });
  104. }
  105.  
  106. injectCss();
  107. BuildWazebar();
  108. BuildSettingsInterface();
  109. initColorPicker();
  110. if ($('#colorPickerForumFont')[0].jscolor){
  111. $('#colorPickerForumFont')[0].jscolor.fromString(WazeBarSettings.PlaceNameFontColor);
  112. $('#colorPickerWikiFont')[0].jscolor.fromString(WazeBarSettings.PlaceNameFontOutline);
  113. }
  114. }
  115. }
  116.  
  117. function updateCurrentStateEntries(){
  118. if(W.model.states.top !== null && currentState != W.model.states.top.name){
  119. //user panned/zoomed to a different state, so we need to update the current state forum & wiki entries
  120. BuildWazebar();
  121. currentState = W.model.states.top.name;
  122. }
  123. }
  124.  
  125. function initColorPicker(tries){
  126. tries = tries || 1;
  127.  
  128. if ($('#colorPickerForumFont')[0].jscolor ) {
  129. $('#colorPickerForumFont')[0].jscolor.fromString(WazeBarSettings.ForumFontColor);
  130. //$('#colorPickerForumFont')[0].jscolor.onChange = jscolorChanged;
  131.  
  132. $('#colorPickerWikiFont')[0].jscolor.fromString(WazeBarSettings.WikiFontColor);
  133. //$('#colorPickerWikiFont')[0].jscolor.onChange = jscolorChanged;
  134.  
  135. $('[id^="colorPicker"]')[0].jscolor.closeText = 'Close';
  136.  
  137. } else if (tries < 1000) {
  138. setTimeout(function () {initColorPicker(tries++);}, 200);
  139. }
  140. }
  141.  
  142. function jscolorChanged(){
  143. //WazeBarSettings.ForumFontColor = "#" + $('#colorPickerForumFont')[0].jscolor.toString();
  144. //WazeBarSettings.WikiFontColor = "#" + $('#colorPickerWikiFont')[0].jscolor.toString();
  145. //SaveSettings();
  146. //PIEPlaceNameLayer.styleMap.styles.default.defaultStyle.fontColor = settings.PlaceNameFontColor;
  147. //PIEPlaceNameLayer.styleMap.styles.default.defaultStyle.labelOutlineColor = settings.PlaceNameFontOutline;
  148. //DisplayPlaceNames();
  149. }
  150.  
  151. function BuildWazebar(){
  152. $('#Wazebar').remove();
  153. var $Wazebar = $("<div>", {style:"min-height:20px;", id:"Wazebar"});
  154. $Wazebar.html([
  155. '<div class="WazeBarIcon" id="WazeBarSettingsButton"><i class="fa fa-cog" aria-hidden="true"></i></div>',
  156. '<div class="WazeBarIcon" id="WazeBarRefreshButton"><i class="fa fa-refresh" aria-hidden="true"></i></div>',
  157. '<div class="WazeBarIcon" id="WazeBarFavoritesIcon"><i class="fa fa-star" aria-hidden="true""></i>',
  158. '<div id="WazeBarFavorites">',
  159. '<div id="WazeBarFavoritesList"></div>',
  160. '<div><div style="float:left;">',//textboxes div
  161. '<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>',
  162. '<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;"/>',
  163. '</div>', //End textboxes div
  164. '<div style="float:right; text-align:center;">',//button div
  165. '<button id="WazeBarAddFavorite">Add</button>',
  166. '</div>',//End button div
  167. '</div></div></div>',
  168. '<div class="WazeBarText WazeBarForumItem" id="Inbox"><a href="' + location.origin + '/forum/ucp.php?i=pm&folder=inbox" target="_blank">Inbox</a></div>',
  169. WazeBarSettings.WMEBetaForum ? '<div class="WazeBarText WazeBarForumItem" id="WMEBetaForum"><a href="' + location.origin + '/forum/viewforum.php?f=211" ' + LoadNewTab() + '>WME Beta</a></div>' : '',
  170. WazeBarSettings.scriptsForum ? '<div class="WazeBarText WazeBarForumItem" id="Scripts"><a href="' + location.origin + '/forum/viewforum.php?f=819" ' + LoadNewTab() + '>Scripts</a></div>' : '',
  171. WazeBarSettings.USSMForum ? '<div class="WazeBarText WazeBarForumItem" id="USSMForum"><a href="' + location.origin + '/forum/viewforum.php?f=1286" ' + LoadNewTab() + '>US SM</a></div>' : '',
  172. WazeBarSettings.USChampForum ? '<div class="WazeBarText WazeBarForumItem" id="USChampForum"><a href="' + location.origin + '/forum/viewforum.php?f=338" ' + LoadNewTab() + '>US Champ</a></div>' : '',
  173. WazeBarSettings.USWikiForum ? '<div class="WazeBarText WazeBarForumItem" id="USWikiForum"><a href="' + location.origin + '/forum/viewforum.php?f=1636" ' + LoadNewTab() + '>US Wiki</a></div>' : '',
  174. BuildRegionForumEntries(),
  175. BuildStateForumEntries(),
  176. BuildStateUnlockEntries(),
  177. BuildCustomEntries(),
  178. BuildRegionWikiEntries(),
  179. BuildStateWikiEntries(),
  180. BuildCurrentStateEntries(),
  181. WazeBarSettings.NAServerUpdate ? '<div style="display:inline;" id="WazebarStatus">NA Server Update: </div>' : '',
  182. WazeBarSettings.ROWServerUpdate ? '<div style="display:inline;" id="WazebarStatusROW">ROW Server Update: </div>' : ''
  183. ].join(' '));
  184.  
  185. if(forumPage){
  186. $('wz-header').prepend($Wazebar);
  187. //$('#Wazebar').css('position', 'fixed');
  188. $('#Wazebar').css('z-index','9999999');
  189. $('#Wazebar').css('margin-left','20px');
  190. $('#Wazebar').css('background-color', 'white');
  191. $('#Wazebar').css('width', '100%');
  192. $('#Wazebar').css('top', '0');
  193. }
  194. else
  195. $('.app.container-fluid.show-sidebar').before($Wazebar);
  196.  
  197. GetPMCount();
  198. checkForums();
  199. StartIntervals();
  200.  
  201. $('#WazeBarAddFavorite').click(function(){
  202. if($('#WazeBarText').val() !== "" && $('#WazeBarURL').val() !== ""){
  203. var url = $('#WazeBarURL').val();
  204. if(! (url.startsWith("http://") || url.startsWith("https://")))
  205. url = "http://"+url;
  206. WazeBarSettings.Favorites.push({href:url, text:$('#WazeBarText').val()});
  207. $('#WazeBarURL').val("");
  208. $('#WazeBarText').val("");
  209. LoadFavorites();
  210. SaveSettings();
  211. }
  212. });
  213.  
  214. $('#WazeBarFavoritesIcon').mouseleave(function() {
  215. $('#WazeBarFavorites').css({'display':'none'});
  216. });
  217.  
  218. $('#WazeBarFavoritesIcon').mouseenter(function(){
  219. $('#WazeBarFavorites').css({'display':'block'});
  220. });
  221.  
  222. LoadFavorites();
  223.  
  224. $('#WazeBarFavoritesList a').click(function(){
  225. $('#WazeBarFavorites').css({'display':'none'});
  226. });
  227.  
  228. if(WazeBarSettings.NAServerUpdate || WazeBarSettings.ROWServerUpdate){
  229. GM_xmlhttpRequest({
  230. method: "GET",
  231. url: 'https://status.waze.com/feeds/posts/default',
  232. onload: ParseStatusFeed
  233. });
  234. }
  235.  
  236. $('#WazeBarSettingsButton').click(function(){
  237. $('#WazeBarSettings').css({'visibility':'visible'});
  238. LoadSettingsInterface();
  239. });
  240.  
  241. $('#WazeBarRefreshButton').click(function(){
  242. $('#WazeBarRefreshButton i').addClass('fa-spin');
  243. window.clearInterval(inboxInterval);
  244. window.clearInterval(forumInterval);
  245. GetPMCount();
  246. checkForums();
  247. StartIntervals();
  248. $('#WazeBarRefreshButton i').removeClass('fa-spin');
  249. });
  250.  
  251. $('body > div.app.container-fluid.show-sidebar').css('height', 'calc(100vh - ' + $('#Wazebar').height() + 'px)');
  252. window.dispatchEvent(new Event('resize')); //otherwise the WME editing area shifts up under Wazebar
  253. if(forumPage){
  254. $('.navigation').css("top", $('#Wazebar').height() + "px");
  255. }
  256. }
  257.  
  258. function LoadSettingsInterface(){
  259. $('#txtWazebarSettings')[0].innerHTML = localStorage.Wazebar_Settings;
  260. SelectedRegionChanged();
  261. setChecked('WazeForumSetting', WazeBarSettings.DisplayWazeForum);
  262. setChecked('WMEBetaForumSetting', WazeBarSettings.WMEBetaForum);
  263. setChecked('ScriptsForum', WazeBarSettings.scriptsForum);
  264. setChecked('USSMForumSetting', WazeBarSettings.USSMForum);
  265. if(!forumPage)
  266. setChecked('USChampForumSetting', WazeBarSettings.USChampForum);
  267. setChecked('USWikiForumSetting', WazeBarSettings.USWikiForum);
  268. setChecked('NAServerUpdateSetting', WazeBarSettings.NAServerUpdate);
  269. setChecked('ROWServerUpdateSetting', WazeBarSettings.ROWServerUpdate);
  270. $('#inboxInterval')[0].value = WazeBarSettings.inboxInterval;
  271. $('#forumInterval')[0].value = WazeBarSettings.forumInterval;
  272. $('#WazeBarFontSize')[0].value = WazeBarSettings.BarFontSize;
  273. $('#WazeBarUnreadPopupDelay')[0].value = WazeBarSettings.UnreadPopupDelay;
  274. }
  275.  
  276. function LoadNewTab(){
  277. return forumPage ? "" : ' target="_blank"';
  278. }
  279.  
  280. function LoadFavorites(){
  281. $('#WazeBarFavoritesList').empty();
  282. var links = "";
  283. for(var i=0;i<WazeBarSettings.Favorites.length;i++){
  284. 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>';
  285. }
  286.  
  287. $('#WazeBarFavoritesList').prepend(links);
  288.  
  289. $('[id^="WazeBarFavoritesListClose"]').click(function(){
  290. WazeBarSettings.Favorites.splice(Number(this.id.replace('WazeBarFavoritesListClose','')),1);
  291. SaveSettings();
  292. LoadFavorites();
  293. });
  294. }
  295.  
  296. function LoadCustomLinks(){
  297. $('#WazeBarCustomLinksList').empty();
  298. var links = "";
  299. for(var i=0;i<WazeBarSettings.CustomLinks.length;i++){
  300. links += '<div style="position:relative;"><a href="' + WazeBarSettings.CustomLinks[i].href + '" target="_blank">' + WazeBarSettings.CustomLinks[i].text + '</a><i id="WazeBarCustomLinksListClose' + i + '" style="position:absolute; right:0; top:0;" class="fa fa-times" title="Remove custom link"></i></div>';
  301. }
  302.  
  303. $('#WazeBarCustomLinksList').prepend(links);
  304.  
  305. $('[id^="WazeBarCustomLinksListClose"]').click(function(){
  306. WazeBarSettings.CustomLinks.splice(Number(this.id.replace('WazeBarCustomLinksListClose','')),1);
  307. SaveSettings();
  308. LoadCustomLinks();
  309. BuildWazebar();
  310. });
  311. }
  312.  
  313. function StartIntervals(){
  314. inboxInterval = setInterval(GetPMCount,WazeBarSettings.inboxInterval * 60000);
  315. forumInterval = setInterval(checkForums, WazeBarSettings.forumInterval * 60000);
  316. }
  317.  
  318. function GetPMCount(){
  319. $.get(location.origin + '/forum/ucp.php?i=pm&folder=inbox', function(Inbox){
  320. let search = Inbox.match(/Inbox\s*\((\d+)\)/);
  321. //Inbox.match(/Inbox\s*\((\d+)\)/)[1];
  322. if(search){
  323. let count = search[1];
  324. $('#PMCount').remove();
  325. $('#Inbox a').append("<span style='color:red;font-weight:bold;' id='PMCount'> (" + count + ")</span>");
  326. }
  327. else
  328. $('#PMCount').remove();
  329. });
  330. }
  331.  
  332. function checkForums(){
  333. if(WazeBarSettings.WMEBetaForum)
  334. checkUnreadTopics(location.origin + "/forum/viewforum.php?f=211", "WMEBetaForum", "WMEBetaForumCount");
  335. if(WazeBarSettings.scriptsForum)
  336. checkUnreadTopics(location.origin + "/forum/viewforum.php?f=819", "Scripts", "ScriptsCount"); //Scripts
  337. if(WazeBarSettings.USSMForum)
  338. checkUnreadTopics(location.origin + "/forum/viewforum.php?f=1286", "USSMForum", "USSMForumCount");
  339. if(WazeBarSettings.USChampForum)
  340. checkUnreadTopics(location.origin + "/forum/viewforum.php?f=338", "USChampForum", "USChampForumCount");
  341. if(WazeBarSettings.USWikiForum)
  342. checkUnreadTopics(location.origin + "/forum/viewforum.php?f=1636", "USWikiForum", "USWikiForumCount");
  343.  
  344. Object.keys(WazeBarSettings.header).forEach(function(state,index) {
  345. if(WazeBarSettings.header[state].forum)
  346. checkUnreadTopics(WazeBarSettings.header[state].forum.replace("https://www.waze.com", location.origin), state.replace(' ', '_') + 'Forum', state.replace(' ', '_')+'ForumCount');
  347.  
  348. if(WazeBarSettings.header[state].unlock){
  349. var url = location.origin + "/forum/search.php?keywords=" + state + "&terms=all&author=&sv=0&fid%5B%5D=622&sc=1&sf=titleonly&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search";
  350. if(state === "Virginia")
  351. url = location.origin + "/forum/search.php?keywords=-West%2BVirginia&terms=all&author=&sv=0&fid%5B%5D=622&sc=1&sf=titleonly&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search";
  352. checkUnreadTopics(url, state.replace(' ', '_')+'Unlock', state.replace(' ', '_')+'UnlockCount');
  353. }
  354. });
  355. Object.keys(WazeBarSettings.header.region).forEach(function(region,index){
  356. if(WazeBarSettings.header.region[region].forum)
  357. checkUnreadTopics(WazeBarSettings.header.region[region].forum.replace("https://www.waze.com", location.origin), region.replace(' ', '') + 'Forum', region.replace(' ', '')+'ForumCount');
  358. });
  359.  
  360. for(var i=0;i<WazeBarSettings.CustomLinks.length;i++){
  361. if(WazeBarSettings.CustomLinks[i].href.includes("/forum"))
  362. checkUnreadTopics(WazeBarSettings.CustomLinks[i].href.replace("https://www.waze.com", location.origin), WazeBarSettings.CustomLinks[i].text.replace(' ', '') + i + 'Forum', WazeBarSettings.CustomLinks[i].text.replace(' ', '')+i+'ForumCount');
  363. }
  364.  
  365. }
  366.  
  367. function checkUnreadTopics(path, parentID, spanID){
  368. var count = 0;
  369. $.get(path, function(page){
  370. var result = page.match(/topic_unread/g);
  371. count += result? result.length :0;
  372. result = page.match(/sticky_unread/g);
  373. count += result? result.length :0;
  374. result = page.match(/announce_unread/g);
  375. count += result? result.length :0;
  376.  
  377. $('#' + spanID).remove();
  378. if(count > 0){
  379. $('#'+parentID+' a').append("<span style='color:red;font-weight:bold;' id='" + spanID + "'> (" + count + ")<div class='WazeBarUnread' id='WazeBarUnread" + spanID +"' style='visibility:hidden; animation: " + WazeBarSettings.UnreadPopupDelay + "s fadeIn; animation-fill-mode: forwards; left:" + $("#"+parentID).position().left + "px; top:" + $("#"+parentID).height() + "px;'><div class='WazeBarUnreadList' id='WazeBarUnreadList" + spanID + "''></div></div></span>");
  380. var pattern = /announce_unread.*\s*<dt.*>\s*<a href=".*"\s*.*<\/a>\s*<div class="list-inner.*">\s*.*\s*.*\s*.*\s*(?:.*\s*)?<a href="(.*)"\s*class="boing topictitle.*">\s*(?:<svg.*\s*<path.*\s*<\/svg>\s*)?(?!<img)(.*?)\s*<\/a>/g;
  381. var unreadItems;
  382.  
  383. var links = "";
  384. $('#WazeBarUnreadList' + spanID).empty();
  385. while((unreadItems = pattern.exec(page)) !== null) {
  386. links += '<div style="position:relative;"><a href="' + location.origin + "/forum" + unreadItems[1].replace("amp;","").substring(1) + '&view=unread#unread"' + LoadNewTab() + '>' + unreadItems[2].replace('img src="./styles/prosilver/imageset/icon_topic_solved_list.png"', 'img src="https://www.waze.com/forum/styles/prosilver/imageset/icon_topic_solved_list.png"') + '</a></div>';
  387. }
  388. pattern = /sticky_unread">\s*.*\s*.*\s*.*\s*.*\s*.*\s*.*\s*<a href="(.*)"\s*class="boing topictitle.*">\s*(.*)\s*<\/a>/g;
  389. while((unreadItems = pattern.exec(page)) !== null) {
  390. links += '<div style="position:relative;"><a href="' + location.origin + "/forum" + unreadItems[1].replace("amp;","").substring(1) + '&view=unread#unread"' + LoadNewTab() + '>' + unreadItems[2] + '</a></div>';
  391. }
  392. pattern = /topic_unread.*\s*<dt.*>\s*<a href=".*"\s*.*<\/a>\s*<div class="list-inner.*">\s*.*\s*.*\s*.*\s*(?:.*\s*)?<a href="(.*)"\s*class="boing topictitle.*">\s*(?:<svg.*\s*<path.*\s*<\/svg>\s*)?(?!<img)(.*?)\s*<\/a>/g;
  393. while((unreadItems = pattern.exec(page)) !== null) {
  394. links += '<div style="position:relative;"><a href="' + location.origin + "/forum" + unreadItems[1].replace("amp;","").substring(1) + '&view=unread#unread"' + LoadNewTab() + '>' + unreadItems[2] + '</a></div>';
  395. }
  396. $('#WazeBarUnreadList' + spanID).prepend(links);
  397.  
  398. $('#' + spanID).mouseleave(function() {
  399. $('#WazeBarUnread' + spanID).css({'display':'none'});
  400. });
  401.  
  402. $('#' + spanID).mouseenter(function(){
  403. $('#WazeBarUnread' + spanID).css({'display':'block'});
  404. });
  405.  
  406.  
  407. $('#' + spanID + ' a').click(function(){
  408. $('#WazeBarUnread' + spanID).css({'display':'none'});
  409. });
  410. }
  411. });
  412.  
  413. return count;
  414. }
  415.  
  416. function ParseStatusFeed(data){
  417. let re = /North American map tiles were successfully updated to: (.*?)<\/title>/;
  418. let result;
  419. if(WazeBarSettings.NAServerUpdate){
  420. result = data.responseText.match(re)[1].trim();
  421. if(WazeBarSettings.ROWServerUpdate)
  422. result += " | "
  423. $('#WazebarStatus').append(result);
  424. }
  425. if(WazeBarSettings.ROWServerUpdate){
  426. re = /International map tiles were successfully updated to: (.*?)<\/title>/;
  427. result = data.responseText.match(re)[1].trim();
  428. $('#WazebarStatusROW').append(result);
  429. }
  430. }
  431.  
  432. function BuildStateForumEntries(){
  433. var stateForums = "";
  434. Object.keys(WazeBarSettings.header).forEach(function(state,index) {
  435. if(WazeBarSettings.header[state].forum)
  436. stateForums += '<div class="WazeBarText WazeBarForumItem" id="' + state.replace(' ', '_') + 'Forum"><a href="' + WazeBarSettings.header[state].forum.replace("https://www.waze.com", location.origin) + '" ' + LoadNewTab() + '>' + WazeBarSettings.header[state].abbr + '</a></div>';
  437. });
  438. return stateForums;
  439. }
  440.  
  441. function BuildCurrentStateEntries(){
  442. var currentState = "";
  443. if(!forumPage && typeof W.model.countries.objects[235] !== 'undefined'){ //only do for the US
  444. var currState = W.model.states.top.name;
  445. currentState += '<div class="WazeBarText WazeBarCurrState" id="' + currState.replace(' ', '_') + 'ForumCurrState"><a href="' + States[currState].forum.replace("https://www.waze.com", location.origin) + '" ' + LoadNewTab() + '>' + States[currState].abbr + '</a></div>';
  446. currentState += '<div class="WazeBarText WazeBarCurrState"><a href="' + States[currState].wiki + '" target="_blank">' + States[currState].abbr + ' Wiki</a></div>';
  447. }
  448. return currentState;
  449. }
  450.  
  451. function BuildCustomEntries(){
  452. var customList = "";
  453. if(WazeBarSettings.CustomLinks && WazeBarSettings.CustomLinks.length > 0){
  454. //forum entries first
  455. for(var i=0;i<WazeBarSettings.CustomLinks.length;i++){
  456. if(WazeBarSettings.CustomLinks[i].href.includes("/forum"))
  457. customList += '<div class="WazeBarText WazeBarForumItem" id="' + WazeBarSettings.CustomLinks[i].text.replace(' ', '') + i + 'Forum"><a href="' + WazeBarSettings.CustomLinks[i].href.replace("https://www.waze.com", location.origin) + '" ' + LoadNewTab() + '>' + WazeBarSettings.CustomLinks[i].text + '</a></div>';
  458. }
  459.  
  460. //wiki entries
  461. for(i=0;i<WazeBarSettings.CustomLinks.length;i++){
  462. if(WazeBarSettings.CustomLinks[i].href.includes("/wiki"))
  463. customList += '<div class="WazeBarText WazeBarWikiItem"><a href="' + WazeBarSettings.CustomLinks[i].href + '" target="_blank">' + WazeBarSettings.CustomLinks[i].text + '</a></div>';
  464. }
  465. }
  466. return customList;
  467. }
  468.  
  469. function BuildStateWikiEntries(){
  470. var stateWikis = "";
  471. Object.keys(WazeBarSettings.header).forEach(function(state,index) {
  472. if(WazeBarSettings.header[state].wiki)
  473. stateWikis += '<div class="WazeBarText WazeBarWikiItem"><a href="' + WazeBarSettings.header[state].wiki + '" target="_blank">' + WazeBarSettings.header[state].abbr + ' Wiki</a></div>';
  474. });
  475. return stateWikis;
  476. }
  477.  
  478. function BuildStateUnlockEntries(){
  479. var stateUnlocks = "";
  480. Object.keys(WazeBarSettings.header).forEach(function(state,index) {
  481. if(WazeBarSettings.header[state].unlock){
  482. if(state !== "Virginia")
  483. stateUnlocks += '<div class="WazeBarText WazeBarForumItem" id="' + state.replace(' ', '_') + 'Unlock"><a href="' + location.origin + '/forum/search.php?keywords=' + state + '&terms=all&author=&sv=0&fid%5B%5D=622&sc=1&sf=titleonly&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search" ' + LoadNewTab() + '>' + WazeBarSettings.header[state].abbr + ' Unlock</a></div>';
  484. else
  485. stateUnlocks += '<div class="WazeBarText WazeBarForumItem" id="' + state.replace(' ', '_') + 'Unlock"><a href="' + location.origin + '/forum/search.php?keywords=-West%2BVirginia&terms=all&author=&sv=0&fid%5B%5D=622&sc=1&sf=titleonly&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search" ' + LoadNewTab() + '>' + WazeBarSettings.header[state].abbr + ' Unlock</a></div>';
  486. //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>';
  487. }
  488. });
  489. return stateUnlocks;
  490. }
  491.  
  492. function BuildRegionForumEntries(){
  493. //'<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>',
  494. var regionForums = "";
  495. if(WazeBarSettings.header.region){
  496. Object.keys(WazeBarSettings.header.region).forEach(function(region,index) {
  497. if(WazeBarSettings.header.region[region].forum)
  498. regionForums += '<div class="WazeBarText WazeBarForumItem" id="' + region.replace(' ', '') + 'Forum"><a href="' + WazeBarSettings.header.region[region].forum.replace("https://www.waze.com", location.origin) + '" ' + LoadNewTab() + '>' + WazeBarSettings.header.region[region].abbr + '</a></div>';
  499. });
  500. }
  501. return regionForums;
  502. }
  503.  
  504. function BuildRegionWikiEntries(){
  505. //'<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>',
  506. var regionWikis = "";
  507. if(WazeBarSettings.header.region){
  508. Object.keys(WazeBarSettings.header.region).forEach(function(region,index) {
  509. if(WazeBarSettings.header.region[region].wiki)
  510. regionWikis += '<div class="WazeBarText WazeBarWikiItem"><a href="' + WazeBarSettings.header.region[region].wiki + '" target="_blank">' + WazeBarSettings.header.region[region].abbr + ' Wiki</a></div>';
  511. });
  512. }
  513. return regionWikis;
  514. }
  515.  
  516. function BuildSettingsInterface(){
  517. var $section = $("<div>", {style:"padding:8px 16px", id:"WazeBarSettings"});
  518. $section.html([
  519. '<div id="WazeBarSettings" style="visibility:hidden; position:fixed; top:20%; left:40%; width:700px; min-height:150px; z-index:1000; background-color:white; border-width:3px; border-style:solid; border-radius:10px; padding:4px;">',
  520. '<div>',
  521. '<div style="float: left; margin-right: 2px;">',
  522. 'Font size <input style="width: 50px;" min="8" type="number" id="WazeBarFontSize"/> px <br/><br/> ',
  523. 'Forum font color <button id="colorPickerForumFont" class="jscolor {valueElement:null,hash:true,closable:true}" style="width: 15px; height: 15px; border: 2px solid black;"></button><br/><br/>',
  524. 'Wiki font color <button id="colorPickerWikiFont" class="jscolor {valueElement:null,hash:true,closable:true}" style="width: 15px; height: 15px; border: 2px solid black;"></button><br/><br/> ',
  525. 'Unread popup delay <input style="width: 40px;" min="0" type="text" id="WazeBarUnreadPopupDelay"/> s',
  526. '<h4>Export/Import</h4>',
  527. '<div>',
  528. '<button class="fa fa-upload fa-2x" aria-hidden="true" id="btnWazebarCopySettings" style="cursor:pointer;border: 1; background: none; box-shadow:none;" title="Copy Wazebar settings to the clipboard" data-clipboard-target="#txtWazebarSettings"></button>',
  529. '<textarea rows="4" cols="15" readonly id="txtWazebarSettings" style="resize:none;"></textarea>',
  530. '</div>',//end export div
  531. '<div>',
  532. '<button class="fa fa-download fa-2x" aria-hidden="true" id="btnWazebarImportSettings" style="cursor:pointer;border: 1; background: none; box-shadow:none;" title="Import copied settings"></button>',
  533. '<textarea rows="4" cols="15" id="txtWazebarImportSettings" style="resize:none;"></textarea>',
  534. '</div>',//end import div
  535. '</div>',
  536. '<div>',
  537. '<div id="WBDisplayOptions" style="float: left;border-right: thin solid grey; padding-right:5px; border-left: thin solid grey; padding-left:5px;">',
  538. '<input type="checkbox" id="WazeForumSetting" /><label for="WazeForumSetting">Display on Forum pages</label></br>',
  539. '<div style="margin-left:5px;">',
  540. 'Inbox check frequency <input type="number" id="inboxInterval" min="1" style="width:50px;"> mins</br>',
  541. 'Forum check frequency <input type="number" id="forumInterval" min="1" style="width:50px;"> mins</br>',
  542. '<input type="checkbox" id="WMEBetaForumSetting" /><label for="WMEBetaForumSetting">WME Beta Forum</label></br>',
  543. '<input type="checkbox" id="ScriptsForum" /><label for="ScriptsForum">Scripts Forum</label></br>',
  544. '<input type="checkbox" id="USSMForumSetting" /><label for="USSMForumSetting">US SM Forum</label></br>',
  545. (!forumPage && W.loginManager.user.rank >= 5) ? '<input type="checkbox" id="USChampForumSetting" /><label for="USChampForumSetting">US Champ Forum</label></br>' : '',
  546. '<input type="checkbox" id="USWikiForumSetting" /><label for="USWikiForumSetting">US Wiki Forum</label></br>',
  547. '<input type="checkbox" id="NAServerUpdateSetting" /><label for="NAServerUpdateSetting">NA Server Update</label></br>',
  548. '<input type="checkbox" id="ROWServerUpdateSetting" /><label for="ROWServerUpdateSetting">ROW Server Update</label></br>',,
  549. 'Region ' + BuildRegionDropdown() + '<input type="checkbox" id="RegionForumSetting"/><label for="RegionForumSetting">Forum</label> <input type="checkbox" id="RegionWikiSetting"/><label for="RegionWikiSetting">Wiki</label>',
  550. '<div id="WBStates"></div>',
  551. '</div>',//close region div
  552. '</div>',
  553.  
  554. '<div style="float: right;">',
  555. '<h4>Custom Links</h2><br />',
  556. '<div id="WazeBarCustomLinks">',
  557. '<div id="WazeBarCustomLinksList" style="max-height:250px; overflow: auto;"></div>',
  558. '<div><div style="float:left;">',//textboxes div
  559. '<label for="WazeBarCustomURL" style="display:inline-block; width:40px;">URL </label><input type="text" id="WazeBarCustomURL" size="10" style="border: 1px solid #000000; height:20px;"/></br>',
  560. '<label for="WazeBarCustomText" style="display:inline-block; width:40px;">Text </label><input type="text" id="WazeBarCustomText" size="10" style="border: 1px solid #000000; height:20px;"/>',
  561. '</div>', //End textboxes div
  562. '<div style="float:right; text-align:center;">',//button div
  563. '<button id="WazeBarAddCustomLink">Add</button>',
  564. '</div>',//End button div
  565. '</div></div></div>',
  566.  
  567. '</div></div>',
  568.  
  569. '<div style="clear: both; padding-top:5px;">',
  570. '<div style="position: relative; float:left; display: inline-block"><a href="' + location.origin + '/forum/viewtopic.php?f=819&t=219816" target="_blank">Forum thread</a></div>',
  571. '<div style="position: relative; float: right; display: inline-block">', //save/cancel buttons
  572. '<button id="WBSettingsSave" style="width: 85px;" class="btn btn-primary">Save</button>',
  573. '<button id="WBSettingsCancel" class="btn btn-default">Cancel</button>',
  574. '</div>',//end save/cancel buttons
  575. '</div>',
  576.  
  577. ].join(' '));
  578.  
  579. if(forumPage)
  580. $('body').append($section.html());
  581. else
  582. $("#WazeMap").append($section.html());
  583.  
  584. $('#WazeBarUnreadPopupDelay').keypress(function(event) {
  585. if(!((event.which >= 48 && event.which <= 57) || (event.which == 46 && (this.value.match(/\./g) || []).length == 0)))
  586. event.preventDefault();
  587. });
  588.  
  589. //Region forum checkbox toggled
  590. $('#RegionForumSetting').change(function(){
  591. var selectedItem = $('#WBRegions')[0].options[$('#WBRegions')[0].selectedIndex];
  592. var region = selectedItem.value;
  593. var forum = selectedItem.getAttribute("data-forum");
  594. var abbr = selectedItem.getAttribute("data-abbr");
  595. if(!WazeBarSettings.header.region)
  596. WazeBarSettings.header.region = {};
  597.  
  598. if(WazeBarSettings.header.region[region] == null)
  599. WazeBarSettings.header.region[region] = {};
  600. if(this.checked){
  601. WazeBarSettings.header.region[region].forum = forum;
  602. WazeBarSettings.header.region[region].abbr = abbr;
  603. }
  604. else
  605. delete WazeBarSettings.header.region[region].forum;
  606. });
  607.  
  608. //Region wiki checkbox toggled
  609. $('#RegionWikiSetting').change(function(){
  610. var selectedItem = $('#WBRegions')[0].options[$('#WBRegions')[0].selectedIndex];
  611. var region = selectedItem.value;
  612. var wiki = selectedItem.getAttribute("data-wiki");
  613. var abbr = selectedItem.getAttribute("data-abbr");
  614.  
  615. if(!WazeBarSettings.header.region)
  616. WazeBarSettings.header.region = {};
  617. if(WazeBarSettings.header.region[region] == null)
  618. WazeBarSettings.header.region[region] = {};
  619. if(this.checked){
  620. WazeBarSettings.header.region[region].wiki = wiki;
  621. WazeBarSettings.header.region[region].abbr = abbr;
  622. }
  623. else
  624. delete WazeBarSettings.header.region[region].wiki;
  625. });
  626.  
  627. LoadCustomLinks();
  628.  
  629. $('#WazeBarAddCustomLink').click(function(){
  630. if($('#WazeBarCustomText').val() !== "" && $('#WazeBarCustomURL').val() !== ""){
  631. var url = $('#WazeBarCustomURL').val();
  632. if(! (url.startsWith("http://") || url.startsWith("https://")))
  633. url = "http://"+url;
  634. WazeBarSettings.CustomLinks.push({href:url, text:$('#WazeBarCustomText').val()});
  635. $('#WazeBarCustomURL').val("");
  636. $('#WazeBarCustomText').val("");
  637. LoadCustomLinks();
  638. SaveSettings();
  639. BuildWazebar();
  640. }
  641. });
  642.  
  643. //Cancel button clicked
  644. $("#WBSettingsCancel").click(function(){
  645. $('#WazeBarSettings').css({'visibility':'hidden'}); //hide the settings window
  646. });
  647.  
  648. //Save button clicked
  649. $("#WBSettingsSave").click(function(){
  650. WazeBarSettings.DisplayWazeForum = isChecked('WazeForumSetting');
  651. WazeBarSettings.WMEBetaForum = isChecked('WMEBetaForumSetting');
  652. WazeBarSettings.scriptsForum = isChecked('ScriptsForum');
  653. WazeBarSettings.USSMForum = isChecked('USSMForumSetting');
  654. if(!forumPage)
  655. WazeBarSettings.USChampForum = isChecked('USChampForumSetting');
  656. WazeBarSettings.USWikiForum = isChecked('USWikiForumSetting');
  657. WazeBarSettings.inboxInterval = $('#inboxInterval')[0].value;
  658. WazeBarSettings.forumInterval = $('#forumInterval')[0].value;
  659. WazeBarSettings.NAServerUpdate = isChecked('NAServerUpdateSetting');
  660. WazeBarSettings.ROWServerUpdate = isChecked('ROWServerUpdateSetting');
  661. WazeBarSettings.ForumFontColor = "#" + $('#colorPickerForumFont')[0].jscolor.toString();
  662. WazeBarSettings.WikiFontColor = "#" + $('#colorPickerWikiFont')[0].jscolor.toString();
  663. WazeBarSettings.BarFontSize = $('#WazeBarFontSize')[0].value;
  664. if($('#WazeBarUnreadPopupDelay')[0].value.trim() == "")
  665. $('#WazeBarUnreadPopupDelay')[0].value = 0;
  666. WazeBarSettings.UnreadPopupDelay = $('#WazeBarUnreadPopupDelay')[0].value;
  667. if(WazeBarSettings.BarFontSize < 8){
  668. WazeBarSettings.BarFontSize = 8;
  669. $('#WazeBarFontSize')[0].value = 8;
  670. }
  671. SaveSettings();
  672.  
  673. BuildWazebar();
  674. $('#txtWazebarSettings')[0].innerHTML = localStorage.Wazebar_Settings;
  675. $('#WazeBarSettings').css({'visibility':'hidden'}); //hide the settings window
  676. //Update the forum and wiki entries with the newly selected colors
  677. $('.WazeBarText.WazeBarForumItem a').css('color', "#" + $('#colorPickerForumFont')[0].jscolor.toString());
  678. $('.WazeBarText.WazeBarWikiItem a').css('color', "#" + $('#colorPickerWikiFont')[0].jscolor.toString());
  679. $('.WazeBarText').css('font-size', $('#WazeBarFontSize')[0].value + 'px');
  680. });
  681.  
  682. //When they change the selected region, build a new state div.
  683. $('#WBRegions').change(SelectedRegionChanged);
  684.  
  685. $('#btnWazebarImportSettings').click(function(){
  686. if($('#txtWazebarImportSettings')[0].value !== ""){
  687. localStorage.Wazebar_Settings = $('#txtWazebarImportSettings')[0].value;
  688. LoadSettingsObj();
  689. LoadSettingsInterface();
  690. LoadCustomLinks();
  691. BuildWazebar();
  692. }
  693. });
  694. new Clipboard('#btnWazebarCopySettings');
  695. }
  696.  
  697. function SelectedRegionChanged(){
  698. setChecked('RegionForumSetting', false);
  699. setChecked('RegionWikiSetting', false);
  700.  
  701. var selectedItem = $('#WBRegions')[0].options[$('#WBRegions')[0].selectedIndex];
  702. var region = selectedItem.value;
  703. var wiki = selectedItem.getAttribute("data-wiki");
  704. var forum = selectedItem.getAttribute("data-forum");
  705.  
  706. if(!WazeBarSettings.header.region)
  707. WazeBarSettings.header.region = {};
  708. if(WazeBarSettings.header.region[region] == null)
  709. WazeBarSettings.header.region[region] = {};
  710.  
  711. if(WazeBarSettings.header.region[region].forum && WazeBarSettings.header.region[region].forum !== "")
  712. setChecked('RegionForumSetting', true);
  713. if(WazeBarSettings.header.region[region].wiki && WazeBarSettings.header.region[region].wiki !== "")
  714. setChecked('RegionWikiSetting', true);
  715.  
  716. BuildStatesDiv();
  717. }
  718.  
  719. function BuildStatesDiv(){
  720. //Get the state list for this region
  721. var selectedItem = $('#WBRegions')[0].options[$('#WBRegions')[0].selectedIndex];
  722. var states = selectedItem.getAttribute("data-states").split(",");
  723. var forum = selectedItem.getAttribute("data-forum");
  724. var wiki = selectedItem.getAttribute("data-wiki");
  725.  
  726. var statesHTML = "";
  727. $('#WBStates').empty();
  728.  
  729. for(var i=0;i<states.length;i++){
  730. 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>";
  731. $('#WBStates').append(statesHTML);
  732. //Check the forum/wiki/unlock checkboxes if it has been saved
  733. if(WazeBarSettings.header[states[i]]){
  734. if(WazeBarSettings.header[states[i]].forum && WazeBarSettings.header[states[i]].forum !== "")
  735. setChecked(states[i].replace(' ', '_') + 'ForumSetting', true);
  736. if(WazeBarSettings.header[states[i]].wiki && WazeBarSettings.header[states[i]].wiki !== "")
  737. setChecked(states[i].replace(' ', '_') + 'WikiSetting', true);
  738. if(WazeBarSettings.header[states[i]].unlock && WazeBarSettings.header[states[i]].unlock !== "")
  739. setChecked(states[i].replace(' ', '_') + 'UnlockSetting', true);
  740. }
  741.  
  742. $('#'+states[i].replace(' ', '_')+'ForumSetting').change(function() {
  743. var state = this.id.replace('ForumSetting', '').replace('_', ' ');
  744. if(!WazeBarSettings.header[state])
  745. WazeBarSettings.header[state] = {};
  746. if(this.checked){
  747. WazeBarSettings.header[state].forum = States[state].forum;
  748. WazeBarSettings.header[state].abbr = States[state].abbr;
  749. }
  750. else
  751. delete WazeBarSettings.header[state].forum;
  752.  
  753. SaveSettings();
  754. });
  755. $('#'+states[i].replace(' ', '_')+'WikiSetting').change(function() {
  756. var state = this.id.replace('WikiSetting', '').replace('_', ' ');
  757. if(!WazeBarSettings.header[state])
  758. WazeBarSettings.header[state] = {};
  759. if(this.checked){
  760. WazeBarSettings.header[state].wiki = States[state].wiki;
  761. WazeBarSettings.header[state].abbr = States[state].abbr;
  762. }
  763. else
  764. delete WazeBarSettings.header[state].wiki;
  765.  
  766. SaveSettings();
  767. });
  768. $('#'+states[i].replace(' ', '_')+'UnlockSetting').change(function() {
  769. var state = this.id.replace('UnlockSetting', '').replace('_', ' ');
  770. if(!WazeBarSettings.header[state])
  771. WazeBarSettings.header[state] = {};
  772. if(this.checked){
  773. WazeBarSettings.header[state].unlock = location.origin + "/forum/search.php?keywords=" + state + "&terms=all&author=&sv=0&fid%5B%5D=622&sc=1&sf=titleonly&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search";
  774. WazeBarSettings.header[state].abbr = States[state].abbr;
  775. }
  776. else
  777. delete WazeBarSettings.header[state].unlock;
  778.  
  779. SaveSettings();
  780. });
  781. }
  782. }
  783.  
  784. function BuildRegionDropdown(){
  785. var $places = $("<div>");
  786. $places.html([
  787. '<select id="WBRegions">',
  788. '<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>',
  789. '<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>',
  790. '<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>',
  791. '<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>',
  792. '<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>',
  793. '<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>',
  794. '<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>',
  795. '<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>',
  796. '<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>',
  797. '<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>',
  798. '<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>'
  799. ].join(' '));
  800.  
  801. return $places.html();
  802. }
  803.  
  804. function LoadStatesObj(){
  805. States.Alabama = {forum:"https://www.waze.com/forum/viewforum.php?f=213", wiki:"https://wazeopedia.waze.com/wiki/USA/Southeast", abbr:"AL"};
  806. States.Alaska = {forum:"https://www.waze.com/forum/viewforum.php?f=254", wiki:"https://wazeopedia.waze.com/wiki/USA/Alaska", abbr:"AK"};
  807. States.Arizona = {forum:"https://www.waze.com/forum/viewforum.php?f=652", wiki:"https://wazeopedia.waze.com/wiki/USA/Arizona", abbr:"AZ"};
  808. States.Arkansas = {forum:"https://www.waze.com/forum/viewforum.php?f=598", wiki:"https://wazeopedia.waze.com/wiki/USA/Arkansas", abbr:"AR"};
  809. States.California = {forum:"https://www.waze.com/forum/viewforum.php?f=251", wiki:"https://wazeopedia.waze.com/wiki/USA/California", abbr:"CA"};
  810. States.Colorado = {forum:"https://www.waze.com/forum/viewforum.php?f=654", wiki:"https://wazeopedia.waze.com/wiki/USA/Colorado", abbr:"CO"};
  811. States.Connecticut = {forum:"https://www.waze.com/forum/viewforum.php?f=247", wiki:"https://wazeopedia.waze.com/wiki/USA/Connecticut", abbr:"CT"};
  812. States.Delaware = {forum:"https://www.waze.com/forum/viewforum.php?f=575", wiki:"https://wazeopedia.waze.com/wiki/USA/Delaware", abbr:"DE"};
  813. 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"};
  814. States.Florida = {forum:"https://www.waze.com/forum/viewforum.php?f=193", wiki:"https://wazeopedia.waze.com/wiki/USA/Southeast", abbr:"FL"};
  815. States.Georgia = {forum:"https://www.waze.com/forum/viewforum.php?f=214", wiki:"https://wazeopedia.waze.com/wiki/USA/Southeast", abbr:"GA"};
  816. States.Hawaii = {forum:"https://www.waze.com/forum/viewforum.php?f=305", wiki:"https://wazeopedia.waze.com/wiki/USA/Hawaii", abbr:"HA"};
  817. States.Idaho = {forum:"https://www.waze.com/forum/viewforum.php?f=648", wiki:"https://wazeopedia.waze.com/wiki/USA/Idaho", abbr:"ID"};
  818. States.Illinois = {forum:"https://www.waze.com/forum/viewforum.php?f=253", wiki:"https://wazeopedia.waze.com/wiki/USA/Illinois", abbr:"IL"};
  819. States.Indiana = {forum:"https://www.waze.com/forum/viewforum.php?f=631", wiki:"https://wazeopedia.waze.com/wiki/USA/Indiana", abbr:"IN"};
  820. States.Iowa = {forum:"https://www.waze.com/forum/viewforum.php?f=632", wiki:"https://wazeopedia.waze.com/wiki/USA/Iowa", abbr:"IA"};
  821. States.Kansas = {forum:"https://www.waze.com/forum/viewforum.php?f=628", wiki:"https://wazeopedia.waze.com/wiki/USA/Kansas", abbr:"KS"};
  822. States.Kentucky = {forum:"https://www.waze.com/forum/viewforum.php?f=571", wiki:"https://wazeopedia.waze.com/wiki/USA/Kentucky", abbr:"KY"};
  823. States.Louisiana = {forum:"https://www.waze.com/forum/viewforum.php?f=594", wiki:"https://wazeopedia.waze.com/wiki/USA/Louisiana", abbr:"LA"};
  824. States.Maine = {forum:"https://www.waze.com/forum/viewforum.php?f=583", wiki:"https://wazeopedia.waze.com/wiki/USA/Maine", abbr:"ME"};
  825. States.Maryland = {forum:"https://www.waze.com/forum/viewforum.php?f=246", wiki:"https://wazeopedia.waze.com/wiki/USA/Maryland", abbr:"MD"};
  826. States.Massachusetts = {forum:"https://www.waze.com/forum/viewforum.php?f=618", wiki:"https://wazeopedia.waze.com/wiki/USA/Massachusetts", abbr:"MA"};
  827. States.Michigan = {forum:"https://www.waze.com/forum/viewforum.php?f=630", wiki:"https://wazeopedia.waze.com/wiki/USA/Michigan", abbr:"MI"};
  828. States.Minnesota = {forum:"https://www.waze.com/forum/viewforum.php?f=259", wiki:"https://wazeopedia.waze.com/wiki/USA/Minnesota", abbr:"MN"};
  829. States.Mississippi = {forum:"https://www.waze.com/forum/viewforum.php?f=596", wiki:"https://wazeopedia.waze.com/wiki/USA/Mississippi", abbr:"MS"};
  830. States.Missouri = {forum:"https://www.waze.com/forum/viewforum.php?f=414", wiki:"https://wazeopedia.waze.com/wiki/USA/Missouri", abbr:"MO"};
  831. States.Montana = {forum:"https://www.waze.com/forum/viewforum.php?f=649", wiki:"https://wazeopedia.waze.com/wiki/USA/Montana", abbr:"MT"};
  832. States.Nebraska = {forum:"https://www.waze.com/forum/viewforum.php?f=634", wiki:"https://wazeopedia.waze.com/wiki/USA/Nebraska", abbr:"NE"};
  833. States.Nevada = {forum:"https://www.waze.com/forum/viewforum.php?f=651", wiki:"https://wazeopedia.waze.com/wiki/USA/Nevada", abbr:"NV"};
  834. States["New Hampshire"] = {forum:"https://www.waze.com/forum/viewforum.php?f=585", wiki:"https://wazeopedia.waze.com/wiki/USA/New_Hampshire", abbr:"NH"};
  835. States["New Jersey"] = {forum:"https://www.waze.com/forum/viewforum.php?f=249", wiki:"https://wazeopedia.waze.com/wiki/USA/New_Jersey", abbr:"NJ"};
  836. States["New Mexico"] = {forum:"https://www.waze.com/forum/viewforum.php?f=653", wiki:"https://wazeopedia.waze.com/wiki/USA/New_Mexico", abbr:"NM"};
  837. States["New York"] = {forum:"https://www.waze.com/forum/viewforum.php?f=250", wiki:"https://wazeopedia.waze.com/wiki/USA/New_York", abbr:"NY"};
  838. States["North Carolina"] = {forum:"https://www.waze.com/forum/viewforum.php?f=255", wiki:"https://wazeopedia.waze.com/wiki/USA/North_Carolina", abbr:"NC"};
  839. States["North Dakota"] = {forum:"https://www.waze.com/forum/viewforum.php?f=624", wiki:"https://wazeopedia.waze.com/wiki/USA/North_Dakota", abbr:"ND"};
  840. States.Ohio = {forum:"https://www.waze.com/forum/viewforum.php?f=261", wiki:"https://wazeopedia.waze.com/wiki/USA/Ohio", abbr:"OH"};
  841. States.Oklahoma = {forum:"https://www.waze.com/forum/viewforum.php?f=600", wiki:"https://wazeopedia.waze.com/wiki/USA/Oklahoma", abbr:"OK"};
  842. States.Oregon = {forum:"https://www.waze.com/forum/viewforum.php?f=647", wiki:"https://wazeopedia.waze.com/wiki/USA/Oregon", abbr:"OR"};
  843. States.Pennsylvania = {forum:"https://www.waze.com/forum/viewforum.php?f=215", wiki:"https://wazeopedia.waze.com/wiki/USA/Pennsylvania", abbr:"PA"};
  844. States["Rhode Island"] = {forum:"https://www.waze.com/forum/viewforum.php?f=577", wiki:"https://wazeopedia.waze.com/wiki/USA/Rhode_Island", abbr:"RI"};
  845. States["South Carolina"] = {forum:"https://www.waze.com/forum/viewforum.php?f=256", wiki:"https://wazeopedia.waze.com/wiki/USA/South_Carolina", abbr:"SC"};
  846. States["South Dakota"] = {forum:"https://www.waze.com/forum/viewforum.php?f=626", wiki:"https://wazeopedia.waze.com/wiki/USA/South_Dakota", abbr:"SD"};
  847. States.Tennessee = {forum:"https://www.waze.com/forum/viewforum.php?f=210", wiki:"https://wazeopedia.waze.com/wiki/USA/Tennessee", abbr:"TN"};
  848. States.Texas = {forum:"https://www.waze.com/forum/viewforum.php?f=237", wiki:"https://wazeopedia.waze.com/wiki/USA/Texas", abbr:"TX"};
  849. States.Utah = {forum:"https://www.waze.com/forum/viewforum.php?f=364", wiki:"https://wazeopedia.waze.com/wiki/USA/Utah", abbr:"UT"};
  850. States.Vermont = {forum:"https://www.waze.com/forum/viewforum.php?f=587", wiki:"https://wazeopedia.waze.com/wiki/USA/Vermont", abbr:"VT"};
  851. States.Virginia = {forum:"https://www.waze.com/forum/viewforum.php?f=580", wiki:"https://wazeopedia.waze.com/wiki/USA/Virginia", abbr:"VA"};
  852. States.Washington = {forum:"https://www.waze.com/forum/viewforum.php?f=201", wiki:"https://wazeopedia.waze.com/wiki/USA/Washington", abbr:"WA"};
  853. States["West Virginia"] = {forum:"https://www.waze.com/forum/viewforum.php?f=582", wiki:"https://wazeopedia.waze.com/wiki/USA/West_Virginia", abbr:"WV"};
  854. States.Wisconsin = {forum:"https://www.waze.com/forum/viewforum.php?f=387", wiki:"https://wazeopedia.waze.com/wiki/USA/Wisconsin", abbr:"WI"};
  855. States.Wyoming = {forum:"https://www.waze.com/forum/viewforum.php?f=650", wiki:"https://wazeopedia.waze.com/wiki/USA/Wyoming", abbr:"WY"};
  856. States["Puerto Rico"] = {forum:"https://www.waze.com/forum/viewforum.php?f=202", wiki:"https://wazeopedia.waze.com/wiki/USA/Puerto_Rico", abbr:"PR"};
  857. States["US Virgin Islands"] = {forum:"https://www.waze.com/forum/viewforum.php?f=677", wiki:"https://wazeopedia.waze.com/wiki/USA/Virgin_Islands", abbr:""};
  858. States["South Pacific Territories"] = {forum:"https://www.waze.com/forum/viewforum.php?f=954", wiki:"", abbr:""};
  859. }
  860.  
  861. function injectCss() {
  862. var css = [
  863. '.WazeBarText {display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey; font-size:' + WazeBarSettings.BarFontSize + 'px;}',
  864. '.WazeBarIcon {display:inline; margin-left:3px; cursor:pointer;}',
  865. '#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); margin-top:-2px;}',
  866. '#WazeBarFavoritesList div a {color:black; padding:12px 16px; text-decoration:none; display:block; text-align:left;}',
  867. '#WazeBarFavoritesList div a:hover {background-color:#f1f1f1}',
  868. '.WazeBarUnread {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);}',
  869. '.WazeBarText.WazeBarWikiItem a {color:' + WazeBarSettings.WikiFontColor + ';}',
  870. '.WazeBarText.WazeBarForumItem a {color:' + WazeBarSettings.ForumFontColor + ';}',
  871. '.WazeBarText.WazeBarCurrState a {color:#FF0000;}',
  872. '@keyframes fadeIn {99% {visibility: hidden;} 100% {visibility: visible;}'
  873. ].join(' ');
  874. $('<style type="text/css" id="WazeBarStyles">' + css + '</style>').appendTo('head');
  875. }
  876.  
  877. function isChecked(checkboxId) {
  878. return $('#' + checkboxId).is(':checked');
  879. }
  880.  
  881. function setChecked(checkboxId, checked) {
  882. $('#' + checkboxId).prop('checked', checked);
  883. }
  884.  
  885. function LoadSettingsObj() {
  886. var loadedSettings;
  887. try{
  888. loadedSettings = $.parseJSON(localStorage.getItem("Wazebar_Settings"));
  889. }
  890. catch(err){
  891. loadedSettings = null;
  892. }
  893.  
  894. var defaultSettings = {
  895. inboxInterval: 5,
  896. forumInterval: 2,
  897. scriptsForum: false,
  898. header: {region:{}},
  899. USSMForum: false,
  900. USChampForum: false,
  901. USWikiForum: false,
  902. NAServerUpdate: true,
  903. WMEBetaForum: false,
  904. DisplayWazeForum: false,
  905. 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"}],
  906. ForumFontColor: "#45B8D1",
  907. WikiFontColor: "#69BF88",
  908. BarFontSize: 13,
  909. CustomLinks: [],
  910. UnreadPopupDelay: 0,
  911. ROWServerUpdate: false
  912. };
  913. WazeBarSettings = loadedSettings ? loadedSettings : defaultSettings;
  914. for (var prop in defaultSettings) {
  915. if (!WazeBarSettings.hasOwnProperty(prop))
  916. WazeBarSettings[prop] = defaultSettings[prop];
  917. }
  918. }
  919.  
  920. function SaveSettings() {
  921. if (localStorage) {
  922. /*
  923. Object.keys(obj).forEach(function(key,index) {
  924. // key: the name of the object key
  925. // index: the ordinal position of the key within the object
  926. });
  927. */
  928. var localsettings = {
  929. inboxInterval: WazeBarSettings.inboxInterval,
  930. forumInterval: WazeBarSettings.forumInterval,
  931. scriptsForum: WazeBarSettings.scriptsForum,
  932. header: WazeBarSettings.header,
  933. USSMForum: WazeBarSettings.USSMForum,
  934. USChampForum: WazeBarSettings.USChampForum,
  935. USWikiForum: WazeBarSettings.USWikiForum,
  936. NAServerUpdate: WazeBarSettings.NAServerUpdate,
  937. WMEBetaForum: WazeBarSettings.WMEBetaForum,
  938. Favorites: WazeBarSettings.Favorites,
  939. DisplayWazeForum: WazeBarSettings.DisplayWazeForum,
  940. ForumFontColor: WazeBarSettings.ForumFontColor,
  941. WikiFontColor: WazeBarSettings.WikiFontColor,
  942. BarFontSize: WazeBarSettings.BarFontSize,
  943. CustomLinks: WazeBarSettings.CustomLinks,
  944. UnreadPopupDelay: WazeBarSettings.UnreadPopupDelay,
  945. ROWServerUpdate: WazeBarSettings.ROWServerUpdate
  946. };
  947.  
  948. localStorage.setItem("Wazebar_Settings", JSON.stringify(localsettings));
  949. }
  950. }
  951. })();