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

当前为 2021-07-14 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/416769/950342/WF%20ToolBox%20Lib%20Alpha.js

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