WF ToolBox Lib Alpha mod

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

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

  1. // ==UserScript==
  2. // @name WF ToolBox Lib Alpha mod
  3. // @namespace WFTB_ns
  4. // @version 0.0.1.18
  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. //============================== Options ================================//
  14. var WFTB_Log_level = 5; // 0 = no log / 1 = error / 2 = warn / 3 = min log / 4 = Medium Log / 5 = high detail Log
  15. var WFTB_targetblank = true;
  16. var WFTB_use_layer = true;
  17. var WFTB_button_beta = 'Beta';
  18. var WFTB_button_prod = 'Prod';
  19. var WFTB_button_editorprofil = 'Editor Profil A';
  20. var WFTB_lang = WFTB_lang_en;
  21. //============================== Var ====================================//
  22. var WFTB_beta_editor_verify = false;
  23. var WFTB_beta_editor = false;
  24. var WFTB_profil = Array();
  25. var WFTB_Settings = {};
  26. //============================== URL ====================================//
  27. var WFTB_URL_protocol = window.location.protocol + '//';
  28. var WFTB_URL_Base = window.location.hostname;
  29. var WFTB_URL_usergroups = WFTB_URL_protocol + WFTB_URL_Base + '/forum/ucp.php?i=167';
  30. var WFTB_URL_UserProfil_URI = '/user/editor/';
  31. //============================== Recherche ==============================//
  32. 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)]';
  33. var WFTB_search_perma_layer = 'layers=w+';
  34. var WFTB_search_usergroups_memberships = '//*[@id="ucp"]/div[1]/div/ul[2]';
  35. var WFTB_search_usergroups_memberships_groups = ['//*[@id="ucp"]/div[1]/div/ul[2]/li','//*[@id="ucp"]/div[1]/div/ul[4]/li'];
  36. var WFTB_search_usergroups_name = '';
  37. var WFTB_search_usergroups_if_leadersheep = '//*[@id="ucp"]/div[1]/div/ul[1]/li/dl/dt';
  38. var WFTB_search_Lang_Selector = '/html/body/div[3]/div[1]/div[6]/div';
  39. var WFTB_search_linklist = '//*[@id="wrap"]/div[2]/div/ul[2]/li[2]';
  40. var WFTB_search_addperma = '//*[@id="format-buttons"]/input[10]';
  41. //============================== Bootstrap ==============================//
  42. function WFTB_Bootstrap() {
  43. WFTB_Log('WFTB_Bootstrap', 4, 'Start');
  44. if (typeof unsafeWindow === "undefined") {
  45. unsafeWindow = (function () {
  46. var dummyElem = document.createElement('p');
  47. dummyElem.setAttribute('onclick', 'return window;');
  48. return dummyElem.onclick();
  49. }) ();
  50. }
  51. /* begin running the code! */
  52. WFTB_Log('WFTB_Bootstrap', 5, 'Init');
  53. unsafeWindow.onload = WFTB_Initialise();
  54. WFTB_Log('WFTB_Bootstrap', 5, document.getElementsByTagName('style')[0].innerHTML);
  55. WFTB_Log('WFTB_Bootstrap', 4, 'End');
  56. }
  57. //============================== Library : log ==========================//
  58. function WFTB_Log(WFTB_L_function, WFTB_L_type, WFTB_L_text) {
  59. WFTB_L_text = 'Waze ' + GM_info.script.name + ' ' + GM_info.script.version + ' ' + WFTB_L_function + ' : ' + WFTB_L_text;
  60. switch(WFTB_L_type) {
  61. case 1 : // error
  62. if(WFTB_Log_level > 0) console.error(WFTB_L_text);
  63. break;
  64. case 2 : // warn
  65. if(WFTB_Log_level > 1) console.warn(WFTB_L_text);
  66. break;
  67. case 3 : // min log
  68. if(WFTB_Log_level > 2) console.info(WFTB_L_text);
  69. break;
  70. case 4 : // Medium Log
  71. if(WFTB_Log_level > 3) console.info(WFTB_L_text);
  72. break;
  73. case 5 : // high detail Log
  74. if(WFTB_Log_level > 4) console.info(WFTB_L_text);
  75. break;
  76. default: // no log
  77. return;
  78. }
  79. }
  80. //============================== WFTB_updatePerma ======================//
  81. function WFTB_checkupdate() {
  82. WFTB_Log('WFTB_checkupdate', 4, 'End');
  83. WFTB_Log('WFTB_checkupdate', 5, 'WFTB_Settings.version=' + WFTB_Settings.version);
  84. WFTB_Log('WFTB_checkupdate', 5, 'GM_info.script.version=' + GM_info.script.version);
  85. if(WFTB_Settings.version != GM_info.script.version) {
  86. WFTB_Settings.version = GM_info.script.version;
  87. localStorage.WFTB_data = JSON.stringify(WFTB_Settings);
  88. WFTB_Log('WFTB_checkupdate', 5, JSON.stringify(WFTB_Settings));
  89. }
  90. if(WFTB_Settings.app_name != GM_info.script.name) {
  91. WFTB_Settings.app_name = GM_info.script.name;
  92. localStorage.WFTB_data = JSON.stringify(WFTB_Settings);
  93. WFTB_Log('WFTB_checkupdate', 5, JSON.stringify(WFTB_Settings));
  94. }
  95. WFTB_Log('WFTB_checkupdate', 4, 'End');
  96. }
  97. //============================== Library : Version type ========================//
  98. function WFTB_version(){
  99. var return_version;
  100. var WFTB_version_prod = new RegExp("^(?:[0-9]{1,10}\.){1}[0-9]{1,10}$");
  101. var WFTB_version_beta = new RegExp("^(?:[0-9]{1,10}\.){2}[0-9]{1,10}$");
  102. var WFTB_version_alpha = new RegExp("^(?:[0-9]{1,10}\.){3}[0-9]{1,10}$");
  103. if (WFTB_version_alpha.test(WFTB_Settings.version)) {
  104. WFTB_Log_level = 5;
  105. return 'alpha';
  106. } else if (WFTB_version_beta.test(WFTB_Settings.version)) {
  107. WFTB_Log_level = 3;
  108. return 'beta';
  109. } else if (WFTB_version_prod.test(WFTB_Settings.version)) {
  110. WFTB_Log_level = 1;
  111. return 'prod';
  112. } else return false;
  113. }
  114. //============================== Library : WFTB_insertAfter ============//
  115. function WFTB_insertAfter(WFTB_L_element, WFTB_L_target) {
  116. WFTB_Log('WFTB_insertAfter', 4, 'Start');
  117. WFTB_L_target.parentNode.insertBefore(WFTB_L_element, WFTB_L_target.nextSibling);
  118. WFTB_Log('WFTB_insertAfter', 4, 'End');
  119. }
  120. //============================== Library : xpath ========================//
  121. function WFTB_xpath(WFTB_L_query, WFTB_L_element) {
  122. WFTB_Log('WFTB_xpath', 4, 'Start');
  123. var WFTB_L_result = document.evaluate(WFTB_L_query, WFTB_L_element, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  124. var WFTB_L_table = new Array()
  125. var WFTB_L_cpt = 0;
  126. 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));
  127. WFTB_Log('WFTB_xpath', 4, 'End');
  128. return WFTB_L_table;
  129. }
  130. function WFTB_single_xpath(WFTB_L_query, WFTB_L_element) {
  131. WFTB_Log('WFTB_single_xpath', 4, 'Start');
  132. var WFTB_L_elmFirstResult = document.evaluate(WFTB_L_query, WFTB_L_element, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  133. WFTB_Log('WFTB_single_xpath', 4, 'End');
  134. return WFTB_L_elmFirstResult;
  135. }
  136. //============================== Waze Userprofil ==========================//
  137. function WFTB_AddUserProfil() {
  138. WFTB_Log('WFTB_AddUserProfil', 4, 'Start');
  139. // Insert UserProfil
  140. var WFTB_L_LST_A = document.getElementsByTagName('a');
  141. var WFTB_L_LST_UserA = Array();
  142. var WFTB_L_cpt = 0;
  143. var WFTB_L_patt_vp = new RegExp('mode=viewprofile');
  144. var WFTB_L_patt_nologin = new RegExp('waze\.com\/');
  145. var WFTB_L_LinkList = Array();
  146. var WFTB_L_Profil;
  147. if(WFTB_L_patt_vp.test(window.location.href)) {
  148. WFTB_L_LinkList = WFTB_xpath('//*[@id="viewprofile"]/div[1]/div/dl/dd[1]/span', document);
  149. WFTB_Log('WFTB_AddUserProfil', 5, 'xpath linklist ' + WFTB_L_LinkList.length);
  150. // Add
  151. if(WFTB_L_LinkList.length == 1) {
  152. WFTB_Log('WFTB_AddUserProfil', 5, 'xpath pseudo ' + WFTB_L_LinkList[0].innerHTML);
  153. WFTB_insertAfter(WFTB_Profil(WFTB_L_LinkList[0].innerHTML, WFTB_L_LinkList[0].style.color, 'fr'), WFTB_L_LinkList[0]);
  154. }
  155. } else {
  156. // Extract Userprofil login
  157. WFTB_Log('WFTB_AddUserProfil', 5, 'url de la page ' + window.location.href);
  158. if(WFTB_L_LST_A.length > 0) {
  159. for(WFTB_L_cpt = 0; WFTB_L_cpt < WFTB_L_LST_A.length; WFTB_L_cpt++) {
  160. try {
  161. if(!WFTB_L_patt_nologin.test(WFTB_L_LST_A[WFTB_L_cpt].innerHTML))if(WFTB_L_patt_vp.test(WFTB_L_LST_A[WFTB_L_cpt].href)) WFTB_L_LST_UserA.push(WFTB_L_LST_A[WFTB_L_cpt]);
  162. }
  163. catch(e) {
  164. WFTB_Log('WFTB_AddUserProfil', 2, 'Vive les tag A sans href');
  165. }
  166. }
  167. }
  168. // Add Editor Userprofil
  169. if(WFTB_L_LST_UserA.length > 0) {
  170. for(WFTB_L_cpt = 0; WFTB_L_cpt < WFTB_L_LST_UserA.length; WFTB_L_cpt++) {
  171. WFTB_L_Profil = WFTB_Profil(WFTB_L_LST_UserA[WFTB_L_cpt].innerHTML, WFTB_L_LST_UserA[WFTB_L_cpt].style.color, 'fr');
  172. WFTB_Log('WFTB_AddUserProfil', 2, 'href=' + WFTB_L_Profil.href + ' et InnerHTML=' + WFTB_L_Profil.innerHTML + ' WFTB_L_Profil ' + WFTB_L_LST_UserA[WFTB_L_cpt]);
  173. WFTB_insertAfter(WFTB_L_Profil, WFTB_L_LST_UserA[WFTB_L_cpt]);
  174. }
  175. }
  176. }
  177. WFTB_Log('WFTB_AddUserProfil', 4, 'End');
  178. }
  179. //============================== Create Editor Profil Link ==========================//
  180. function WFTB_Profil(WFTB_L_UserName, WFTB_L_UserColor, WFTB_L_Lang) {
  181. WFTB_Log('WFTB_Profil', 4, 'Start');
  182. var WFTB_L_ProfilLink = document.createElement('a');
  183. //
  184. if(WFTB_L_Lang !== undefined) var FTB_L_Lang = '';
  185. WFTB_L_ProfilLink.href = WFTB_URL_protocol + WFTB_URL_Base + '/' + WFTB_L_Lang + WFTB_URL_UserProfil_URI + WFTB_L_UserName;
  186. //
  187. if(WFTB_targetblank) WFTB_L_ProfilLink.setAttribute('target', '_blank');
  188. WFTB_L_ProfilLink.setAttribute('title', 'Voir le profil éditeur de ' + WFTB_L_UserName);
  189. WFTB_L_ProfilLink.className = 'username-coloured';
  190. WFTB_L_ProfilLink.style.marginLeft = '5px';
  191. WFTB_L_ProfilLink.style.fontSize = '0.7em';
  192. if(WFTB_L_UserColor !== undefined) WFTB_L_ProfilLink.style.color = WFTB_L_UserColor;
  193. WFTB_L_ProfilLink.innerHTML = '(' + WFTB_button_editorprofil + ')';
  194. WFTB_Log('WFTB_updatePerma', 5, 'UserProfil link Create for ' + WFTB_L_UserName);
  195. WFTB_Log('WFTB_Profil', 4, 'End');
  196. return WFTB_L_ProfilLink;
  197. }
  198. //============================== Is Beta Editor =========================//
  199. function WFTB_is_beta_editor() {
  200. WFTB_Log('WFTB_is_beta_editor', 4, 'Start');
  201. var WFTB_L_cpt = 0;
  202. var WFTB_L_usergroup_memberships;
  203. //
  204. if(!WFTB_beta_editor_verify) {
  205. GM_xmlhttpRequest({
  206. method: "GET",
  207. url: WFTB_URL_usergroups,
  208. headers: {
  209. "User-Agent": "Mozilla/5.0",
  210. },
  211. onload: function(responseDetails) {
  212. WFTB_Log('WFTB_is_beta_editor', 5, 'Load Userlist page');
  213. var WFTB_usergroups_pg = document.createElement('div');
  214. WFTB_usergroups_pg.innerHTML = responseDetails.responseText;
  215. WFTB_L_usergroup_memberships = WFTB_xpath(WFTB_search_usergroups_memberships_groups[0], WFTB_usergroups_pg);
  216. WFTB_Log('WFTB_is_beta_editor', 5, 'nb occurence ' + WFTB_L_usergroup_memberships.length);
  217. //
  218. for(WFTB_L_cpt = 0; WFTB_L_cpt < WFTB_L_usergroup_memberships.length && !WFTB_beta_editor; WFTB_L_cpt++) {
  219. WFTB_beta_editor = WFTB_L_usergroup_memberships[WFTB_L_cpt].getElementsByTagName('a')[0].text == 'WME beta testers';
  220. WFTB_Log('WFTB_is_beta_editor', 5, 'occurence ' + WFTB_L_cpt);
  221. }
  222. //
  223. if(WFTB_xpath(WFTB_search_usergroups_if_leadersheep, WFTB_usergroups_pg)[0].innerHTML == 'Leaderships') {
  224. WFTB_Log('WFTB_is_beta_editor', 5, 'You are on Group LeaderShips');
  225. WFTB_L_usergroup_memberships = WFTB_xpath(WFTB_search_usergroups_memberships_groups[1], WFTB_usergroups_pg);
  226. WFTB_Log('WFTB_is_beta_editor', 5, 'NB occurence ' + WFTB_L_usergroup_memberships.length);
  227. //
  228. for(WFTB_L_cpt = 0; WFTB_L_cpt < WFTB_L_usergroup_memberships.length && !WFTB_beta_editor; WFTB_L_cpt++) {
  229. WFTB_beta_editor = WFTB_L_usergroup_memberships[WFTB_L_cpt].getElementsByTagName('a')[0].text == 'WME beta testers';
  230. WFTB_Log('WFTB_is_beta_editor', 5, 'Occurence ' + WFTB_L_cpt);
  231. }
  232. }
  233. WFTB_Log('WFTB_is_beta_editor', 5, ' WFTB_beta_editor');
  234. WFTB_updatePerma();
  235. }
  236. });
  237. }
  238. else WFTB_updatePerma();
  239. WFTB_Log('WFTB_is_beta_editor', 4, 'End');
  240. }
  241. //=======================================================================//

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址