WME Wazebar

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

当前为 2017-06-23 提交的版本,查看 最新版本

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