WF ToolBox Lib Alpha

When perma is present to offer his version for beta + classic editor and add the profile editor waze and much more

目前为 2022-01-22 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/416769/1011444/WF%20ToolBox%20Lib%20Alpha.js

  1. // ==UserScript==
  2. // @name WF ToolBox Lib Alpha
  3. // @namespace WFTB_ns
  4. // @version 0.1.2.10
  5. // @description When perma is present to offer his version for beta + classic editor and add the profile editor waze and much more
  6. // @description:fr Quand un perma est présent proposer sa version pour l'éditeur beta + classique et ajout du editor profile waze et bien plus encore
  7. // @author exolium
  8. // @copyright 2015-2021 exolium
  9. // @licence GNU GPL v2
  10. // @grant GM_xmlhttpRequest
  11. // @description When perma is present to offer his version for beta + classic editor and add the profile editor waze
  12. // ==/UserScript==
  13.  
  14. //============================== Options ================================//
  15. var WFTB_Log_level = 5; // 0 = no log / 1 = error / 2 = warn / 3 = min log / 4 = Medium Log / 5 = high detail Log
  16. var WFTB_targetblank = true;
  17. var WFTB_use_layer = true;
  18. var WFTB_button_beta = 'Beta';
  19. var WFTB_button_prod = 'Prod';
  20. var WFTB_button_editorprofil = 'Editor Profil α';
  21. var WFTB_lang = WFTB_lang_en;
  22.  
  23. //============================== Var ====================================//
  24. var WFTB_beta_editor_verify = false;
  25. var WFTB_beta_editor = false;
  26. var WFTB_profil = Array();
  27. var WFTB_Settings = {};
  28. var WFTB_G_EditorsInformations = Array();
  29.  
  30.  
  31. //============================== URL ====================================//
  32. var WFTB_URL_protocol = window.location.protocol + '//';
  33. var WFTB_URL_Base = window.location.hostname;
  34. var WFTB_URL_usergroups = WFTB_URL_protocol + WFTB_URL_Base + '/forum/memberlist.php?mode=group&g=10';
  35. var WFTB_URL_UserProfil_URI = '/user/editor/';
  36.  
  37. //============================== Recherche ==============================//
  38. var WFTB_search_base_url = '//a[contains(@href,\'editor-beta.waze.com\') or (@href,\'beta.waze.com\') or contains(@href,\'www.waze.com\') or contains(@href,\'waze.com\')][contains(@href,\'editor\') OR contains(@href,\'editor)]';
  39. var WFTB_search_perma_layer = 'layers=w+';
  40. var WFTB_search_usergroups_memberships = '//*[@id="ucp"]/div[1]/div/ul[2]';
  41. var WFTB_search_usergroups_memberships_groups = ['//*/div/table/tbody/tr/td[1]/a[1]','//*[@id="memberlist sort-table"]/tbody/tr/td[1]/a[1]'];
  42. var WFTB_search_usergroups_name = '';
  43. var WFTB_search_usergroups_if_leadersheep = '//*[@id="ucp"]/div[1]/div/ul[1]/li/dl/dt';
  44. var WFTB_search_Lang_Selector = '/html/body/div[3]/div[1]/div[6]/div';
  45. var WFTB_search_linklist = '//*[@id="wrap"]/div[2]/div/ul[2]/li[2]';
  46. var WFTB_search_addperma = '//*[@id="format-buttons"]/input[10]';
  47.  
  48. //============================== Bootstrap ==============================//
  49. function WFTB_Bootstrap() {
  50. WFTB_Log('WFTB_Bootstrap', 4, 'Start');
  51.  
  52. if (typeof unsafeWindow === "undefined") {
  53. unsafeWindow = (function () {
  54. var dummyElem = document.createElement('p');
  55. dummyElem.setAttribute('onclick', 'return window;');
  56. return dummyElem.onclick();
  57. }) ();
  58. }
  59.  
  60. /* begin running the code! */
  61. WFTB_Log('WFTB_Bootstrap', 5, 'Init');
  62. unsafeWindow.onload = WFTB_Initialise();
  63. WFTB_Log('WFTB_Bootstrap', 5, document.getElementsByTagName('style')[0].innerHTML);
  64. WFTB_Log('WFTB_Bootstrap', 4, 'End');
  65. }
  66.  
  67. //============================== Library : log ==========================//
  68. function WFTB_Log(WFTB_L_function, WFTB_L_type, WFTB_L_text) {
  69. WFTB_L_text = 'Waze ' + GM_info.script.name + ' ' + GM_info.script.version + ' ' + WFTB_L_function + ' : ' + WFTB_L_text;
  70.  
  71. switch(WFTB_L_type) {
  72. case 1 : // error
  73. if(WFTB_Log_level > 0) console.error(WFTB_L_text);
  74. break;
  75. case 2 : // warn
  76. if(WFTB_Log_level > 1) console.warn(WFTB_L_text);
  77. break;
  78. case 3 : // min log
  79. if(WFTB_Log_level > 2) console.info(WFTB_L_text);
  80. break;
  81. case 4 : // Medium Log
  82. if(WFTB_Log_level > 3) console.info(WFTB_L_text);
  83. break;
  84. case 5 : // high detail Log
  85. if(WFTB_Log_level > 4) console.info(WFTB_L_text);
  86. break;
  87. default: // no log
  88. return;
  89. }
  90. }
  91.  
  92. //============================== WFTB_checkupdate ======================//
  93. function WFTB_checkupdate() {
  94. WFTB_Log('WFTB_checkupdate', 4, 'End');
  95.  
  96. WFTB_Log('WFTB_checkupdate', 5, 'WFTB_Settings.version=' + WFTB_Settings.version);
  97. WFTB_Log('WFTB_checkupdate', 5, 'GM_info.script.version=' + GM_info.script.version);
  98.  
  99. if(WFTB_Settings.version != GM_info.script.version) {
  100. WFTB_Settings.version = GM_info.script.version;
  101. localStorage.WFTB_data = JSON.stringify(WFTB_Settings);
  102. WFTB_Log('WFTB_checkupdate', 5, JSON.stringify(WFTB_Settings));
  103. }
  104.  
  105. if(WFTB_Settings.app_name != GM_info.script.name) {
  106. WFTB_Settings.app_name = GM_info.script.name;
  107. localStorage.WFTB_data = JSON.stringify(WFTB_Settings);
  108. WFTB_Log('WFTB_checkupdate', 5, JSON.stringify(WFTB_Settings));
  109. }
  110.  
  111. WFTB_Log('WFTB_checkupdate', 4, 'End');
  112. }
  113.  
  114. //============================== Library : Version type ========================//
  115. function WFTB_version(){
  116. var return_version;
  117. var WFTB_version_prod = new RegExp("^(?:[0-9]{1,10}\.){1}[0-9]{1,10}$");
  118. var WFTB_version_beta = new RegExp("^(?:[0-9]{1,10}\.){2}[0-9]{1,10}$");
  119. var WFTB_version_alpha = new RegExp("^(?:[0-9]{1,10}\.){3}[0-9]{1,10}$");
  120.  
  121. if (WFTB_version_alpha.test(WFTB_Settings.version)) {
  122. WFTB_Log_level = 5;
  123. return 'alpha';
  124. } else if (WFTB_version_beta.test(WFTB_Settings.version)) {
  125. WFTB_Log_level = 3;
  126. return 'beta';
  127. } else if (WFTB_version_prod.test(WFTB_Settings.version)) {
  128. WFTB_Log_level = 1;
  129. return 'prod';
  130. } else return false;
  131. }
  132.  
  133. //============================== Library : WFTB_insertAfter ============//
  134. function WFTB_insertAfter(WFTB_L_element, WFTB_L_target) {
  135. WFTB_Log('WFTB_insertAfter', 4, 'Start');
  136. WFTB_L_target.parentNode.insertBefore(WFTB_L_element, WFTB_L_target.nextSibling);
  137. WFTB_Log('WFTB_insertAfter', 4, 'End');
  138. }
  139.  
  140. //============================== Library : xpath ========================//
  141. function WFTB_xpath(WFTB_L_query, WFTB_L_element) {
  142. WFTB_Log('WFTB_xpath', 4, 'Start');
  143.  
  144. var WFTB_L_result = document.evaluate(WFTB_L_query, WFTB_L_element, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  145. var WFTB_L_table = new Array();
  146. var WFTB_L_cpt = 0;
  147.  
  148. for (WFTB_L_cpt = 0; WFTB_L_cpt < WFTB_L_result.snapshotLength; WFTB_L_cpt++) WFTB_L_table.push(WFTB_L_result.snapshotItem(WFTB_L_cpt));
  149. WFTB_Log('WFTB_xpath', 4, 'End');
  150. return WFTB_L_table;
  151. }
  152.  
  153. function WFTB_single_xpath(WFTB_L_query, WFTB_L_element) {
  154. WFTB_Log('WFTB_single_xpath', 4, 'Start');
  155. var WFTB_L_elmFirstResult = document.evaluate(WFTB_L_query, WFTB_L_element, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  156. WFTB_Log('WFTB_single_xpath', 4, 'End');
  157. return WFTB_L_elmFirstResult;
  158. }
  159.  
  160. //============================== Create Editor Profil Link ==========================//
  161. function WFTB_Profil(WFTB_L_UserName, WFTB_L_UserColor, WFTB_L_Lang) {
  162. WFTB_Log('WFTB_Profil', 4, 'Start');
  163. var WFTB_L_ProfilLink = document.createElement('a');
  164.  
  165. //
  166. if(WFTB_L_Lang !== undefined) var FTB_L_Lang = '';
  167. WFTB_L_ProfilLink.href = WFTB_URL_protocol + WFTB_URL_Base + '/' + WFTB_L_Lang + WFTB_URL_UserProfil_URI + WFTB_L_UserName;
  168.  
  169. //
  170. if(WFTB_targetblank) WFTB_L_ProfilLink.setAttribute('target', '_blank');
  171. WFTB_L_ProfilLink.setAttribute('title', 'Voir le profil éditeur de ' + WFTB_L_UserName);
  172. WFTB_L_ProfilLink.className = 'username-coloured';
  173. WFTB_L_ProfilLink.style.marginLeft = '5px';
  174. WFTB_L_ProfilLink.style.fontSize = '0.7em';
  175. if(WFTB_L_UserColor !== undefined) WFTB_L_ProfilLink.style.color = WFTB_L_UserColor;
  176. WFTB_L_ProfilLink.innerHTML = '(' + WFTB_button_editorprofil + ')';
  177. WFTB_Log('WFTB_Profil', 5, 'UserProfil link Create for ' + WFTB_L_UserName);
  178.  
  179. WFTB_Log('WFTB_Profil', 4, 'End');
  180. return WFTB_L_ProfilLink;
  181. }
  182.  
  183. //============================== Is Beta Editor =========================//
  184. function WFTB_is_beta_editor() {
  185. WFTB_Log('WFTB_is_beta_editor', 4, 'Start');
  186. var WFTB_L_cpt = 0;
  187. var WFTB_L_usergroup_memberships;
  188.  
  189. //
  190. if(!WFTB_beta_editor_verify) {
  191. GM_xmlhttpRequest({
  192. method: "GET",
  193. url: WFTB_URL_usergroups,
  194. headers: {
  195. "User-Agent": "Mozilla/5.0",
  196. },
  197. onload: function(responseDetails) {
  198. WFTB_Log('WFTB_is_beta_editor', 5, 'Load Userlist page');
  199. var WFTB_usergroups_pg = document.createElement('div');
  200. WFTB_usergroups_pg.innerHTML = responseDetails.responseText;
  201. WFTB_L_usergroup_memberships = WFTB_xpath(WFTB_search_usergroups_memberships_groups[0], WFTB_usergroups_pg);
  202. WFTB_Log('WFTB_is_beta_editor', 5, 'nb occurence ' + WFTB_L_usergroup_memberships.length);
  203.  
  204. // test si est beta tester
  205. /*for(WFTB_L_cpt = 0; WFTB_L_cpt < WFTB_L_usergroup_memberships.length && !WFTB_beta_editor; WFTB_L_cpt++) {
  206. WFTB_beta_editor = WFTB_L_usergroup_memberships[WFTB_L_cpt].getElementsByTagName('a')[0] == 'WME beta testers';
  207. WFTB_Log('WFTB_is_beta_editor', 5, 'occurence ' + WFTB_L_cpt + ' texte ' + WFTB_L_usergroup_memberships[WFTB_L_cpt].getElementsByTagName('a')[0]);
  208. }
  209.  
  210. // test si est leader du groupe
  211. if(WFTB_xpath(WFTB_search_usergroups_if_leadersheep, WFTB_usergroups_pg)[0].innerHTML == 'Leaderships') {
  212. WFTB_Log('WFTB_is_beta_editor', 5, 'You are on Group LeaderShips');
  213. WFTB_L_usergroup_memberships = WFTB_xpath(WFTB_search_usergroups_memberships_groups[1], WFTB_usergroups_pg);
  214. WFTB_Log('WFTB_is_beta_editor', 5, 'NB occurence ' + WFTB_L_usergroup_memberships.length);
  215.  
  216. //
  217. for(WFTB_L_cpt = 0; WFTB_L_cpt < WFTB_L_usergroup_memberships.length && !WFTB_beta_editor; WFTB_L_cpt++) {
  218. WFTB_beta_editor = WFTB_L_usergroup_memberships[WFTB_L_cpt].getElementsByTagName('a')[0].text == 'WME beta testers';
  219. WFTB_Log('WFTB_is_beta_editor', 5, 'Occurence ' + WFTB_L_cpt);
  220. }
  221. }*/
  222. WFTB_Log('WFTB_is_beta_editor', 5, ' WFTB_beta_editor');
  223. WFTB_updatePerma();
  224. }
  225. });
  226. }
  227. else WFTB_updatePerma();
  228.  
  229. WFTB_Log('WFTB_is_beta_editor', 4, 'End');
  230. }
  231.  
  232. //============================== WFTB_updatePerma ======================//
  233. function WFTB_updatePerma() {
  234. WFTB_Log('WFTB_updatePerma', 4, 'Start');
  235.  
  236. var WFTB_L_postlinkList = document.getElementsByClassName("postlink");
  237. var WFTB_L_WME_links = [];
  238. var WFTB_L_href = '';
  239. var WFTB_L_text = '';
  240. var WFTB_L_newURL = '';
  241. var WFTB_L_title = '';
  242. var WFTB_L_cpt = 0;
  243. var WFTB_L_patt_editor = new RegExp('\/editor\/?');
  244. var WFTB_L_patt_user = new RegExp('\/user\/editor\/');
  245. var WFTB_L_patt_wazeurl = new RegExp('http(|s)\:\/\/((editor-|)beta|www)\.waze\.com');
  246.  
  247. // Extraire les permas
  248. for(WFTB_L_cpt = 0; WFTB_L_cpt < WFTB_L_postlinkList.length; WFTB_L_cpt++) {
  249. WFTB_Log('WFTB_updatePerma', 5, 'Perma : '+WFTB_L_postlinkList[WFTB_L_cpt]);
  250.  
  251. // modification http(s)://waze.com en http(s)://www.waze.com
  252. WFTB_L_postlinkList[WFTB_L_cpt].href = WFTB_L_postlinkList[WFTB_L_cpt].href.replace('https\:\/\/waze.com', 'https\:\/\/www.waze.com');
  253. WFTB_L_postlinkList[WFTB_L_cpt].innerHTML = WFTB_L_postlinkList[WFTB_L_cpt].innerHTML.replace('https\:\/\/waze.com', 'https\:\/\/www.waze.com');
  254. WFTB_L_href = WFTB_L_postlinkList[WFTB_L_cpt].getAttribute('href');
  255.  
  256. // suite
  257. if(WFTB_targetblank) WFTB_L_postlinkList[WFTB_L_cpt].setAttribute('target', '_blank');
  258. if(!WFTB_L_patt_editor.test(WFTB_L_href) || WFTB_L_patt_user.test(WFTB_L_href) || !WFTB_L_patt_wazeurl.test(WFTB_L_href) ) continue;
  259. WFTB_L_WME_links.push(WFTB_L_postlinkList[WFTB_L_cpt]);
  260. WFTB_Log('WFTB_updatePerma', 5, 'Extract Perma');
  261. WFTB_L_postlinkList[WFTB_L_cpt].href = WFTB_L_postlinkList[WFTB_L_cpt].href.replace('https\:\/\/editor-beta.waze.com', 'https\:\/\/beta.waze.com');
  262. WFTB_L_postlinkList[WFTB_L_cpt].innerHTML = WFTB_L_postlinkList[WFTB_L_cpt].innerHTML.replace('https\:\/\/editor-beta.waze.com', 'https\:\/\/beta.waze.com');
  263. }
  264.  
  265. // Traitrer les permas
  266. //if(WFTB_beta_editor) {
  267. for(WFTB_L_cpt = 0; WFTB_L_cpt < WFTB_L_WME_links.length; WFTB_L_cpt++) {
  268. WFTB_L_href = WFTB_L_WME_links[WFTB_L_cpt].getAttribute('href');
  269. WFTB_L_patt_editor = new RegExp('www');
  270. WFTB_Log('WFTB_updatePerma', 5, 'Convert URL : ' + WFTB_L_WME_links[WFTB_L_cpt]);
  271.  
  272. // Préparer le permas
  273. if(WFTB_L_patt_editor.test(WFTB_L_href)) {
  274. WFTB_L_text = WFTB_button_beta;
  275. WFTB_L_title = WFTB_label_OiBE[WFTB_lang];
  276. WFTB_L_newURL = WFTB_L_href.replace(WFTB_L_patt_editor, 'beta');
  277. WFTB_Log('WFTB_updatePerma', 5, 'Convert to beta : ' + WFTB_L_newURL);
  278. } else {
  279. WFTB_L_text = WFTB_button_prod;
  280. WFTB_L_title = WFTB_label_OiPE[WFTB_lang];
  281. WFTB_L_newURL = WFTB_L_href.replace(/beta/, 'www');
  282. WFTB_Log('WFTB_updatePerma', 5, 'Convert to prod : ' + WFTB_L_newURL);
  283. }
  284.  
  285. // Installer le permas
  286. var WFTB_htmlA = document.createElement('a');
  287. WFTB_htmlA.href = WFTB_L_newURL;
  288. if(WFTB_targetblank) WFTB_htmlA.setAttribute('target', '_blank');
  289. WFTB_htmlA.setAttribute('title', WFTB_L_title);
  290. WFTB_htmlA.className = 'postlink';
  291. WFTB_htmlA.style.marginLeft = '5px';
  292. WFTB_htmlA.innerHTML = '(' + WFTB_L_text + ')';
  293. WFTB_Log('WFTB_updatePerma', 5, 'Add Perma');
  294. WFTB_insertAfter(WFTB_htmlA, WFTB_L_WME_links[WFTB_L_cpt]);
  295. WFTB_insertAfter(document.createTextNode(" "), WFTB_L_WME_links[WFTB_L_cpt]);
  296. }
  297. //}
  298.  
  299. //WFTB_Log('WFTB_updatePerma', 4, ret );
  300.  
  301. WFTB_Log('WFTB_updatePerma', 4, 'End');
  302. }
  303.  
  304. //=======================================================================//