WME Requests

Opens the Requests module with precompiled fields to submit an request

当前为 2015-03-26 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME Requests
  3. // @namespace https://greasyfork.org/ru/scripts/5085-wme-requests
  4. // @description Opens the Requests module with precompiled fields to submit an request
  5. // @include https://*.waze.com/editor/*
  6. // @include https://*.waze.com/*/editor/*
  7. // @include https://*.waze.com/map-editor/*
  8. // @include https://*.waze.com/beta_editor/*
  9. // @grant none
  10. // @author skirda
  11. // @version 1.9.4.3
  12. // ==/UserScript==
  13.  
  14. var wmer_Version = '1.9.4.3';
  15. var wmer_Form = 'https://docs.google.com/forms/d/1QzvF3-lH8MuuEaSw0GA6LgLW62EiSHzQXBmG5-rQdIQ/viewform';
  16. var wmer_FormCL = 'https://docs.google.com/forms/d/1ck0cCIV6vPy16YQZJvfmM0clOdAE2Z-kDsXn06ZwQ1s/viewform';
  17. var wmer_Docs="https://docs.google.com/spreadsheet/ccc?key=0AtcEFFDNcic4dEE2UFh5X0lDdlRZbno3YVFYUkg0Unc";
  18. var wmer_DocsCL="https://docs.google.com/spreadsheets/d/1ddcW8EmNjojJp7EQ4AYPdfBqNWe28WqRaQ_RtkB8JAU";
  19. var wmer_CountDays = 5;
  20. var wmer_UserCache = new Array();
  21. var wmer_LanguageRU = false;
  22. var wmer_MousePos = '';
  23.  
  24. function wmer_bootstrap()
  25. {
  26. wmer_LanguageRU=window.location.href.indexOf("/ru/") > 0?true:false;
  27.  
  28. if (typeof unsafeWindow === "undefined") {
  29. unsafeWindow = ( function () {
  30. var dummyElem = document.createElement('p');
  31. dummyElem.setAttribute('onclick', 'return window;');
  32. return dummyElem.onclick();
  33. }) ();
  34. }
  35.  
  36. /* begin running the code! */
  37. wmer_Init();
  38. }
  39.  
  40. function consoleLog(text)
  41. {
  42. console.log('WMEUnlockRequest v. ' + wmer_Version + ': ' + text);
  43. }
  44.  
  45. function dump(obj)
  46. {
  47. var out = "";
  48. if(obj && typeof(obj) == "object"){
  49. for (var i in obj) {
  50. out += i + ": " + obj[i] + "\n";
  51. }
  52. } else {
  53. out = obj;
  54. }
  55. return out;
  56. }
  57.  
  58. function wmer_getUsername()
  59. {
  60. var thisUser = Waze.loginManager.user;
  61. if (thisUser === null)
  62. {
  63. alert(wmer_LanguageRU?'Невозможно получить имя текущего пользователя':'Nobody\'s logged in.');
  64. return "";
  65. }
  66. return Waze.loginManager.user.userName;
  67. }
  68.  
  69. function wmer_getCCSD(segment){ // BUBBUB!!! need use "hasOwnProperty" or "in"
  70. consoleLog("start wmer_getCCSD");
  71.  
  72. var oID="";
  73. var streetName="";
  74. var sityName="";
  75. var countryName="";
  76. var description="";
  77. var typeName= "";
  78. var cityID="";
  79. var userID="";
  80. var forumUserID="";
  81. var userName="";
  82.  
  83. try {
  84. typeName=segment.type;
  85. /*
  86. "segment"
  87. "venue"
  88. "node"
  89. "camera" typeName: "Speed camera"
  90. */
  91. oID=segment.fid;
  92. var attributesObj=segment.attributes;
  93. if (attributesObj.hasOwnProperty('primaryStreetID'))
  94. {
  95. //Waze.model.streets.get(Waze.selectionManager.selectedItems[0].model.attributes.primaryStreetID).cityID
  96. consoleLog("found street");
  97. var sID=attributesObj.primaryStreetID;
  98. var streetsObj = wazeModel.streets.get(sID);
  99. cityID=streetsObj.cityID;
  100. streetName=streetsObj.name;
  101. }
  102. else if (typeName === "camera")
  103. {
  104. //Waze.selectionManager.selectedItems[0].model.model.cities.additionalInfo[0].id
  105. consoleLog("found camera");
  106. streetName=segment.typeName;
  107. description="\rSpeed: "+attributesObj.speed+"\rValidated: "+attributesObj.validated + "\rAzymuth: "+attributesObj.azymuth+"\rType: "+attributesObj.type;
  108. cityID=segment.model.cities.additionalInfo[0].id;
  109. if (cityID == null)
  110. cityID="";
  111. }
  112. else if (typeName === "node")
  113. {
  114. //Waze.selectionManager.selectedItems[0].model.segments.topCityID
  115. consoleLog("found node");
  116. cityID=''+segment.model.segments.topCityID;
  117.  
  118. if (cityID == null)
  119. cityID="";
  120. description="count segment(s)="+attributesObj.segIDs.length;
  121. }
  122. else // "venue"
  123. {
  124. consoleLog("found POI ("+typeName+")");
  125. //Waze.model.streets.get(Waze.selectionManager.selectedItems[0].attributes.streetID).cityID
  126. var sID=attributesObj.streetID;
  127. if (sID == null)
  128. cityID="";
  129. else
  130. cityID=wazeModel.streets.get(sID).cityID;
  131.  
  132. if (sID == null)
  133. cityID="";
  134.  
  135. description='\rCategories: '+Waze.selectionManager.selectedItems[0].attributes.categories.join(';') + '.\r' + attributesObj.description;
  136. if (Waze.selectionManager.selectedItems[0].attributes.categories.indexOf("GAS_STATION") != -1) // Gas Station
  137. {
  138. typeName="gas station"
  139. description="Brand: "+attributesObj.brand + "\rAddress: " + attributesObj.address + "\nDescription: " + attributesObj.description
  140. }
  141. streetName=attributesObj.name;
  142. }
  143.  
  144. if (!(typeName === "camera" || typeName === "node" || cityID === "")) // BUGBUG!!!
  145. {
  146. console.log('WMEUnlockRequest v. ' + wmer_Version + ': cityID=' + cityID);
  147. var cityObj=wazeModel.cities.get(cityID);
  148.  
  149. var countryID=cityObj.countryID;
  150. sityName=cityObj.name;
  151. var countriesObj=wazeModel.countries.get(countryID);
  152.  
  153. countryName = countriesObj.name;
  154. }
  155.  
  156. if (!(typeName === "node"))
  157. {
  158. userID=attributesObj.updatedBy;
  159. if (userID == null)
  160. userID=attributesObj.createdBy;
  161.  
  162. if (userID==-1 || userID == null)
  163. {
  164. userID=attributesObj.createdBy;
  165. if (userID==-1)
  166. {
  167. consoleLog("Do not PM Admin!");
  168. }
  169. }
  170.  
  171. userName=wazeModel.users.get(userID).userName;
  172. consoleLog("userName="+userName);
  173. }
  174. else
  175. userID="-1";
  176. consoleLog("userID=" +userID);
  177.  
  178. }
  179. catch (err) {
  180. console.log('WMEUnlockRequest v. ' + wmer_Version + ': error: ' +err.name);
  181. }
  182.  
  183. consoleLog("return from wmer_getCCSD");
  184. return {
  185. objid : oID,
  186. type : typeName,
  187. street : streetName,
  188. sity : sityName,
  189. cityID : cityID,
  190. country : countryName,
  191. description : description,
  192. username : userName,
  193. userID : userID,
  194. forumuserID : forumUserID
  195. };
  196. }
  197.  
  198.  
  199. function wmer_userRank(segment)
  200. {
  201. var usrRank = 0;
  202. if (segment.attributes.lockRank)
  203. {
  204. var updatedBy = wazeModel.users.get(segment.attributes.updatedBy);
  205. return updatedBy != null ? updatedBy.rank : 0;
  206. }
  207. return 0;
  208. }
  209.  
  210. //It returns the maximum lock level
  211. function wmer_GetLevel() {
  212. //attributes.rank dovrebbe essere il road rank
  213. var sel = Waze.selectionManager.selectedItems;
  214. var maxR = wmer_userRank(sel[0]);
  215. for (i = 1; i < sel.length; i++)
  216. {
  217. if (maxR == 5)
  218. {
  219. return 6;
  220. }
  221. var usrRank = wmer_userRank(sel[i]);
  222. if (usrRank > maxR) {
  223. maxR = usrRank;
  224. }
  225. }
  226. return maxR + 1;
  227. }
  228.  
  229. function click_WMERequest() {
  230. consoleLog("click_WMERequest()::Action: "+this.id);
  231. if (typeof Waze.selectionManager === "undefined")
  232. {
  233. consoleLog('Waze.selectionManager not found');
  234. return;
  235. }
  236. if (Waze.selectionManager.selectedItems.length == 0)
  237. {
  238. alert(wmer_LanguageRU?'Нет выделенных объектов':'No selected segments.');
  239. return;
  240. }
  241. if (Waze.selectionManager.selectedItems.length < 2 && this.id == 'wmerBtn_join')
  242. {
  243. alert(wmer_LanguageRU?'Вы должны выделить 2 сегмента':'You must select 2 segments.');
  244. return;
  245. }
  246.  
  247. var username = wmer_getUsername();
  248. var sccObj = wmer_getCCSD(Waze.selectionManager.selectedItems[0].model);
  249.  
  250. var lockLevel = wmer_GetLevel();
  251. if (lockLevel == 1 && this.id == 'wmerBtn_lock')
  252. {
  253. alert(wmer_LanguageRU?'Выбранные сегменты уже разблокированы':'Selected segments are already unlocked');
  254. return;
  255. }
  256.  
  257. consoleLog("My level: "+Waze.loginManager.user.normalizedLevel);
  258. consoleLog("Lock level: "+lockLevel);
  259.  
  260. if (lockLevel <= Waze.loginManager.user.normalizedLevel && this.id == 'wmerBtn_lock') {
  261. alert(wmer_LanguageRU?'Выбранные сегменты имеют доступный вам уровень блокировки':'Selected segments have a lock level that is less or equal to yours')
  262. return;
  263. }
  264.  
  265. var description='type: ' + sccObj.type + '\r' +
  266. 'country: '+ sccObj.country + '\r' +
  267. 'sity: ' + sccObj.sity + '\r' +
  268. 'street/name: ' + sccObj.street + '\r' +
  269. 'description: ' + sccObj.description;
  270.  
  271. description = description.replace(/%/g, '%25');
  272. description = description.replace(/\+/g, '%2B'); // +
  273. description = description.replace(' ', '%20'); // ' '
  274. description = description.replace(/\r\n/g, '\r'); // '\r\n'
  275. description = description.replace(/\r/g, '%0A'); // '\n'
  276. description = description.replace(/&/g, '%26');
  277. description = description.replace(/</g, '%3C');
  278. description = description.replace(/\>/g, '%3E');
  279. description = description.replace(/\?/g, '%3F');
  280. description = description.replace(/=/g, '%3D');
  281.  
  282. var permalink = wmer_generate_permalink();
  283. consoleLog("permalink=" + permalink);
  284. permalink = permalink.replace(/%/g, '%25'); //???
  285. permalink = permalink.replace(/&/g, '%26');
  286. permalink = permalink.replace(/\?/g, '%3F');
  287. permalink = permalink.replace(/=/g, '%3D');
  288. permalink = permalink.replace(/</g, '%3C');
  289. permalink = permalink.replace(/\>/g, '%3E');
  290. //You can get entry numbers in google stylesheet: "Answers->Get precompiled URL"
  291. var curDate=new Date();
  292. curDate.setDate(curDate.getDate() + wmer_CountDays);
  293.  
  294. var action="";
  295. switch(this.id)
  296. {
  297. case 'wmerBtn_lock':
  298. action='lock';
  299. break;
  300. case 'wmerBtn_join':
  301. action='join';
  302. break;
  303. case 'wmerBtn_dir':
  304. action='direction';
  305. break;
  306. }
  307.  
  308. function zero2(d){
  309. if((""+d).length == 1)
  310. d="0" + "" + d;
  311. return d;
  312. }
  313.  
  314. var url = wmer_Form +
  315. '?entry.1230839078=' + username +
  316. '&entry.390417455=' + permalink +
  317. '&entry.1224334113=' + lockLevel +
  318. '&entry.1508498769=' + sccObj.country +
  319. '&entry.1856604039=' + action +
  320. '&entry.259824358=' + description +
  321. '&entry.571885954='+curDate.getFullYear()+'-'+zero2(curDate.getMonth()+1)+'-'+zero2(curDate.getDate());
  322. //entry.1797072526=e-mail
  323.  
  324.  
  325. // https://docs.google.com/forms/d/1ck0cCIV6vPy16YQZJvfmM0clOdAE2Z-kDsXn06ZwQ1s/viewform?
  326. /*
  327. entry.1109766685=skirda
  328. entry.1785513403=vskirdin@gmail.com
  329. entry.1300384005=http://permalink
  330. entry.1967623256=name
  331. entry.1408672148=%D0%B3%D0%BE%D1%80%D0%BE%D0%B4
  332. entry.327157830=state
  333. entry.677704585=region
  334. */
  335. var urlCL = wmer_FormCL +
  336. '?entry.1109766685=' + username +
  337. '&entry.1300384005=' + permalink +
  338. '';
  339.  
  340. //consoleLog(url);
  341. window.open(this.id == 'wmerBtn_cl'?urlCL:url, '_blank');
  342. }
  343.  
  344. function wmer_generate_permalink() {
  345. var wcp=document.getElementsByClassName('WazeControlPermalink');
  346. for(var i=0; i < wcp.length; ++i)
  347. for (var j=0; j < wcp[i].getElementsByTagName('a').length;++j)
  348. {
  349. var href=wcp[i].getElementsByTagName('a')[j].href;
  350. if (href.indexOf(".waze.com/") > 0 && href.indexOf("/editor") > 0)
  351. {
  352. return href;
  353. }
  354. }
  355. return "";
  356. }
  357.  
  358.  
  359. function wmer_insertButton()
  360. {
  361. if(document.getElementById('WME.Request_' + wmer_Version) != null)
  362. document.getElementById('WME.Request_' + wmer_Version).setAttribute('style', 'display:'+(Waze.selectionManager && Waze.selectionManager.selectedItems.length == 0?'none':'')+';');
  363.  
  364. if(Waze.selectionManager.selectedItems.length == 0)
  365. return;
  366.  
  367. var editPanelID='';
  368. var disabled=false;
  369. var disabledLock=false;
  370. var disabledPM=false;
  371.  
  372. if (document.getElementById('segment-edit-general') != null)
  373. {
  374. editPanelID='segment-edit-general';
  375. disabled=false;
  376. disabledLock=false;
  377. }
  378. else if (document.getElementById('landmark-edit-general') != null)
  379. {
  380. editPanelID='landmark-edit-general';
  381. disabledLock=false;
  382. disabled=true;
  383. }
  384. else if (document.getElementById('node-edit-general') != null)
  385. {
  386. editPanelID='node-edit-general';
  387. disabled=true;
  388. disabledPM=true;
  389. disabledLock=true;
  390. }
  391. else if (document.getElementById('edit-panel') != null)
  392. {
  393. editPanelID='edit-panel';
  394. disabled=true;
  395. disabledLock=true;
  396. }
  397.  
  398. if(document.getElementById('WME.Request_' + wmer_Version) == null)
  399. {
  400. srsCtrl = document.createElement('section');
  401. srsCtrl.id = 'WME.Request_' + wmer_Version;
  402.  
  403. srsCtrl.innerHTML = '<hr>'+
  404. '<a href="' + wmer_Docs + '" target="_gdocRequest">Requests:</a> '+
  405. '(<a href="https://www.waze.com/forum/viewtopic.php?p=662218#p662218" title="WME Requests ' + wmer_Version + '" style="font-size: 10px" target="_blank">?</a>)&nbsp;/&nbsp;'+
  406. '<a href="' + wmer_DocsCL + '" target="_gdocRequest">CityLock:</a> '+
  407. '(<a href="https://www.waze.com/forum/viewtopic.php?f=787&t=105793" title="City Lock ' + wmer_Version + '" style="font-size: 10px" target="_blank">?</a>)'+
  408. '</br>'+
  409. '<button id="wmerBtn_lock" class="btn btn-default" style="font-size:9px;padding:6px 10px" title="'+
  410. (wmer_LanguageRU?'Отправить запрос на изменение уровня блокировки объектов':'Send a request to lock/unlock segment(s)')+
  411. '"><i class="icon-unlock"></i>&nbsp;Lock</button>&nbsp;' +
  412. '<button id="wmerBtn_join" class="btn btn-default" style="font-size:9px;padding:6px 10px" title="'+
  413. (wmer_LanguageRU?'Отправить запрос на присоединение сегментов':'Send a request to join several segments')+
  414. '"><i class="icon-cogs"></i>&nbsp;Join</button>&nbsp;' +
  415. '<button id="wmerBtn_dir" class="btn btn-default" style="font-size:9px;padding:6px 10px" title="'+
  416. (wmer_LanguageRU?'Отправить запрос на изменение направления движения сегментов':'Send a request to change the direction of segment(s)')+
  417. '"><i class="icon-random"></i>&nbsp;Dir</button>&nbsp;' +
  418. '<button id="wmerBtn_pm" class="btn btn-default" style="font-size:9px;padding:6px 10px" title="'+
  419. (wmer_LanguageRU?'Отправить приватное сообщение в форум авторам выделенных объектов':'Send (in forum) a Private Message to the author of the segment')+
  420. '"><i class="icon-envelope"></i>&nbsp;PM</button>&nbsp;' +
  421. '<button id="wmerBtn_cl" class="btn btn-default" style="font-size:9px;padding:6px 10px" title="'+
  422. (wmer_LanguageRU?'Отправить запрос на изменение наименования населенного пункта':'Send a request to CityLock')+
  423. '"><i class="icon-home"></i>&nbsp;City</button>' +
  424. '</br><span id="wmerCityID"></span>'+
  425. '</br><span id="wmerLatLon"></span>'+
  426. '<hr>';
  427. //http://www.earthtools.org/sun/51.65500265464235/39.18297673378902/22/1/99/0
  428. document.getElementById(editPanelID).appendChild(srsCtrl);
  429.  
  430. document.getElementById('wmerBtn_lock').onclick = click_WMERequest;
  431. document.getElementById('wmerBtn_dir').onclick = click_WMERequest;
  432. document.getElementById('wmerBtn_join').onclick = click_WMERequest;
  433. document.getElementById('wmerBtn_pm').onclick = click_submitPMForm;
  434. document.getElementById('wmerBtn_cl').onclick = click_WMERequest;
  435.  
  436. var sccObj = wmer_getCCSD(Waze.selectionManager.selectedItems[0].model);
  437. consoleLog("WME.Request_" + wmer_Version +": " + sccObj.cityID);
  438.  
  439. var permalink=wmer_generate_permalink();
  440. var p = document.getElementsByClassName('olControlMousePosition')[0].innerHTML.replace(' ', '').split(',');
  441. permalink=permalink.replace(/#/g, "").replace(/&lat=([0-9\.]+)/g, '&lat='+p[1]).replace(/&lon=([0-9\.]+)/g, '&lon='+p[0]);
  442. /*
  443. if (typeof Waze.selectionManager.selectedItems[0].geometry.x !== "undefined")
  444. {
  445. // корректировка пермалинка для камеры, жанкшина и Place (point)
  446. var urPos=new OpenLayers.LonLat(Waze.selectionManager.selectedItems[0].geometry.x,Waze.selectionManager.selectedItems[0].geometry.y);
  447. urPos.transform(new OpenLayers.Projection("EPSG:900913"),new OpenLayers.Projection("EPSG:4326")); // {lon, lat}
  448. permalink=permalink.replace(/#/g, "").replace(/&lat=([0-9\.]+)/g, '&lat='+urPos.lat).replace(/&lon=([0-9\.]+)/g, '&lon='+urPos.lon);
  449. }
  450. */
  451. //document.getElementById('wmerCityID').innerHTML='<small><a href="'+permalink+'">cityID: '+sccObj.cityID+'</a></small>';
  452. document.getElementById('wmerCityID').innerHTML='<small>cityID: '+sccObj.cityID+'</small>';
  453. //document.getElementById('wmerLatLon').innerHTML='<small>'+p[0]+','+p[1]+'</a></small>';
  454.  
  455. consoleLog("WME.Request_" + wmer_Version +" initialised");
  456.  
  457. }
  458.  
  459. if(document.getElementById('WME.Request_' + wmer_Version) != null)
  460. {
  461. document.getElementById('wmerBtn_lock').disabled=disabledLock;
  462. document.getElementById('wmerBtn_dir').disabled=disabled;
  463. document.getElementById('wmerBtn_join').disabled=disabled;
  464. document.getElementById('wmerBtn_pm').disabled=disabledPM;
  465. document.getElementById('wmerBtn_cl').disabled=disabled;
  466. }
  467. }
  468.  
  469.  
  470. // <WME Fancy permalink> - http://userscripts.org/users/548866
  471. function getId(node) {
  472. return document.getElementById(node);
  473. }
  474.  
  475. function getForumUserIdFromID(wmeUserID)
  476. {
  477. consoleLog("call getForumUserIdFromID(" + wmeUserID + ")");
  478. var userName=wazeModel.users.get(wmeUserID);
  479. console.dir(userName);
  480. return (getForumUserIdFromName(userName.userName));
  481. }
  482.  
  483. function getForumUserIdFromName(userName)
  484. {
  485. consoleLog("call getForumUserIdFromName(" + userName + ")");
  486. var forumID=-1;
  487. var forumIDs=new Array();
  488.  
  489. if (userName.indexOf('/')!=-1)
  490. {
  491. var userNames=userName.split('/');
  492. for (var i=0; i<userNames.length; i++)
  493. {
  494. forumID=getForumUserIdFromName(userNames[i]);
  495. forumIDs[i]=forumID[0];
  496. }
  497. return forumIDs;
  498. }
  499.  
  500. consoleLog("looking for " + userName + " in the forum.");
  501.  
  502. var xhr3_object;
  503.  
  504. if(window.XMLHttpRequest) // Firefox & Chrome
  505. xhr3_object = new XMLHttpRequest();
  506. else if(window.ActiveXObject) // Internet Explorer
  507. xhr3_object = new ActiveXObject("Microsoft.XMLHTTP");
  508.  
  509. xhr3_object.open("GET", "https://www.waze.com/forum/memberlist.php?username=" + userName, false);
  510.  
  511. xhr3_object.onreadystatechange = function() {
  512. if(xhr3_object.readyState == 4)
  513. {
  514. var test = xhr3_object.responseText.match(/u=([0-9]+)"/g);
  515. if (test==null)
  516. {
  517. consoleLog('Forum return null');
  518. return(-1); // no match
  519. }
  520. if (test.length>1)
  521. {
  522. consoleLog('Forum return multiple match:');
  523. console.dir(test);
  524. return(-2); // multiple match
  525. }
  526. forumID=test[0].substring(2, test[0].length-1);
  527. }
  528. };
  529.  
  530. console.dir(xhr3_object);
  531.  
  532. try {
  533. xhr3_object.send(null);
  534. }
  535. catch (err) {
  536. consoleLog("XMLHttpRequest error: " +err.name);
  537. console.dir(err);
  538. return(-3);
  539. }
  540. forumIDs[0]=forumID;
  541. return (forumIDs);
  542. }
  543.  
  544. function click_submitPMForm()
  545. {
  546. if (typeof Waze.selectionManager === "undefined")
  547. {
  548. consoleLog('Waze.selectionManager not found');
  549. return;
  550. }
  551.  
  552. if (Waze.selectionManager.selectedItems.length == 0)
  553. {
  554. alert(wmer_LanguageRU?'Сначала необходимо выделить сегмент':'Please, select one segment before');
  555. return false;
  556. }
  557.  
  558. //-------------
  559. var sccObjs=new Array();
  560. for (var i=0; i < Waze.selectionManager.selectedItems.length; ++i)
  561. {
  562. var sccObj = wmer_getCCSD(Waze.selectionManager.selectedItems[i].model);
  563. if (sccObj.userID==-1)
  564. {
  565. consoleLog("PM request - Do not PM Admin!");
  566. alert("Can't PM admin!");
  567. return false;
  568. }
  569.  
  570. var j;
  571. for (j=0; j < wmer_UserCache.length; j+=2)
  572. {
  573. if (wmer_UserCache[j] === sccObj.userID)
  574. {
  575. sccObj.forumuserID=wmer_UserCache[j+1];
  576. consoleLog("found ["+j+"]"+wmer_UserCache[j+1]);
  577. break;
  578. }
  579. }
  580.  
  581. if (sccObj.forumuserID == "")
  582. {
  583. consoleLog("not found "+sccObj.userID);
  584. sccObj.forumuserID=getForumUserIdFromID(sccObj.userID);
  585. wmer_UserCache.push(sccObj.userID,sccObj.forumuserID);
  586. }
  587.  
  588. sccObjs.push(sccObj);
  589. }
  590.  
  591. var forumIDs=new Array();
  592. for (var i=0; i < sccObjs.length; ++i)
  593. forumIDs[i]=sccObjs[i].forumuserID;
  594. //-------------
  595.  
  596. if (forumIDs.length==1 && forumIDs[0]==-1)
  597. {
  598. consoleLog("PM request - User never logged to the forum...");
  599. alert(wmer_LanguageRU?'Автор сегмента не найден на форуме':'Sorry: unable to find the user in the forum');
  600. return false;
  601. }
  602. if (forumIDs.length==1 && forumIDs[0]==-2)
  603. {
  604. consoleLog("PM request - Several users match name. Should never happen :s");
  605. alert(wmer_LanguageRU?'Найдено более одного пользователя\nОтправьте сообщение самостоятельно.':'Sorry: more than one user found in the forum.\nYou should look for him/her by yourself.');
  606. return false;
  607. }
  608. if (forumIDs.length==1 && forumIDs[0]==-3)
  609. {
  610. consoleLog("A network error occurred.");
  611. alert(wmer_LanguageRU?'Сетевые проблемы\nОтправьте сообщение самостоятельно.':'Sorry: a network error occurred.\nYou should look for him/her by yourself.');
  612. return false;
  613. }
  614.  
  615. consoleLog("PM request - all OK. go to PM!");
  616.  
  617. var formID="WMER-PM-FORM";
  618.  
  619. var nodePM;
  620.  
  621. if (getId("WMER-PM-Send") == null)
  622. {
  623. nodePM= document.createElement('div');
  624. nodePM.id = 'WMER-PM-Send';
  625. nodePM.style.display='hidden';
  626. getId('WME.Request_' + wmer_Version).appendChild(nodePM);
  627. }
  628. else
  629. {
  630. nodePM=getId("WMER-PM-Send");
  631. }
  632.  
  633. var PMForm;
  634. PMForm='<form id="' + formID + '" target="_blank" method="post" style="display: inline">';
  635. PMForm+='<input id="' + formID + '-subject" type="hidden" name="subject" value="" />';
  636. PMForm+='<input type="hidden" name="addbbcode20" value="100" />';
  637. PMForm+='<input id="' + formID + '-message" type="hidden" name="message" value="" />';
  638. PMForm+='<input type="hidden" name="preview" value="Preview" />';
  639. PMForm+='<input type="hidden" name="attach_sig" value="on" />';
  640. PMForm+='<input id="' + formID + '-ct" type="hidden" name="creation_time" value="0" />';
  641. PMForm+='<input id="' + formID + '-lc" type="hidden" name="lastclick" value="0" />';
  642. for (var i=0; i<forumIDs.length; i++)
  643. {
  644. PMForm+='<input type="hidden" name="address_list[u]['+forumIDs[i]+']" value="to" />';
  645. }
  646. PMForm+='</form>';
  647. nodePM.innerHTML=PMForm;
  648.  
  649. var permalink=wmer_generate_permalink();
  650. linkParts=permalink.replace(/#/g, "").split('&');
  651. for (var j=0; j<linkParts.length; j++)
  652. {
  653. if (linkParts[j].indexOf("segments=")==0)
  654. {
  655. linkParts.splice (j,1);
  656. break;
  657. }
  658. }
  659. //console.dir(linkParts);
  660.  
  661. var message=wmer_LanguageRU?
  662. 'Есть вопросы по вашим правкам в [url=' + permalink + ']этой области редактирования[/url]:\n\n':
  663. 'Some questions about [url=' + permalink + ']this area[/url]:\n\n';
  664.  
  665. permalink=linkParts.join('&');
  666.  
  667. for (var i=0; i < sccObjs.length; ++i)
  668. {
  669. message += '[b]2' + sccObjs[i].username + '[/b]: '+
  670. sccObjs[i].type+' ('+
  671. '[url=' + permalink + '&segments=' + sccObjs[i].objid + ']'+
  672. (sccObjs[i].country === ''?'':'country: [b]'+sccObjs[i].country+'[/b]/')+
  673. (sccObjs[i].sity === ''?'':'sity: [b]'+sccObjs[i].sity+'[/b]/')+
  674. 'name: [b]'+(sccObjs[i].street==null?'<<noname>>':sccObjs[i].street)+'[/b]'+
  675. (sccObjs[i].description === ''?'':'/description: [b]'+sccObjs[i].description+'[/b]') +
  676. '[/url])\n\n';
  677. }
  678. //consoleLog(message);
  679.  
  680. getId(formID + '-message').value=message;
  681. var now=new Date().getTime();
  682. now /= 1000;
  683. now = Math.floor(now);
  684. getId(formID + '-ct').value=now;
  685. getId(formID + '-lc').value=now;
  686.  
  687. getId(formID).action="https://www.waze.com/forum/ucp.php?i=pm&mode=compose&action=post";
  688. getId(formID + '-subject').value=
  689. wmer_LanguageRU?
  690. '[WME Request] Уточнение по вашим правкам.':
  691. '[WME Request] Question about your map edits';
  692.  
  693. //console.dir(getId(formID));
  694.  
  695. getId(formID).submit();
  696. return true; // this forces to open in new tab!
  697. }
  698. // </WME Fancy permalink>
  699.  
  700.  
  701. function wmer_WazeBits()
  702. {
  703. if (typeof Waze === "undefined")
  704. Waze=unsafeWindow.Waze;
  705.  
  706. if (typeof Waze === "undefined")
  707. Waze=window.Waze;
  708. }
  709.  
  710. function wmer_FakeLoad()
  711. {
  712. wmer_WazeBits();
  713.  
  714. if (typeof Waze === "undefined")
  715. {
  716. consoleLog('Waze not found, retrying in 500ms...');
  717. setTimeout(wmer_FakeLoad,500);
  718. return;
  719. }
  720. if (typeof Waze.selectionManager === "undefined")
  721. {
  722. consoleLog('Waze.selectionManager not found, retrying in 500ms...');
  723. setTimeout(wmer_FakeLoad,500);
  724. return;
  725. }
  726. if (typeof Waze.model === "undefined")
  727. {
  728. consoleLog('Waze.model not found, retrying in 500ms...');
  729. setTimeout(wmer_FakeLoad,500);
  730. return;
  731. }
  732.  
  733. wazeModel = Waze.model;
  734.  
  735. try {
  736. Waze.selectionManager.events.register("selectionchanged", null, wmer_insertButton);
  737. consoleLog('added event handler');
  738. }
  739. catch (err) {
  740. consoleLog("added event handler error: " +err.name);
  741. }
  742. }
  743.  
  744. function wmer_Init() {
  745. consoleLog('init');
  746. setTimeout(wmer_FakeLoad, 500);
  747. }
  748.  
  749. wmer_bootstrap();