WME Color Errors

Adds colours to show errors

当前为 2020-12-31 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME Color Errors
  3. // @name:fr WME Color Errors
  4. // @version 0.91
  5. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAALuSURBVHja7Jots6swEIb7x6qiUFVVUVEoVBSqKioqU8EfqKpCRaE6FShMo5gjUCiOYebOzTXnvaKlhR44LbS9vcyQmVWdbt5nd7P5GGbr/eFjvT98jtQ+Zuv9oVzvDxiplbMTyVgBPieACWACmADeD/Bn7ABfE8D77PfYAfBUgFCt4DEKZz7H/Js5oMzDSoXPBPh6GCBSHAvSJviGkQW4it4HECmvI9IncygYY2ALcgPGgTccpD9AkQRwf4g4cQPEWYnzsDHkXRlxESTFawFixUDOkxIwIeEvLiKojFFclKPIDOJwhWWX6AWHWF35VPFrAEJeKwXHw9aUsIm8TO6GyE7S80iA3bUuCGRiUZotPKeWRR4+F0DXxBMeIrNHoUaRhhAAKCJei+htI8ocnZUGG7c+j34OQF08FTvk5xLJELJKiEICAEixWfbsRuySOSDHTtA+ED8D5Jo3nF3EA4CBqkR4p98KDd63nc4VTMNv3gga1/lwALeahCoYi6tRA5hzhFmJPFr1Kp92AADWQNHqd3cYQORX7Y1D52gZObQ3YAO7Nu86s5X7Wjb9qD/AOboihkX7SDfLhwGWm7TDu0UsLlnqDbATVR1SKGO7CEAfAqDo0m+NOvsmYjdsDXByq4wsYkkGAxDZkd1cN+YevIgbPb11IV8vuB52lz8CHhWP7QNG1foyC5CULZMWMWQfCCoRFy1+ygQBq+07yjxnJ65vLnMqELWVk82gBbvRRh24MuroOhFELQi0u+6HnYViSRuLT+gUbclAmSEOFVYeOx6nGQPzJbY6Qdb+B6RaNJoBlfFrTqNZ6DfuAIQJ6LTE0FGmGoKRRob8MHv9haY56RxkwaG0QV7am6JtkSHRCvzqokOY+Lc3slR3HJkdCuatoIIAwdmOJUWdtosMg9Dp++7EpiWad+0Bp6z9V68S6/0BgfTBvr1MOKCMwZfBs59Vfs3G/CZUvczZ6XV6ApgAJoAJYAIYM8DoP/YY9ec2fwcAaebQXj6i79wAAAAASUVORK5CYII=
  6. // @description Adds colours to show errors
  7. // @description:fr Colorisation pour afficher les erreurs
  8. // @include https://www.waze.com/editor*
  9. // @include https://www.waze.com/*/editor*
  10. // @include https://beta.waze.com/*
  11. // @exclude https://www.waze.com/user/*
  12. // @exclude https://www.waze.com/*/user/*
  13. // @namespace https://gf.qytechs.cn/fr/scripts/21186-wme-color-errors
  14. // @author Sebiseba
  15. // @copyright Sebiseba 2014-2020
  16. // @grant none
  17. // ==/UserScript==
  18.  
  19. var WMECErrors={}, ColorErrors_mapLayer=[], CErrLeg, CErrSeg, CErrPoi, debug="";
  20. var ActiveCountry, ABBR, UpdateObject, cntryDB = {
  21. FR: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0, prv_lvl:null, prk_lvl:null, off_lvl:null },
  22. GP: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0, prv_lvl:null, prk_lvl:null, off_lvl:null },
  23. MB: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0, prv_lvl:null, prk_lvl:null, off_lvl:null },
  24. FG: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0, prv_lvl:null, prk_lvl:null, off_lvl:null },
  25. RE: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0, prv_lvl:null, prk_lvl:null, off_lvl:null },
  26. FP: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0, prv_lvl:null, prk_lvl:null, off_lvl:null }
  27. }; // France
  28. var CErrWaze, CErrorsMap, CErrorsModel, CErrorsI18n, CErrorsOpenLayers, CErrorshandle, CErrorshandleClass, CErrorshandleClass2,
  29.  
  30. //french rules
  31. streetNameSeg="^(^Le |^La |^Les |Grande |Allée |[ ]?Avenue[]?|Boulevard |Chemin |Cité |Clos |Côte |Cour[s]? |Descente |Domaine |Hameau |Impasse |Levée |Lotissement |Mail |Montée |Parc |Parvis |Passage |Place |Placette |Pont |Promenade |Quai |Résidence[s]? |Route |[ ]?Rue[ ]?|Ruelle |Sente |Sentier |Square |Terrasse |Traverse |Venelle |Villa |Voie )",
  32. parkNameSeg="^(Aire |Place |Square )",
  33. excepNameSeg="(Périphérique |Rocade |Duplex |Tunnel |Pont )",
  34. privNameSeg="^(Allée |Avenue |Boulevard |Chemin |Clos |Côte |Cours |Faubourg |Hameau |Impasse |Lotissement |Mail |Parvis |Passage |Port |Porte |Promenade |Quai |Route |Rue |Ruelle |Sente |Sentier |Terrasse |Voie )",
  35. parkNamePoi="(Parking[s]?|Parc-Relais|Placette|Aire|Arrêt|Emplacement)",
  36. religiousPoi="(Abbatiale |Abbaye |Basilique |Calvaire |Carmel |Cathédrale |Chapelle |Cloître |Collégiale |Conjuratoire |Couvent |Crypte |Dôme |Église |Grande Mosquée |Grotte |Mandir |Maison Diocésaine |Monastère |Mosquée |Notre-Dame |Oratoire |Ordre |Pagode |Paroisse |Presbytère |Prieuré |Sanctuaire |Stupa |Synagogue |Temple )",
  37. busPoi="(Bus[ ][-][ ]|Gare Routière)",
  38. tramPoi="(Tramway[ ][-][ ]|Métro[ ][-][ ])",
  39. possibleTransPoi="(Tram$|Métro$|Arrêt$|Gare$|Station$|Tram |Métro |Arrêt |Gare |Station )",
  40.  
  41. // common all countries
  42. stationsPoi="(CAR_WASH|CHARGING_STATION|FACTORY_INDUSTRIAL|GAS_STATION|JUNCTION_INTERCHANGE|PARKING_LOT|SEAPORT_MARINA_HARBOR|SKI_AREA|SUPERMARKET_GROCERY|TAXI_STATION|TRANSPORTATION|TRASH_AND_RECYCLING_FACILITIES)",
  43. landmarkPoi="(RIVER_STREAM|CANAL|SEA_LAKE_POOL|POOL|SWAMP_MARSH|ISLAND|FOREST_GROVE|BRIDGE)",
  44. excepCatPoi="(RIVER_STREAM|CANAL|SEA_LAKE_POOL|SWAMP_MARSH|ISLAND|FOREST_GROVE|BRIDGE|SWAMP_MARSH|PARK|JUNCTION_INTERCHANGE|CEMETERY|TUNNEL)",
  45. entryPointPoi="(BRIDGE|CANAL|FOREST_GROVE|ISLAND|JUNCTION_INTERCHANGE|POOL|RIVER_STREAM|SEA_LAKE_POOL|SWAMP_MARSH|TUNNEL)",
  46. wazeBot="(admin|avseu|WazeFeed|waze-maint-bot|Waze3rdparty)";
  47.  
  48. // *********************
  49. // ** HELPER FUNCTION **
  50. // *********************
  51. function getId(node) {
  52. return document.getElementById(node);
  53. }
  54. function getElementsByClassName(classname, node) {
  55. node || (node=document.getElementsByTagName("body")[0]);
  56. for (var a=[], re=new RegExp("\\b" + classname + "\\b"), els=
  57. node.getElementsByTagName("*"), i=
  58. 0, j=
  59. els.length;i < j;i++) {
  60. re.test(els[i].className) && a.push(els[i]);
  61. }
  62. return a;
  63. }
  64. function IsJsonString(str) {
  65. try {
  66. JSON.parse(str);
  67. } catch (e) {
  68. return false;
  69. }
  70. return true;
  71. }
  72. function getSelectedFeatures(){
  73. if(!W.selectionManager.getSelectedFeatures)
  74. return W.selectionManager.selectedItems;
  75. return W.selectionManager.getSelectedFeatures();
  76. }
  77. function openInNewTab(url) {
  78. var win = window.open('https://wazeopedia.waze.com/wiki/France/' + url, '_blank');
  79. win.focus();
  80. }
  81. function onScreen(obj) {
  82. if (obj.geometry) {
  83. return(W.map.getExtent().intersectsBounds(obj.geometry.getBounds()));
  84. }
  85. return(false);
  86. }
  87.  
  88. // *************
  89. // ** INIT **
  90. // *************
  91. function CErrors_bootstrap() {
  92. if (typeof unsafeWindow === "undefined") {
  93. unsafeWindow =( function () {
  94. var dummyElem=document.createElement('p');
  95. dummyElem.setAttribute('onclick', 'return window;');
  96. return dummyElem.onclick();
  97. }) ();
  98. }
  99. console.log("starting WME Color Errors", GM_info.script.version);
  100. CErrors_init();
  101. fixTel();
  102. }
  103. function CErrors_init(){
  104. // W object needed
  105. CErrWaze=unsafeWindow.W; if(typeof(CErrWaze) === 'undefined'){ if (debug) { console.error("WME ColorErrors - CErrWaze : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  106. CErrorsMap=CErrWaze.map; if(typeof(CErrorsMap) == 'undefined'){ if (debug) { console.error("WME ColorErrors - CErrorsmap : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  107. CErrorsModel=CErrWaze.model; if(typeof(CErrorsModel) == 'undefined'){ if (debug) { console.error("WME ColorErrors - CErrorsmodel : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  108. if(typeof(CErrorsModel.getTopCountry()) === 'undefined' || CErrorsModel.getTopCountry() === null){ if (debug) { console.error("WME ColorErrors - CErrorsmodel Countries top : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  109. CErrorsI18n=unsafeWindow.I18n; if(typeof (CErrorsI18n) == 'undefined') { if (debug) { console.error('WME ColorErrors - CErrorsI18n : NOK'); } setTimeout(CErrors_init, 500); return; }
  110. // OpenLayers
  111. CErrorsOpenLayers=unsafeWindow.OpenLayers; if(typeof(CErrorsOpenLayers) === 'undefined'){ if (debug) { console.error("WME ColorErrors - OL : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  112. // Waze GUI needed
  113. CErrorshandle=getId("user-info"); if(typeof(CErrorshandle) == 'undefined'){ window.setTimeout(CErrors_init, 500); return; }
  114. CErrorshandleClass=getElementsByClassName("nav-tabs", CErrorshandle)[0]; if(typeof(CErrorshandleClass) === 'undefined'){ window.setTimeout(CErrors_init, 500); return; }
  115. CErrorshandleClass2=getElementsByClassName("tab-content", CErrorshandle)[0]; if(typeof(CErrorshandleClass2) === 'undefined'){ window.setTimeout(CErrors_init, 500); return; }
  116.  
  117. // Verify localStorage. Init if empty or not correct
  118. if (typeof(localStorage.WMEColorErrors) === "undefined" || localStorage.WMEColorErrors.lenght===null || !IsJsonString(localStorage.WMEColorErrors)) {
  119. WMECErrors.opacity=0.85; // Icons Opacity on map
  120. WMECErrors.myLvl=false; // Show when editable
  121. WMECErrors.seg_Bad=false; // Bad Segments (group)
  122. WMECErrors.seg_Priv=true; // Private with bad name
  123. WMECErrors.seg_Park=true; // Parking with name (but Place / Square)
  124. WMECErrors.seg_Rail=true; // Railroad with bad name
  125. WMECErrors.seg_HW_name=true; //Highways with bad name
  126. WMECErrors.seg_Dir_name=true; // Directions but not Ramp/Freeway
  127. WMECErrors.seg_Toll=true; // Toll (but Ramp/Freeway)
  128. WMECErrors.seg_Ramp_name=true; // Ramp with 3 directions or more
  129. WMECErrors.seg_Ramp_city=true; // Ramp with city name
  130. WMECErrors.seg_RShield=true; // Wrong prefix
  131. WMECErrors.seg_RSAlt=true; //Roadshield must be in alt
  132. WMECErrors.seg_SNameAlt=true; //Road name must be in alt
  133. WMECErrors.seg_DleSpace=true; // Double space in name
  134. WMECErrors.seg_SegBadRS=true; // RoadShield but bad type
  135. WMECErrors.seg_HNFree=true; // House number on Freeway or ramp
  136. WMECErrors.seg_BadSpeed=true; // Bad speed (ex: >80km/h in city)
  137. WMECErrors.seg_BadAltState=true; // Alt State != Main State
  138. WMECErrors.seg_EmptyCityAlt=true; // Alt City is empty
  139. WMECErrors.seg_LockValue=true; // Bad lock
  140. // POI
  141. WMECErrors.poi_Bad=false; // Bad POI (group)
  142. WMECErrors.poi_Park_name=true; // Parking with [P]
  143. WMECErrors.poi_Address=true; // Dxxx/Nxxx in or no address
  144. WMECErrors.poi_Entry=true; // Entry Point not defined
  145. WMECErrors.poi_LandM=true; // Landmark with address (street |& city)
  146. WMECErrors.poi_DleSpace=true; // Double space in name
  147. // Low errors
  148. WMECErrors.poi_Resid=true; // Maybe a residential
  149. WMECErrors.poi_Google=true; // No link with Google
  150. WMECErrors.poi_Phone=true; // bad phone number format
  151. WMECErrors.poi_WFeed=true; // Place created by WazeFeed
  152. WMECErrors.poi_WPark=true; // Place created by WazeParking1
  153. WMECErrors.poi_Relig=true; // Religious Center with bad name
  154. WMECErrors.poi_Transp=true; // Bad type or bad name for Buses, Subway or Tramway
  155. WMECErrors.poi_GasSta=true; // Gas Station with bad name
  156. WMECErrors.poi_Other=true; // Place "Other"
  157. //Autolock
  158. WMECErrors.autoLock=true; // Autolock
  159. localStorage.setItem('WMEColorErrors', JSON.stringify(WMECErrors));
  160. }
  161.  
  162. // WME Layers check
  163. var layersColor=CErrorsMap.getLayersBy("uniqueName","__WME_Color_Errors"), layersIcons=CErrorsMap.getLayersBy("uniqueName","__WME_Color_Errors_Icons");
  164. var ColorErrors_style=new CErrorsOpenLayers.Style({
  165. pointRadius: 2,
  166. fontWeight: "normal",
  167. label : "${labelText}",
  168. fontFamily: "Tahoma, Courier New",
  169. labelOutlineColor: "#FFFFFF",
  170. labelOutlineWidth: 2,
  171. fontColor: '#000000',
  172. fontSize: "10px"
  173. });
  174. if (layersColor.length === 0) {
  175. ColorErrors_mapLayer=new CErrorsOpenLayers.Layer.Vector("Color Errors", {
  176. displayInLayerSwitcher: false,
  177. uniqueName: "__WME_Color_Errors",
  178. styleMap: new CErrorsOpenLayers.StyleMap(ColorErrors_style)
  179. });
  180. CErrorsI18n.translations[CErrorsI18n.locale].layers.name["__WME_Color_Errors"]="Color Errors";
  181. CErrorsMap.addLayer(ColorErrors_mapLayer);
  182. ColorErrors_mapLayer.setVisibility(true);
  183. }
  184. if (layersIcons.length === 0) {
  185. ColorErrors_mapLayerIcons=new CErrorsOpenLayers.Layer.Vector("Color Errors Icons", {
  186. displayInLayerSwitcher: false,
  187. uniqueName: "__WME_Color_Errors_Icons",
  188. styleMap: new CErrorsOpenLayers.StyleMap(ColorErrors_style)
  189. });
  190. CErrorsI18n.translations[CErrorsI18n.locale].layers.name["__WME_Color_Errors_Icons"]="Color Errors Icons";
  191. CErrorsMap.addLayer(ColorErrors_mapLayerIcons);
  192. ColorErrors_mapLayerIcons.setVisibility(true);
  193. }
  194. UpdateObject = require("Waze/Action/UpdateObject");
  195. ActiveCountry = W.model.getTopCountry().abbr;
  196. ABBR = cntryDB[ActiveCountry];
  197. CErrors_Mainhtml();
  198. }
  199. function CErrAddInfo(){
  200. if (getSelectedFeatures().length !== 0 && !getId('ErrorsList')) {
  201. var CEtest = document.createElement('li');
  202. CEtest.id = "ErrorsList";
  203. if(getElementsByClassName('additional-attributes')[0]) getElementsByClassName('additional-attributes')[0].appendChild(CEtest);
  204. }
  205. }
  206.  
  207. // *************
  208. // ** HTML **
  209. // *************
  210. function CErrors_Mainhtml() {
  211. if (CErrorsI18n.locale == 'fr') {
  212. CErrSeg=new Array('Contrôle des segments',
  213. 'Mauvais segments',
  214. 'Voie privée avec possible mauvais nom',
  215. 'Voie de Parking nommée',
  216. 'Voie ferrée nommée ou nom en alt',
  217. 'Types Routes avec mauvais nom',
  218. 'Bretelle avec plusieurs directions',
  219. 'Direction (sauf bretelle et Autoroute)',
  220. 'Mauvais préfixe (RoadShield)',
  221. 'Double espace dans le nom',
  222. 'Péage (sauf bretelle et Autoroute)',
  223. 'Bretelle/Autoroute avec nom de ville',
  224. 'Le RoadShield doit être en alt',
  225. 'Le nom de route doit être en alt',
  226. 'RoadShield sur mauvais type de voie',
  227. 'N° de rue sur mauvais type de voie',
  228. 'Mauvaise vitesse validée',
  229. 'Département alt différent du principal',
  230. 'Lock non conforme (Auto ou valeur)',
  231. 'Alt non conforme'
  232. );
  233. CErrPoi=new Array('Contrôle des places',
  234. 'Mauvaises places',
  235. 'Parking mal nommé ou sans nom',
  236. 'Pas d\'adresse ou contenant Dxxx/Nxxx',
  237. 'Point d\'entrée non défini',
  238. 'Site naturel avec adresse',
  239. 'Double espace dans le nom',
  240. 'Peut-être une place résidentielle',
  241. 'Pas de lien avec Google',
  242. 'Lieu édité par WazeFeed',
  243. 'Lieu de type "Autres"',
  244. 'Lieu édité par WazeParking1',
  245. 'Parking : type non défini',
  246. 'Mauvais format du n° de tel',
  247. 'Lieu de culte (nom ou catégorie)',
  248. 'Transport (nom ou catégorie)',
  249. 'Station-Service mal nommée',
  250. );
  251. CErrLeg=new Array('Légende',
  252. 'A corriger',
  253. 'A vérifier',
  254. 'Pour information',
  255. 'Réglages',
  256. 'Opacité des icônes',
  257. 'Afficher seulements les éditables',
  258. 'Verrouillé par la publicité',
  259. 'Auto-verrouillage'
  260. );
  261. }
  262. else {
  263. CErrSeg=new Array('Segments Checking',
  264. 'Bad Segments',
  265. 'Private with possible bad name',
  266. 'Parking with bad name or without',
  267. 'Railroad with name or altname',
  268. 'Highways with bad name',
  269. 'Ramp with several directions',
  270. 'Direction (but Ramp/Freeway)',
  271. 'Wrong prefix (RoadShield)',
  272. 'Double spacing in name',
  273. 'Toll (but Ramp/Freeway)',
  274. 'Ramp/Freeway with city name',
  275. 'RoadShield must be in alt',
  276. 'Road name must be in alt',
  277. 'RoadShield but bad type',
  278. 'HN but bad type',
  279. 'Bad speed verified',
  280. 'Alt State dirrent to Main State',
  281. 'Bad lock (Auto or value)',
  282. 'Bad Alt'
  283. );
  284. CErrPoi=new Array('Places Checking',
  285. 'Bad Places',
  286. 'Parking with bad name or null',
  287. 'No address or Dxxx/Nxxx within',
  288. 'Entry Point not defined',
  289. 'Natural features with address',
  290. 'Double spacing in name',
  291. 'Maybe a residential place',
  292. 'No link with Google',
  293. 'Place created by WazeFeed',
  294. 'Place type is "Other"',
  295. 'Place created by WazeParking1',
  296. 'Parking : type undefined',
  297. 'Bad phone number format',
  298. 'Religious Center (name or cat)',
  299. 'Transportation (name or cat)',
  300. 'Gas Station with bad name'
  301. );
  302. CErrLeg=new Array('Legend',
  303. 'To correct',
  304. 'To check',
  305. 'For information',
  306. 'Settings',
  307. 'Icons opacity',
  308. 'Show when editable',
  309. 'Locked by ad',
  310. 'Autolock'
  311. );
  312. }
  313. //Create content in CErrors's tab
  314. var CEnewtab=document.createElement('li');
  315. CEnewtab.innerHTML="<a href='#sidepanel-ColorErrors' data-toggle='tab'><span class='fa fa-eye' title='Color Errors'></span></a>";
  316. CErrorshandleClass.appendChild(CEnewtab);
  317.  
  318. var WMECErrors=JSON.parse(localStorage.getItem('WMEColorErrors'));
  319. if (typeof(WMECErrors.autoLock) == "undefined") { WMECErrors.autoLock=false; }
  320. var CEaddon=document.createElement('section');
  321. CEaddon.id="sidepanel-ColorErrors";
  322. var CEcontent='<div style="float:left; margin-left:5px;padding-bottom:10px;"><b><a href="https://gf.qytechs.cn/fr/scripts/21186-wme-color-errors" target="_blank"><u>WME Color Errors</u></a></b> v'+ GM_info.script.version +'</div>'
  323. + '<H6 style="float:left;clear:both;">'+CErrLeg[4]+'</H6><span style="float:left;clear:both;font-weight:bold;margin-top:10px;">'+CErrLeg[5]+'</span><input id="errOpacity" type="range" max="1" min="0" step="0.05" style="float:left;width:240px;"><div id="opacityValue" style="float:left;font-weight:bold;padding-left:10px;"></div>'
  324. + '<div style="float:left;clear:both;"><input type="checkbox" id="_myLvl"'+(WMECErrors.myLvl ? ' checked' : '')+'/> '+CErrLeg[6]+'</div>'
  325. + '<br><br><H6 style="float:left;margin-top:10px;">'+CErrSeg[0]+'</H6><div style="clear:both;">'
  326. + '<input type="checkbox" id="_seg_Bad"'+(WMECErrors.seg_Bad ? ' checked' : '')+'/> <label for="_seg_Bad" style="font-weight:normal;">'+CErrSeg[1]+'</label><br><div id="BadSeg" style="margin-left:5px;"><table>'
  327. + fillHtml("seg_Priv", "seg_Bad","#ff7700","\uf256",CErrSeg[2])
  328. + fillHtml("seg_Ramp_name", "seg_Bad","#ff7700","\uf25a",CErrSeg[6])
  329. + fillHtml("seg_BadSpeed", "seg_Bad","#ff7700","\uf1ce",CErrSeg[16])
  330. + fillHtml("seg_BadAltState","seg_Bad","#ff7700","\uf037",CErrSeg[17])
  331. + fillHtml("seg_EmptyCityAlt","seg_Bad","#ff7700","\uf064",CErrSeg[19])
  332. + fillHtml("seg_LockValue", "seg_Bad","#ff7700","\uf023",CErrSeg[18])
  333. + fillHtml("seg_Park", "seg_Bad","#ff0000","\uf288",CErrSeg[3])
  334. + fillHtml("seg_Rail", "seg_Bad","#ff0000","\uf238",CErrSeg[4])
  335. + fillHtml("seg_Dir_name", "seg_Bad","#ff0000","\uf0a9",CErrSeg[7])
  336. + fillHtml("seg_Toll", "seg_Bad","#ff0000","\uf155",CErrSeg[10])
  337. + fillHtml("seg_Ramp_city", "seg_Bad","#ff0000","\uf015",CErrSeg[11])
  338. + fillHtml("seg_SNameAlt", "seg_Bad","#ff0000","\uf079",CErrSeg[13])
  339. + fillHtml("seg_DleSpace", "seg_Bad","#ff0000","\uf101",CErrSeg[9])
  340. + fillHtml("seg_HW_name", "seg_Bad","#ff0000","\uf018",CErrSeg[5])
  341. + fillHtml("seg_RSAlt", "seg_Bad","#ff0000","\uf074",CErrSeg[12])
  342. + fillHtml("seg_RShield", "seg_Bad","#ff0000","\uf152",CErrSeg[8])
  343. + fillHtml("seg_SegBadRS", "seg_Bad","#ff0000","\uf044",CErrSeg[14])
  344. + fillHtml("seg_HNFree", "seg_Bad","#ff0000","\uf162",CErrSeg[15])
  345.  
  346. + '</table></div></div><br><H6 style="float:left;">'+CErrPoi[0]+'</H6><div style="clear:both;"><tr><td><input type="checkbox" id="_poi_Bad"'+(WMECErrors.poi_Bad ? ' checked' : '')+'/> <label for="_poi_Bad" style="font-weight:normal;">'+CErrPoi[1]+'</label><br><div id="BadPoi" style="margin-left:5px;"><table>'
  347. + fillHtml("poi_Address", "poi_Bad","#ff0000","\uf2bc",CErrPoi[3])
  348. + fillHtml("poi_LandM", "poi_Bad","#ff0000","\uf1bb",CErrPoi[5])
  349. + fillHtml("poi_DleSpace", "poi_Bad","#ff0000","\uf101",CErrPoi[6])
  350. + fillHtml("poi_Transp", "poi_Bad","#ff0000","\uf207",CErrPoi[15])
  351. + fillHtml("poi_GasSta", "poi_Bad","#ff0000","\uf1b9",CErrPoi[16])
  352. + fillHtml("poi_Park_name","poi_Bad","#ff0000","\uf288",CErrPoi[2])
  353. + fillHtml("poi_Park_type","poi_Bad","#ff0000","\uf11d",CErrPoi[12])
  354. + fillHtml("poi_Relig", "poi_Bad","#ff0000","\uf015",CErrPoi[14])
  355. + fillHtml("poi_Entry", "poi_Bad","#ff7700","\uf18e",CErrPoi[4])
  356. + fillHtml("poi_Resid", "poi_Bad","#ff7700","\uf015",CErrPoi[7])
  357. + fillHtml("poi_Google", "poi_Bad","#ff7700","\uf1a0",CErrPoi[8])
  358. + fillHtml("poi_Phone", "poi_Bad","#ff7700","\uf095",CErrPoi[13])
  359. + fillHtml("poi_Other", "poi_Bad","#ff7700","\uf29c",CErrPoi[10])
  360. + fillHtml("poi_WFeed", "poi_Bad","#ffcc00","\uf263",CErrPoi[9])
  361. + fillHtml("poi_WPark", "poi_Bad","#ffcc00","\uf263",CErrPoi[11])
  362. + '</table></div></div><br><H6 style="float:left;">'+CErrLeg[0]+'</H6><div style="clear:both;">'
  363. + '<table><tr><td><div style="margin:5px;width:30px;height:2px;background-color:#ff0000;"></div></td><td>'+CErrLeg[1]+'</td></tr>'
  364. + '<tr><td><div style="margin:5px;width:30px;height:2px;background-color:#ff7700;"></div></td><td>'+CErrLeg[2]+'</td></tr>'
  365. + '<tr><td><div style="margin:5px;width:30px;height:2px;background-color:#ffcc00;"></div></td><td>'+CErrLeg[3]+'</td></tr>'
  366.  
  367. + '</table></div></div><div id="CMOnly"><br><H6 style="float:left;">'+CErrLeg[8]+'</H6><div style="clear:both;"><tr><td><input type="checkbox" id="_autoLock"'+(WMECErrors.autoLock ? ' checked' : '')+(typeof(ABBR) == 'undefined' ? 'disabled' : ' ')+'/> <label id="_autoLockLabel" for="_autoLock" style="font-weight:normal;">'+CErrLeg[8]+' ('+W.model.getTopCountry().name+')</label><br><div id="AutoLock" style="margin-left:5px;"><table>'
  368. + fillHtmlAL("Freeway",I18n.translations[I18n.locale].segment.road_types[3], (ABBR.fwy_lvl+1))
  369. + fillHtmlAL("Ramp", I18n.translations[I18n.locale].segment.road_types[4], (ABBR.rmp_lvl+1))
  370. + fillHtmlAL("Major", I18n.translations[I18n.locale].segment.road_types[6], (ABBR.maj_lvl+1))
  371. + fillHtmlAL("Minor", I18n.translations[I18n.locale].segment.road_types[7], (ABBR.min_lvl+1))
  372. + fillHtmlAL("Primary",I18n.translations[I18n.locale].segment.road_types[2], (ABBR.pri_lvl+1))
  373. + fillHtmlAL("Street", I18n.translations[I18n.locale].segment.road_types[1], (ABBR.str_lvl+1))
  374. + fillHtmlAL("Railway",I18n.translations[I18n.locale].segment.road_types[18],(ABBR.rwy_lvl+1))
  375. + fillHtmlAL("Private",I18n.translations[I18n.locale].segment.road_types[17],(ABBR.prv_lvl+1))
  376. + fillHtmlAL("Parking",I18n.translations[I18n.locale].segment.road_types[20],(ABBR.prk_lvl+1))
  377. + fillHtmlAL("Narrow", I18n.translations[I18n.locale].segment.road_types[22],(ABBR.nar_lvl+1))
  378. + fillHtmlAL("Offroad",I18n.translations[I18n.locale].segment.road_types[8], (ABBR.off_lvl+1))
  379. + '</table></div></div>';
  380.  
  381. CEaddon.innerHTML=CEcontent;
  382. CEaddon.className='tab-pane';
  383. CErrorshandleClass2.appendChild(CEaddon);
  384. if (CErrWaze.loginManager.user.rank < 4) { getId('CMOnly').style.display="none"; } else { getId('CMOnly').style.display="block"; }
  385.  
  386. getId('errOpacity').value=WMECErrors.opacity;
  387. getId('opacityValue').innerHTML = getId('errOpacity').value;
  388.  
  389. getId('errOpacity').onmousemove = function(){
  390. getId('opacityValue').innerHTML = getId('errOpacity').value;
  391. var ls=JSON.parse(localStorage.WMEColorErrors);
  392. ls.opacity=getId('errOpacity').value;
  393. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  394. CErrColor();
  395. };
  396. getId('_myLvl').onclick=(function(){
  397. var ls=JSON.parse(localStorage.WMEColorErrors);
  398. (getId('_myLvl').checked === true ? ls.myLvl=true : ls.myLvl=false);
  399. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  400. CErrColor();
  401. });
  402. getId('_seg_Bad').onclick=(function(){
  403. var ls=JSON.parse(localStorage.WMEColorErrors);
  404. if (getId('_seg_Bad').checked === true) {
  405. for (var i=0; getElementsByClassName('_seg', BadSeg) [i]; i++) getElementsByClassName('_seg', BadSeg) [i].disabled=false;
  406. ls.seg_Bad=true;
  407. }
  408. else {
  409. for (var i=0; getElementsByClassName('_seg', BadSeg) [i]; i++) getElementsByClassName('_seg', BadSeg) [i].disabled=true;
  410. ls.seg_Bad=false;
  411. }
  412. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  413. CErrColor();
  414. });
  415. getId('_poi_Bad').onclick=(function(){
  416. var ls=JSON.parse(localStorage.WMEColorErrors);
  417. if (getId('_poi_Bad').checked === true) {
  418. for (var i=0; getElementsByClassName('_poi', BadPoi) [i]; i++) getElementsByClassName('_poi', BadPoi) [i].disabled=false;
  419. ls.poi_Bad=true;
  420. }
  421. else {
  422. for (var i=0; getElementsByClassName('_poi', BadPoi) [i]; i++) getElementsByClassName('_poi', BadPoi) [i].disabled=true;
  423. ls.poi_Bad=false;
  424. }
  425. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  426. CErrColor();
  427. });
  428.  
  429. getId('_autoLock').onclick=(function(){
  430. var ls=JSON.parse(localStorage.WMEColorErrors);
  431. if (getId('_autoLock').checked === true) {
  432. for (var i=0; getElementsByClassName('_auto', AutoLock) [i]; i++) getElementsByClassName('_auto', AutoLock) [i].disabled=false;
  433. ls.autoLock=true;
  434. }
  435. else {
  436. for (var i=0; getElementsByClassName('_auto', AutoLock) [i]; i++) getElementsByClassName('_auto', AutoLock) [i].disabled=true;
  437. ls.autoLock=false;
  438. }
  439. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  440. CErrColor();
  441. });
  442.  
  443. getId('_seg_Priv').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Priv').checked === true) ? ls.seg_Priv=true : ls.seg_Priv=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  444. getId('_seg_Park').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Park').checked === true) ? ls.seg_Park=true : ls.seg_Park=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  445. getId('_seg_Rail').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Rail').checked === true) ? ls.seg_Rail=true : ls.seg_Rail=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  446. getId('_seg_HW_name').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_HW_name').checked === true) ? ls.seg_HW_name=true : ls.seg_HW_name=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  447. getId('_seg_Dir_name').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Dir_name').checked === true) ? ls.seg_Dir_name=true : ls.seg_Dir_name=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  448. getId('_seg_Toll').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Toll').checked === true) ? ls.seg_Toll=true : ls.seg_Toll=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  449. getId('_seg_Ramp_name').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Ramp_name').checked === true) ? ls.seg_Ramp_name=true : ls.seg_Ramp_name=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  450. getId('_seg_Ramp_city').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Ramp_city').checked === true) ? ls.seg_Ramp_city=true : ls.seg_Ramp_city=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  451. getId('_seg_RShield').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_RShield').checked === true) ? ls.seg_RShield=true : ls.seg_RShield=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  452. getId('_seg_RSAlt').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_RSAlt').checked === true) ? ls.seg_RSAlt=true : ls.seg_RSAlt=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  453. getId('_seg_SNameAlt').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_SNameAlt').checked === true) ? ls.seg_SNameAlt=true : ls.seg_SNameAlt=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  454. getId('_seg_DleSpace').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_DleSpace').checked === true) ? ls.seg_DleSpace=true : ls.seg_DleSpace=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  455. getId('_seg_SegBadRS').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_SegBadRS').checked === true) ? ls.seg_SegBadRS=true : ls.seg_SegBadRS=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  456. getId('_seg_HNFree').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_HNFree').checked === true) ? ls.seg_HNFree=true : ls.seg_HNFree=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  457. getId('_seg_BadSpeed').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_BadSpeed').checked === true) ? ls.seg_BadSpeed=true : ls.seg_BadSpeed=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  458. getId('_seg_BadAltState').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_BadAltState').checked === true) ? ls.seg_BadAltState=true : ls.seg_BadAltState=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  459. getId('_seg_EmptyCityAlt').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_EmptyCityAlt').checked === true) ? ls.seg_EmptyCityAlt=true : ls.seg_EmptyCityAlt=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  460. getId('_seg_LockValue').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_LockValue').checked === true) ? ls.seg_LockValue=true : ls.seg_LockValue=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  461.  
  462. getId('_poi_Park_name').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Park_name').checked === true) ? ls.poi_Park_name=true : ls.poi_Park_name=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  463. getId('_poi_Park_type').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Park_type').checked === true) ? ls.poi_Park_type=true : ls.poi_Park_type=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  464. getId('_poi_Address').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Address').checked === true) ? ls.poi_Address=true : ls.poi_Address=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  465. getId('_poi_Entry').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Entry').checked === true) ? ls.poi_Entry=true : ls.poi_Entry=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  466. getId('_poi_LandM').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_LandM').checked === true) ? ls.poi_LandM=true : ls.poi_LandM=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  467. getId('_poi_DleSpace').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_DleSpace').checked === true) ? ls.poi_DleSpace=true : ls.poi_DleSpace=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  468. getId('_poi_Resid').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Resid').checked === true) ? ls.poi_Resid=true : ls.poi_Resid=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  469. getId('_poi_Google').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Google').checked === true) ? ls.poi_Google=true : ls.poi_Google=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  470. getId('_poi_Phone').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Phone').checked === true) ? ls.poi_Phone=true : ls.poi_Phone=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  471. getId('_poi_WFeed').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_WFeed').checked === true) ? ls.poi_WFeed=true : ls.poi_WFeed=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  472. getId('_poi_WPark').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_WPark').checked === true) ? ls.poi_WPark=true : ls.poi_WPark=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  473. getId('_poi_Relig').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Relig').checked === true) ? ls.poi_Relig=true : ls.poi_Relig=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  474. getId('_poi_Other').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Other').checked === true) ? ls.poi_Other=true : ls.poi_Other=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  475. getId('_poi_Transp').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Transp').checked === true) ? ls.poi_Transp=true : ls.poi_Transp=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  476. getId('_poi_GasSta').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_GasSta').checked === true) ? ls.poi_GasSta=true : ls.poi_GasSta=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  477.  
  478. getId('_Freeway').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Freeway').checked === true) ? ls.Freeway=true : ls.Freeway=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  479. getId('_Ramp').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Ramp').checked === true) ? ls.Ramp=true : ls.Ramp=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  480. getId('_Major').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Major').checked === true) ? ls.Major=true : ls.Major=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  481. getId('_Minor').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Minor').checked === true) ? ls.Minor=true : ls.Minor=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  482. getId('_Primary').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Primary').checked === true) ? ls.Primary=true : ls.Primary=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  483. getId('_Street').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Street').checked === true) ? ls.Street=true : ls.Street=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  484. getId('_Railway').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Railway').checked === true) ? ls.Railway=true : ls.Railway=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  485. getId('_Private').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Private').checked === true) ? ls.Private=true : ls.Private=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  486. getId('_Parking').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Parking').checked === true) ? ls.Parking=true : ls.Parking=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  487. getId('_Narrow').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Narrow').checked === true) ? ls.Narrow=true : ls.Narrow=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  488. getId('_Offroad').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Offroad').checked === true) ? ls.Offroad=true : ls.Offroad=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  489.  
  490. CErrWaze.selectionManager.events.register("selectionchanged", null, CErrAddInfo);
  491. CErrWaze.selectionManager.events.register("selectionchanged", null, CErrColor);
  492. CErrorsModel.actionManager.events.register("afterclearactions", null, CErrColor);
  493. CErrorsModel.actionManager.events.register("afterundoaction", null, CErrColor);
  494. CErrorsMap.events.register("zoomend", null, CErrColor);
  495. CErrorsMap.events.register("moveend", null, CErrColor);
  496. window.setTimeout(CErrColor, 500);
  497. }
  498. function fillHtml(id,type,color,icon,text) {
  499. var WMECErrors=JSON.parse(localStorage.getItem('WMEColorErrors'));
  500. return '<tr style="line-height:14px;"><td style="width:20px;"><input type="checkbox" class="'+(type==="seg_Bad" ? '_seg' : '_poi')+'" id="_'+id+'"'+(WMECErrors[id] ? ' checked' : '')+(WMECErrors[type] ? '' : ' disabled')+'/></td><td style="width:20px;"><font style="color:'+color+';font-family:FontAwesome;">'+icon+'</font></td><td><label for="_'+id+'" style="font-weight:normal;">'+text+'</label></td></tr>';
  501. }
  502. function fillHtmlAL(id,text,lockValue) {
  503. var WMECErrors=JSON.parse(localStorage.getItem('WMEColorErrors')), colorLock;
  504. switch (lockValue) {
  505. case 1: colorLock="#00cf00"; break;
  506. case 2: colorLock="#0179B5"; break;
  507. case 3: colorLock="#ffcc00"; break;
  508. case 4: colorLock="orange"; break;
  509. case 5: colorLock="red"; break;
  510. }
  511. return '<tr style="line-height:14px;"><td style="width:20px;"><input type="checkbox" class="_auto" id="_'+id+'" '+(WMECErrors[id] ? ' checked' : '')+(WMECErrors.autoLock ? '' : ' disabled')+'/></td><td style="width:30px;"><i class="fa fa-lock" style="color:'+colorLock+';"></i> '+lockValue+'</td><td><label for="_'+id+'" style="font-weight:normal;">'+text+'</label></td></tr>';
  512. }
  513. function checkClicLayer(){
  514. var lieu=CErrorsI18n.translations[CErrorsI18n.locale].layers.name.landmarks;
  515. getId('layer-switcher-'+CErrorsMap.getLayersByName(lieu)[0].id).onclick=(function(){
  516. window.setTimeout((function() {
  517. CErrColor();
  518. }),10);
  519. });
  520. }
  521. function addIcon(icon,color,geometry,type,pos) {
  522. var style = {
  523. fill: false,
  524. stroke: false,
  525. label: icon,
  526. labelAlign: "cb",
  527. labelXOffset: -4,
  528. labelYOffset: (pos*20),
  529. fontColor: color,
  530. fontSize:"20px",
  531. fontOpacity: getId('errOpacity').value,
  532. fontFamily: "FontAwesome",
  533. labelOutlineWidth: 2,
  534. zIndex: 99999
  535. };
  536. if (type==="segment") {
  537. if(geometry.length==2){
  538. var midX = (((geometry[0].x + geometry[1].x) / 2) + geometry[0].x) / 2;
  539. var midY = (((geometry[0].y + geometry[1].y) / 2) + geometry[0].y) / 2;
  540. var labelPoint = new CErrorsOpenLayers.Geometry.Point(midX,midY);
  541. var imageFeature = new CErrorsOpenLayers.Feature.Vector(labelPoint, null, style);
  542. ColorErrors_mapLayer.addFeatures([imageFeature]);
  543. }
  544. else {
  545. for(i=0;i<geometry.length-1;i++){
  546. if(i%3==1){
  547. var midX = (((geometry[i].x + geometry[i+1].x) / 2) + geometry[i].x) / 2;
  548. var midY = (((geometry[i].y + geometry[i+1].y) / 2) + geometry[i].y) / 2;
  549. var labelPoint = new CErrorsOpenLayers.Geometry.Point(midX,midY);
  550. var imageFeature = new CErrorsOpenLayers.Feature.Vector(labelPoint, null, style);
  551. ColorErrors_mapLayer.addFeatures([imageFeature]);
  552. }
  553. }
  554. }
  555. }
  556. else {
  557. var midX = (((geometry.left + geometry.right) / 2) + geometry.right) / 2;
  558. var midY = (((geometry.bottom + geometry.top) / 2) + geometry.bottom) / 2;
  559. var labelPoint = new CErrorsOpenLayers.Geometry.Point(midX,midY);
  560. var imageFeature = new CErrorsOpenLayers.Feature.Vector(labelPoint, null, style);
  561. ColorErrors_mapLayer.addFeatures([imageFeature]);
  562. }
  563. }
  564. function addLegend(id,icon,color,text,url){
  565. if(getSelectedFeatures()[0] && getSelectedFeatures()[0].model.attributes.id===id && getId('ErrorsList')) {
  566. getId('ErrorsList').innerHTML +="<div id='item"+id+"'><span style='color:"+color+";font-family:FontAwesome;'>"+icon+"</span> <span style='color:"+color+";'>"+text+"</span></div><br>";
  567. //getId('item'+id).onclick=openInNewTab(url);
  568. }
  569. }
  570. function CErrColor(){
  571. var lineFeature=[], ls=JSON.parse(localStorage.WMEColorErrors);
  572. var lieu=CErrorsI18n.translations[CErrorsI18n.locale].layers.name.landmarks;
  573.  
  574. //Check if Autolock is defined for active country
  575. if (ActiveCountry != W.model.getTopCountry().abbr) {
  576. ActiveCountry = W.model.getTopCountry().abbr;
  577. ABBR = cntryDB[ActiveCountry];
  578. if (typeof(ABBR) == 'undefined') {
  579. getId('_autoLock').disabled=true;
  580. for (var i=0; getElementsByClassName('_auto', AutoLock) [i]; i++) getElementsByClassName('_auto', AutoLock) [i].disabled=true;
  581. } else {
  582. getId('_autoLock').disabled=false;
  583. for (var i=0; getElementsByClassName('_auto', AutoLock) [i]; i++) getElementsByClassName('_auto', AutoLock) [i].disabled=false;
  584. }
  585. getId('_autoLockLabel').innerHTML=CErrLeg[8]+' ('+W.model.getTopCountry().name+')';
  586. }
  587. if (CErrWaze.loginManager.user.rank < 4) { getId('CMOnly').style.display="none"; } else { getId('CMOnly').style.display="block"; }
  588.  
  589. // Initialize layer
  590. try { ColorErrors_mapLayer.destroyFeatures(); }
  591. catch(err){ log('err destroyFeatures: ',err); }
  592.  
  593. if (getId('ErrorsList')) { getId('ErrorsList').innerHTML=""; }
  594.  
  595. //Segments Checking
  596. if (ls.seg_Bad || ls.autoLock) {
  597. var autoLockId=[], relockObject = {'str':[], 'pri':[], 'min':[], 'maj':[], 'rmp':[], 'fwy':[], 'prv':[], 'prk':[], 'rwy':[], 'nar':[], 'off':[], 'others':[] };
  598.  
  599. for (var seg in CErrorsModel.segments.objects) {
  600. // Get values
  601. var segment=CErrorsModel.segments.getObjectById(seg), j=0;
  602. var attributes=segment.attributes;
  603. var geometry=attributes.geometry.components;
  604. var line=getId(segment.geometry.id);
  605. if (segment===null || line === null || segment.state === "Update") continue;
  606. //Name
  607. var sid=attributes.primaryStreetID;
  608. var street=CErrorsModel.streets.getObjectById(sid);
  609. if (street===null) continue;
  610. //Alt Name
  611. var salt=attributes.streetIDs[0];
  612. var streetalt=CErrorsModel.streets.getObjectById(salt);
  613. if (streetalt) {
  614. var altname=streetalt.name;
  615. var streetAltCity = CErrorsModel.cities.getObjectById(streetalt.cityID);
  616. } else { var altname=""; }
  617. //City
  618. var streetCity = CErrorsModel.cities.getObjectById(street.cityID);
  619.  
  620. if (streetCity===null) continue;
  621. streetCity = streetCity.attributes.name;
  622.  
  623. var roadType=attributes.roadType;
  624. if (attributes.primaryStreetID === null || attributes.primaryStreetID === undefined) continue;
  625. if (CErrorsModel.streets.getObjectById(attributes.primaryStreetID) === null || CErrorsModel.streets.getObjectById(attributes.primaryStreetID) === undefined) continue;
  626. var newWidth="", newColor="", newOpacity="0", gline="";
  627.  
  628. if (ls.seg_Bad && ((ls.myLvl && attributes.lockRank <= CErrWaze.loginManager.user.rank) || ls.myLvl===false)) {
  629. if (ls.seg_Ramp_city) { // Ramp/Freeway with city name
  630. if (streetCity && /^(3|4)$/.test(attributes.roadType)) {
  631. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  632. j++;
  633. addIcon("\uf015",newColor,geometry,"segment",j);
  634. addLegend(attributes.id,"\uf015",newColor,CErrSeg[11],"Routes_Nommage#1.4.4_Bretelles_d.27entr.C3.A9e_ou_de_sortie_des_autoroutes_et_voies_rapides");
  635. }
  636. }
  637. if (street.name || altname) {
  638. if (/( - )/.test(street.name)) { var trs=street.name.split(" - "); }
  639. if (ls.seg_Priv) { // Private with bad name
  640. if (attributes.roadType===17 && new RegExp(streetNameSeg).test(street.name)===false) {
  641. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  642. j++;
  643. addIcon("\uf256",newColor,geometry,"segment",j);
  644. addLegend(attributes.id,"\uf256",newColor,CErrSeg[2],"");
  645. }
  646. }
  647. if (ls.seg_Park && street.name) { // Parking with name (But Place / Square)
  648. if (attributes.roadType===20 && new RegExp(parkNameSeg).test(street.name)===false) {
  649. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  650. j++;
  651. addIcon("\uf288",newColor,geometry,"segment",j);
  652. addLegend(attributes.id,"\uf288",newColor,CErrSeg[3],"");
  653. }
  654. }
  655. if (ls.seg_Rail && street.name) { // Railroad with bad name
  656. if (attributes.roadType===18 && (altname || street.name)) { //Railroad with name
  657. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  658. j++;
  659. addIcon("\uf238",newColor,geometry,"segment",j);
  660. addLegend(attributes.id,"\uf238",newColor,CErrSeg[4],"Routes_Nommage#1.5.4_Voies_ferr.C3.A9es");
  661. }
  662. }
  663. if (ls.seg_Ramp_name && street.name) {
  664. if (/^(3|4)$/.test(attributes.roadType) && /\/.*\//.test(street.name)) { // Ramp with 3 directions or more
  665. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  666. j++;
  667. addIcon("\uf25b",newColor,geometry,"segment",j);
  668. addLegend(attributes.id,"\uf25b",newColor,CErrSeg[6],"Routes_Nommage#1.4.4_Bretelles_d.27entr.C3.A9e_ou_de_sortie_des_autoroutes_et_voies_rapides");
  669. }
  670. else if (/^(3|4)$/.test(attributes.roadType) && /\//.test(street.name)) { // Ramp with 2 directions
  671. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  672. j++;
  673. addIcon("\uf25a",newColor,geometry,"segment",j);
  674. addLegend(attributes.id,"\uf25a",newColor,CErrSeg[6],"Routes_Nommage#1.4.4_Bretelles_d.27entr.C3.A9e_ou_de_sortie_des_autoroutes_et_voies_rapides");
  675. }
  676. }
  677. if (ls.seg_Dir_name && street.name) { // Directions but not Ramp/Freeway/Major
  678. if (/^[^3|4|6]$/.test(attributes.roadType) && /[:|>]/.test(street.name)) {
  679. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  680. j++;
  681. addIcon("\uf0a9",newColor,geometry,"segment",j);
  682. addLegend(attributes.id,"\uf0a9",newColor,CErrSeg[7],"Routes_Nommage#1.4.4_Bretelles_d.27entr.C3.A9e_ou_de_sortie_des_autoroutes_et_voies_rapides");
  683. }
  684. }
  685. if (ls.seg_Toll) { // Toll but not Ramp/Freeway
  686. if (/^[^3|4]$/.test(attributes.roadType) && (attributes.fwdToll || attributes.revToll)) {
  687. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  688. j++;
  689. addIcon("\uf155",newColor,geometry,"segment",j);
  690. addLegend(attributes.id,"\uf155",newColor,CErrSeg[10],"");
  691. }
  692. }
  693. if (ls.seg_RSAlt && street.name) { // RoadShield must be in alt
  694. if (attributes.roadType!=19 && trs
  695. && /^[A|C|D|N|M|R|T][0-9]+[a-z]?[0-9]?/.test(trs[0].replace(".",""))===true // Roadshield (1st part)
  696. && / - /.test(street.name)===true // Roadshield & street name (separator -)
  697. && /Intérieure|Extérieure/.test(trs[1])===false
  698. && streetCity // City ok
  699. ) {
  700. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  701. j++;
  702. addIcon("\uf074",newColor,geometry,"segment",j);
  703. addLegend(attributes.id,"\uf074",newColor,CErrSeg[12],"Routes_Nommage#1.3_Les_nommages_en_Agglom.C3.A9ration");
  704. }
  705. }
  706. if (ls.seg_HW_name && street.name) { // Highways with bad name
  707. if (/^(3|4|6)$/.test(attributes.roadType) && (/:/.test(street.name)===true && /^[A|C|D|N|M|R|T][0-9]+[a-z]?[0-9]?/.test(street.name)===false) && /^>/.test(street.name)===false && /^[Sortie ]+[0-9]+/.test(street.name)===false && /^(Rocade|Périphérique)/.test(street.name)===false) {
  708. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  709. j++;
  710. addIcon("\uf018",newColor,geometry,"segment",j);
  711. addLegend(attributes.id,"\uf018",newColor,CErrSeg[5],"Routes_Nommage#1.4.2_Autoroutes");
  712. }
  713. }
  714. if (ls.seg_SegBadRS && street.name) { // RoadShield but bad type
  715. if (/^(1|8|17|20)$/.test(attributes.roadType) && (/^[A|D|N|M|R|T][0-9]+/.test(street.name) || /^[A|D|N|M|R|T]$/.test(street.name))) {
  716. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  717. j++;
  718. addIcon("\uf044",newColor,geometry,"segment",j);
  719. addLegend(attributes.id,"\uf044",newColor,CErrSeg[14],"Routes_Classification#2.4_Famille_des_Routes");
  720. }
  721. }
  722. if (ls.seg_HNFree) { // House number on Freeway or ramp (and some undrivables)
  723. if (/^(3|4|8|14|18|19)$/.test(attributes.roadType) && attributes.hasHNs===true) {
  724. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  725. j++;
  726. addIcon("\uf162",newColor,geometry,"segment",j);
  727. addLegend(attributes.id,"\uf162",newColor,CErrSeg[15],"");
  728. }
  729. }
  730. if (ls.seg_BadSpeed) { // Bad speed (ex: >70km/h in city)
  731. if (attributes.fwdMaxSpeed>70 && attributes.fwdMaxSpeedUnverified===false && attributes.revMaxSpeed>70 && attributes.revMaxSpeedUnverified===false && streetCity) {
  732. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  733. j++;
  734. addIcon("\uf1ce",newColor,geometry,"segment",j);
  735. addLegend(attributes.id,"\uf1ce",newColor,CErrSeg[16],"Routes_Vitesses#4.2_Tour_d.27horizon_des_diff.C3.A9rentes_vitesses_limites");
  736. }
  737. }
  738. if (ls.seg_RShield && street.name) { // Wrong prefix (RoadShield)
  739. if ((trs && attributes.roadType!=19 && /^[A|D|N|M|R|T][0-9]+[a-z]?[0-9]?/.test(trs[0].replace(".",""))===false && / - /.test(street.name)===true)
  740. || /^[A|D|N|M|R|T][0-9]+[a-z]?[0-9]? ?-[A-Za-z]/.test(street.name)===true || /^[A|D|N|M|R|T][0-9]+[a-z]?[0-9]?- ?[A-Za-z]/.test(street.name)===true// No space between RS and street name
  741. ) {
  742. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  743. j++;
  744. addIcon("\uf152",newColor,geometry,"segment",j);
  745. addLegend(attributes.id,"\uf152",newColor,CErrSeg[8],"");
  746. }
  747. }
  748. if (ls.seg_SNameAlt && street.name) { // Street Name must be in alt
  749. if (attributes.roadType!=19 && trs
  750. && /^[A|C|D|N|M|R|T][0-9]+[a-z]?[0-9]?/.test(trs[0].replace(".",""))===true // Roadshield (1st part)
  751. && /^[E][0-9]/.test(trs[1])===false // European Roadshield (2nd part)
  752. && new RegExp(excepNameSeg).test(street.name)===false // Exception
  753. && / - /.test(street.name)===true // Roadshield & street name (separator -)
  754. && /Intérieure|Extérieure/.test(trs[1])===false
  755. && !streetCity // No city
  756. ) {
  757. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  758. j++;
  759. addIcon("\uf079",newColor,geometry,"segment",j);
  760. addLegend(attributes.id,"\uf079",newColor,CErrSeg[13],"Routes_Nommage#1.4_Les_nommages_hors_Agglom.C3.A9ration");
  761. }
  762. }
  763. if (ls.seg_DleSpace && street.name) { // Double spacing in name
  764. if (/ /.test(street.name)===true) {
  765. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  766. j++;
  767. addIcon("\uf101",newColor,geometry,"segment",j);
  768. addLegend(attributes.id,"\uf101",newColor,CErrSeg[9],"");
  769. }
  770. }
  771. if (ls.seg_BadAltState) {
  772. if (streetalt != null && CErrorsModel.cities.getObjectById(street.cityID).attributes.stateID != streetAltCity.attributes.stateID) { // Alt State != Main State
  773. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  774. j++;
  775. addIcon("\uf037",newColor,geometry,"segment",j);
  776. addLegend(attributes.id,"\uf037",newColor,CErrSeg[17]+"<br>Est <b><i>"+CErrorsModel.states.getObjectById(streetAltCity.attributes.stateID).name+"</i></b><br>Devrait être <b><i>"+CErrorsModel.states.getObjectById(CErrorsModel.cities.getObjectById(street.cityID).attributes.stateID).name+"</i></b>","");
  777. }
  778. }
  779. if (ls.seg_EmptyCityAlt && streetalt != null) { // Bad Alt
  780. var g=0;
  781. for (var f=0; f < attributes.streetIDs.length; f++) {
  782. var streetalt=CErrorsModel.streets.getObjectById(attributes.streetIDs[f]);
  783. if (CErrorsModel.cities.getObjectById(streetalt.cityID).attributes.name === "" && /^[A|C|D|E|N|M|R|T|V][0-9]+[a-z]?[0-9]?/.test(streetalt.name)===false && new RegExp(excepNameSeg).test(street.name)===false) {
  784. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  785. j++;
  786. addIcon("\uf064",newColor,geometry,"segment",j);
  787. addLegend(attributes.id,"\uf064",newColor,CErrSeg[19],"");
  788. }
  789. }/*
  790. g=0;
  791. for (var f=0; f < attributes.streetIDs.length; f++) {
  792. if (street.name == streetalt.name && streetAltCity.attributes.name != "") { g=1; }
  793. }
  794. if (g == 0) {
  795. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  796. j++;
  797. addIcon("\uf064",newColor,geometry,"segment",j);
  798. addLegend(attributes.id,"\uf064",newColor,CErrSeg[19],"");
  799. }*/
  800. }
  801. }
  802. if (ls.seg_LockValue && attributes.lockRank != 5) { // Ignore Lock 6
  803. if (
  804. ((attributes.fwdFlags==1 || attributes.revFlags==1) && attributes.lockRank != 4) || // Speedcam but not locked 5
  805. attributes.fwdFlags != 1 && attributes.revFlags != 1 && // no speedcam
  806. (/^(3|4|6|18)$/.test(attributes.roadType) && attributes.lockRank != 4 //Lock 5 for freeway, ramp, major and railroad
  807. || attributes.roadType==7 && attributes.lockRank != 3 //Lock 4 for minor
  808. || attributes.roadType==2 && attributes.lockRank != 2 //Lock 3 for primary
  809. || /^(1|8|17|19|22)$/.test(attributes.roadType) === true && attributes.lockRank != 0 && attributes.lockRank != null) //Lock 1 for others (5,10,15,16,20)
  810. ) {
  811. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  812. j++;
  813. addIcon("\uf023",newColor,geometry,"segment",j);
  814. addLegend(attributes.id,"\uf023",newColor,CErrSeg[18],"WME_Droits");
  815. }
  816. }
  817. // Highlight if error
  818. if (gline !== "") {
  819. var style={
  820. strokeWidth: newWidth,
  821. strokeColor: newColor,
  822. strokeOpacity: newOpacity
  823. };
  824. var points=[];
  825. for (var i=0; i<gline.length; i++) { points.push(new CErrorsOpenLayers.Geometry.Point(gline[i].x, gline[i].y)); }
  826. var newline=new CErrorsOpenLayers.Geometry.LineString(points);
  827. lineFeature.push(new CErrorsOpenLayers.Feature.Vector(newline, null, style));
  828. }
  829. }
  830.  
  831. //Autolock
  832. var lock=attributes.lockRank;
  833. if ((ls.myLvl && lock <= CErrWaze.loginManager.user.rank || ls.myLvl===false) &&
  834. !attributes.hasClosures &&
  835. lock != 5 &&
  836. onScreen(segment) &&
  837. ls.autoLock &&
  838. autoLockId.indexOf(attributes.id) == -1 &&
  839. attributes.revFlags != '1' &&
  840. attributes.fwdFlags != '1' &&
  841. getId('_autoLock').disabled == false &&
  842. CErrWaze.loginManager.user.rank < 4
  843. ) {
  844. switch (attributes.roadType) {
  845. case 1: if (lock != ABBR.str_lvl && ls.Street==true) { autoLockId.push(attributes.id); relockObject.str.push(new UpdateObject(segment, {lockRank: ABBR.str_lvl })); } break;
  846. case 2: if (lock != ABBR.pri_lvl && ls.Primary==true) { autoLockId.push(attributes.id); relockObject.pri.push(new UpdateObject(segment, {lockRank: ABBR.pri_lvl })); } break;
  847. case 3: if (lock != ABBR.fwy_lvl && ls.Freeway==true) { autoLockId.push(attributes.id); relockObject.fwy.push(new UpdateObject(segment, {lockRank: ABBR.fwy_lvl })); } break;
  848. case 4: if (lock != ABBR.rmp_lvl && ls.Ramp==true) { autoLockId.push(attributes.id); relockObject.rmp.push(new UpdateObject(segment, {lockRank: ABBR.rmp_lvl })); } break;
  849. case 6: if (lock != ABBR.maj_lvl && ls.Major==true) { autoLockId.push(attributes.id); relockObject.maj.push(new UpdateObject(segment, {lockRank: ABBR.maj_lvl })); } break;
  850. case 7: if (lock != ABBR.min_lvl && ls.Minor==true) { autoLockId.push(attributes.id); relockObject.min.push(new UpdateObject(segment, {lockRank: ABBR.min_lvl })); } break;
  851. case 18: if (lock != ABBR.rwy_lvl && ls.Railway==true) { autoLockId.push(attributes.id); relockObject.rwy.push(new UpdateObject(segment, {lockRank: ABBR.rwy_lvl })); } break;
  852. case 22: if (lock != ABBR.nar_lvl && ls.Narrow==true) { autoLockId.push(attributes.id); relockObject.nar.push(new UpdateObject(segment, {lockRank: ABBR.nar_lvl })); } break;
  853. case 8: if (lock != ABBR.off_lvl && ls.Offroad==true && lock != null) { autoLockId.push(attributes.id); relockObject.off.push(new UpdateObject(segment, {lockRank: ABBR.off_lvl })); } break;
  854. case 17: if (lock != ABBR.prv_lvl && ls.Private==true && lock != null) { autoLockId.push(attributes.id); relockObject.prv.push(new UpdateObject(segment, {lockRank: ABBR.prv_lvl })); } break;
  855. case 20: if (lock != ABBR.prk_lvl && ls.Parking==true && lock != null) { autoLockId.push(attributes.id); relockObject.prk.push(new UpdateObject(segment, {lockRank: ABBR.prk_lvl })); } break;
  856. }
  857. }
  858. // Lock 5 if ASC
  859. if ((attributes.fwdFlags == '1' || attributes.revFlags == '1') && lock != '4') { autoLockId.push(attributes.id); relockObject.others.push(new UpdateObject(segment, {lockRank: '4' })); }
  860. }
  861. //console.log(autoLockId);
  862. $.each(relockObject, function( key, value ) {
  863. relock(relockObject, key);
  864. });
  865.  
  866. function relock(obj, key) {
  867. var objects = obj[key];
  868. var _i = 0;
  869. if (typeof(objects[_i]) != "undefined") {
  870. //console.log("LISTE", key, objects[_i], typeof(objects[_i]));
  871. W.model.actionManager.add(objects[_i]);
  872. }
  873. _i++;
  874. }
  875. }
  876.  
  877. //Places Checking
  878. if (ls.poi_Bad && getId('layer-switcher-group_places').checked) {
  879. for (var poi in CErrorsModel.venues.objects) {
  880. // Get values
  881. var venue=CErrorsModel.venues.getObjectById(poi), j=0;
  882. var pattributes=venue.attributes;
  883. var geometry=pattributes.geometry.bounds;
  884. var poly=pattributes.id;
  885. if (venue===null || poly === null || poi.state=="Update" || poi.selected) continue;
  886. var categories=pattributes.categories;
  887. var pname=pattributes.name;
  888. var venueStreet=CErrorsModel.streets.getObjectById(pattributes.streetID);
  889. if (venueStreet) { var venueCity = CErrorsModel.cities.getObjectById(venueStreet.cityID); }
  890. var newWidth="", newColor="", newOpacity="0", gpoly="";
  891.  
  892. if ((ls.myLvl && pattributes.lockRank <= CErrWaze.loginManager.user.rank && pattributes.adLocked===false) || ls.myLvl===false) {
  893. if (ls.poi_Resid) { // maybe a residential POI
  894. if ((/^[0-9][ ]?[a-zA-Z]/.test(pname)===true || new RegExp(privNameSeg).test(pname)===true) && pattributes.residential===false && pattributes.categories.indexOf("PARKING_LOT")===-1) {
  895. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  896. if (venue.isPoint()) { newWidth=26; }
  897. j++;
  898. addIcon("\uf015",newColor,geometry,"venue",j);
  899. addLegend(poly,"\uf015",newColor,CErrPoi[7],"");
  900. }
  901. }
  902. if (ls.poi_Google) { //POI without Google link
  903. if (pattributes.externalProviderIDs.length===0 && pattributes.residential===false && new RegExp(excepCatPoi).test(categories)===false) {
  904. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  905. if (venue.isPoint()) { newWidth=26; }
  906. j++;
  907. addIcon("\uf1a0",newColor,geometry,"venue",j);
  908. addLegend(poly,"\uf1a0",newColor,CErrPoi[8],"");
  909. }
  910. }
  911. if (ls.poi_Phone && pattributes.phone) { //POI with bad phone number
  912. // Phone prefix
  913. var prefPhone;
  914. switch(CErrorsModel.getTopCountry().id) {
  915. case 3: prefPhone='+213[ ](\\d{2})'; break; // format +213 (dd) xx xx xx @ Algeria
  916. case 73: prefPhone='+33[ ]\\d[ ]\\d{2}'; break; // format +33 d xx xx xx xx @ France
  917. case 74: prefPhone='+594[ ](594|694)'; break; // format +594 594 xx xx xx @ French Guiana
  918. case 88: prefPhone='+590[ ](590|690)'; break; // format +590 590 xx xx xx @ Guadeloupe
  919. case 141: prefPhone='+596[ ]596'; break; // format +596 596 xx xx xx @ Martinique
  920. case 148: prefPhone='+377[ ]\\d{2}'; break; // format +377 xx xx xx xx @ Monaco
  921. case 152: prefPhone='+212[ ](\\d{3})'; break; // format +212 xxx xx xx xx @ Morocco
  922. case 184: prefPhone='+262[ ](262|692|693)'; break; // format +262 (262 ou 692) xx xx xx @ Reunion
  923. default : break;
  924. }
  925. if (new RegExp('^(\\'+prefPhone + ')([ ](\\d{2})){3}$').test(pattributes.phone)===false // Prefix + 4 digits
  926. && new RegExp('^(\\'+prefPhone + ')([ ](\\d{3})){2}$').test(pattributes.phone)===false // Prefix + 3 digits
  927. && (/^[13]\d[ ](\d{2})$/).test(pattributes.phone)===false // 1x xx or 3x xx
  928. && (/^(0[ ](8|9)\d{2})([ ](\d{3})){2}/).test(pattributes.phone)===false // 0 8xx xxx xxx
  929. && (/^(0[ ](8|9)\d{2})([ ](\d{2})){3}/).test(pattributes.phone)===false // 0 8xx xx xx xx
  930. && (/^(15|17|18|112|115)$/).test(pattributes.phone)===false // Emergency numbers
  931. ) {
  932. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  933. if (venue.isPoint()) { newWidth=26; }
  934. j++;
  935. addIcon("\uf095",newColor,geometry,"venue",j);
  936. addLegend(poly,"\uf095",newColor,CErrPoi[13],"Lieux_Generalites#1.7._Format_du_num.C3.A9ro_de_t.C3.A9l.C3.A9phone");
  937. }
  938. }
  939. if (ls.poi_Other) { // Place type is "Other"
  940. if (categories.indexOf("OTHER") > -1 && (/^Déchèterie/).test(pname)===false) {
  941. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  942. if (venue.isPoint()) { newWidth=26; }
  943. j++;
  944. addIcon("\uf29c",newColor,geometry,"venue",j);
  945. addLegend(poly,"\uf29c",newColor,CErrPoi[10],"");
  946. }
  947. }
  948. if (ls.poi_Entry) { // POI with default entryExitPoints
  949. if (new RegExp(entryPointPoi).test(categories)===false && pattributes.entryExitPoints.length===0 && venue.isPoint()===false) {
  950. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  951. j++;
  952. addIcon("\uf18e",newColor,geometry,"venue",j);
  953. addLegend(poly,"\uf18e",newColor,CErrPoi[4],"Lieux_Generalites#1.3._Positionner_le_point_de_destination_d.27un_POI");
  954. }
  955. }
  956. if (ls.poi_Park_name && categories.indexOf("PARKING_LOT") > -1) { // Parking with bad name
  957. if (new RegExp(streetNameSeg).test(pname)===true) { continue; } //If parking name is a road
  958. if (new RegExp('^'+parkNamePoi+'$').test(pname)===true || // Only Parkings or Aire // ?️|?️️|
  959. new RegExp('^'+parkNamePoi).test(pname)===false // Don't start by ?️ or Parking
  960. // /^(Parking[s]?)( de[s]?| du | le[s]? | la | pour )/.test(pname)===true // Contain bad words
  961. ) {
  962. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  963. j++;
  964. addIcon("\uf288",newColor,geometry,"venue",j);
  965. addLegend(poly,"\uf288",newColor,CErrPoi[2],"Lieux_Particuliers#2.3._Parkings");
  966. }
  967. else if (pname==="") {
  968. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  969. j++;
  970. addIcon("\uf288",newColor,geometry,"venue",j);
  971. addLegend(poly,"\uf288",newColor,CErrPoi[2],"Lieux_Particuliers#2.3._Parkings");
  972. }
  973. if (venue.isPoint()) newWidth=26;
  974. }
  975. if (ls.poi_Park_type && categories.indexOf("PARKING_LOT") > -1) { // Parking with type undefined
  976. if (/PUBLIC|RESTRICTED|PRIVATE/.test(pattributes.categoryAttributes.PARKING_LOT.parkingType)===false) {
  977. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  978. j++;
  979. addIcon("\uf11d",newColor,geometry,"venue",j);
  980. addLegend(poly,"\uf11d",newColor,CErrPoi[12],"Lieux_Particuliers#2.3._Parkings");
  981. }
  982. }
  983. if (ls.poi_Address) { // POI with bad address (Nxxx/Dxxx) or without address
  984. if (venueStreet===null) continue;
  985. if ((/^[A|D|N|M|R][0-9]+/.test(venueStreet.name) && /[ - ]/.test(venueStreet.name)) || (venueStreet.name===null && new RegExp(landmarkPoi).test(categories) === 'false')) {
  986. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  987. if (venue.isPoint()) { newWidth=26; }
  988. j++;
  989. addIcon("\uf2bc",newColor,geometry,"venue",j);
  990. addLegend(poly,"\uf2bc",newColor,CErrPoi[3],"Lieux_Generalites#1.2._Nommage_et_Adresse_d.27un_POI");
  991. }
  992. }
  993. if (ls.poi_LandM) { // Landmark with road name or city name
  994. if (new RegExp(landmarkPoi).test(categories) && pname==="" && ((venueStreet && venueStreet.name) || (venueCity && venueCity.attributes.name))) {
  995. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  996. if (venue.isPoint()) { newWidth=26; }
  997. j++;
  998. addIcon("\uf1bb",newColor,geometry,"venue",j);
  999. addLegend(poly,"\uf1bb",newColor,CErrPoi[5],"");
  1000. }
  1001. }
  1002. if (ls.poi_DleSpace) { // Double spacing in name
  1003. if (venueStreet && (/ /.test(venueStreet.name)===true || / /.test(pname)===true)) {
  1004. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1005. j++;
  1006. addIcon("\uf101",newColor,geometry,"venue",j);
  1007. addLegend(poly,"\uf101",newColor,CErrPoi[6],"");
  1008. if (venue.isPoint()) { newWidth=26; }
  1009. }
  1010. }
  1011. if (ls.poi_GasSta && categories.indexOf("GAS_STATION") > -1) { // Gas Station with bad name
  1012. if (new RegExp(streetNameSeg).test(pname)===true) { continue; } //If parking name is a road
  1013. if (/^(Station-service )/.test(pname)===false) { // Don't start by
  1014. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1015. j++;
  1016. addIcon("\uf1b9",newColor,geometry,"venue",j);
  1017. addLegend(poly,"\uf288",newColor,CErrPoi[16],"Lieux_Particuliers#2.5._Stations-services");
  1018. if (venue.isPoint()) newWidth=26;
  1019. }
  1020. }
  1021. if (ls.poi_Transp && new RegExp(stationsPoi).test(categories)===false) { //Bus Subway and Tram Station wihtout others stations
  1022. if ((
  1023. categories.indexOf("BUS_STATION") > -1 && // Good category for bus station
  1024. new RegExp('^'+busPoi).test(pname)===false // Bad name
  1025. ) || (
  1026. categories.indexOf("SUBWAY_STATION") > -1 && // Good category for subway station
  1027. new RegExp('^'+tramPoi).test(pname)===false // Bad name
  1028. ) || (
  1029. categories.indexOf("TRAIN_STATION") > -1 && // Good category for train station
  1030. /Gare d[e|u|es|\']/.test(pname)===false // Bad name
  1031. ) || (
  1032. categories.indexOf("OTHER") == -1 && categories.indexOf("BUS_STATION") == -1 && categories.indexOf("SUBWAY_STATION") == -1 && categories.indexOf("TRAIN_STATION") == -1 &&
  1033. new RegExp('^'+possibleTransPoi).test(pname)===true // Maybe a transport station
  1034. ) ){
  1035. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1036. j++;
  1037. addIcon("\uf207",newColor,geometry,"venue",j);
  1038. addLegend(poly,"\uf207",newColor,CErrPoi[15],"Lieux_Particuliers#2.8._Arr.C3.AAts_de_bus.2C_m.C3.A9tro_et_tramway");
  1039. if (venue.isPoint()) { newWidth=26; }
  1040. }
  1041. }
  1042. if (ls.poi_Relig && categories.indexOf("RELIGIOUS_CENTER") > -1) { // Religious Center with bad name
  1043. if (new RegExp('^'+religiousPoi+'$').test(pname)===true || // category without name
  1044. new RegExp('^'+religiousPoi).test(pname)===false) { // Bad 1st name
  1045. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1046. j++;
  1047. addIcon("\uf015",newColor,geometry,"venue",j);
  1048. addLegend(poly,"\uf015",newColor,CErrPoi[14],"Lieux_Particuliers#2.10._Site_religieux");
  1049. if (venue.isPoint()) { newWidth=26; }
  1050. }
  1051. }
  1052. if ((ls.poi_Relig && new RegExp('^'+religiousPoi).test(pname)===true && categories.indexOf("RELIGIOUS_CENTER") == -1) || // Religious Center Name but bad category
  1053. (new RegExp('^'+religiousPoi+'$').test(pname)===true && categories.indexOf("RELIGIOUS_CENTER") == -1)) { // Bad Religious Center Name with bad category
  1054. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1055. j++;
  1056. addIcon("\uf015",newColor,geometry,"venue",j);
  1057. addLegend(poly,"\uf015",newColor,CErrPoi[14],"Lieux_Particuliers#2.10._Site_religieux");
  1058. if (venue.isPoint()) { newWidth=26; }
  1059. }
  1060. if (ls.poi_WFeed || ls.poi_WPark) { //Place updated by WazeFeed
  1061. if (pattributes.updatedBy && CErrorsModel.users.getObjectById(pattributes.updatedBy)) {
  1062. var updName = CErrorsModel.users.getObjectById(pattributes.updatedBy).userName;
  1063. if (((ls.poi_WFeed && new RegExp(wazeBot).test(updName)) || (ls.poi_WPark && updName=="WazeParking1")) && pattributes.residential===false) {
  1064. newColor="#ffcc00"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1065. if (venue.isPoint()) { newWidth=26; newOpacity=0.75; }
  1066. j++;
  1067. addIcon("\uf263",newColor,geometry,"venue",j);
  1068. if (updName=="WazeFeed") { addLegend(poly,"\uf263",newColor,CErrPoi[9],""); }
  1069. else { addLegend(poly,"\uf263",newColor,CErrPoi[11],""); }
  1070. }
  1071. }
  1072. }
  1073. // Highlight if error
  1074.  
  1075. }
  1076. if (pattributes.adLocked) {
  1077. newColor="#ff0000"; newWidth=15; newOpacity=0.75; gpoly=pattributes.geometry.getVertices();
  1078. j++;
  1079. addIcon("\uf023",newColor,geometry,"venue",j);
  1080. addLegend(poly,"\uf023",newColor,CErrLeg[7],"");
  1081. if (venue.isPoint()) { newWidth=26; }
  1082. }
  1083. if (gpoly!=="") {
  1084. var style={
  1085. strokeWidth: newWidth,
  1086. strokeColor: newColor,
  1087. strokeOpacity: newOpacity,
  1088. fillOpacity: 0
  1089. };
  1090. var points=[];
  1091. for (var i=0; i<gpoly.length; i++) { points.push(new CErrorsOpenLayers.Geometry.Point(gpoly[i].x, gpoly[i].y)); }
  1092. var newpoly=new CErrorsOpenLayers.Geometry.LinearRing(points);
  1093. lineFeature.push(new CErrorsOpenLayers.Feature.Vector(newpoly, null, style));
  1094. }
  1095. }
  1096. }
  1097.  
  1098. // Display highlighted features
  1099. try{ ColorErrors_mapLayer.addFeatures(lineFeature); }
  1100. catch(err){ log('err addFeatures: ',err); }
  1101. }
  1102. // **********************
  1103. // ** Telephone fix **
  1104. // **********************
  1105. function fixTel(){
  1106.  
  1107. var editpanel = $('#edit-panel');
  1108. if (editpanel.length==0) { window.setTimeout(fixTel, 1000); return; }
  1109.  
  1110. $('#edit-panel').bind('DOMSubtreeModified',function(e){
  1111. var g= $('td[name ="roadType"]');
  1112. g.change(function(){
  1113. alert($(this).val());
  1114. })
  1115. //var g = document.getElementsByName('roadType');
  1116. //console.log("test ",g.value, g.text, g.options[g.selectedIndex].text);
  1117.  
  1118.  
  1119. var editLM = $('#venue-edit-more-info');
  1120. //console.debug("PHONE: editLM" , editLM);
  1121. if (editLM.length==1) {
  1122. var fixPhoneBtn = $('#wme-telephonefix-fr'); //console.debug("PHONE: fixPhoneBtn" , fixPhoneBtn);
  1123. if (fixPhoneBtn.length==0) {
  1124. fixPhoneBtn=document.createElement('button');
  1125. fixPhoneBtn.innerHTML='fix';
  1126. fixPhoneBtn.id='wme-telephonefix-fr';
  1127. $(fixPhoneBtn).css({'float':'right','position':'absolute','right':'0px','bottom':'0px','background-color':'white','border-top-right-radius':'6px','border-bottom-right-radius':'6px','border':'1px solid #cccccc','border-left':'1px dashed #cccccc'});
  1128. $('[name=phone]').parent().append(fixPhoneBtn);
  1129.  
  1130. try {
  1131. var venue=Waze.selectionManager.getSelectedFeatures()[0].model;
  1132. var phone=venue.attributes.phone;
  1133. var newPhone='';
  1134. var phoneTo='';
  1135.  
  1136. // num 0800 et 0900
  1137. if (venue.attributes.phone.startsWith('08')==true) {
  1138. phoneTo = venue.attributes.phone.replace(/^0[.| |-]?8[.| |-]?([0-9])([0-9])[.| |-]?([0-9])([0-9])[.| |-]?([0-9])([0-9])[.| |-]?([0-9])([0-9])$/g, "0 8$1$2 $3$4$5 $6$7$8");
  1139. } else if (venue.attributes.phone.startsWith('09')==true) {
  1140. phoneTo = venue.attributes.phone.replace(/^0[.| |-]?9[.| |-]?([0-9])([0-9])[.| |-]?([0-9])([0-9])[.| |-]?([0-9])([0-9])[.| |-]?([0-9])([0-9])$/g, "0 9$1$2 $3$4$5 $6$7$8");
  1141. } else {
  1142. // rules by country
  1143. switch(CErrorsModel.getTopCountry().id) {
  1144. case 3: // Algeria
  1145. if (venue.attributes.phone.startsWith('+213')==true) {
  1146. phoneTo = venue.attributes.phone.replace(/^\+213[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+213 $1 $2 $3 $4 $5");
  1147. } else {
  1148. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+213 $1 $2 $3 $4 $5");
  1149. }
  1150. break;
  1151. case 73: // France
  1152. if (venue.attributes.phone.startsWith('+33')==true) {
  1153. phoneTo = venue.attributes.phone.replace(/^\+33[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+33 $1 $2 $3 $4 $5");
  1154. } else {
  1155. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+33 $1 $2 $3 $4 $5");
  1156. }
  1157. break;
  1158. case 74: // French Guiana
  1159. if (venue.attributes.phone.startsWith('+594 5 94')==true || venue.attributes.phone.startsWith('+594594')==true) {
  1160. phoneTo = venue.attributes.phone.replace(/^\+594[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+594 $1$2 $3 $4 $5");
  1161. } else {
  1162. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+594 $1$2 $3 $4 $5");
  1163. }
  1164. break;
  1165. case 88: // Guadeloupe
  1166. if (venue.attributes.phone.startsWith('+590 5 90')==true || venue.attributes.phone.startsWith('+590590')==true) {
  1167. phoneTo = venue.attributes.phone.replace(/^\+590[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+590 $1$2 $3 $4 $5");
  1168. } else {
  1169. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+590 $1$2 $3 $4 $5");
  1170. }
  1171. break;
  1172. case 141: // Martinique
  1173. if (venue.attributes.phone.startsWith('+596 5 96')==true || venue.attributes.phone.startsWith('+596596')==true) {
  1174. phoneTo = venue.attributes.phone.replace(/^\+596[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+596 $1$2 $3 $4 $5");
  1175. } else {
  1176. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+596 $1$2 $3 $4 $5");
  1177. }
  1178. break;
  1179. case 148: // Monaco
  1180. if (venue.attributes.phone.startsWith('+377')==true) {
  1181. phoneTo = venue.attributes.phone.replace(/^\+377[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+377 $1 $2 $3 $4 $5");
  1182. } else {
  1183. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+377 $1 $2 $3 $4 $5");
  1184. }
  1185. break;
  1186. case 152: // Morocco
  1187. if (venue.attributes.phone.startsWith('+212')==true) {
  1188. phoneTo = venue.attributes.phone.replace(/^\+212[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+212 $1 $2 $3 $4 $5");
  1189. } else {
  1190. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+212 $1 $2 $3 $4 $5");
  1191. }
  1192. break;
  1193. case 184: // Reunion
  1194. if (venue.attributes.phone.startsWith('+262 2 62')==true || venue.attributes.phone.startsWith('+262262')==true) {
  1195. phoneTo = venue.attributes.phone.replace(/^\+262[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+262 $1$2 $3 $4 $5");
  1196. } else {
  1197. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+262 $1$2 $3 $4 $5");
  1198. }
  1199. break;
  1200. default : break;
  1201. }
  1202. }
  1203.  
  1204. if (phoneTo != venue.attributes.phone) { newPhone=phoneTo; }
  1205.  
  1206. if (newPhone!='')
  1207. {
  1208. fixPhoneBtn.addEventListener("click", function (v, p) {
  1209. return function () {
  1210. var newAtts = { phone: p, id: v.attributes.id };
  1211. Waze.model.actionManager.add(new (require("Waze/Action/UpdateObject"))(v, newAtts));
  1212. $(fixPhoneBtn).css({'display': 'none'});
  1213. }
  1214. }(venue, newPhone), false);
  1215. }
  1216. else
  1217. $(fixPhoneBtn).css({'display': 'none'});
  1218. }
  1219. catch (err)
  1220. {
  1221. $(fixPhoneBtn).css({'display': 'none'});
  1222. }
  1223. //.debug("PHONE: append fixPhoneBtn" , fixPhoneBtn);
  1224. }
  1225.  
  1226. var fixPhoneBtn = $('#wme-telephonefix-fr'); //console.debug("PHONE: fixPhoneBtn" , fixPhoneBtn);
  1227. }
  1228.  
  1229. })
  1230. }
  1231.  
  1232. CErrors_bootstrap();

QingJ © 2025

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