WME Wazebar

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

当前为 2017-05-25 提交的版本,查看 最新版本

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