WME Wazebar

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

当前为 2017-11-24 提交的版本,查看 最新版本

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