WME Validator

This script validates a map area in Waze Map Editor, highlights issues and generates a very detailed report with wiki references and solutions

目前为 2019-08-16 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name WME Validator
  3. // @version 2019.08.16
  4. // @description This script validates a map area in Waze Map Editor, highlights issues and generates a very detailed report with wiki references and solutions
  5. // @match https://beta.waze.com/*editor*
  6. // @match https://www.waze.com/*editor*
  7. // @exclude https://www.waze.com/*user/*editor/*
  8. // @grant none
  9. // @icon https://raw.githubusercontent.com/WMEValidator/release/master/img/WV-icon96.png
  10. // @namespace a
  11. // @homepage https://www.waze.com/forum/viewtopic.php?f=819&t=76488
  12. // @author Andriy Berestovskyy <berestovskyy@gmail.com>
  13. // @copyright 2013-2018 Andriy Berestovskyy
  14. // @license GPLv3
  15. // @contributor justins83
  16. // @contributor davidakachaos
  17. // @contributor jangliss
  18. // ==/UserScript==
  19. /*
  20. * WME Validator uses Open Source GPLv3 license, i.e. you may copy,
  21. * distribute and modify the software as long as you track changes/dates
  22. * in source files. Any modifications to or software including
  23. * (via compiler) GPL-licensed code must also be made available under
  24. * the GPL along with build & install instructions.
  25. *
  26. * WME Validator source code is available on GitHub:
  27. * https://github.com/WMEValidator/
  28. *
  29. * For questions please use official forum:
  30. * https://www.waze.com/forum/viewtopic.php?f=819&t=76488
  31. *
  32. * Report bugs on GitHub Issues Tracker:
  33. * https://github.com/WMEValidator/validator/issues
  34. */
  35.  
  36. (function() {
  37. var WV_VERSION = '2019.08.16';
  38. var AS_PASSWORD = 'v1';
  39. var WV_WHATSNEW = '' +
  40. '\nv2019.08.16:' +
  41. '\n- jangliss: Fix for layer refresh if layer did not trigger update' +
  42. '\n- jangliss: Add lock checks for railroad and private roads' +
  43. '\n' +
  44. '\nv2019.04.11:' +
  45. '\n- berestovskyy: hot fix for login issue' +
  46. '\n- berestovskyy: fixed audio for Google Chrome' +
  47. '\n' +
  48. '\nv2019.02.26:' +
  49. '\n- berestovskyy: hot fixes for latests WME' +
  50. '\n' +
  51. '\nv2018.11.10:' +
  52. '\n- davidakachaos: fix streets isolated by ramps' +
  53. '\n- davidakachaos: fix recover from preference change' +
  54. '\n- davidakachaos: add road closures to fix #36 and #37' +
  55. '\n- davidakachaos: fix speed limit issues on borders';
  56. var WV_LICENSE_VERSION = '1';
  57. var WV_LICENSE = '' +
  58. '\nLICENSE:' +
  59. '\nWME Validator uses Open Source GPLv3 license,' +
  60. '\ni.e. you may copy, distribute and modify the software' +
  61. '\nas long as you track changes/dates in source files.' +
  62. '\nAny modifications to or software including (via compiler)' +
  63. '\nGPL-licensed code must also be made available' +
  64. '\nunder the GPL along with build & install instructions.' +
  65. '\n' +
  66. '\nWME Validator source code is available on GitHub:' +
  67. '\nhttps://github.com/WMEValidator/' +
  68. '\n' +
  69. '\nFor questions please use official forum:' +
  70. '\nhttps://www.waze.com/forum/viewtopic.php?f=819&t=76488' +
  71. '\n' +
  72. '\nReport bugs on GitHub Issues Tracker:' +
  73. '\nhttps://github.com/WMEValidator/validator/issues' +
  74. '\n' +
  75. '\nNote: WME Validator uses local storage to remember' +
  76. '\nyour choices and preferences.';
  77. var GA_FORLEVEL = 1;
  78. var GA_FORUSER = '!Dekis,*';
  79. var GA_FORCOUNTRY = '';
  80. var GA_FORCITY = '!Kraków,*';
  81. var LIMIT_TOTAL = 2E4;
  82. var MAX_CHECKS = 310;
  83. var PFX_WIKI = 'https://www.waze.com/wiki/';
  84. var PFX_PEDIA = 'https://wazeopedia.waze.com/wiki/';
  85. var PFX_FORUM = 'https://www.waze.com/forum/viewtopic.php?';
  86. var FORUM_HOME = 't=76488';
  87. var FORUM_FAQ = 't=76488&p=666476#p666476';
  88. var FORUM_LOCAL = 't=76488&p=661300#p661185';
  89. var FORUM_CUSTOM = 't=76488&p=749456#p749456';
  90. var _translations = {
  91. 'EN': {
  92. '.codeISO': 'EN',
  93. 'city.consider': 'consider this city name:',
  94. 'city.1': 'city name is too short',
  95. 'city.2': 'expand the abbreviation',
  96. 'city.3': 'complete short name',
  97. 'city.4': 'complete city name',
  98. 'city.5': 'correct letter case',
  99. 'city.6': 'check word order',
  100. 'city.7': 'check abbreviations',
  101. 'city.8a': 'add county name',
  102. 'city.8r': 'remove county name',
  103. 'city.9': 'check county name',
  104. 'city.10a': 'add a word',
  105. 'city.10r': 'remove a word',
  106. 'city.11': 'add county code',
  107. 'city.12': 'identical names, but different city IDs',
  108. 'city.13a': 'add a space',
  109. 'city.13r': 'remove a space',
  110. 'city.14': 'check the number',
  111. 'props.skipped.title': 'The segment is not checked',
  112. 'props.skipped.problem': 'The segment is modified after 2014-05-01 AND locked for you, so Validator did not check it',
  113. 'err.regexp': 'Error parsing option for check #${n}:',
  114. 'props.disabled': 'WME Validator is disabled',
  115. 'props.limit.title': 'Too many issues reported',
  116. 'props.limit.problem': 'There are too many issues reported, so some of them might not be shown',
  117. 'props.limit.solution': 'Deselect the segment and stop scanning process. Then click red \'✘\' (Clear report) button',
  118. 'props.reports': 'reports',
  119. 'props.noneditable': 'You cannot edit this segment',
  120. 'report.save': 'Save this report',
  121. 'report.list.andUp': 'and up',
  122. 'report.list.severity': 'Severity:',
  123. 'report.list.reportOnly': 'only in report',
  124. 'report.list.forEditors': 'For editors level:',
  125. 'report.list.forCountries': 'For countries:',
  126. 'report.list.forStates': 'For states:',
  127. 'report.list.forCities': 'For cities:',
  128. 'report.list.params': 'Params to configure in localization pack:',
  129. 'report.list.params.set': 'Current configuration for ${country}:',
  130. 'report.list.enabled': '${n} checks are enabled for',
  131. 'report.list.disabled': '${n} checks are disabled for',
  132. 'report.list.total': 'There are ${n} checks available',
  133. 'report.list.title': 'Complete List of Checks for',
  134. 'report.list.see': 'See',
  135. 'report.list.checks': 'Settings->About->Available checks',
  136. 'report.list.fallback': 'Localization Fallback Rules:',
  137. 'report.and': 'and',
  138. 'report.segments': 'Total number of segments checked:',
  139. 'report.customs': 'Custom checks matched (green/blue):',
  140. 'report.reported': 'Reported',
  141. 'report.errors': 'errors',
  142. 'report.warnings': 'warnings',
  143. 'report.notes': 'notes',
  144. 'report.link.wiki': 'wiki',
  145. 'report.link.forum': 'forum',
  146. 'report.link.other': 'link',
  147. 'report.contents': 'Contents:',
  148. 'report.summary': 'Summary',
  149. 'report.title': 'WME Validator Report',
  150. 'report.share': 'to Share',
  151. 'report.generated.by': 'generated by',
  152. 'report.generated.on': 'on',
  153. 'report.source': 'Report source:',
  154. 'report.filter.duplicate': 'duplicate segments',
  155. 'report.filter.streets': 'Streets and Service Roads',
  156. 'report.filter.other': 'Other drivable and Non-drivable',
  157. 'report.filter.noneditable': 'non-editable segments',
  158. 'report.filter.notes': 'notes',
  159. 'report.filter.title': 'Filter:',
  160. 'report.filter.excluded': 'are excluded from this report.',
  161. 'report.search.updated.by': 'updated by',
  162. 'report.search.updated.since': 'updated since',
  163. 'report.search.city': 'from',
  164. 'report.search.reported': 'reported as',
  165. 'report.search.title': 'Search:',
  166. 'report.search.only': 'only segments',
  167. 'report.search.included': 'are included into the report.',
  168. 'report.beta.warning': 'WME Beta Warning!',
  169. 'report.beta.text': 'This report is generated in beta WME with beta permalinks.',
  170. 'report.beta.share': 'Please do not share those permalinks!',
  171. 'report.size.warning': '<b>Warning!</b><br>The report is ${n}' +
  172. ' characters long' +
  173. ' so <b>it will not fit</b> into a single forum or private message.' +
  174. '\n<br>Please add <b>more filters</b> to reduce the size of the report.',
  175. 'report.note.limit': '* Note: there were too many issues reported, so some of them are not counted in the summary.',
  176. 'report.forum': 'To motivate further development please leave your comment on the',
  177. 'report.forum.link': 'Waze forum thread.',
  178. 'report.thanks': 'Thank you for using WME Validator!',
  179. 'msg.limit.segments': 'There are too many segments.\n\nClick \'Show report\' to review the report, then\n',
  180. 'msg.limit.segments.continue': 'click \'▶\' (Play) to continue.',
  181. 'msg.limit.segments.clear': 'click \'✘\' (Clear) to clear the report.',
  182. 'msg.pan.text': 'Pan around to validate the map',
  183. 'msg.zoomout.text': 'Zoom out to start WME Validator',
  184. 'msg.click.text': 'Click \'▶\' (Play) to validate visible map area',
  185. 'msg.autopaused': 'autopaused',
  186. 'msg.autopaused.text': 'Auto paused! Click \'▶\' (Play) to continue.',
  187. 'msg.autopaused.tip': 'WME Validator automatically paused on map drag or window size change',
  188. 'msg.finished.text': 'Click <b>\'Show report\'</b> to review map issues',
  189. 'msg.finished.tip': 'Click \'✉\' (Share) button to post report on a\nforum or in a private message',
  190. 'msg.noissues.text': 'Finished! No issues found!',
  191. 'msg.noissues.tip': 'Try to uncheck some filter options or start WME Validator over another map area!',
  192. 'msg.scanning.text': 'Scanning! Finishing in ~ ${n} min',
  193. 'msg.scanning.text.soon': 'Scanning! Finishing in a minute!',
  194. 'msg.scanning.tip': 'Click \'Pause\' button to pause or \'■\' (Stop) to stop',
  195. 'msg.starting.text': 'Starting! Layers are off to scan faster!',
  196. 'msg.starting.tip': 'Use \'Pause\' button to pause or \'■\' button to stop',
  197. 'msg.paused.text': 'On pause! Click \'▶\' (Play) button to continue.',
  198. 'msg.paused.tip': 'To view the report click \'Show report\' button (if available)',
  199. 'msg.continuing.text': 'Continuing!',
  200. 'msg.continuing.tip': 'WME Validator will continue from the location it was paused',
  201. 'msg.settings.text': 'Click <b>\'Back\'</b> to return to main view',
  202. 'msg.settings.tip': 'Click \'Reset defaults\' button to reset all settings in one click!',
  203. 'msg.reset.text': 'All filter options and settings have been reset to their defaults',
  204. 'msg.reset.tip': 'Click \'Back\' button to return to main view',
  205. 'msg.textarea.pack':
  206. 'This is a Greasemonkey/Tampermonkey script. You can copy and paste the text below into a <b>new .user.js file</b><br>or <b>paste it directly</b> into the Greasemonkey/Tampermonkey',
  207. 'msg.textarea': 'Please copy the text below and then paste it into your forum post or private message',
  208. 'noaccess.text':
  209. '<b>Sorry,</b><br>You cannot use WME Validator over here.<br>Please check <a target=\'_blank\' href=\'' + PFX_FORUM + FORUM_HOME + '\'>the forum thread</a><br>for more information.',
  210. 'noaccess.tip': 'Please check the forum thread for more information!',
  211. 'tab.switch.tip.on': 'Click to switch highlighting on (Alt+V)',
  212. 'tab.switch.tip.off': 'Click to switch highlighting off (Alt+V)',
  213. 'tab.filter.text': 'filter',
  214. 'tab.filter.tip': 'Options to filter the report and highlighted segments',
  215. 'tab.search.text': 'search',
  216. 'tab.search.tip': 'Advanced filter options to include only specific segments',
  217. 'tab.help.text': 'help',
  218. 'tab.help.tip': 'Need help?',
  219. 'filter.noneditables.text': 'Exclude <b>non-editable</b> segments',
  220. 'filter.noneditables.tip': 'Do not report locked segments or\nsegments outside of your editable areas',
  221. 'filter.duplicates.text': 'Exclude <b>duplicate</b> segments',
  222. 'filter.duplicates.tip': 'Do not show the same segment in different\nparts of report\n* Note: this option DOES NOT affect highlighting',
  223. 'filter.streets.text': 'Exclude <b>Streets and Service Roads</b>',
  224. 'filter.streets.tip': 'Do not report Streets and Service Roads',
  225. 'filter.other.text': 'Exclude <b>Other drivable and Non-drivable</b>',
  226. 'filter.other.tip': 'Do not report Dirt, Parking Lot, Private Roads\nand non-drivable segments',
  227. 'filter.notes.text': 'Exclude <b>notes</b>',
  228. 'filter.notes.tip': 'Report only warnings and errors',
  229. 'search.youredits.text': 'Include <b>only your edits</b>',
  230. 'search.youredits.tip': 'Include only segments edited by you',
  231. 'search.updatedby.text': '<b>Updated by*:</b>',
  232. 'search.updatedby.tip': 'Include only segments updated by the specified editor' +
  233. '\n* Note: this option is available for country managers only' +
  234. '\nThis field supports:' +
  235. '\n - lists: me, otherEditor' +
  236. '\n - wildcards: world*' +
  237. '\n - negation: !me, *' +
  238. '\n* Note: you may use \'me\' to match yourself',
  239. 'search.updatedby.example': 'Example: me',
  240. 'search.updatedsince.text': '<b>Updated since:</b>',
  241. 'search.updatedsince.tip': 'Include only segments edited since the date specified' +
  242. '\nFirefox date format: YYYY-MM-DD',
  243. 'search.updatedsince.example': 'YYYY-MM-DD',
  244. 'search.city.text': '<b>City name:</b>',
  245. 'search.city.tip': 'Include only segments with specified city name' +
  246. '\nThis field supports:' +
  247. '\n - lists: Paris, Meudon' +
  248. '\n - wildcards: Greater * Area' +
  249. '\n - negation: !Paris, *',
  250. 'search.city.example': 'Example: !Paris, *',
  251. 'search.checks.text': '<b>Reported as:</b>',
  252. 'search.checks.tip': 'Include only segments reported as specified' +
  253. '\nThis field matches:' +
  254. '\n - severities: error|warning|note|custom1|custom2' +
  255. '\n - check names: New road' +
  256. '\n - check IDs: 200' +
  257. '\nThis field supports:' +
  258. '\n - lists: 36, 37' +
  259. '\n - wildcards: *roundabout*' +
  260. '\n - negation: !unconfirmed*, *',
  261. 'search.checks.example': 'Example: reverse*',
  262. 'help.text': '<b>Help Topics:</b>' +
  263. '<br><a target="_blank" href="' + PFX_FORUM + FORUM_FAQ + '">F.A.Q.</a>' +
  264. '<br><a target="_blank" href="' + PFX_FORUM + FORUM_HOME + '">Ask your question on the forum</a>' +
  265. '<br><a target="_blank" href="' + PFX_FORUM + FORUM_LOCAL + '">How to adjust Validator for your country</a>' +
  266. '<br><a target="_blank" href="' + PFX_FORUM + 't=76488&p=663286#p663286">About the "Might be Incorrect City Name"</a>',
  267. 'help.tip': 'Open in a new browser tab',
  268. 'button.scan.tip': 'Start scanning current map area\n* Note: this might take few minutes',
  269. 'button.scan.tip.NA': 'Zoom out to start scanning current map area',
  270. 'button.pause.tip': 'Pause scanning',
  271. 'button.continue.tip': 'Continue scanning the map area',
  272. 'button.stop.tip': 'Stop scanning and return to the start position',
  273. 'button.clear.tip': 'Clear report and segment cache',
  274. 'button.clear.tip.red': 'There are too many reported segments:\n 1. Click \'Show report\' to generate the report.\n 2. Click this button to clear the report and start over.',
  275. 'button.report.text': 'Show report',
  276. 'button.report.tip': 'Apply the filter and generate HTML report in a new tab',
  277. 'button.BBreport.tip': 'Share the report on Waze forum or in a private message',
  278. 'button.settings.tip': 'Configure settings',
  279. 'tab.custom.text': 'custom',
  280. 'tab.custom.tip': 'User-defined custom checks settings',
  281. 'tab.settings.text': 'Settings',
  282. 'tab.scanner.text': 'scanner',
  283. 'tab.scanner.tip': 'Map scanner settings',
  284. 'tab.about.text': 'about</span>',
  285. 'tab.about.tip': 'About WME Validator',
  286. 'scanner.sounds.text': 'Enable sounds',
  287. 'scanner.sounds.tip': 'Bleeps and the bloops while scanning',
  288. 'scanner.sounds.NA': 'Your browser does not support AudioContext',
  289. 'scanner.highlight.text': 'Highlight issues on the map',
  290. 'scanner.highlight.tip': 'Highlight reported issues on the map',
  291. 'scanner.slow.text': 'Enable "slow" checks',
  292. 'scanner.slow.tip': 'Enables deep map analysis\n* Note: this option might slow down the scanning process',
  293. 'scanner.ext.text': 'Report external highlights',
  294. 'scanner.ext.tip': 'Report segments highlighted by WME Toolbox or WME Color Highlights',
  295. 'advanced.atbottom.text': 'At the bottom',
  296. 'advanced.atbottom.tip': 'Put WME Validator at the bottom of the page',
  297. 'custom.template.text': '<a target=\'_blank\' href=\'' + PFX_FORUM + FORUM_CUSTOM + '\'>Custom template</a>',
  298. 'custom.template.tip': 'User-defined custom check expandable template.' +
  299. '\n\nYou may use the following expandable variables:' +
  300. '\nAddress:' +
  301. '\n ${country}, ${state}, ${city}, ${street},' +
  302. '\n ${altCity[index or delimeter]}, ${altStreet[index or delimeter]}' +
  303. '\nSegment properties:' +
  304. '\n ${type}, ${typeRank}, ${toll}, ${direction}, ${elevation}, ${lock},' +
  305. '\n ${length}, ${ID}, ${speedLimit}, ${speedLimitAB}, ${speedLimitBA}' +
  306. '\nHelpers:' +
  307. '\n ${drivable}, ${roundabout}, ${hasHNs},' +
  308. '\n ${Uturn}, ${deadEnd}, ${softTurns},' +
  309. '\n ${deadEndA}, ${partialA},' +
  310. '\n ${deadEndB}, ${partialB},' +
  311. '\n ${checkSpeedLimit}' +
  312. '\nConnectivity:' +
  313. '\n ${segmentsA}, ${inA}, ${outA}, ${UturnA},' +
  314. '\n ${segmentsB}, ${inB}, ${outB}, ${UturnB}',
  315. 'custom.template.example': 'Example: ${street}',
  316. 'custom.regexp.text': 'Custom <a target=\'_blank\' href=\'' + PFX_FORUM + FORUM_CUSTOM + '\'>RegExp</a>',
  317. 'custom.regexp.tip': 'User-defined custom check regular expression to match the template.' +
  318. '\n\nCase-insensitive match: /regexp/i' +
  319. '\nNegation (do not match): !/regexp/' +
  320. '\nLog debug information on console: D/regexp/',
  321. 'custom.regexp.example': 'Example: !/.+/',
  322. 'about.tip': 'Open link in a new tab',
  323. 'button.reset.text': 'Reset defaults',
  324. 'button.reset.tip': 'Revert filter options and settings to their defaults',
  325. 'button.list.text': 'Available checks...',
  326. 'button.list.tip': 'Show a list of checks available in WME Validator',
  327. 'button.wizard.tip': 'Create localization package',
  328. 'button.back.text': 'Back',
  329. 'button.back.tip': 'Close settings and return to main view',
  330. '23.enabled': true,
  331. '23.title': 'Unconfirmed road',
  332. '23.problem': 'Each segment must minimally have the Country and State information',
  333. '23.problemLink': 'W:Map_Editing_Quick-start_Guide#Create_a_Road',
  334. '23.solution': 'Confirm the road by updating its details',
  335. '23.solutionLink': 'W:How_to_label_and_name_roads',
  336. '24.enabled': true,
  337. '24.severity': 'W',
  338. '24.reportOnly': true,
  339. '24.title': 'Might be incorrect city name (only available in the report)',
  340. '24.problem': 'The segment might have incorrect city name',
  341. '24.problemLink': 'W:Fixing_"smudged"_cities',
  342. '24.solution': 'Consider suggested city name and use this form to rename the city',
  343. '24.solutionLink': 'F:t=50314#p450378',
  344. '25.enabled': true,
  345. '25.severity': 'W',
  346. '25.title': 'Unknown direction of drivable road',
  347. '25.problem': '\'Unknown\' road direction will not prevent routing on the road',
  348. '25.problemLink': 'W:How_to_handle_road_closures#NOTES_for_all_durations',
  349. '25.solution': 'Set the road direction',
  350. '27.title': 'City name on Railroad',
  351. '27.problem': 'City name on the Railroad may cause a city smudge',
  352. '27.problemLink': 'W:Fixing_"smudged"_cities',
  353. '27.solution': 'In the address properties check the \'None\' box next to the city name and then click \'Apply\'',
  354. '27.solutionLink': 'W:Creating_and_Editing_street_segments#Address_Properties',
  355. '28.enabled': true,
  356. '28.severity': 'W',
  357. '28.title': 'Street name on two-way Ramp',
  358. '28.problem': 'If Ramp is unnamed, the name of a subsequent road will propagate backwards',
  359. '28.problemLink': 'W:Junction_Style_Guide#Ramp_to_Ramp_Splits',
  360. '28.solution': 'In the address properties check the \'None\' box next to the street name and then click \'Apply\'',
  361. '28.solutionLink': 'W:Creating_and_Editing_street_segments#Address_Properties',
  362. '29.enabled': true,
  363. '29.severity': 'W',
  364. '29.title': 'Street name on roundabout',
  365. '29.problem': 'In Waze, we do not name roundabout segments',
  366. '29.problemLink': 'W:Creating_and_Editing_a_roundabout#Creating_a_roundabout_from_an_intersection',
  367. '29.solution': 'In the address properties check the \'None\' box next to the street name, click \'Apply\' and then add \'Junction\' landmark to name the roundabout',
  368. '29.solutionLink': 'W:Creating_and_Editing_street_segments#Address_Properties',
  369. '34.enabled': true,
  370. '34.title': 'Empty alternate street',
  371. '34.problem': 'Alternate street name is empty',
  372. '34.solution': 'Remove empty alternate street name',
  373. '35.enabled': true,
  374. '35.severity': 'W',
  375. '35.title': 'Unterminated drivable road',
  376. '35.problem': 'Waze will not route from the unterminated segment',
  377. '35.solution': 'Move the segment a bit so the terminating node will be added automatically',
  378. '36.enabled': false,
  379. '36.title': 'Node A: Unneeded (slow)',
  380. '36.problem': 'Adjacent segments at node A are identical',
  381. '36.problemLink': 'W:Creating_and_Editing_street_segments#Removing_junctions_with_only_two_segments',
  382. '36.solution': 'Select node A and press Delete key to join the segments',
  383. '36.solutionLink': 'W:Map_Editing_Quick-start_Guide#Delete_a_Junction',
  384. '37.enabled': false,
  385. '37.title': 'Node B: Unneeded (slow)',
  386. '37.problem': 'Adjacent segments at node B are identical',
  387. '37.problemLink': 'W:Creating_and_Editing_street_segments#Removing_junctions_with_only_two_segments',
  388. '37.solution': 'Select node B and press Delete key to join the segments',
  389. '37.solutionLink': 'W:Map_Editing_Quick-start_Guide#Delete_a_Junction',
  390. '38.enabled': true,
  391. '38.title': 'Expired segment restriction (slow)',
  392. '38.problem': 'The segment has an expired restriction',
  393. '38.problemLink': 'W:Scheduled_Restrictions#Segments',
  394. '38.solution': 'Click \'Edit restrictions\' and delete the expired restriction',
  395. '39.enabled': true,
  396. '39.title': 'Expired turn restriction (slow)',
  397. '39.problem': 'The segment has a turn with an expired restriction',
  398. '39.problemLink': 'W:Scheduled_Restrictions#Turns',
  399. '39.solution': 'Click clock icon next to the yellow arrow and delete the expired restriction',
  400. '41.enabled': true,
  401. '41.title': 'Node A: Reverse connectivity of drivable road',
  402. '41.problem': 'There is a turn which goes against the directionality of the segment at node A',
  403. '41.problemLink': 'W:Glossary#Reverse_Connectivity',
  404. '41.solution': 'Make the segment \'Two-way\', restrict all the turns at node A and then make the segment \'One way (A→B)\' again',
  405. '42.enabled': true,
  406. '42.title': 'Node B: Reverse connectivity of drivable road',
  407. '42.problem': 'There is a turn which goes against the directionality of the segment at node B',
  408. '42.problemLink': 'W:Glossary#Reverse_Connectivity',
  409. '42.solution': 'Make the segment \'Two-way\', restrict all the turns at node B and then make the segment \'One way (B→A)\' again',
  410. '43.enabled': true,
  411. '43.severity': 'E',
  412. '43.title': 'Self connectivity',
  413. '43.problem': 'The segment is connected back to itself',
  414. '43.problemLink': 'W:Glossary#Self_Connectivity',
  415. '43.solution': 'Split the segment into THREE pieces',
  416. '43.solutionLink': 'W:Map_Editing_Quick-start_Guide#Splitting_a_segment',
  417. '44.enabled': false,
  418. '44.severity': 'E',
  419. '44.title': 'No outward connectivity',
  420. '44.problem': 'The drivable segment has no single outward turn enabled',
  421. '44.solution': 'Enable at least one outward turn from the segment',
  422. '44.solutionLink': 'W:Creating_and_Editing_street_segments#Set_allowed_turns_.28connections.29',
  423. '45.enabled': false,
  424. '45.severity': 'E',
  425. '45.title': 'No inward connectivity',
  426. '45.problem': 'The drivable non-private segment has no single inward turn enabled',
  427. '45.solution': 'Select an adjacent segment and enable at least one turn to the segment',
  428. '45.solutionLink': 'W:Creating_and_Editing_street_segments#Set_allowed_turns_.28connections.29',
  429. '46.enabled': true,
  430. '46.severity': 'W',
  431. '46.title': 'Node A: No inward connectivity of drivable road (slow)',
  432. '46.problem': 'The drivable non-private segment has no single inward turn enabled at node A',
  433. '46.solution': 'Select an adjacent segment and enable at least one turn to the segment at node A',
  434. '46.solutionLink': 'W:Creating_and_Editing_street_segments#Set_allowed_turns_.28connections.29',
  435. '47.enabled': true,
  436. '47.severity': 'W',
  437. '47.title': 'Node B: No inward connectivity of drivable road (slow)',
  438. '47.problem': 'The drivable non-private segment has no single inward turn enabled at node B',
  439. '47.solution': 'Select an adjacent segment and enable at least one turn to the segment at node B',
  440. '47.solutionLink': 'W:Creating_and_Editing_street_segments#Set_allowed_turns_.28connections.29',
  441. '48.enabled': true,
  442. '48.severity': 'E',
  443. '48.title': 'Two-way drivable roundabout segment',
  444. '48.problem': 'The drivable roundabout segment is bidirectional',
  445. '48.solution': 'Redo the roundabout',
  446. '48.solutionLink': 'W:Creating_and_Editing_a_roundabout#Improving_manually_drawn_roundabouts',
  447. '50.enabled': false,
  448. '50.severity': 'E',
  449. '50.title': 'No connectivity on roundabout (slow)',
  450. '50.problem': 'The drivable roundabout segment has no connectivity with adjacent roundabout segment',
  451. '50.solution': 'Enable a turn to the adjacent segment or redo the roundabout',
  452. '50.solutionLink': 'W:Creating_and_Editing_a_roundabout#Improving_manually_drawn_roundabouts',
  453. '52.title': 'Too long street name',
  454. '52.problem': 'The name of the drivable segment is more than ${n} letters long and it is not a Ramp',
  455. '52.solution': 'Consider an abbreviation for the street name',
  456. '52.params': {'n.title': '{number} maximum street name length', 'n': 30},
  457. '57.severity': 'W',
  458. '57.title': 'City name on named Ramp',
  459. '57.problem': 'City name on the named Ramp may affect search results',
  460. '57.problemLink': 'F:t=68015',
  461. '57.solution': 'In the address properties check the \'None\' box next to the city name and then click \'Apply\'',
  462. '57.solutionLink': 'W:Creating_and_Editing_street_segments#Address_Properties',
  463. '59.title': 'City name on Freeway',
  464. '59.problem': 'City name on the Freeway may cause a city smudge',
  465. '59.problemLink': 'W:Fixing_"smudged"_cities',
  466. '59.solution': 'In the address properties check the \'None\' box next to the city name and then click \'Apply\'',
  467. '59.solutionLink': 'W:Creating_and_Editing_street_segments#Address_Properties',
  468. '69.title': 'No city name on Freeway',
  469. '69.problem': 'The Freeway has no city name set',
  470. '69.solution': 'Set the city name',
  471. '73.title': 'Too short street name',
  472. '73.problem': 'The street name is less than ${n} letters long and it is not a highway',
  473. '73.solution': 'Correct the street name',
  474. '73.params': {'n.title': '{number} minimum street name length', 'n': 3},
  475. '74.enabled': false,
  476. '74.severity': 'W',
  477. '74.title': 'Node A: Multiple segments connected at roundabout',
  478. '74.problem': 'The drivable roundabout node A has more than one segment connected',
  479. '74.problemLink': 'W:Map_Legend#Types_of_segments_.28Roundabouts.29',
  480. '74.solution': 'Redo the roundabout',
  481. '74.solutionLink': 'W:Creating_and_Editing_a_roundabout#Improving_manually_drawn_roundabouts',
  482. '77.enabled': false,
  483. '77.severity': 'W',
  484. '77.title': 'Dead-end U-turn',
  485. '77.problem': 'The drivable dead-end road has a U-turn enabled',
  486. '77.problemLink': 'W:Map_Editing_Quick-start_Guide#U-Turns_at_the_end_of_dead-end-streets',
  487. '77.solution': 'Disable U-turn',
  488. '78.enabled': true,
  489. '78.severity': 'W',
  490. '78.title': 'Same endpoints drivable segments (slow)',
  491. '78.problem': 'Two drivable segments share the same two endpoints',
  492. '78.problemLink': 'W:Junction_Style_Guide#Two-segment_loops',
  493. '78.solution': 'Split the segment. You might also remove one of the segments if they are identical',
  494. '78.solutionLink': 'W:Map_Editing_Quick-start_Guide#Splitting_a_segment',
  495. '79.enabled': false,
  496. '79.severity': 'W',
  497. '79.title': 'Too short U-turn connector (slow)',
  498. '79.problem': 'The length of the segment is less than 15m long so U-turn is not possible here',
  499. '79.problemLink': 'W:Classification_of_crossings',
  500. '79.solution': 'Increase the length of the segment',
  501. '87.enabled': true,
  502. '87.severity': 'E',
  503. '87.title': 'Node A: Multiple outgoing segments at roundabout',
  504. '87.problem': 'The drivable roundabout node A has more than one outgoing segment connected',
  505. '87.problemLink': 'W:Map_Legend#Types_of_segments_.28Roundabouts.29',
  506. '87.solution': 'Redo the roundabout',
  507. '87.solutionLink': 'W:Creating_and_Editing_a_roundabout#Improving_manually_drawn_roundabouts',
  508. '90.severity': 'W',
  509. '90.title': 'Two-way Freeway segment',
  510. '90.problem': 'Most of the Freeways are split into two one-way roads, so this two-way segment might be a mistake',
  511. '90.solution': 'Check Freeway direction',
  512. '91.severity': 'W',
  513. '91.title': 'Two-way Ramp segment',
  514. '91.problem': 'Most of the Ramps are one-way roads, so this two-way segment might be a mistake',
  515. '91.solution': 'Check Ramp direction',
  516. '95.severity': 'W',
  517. '95.title': 'Street name with a dot',
  518. '95.problem': 'There is a dot in the street name (excluding Ramps)',
  519. '95.solution': 'Expand the abbreviation or remove the dot',
  520. '99.enabled': true,
  521. '99.severity': 'W',
  522. '99.title': 'U-turn at roundabout entrance (slow)',
  523. '99.problem': 'The roundabout entrance segment has a U-turn enabled',
  524. '99.problemLink': 'W:Map_Editing_Quick-start_Guide#U-Turns_at_the_end_of_dead-end-streets',
  525. '99.solution': 'Disable U-turn',
  526. '101.enabled': true,
  527. '101.severity': 'E',
  528. '101.reportOnly': true,
  529. '101.title': 'Closed road (only available in the report)',
  530. '101.problem': 'The segment is marked as closed',
  531. '101.problemLink': 'W:How_to_handle_road_closures',
  532. '101.solution': 'If the construction is done, restore the segment connectivity and remove the suffix',
  533. '101.solutionLink': 'W:Road_Naming_(USA)#Construction_zones_and_closed_roads',
  534. '101.params': {'regexp.title': '{string} regular expression to match closed road', 'regexp': '/(^|\\b)closed(\\b|$)/i'},
  535. '102.enabled': true,
  536. '102.severity': 'W',
  537. '102.title': 'Node A: No outward connectivity of drivable road (slow)',
  538. '102.problem': 'The drivable segment has no single outward turn enabled at node A',
  539. '102.solution': 'Enable at least one outward turn from the segment at node A',
  540. '102.solutionLink': 'W:Creating_and_Editing_street_segments#Set_allowed_turns_.28connections.29',
  541. '103.enabled': true,
  542. '103.severity': 'W',
  543. '103.title': 'Node B: No outward connectivity of drivable road (slow)',
  544. '103.problem': 'The drivable segment has no single outward turn enabled at node B',
  545. '103.solution': 'Enable at least one outward turn from the segment at node B',
  546. '103.solutionLink': 'W:Creating_and_Editing_street_segments#Set_allowed_turns_.28connections.29',
  547. '104.enabled': true,
  548. '104.title': 'Railroad used for comments',
  549. '104.problem': 'The Railroad segment is probably used as a map comment',
  550. '104.problemLink': 'F:t=61546',
  551. '104.solution': 'Remove the comment as Railroads will be added to the client display',
  552. '105.title': 'Walking Trail instead of a Railroad',
  553. '105.problem': 'The Walking Trail segment with elevation -5 is probably used instead of a Railroad',
  554. '105.problemLink': 'F:t=61546',
  555. '105.solution': 'Change road type to Railroad as Railroads will be added to the client display',
  556. '106.title': 'No state name selected',
  557. '106.problem': 'The segment has no state name selected',
  558. '106.solution': 'Select a state for the segment and apply the changes',
  559. '106.solutionLink': 'W:Creating_and_Editing_street_segments#Confirm_the_road_by_updating_details',
  560. '107.enabled': true,
  561. '107.severity': 'E',
  562. '107.title': 'Node A: No connection (slow)',
  563. '107.problem': 'The node A of the drivable segment is within 5m from another drivable segment but not connected by a junction',
  564. '107.solution': 'Drag the node A to the nearby segment so that it touches or move it a bit further away',
  565. '108.enabled': true,
  566. '108.severity': 'E',
  567. '108.title': 'Node B: No connection (slow)',
  568. '108.problem': 'The node B of the drivable segment is within 5m from another drivable segment but not connected by a junction',
  569. '108.solution': 'Drag the node B to the nearby segment so that it touches or move it a bit further away',
  570. '109.enabled': true,
  571. '109.severity': 'W',
  572. '109.title': 'Too short segment',
  573. '109.problem': 'The drivable non-terminal segment is less than ${n}m long so it is hard to see it on the map and it can cause routing problems',
  574. '109.problemLink': 'W:Segment_length',
  575. '109.solution': 'Increase the length, or remove the segment, or join it with one of the adjacent segments',
  576. '109.solutionLink': 'W:Map_Editing_Quick-start_Guide#Delete_a_Junction',
  577. '109.params': {'n.title': '{number} minimum segment length', 'n': 5},
  578. '110.title': 'Incorrect Freeway elevation',
  579. '110.problem': 'The elevation of the Freeway segment is not a ground',
  580. '110.problemLink': 'W:Die_beste_Vorgehensweise_beim_Bearbeiten_der_Karte#.C3.9Cber-_und_Unterf.C3.BChrungen',
  581. '110.solution': 'Set the Freeway elevation to ground',
  582. '112.enabled': true,
  583. '112.severity': 'W',
  584. '112.title': 'Too long Ramp name',
  585. '112.problem': 'The Ramp name is more than ${n} letters long',
  586. '112.solution': 'Shorten the Ramp name',
  587. '112.params': {'n.title': '{number} maximum Ramp name length', 'n': 55},
  588. '114.enabled': false,
  589. '114.severity': 'W',
  590. '114.title': 'Node A: Non-drivable connected to drivable (slow)',
  591. '114.problem': 'The non-drivable segment makes a junction with a drivable at node A',
  592. '114.problemLink': 'W:Road_Types_(USA)#Non-drivable_roads',
  593. '114.solution': 'Disconnect node A from all of the drivable segments',
  594. '115.enabled': false,
  595. '115.severity': 'W',
  596. '115.title': 'Node B: Non-drivable connected to drivable (slow)',
  597. '115.problem': 'The non-drivable segment makes a junction with a drivable at node B',
  598. '115.problemLink': 'W:Road_Types_(USA)#Non-drivable_roads',
  599. '115.solution': 'Disconnect node B from all of the drivable segments',
  600. '116.enabled': true,
  601. '116.severity': 'W',
  602. '116.title': 'Out of range elevation',
  603. '116.problem': 'The segment elevation is out of range',
  604. '116.solution': 'Correct the elevation',
  605. '117.enabled': true,
  606. '117.severity': 'W',
  607. '117.title': 'Obsolete CONST ZN marker',
  608. '117.problem': 'The segment is marked with obsolete CONST ZN suffix',
  609. '117.solution': 'Change CONST ZN to (closed)',
  610. '117.solutionLink': 'W:Road_Naming_(USA)#Construction_zones_and_closed_roads',
  611. '118.enabled': true,
  612. '118.severity': 'E',
  613. '118.title': 'Node A: Overlapping segments (slow)',
  614. '118.problem': 'The segment is overlapping with the adjacent segment at node A',
  615. '118.solution': 'Spread the segments at 2° or delete unneeded geometry point or delete the duplicate segment at node A',
  616. '119.enabled': true,
  617. '119.severity': 'E',
  618. '119.title': 'Node B: Overlapping segments (slow)',
  619. '119.problem': 'The segment is overlapping with the adjacent segment at node B',
  620. '119.solution': 'Spread the segments at 2° or delete unneeded geometry point or delete the duplicate segment at node B',
  621. '120.enabled': true,
  622. '120.severity': 'W',
  623. '120.title': 'Node A: Too sharp turn (slow)',
  624. '120.problem': 'The drivable segment has a very acute turn at node A',
  625. '120.solution': 'Disable the sharp turn at node A or spread the segments at 30°',
  626. '121.enabled': true,
  627. '121.severity': 'W',
  628. '121.title': 'Node B: Too sharp turn (slow)',
  629. '121.problem': 'The drivable segment has a very acute turn at node B',
  630. '121.solution': 'Disable the sharp turn at node B or spread the segments at 30°',
  631. '128.enabled': true,
  632. '128.severity': '1',
  633. '128.title': 'User-defined custom check (green)',
  634. '128.problem': 'Some of the segment properties matched against the user-defined regular expression (see Settings→Custom)',
  635. '128.problemLink': 'https://developer.mozilla.org/docs/Web/JavaScript/Guide/Regular_Expressions',
  636. '128.solution': 'Solve the issue',
  637. '128.params': {},
  638. '129.enabled': true,
  639. '129.severity': '2',
  640. '129.title': 'User-defined custom check (blue)',
  641. '129.problem': 'Some of the segment properties matched against the user-defined regular expression (see Settings→Custom)',
  642. '129.problemLink': 'https://developer.mozilla.org/docs/Web/JavaScript/Guide/Regular_Expressions',
  643. '129.solution': 'Solve the issue',
  644. '129.params': {},
  645. '169.severity': 'W',
  646. '169.title': 'Incorrectly named street',
  647. '169.problem': 'The street named incorrectly, illegal chars or words used',
  648. '169.solution': 'Rename the segment in accordance with the guidelines',
  649. '169.params': {'regexp.title': '{string} regular expression to match incorrect street name', 'regexp': '!/^[a-zA-Z0-9\\. :"\'(/)-]+$/'},
  650. '170.severity': 'W',
  651. '170.title': 'Lowercase street name',
  652. '170.problem': 'The street name starts with a lowercase word',
  653. '170.solution': 'Correct lettercase in the street name',
  654. '170.params': {'regexp.title': '{string} regular expression to match a lowercase name', 'regexp': '/^[a-zа-яёіїєґ]/'},
  655. '171.severity': 'W',
  656. '171.title': 'Incorrectly abbreviated street name',
  657. '171.problem': 'The street name has incorrect abbreviation',
  658. '171.solution': 'Check upper/lower case, a space before/after the abbreviation and the accordance with the abbreviation table',
  659. '171.params': {'regexp.title': '{string} regular expression to match incorrect abbreviations', 'regexp': '/\\.$/'},
  660. '172.enabled': true,
  661. '172.title': 'Unneeded spaces in street name',
  662. '172.problem': 'Leading/trailing/double space in the street name',
  663. '172.solution': 'Remove unneeded spaces from the street name',
  664. '172.params': {'regexp': '/^\\s|\\s$|\\s\\s/'},
  665. '173.enabled': true,
  666. '173.severity': 'W',
  667. '173.title': 'No space before/after street abbreviation',
  668. '173.problem': 'No space before (\'1943r.\') or after (\'st.Jan\') an abbreviation in the street name',
  669. '173.solution': 'Add a space before/after the abbreviation',
  670. '173.params': {'regexp': '/([^\\s]\\.[^\\s0-9-][^\\s0-9\\.])|([0-9][^\\s0-9]+\\.[^0-9-])/'},
  671. '174.severity': 'W',
  672. '174.title': 'Street name spelling mistake',
  673. '174.problem': 'The is a spelling mistake in the street name',
  674. '174.solution': 'Add/correct the mistake, check accented letters',
  675. '174.params': {
  676. 'regexp.title': '{string} regular expression to match spelling mistakes',
  677. 'regexp': '/(^|\\b)(accross|cemetary|fourty|foward|goverment|independant|liason|pavillion|portugese|posession|prefered|shcool|wat|wich)($|\\b)/i'
  678. },
  679. '175.enabled': true,
  680. '175.severity': 'W',
  681. '175.title': 'Empty street name',
  682. '175.problem': 'The street name has only space characters or a dot',
  683. '175.solution': 'In the address properties check the \'None\' box next to the street name, click \'Apply\' OR set a proper street name',
  684. '175.solutionLink': 'W:Creating_and_Editing_street_segments#Confirm_the_road_by_updating_details',
  685. '175.params': {'regexp': '/^[\\s\\.]*$/'},
  686. '190.severity': 'W',
  687. '190.enabled': true,
  688. '190.title': 'Lowercase city name',
  689. '190.problem': 'The city name starts with a lowercase letter',
  690. '190.solution': 'Use this form to rename the city',
  691. '190.solutionLink': 'F:t=50314#p450378',
  692. '190.params': {'regexp.title': '{string} regular expression to match a lowercase city name', 'regexp': '/^[a-zа-яёіїєґ]/'},
  693. '191.severity': 'W',
  694. '191.title': 'Incorrectly abbreviated city name',
  695. '191.problem': 'The city name has incorrect abbreviation',
  696. '191.solution': 'Use this form to rename the city',
  697. '191.solutionLink': 'F:t=50314#p450378',
  698. '191.params': {'regexp.title': '{string} regular expression to match incorrect abbreviations', 'regexp': '/\\./'},
  699. '192.enabled': true,
  700. '192.title': 'Unneeded spaces in city name',
  701. '192.problem': 'Leading/trailing/double space in the city name',
  702. '192.solution': 'Use this form to rename the city',
  703. '192.solutionLink': 'F:t=50314#p450378',
  704. '192.params': {'regexp': '/^\\s|\\s$|\\s\\s/'},
  705. '193.enabled': true,
  706. '193.title': 'No space before/after city abbreviation',
  707. '193.problem': 'No space before (\'1943r.\') or after (\'st.Jan\') an abbreviation in the city name',
  708. '193.solution': 'Use this form to rename the city',
  709. '193.solutionLink': 'F:t=50314#p450378',
  710. '193.params': {'regexp': '/([^\\s]\\.[^\\s0-9-][^\\s0-9\\.])|([0-9][^\\s0-9]+\\.[^0-9-])/'},
  711. '200.enabled': true,
  712. '200.title': 'Node A: Unconfirmed turn on minor road',
  713. '200.problem': 'The minor drivable segment has an unconfirmed (soft) turn at node A',
  714. '200.problemLink': 'W:Soft_and_hard_turns',
  715. '200.solution': 'Click the turn indicated with a purple question mark to confirm it. Note: you may need to make the segment \'Two-way\' in order to see those turns',
  716. '200.solutionLink': 'W:Soft_and_hard_turns#Best_practices',
  717. '201.enabled': true,
  718. '201.severity': 'W',
  719. '201.title': 'Node A: Unconfirmed turn on primary road',
  720. '201.problem': 'The primary segment has an unconfirmed (soft) turn at node A',
  721. '201.problemLink': 'W:Soft_and_hard_turns',
  722. '201.solution': 'Click the turn indicated with a purple question mark to confirm it. Note: you may need to make the segment \'Two-way\' in order to see those turns',
  723. '201.solutionLink': 'W:Soft_and_hard_turns#Best_practices',
  724. '202.enabled': true,
  725. '202.severity': 'W',
  726. '202.title': 'BETA: No public connection for public segment (slow)',
  727. '202.problem': 'The public segment is not connected to any other public segment',
  728. '202.solution': 'Verify if the segment is meant to be a public accessible segment, or it should be changed to a private segment',
  729. '210.enabled': true,
  730. '210.title': 'Segment has unverified speed limits from A to B',
  731. '210.problem': 'Segment has speed limit set from A to B that is unverified',
  732. '210.solution': 'Verify the speed limit on the segment and confirm or correct it',
  733. '210.solutionLink': 'W:Global/Creating_and_editing_road_segments#Speed_limit',
  734. '211.enabled': true,
  735. '211.title': 'Segment has unverified speed limits from B to A',
  736. '211.problem': 'Segment has speed limit set from B to A that is unverified',
  737. '211.solution': 'Verify the speed limit on the segment and confirm or correct it',
  738. '211.solutionLink': 'W:Global/Creating_and_editing_road_segments#Speed_limit',
  739. '212.enabled': true,
  740. '212.title': 'Segment has no speed limit set from A to B',
  741. '212.problem': 'Segment has no speed limit set from A to B',
  742. '212.solution': 'Verify the speed limit on the segment and set it',
  743. '212.solutionLink': 'W:Global/Creating_and_editing_road_segments#Speed_limit',
  744. '213.enabled': true,
  745. '213.title': 'Segment has no speed limit set from B to A',
  746. '213.problem': 'Segment has no speed limit set from B to A',
  747. '213.solution': 'Verify the speed limit on the segment and set it',
  748. '213.solutionLink': 'W:Global/Creating_and_editing_road_segments#Speed_limit',
  749. '214.enabled': true,
  750. '214.title': 'Segment has possibly wrong speed limit from A to B',
  751. '214.problem': 'Segment has a speed limit that seems to be incorrect',
  752. '214.solution': 'Verify the speed limit on the segment and correct it if needed',
  753. '214.params': {'regexp.title': '{string} regular expression to match valid speed limits', 'regexp': '/^.+[05]$/'},
  754. '215.enabled': true,
  755. '215.title': 'Segment has possibly wrong speed limit from B to A',
  756. '215.problem': 'Segment has a speed limit that seems to be incorrect',
  757. '215.params': {'regexp.title': '{string} regular expression to match valid speed limits', 'regexp': '/^.+[05]$/'},
  758. '215.solution': 'Verify the speed limit on the segment and correct it if needed'
  759. },
  760. 'US': {
  761. '.codeISO': 'US',
  762. '.country': 'United States',
  763. '27.enabled': true,
  764. '90.enabled': true,
  765. '106.enabled': true,
  766. '112.enabled': false,
  767. '150.enabled': true,
  768. '150.params': {'n': 2},
  769. '170.enabled': true,
  770. '170.params': {'regexp': '/^(?!(to) [^a-z])((S|N|W|E) )?[a-z]/'},
  771. '171.enabled': true,
  772. '171.solutionLink': 'W:Abbreviations_and_acronyms/USA#Standard_suffix_abbreviations',
  773. '171.params': {
  774. 'regexp':
  775. '/((?!(\\bPhila|\\bPenna|.(\\bWash|\\bCmdr|\\bProf|\\bPres)|..(\\bAdm|\\bSte|\\bCpl|\\bMaj|\\bSgt|\\bRe[vc]|\\bR\\.R|\\bGov|\\bGen|\\bHon|\\bCpl)|...(\\bSt|\\b[JSD]r|\\bLt|\\bFt)|...(#| )[NEWSR])).{5}\\.|((?!(hila|enna|(\\bWash|\\bCmdr|\\bProf|\\bPres)|.(\\bAdm|\\bSte|\\bCpl|\\bMaj|\\bSgt|\\bRe[vc]|\\bR\\.R|\\bGov|\\bGen|\\bHon|\\bCpl)|..(\\bSt|\\b[JSD]r|\\bLt|\\bFt)|..(#| )[NEWSR])).{4}|(\\bhila|\\benna))\\.|((?!(ila|nna|(ash|mdr|rof|res)|(\\bAdm|\\bSte|\\bCpl|\\bMaj|\\bSgt|\\bRe[vc]|\\bR\\.R|\\bGov|\\bGen|\\bHon|\\bCpl)|.(\\bSt|\\b[JSD]r|\\bLt|\\bFt)|.(#| )[NEWSR])).{3}|\\b(ila|nna|ash|mdr|rof|res))\\.|((?!(la|na|(sh|dr|of|es)|(dm|te|pl|aj|gt|e[vc]|\\.R|ov|en|on|pl)|(\\bSt|\\b[JSD]r|\\bLt|\\bFt)|(#| )[NEWSR])).{2}|\\b(la|na|sh|dr|of|es|dm|te|pl|aj|gt|e[vc]|\\.R|ov|en|on|pl))\\.|(#|^)[^NEWSR]?\\.)|(((?!\\b(D|O|L)).|#|^)\'(?![sl]\\b)|(#|^)\'s|(?!\\b(In|Na)t).{3}\'l|(#|^).{0,2}\'l)|(Dr|St)\\.(#|$)|,|;|\\\\|((?!\\.( |#|$|R))\\..|(?!\\.( .|#.|$|R\\.))\\..{2}|\\.R(#|$|\\.R))|[Ee]x(p|w)y\\b|\\b[Ee]x[dn]\\b|Tunl\\b|Long Is\\b|Brg\\b/',
  776. 'problemEN': 'The street name has incorrect abbreviation, or character',
  777. 'solutionEN': 'Check upper/lower case, a space before/after the abbreviation and the accordance with the abbreviation table. Remove any comma (,), backslash (\\), or semicolon (;)'
  778. }
  779. },
  780. 'UK': {'.codeISO': 'UK', '.country': 'United Kingdom', '1.enabled': false, '200.enabled': false},
  781. 'SK': {
  782. '.codeISO': 'SK',
  783. '.country': 'Slovakia',
  784. '27.enabled': true,
  785. '52.enabled': true,
  786. '73.enabled': true,
  787. '90.enabled': true,
  788. '150.enabled': true,
  789. '150.problemLink': 'F:t=64980&p=572847#p572847',
  790. '150.params': {'n': 2},
  791. '151.enabled': true,
  792. '151.problemLink': 'F:t=64980&p=572847#p572847',
  793. '151.params': {'n': 2},
  794. '152.enabled': true,
  795. '152.problemLink': 'F:t=64980&p=572847#p572847',
  796. '152.params': {'n': 2},
  797. '170.enabled': true,
  798. '170.params': {'regexp': '/^(?!(exit) [^a-z])[a-z]/'}
  799. },
  800. 'SG': {
  801. '.codeISO': 'SG',
  802. '.country': 'Singapore',
  803. '69.enabled': true,
  804. '73.enabled': true,
  805. '150.enabled': true,
  806. '150.params': {'n': 2},
  807. '151.enabled': true,
  808. '151.params': {'n': 2},
  809. '152.enabled': true,
  810. '152.params': {'n': 2}
  811. },
  812. 'RU': {'.codeISO': 'RU', '.country': 'Russia', '77.enabled': false, '190.enabled': false},
  813. 'PL': {
  814. '.codeISO': 'PL',
  815. '.country': 'Poland',
  816. '.author': 'Zniwek',
  817. '.updated': '2014-10-01',
  818. '.lng': 'PL',
  819. 'city.consider': 'rozważ tę nazwę miasta:',
  820. 'city.1': 'nazwa miasta jest za krótka',
  821. 'city.2': 'rozwiń skrót',
  822. 'city.3': 'uzupełnij skróconą nazwę',
  823. 'city.4': 'uzupełnij nazwę miasta',
  824. 'city.5': 'popraw wielkość liter',
  825. 'city.6': 'sprawdź kolejność słów',
  826. 'city.7': 'sprawdź skróty',
  827. 'city.8a': 'dodaj nazwę państwa',
  828. 'city.8r': 'usuń nazwę państwa',
  829. 'city.9': 'sprawdź nazwę państwa',
  830. 'city.10a': 'dodaj słowo',
  831. 'city.10r': 'usuń słowo',
  832. 'city.11': 'dodaj kod państwa',
  833. 'city.12': 'identyczne nazwy, ale inne ID miasta',
  834. 'city.13a': 'dodaj spację',
  835. 'city.13r': 'usuń spację',
  836. 'city.14': 'sprawdź numer',
  837. 'props.skipped.title': 'Segment nie jest sprawdzony',
  838. 'props.skipped.problem': 'Segment jest zmodyfikowany po 2014-05-01 I zablokowany dla Ciebie, więc Validator go nie sprawdził',
  839. 'err.regexp': 'Błąd podczas parsowania opcji dla sprawdzenia #${n}:',
  840. 'props.disabled': 'WME Validator jest wyłączony',
  841. 'props.limit.title': 'Zgłoszono zbyt wiele problemów',
  842. 'props.limit.problem': 'Zgłoszono zbyt wiele problemów, więc niektóre z nich mogą nie być pokazane',
  843. 'props.limit.solution': 'Odznacz segment i zatrzymaj skanowanie. Następnie kliknij czerwony \'✘\', przycisk (Wyczyść raport)',
  844. 'props.reports': 'raporty',
  845. 'props.noneditable': 'Nie możesz edytować tego segmentu',
  846. 'report.save': 'Zapisz ten raport',
  847. 'report.list.andUp': 'i wyższe',
  848. 'report.list.severity': 'Ważność:',
  849. 'report.list.reportOnly': 'tylko w raporcie',
  850. 'report.list.forEditors': 'Dla edytorów poziomu:',
  851. 'report.list.forCountries': 'Dla państw:',
  852. 'report.list.forStates': 'Dla stanów:',
  853. 'report.list.forCities': 'Dla miast:',
  854. 'report.list.params': 'Parametry do skonfigurowania w paczce językowej:',
  855. 'report.list.params.set': 'Aktualna konfiguracja dla ${country}:',
  856. 'report.list.enabled': '${n} sprawdzenia włączone dla',
  857. 'report.list.disabled': '${n} sprawdzenia wyłączone dla',
  858. 'report.list.total': 'There are ${n} sprawdzenia dostępne',
  859. 'report.list.title': 'Pełna lista Sprawdzeń dla',
  860. 'report.list.see': 'Zobacz',
  861. 'report.list.checks': 'Ustawienia->O->Dostępne sprawdzenia',
  862. 'report.list.fallback': 'Zasady Cofnięcia Lokalizacji:',
  863. 'report.and': 'i',
  864. 'report.segments': 'Liczba sprawdzonych segmentów:',
  865. 'report.customs': 'Własne zaznaczone sprawdzenia (zielone/niebieskie):',
  866. 'report.reported': 'Zaraportowane',
  867. 'report.errors': 'błędy',
  868. 'report.warnings': 'ostrzeżenia',
  869. 'report.notes': 'notki',
  870. 'report.contents': 'Zawartość:',
  871. 'report.summary': 'Podsumowanie',
  872. 'report.title': 'WME Validator - Raport',
  873. 'report.share': 'by się Podzielić',
  874. 'report.generated.by': 'wygenerowane przez',
  875. 'report.generated.on': 'na',
  876. 'report.source': 'Źródło raportu:',
  877. 'report.filter.duplicate': 'duplikowane segmenty',
  878. 'report.filter.streets': 'Ulice i Drogi Serwisowe',
  879. 'report.filter.other': 'Pozostałe przejezdne/nieprzejezdne',
  880. 'report.filter.noneditable': 'segmenty bez możliwości edycji',
  881. 'report.filter.notes': 'notki',
  882. 'report.filter.title': 'Filtruj:',
  883. 'report.filter.excluded': 'są wyłączone z tego raportu.',
  884. 'report.search.updated.by': 'zaktualizowane przez',
  885. 'report.search.updated.since': 'zaktualizowane od',
  886. 'report.search.city': 'z',
  887. 'report.search.reported': 'zaraportowane jako',
  888. 'report.search.title': 'Szukaj:',
  889. 'report.search.only': 'tylko segmenty',
  890. 'report.search.included': 'są zawarte w tym raporcie.',
  891. 'report.beta.warning': 'Ostrzeżenie WME Beta!',
  892. 'report.beta.text': 'Ten raport jest wygenerowany w wersji beta WME z permalinkami beta.',
  893. 'report.beta.share': 'Proszę, nie dziel się raportem z tymi permalinkami!',
  894. 'report.size.warning':
  895. '<b>Uwaga!</b><br>Ten raport ma ${n} znaków, więc <b>nie zmieści się</b> w jeden post na forum lub wiadomość prywatną.\n<br>Proszę dodaj <b>więcej filtrów</b>, żeby zmniejszyć długość raportu.',
  896. 'report.note.limit': '* Info: było zbyt wiele zgłoszonych problemów, więc niektóre z nich nie są policzone w podsumowaniu.',
  897. 'report.forum': 'Żeby zmotywować mnie do pracy nad skrpytem, zostaw komentarz w',
  898. 'report.thanks': 'Dziękuję za używanie WME Validator!',
  899. 'msg.limit.segments': 'Zbyt wiele segmentów.\n\nKliknij \'Pokaż raport\' żeby go przejrzeć, a potem\n',
  900. 'msg.limit.segments.continue': 'kliknij \'▶\' (Start) by kontynuować.',
  901. 'msg.limit.segments.clear': 'kliknij \'✘\' (Wyczyść) by wyczyścić raport.',
  902. 'msg.pan.text': 'Przesuwaj mapę, by ją sprawdzić',
  903. 'msg.zoomout.text': 'Oddal widok, by uruchomić WME Validator',
  904. 'msg.click.text': 'Kliknij \'▶\' (Start), by sprawdzić widoczny obszar mapy',
  905. 'msg.autopaused': 'autopauza',
  906. 'msg.autopaused.text': 'Spauzowano automatycznie! Kliknij \'▶\' (Start) by kontynuować.',
  907. 'msg.autopaused.tip': 'WME Validator wstrzymany automatycznie przy przesunięciu mapy lub skalowaniu okna',
  908. 'msg.finished.text': 'Kliknij <b>\'Pokaż raport\'</b> by przejrzeć błędy',
  909. 'msg.finished.tip': 'Kliknij przycisk \'✉\' (Podziel się), żeby umieścić raport na\nforum lub w prywatnej wiadomości',
  910. 'msg.noissues.text': 'Ukończono! Nie znaleziono błędów!',
  911. 'msg.noissues.tip': 'Spróbuj odznaczyć niektóre opcje filtrowania lub odpal WME Validator na innym obszarze!',
  912. 'msg.scanning.text': 'Skanowanie! Koniec za ~ ${n} min',
  913. 'msg.scanning.text.soon': 'Skanowanie! Koniec w ciągu minuty!',
  914. 'msg.scanning.tip': 'Kliknij przycisk \'Pauza\' by wstrzymać lub \'■\' (Stop) by zatrzymać',
  915. 'msg.starting.text': 'Start! Warstwy są wyłączone, by skanować szybciej!',
  916. 'msg.starting.tip': 'Użyj przycisku \'Pauza\' by wstrzymać lub przycisku \'■\' by zatrzymać',
  917. 'msg.paused.text': 'Wstrzymane! Kliknij przycisk \'▶\' (Start) by kontynuować.',
  918. 'msg.paused.tip': 'Żeby zobaczyć raport, kliknij przycisk \'Pokaż raport\' (jeżeli dostępne)',
  919. 'msg.continuing.text': 'Kontynuowanie!',
  920. 'msg.continuing.tip': 'WME Validator zacznie ponownie z miejsca, gdzie włączono pauzę',
  921. 'msg.settings.text': 'Kliknij <b>\'Wstecz\'</b>, by powrócić do głównego widoku',
  922. 'msg.settings.tip': 'Kliknij przycisk \'Resetuj domyślne\' aby zresetować wszystkie ustawienia za jednym zamachem!',
  923. 'msg.reset.text': 'Wszystkie opcje filtrowania i ustawienia zostały zresetowane do domyślnych',
  924. 'msg.reset.tip': 'Kliknij przycisk \'Wstecz\', by powrócić do głównego widoku',
  925. 'msg.textarea.pack':
  926. 'To jest skrypt Greasemonkey/Tampermonkey. Tekst poniżej możesz skopiować i wkleić do <b>nowego pliku .user.js</b><br>lub <b>wkleić bezpośrednio</b> do Greasemonkey/Tampermonkey',
  927. 'msg.textarea': 'Skopiuj proszę tekst poniżej, a następnie wklej do posta lub wiadomości prywatnej',
  928. 'noaccess.text':
  929. '<b>Sorki,</b><br>Nie możesz tutaj użyć WME Validatora.<br>Sprawdź proszę <a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488\'>wątek na forum</a><br> po więcej informacji.',
  930. 'noaccess.tip': 'Sprawdź proszę wątek na forum po więcej informacji!',
  931. 'tab.switch.tip.on': 'Kliknij by włączyć podświetlanie (Alt+V)',
  932. 'tab.switch.tip.off': 'Kliknij by wyłączyć podświetlanie (Alt+V)',
  933. 'tab.filter.text': 'filtruj',
  934. 'tab.filter.tip': 'Opcje filtrowania raportu i podświetlonych segmentów',
  935. 'tab.search.text': 'szukaj',
  936. 'tab.search.tip': 'Zaawansowane opcje filtrowania, żeby załączyć tylko specyficzne segmenty',
  937. 'tab.help.text': 'pomoc',
  938. 'tab.help.tip': 'Potrzebujesz pomocy?',
  939. 'filter.noneditables.text': 'Wyklucz <b>nieedytowalne</b> segmenty',
  940. 'filter.noneditables.tip': 'Nie raportuj zablokowanych segmentów lub\nsegmentów poza Twoim obszarem edycji',
  941. 'filter.duplicates.text': 'Wyklucz <b>duplikowane</b> segmenty',
  942. 'filter.duplicates.tip': 'Nie pokazuj tego samego segmentu w różnych\nczęściach raportu\n* Info: ta opcja NIE WPŁYWA na podświetlanie',
  943. 'filter.streets.text': 'Wyklucz <b>Ulice i Drogi Serwisowe</b>',
  944. 'filter.streets.tip': 'Nie raportuj Ulic i Dróg Serwisowych',
  945. 'filter.other.text': 'Wyklucz <b>Pozostałe przejezdne i nieprzejezdne</b>',
  946. 'filter.other.tip': 'Nie raportuj Gruntowych, Wewnętrznych, Prywatnych Dróg\ni nieprzejezdnych segmentów',
  947. 'filter.notes.text': 'Wyklucz <b>notki</b>',
  948. 'filter.notes.tip': 'Raportuj tylko ostrzeżenia i błędy',
  949. 'search.youredits.text': 'Załącz <b>tylko Twoje edycje</b>',
  950. 'search.youredits.tip': 'Załącz tylko segmenty edytowane przez Ciebie',
  951. 'search.updatedby.text': '<b>Zaktualizowane przez*:</b>',
  952. 'search.updatedby.tip':
  953. 'Załącz tylko segmenty edytowane przez ustalonego edytora\n* Info: ta opcja jest dostępna tylko dla CM\nTo pole wspiera:\n - lists: me, otherEditor\n - wildcards: world*\n - negation: !me, *\n* Info: możesz użyć \'me\' dla siebie samego',
  954. 'search.updatedby.example': 'Przykład: me',
  955. 'search.updatedsince.text': '<b>Zaktualizowane od:</b>',
  956. 'search.updatedsince.tip': 'Załącz tylko segmenty edytowane od ustalonej daty\nformat daty Firefox: RRRR-MM-DD',
  957. 'search.updatedsince.example': 'RRRR-MM-DD',
  958. 'search.city.text': '<b>Nazwa miasta:</b>',
  959. 'search.city.tip': 'Załącz tylko segmenty z ustaloną nazwą miasta\nTo pole wspiera:\n - lists: Paris, Meudon\n - wildcards: Greater * Area\n - negation: !Paris, *',
  960. 'search.city.example': 'Przykład: !Paris, *',
  961. 'search.checks.text': '<b>Zaraportowane jako:</b>',
  962. 'search.checks.tip':
  963. 'Załącz tylko segmenty zgłoszone jako ustalone\nTo pole zawiera:\n - severities: errors\n - check names: New road\n - check IDs: 200\nTo pole wspiera:\n - lists: 36, 37\n - wildcards: *roundabout*\n - negation: !unconfirmed*, *',
  964. 'search.checks.example': 'Przykład: reverse*',
  965. 'help.text':
  966. '<b>Tematy Pomocy:</b><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=666476#p666476">F.A.Q.</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488">Zadaj swoje pytanie na forum</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=661300#p661185">Jak dopasować Validator pod swoje państwo</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=663286#p663286">Więcej o "Prawdopodobnie błędna nazwa miasta"</a>',
  967. 'help.tip': 'Otwórz w nowej karcie przeglądarki',
  968. 'button.scan.tip': 'Zacznij skanowanie aktualnego obszaru\n* Info: to może zająć kilka minut',
  969. 'button.scan.tip.NA': 'Oddal widok by zacząć skanować aktualny obszar',
  970. 'button.pause.tip': 'Wstrzymaj skanowanie',
  971. 'button.continue.tip': 'Kontynuuj skanowanie obszaru mapy',
  972. 'button.stop.tip': 'Zatrzymaj skanowanie i powróć do pozycji startowej',
  973. 'button.clear.tip': 'Wyczyść raport i cache segmentu',
  974. 'button.clear.tip.red': 'Zbyt wiele zgłoszonych segmentów:\n 1. Kliknij \'Pokaż raport\' by go wygenerować.\n 2. Kliknij ten przycisk by wyczyścić raport i zacząć od nowa.',
  975. 'button.report.text': 'Pokaż raport',
  976. 'button.report.tip': 'Zatwierdź filtr i wygeneruj raport HTML w nowej karcie',
  977. 'button.BBreport.tip': 'Podziel się raportem na forum Waze lub w prywatnej wiadomości',
  978. 'button.settings.tip': 'Konfiguruj ustawienia',
  979. 'tab.custom.text': 'własne',
  980. 'tab.custom.tip': 'Ustawienia sprawdzeń zdefiniowanych przez użytkownika',
  981. 'tab.settings.text': 'Ustawienia',
  982. 'tab.scanner.text': 'skaner',
  983. 'tab.scanner.tip': 'Ustawienia skanera mapy',
  984. 'tab.about.text': 'o</span>',
  985. 'tab.about.tip': 'Info o WME Validator',
  986. 'scanner.sounds.text': 'Włącz dźwięki',
  987. 'scanner.sounds.tip': 'Pikanie podczas skanowania',
  988. 'scanner.sounds.NA': 'Twoja przeglądarka nie wspiera AudioContext',
  989. 'scanner.highlight.text': 'Podświetl błędy na mapie',
  990. 'scanner.highlight.tip': 'Podświetl zaraportowane błędy na mapie',
  991. 'scanner.slow.text': 'Włącz sprawdzenia "slow"',
  992. 'scanner.slow.tip': 'Włącza głęboką analizę mapy\n* Info: ta opcja może spowolnić proces skanowania',
  993. 'scanner.ext.text': 'Raportuj zewnętrzne podświetlenia',
  994. 'scanner.ext.tip': 'Raportuj segmenty podświetlone przez WME Toolbox lub WME Color Highlights',
  995. 'custom.template.text': '<a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=749456#p749456\'>Własny szablon</a>',
  996. 'custom.template.tip':
  997. 'Rozszerzalny szablon zdefiniowanych sprawdzeń użytkownika.\n\nMożesz użyć następujących zmiennych:\nAdres:\n ${country}, ${state}, ${city}, ${street},\n ${altCity[index or delimeter]}, ${altStreet[index or delimeter]}\nWłasności segmentu:\n ${type}, ${typeRank}, ${toll}, ${direction}, ${elevation}, ${lock},\n ${length}, ${ID}\nPomocniki:\n ${drivable}, ${roundabout}, ${hasHNs},\n ${Uturn}, ${deadEnd}, ${softTurns},\n ${deadEndA}, ${partialA},\n ${deadEndB}, ${partialB}\nŁączność:\n ${segmentsA}, ${inA}, ${outA}, ${UturnA},\n ${segmentsB}, ${inB}, ${outB}, ${UturnB}',
  998. 'custom.template.example': 'Przykład ${street}',
  999. 'custom.regexp.text': 'Własne <a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=749456#p749456\'>RegExp</a>',
  1000. 'custom.regexp.tip':
  1001. 'Wyrażenie regularne zdefiniowane przez użytkownika, by pasowało do szablonu.\n\nNiewrażliwe na wielkość liter: /regexp/i\nNegacja (nie pasujące): !/regexp/\nZapisz informacje debugowania w konsoli: D/regexp/',
  1002. 'custom.regexp.example': 'Przykład: !/.+/',
  1003. 'about.tip': 'Otwórz link w nowej karcie',
  1004. 'button.reset.text': 'Resetuj domyślne',
  1005. 'button.reset.tip': 'Przywróć opcje filtrowania i ustawienia na domyślne',
  1006. 'button.list.text': 'Dostępne sprawdzenia...',
  1007. 'button.list.tip': 'Wyświetl listę sprawdzeń dostępnych w WME Validatorze',
  1008. 'button.wizard.tip': 'Stwórz paczkę językową',
  1009. 'button.back.text': 'Powrót',
  1010. 'button.back.tip': 'Zamknij ustawienia i wróć do głównego widoku',
  1011. '1.title': 'WME Toolbox: Rondo może powodować problemy',
  1012. '1.problem': 'ID węzłów ronda nie są w kolejności',
  1013. '1.solution': 'Stwórz rondo na nowo',
  1014. '2.title': 'WME Toolbox: Pojedynczy segment',
  1015. '2.problem': 'Segment ma niepotrzebne węzły',
  1016. '2.solution': 'Uprość geometrię segmentu przez najechanie myszką i naciśnięcie przycisku "d"',
  1017. '3.title': 'WME Toolbox: Blokada na 2 poziom',
  1018. '3.problem': 'Segment jest podświetlony przez WME Toolbox. To nie jest problem',
  1019. '4.title': 'WME Toolbox: Blokada na 3 poziom',
  1020. '4.problem': 'Segment jest podświetlony przez WME Toolbox. To nie jest problem',
  1021. '5.title': 'WME Toolbox: Blokada na 4 poziom',
  1022. '5.problem': 'Segment jest podświetlony przez WME Toolbox. To nie jest problem',
  1023. '6.title': 'WME Toolbox: Blokada na 5 poziom',
  1024. '6.problem': 'Segment jest podświetlony przez WME Toolbox. To nie jest problem',
  1025. '7.title': 'WME Toolbox: Blokada na 6 poziom',
  1026. '7.problem': 'Segment jest podświetlony przez WME Toolbox. To nie jest problem',
  1027. '8.title': 'WME Toolbox: Numery domów',
  1028. '8.problem': 'Segment jest podświetlony przez WME Toolbox. To nie jest problem',
  1029. '9.title': 'WME Toolbox: Segment z ograniczeniami czasowymi',
  1030. '9.problem': 'Segment jest podświetlony przez WME Toolbox. To nie jest problem',
  1031. '13.title': 'WME Color Highlights: Blokada edytora',
  1032. '13.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1033. '14.title': 'WME Color Highlights: Płatna / Jednokierunkowa',
  1034. '14.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1035. '15.title': 'WME Color Highlights: Ostatnio edytowane',
  1036. '15.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1037. '16.title': 'WME Color Highlights: Ranga drogi',
  1038. '16.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1039. '17.title': 'WME Color Highlights: Brak miasta',
  1040. '17.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1041. '18.title': 'WME Color Highlights: Ograniczenie czasowe / Podświetlony typ drogi',
  1042. '18.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1043. '19.title': 'WME Color Highlights: Brak nazwy',
  1044. '19.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1045. '20.title': 'WME Color Highlights: Filtruj po mieście',
  1046. '20.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1047. '21.title': 'WME Color Highlights: Filtruj po mieście (alt. miasto)',
  1048. '21.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1049. '22.title': 'WME Color Highlights: Filtruj po edytorzer',
  1050. '22.problem': 'Segment jest podświetlony przez WME Color Highlights. To nie jest problem',
  1051. '23.solutionLink': 'W:Drogi',
  1052. '23.title': 'Niepotwierdzona droga',
  1053. '23.problem': 'Każdy segment musi mieć przynajmniej Państwo i Stan',
  1054. '23.solution': 'Potwierdź drogę, aktualizując jej szczegóły',
  1055. '24.title': 'Prawdopodobnie błędna nazwa miasta (tylko w raporcie)',
  1056. '24.problem': 'Segment może zawierać błędną nazwę miasta',
  1057. '24.solution': 'Rozważ zaproponowaną nazwę i użyj tego formularza do zmiany nazwy miasta',
  1058. '25.title': 'Nieznana kierunkowość przejezdnej drogi',
  1059. '25.problem': '\'Nieznana\' kierunkowość drogi, nie zapobiegnie wyznaczaniu tędy trasy',
  1060. '25.solution': 'Ustaw kierunkowość drogi',
  1061. '27.enabled': true,
  1062. '27.problemLink': 'W:Drogi#Tory.2C_szyny',
  1063. '27.title': 'Nazwa miasta na Torach',
  1064. '27.problem': 'Nazwa miasta na Torach, szynach',
  1065. '27.solution': 'Zaznacz pole \'brak\' przy nazwie miasta',
  1066. '28.problemLink': 'W:Drogi#Wjazd.2Fzjazd_bezkolizyjny',
  1067. '28.title': 'Nazwa ulicy na dwukierunkowym zjeździe',
  1068. '28.problem': 'Jeśli zjazd jest nienazwany, wyświetli się nazwa docelowej drogi',
  1069. '28.solution': 'Zmień nazwę ulicy na \'brak\'',
  1070. '29.problemLink': 'W:Drogi#Rondo',
  1071. '29.title': 'Nazwa ulicy na rondzie',
  1072. '29.problem': 'W Waze nie nazywamy segmentów ronda',
  1073. '29.solution': 'Zmień nazwę ulicy na \'brak\', a następnie dodaj punkt orientacyjny \'Węzeł drogowy\', żeby nazwać rondo',
  1074. '34.title': 'Pusta nazwa alternatywna',
  1075. '34.problem': 'Alternatywna nazwa ulicy jest pusta',
  1076. '34.solution': 'Usuń pustą nazwę alternatywną ulicy',
  1077. '35.title': 'Niezakończona droga',
  1078. '35.problem': 'Waze nie poprowadzi z niezakończonego segmentu',
  1079. '35.solution': 'Przesuń trochę segment, żeby pojawił się kończący węzeł',
  1080. '36.title': 'Węzeł A: Niepotrzebny (slow)',
  1081. '36.problem': 'Segmenty spotykające się w węźle A są identyczne',
  1082. '36.solution': 'Wybierz węzeł A i naciśnij przycisk Delete, by połączyć segmenty',
  1083. '37.title': 'Węzeł B: Niepotrzebny (slow)',
  1084. '37.problem': 'Segmenty spotykające się w węźle B są identyczne',
  1085. '37.solution': 'Wybierz węzeł B i naciśnij przycisk Delete, by połączyć segmenty',
  1086. '38.title': 'Upłynął czas ograniczenia segmentu (slow)',
  1087. '38.problem': 'Segment zawiera wygasłe ograniczenie',
  1088. '38.solution': 'Kliknij \'Edytuj ograniczenia\' i usuń wygasłe ograniczenie',
  1089. '39.title': 'Wygasłe ograniczenie skrętu (slow)',
  1090. '39.problem': 'Segment ma skręt z wygasłym ograniczeniem',
  1091. '39.solution': 'Kliknij ikonę zegara obok żółtej strzałki i usuń wygasłe ograniczenie',
  1092. '41.title': 'Węzeł A: Odwrócona łączność przejezdnej drogi',
  1093. '41.problem': 'Jeden ze skrętów prowadzi naprzeciw kierunkowi segmentu, w węźle A',
  1094. '41.solution': 'Ustaw segment \'Dwukierunkowy\', zablokuj wszystkie skręty w węźle A i ponownie ustaw \'Jednokierunkowa (A→B)\'',
  1095. '42.title': 'Węzeł B: Odwrócona łączność przejezdnej drogi',
  1096. '42.problem': 'Jeden ze skrętów prowadzi naprzeciw kierunkowi segmentu, w węźle B',
  1097. '42.solution': 'Ustaw segment \'Dwukierunkowy\', zablokuj wszystkie skręty w węźle A i ponownie ustaw \'Jednokierunkowa (B→A)\'',
  1098. '43.title': 'Połączenie ze sobą',
  1099. '43.problem': 'Segment łączy się sam ze sobą',
  1100. '43.solution': 'Podziel segment na TRZY części',
  1101. '46.title': 'SLOW: Brak wjazdu na węźle A',
  1102. '46.problem': 'Przejezdny segment nie ma wjazdu na węźle A',
  1103. '46.solution': 'Rozważ możliwość wjazdu na węźle A',
  1104. '47.title': 'SLOW: Brak wjazdu na węźle B',
  1105. '47.problem': 'Przejezdny segment nie ma wjazdu na węźle A',
  1106. '47.solution': 'Rozważ możliwość wjazdu na węźle A',
  1107. '48.solutionLink': 'W:Ronda#Poprawianie_rond_naniesionych_r.C4.99cznie',
  1108. '48.title': 'Dwukierunkowy segment ronda',
  1109. '48.problem': 'Segment ronda jest dwukierunkowy',
  1110. '48.solution': 'Stwórz rondo od nowa',
  1111. '50.solutionLink': 'W:Ronda#Poprawianie_rond_naniesionych_r.C4.99cznie',
  1112. '52.enabled': true,
  1113. '52.solutionLink': 'W:Tabela_skrótów',
  1114. '52.title': 'Za długa nazwa ulicy',
  1115. '52.problem': 'Nazwa przejezdnego segmentu jest dłuższa niż ${n} liter i nie jest Rampą',
  1116. '52.solution': 'Consider an abbreviation for the street name according to this table',
  1117. '52.params': {'n': 35},
  1118. '57.enabled': true,
  1119. '57.problemLink': 'W:Drogi#Wjazd.2Fzjazd_bezkolizyjny',
  1120. '57.title': 'Nazwa miasta na nazwanym zjeździe',
  1121. '57.problem': 'Nazwa miasta na nazwanym zjeździe może wpłynąć na wyniki wyszukiwania',
  1122. '57.solution': 'Zmień nazwę miasta na \'brak\'',
  1123. '59.enabled': true,
  1124. '59.problemLink': 'W:Drogi#Autostrada_.2F_Droga_ekspresowa',
  1125. '59.title': 'Nazwa miasta na Autostradzie',
  1126. '59.problem': 'Nazwa miasta na Autostradzie, może spowodować że obszar miasta się rozciągnie',
  1127. '59.solution': 'W danych adresowych ustaw \'Brak\' obok nazwy miasta i kliknij \'Zatwierdź\'',
  1128. '73.enabled': true,
  1129. '73.title': 'Za krótka nazwa ulicy',
  1130. '73.problem': 'Nazwa ulicy jest krótsza niż ${n} liter i nie jest autostradą',
  1131. '73.solution': 'Popraw nazwę ulicy',
  1132. '74.solutionLink': 'W:Ronda#Poprawianie_rond_naniesionych_r.C4.99cznie',
  1133. '78.title': 'SLOW: Takie same punkty końcowe segmentów',
  1134. '78.problem': 'Dwa przejezdne segmenty mają takie same punkty końcowe',
  1135. '78.solution': 'Podziel segment. Możesz także usunąć segment, jeśli są identyczne',
  1136. '79.problemLink': 'W:Skrzyżowania#Najlepsze_praktyki_dla_r.C3.B3.C5.BCnych_typ.C3.B3w_skrzy.C5.BCowa.C5.84',
  1137. '87.problemLink': 'W:Drogi#Rondo',
  1138. '87.solutionLink': 'W:Ronda#Poprawianie_rond_naniesionych_r.C4.99cznie',
  1139. '87.title': 'Więcej niż jeden segment wychodzący z węzła A na rondzie',
  1140. '87.problem': 'Węzeł A na rondzie ma podłączony więcej niż jeden segment wychodzący',
  1141. '87.solution': 'Utwórz rondo ponownie',
  1142. '99.title': 'Nawrót na wjeździe na rondo (slow)',
  1143. '99.problem': 'Segment wjazdu na rondo ma włączoną możliwość zawracania',
  1144. '99.solution': 'Wyłącz nawrót',
  1145. '101.params': {'regexp': '/(^|\\b)remont(\\b|$)/i'},
  1146. '101.title': 'Droga zamknięta (dostępne tylko w raporcie)',
  1147. '101.problem': 'Segment jest oznaczony jako zamknięty',
  1148. '101.solution': 'Gdy remont się skończy, przywróć połączenia segmentu i usuń przyrostek',
  1149. '102.title': 'SLOW: Brak wyjazdu na węźle A',
  1150. '102.problem': 'Przejezdny segment nie ma wyjazdu na węźle A',
  1151. '102.solution': 'Rozważ możliwość wyjazdu na węźle A',
  1152. '103.title': 'SLOW: Brak wyjazdu na węźle B',
  1153. '103.problem': 'Przejezdny segment nie ma wyjazdu na węźle B',
  1154. '103.solution': 'Rozważ możliwość wyjazdu na węźle B',
  1155. '104.title': 'Tory użyte dla komentarzy',
  1156. '104.problem': 'Tory są prawdopodobnie użyte do komentarzy na mapie',
  1157. '104.solution': 'Usuń komentarze, ponieważ Tory będą wyświetlane w aplikacji',
  1158. '105.enabled': true,
  1159. '105.title': 'Ścieżka zamiast Torów',
  1160. '105.problem': 'Ścieżka o wysokości -5 jest zapewne użyta zamiast Torów',
  1161. '105.solution': 'Zmień typ drogi na Tory, by wyświetliły się w aplikacji',
  1162. '107.title': 'SLOW: Brak połączenia w węźle A',
  1163. '107.problem': 'Węzeł A segmentu jest w odległości od innego, również przejezdnego segmentu, ale nie są połączone skrzyżowaniem',
  1164. '107.solution': 'Przeciągnij węzeł A na najbliższy segment, by się dotykały, lub odsuń go dalej',
  1165. '108.title': 'SLOW: Brak połączenia w węźle B',
  1166. '108.problem': 'Węzeł B segmentu jest w odległości od innego, również przejezdnego segmentu, ale nie są połączone skrzyżowaniem',
  1167. '108.solution': 'Przeciągnij węzeł B na najbliższy segment, by się dotykały, lub odsuń go dalej',
  1168. '109.title': 'Za krótki segment',
  1169. '109.problem': 'Przejezdny, niekońcowy segment jest krótszy niż ${n}m, więc ciężko zobaczyć go na mapie i może powodować problemy z routingiem',
  1170. '109.solution': 'Zwiększ długość, usuń segment lub połącz go z jednym z przyległych segmentów',
  1171. '112.title': 'Za długa nazwa Rampy',
  1172. '112.problem': 'Nazwa Rampy jest dłuższa niż ${n} liter',
  1173. '112.solution': 'Skróć nazwę Rampy',
  1174. '114.title': 'Węzeł A: Nieprzejezdna połączona z przejezdną (slow)',
  1175. '114.problem': 'Nieprzejezdny segment tworzy skrzyżowanie z przejezdnym na węźle A',
  1176. '114.solution': 'Odłącz węzeł A od wszystkich przejezdnych segmentów',
  1177. '115.title': 'Węzeł B: Nieprzejezdna połączona z przejezdną (slow)',
  1178. '115.problem': 'Nieprzejezdny segment tworzy skrzyżowanie z przejezdnym na węźle B',
  1179. '115.solution': 'Odłącz węzeł B od wszystkich przejezdnych segmentów',
  1180. '116.title': 'Poza skalą poziomu/wysokości',
  1181. '116.problem': 'Poziom/wysokość segmentu są poza skalą',
  1182. '116.solution': 'Popraw poziom/wysokość',
  1183. '117.title': 'Przestarzały znacznik CONST ZN',
  1184. '117.problem': 'Segmeny jest oznaczony przestarzałym przyrostkiem CONST ZN',
  1185. '117.solution': 'Zmień CONST ZN na (zamknięte)',
  1186. '118.title': 'Węzeł A: Nakładające się segmenty (slow)',
  1187. '118.problem': 'Segment pokrywa się z sąsiadującym, w węźle A',
  1188. '118.solution': 'Rozszerz segmenty do 2°, usuń niepotrzebny punkt geometrii lub cały podwójny segment w węźle A',
  1189. '119.title': 'Węzeł B: Nakładające się segmenty (slow)',
  1190. '119.problem': 'Segment pokrywa się z sąsiadującym, w węźle B',
  1191. '119.solution': 'Rozszerz segmenty do 2°, usuń niepotrzebny punkt geometrii lub cały podwójny segment w węźle B',
  1192. '120.title': 'Węzeł A: Za ostry skręt (slow)',
  1193. '120.problem': 'Przejezdny segment ma bardzo ostry skręt na węźle A',
  1194. '120.solution': 'Wyłącz ostry skręt na węźle A lub rozszerz segmenty do 30°',
  1195. '121.title': 'Węzeł B: Za ostry skręt (slow)',
  1196. '121.problem': 'Przejezdny segment ma bardzo ostry skręt na węźle B',
  1197. '121.solution': 'Wyłącz ostry skręt na węźle B lub rozszerz segmenty do 30°',
  1198. '128.title': 'Własne sprawdzenie (zielone)',
  1199. '128.problem': 'Niektóre właściwości segmentu są przeciwko ustawionemu przez użytkownika wyrażeniu regularnemu (Ustawienia→Własne)',
  1200. '128.solution': 'Rozwiąż ten problem',
  1201. '129.title': 'Własne sprawdzenie (niebieskie)',
  1202. '129.problem': 'Niektóre właściwości segmentu są przeciwko ustawionemu przez użytkownika wyrażeniu regularnemu (Ustawienia→Własne)',
  1203. '129.solution': 'Rozwiąż ten problem',
  1204. '161.enabled': true,
  1205. '161.params': {'titleEN': 'DKnum in street name', 'problemEN': 'The street name contains DKnum', 'solutionEN': 'Remove the DK prefix from the street name', 'regexp': '/DK\\-?[0-9]+/i'},
  1206. '161.problemLink': 'W:Drogi#Droga_krajowa',
  1207. '161.title': 'Numer DK w nazwie ulicy',
  1208. '161.problem': 'Nazwa ulicy zawiera numer DK',
  1209. '161.solution': 'Usuń przedrostek z nazwy ulicy',
  1210. '162.enabled': true,
  1211. '162.params': {'titleEN': 'DWnum in street name', 'problemEN': 'The street name contains DWnum', 'solutionEN': 'Remove the DW prefix from the street name', 'regexp': '/DW\\-?[0-9]+/i'},
  1212. '162.problemLink': 'W:Drogi#Droga_wojew.C3.B3dzka',
  1213. '162.title': 'Numer DW w nazwie ulicy',
  1214. '162.problem': 'Nazwa ulicy zawiera numer DW',
  1215. '162.solution': 'Usuń przedrostek z nazwy ulicy',
  1216. '163.enabled': true,
  1217. '163.params':
  1218. {'titleEN': '\'Węzel\' in Ramp name', 'problemEN': 'The Ramp name contains word \'węzel\'', 'solutionEN': 'Rename the Ramp in accordance with the guidelines', 'regexp': '/węze[lł]/i'},
  1219. '163.solutionLink': 'W:Drogi#Wjazd.2Fzjazd_bezkolizyjny',
  1220. '163.title': '\'Węzel\' w nazwie zjazdu',
  1221. '163.problem': 'Zjazd zawiera w nazwie słowo \'węzel\'',
  1222. '163.solution': 'Zmień nazwę zjazdu zgodnie z wytycznymi',
  1223. '167.enabled': true,
  1224. '167.params': {
  1225. 'titleEN': 'Incorrect Railroad name',
  1226. 'problemEN': 'The Railroad name is not \'PKP\', \'SKM\' or \'MPK\'',
  1227. 'solutionEN': 'In the address properties set the street name to \'PKP\', \'SKM\' or \'MPK\', check the \'None\' box next to the city name and then click \'Apply\'',
  1228. 'regexp': '!/^(PKP|MPK|SKM|Tramwaje Śląskie)$/'
  1229. },
  1230. '167.solutionLink': 'W:Drogi#Tory.2C_szyny',
  1231. '167.title': 'Nieprawidłowa nazwa Torów',
  1232. '167.problem': 'Segment Torów ma nieprawidłową nazwę',
  1233. '167.solution': 'Zmień nazwę segmentu zgodnie z wytycznymi',
  1234. '169.enabled': true,
  1235. '169.params': {
  1236. 'titleEN': '\'Rondo\' or \'ulica\' in street name',
  1237. 'problemEN': 'The street name contains word \'rondo\' or \'ulica\'',
  1238. 'solutionEN': 'In the address properties check the \'None\' box next to the street name, click \'Apply\' and then add \'Junction\' landmark to name the roundabout or remove word \'ulica\'',
  1239. 'regexp': '/rondo |ulica/i'
  1240. },
  1241. '169.solutionLink': 'W:Drogi#Rondo',
  1242. '169.title': '\'Rondo\' lub \'ulica\' w nazwie ulicy',
  1243. '169.problem': 'Nazwa ulicy zawiera słowo \'rondo\' lub \'ulica\'',
  1244. '169.solution': 'Zmień nazwę ulicy na \'Brak\', a następnie dodaj punkt orientacyjny \'Węzeł drogowy\', żeby nazwać rondo lub usuń słowo \'ulica\' z nazwy ulicy',
  1245. '171.enabled': true,
  1246. '171.params': {'regexp': '/(^| )(?!(adm|abp|bp|bł|dr|gen|bryg|pil|dyw|hetm|hr|im|inż|kard|ks|kmr|kadm|mjr|marsz|o|os|pl|ppor|ppłk|por|pn|pd|prof|płk|rtm|św|śwj|śś|wsch|zach)\\. |r\\.)[^ ]+\\./'},
  1247. '171.solutionLink': 'W:Tabela_skrótów',
  1248. '171.title': 'Nieprawidłowy skrót w nazwie ulicy',
  1249. '171.problem': 'Nazwa ulicy zawiera nieprawidłowy skrót',
  1250. '171.solution': 'Sprawdź wielkie/małe litery, przerwę przed/po skrócie i zgodność z tą tabelą',
  1251. '172.title': 'Niepotrzebne spacje w nazwie ulicy',
  1252. '172.problem': 'Spacja na początku, końcu lub podwójna w nazwie ulicy',
  1253. '172.solution': 'Usuń niepotrzebne spacje z nazwy ulicy',
  1254. '173.title': 'Nazwa ulicy bez spacji przed lub po skrócie',
  1255. '173.problem': 'Brak spacji przed (\'1943r.\') lub po (\'st.Jan\') skrócie w nazwie ulicy',
  1256. '173.solution': 'Dodaj spację przed/po skrócie',
  1257. '175.title': 'Nazwa ulicy złożona z samych spacji',
  1258. '175.problem': 'Nazwa ulicy zawiera tylko spacje',
  1259. '175.solution': 'Zmień nazwę ulicy na \'Brak\' lub nazwij odpowiednio ulicę',
  1260. '190.title': 'Nazwa miasta małą literą',
  1261. '190.problem': 'Nazwa miasta zaczyna się od małej litery',
  1262. '190.solution': 'Użyj tego formularza, by zmienić nazwę miasta',
  1263. '192.title': 'Niepotrzebne spacje w nazwie miasta',
  1264. '192.problem': 'Spacja na początku, końcu lub podwójna w nazwie miasta',
  1265. '192.solution': 'Użyj tego formularza, by zmienić nazwę miasta',
  1266. '193.title': 'Brak spacji przed/po skrócie miasta',
  1267. '193.problem': 'Brak spacji przed (\'1943r.\') lub po (\'st.Jan\') skrócie w nazwie miasta',
  1268. '193.solution': 'Użyj tej formy, by zmienić nazwę miasta',
  1269. '200.problemLink': 'W:Skrzyżowania#Ograniczenia_skr.C4.99t.C3.B3w',
  1270. '200.title': 'Węzeł A: Wstępnie dopuszczony lub zakazany skręt na przejezdnej drodze',
  1271. '200.problem': 'Segment ma niepotwierdzony skręt na węźle A',
  1272. '200.solution': 'Kliknij na strzałkę z purpurowym znakiem zapytania, by potwierdzić skręt. Zauważ: być może będziesz musiał zmienić segment na dwukierunkowy by dostrzec te',
  1273. '201.title': 'Węzeł A: Niepotwierdzony skręt na głównej drodze',
  1274. '201.problem': 'Segment drogi głównej ma niepotwierdzony skręt na węźle A',
  1275. '201.solution': 'Kliknij skręt z fioletowym znakiem zapytania by go zatwierdzić. Info: możliwe, że będziesz musiał ustawić \'Dwukierunkowy\' żeby zobaczyć te skręty'
  1276. },
  1277. 'NZ': {'.codeISO': 'NZ', '.country': 'New Zealand'},
  1278. 'NL': {
  1279. '.codeISO': 'NL',
  1280. '.country': 'Netherlands',
  1281. '.author': 'davidakachaos',
  1282. '.updated': '2018-08-01',
  1283. '.fallbackCode': 'BE',
  1284. '.lng': 'NL',
  1285. 'city.consider.en': 'consider this city name:',
  1286. 'city.consider': 'overweeg deze plaatsnaam:',
  1287. 'city.1.en': 'city name is too short',
  1288. 'city.1': 'plaatsnaam te kort',
  1289. 'city.2.en': 'expand the abbreviation',
  1290. 'city.2': 'De afkorting uitbreiden',
  1291. 'city.3.en': 'complete short name',
  1292. 'city.3': 'maak de korte naam compleet',
  1293. 'city.4.en': 'complete city name',
  1294. 'city.4': 'plaatsnaam aanvullen',
  1295. 'city.5.en': 'correct letter case',
  1296. 'city.5': 'juist hoofdlettergebruik',
  1297. 'city.6.en': 'check word order',
  1298. 'city.6': 'controleer woord volgorde',
  1299. 'city.7.en': 'check abbreviations',
  1300. 'city.7': 'controleer afkortingen',
  1301. 'city.8a.en': 'add county name',
  1302. 'city.8a': 'land naam toevoegen',
  1303. 'city.8r.en': 'remove county name',
  1304. 'city.8r': 'land naam verwijderen',
  1305. 'city.9.en': 'check county name',
  1306. 'city.9': 'controleer land naam',
  1307. 'city.10a.en': 'add a word',
  1308. 'city.10a': 'woord toevoegen',
  1309. 'city.10r.en': 'remove a word',
  1310. 'city.10r': 'woord verwijderen',
  1311. 'city.11.en': 'add county code',
  1312. 'city.11': 'landcode toevoegen',
  1313. 'city.12.en': 'identical names, but different city IDs',
  1314. 'city.12': 'identieke namen, maar verschillende plaats IDs',
  1315. 'city.13a.en': 'add a space',
  1316. 'city.13a': 'spatie invoegen',
  1317. 'city.13r.en': 'remove a space',
  1318. 'city.13r': 'spatie verwijderen',
  1319. 'city.14.en': 'check the number',
  1320. 'city.14': 'controleer het nummer',
  1321. 'props.skipped.title.en': 'The segment is not checked',
  1322. 'props.skipped.title': 'Dit segment is niet gecontroleerd',
  1323. 'props.skipped.problem.en': 'The segment is modified after 2014-05-01 AND locked for you, so Validator did not check it',
  1324. 'props.skipped.problem': 'Dit segment is na 2014-05-01 aangepast EN voor jou gelockt, Validator heeft dit niet gecontroleerd',
  1325. 'err.regexp.en': 'Error parsing option for check #${n}:',
  1326. 'err.regexp': 'Fout bij het verwerken van de opties voor de controle #${n}:',
  1327. 'props.disabled.en': 'WME Validator is disabled',
  1328. 'props.disabled': 'WME Validator is uitgeschakeld',
  1329. 'props.limit.title.en': 'Too many issues reported',
  1330. 'props.limit.title': 'Te veel problemen gevonden',
  1331. 'props.limit.problem.en': 'There are too many issues reported, so some of them might not be shown',
  1332. 'props.limit.problem': 'Er zijn te veel problemen gemeld, daarom wordt een aantal van hen niet getoond',
  1333. 'props.limit.solution.en': 'Deselect the segment and stop scanning process. Then click red \'✘\' (Clear report) button',
  1334. 'props.limit.solution': 'Deselecteer het segment en stop het scanproces. Klik dan op de rode \'✘\' (Clear report) knop',
  1335. 'props.reports.en': 'reports',
  1336. 'props.reports': 'meldingen',
  1337. 'props.noneditable.en': 'You cannot edit this segment',
  1338. 'props.noneditable': 'Je kunt dit segment niet bewerken',
  1339. 'report.save.en': 'Save this report',
  1340. 'report.save': 'Sla dit rapport op',
  1341. 'report.list.andUp.en': 'and up',
  1342. 'report.list.andUp': 'en meer',
  1343. 'report.list.severity.en': 'Severity:',
  1344. 'report.list.severity': 'Hevigheid:',
  1345. 'report.list.reportOnly.en': 'only in report',
  1346. 'report.list.reportOnly': 'alleen in rapportage',
  1347. 'report.list.forEditors.en': 'For editors level:',
  1348. 'report.list.forEditors': 'Voor bewerkers niveau:',
  1349. 'report.list.forCountries.en': 'For countries:',
  1350. 'report.list.forCountries': 'Voor landen:',
  1351. 'report.list.forStates.en': 'For states:',
  1352. 'report.list.forStates': 'Voor provincies:',
  1353. 'report.list.forCities.en': 'For cities:',
  1354. 'report.list.forCities': 'Voor steden:',
  1355. 'report.list.params.en': 'Params to configure in localization pack:',
  1356. 'report.list.params': 'Parameters om te configureren in lokalisatie:',
  1357. 'report.list.params.set.en': 'Current configuration for ${country}:',
  1358. 'report.list.params.set': 'Huidige configuratie voor ${country}:',
  1359. 'report.list.enabled.en': '${n} checks are enabled for',
  1360. 'report.list.enabled': '${n} controles zijn actief voor',
  1361. 'report.list.disabled.en': '${n} checks are disabled for',
  1362. 'report.list.disabled': '${n} controles zijn uitgeschakeld voor',
  1363. 'report.list.total.en': 'There are ${n} checks available',
  1364. 'report.list.total': 'Er zijn ${n} controles beschikbaar',
  1365. 'report.list.title.en': 'Complete List of Checks for',
  1366. 'report.list.title': 'Complete lijst met controles voor',
  1367. 'report.list.see.en': 'See',
  1368. 'report.list.see': 'Zie',
  1369. 'report.list.checks.en': 'Settings->About->Available checks',
  1370. 'report.list.checks': 'Instellingen->Over->Beschikbare controles',
  1371. 'report.list.fallback.en': 'Localization Fallback Rules:',
  1372. 'report.list.fallback': 'Lokalisatie terugval regels:',
  1373. 'report.and.en': 'and',
  1374. 'report.and': 'en',
  1375. 'report.segments.en': 'Total number of segments checked:',
  1376. 'report.segments': 'Totaal aantal gecontroleerde segmenten:',
  1377. 'report.customs.en': 'Custom checks matched (green/blue):',
  1378. 'report.customs': 'Er is een match aangepaste controles (groen/blauw):',
  1379. 'report.reported.en': 'Reported',
  1380. 'report.reported': 'Gerapporteerd',
  1381. 'report.errors.en': 'errors',
  1382. 'report.errors': 'fouten',
  1383. 'report.warnings.en': 'warnings',
  1384. 'report.warnings': 'waarschuwingen',
  1385. 'report.notes.en': 'notes',
  1386. 'report.notes': 'notities',
  1387. 'report.link.wiki.en': 'wiki',
  1388. 'report.link.wiki': 'wiki',
  1389. 'report.link.forum.en': 'forum',
  1390. 'report.link.forum': 'forum',
  1391. 'report.link.other.en': 'link',
  1392. 'report.link.other': 'link',
  1393. 'report.contents.en': 'Contents:',
  1394. 'report.contents': 'Inhoud:',
  1395. 'report.summary.en': 'Summary',
  1396. 'report.summary': 'Samenvatting',
  1397. 'report.title.en': 'WME Validator Report',
  1398. 'report.title': 'WME Validator Rapport',
  1399. 'report.share.en': 'to Share',
  1400. 'report.share': 'om te delen',
  1401. 'report.generated.by.en': 'generated by',
  1402. 'report.generated.by': 'gegenereerd door',
  1403. 'report.generated.on.en': 'on',
  1404. 'report.generated.on': 'op',
  1405. 'report.source.en': 'Report source:',
  1406. 'report.source': 'Rapportbron:',
  1407. 'report.filter.duplicate.en': 'duplicate segments',
  1408. 'report.filter.duplicate': 'dubbele segmenten',
  1409. 'report.filter.streets.en': 'Streets and Service Roads',
  1410. 'report.filter.streets': 'Straten en dienstwegen',
  1411. 'report.filter.other.en': 'Other drivable and Non-drivable',
  1412. 'report.filter.other': 'Andere berijdbare en niet berijdbare',
  1413. 'report.filter.noneditable.en': 'non-editable segments',
  1414. 'report.filter.noneditable': 'niet-bewerkbare segmenten',
  1415. 'report.filter.notes.en': 'notes',
  1416. 'report.filter.notes': 'notities',
  1417. 'report.filter.title.en': 'Filter:',
  1418. 'report.filter.title': 'Filter:',
  1419. 'report.filter.excluded.en': 'are excluded from this report.',
  1420. 'report.filter.excluded': 'zijn uitgezonderd van dit rapport.',
  1421. 'report.search.updated.by.en': 'updated by',
  1422. 'report.search.updated.by': 'bijgewerkt door',
  1423. 'report.search.updated.since.en': 'updated since',
  1424. 'report.search.updated.since': 'bijgewerkt sinds',
  1425. 'report.search.city.en': 'from',
  1426. 'report.search.city': 'van',
  1427. 'report.search.reported.en': 'reported as',
  1428. 'report.search.reported': 'gemeld',
  1429. 'report.search.title.en': 'Search:',
  1430. 'report.search.title': 'Zoeken:',
  1431. 'report.search.only.en': 'only segments',
  1432. 'report.search.only': 'alleen segmenten',
  1433. 'report.search.included.en': 'are included into the report.',
  1434. 'report.search.included': 'zijn opgenomen in het rapport.',
  1435. 'report.beta.warning.en': 'WME Beta Warning!',
  1436. 'report.beta.warning': 'WME Beta Waarschuwing!',
  1437. 'report.beta.text.en': 'This report is generated in beta WME with beta permalinks.',
  1438. 'report.beta.text': 'Dit rapport is gegenereerd in beta WME met bèta permalinks.',
  1439. 'report.beta.share.en': 'Please do not share those permalinks!',
  1440. 'report.beta.share': 'Gelieve deze permalinks niet te delen!',
  1441. 'report.size.warning.en':
  1442. '<b>Warning!</b><br>The report is ${n} characters long so <b>it will not fit</b> into a single forum or private message.\n<br>Please add <b>more filters</b> to reduce the size of the report.',
  1443. 'report.size.warning':
  1444. '<b>Waarschuwing!</b><br>Het rapport is ${n} tekens lang dus <b>het zal niet passen</b> in één forum of privé bericht.\n<br>Voeg aub <b>meer filters</b> toe om de grootte van het rapport te beperken.',
  1445. 'report.note.limit.en': '* Note: there were too many issues reported, so some of them are not counted in the summary.',
  1446. 'report.note.limit': '* Let op: er waren te veel problemen gemeld, zodat een aantal van hen worden niet meegeteld in de samenvatting.',
  1447. 'report.forum.en': 'To motivate further development please leave your comment on the',
  1448. 'report.forum': 'Om verdere ontwikkeling te motiveren laat dan je commentaar achter op de',
  1449. 'report.forum.link.en': 'Waze forum thread.',
  1450. 'report.forum.link': 'Waze forum thread.',
  1451. 'report.thanks.en': 'Thank you for using WME Validator!',
  1452. 'report.thanks': 'Dank u voor het gebruik van de WME Validator!',
  1453. 'msg.limit.segments.en': 'There are too many segments.\n\nClick \'Show report\' to review the report, then\n',
  1454. 'msg.limit.segments': 'Er zijn te veel segmenten.\n\nKlik op \'Toon rapport\' om het rapport door te nemen, vervolgens\n',
  1455. 'msg.limit.segments.continue.en': 'click \'▶\' (Play) to continue.',
  1456. 'msg.limit.segments.continue': 'klik \'▶\' (Play) om verder te gaan.',
  1457. 'msg.limit.segments.clear.en': 'click \'✘\' (Clear) to clear the report.',
  1458. 'msg.limit.segments.clear': 'klik \'✘\' (Löschen) om het rapport te verwijderen.',
  1459. 'msg.pan.text.en': 'Pan around to validate the map',
  1460. 'msg.pan.text': 'Schuif de kaart rond om de kaart te valideren',
  1461. 'msg.zoomout.text.en': 'Zoom out to start WME Validator',
  1462. 'msg.zoomout.text': 'Uitzoomen om WME Validator te beginnen',
  1463. 'msg.click.text.en': 'Click \'▶\' (Play) to validate visible map area',
  1464. 'msg.click.text': 'Klik \'▶\' (Play), om het zichtbare gebied op de kaart te valideren',
  1465. 'msg.autopaused.en': 'autopaused',
  1466. 'msg.autopaused': 'automatisch gepauzeerd',
  1467. 'msg.autopaused.text.en': 'Auto paused! Click \'▶\' (Play) to continue.',
  1468. 'msg.autopaused.text': 'Automatisch gepauzeerd! Om door te gaan klik op \'▶\' (Play).',
  1469. 'msg.autopaused.tip.en': 'WME Validator automatically paused on map drag or window size change',
  1470. 'msg.autopaused.tip': 'WME Validator is automatisch onderbroken wegen het verschuiven van de kaart of door een aanpassing van de venstergrootte',
  1471. 'msg.finished.text.en': 'Click <b>\'Show report\'</b> to review map issues',
  1472. 'msg.finished.text': 'Klik <b>\'Toon rapport\'</b> om kaart problemen te beoordelen',
  1473. 'msg.finished.tip.en': 'Click \'✉\' (Share) button to post report on a\nforum or in a private message',
  1474. 'msg.finished.tip': 'Klik op \'✉\' (Delen) om het rapport op een\nforum of privebericht te plaatsen',
  1475. 'msg.noissues.text.en': 'Finished! No issues found!',
  1476. 'msg.noissues.text': 'Klaar! Geen problemen gevonden!',
  1477. 'msg.noissues.tip.en': 'Try to uncheck some filter options or start WME Validator over another map area!',
  1478. 'msg.noissues.tip': 'Probeer een aantal filteropties uit te vinken of start WME Validator over een ander gebied op de kaart!',
  1479. 'msg.scanning.text.en': 'Scanning! Finishing in ~ ${n} min',
  1480. 'msg.scanning.text': 'Scannen! Klaar over ~ ${n} min',
  1481. 'msg.scanning.text.soon.en': 'Scanning! Finishing in a minute!',
  1482. 'msg.scanning.text.soon': 'Scannen! Klaar binnen een minuut!',
  1483. 'msg.scanning.tip.en': 'Click \'Pause\' button to pause or \'■\' (Stop) to stop',
  1484. 'msg.scanning.tip': 'Klik op \'pauze\' knop om te pauzeren of \'■\' (Stop) om te stoppen',
  1485. 'msg.starting.text.en': 'Starting! Layers are off to scan faster!',
  1486. 'msg.starting.text': 'Begonnen! Layers zijn uitgeschakeld om sneller te scannen!',
  1487. 'msg.starting.tip.en': 'Use \'Pause\' button to pause or \'■\' button to stop',
  1488. 'msg.starting.tip': 'Gebruik de \'Pause\' knop om te pauzeren of \'■\' knop om te stoppen',
  1489. 'msg.paused.text.en': 'On pause! Click \'▶\' (Play) button to continue.',
  1490. 'msg.paused.text': 'Gepauzeerd! Klik op \'▶\' (Play) knop om door te gaan.',
  1491. 'msg.paused.tip.en': 'To view the report click \'Show report\' button (if available)',
  1492. 'msg.paused.tip': 'Om het rapport te bekijken klik je op de \'Toon rapport\' knop (indien beschikbaar)',
  1493. 'msg.continuing.text.en': 'Continuing!',
  1494. 'msg.continuing.text': 'Doorgaan!',
  1495. 'msg.continuing.tip.en': 'WME Validator will continue from the location it was paused',
  1496. 'msg.continuing.tip': 'WME Validator zal doorgaan van de locatie waar het werd onderbroken',
  1497. 'msg.settings.text.en': 'Click <b>\'Back\'</b> to return to main view',
  1498. 'msg.settings.text': 'Klik <b>\'Terug\'</b> om terug te keren naar hoofdweergave',
  1499. 'msg.settings.tip.en': 'Click \'Reset defaults\' button to reset all settings in one click!',
  1500. 'msg.settings.tip': 'Klik op \'Herstel standaardinstellingen\' knop om alle instellingen in één klik resetten!',
  1501. 'msg.reset.text.en': 'All filter options and settings have been reset to their defaults',
  1502. 'msg.reset.text': 'Alle filter opties en instellingen zijn terug gezet naar de standaardwaarden',
  1503. 'msg.reset.tip.en': 'Click \'Back\' button to return to main view',
  1504. 'msg.reset.tip': 'Klik <b>\'Terug\'</b> om terug te keren naar de hoofdweergave',
  1505. 'msg.textarea.pack.en':
  1506. 'This is a Greasemonkey/Tampermonkey script. You can copy and paste the text below into a <b>new .user.js file</b><br>or <b>paste it directly</b> into the Greasemonkey/Tampermonkey',
  1507. 'msg.textarea.pack':
  1508. 'Dit is een Greasemonkey/Tampermonkey script. Je kunt onderstaande tekst kopieren en plakken in een <b>nieuw .user.js</b>of <b>plak het direct</b> in Greasemonkey/Tampermonkey',
  1509. 'msg.textarea.en': 'Please copy the text below and then paste it into your forum post or private message',
  1510. 'msg.textarea': 'Kopieer de onderstaande tekst en plak deze in je forum post of privebericht',
  1511. 'noaccess.text.en':
  1512. '<b>Sorry,</b><br>You cannot use WME Validator over here.<br>Please check <a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488\'>the forum thread</a><br>for more information.',
  1513. 'noaccess.text':
  1514. '<b>Sorry,</b><br>Hier kan je de WME Validator niet gebruiken.<brMeer informatie vind je <a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488">deze forum thread</a><br>.',
  1515. 'noaccess.tip.en': 'Please check the forum thread for more information!',
  1516. 'noaccess.tip': 'Controleer de forum thread voor meer informatie!',
  1517. 'tab.switch.tip.on.en': 'Click to switch highlighting on (Alt+V)',
  1518. 'tab.switch.tip.on': 'Klik om het markeren aan te schakelen (Alt + V)',
  1519. 'tab.switch.tip.off.en': 'Click to switch highlighting off (Alt+V)',
  1520. 'tab.switch.tip.off': 'Klik om het markeren uit te schakelen (Alt+V)',
  1521. 'tab.filter.text.en': 'filter',
  1522. 'tab.filter.text': 'filter',
  1523. 'tab.filter.tip.en': 'Options to filter the report and highlighted segments',
  1524. 'tab.filter.tip': 'Opties om het rapport te filteren en gemarkeerd segmenten',
  1525. 'tab.search.text.en': 'search',
  1526. 'tab.search.text': 'zoeken',
  1527. 'tab.search.tip.en': 'Advanced filter options to include only specific segments',
  1528. 'tab.search.tip': 'Geavanceerde filteropties om alleen specifieke segmenten op te nemen',
  1529. 'tab.help.text.en': 'help',
  1530. 'tab.help.text': 'help',
  1531. 'tab.help.tip.en': 'Need help?',
  1532. 'tab.help.tip': 'Hulp nodig?',
  1533. 'filter.noneditables.text.en': 'Exclude <b>non-editable</b> segments',
  1534. 'filter.noneditables.text': 'Negeer <b>niet-bewerkbare</b> segmenten',
  1535. 'filter.noneditables.tip.en': 'Do not report locked segments or\nsegments outside of your editable areas',
  1536. 'filter.noneditables.tip': 'Rapporteer geen beveiligde segmenten of\nsegmenten buiten het gebied waar je mag bewerken',
  1537. 'filter.duplicates.text.en': 'Exclude <b>duplicate</b> segments',
  1538. 'filter.duplicates.text': '<b>Dubbele</b> segmenten uitsluiten',
  1539. 'filter.duplicates.tip.en': 'Do not show the same segment in different\nparts of report\n* Note: this option DOES NOT affect highlighting',
  1540. 'filter.duplicates.tip': 'Toon hetzelfde segment niet in verschillende\ndelen van het rapport\n* Opmerking: deze optie HEEFT GEEN invloed op het markeren',
  1541. 'filter.streets.text.en': 'Exclude <b>Streets and Service Roads</b>',
  1542. 'filter.streets.text': 'Negeer <b>wegen en dienstwegen</b>',
  1543. 'filter.streets.tip.en': 'Do not report Streets and Service Roads',
  1544. 'filter.streets.tip': 'Neem wegen en dienstwegen niet op in het rapport',
  1545. 'filter.other.text.en': 'Exclude <b>Other drivable and Non-drivable</b>',
  1546. 'filter.other.text': 'Negeer <b>Andere berijdbare en niet-berijdbare</b> segmenten',
  1547. 'filter.other.tip.en': 'Do not report Dirt, Parking Lot, Private Roads\nand non-drivable segments',
  1548. 'filter.other.tip': 'Niet melden van onverharde, parkeerplaats, privéwegen\n en niet-berijdbare segmenten',
  1549. 'filter.notes.text.en': 'Exclude <b>notes</b>',
  1550. 'filter.notes.text': 'Negeer <b>opmerkingen</b>',
  1551. 'filter.notes.tip.en': 'Report only warnings and errors',
  1552. 'filter.notes.tip': 'Rapporteer alleen waarschuwingen en fouten',
  1553. 'search.youredits.text.en': 'Include <b>only your edits</b>',
  1554. 'search.youredits.text': 'Toon <b>enkel eigen aanpassingen</b>',
  1555. 'search.youredits.tip.en': 'Include only segments edited by you',
  1556. 'search.youredits.tip': 'Omvat slechts segmenten bewerkt door u',
  1557. 'search.updatedby.text.en': '<b>Updated by*:</b>',
  1558. 'search.updatedby.text': '<b>Aangepast door*:</b>',
  1559. 'search.updatedby.tip.en':
  1560. 'Include only segments updated by the specified editor\n* Note: this option is available for country managers only\nThis field supports:\n - lists: me, otherEditor\n - wildcards: world*\n - negation: !me, *\n* Note: you may use \'me\' to match yourself',
  1561. 'search.updatedby.tip':
  1562. 'Omvat slechts segmenten bijgewerkt door de opgegeven editor\n * Opmerking: deze optie is alleen beschikbaar voor country managers\n Dit veld ondersteunt:\n - lijsten: me, otherEditor\n - wildcards: wereld *\n - negatie:! Me, *\n * Opmerking: je kunt gebruik maken van \'me\' om jezelf te vinden',
  1563. 'search.updatedby.example.en': 'Example: me',
  1564. 'search.updatedby.example': 'Voorbeeld: me',
  1565. 'search.updatedsince.text.en': '<b>Updated since:</b>',
  1566. 'search.updatedsince.text': '<b>Aangepast sinds:</b>',
  1567. 'search.updatedsince.tip.en': 'Include only segments edited since the date specified\nFirefox date format: YYYY-MM-DD',
  1568. 'search.updatedsince.tip': 'Toon enkel de segmenten die zijn gewijzigd sinds de opgegeven datum\nFirefox datum formaat: YYYY-MM-DD',
  1569. 'search.updatedsince.example.en': 'YYYY-MM-DD',
  1570. 'search.updatedsince.example': 'YYYY-MM-DD',
  1571. 'search.city.text.en': '<b>City name:</b>',
  1572. 'search.city.text': '<b>plaatsnaam:</b>',
  1573. 'search.city.tip.en': 'Include only segments with specified city name\nThis field supports:\n - lists: Paris, Meudon\n - wildcards: Greater * Area\n - negation: !Paris, *',
  1574. 'search.city.tip': 'Neem alleen segmenten op met opgegeven plaatsnaam\nDit veld ondersteunt:\n - lijsten: Amsterdam, Potsdam\n - wildcards: Den * \n - Negation: !Amsterdam, *',
  1575. 'search.city.example.en': 'Example: !Paris, *',
  1576. 'search.city.example': 'Voorbeeld: !Amsterdam, *',
  1577. 'search.checks.text.en': '<b>Reported as:</b>',
  1578. 'search.checks.text': '<b>Rapporteer als:</b>',
  1579. 'search.checks.tip.en':
  1580. 'Include only segments reported as specified\nThis field matches:\n - severities: errors\n - check names: New road\n - check IDs: 200\nThis field supports:\n - lists: 36, 37\n - wildcards: *roundabout*\n - negation: !unconfirmed*, *',
  1581. 'search.checks.tip':
  1582. 'Inclusief enkel de segmenten gerapporteerd als\nDit veld kom overeen met:\n - Foutmelding-rubriek: Fout\n - naam controle: Nieuwe straat\n - ID-Check: 200\nDit veld ondersteunt:\n - lijsten: 36, 37\n - wildcards: *rotonde*\n - negatie: !Soft-Turn*, *',
  1583. 'search.checks.example.en': 'Example: reverse*',
  1584. 'search.checks.example': 'Voorbeeld: autoweg*',
  1585. 'help.text.en':
  1586. '<b>Help Topics:</b><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=666476#p666476">F.A.Q.</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488">Ask your question on the forum</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=661300#p661185">How to adjust Validator for your country</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=663286#p663286">About the "Might be Incorrect City Name"</a>',
  1587. 'help.text':
  1588. '<b>Hulp onderwerpen:</b><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=666476#p666476">F.A.Q.</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488">Stel je vraag op het forum</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=661300#p661185">Hoe Validator aan te passen voor uw land</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=663286#p663286">Over de "Eventuele verkeerde plaatsnaam"</a>',
  1589. 'help.tip.en': 'Open in a new browser tab',
  1590. 'help.tip': 'Open in een nieuw tabblad',
  1591. 'button.scan.tip.en': 'Start scanning current map area\n* Note: this might take few minutes',
  1592. 'button.scan.tip': 'Start het scannen van het huidige gebied op de kaart\n* Opmerking: dit kan een aantal minuten duren',
  1593. 'button.scan.tip.NA.en': 'Zoom out to start scanning current map area',
  1594. 'button.scan.tip.NA': 'Zoom uit om te beginnen met het scannen van het huidige gebied op de kaart',
  1595. 'button.pause.tip.en': 'Pause scanning',
  1596. 'button.pause.tip': 'Scannen pauzeren',
  1597. 'button.continue.tip.en': 'Continue scanning the map area',
  1598. 'button.continue.tip': 'Doorgaan met scannen van het gebied op de kaart',
  1599. 'button.stop.tip.en': 'Stop scanning and return to the start position',
  1600. 'button.stop.tip': 'Stop het scannen en keer terug naar de beginpositie',
  1601. 'button.clear.tip.en': 'Clear report and segment cache',
  1602. 'button.clear.tip': 'Wissen rapport en segment cache',
  1603. 'button.clear.tip.red.en': 'There are too many reported segments:\n 1. Click \'Show report\' to generate the report.\n 2. Click this button to clear the report and start over.',
  1604. 'button.clear.tip.red':
  1605. 'Er zijn te veel gerapporteerde segmenten:\n 1. Klik op \'Toon rapport\' om het rapport te genereren.\n 2. Klik op deze knop om het rapport te wissen en opnieuw te beginnen.',
  1606. 'button.report.text.en': 'Show report',
  1607. 'button.report.text': 'Toon rapport',
  1608. 'button.report.tip.en': 'Apply the filter and generate HTML report in a new tab',
  1609. 'button.report.tip': 'Pas het filter toe en genereer het HTML-rapport in een nieuw tabblad',
  1610. 'button.BBreport.tip.en': 'Share the report on Waze forum or in a private message',
  1611. 'button.BBreport.tip': 'Deel het rapport op het Waze forum of in een privé-bericht',
  1612. 'button.settings.tip.en': 'Configure settings',
  1613. 'button.settings.tip': 'Instellingen aanpassen',
  1614. 'tab.custom.text.en': 'custom',
  1615. 'tab.custom.text': 'eigen instelling',
  1616. 'tab.custom.tip.en': 'User-defined custom checks settings',
  1617. 'tab.custom.tip': 'Door gebruiker aangepaste controle instellingen',
  1618. 'tab.settings.text.en': 'Settings',
  1619. 'tab.settings.text': 'Instellingen',
  1620. 'tab.scanner.text.en': 'scanner',
  1621. 'tab.scanner.text': 'scanner',
  1622. 'tab.scanner.tip.en': 'Map scanner settings',
  1623. 'tab.scanner.tip': 'Instellingen Kaartscanner',
  1624. 'tab.about.text.en': 'about</span>',
  1625. 'tab.about.text': 'over</span>',
  1626. 'tab.about.tip.en': 'About WME Validator',
  1627. 'tab.about.tip': 'Over WME Validator',
  1628. 'scanner.sounds.text.en': 'Enable sounds',
  1629. 'scanner.sounds.text': 'Gebruik geluiden',
  1630. 'scanner.sounds.tip.en': 'Bleeps and the bloops while scanning',
  1631. 'scanner.sounds.tip': 'Activeer de geluiden tijden het scannen',
  1632. 'scanner.sounds.NA.en': 'Your browser does not support AudioContext',
  1633. 'scanner.sounds.NA': 'Je browser ondersteunt geen AudioContext',
  1634. 'scanner.highlight.text.en': 'Highlight issues on the map',
  1635. 'scanner.highlight.text': 'Markeer problemen op de kaart',
  1636. 'scanner.highlight.tip.en': 'Highlight reported issues on the map',
  1637. 'scanner.highlight.tip': 'Markeer gevonden problemen op de kaart',
  1638. 'scanner.slow.text.en': 'Enable "slow" checks',
  1639. 'scanner.slow.text': '"Langzame" controles activeren',
  1640. 'scanner.slow.tip.en': 'Enables deep map analysis\n* Note: this option might slow down the scanning process',
  1641. 'scanner.slow.tip': 'Activeert diepe kaartanalyse\n* Opmerking: deze optie zou het scanproces kunnen vertragen',
  1642. 'scanner.ext.text.en': 'Report external highlights',
  1643. 'scanner.ext.text': 'Meld externe markeringen',
  1644. 'scanner.ext.tip.en': 'Report segments highlighted by WME Toolbox or WME Color Highlights',
  1645. 'scanner.ext.tip': 'Rapporteer segmenten gemarkeerd door WME Toolbox of WME Color Highlights',
  1646. 'advanced.twoway.text.en': 'WME: Two-way segments by default',
  1647. 'advanced.twoway.text': 'WME: Nieuwe segmenten tweerichtingsverkeer standaard',
  1648. 'advanced.twoway.tip.en': 'Newly created streets in WME are bidirectional by default',
  1649. 'advanced.twoway.tip': 'Nieuwe segmenten zijn standaard tweerichtingsverkeer',
  1650. 'custom.template.text.en': '<a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=749456#p749456\'>Custom template</a>',
  1651. 'custom.template.text': '<a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=749456#p749456\'>Aangepast sjabloon</a>',
  1652. 'custom.template.tip.en':
  1653. 'User-defined custom check expandable template.\n\nYou may use the following expandable variables:\nAddress:\n ${country}, ${state}, ${city}, ${street},\n ${altCity[index or delimeter]}, ${altStreet[index or delimeter]}\nSegment properties:\n ${type}, ${typeRank}, ${toll}, ${direction}, ${elevation}, ${lock},\n ${length}, ${ID}\nHelpers:\n ${drivable}, ${roundabout}, ${hasHNs},\n ${Uturn}, ${deadEnd}, ${softTurns},\n ${deadEndA}, ${partialA},\n ${deadEndB}, ${partialB}\nConnectivity:\n ${segmentsA}, ${inA}, ${outA}, ${UturnA},\n ${segmentsB}, ${inB}, ${outB}, ${UturnB}',
  1654. 'custom.template.tip':
  1655. 'Door de gebruiker gedefinieerde aangepaste controle uitbreidbaar sjabloon.\n\nDe volgende variabelen zijn te gebruiken:\n${country}, ${state}, ${city}, ${street},\n${altCity[Index of onderscheidingsteken]}, ${altStreet[Index of onderscheidingsteken]}\nSegment-Eigenschaften:\n${type}, ${typeRank}, ${toll}, ${direction}, ${elevation}, ${lock},\n ${length}, ${ID}\nHelpers:\n ${drivable}, ${roundabout}, ${hasHNs},\n ${Uturn}, ${deadEnd}, ${softTurns}\n ${deadEndA}, ${partialA},\n ${deadEndB}, ${partialB}\nVerbindungen:\n ${segmentsA}, ${inA}, ${outB}, ${UturnA},\n ${segmentsB}, ${inB}, ${outB}, ${UturnB}',
  1656. 'custom.template.example.en': 'Example: ${street}',
  1657. 'custom.template.example': 'Voorbeeld: ${street}',
  1658. 'custom.regexp.text.en': 'Custom <a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=749456#p749456\'>RegExp</a>',
  1659. 'custom.regexp.text': '<a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=749456#p749456\'>Eigen RegExp</a>',
  1660. 'custom.regexp.tip.en':
  1661. 'User-defined custom check regular expression to match the template.\n\nCase-insensitive match: /regexp/i\nNegation (do not match): !/regexp/\nLog debug information on console: D/regexp/',
  1662. 'custom.regexp.tip':
  1663. 'Door de gebruiker gedefinieerde RegExp die overeenkomen met het template.\n\nNiet hoofdlettergevoelig match: /regexp/i\nNegatie van een uitdrukking: !/regexp/\nLog debug informatie op de console: D/regexp/',
  1664. 'custom.regexp.example.en': 'Example: !/.+/',
  1665. 'custom.regexp.example': 'Voorbeeld: !/.+/',
  1666. 'about.tip.en': 'Open link in a new tab',
  1667. 'about.tip': 'Link in nieuw tabblad openen',
  1668. 'button.reset.text.en': 'Reset defaults',
  1669. 'button.reset.text': 'Herstel standaardinstellingen',
  1670. 'button.reset.tip.en': 'Revert filter options and settings to their defaults',
  1671. 'button.reset.tip': 'Filter opties en instellingen herstellen naar de standaardwaarden',
  1672. 'button.list.text.en': 'Available checks...',
  1673. 'button.list.text': 'Beschikbare controles...',
  1674. 'button.list.tip.en': 'Show a list of checks available in WME Validator',
  1675. 'button.list.tip': 'Toon een lijst met beschikbare controles in WME Validator',
  1676. 'button.wizard.tip.en': 'Create localization package',
  1677. 'button.wizard.tip': 'Maak lokalisatie pakket aan',
  1678. 'button.back.text.en': 'Back',
  1679. 'button.back.text': 'Terug',
  1680. 'button.back.tip.en': 'Close settings and return to main view',
  1681. 'button.back.tip': 'Sluit de instellingen en keer terug naar de hoofdweergave',
  1682. '1.title.en': 'WME Toolbox: Roundabout which may cause issues',
  1683. '1.title': 'WME Toolbox: Rotonde die problemen kan veroorzaken (rotonde verkeer problematisch)',
  1684. '1.problem.en': 'Junction IDs of the roundabout segments are not consecutive',
  1685. '1.problem': 'Knooppunt-ID\'s van de rotonde segmenten zijn niet opeenvolgend',
  1686. '1.solution.en': 'Redo the roundabout',
  1687. '1.solution': 'Rotonde opnieuw doen',
  1688. '2.title.en': 'WME Toolbox: Simple segment',
  1689. '2.title': 'WME Toolbox: Moeilijk segment (Te veel geometrie knooppunten)',
  1690. '2.problem.en': 'The segment has unneeded geometry nodes',
  1691. '2.problem': 'Het segment heeft onnodige geometrie knooppunten',
  1692. '2.solution.en': 'Simplify segment geometry by hovering mouse pointer and pressing "d" key',
  1693. '2.solution': 'Vereenvoudig segment geometrie door de muisaanwijzing boven het punt te brengen en de "d" toets in te drukken',
  1694. '3.title.en': 'WME Toolbox: Lvl 2 lock',
  1695. '3.title': 'WME Toolbox: Lvl 2 Lock',
  1696. '3.problem.en': 'The segment is highlighted by WME Toolbox. It is not a problem',
  1697. '3.problem': 'Het segment wordt gemarkeerd door WME Toolbox. Het is geen probleem',
  1698. '4.title.en': 'WME Toolbox: Lvl 3 lock',
  1699. '4.title': 'WME Toolbox: Lvl 3 Lock',
  1700. '4.problem.en': 'The segment is highlighted by WME Toolbox. It is not a problem',
  1701. '4.problem': 'Het segment wordt gemarkeerd door WME Toolbox. Het is geen probleem.',
  1702. '5.title.en': 'WME Toolbox: Lvl 4 lock',
  1703. '5.title': 'WME Toolbox: Lvl 4 Lock',
  1704. '5.problem.en': 'The segment is highlighted by WME Toolbox. It is not a problem',
  1705. '5.problem': 'Het segment wordt gemarkeerd door WME Toolbox. Het is geen probleem',
  1706. '6.title.en': 'WME Toolbox: Lvl 5 lock',
  1707. '6.title': 'WME Toolbox: Lvl 5 Lock',
  1708. '6.problem.en': 'The segment is highlighted by WME Toolbox. It is not a problem',
  1709. '6.problem': 'Het segment wordt gemarkeerd door WME Toolbox. Het is geen probleem',
  1710. '7.title.en': 'WME Toolbox: Lvl 6 lock',
  1711. '7.title': 'WME Toolbox: Lvl 6 Lock',
  1712. '7.problem.en': 'The segment is highlighted by WME Toolbox. It is not a problem',
  1713. '7.problem': 'Het segment wordt gemarkeerd door WME Toolbox. Het is geen probleem',
  1714. '8.title.en': 'WME Toolbox: House numbers',
  1715. '8.title': 'WME Toolbox: Huisnummers',
  1716. '8.problem.en': 'The segment is highlighted by WME Toolbox. It is not a problem',
  1717. '8.problem': 'Het segment wordt gemarkeerd door WME Toolbox. Het is geen probleem',
  1718. '9.title.en': 'WME Toolbox: Segment with time restrictions',
  1719. '9.title': 'WME Toolbox: Segment met tijdsrestricties',
  1720. '9.problem.en': 'The segment is highlighted by WME Toolbox. It is not a problem',
  1721. '9.problem': 'Het segment wordt gemarkeerd door WME Toolbox. Het is geen probleem',
  1722. '13.title.en': 'WME Color Highlights: Editor lock',
  1723. '13.title': 'WME Color Highlights: Editor lock',
  1724. '13.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1725. '13.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1726. '14.title.en': 'WME Color Highlights: Toll road / One way road',
  1727. '14.title': 'WME Color Highlights: Toll road / One way road (Tol- / Eenrichtings-straat)',
  1728. '14.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1729. '14.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1730. '15.title.en': 'WME Color Highlights: Recently edited',
  1731. '15.title': 'WME Color Highlights: Recently edited (Kürzlich editiert)',
  1732. '15.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1733. '15.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1734. '16.title.en': 'WME Color Highlights: Road rank',
  1735. '16.title': 'WME Color Highlights: Road type',
  1736. '16.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1737. '16.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1738. '17.title.en': 'WME Color Highlights: No city',
  1739. '17.title': 'WME Color Highlights: No city (Keine Stadt)',
  1740. '17.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1741. '17.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1742. '18.title.en': 'WME Color Highlights: Time restriction / Highlighted road type',
  1743. '18.title': 'WME Color Highlights: Time restriction / Highlighted road type',
  1744. '18.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1745. '18.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1746. '19.title.en': 'WME Color Highlights: No name',
  1747. '19.title': 'WME Color Highlights: No name (Kein Straßenname)',
  1748. '19.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1749. '19.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1750. '20.title.en': 'WME Color Highlights: Filter by city',
  1751. '20.title': 'WME Color Highlights: Filter by city (Stadt-Filter)',
  1752. '20.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1753. '20.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1754. '21.title.en': 'WME Color Highlights: Filter by city (alt. city)',
  1755. '21.title': 'WME Color Highlights: Filter by city (alt. city)',
  1756. '21.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1757. '21.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1758. '22.title.en': 'WME Color Highlights: Filter by editor',
  1759. '22.title': 'WME Color Highlights: Filter by editor (Editor-Filter)',
  1760. '22.problem.en': 'The segment is highlighted by WME Color Highlights. It is not a problem',
  1761. '22.problem': 'Het segment wordt gemarkeerd door WME Color Highlights. Het is geen probleem',
  1762. '23.title.en': 'Unconfirmed road',
  1763. '23.title': 'Onbevestigde straat',
  1764. '23.problem.en': 'Each segment must minimally have the Country and State information',
  1765. '23.problem': 'Elk segment moet minimaal informatie hebben over het land en plaats',
  1766. '23.solution.en': 'Confirm the road by updating its details',
  1767. '23.solution': 'Bevestig de straat door ofwel de plaats danwel de straatnaam in te voeren.',
  1768. '24.title.en': 'Might be incorrect city name (only available in the report)',
  1769. '24.title': 'Eventueel verkeerde plaatsnaam (alleen beschikbaar in het rapport)',
  1770. '24.problem.en': 'The segment might have incorrect city name',
  1771. '24.problem': 'Het segment heeft misschien een verkeerde plaatsnaam',
  1772. '24.solution.en': 'Consider suggested city name and use this form to rename the city',
  1773. '24.solution': 'Overweeg de voorgestelde plaatsnaam en gebruik dit formulier om de naam te wijzigen',
  1774. '25.title.en': 'Unknown direction of drivable road',
  1775. '25.title': 'Onbekende rijrichting van berijdbare weg',
  1776. '25.problem.en': '\'Unknown\' road direction will not prevent routing on the road',
  1777. '25.problem': '\'Onbekende\' rijrichting zal niet voorkomen dat er genavigeerd wordt over de weg',
  1778. '25.solution.en': 'Set the road direction',
  1779. '25.solution': 'Stel de rijrichting in',
  1780. '28.title.en': 'Street name on two-way Ramp',
  1781. '28.title': 'Straatnaam op tweebaans voegstrook',
  1782. '28.problem.en': 'If Ramp is unnamed, the name of a subsequent road will propagate backwards',
  1783. '28.problem': 'Als de op/afrit geen naam heeft, zal de naam van de volgende straat worden overgenomen',
  1784. '28.solution.en': 'In the address properties check the \'None\' box next to the street name and then click \'Apply\'',
  1785. '28.solution': 'In de adreseigenschappen vink \'Geen\' aan naast de straatnaam en klik op \'Toepassen\'',
  1786. '29.title.en': 'Street name on roundabout',
  1787. '29.title': 'Straatnaam op rotonde',
  1788. '29.problem.en': 'In Waze, we do not name roundabout segments',
  1789. '29.problem': 'In Waze geven we rotondes geen straatnamen',
  1790. '29.solution.en': 'In the address properties check the \'None\' box next to the street name, click \'Apply\' and then add \'Junction\' landmark to name the roundabout',
  1791. '29.solution': 'In de adreseigenschappen vink \'Geen\' aan naast de straatnaam en klik op \'Toepassen\' en voeg eventueel een \'Kruispunt/Knooppunt\' toe met de naam van de rotonde',
  1792. '33.enabled': false,
  1793. '34.title.en': 'Empty alternate street',
  1794. '34.title': 'Lege alternatieve straatnaam',
  1795. '34.problem.en': 'Alternate street name is empty',
  1796. '34.problem': 'De alternatieve straatnaam is leeg',
  1797. '34.solution.en': 'Remove empty alternate street name',
  1798. '34.solution': 'Verwijder de lege alternatieve straatnaam',
  1799. '35.title.en': 'Unterminated drivable road',
  1800. '35.title': 'Geen eindnode op berijdbare weg',
  1801. '35.problem.en': 'Waze will not route from the unterminated segment',
  1802. '35.problem': 'Waze zal niet routeren vanaf segmenten zonder eindnode',
  1803. '35.solution.en': 'Move the segment a bit so the terminating node will be added automatically',
  1804. '35.solution': 'Verplaats het segment een beetje zodat de eindnode automatisch zal worden toegevoegd',
  1805. '36.enabled': true,
  1806. '36.title.en': 'Node A: Unneeded (slow)',
  1807. '36.title': 'Node A: Onnodig (langzaam)',
  1808. '36.problem.en': 'Adjacent segments at node A are identical',
  1809. '36.problem': 'De segmenten naast node A zijn identiek',
  1810. '36.solution.en': 'Select node A and press Delete key to join the segments',
  1811. '36.solution': 'Selecteer node A en druk op Delete om de segmenten samen te voegen',
  1812. '37.enabled': true,
  1813. '37.title.en': 'Node B: Unneeded (slow)',
  1814. '37.title': 'Node B: Onnodig (langzaam)',
  1815. '37.problem.en': 'Adjacent segments at node B are identical',
  1816. '37.problem': 'De segmenten naast node B zijn identiek',
  1817. '37.solution.en': 'Select node B and press Delete key to join the segments',
  1818. '37.solution': 'Selecteer node B en druk op Delete om de segmenten samen te voegen',
  1819. '38.title.en': 'Expired segment restriction (slow)',
  1820. '38.title': 'Verlopen segment beperking (langzaam)',
  1821. '38.problem.en': 'The segment has an expired restriction',
  1822. '38.problem': 'Het segment heeft een verlopen beperking',
  1823. '38.solution.en': 'Click \'Edit restrictions\' and delete the expired restriction',
  1824. '38.solution': 'Klik op \'Bewerken restricties\' en verwijder de verstreken beperking',
  1825. '39.title.en': 'Expired turn restriction (slow)',
  1826. '39.title': 'Verlopen beperking op afslag (langzaam)',
  1827. '39.problem.en': 'The segment has a turn with an expired restriction',
  1828. '39.problem': 'Het segment heeft een afslag met een verlopen beperking',
  1829. '39.solution.en': 'Click clock icon next to the yellow arrow and delete the expired restriction',
  1830. '39.solution': 'Klik klok pictogram naast de gele pijl en verwijder de verlopen beperking',
  1831. '41.title.en': 'Node A: Reverse connectivity of drivable road',
  1832. '41.title': 'Node A: Omgekeerde connectiviteit van berijdbare weg',
  1833. '41.problem.en': 'There is a turn which goes against the directionality of the segment at node A',
  1834. '41.problem': 'Er is een afslag die indruist tegen de rijrichting van het segment op knooppunt A',
  1835. '41.solution.en': 'Make the segment \'Two-way\', restrict all the turns at node A and then make the segment \'One way (A→B)\' again',
  1836. '41.solution': 'Verander het segment in twee-richting, verbied de afslag bij node A en verander het segment weer in \'1-richting\', of verander het segment weer in \'One way (A→B)\'',
  1837. '42.title.en': 'Node B: Reverse connectivity of drivable road',
  1838. '42.title': 'Node B: Omgekeerde connectiviteit van berijdbare weg',
  1839. '42.problem.en': 'There is a turn which goes against the directionality of the segment at node B',
  1840. '42.problem': 'Er is een afslag die indruist tegen de rijrichting van het segment op knooppunt B',
  1841. '42.solution.en': 'Make the segment \'Two-way\', restrict all the turns at node B and then make the segment \'One way (B→A)\' again',
  1842. '42.solution': 'Verander het segment in twee-richting, verbied de afslag bij node B en verander het segment weer in \'1-richting\', Of verander het segment weer in \'One way (B→A)\'',
  1843. '43.title.en': 'Self connectivity',
  1844. '43.title': 'Zelf verbinding',
  1845. '43.problem.en': 'The segment is connected back to itself',
  1846. '43.problem': 'Het segment is met zichzelf verbonden',
  1847. '43.solution.en': 'Split the segment into THREE pieces',
  1848. '43.solution': 'Verdeel het segment in DRIE stukken',
  1849. '44.title.en': 'No outward connectivity',
  1850. '44.title': 'Geen verbinding naar buiten',
  1851. '44.problem.en': 'The drivable segment has no single outward turn enabled',
  1852. '44.problem': 'Het berijdbare segment heeft geen enkele verbinding naar buiten',
  1853. '44.solution.en': 'Enable at least one outward turn from the segment',
  1854. '44.solution': 'Verbind het segment minstens eenmaal met het verkeersnet',
  1855. '45.title.en': 'No inward connectivity',
  1856. '45.title': 'Geen verbinding naar binnen',
  1857. '45.problem.en': 'The drivable non-private segment has no single inward turn enabled',
  1858. '45.problem': 'Het berijdbare niet-privé segment heeft geen enkele verbinding naar het segment toe',
  1859. '45.solution.en': 'Select an adjacent segment and enable at least one turn to the segment',
  1860. '45.solution': 'Selecteer het segment en sta minstens één inwaartse verbinding toe',
  1861. '46.title.en': 'Node A: No inward connectivity of drivable road (slow)',
  1862. '46.title': 'Node A: Geen naar binnen connectiviteit van berijdbare weg (langzaam)',
  1863. '46.problem.en': 'The drivable non-private segment has no single inward turn enabled at node A',
  1864. '46.problem': 'De berijdbare niet-particuliere segment heeft geen enkele naar binnen wijzende verbinding ingeschakeld op knooppunt A',
  1865. '46.solution.en': 'Select an adjacent segment and enable at least one turn to the segment at node A',
  1866. '46.solution': 'Selecteer een aangrenzend segment en stel tenminste één verbinding naar segment bij knooppunt A in',
  1867. '47.title.en': 'Node B: No inward connectivity of drivable road (slow)',
  1868. '47.title': 'Node B: Het berijdbare segment heeft geen enkele verbinding naar het segment toe (langzaam)',
  1869. '47.problem.en': 'The drivable non-private segment has no single inward turn enabled at node B',
  1870. '47.problem': 'Het berijdbare (niet prive) segment heeft geen enkele verbinding naar het segment toe bij node B',
  1871. '47.solution.en': 'Select an adjacent segment and enable at least one turn to the segment at node B',
  1872. '47.solution': 'Selecteer een aangrenzend segment en stel tenminste één verbinding naar segment bij node B',
  1873. '48.title.en': 'Two-way drivable roundabout segment',
  1874. '48.title': 'Berijdbare rotonde segment is niet eenrichtingsverkeer',
  1875. '48.problem.en': 'The drivable roundabout segment is bidirectional',
  1876. '48.problem': 'Berijdbare rotonde segment is niet eenrichtingsverkeer',
  1877. '48.solution.en': 'Redo the roundabout',
  1878. '48.solution': 'Maak de rotonde opnieuw',
  1879. '59.title.en': 'City name on Freeway',
  1880. '59.title': 'Plaatsnaam op snelweg',
  1881. '59.problem.en': 'City name on the Freeway may cause a city smudge',
  1882. '59.problem': 'Plaatsnaam op de snelweg kan het uitsmeren van een stad veroorzaken',
  1883. '59.problemLink': 'W:Benelux/Freeway',
  1884. '59.solution.en': 'In the address properties check the \'None\' box next to the city name and then click \'Apply\'',
  1885. '59.solution': 'In de adreseigenschappen stel de plaatsnaam in op \'Geen\' en klik op \'toepassen\'',
  1886. '59.solutionLink': 'W:Creating_and_Editing_street_segments#Address_Properties',
  1887. '71.enabled': true,
  1888. '71.problemLink': 'W:Benelux/Major_Highway',
  1889. '71.title.en': 'Must be a Major Highway',
  1890. '71.title': 'Moet een Major Highway zijn',
  1891. '71.problem.en': 'This segment must be a Major Highway',
  1892. '71.problem': 'Dit segment moet een Major Highway zijn',
  1893. '71.solution.en': 'Set the road type to Major Highway or change the road name',
  1894. '71.solution': 'Stel het wegtype in op Major Highway of verander de straatnaam',
  1895. '72.enabled': true,
  1896. '72.problemLink': 'W:Benelux/Minor_Highway',
  1897. '72.title.en': 'Must be a Minor Highway',
  1898. '72.title': 'Dit moet een Minor Highway zijn',
  1899. '72.problem.en': 'This segment must be a Minor Highway',
  1900. '72.problem': 'Dit segment moet een Minor Highway zijn',
  1901. '72.solution.en': 'Set the road type to Minor Highway or change the road name',
  1902. '72.solution': 'Stel het wegtype in op Minor Highway of verander de straatnaam',
  1903. '78.title.en': 'Same endpoints drivable segments (slow)',
  1904. '78.title': 'Dezelfde eindpunten voor berijdbare segmenten (langzaam)',
  1905. '78.problem.en': 'Two drivable segments share the same two endpoints',
  1906. '78.problem': 'Twee berijdbare segmenten delen dezelfde twee eindpunten',
  1907. '78.solution.en': 'Split the segment. You might also remove one of the segments if they are identical',
  1908. '78.solution': 'Splits het segment. Je zou ook een segment kunnen verwijderen als ze identiek zijn',
  1909. '87.title.en': 'Node A: Multiple outgoing segments at roundabout',
  1910. '87.title': 'Node A: Meerdere uitgaande segmenten voor rotonde',
  1911. '87.problem.en': 'The drivable roundabout node A has more than one outgoing segment connected',
  1912. '87.problem': 'De berijdbare rotonde knooppunt A heeft meerdere uitgaande segmenten verbonden',
  1913. '87.solution.en': 'Redo the roundabout',
  1914. '87.solution': 'Maak de rotonde opnieuw',
  1915. '99.title.en': 'U-turn at roundabout entrance (slow)',
  1916. '99.title': 'U-bocht op rotonde (langzaam)',
  1917. '99.problem.en': 'The roundabout entrance segment has a U-turn enabled',
  1918. '99.problem': 'De berijdbare rotondenode heeft een U-bocht toegestaan',
  1919. '99.solution.en': 'Disable U-turn',
  1920. '99.solution': 'Zet de U-bocht uit',
  1921. '101.title.en': 'Closed road (only available in the report)',
  1922. '101.title': 'Afgesloten weg (enkel beschikbaar in het rapport)',
  1923. '101.problem.en': 'The segment is marked as closed',
  1924. '101.problem': 'Het segment is gemarkeerd als afgesloten',
  1925. '101.solution.en': 'If the construction is done, restore the segment connectivity and remove the suffix',
  1926. '101.solution': 'Als de wegwerkzaamheden klaar zijn, herstel dan de verbinding van het segment en verwijder de aanvulling',
  1927. '101.params': {'regexp': '/(^|\\b)afgesloten(\\b|$)/i'},
  1928. '102.title.en': 'Node A: No outward connectivity of drivable road (slow)',
  1929. '102.title': 'Node A: Geen uitgaande verbinding van berijdbare weg (langzaam)',
  1930. '102.problem.en': 'The drivable segment has no single outward turn enabled at node A',
  1931. '102.problem': 'Het berijdbare segment heeft geen enkele uitgaande verbinding aan staan bij node A',
  1932. '102.solution.en': 'Enable at least one outward turn from the segment at node A',
  1933. '102.solution': 'Zet minstens 1 uitgaande verbinding aan bij node A',
  1934. '103.title.en': 'Node B: No outward connectivity of drivable road (slow)',
  1935. '103.title': 'Node B: Geen uitgaande verbinding van berijdbare weg (langzaam)',
  1936. '103.problem.en': 'The drivable segment has no single outward turn enabled at node B',
  1937. '103.problem': 'Het berijdbare segment heeft geen enkele uitgaande verbinding aan staan bij node B',
  1938. '103.solution.en': 'Enable at least one outward turn from the segment at node B',
  1939. '103.solution': 'Zet minstens 1 uitgaande verbinding aan bij node B',
  1940. '104.title.en': 'Railroad used for comments',
  1941. '104.title': 'Spoorweg gebruikt als commentaar',
  1942. '104.problem.en': 'The Railroad segment is probably used as a map comment',
  1943. '104.problem': 'Het spoorweg segment wordt waarschijnelijk gebruikt als kaartopmerking',
  1944. '104.solution.en': 'Remove the comment as Railroads will be added to the client display',
  1945. '104.solution': 'Verwijder het commentaar, spoorwegen worden weergegeven in de client',
  1946. '107.title.en': 'Node A: No connection (slow)',
  1947. '107.title': 'Node A: Geen verbinding (langzaam)',
  1948. '107.problem.en': 'The node A of the drivable segment is within 5m from another drivable segment but not connected by a junction',
  1949. '107.problem': 'De node A van een berijdbaar segment is binnen 5 meter van een ander berijdbaar segment, maar is niet verbonden via een kruising',
  1950. '107.solution.en': 'Drag the node A to the nearby segment so that it touches or move it a bit further away',
  1951. '107.solution': 'Sleep de node A naar het dichtbij gelegen segment zodat deze verbonden worden, of sleep de node iets verder weg van het andere segment',
  1952. '108.title.en': 'Node B: No connection (slow)',
  1953. '108.title': 'Node B: Geen verbinding (langzaam)',
  1954. '108.problem.en': 'The node B of the drivable segment is within 5m from another drivable segment but not connected by a junction',
  1955. '108.problem': 'De node B van een berijdbaar segment is binnen 5 meter van een ander berijdbaar segment, maar is niet verbonden via een kruising',
  1956. '108.solution.en': 'Drag the node B to the nearby segment so that it touches or move it a bit further away',
  1957. '108.solution': 'Sleep de node B naar het dichtbij gelegen segment zodat deze verbonden worden, of sleep de node iets verder weg van het andere segment',
  1958. '109.title.en': 'Too short segment',
  1959. '109.title': 'Te kort segment',
  1960. '109.problem.en': 'The drivable non-terminal segment is less than ${n}m long so it is hard to see it on the map and it can cause routing problems',
  1961. '109.problem': 'Het berijdbaar, niet doodlopend, segment is korter dan ${n}m, dit is moeilijk te zien op de kaart en kan voor routerings problemen zorgen',
  1962. '109.solution.en': 'Increase the length, or remove the segment, or join it with one of the adjacent segments',
  1963. '109.solution': 'Verleng het segment, of verwijder het segment, of voeg het segment samen met een van de omliggende segmenten',
  1964. '112.title.en': 'Too long Ramp name',
  1965. '112.title': 'Op/afrit naam te lang',
  1966. '112.problem.en': 'The Ramp name is more than ${n} letters long',
  1967. '112.problem': 'Op/afrit naam is langer dan ${n} tekens lang',
  1968. '112.solution.en': 'Shorten the Ramp name',
  1969. '112.solution': 'Verkort de naam',
  1970. '114.enabled': false,
  1971. '114.title.en': 'Node A: Non-drivable connected to drivable (slow)',
  1972. '114.title': 'Node A: Niet-berijdbaar verbonden met berijdbaar (langzaam)',
  1973. '114.problem.en': 'The non-drivable segment makes a junction with a drivable at node A',
  1974. '114.problem': 'Het niet-berijdbare segment maakt verbinding met een berijdbaar segment bij node A',
  1975. '114.solution.en': 'Disconnect node A from all of the drivable segments',
  1976. '114.solution': 'Verbreek de vervinding van alle berijdbare segmenten bij node A',
  1977. '115.enabled': false,
  1978. '115.title.en': 'Node B: Non-drivable connected to drivable (slow)',
  1979. '115.title': 'Node B: Niet-berijdbaar verbonden met berijdbaar (langzaam)',
  1980. '115.problem.en': 'The non-drivable segment makes a junction with a drivable at node B',
  1981. '115.problem': 'Het niet-berijdbare segment maakt verbinding met een berijdbaar segment bij node B',
  1982. '115.solution.en': 'Disconnect node B from all of the drivable segments',
  1983. '115.solution': 'Verbreek de vervinding van alle berijdbare segmenten bij node B',
  1984. '116.title.en': 'Out of range elevation',
  1985. '116.title': 'Hoogte buiten bereik',
  1986. '116.problem.en': 'The segment elevation is out of range',
  1987. '116.problem': 'De elevatie van het segment is buiten bereik',
  1988. '116.solution.en': 'Correct the elevation',
  1989. '116.solution': 'Corrigeer de hoogte',
  1990. '117.title.en': 'Obsolete CONST ZN marker',
  1991. '117.title': 'CONST ZN markering verouderd',
  1992. '117.problem.en': 'The segment is marked with obsolete CONST ZN suffix',
  1993. '117.problem': 'Het segment is gemarkeerd met een verouderde CONST ZN toevoeging',
  1994. '117.solution.en': 'Change CONST ZN to (closed)',
  1995. '117.solution': 'Verander CONST ZN naar (afgesloten)',
  1996. '118.title.en': 'Node A: Overlapping segments (slow)',
  1997. '118.title': 'Node A: Overlappende segmenten (langzaam)',
  1998. '118.problem.en': 'The segment is overlapping with the adjacent segment at node A',
  1999. '118.problem': 'Het segment overlapt het aangrenzende segment bij node A',
  2000. '118.solution.en': 'Spread the segments at 2° or delete unneeded geometry point or delete the duplicate segment at node A',
  2001. '118.solution': 'Verdeel de segmenten bij 2° of verwijder overbodige geometriepunt of verwijder het duplicaat-segment bij node A',
  2002. '119.title.en': 'Node B: Overlapping segments (slow)',
  2003. '119.title': 'Node B: Overlappende segmenten (langzaam)',
  2004. '119.problem.en': 'The segment is overlapping with the adjacent segment at node B',
  2005. '119.problem': 'Het segment overlapt het aangrenzende segment bij node B',
  2006. '119.solution.en': 'Spread the segments at 2° or delete unneeded geometry point or delete the duplicate segment at node B',
  2007. '119.solution': 'Verdeel de segmenten bij 2° of verwijder overbodige geometriepunt of verwijder het duplicaat-segment bij node B',
  2008. '120.title.en': 'Node A: Too sharp turn (slow)',
  2009. '120.title': 'Node A: Te scherpe bocht (langzaam)',
  2010. '120.problem.en': 'The drivable segment has a very acute turn at node A',
  2011. '120.problem': 'Het berijdbare segment heeft een zeer scherpe bocht bij node A',
  2012. '120.solution.en': 'Disable the sharp turn at node A or spread the segments at 30°',
  2013. '120.solution': 'Sta de scherpe bocht bij node A niet toe of maak de hoek groter dan 30°',
  2014. '121.title.en': 'Node B: Too sharp turn (slow)',
  2015. '121.title': 'Node B: Te scherpe bocht (langzaam)',
  2016. '121.problem.en': 'The drivable segment has a very acute turn at node B',
  2017. '121.problem': 'Het berijdbare segment heeft een zeer scherpe bocht bij B',
  2018. '121.solution.en': 'Disable the sharp turn at node B or spread the segments at 30°',
  2019. '121.solution': 'Sta de scherpe bocht bij node B niet toe of maak de hoek groter dan 30°',
  2020. '128.title.en': 'User-defined custom check (green)',
  2021. '128.title': 'Door de gebruiker gedefinieerde aangepaste controle (groen)',
  2022. '128.problem.en': 'Some of the segment properties matched against the user-defined regular expression (see Settings→Custom)',
  2023. '128.problem': 'Sommige segmenteigenschappen komen overeen met door gebruiker gedefinieerde opgave (zie Instellingen→Aangepast)',
  2024. '128.solution.en': 'Solve the issue',
  2025. '128.solution': 'Los het probleem op',
  2026. '129.title.en': 'User-defined custom check (blue)',
  2027. '129.title': 'Door de gebruiker gedefinieerde aangepaste controle (blauw)',
  2028. '129.problem.en': 'Some of the segment properties matched against the user-defined regular expression (see Settings→Custom)',
  2029. '129.problem': 'Sommige segmenteigenschappen komen overeen met door gebruiker gedefinieerde opgave (zie Instellingen→Aangepast)',
  2030. '129.solution.en': 'Solve the issue',
  2031. '129.solution': 'Los het probleem op',
  2032. '150.enabled': true,
  2033. '150.problemLink': 'W:Benelux/Freeway',
  2034. '150.title.en': 'No lock on Freeway',
  2035. '150.title': 'Geen lock op snelweg',
  2036. '150.problem.en': 'The Freeway segment should be locked at least to Lvl ${n}',
  2037. '150.problem': 'De snelweg moet op tenminste Lvl ${n} gelockt zijn',
  2038. '150.solution.en': 'Lock the segment',
  2039. '150.solution': 'Lock het segment',
  2040. '151.enabled': true,
  2041. '151.problemLink': 'W:Benelux/Major_Highway',
  2042. '151.title.en': 'No lock on Major Highway',
  2043. '151.title': 'Geen lock op Major Highway',
  2044. '151.problem.en': 'The Major Highway segment should be locked at least to Lvl ${n}',
  2045. '151.problem': 'Het Major Highway segment moet gelockt zijn op Lvl ${n}',
  2046. '151.solution.en': 'Lock the segment',
  2047. '151.solution': 'Lock het segment',
  2048. '152.enabled': true,
  2049. '152.problemLink': 'W:Benelux/Minor_Highway',
  2050. '152.title.en': 'No lock on Minor Highway',
  2051. '152.title': 'Geen lock op Minor Highway',
  2052. '152.problem.en': 'The Minor Highway segment should be locked at least to Lvl ${n}',
  2053. '152.problem': 'Het Minor Highway segment moet gelockt zijn op Lvl ${n}',
  2054. '152.solution.en': 'Lock the segment',
  2055. '152.solution': 'Lock het segment',
  2056. '153.enabled': true,
  2057. '153.problemLink': 'W:Benelux/Ramp',
  2058. '153.title.en': 'No lock on Ramp',
  2059. '153.title': 'Geen lock op op/afrit',
  2060. '153.problem.en': 'The Ramp segment should be locked at least to Lvl ${n}',
  2061. '153.problem': 'De op/afrit zou minimaal gelockt moeten zijn op Lvl ${n}',
  2062. '153.params': {'n': 4},
  2063. '154.enabled': true,
  2064. '154.problemLink': 'W:Benelux/Primary_Street',
  2065. '154.title.en': 'No lock on Primary Street',
  2066. '154.title': 'Geen lock op hoofdweg',
  2067. '154.problem.en': 'The Primary Street segment should be locked at least to Lvl ${n}',
  2068. '154.problem': 'De hoofdweg zou minimaal gelockt moeten zijn op Lvl ${n}',
  2069. '154.solution.en': 'Lock the segment',
  2070. '154.solution': 'Lock het segment',
  2071. '160.enabled': false,
  2072. '161.enabled': true,
  2073. '161.params': {
  2074. 'solutionEN': 'Rename the Major Highway to \'Nnum[ - Nnum]\' or \'Nnum - streetname\' or \'Nnum ri Dir1 / Dir2\'',
  2075. 'regexp': '!/^N([0-9]|[0-9][0-9]|[123][0-9][0-9])( - [NS][0-9]+)?(( ri [^\\/]+( \\/ [^\\/]+)*)|( - .+))?$/'
  2076. },
  2077. '161.problemLink': 'W:Benelux/Major_Highway',
  2078. '161.title.en': 'Incorrect Major Highway name',
  2079. '161.title': 'Verkeerde Major Highway naam',
  2080. '161.problem.en': 'The Major Highway segment has incorrect street name',
  2081. '161.problem': 'Het Major Highway segment heeft een verkeerde straatnaam',
  2082. '161.solution.en': 'Rename the segment in accordance with the guidelines',
  2083. '161.solution': 'Hernoem het segment volgens de richtlijnen',
  2084. '162.enabled': true,
  2085. '162.params': {
  2086. 'solutionEN': 'Rename the Minor Highway to \'Nnum[ - Nnum]\' or \'Nnum - streetname\' or \'Nnum ri Dir1 / Dir2\'',
  2087. 'regexp': '!/^(N[4-9][0-9][0-9]|[SU][0-9]+)( - [NS][0-9]+)?(( ri [^\\/]+( \\/ [^\\/]+)*)|( - .+))?$/'
  2088. },
  2089. '162.problemLink': 'W:Benelux/Minor_Highway',
  2090. '162.title.en': 'Incorrect Minor Highway name',
  2091. '162.title': 'Verkeerde Minor Highway naam',
  2092. '162.problem.en': 'The Minor Highway segment has incorrect street name',
  2093. '162.problem': 'Het Minor Highway segment heeft een verkeerde straatnaam',
  2094. '162.solution.en': 'Rename the segment in accordance with the guidelines',
  2095. '162.solution': 'Hernoem het segment volgens de richtlijnen. LET OP! Er zijn uitzonderingen voor bepaalde belangrijke regionale wegen. In geval van twijfel, eerst overleggen!',
  2096. '172.title.en': 'Unneeded spaces in street name',
  2097. '172.title': 'Onnodige spaties in de straatnaam',
  2098. '172.problem.en': 'Leading/trailing/double space in the street name',
  2099. '172.problem': 'Overbodige spaties voor/achter/in de straatnaam',
  2100. '172.solution.en': 'Remove unneeded spaces from the street name',
  2101. '172.solution': 'Verwijder de overbodige spaties in de straatnaam',
  2102. '173.title.en': 'No space before/after street abbreviation',
  2103. '173.title': 'Geen spatie voor/achter de straat afkorting',
  2104. '173.problem.en': 'No space before (\'1943r.\') or after (\'st.Jan\') an abbreviation in the street name',
  2105. '173.problem': 'Geen spatie voor (\'1943r.\') of achter (\'st.Jan\') een afkorting in de straatnaam',
  2106. '173.solution.en': 'Add a space before/after the abbreviation',
  2107. '173.solution': 'Voeg een spatie voor/achter de afkorting toe',
  2108. '175.title.en': 'Empty street name',
  2109. '175.title': 'Lege straatnaam',
  2110. '175.problem.en': 'The street name has only space characters or a dot',
  2111. '175.problem': 'De straatnaam heeft alleen spaties of punt(en)',
  2112. '175.solution.en': 'In the address properties check the \'None\' box next to the street name, click \'Apply\' OR set a proper street name',
  2113. '175.solution': 'In de adreseigenschappen vink de \'Geen\' optie aan naast de straatnaam, klik op \'Toepassen\' OF vul de juiste straatnaam in',
  2114. '190.title.en': 'Lowercase city name',
  2115. '190.title': 'Plaatsnaam in kleine letters',
  2116. '190.problem.en': 'The city name starts with a lowercase letter',
  2117. '190.problem': 'De plaatsnaam begint met een kleine letter',
  2118. '190.solution.en': 'Use this form to rename the city',
  2119. '190.solution': 'Gebruik dit formulier om de plaatsnaam te hernoemen',
  2120. '192.title.en': 'Unneeded spaces in city name',
  2121. '192.title': 'Onnodige spaties in de plaatsnaam',
  2122. '192.problem.en': 'Leading/trailing/double space in the city name',
  2123. '192.problem': 'Overbodige spaties voor/achter/in de plaatsnaam',
  2124. '192.solution.en': 'Use this form to rename the city',
  2125. '192.solution': 'Gebruik dit formulier om de plaatsnaam te hernoemen',
  2126. '193.title.en': 'No space before/after city abbreviation',
  2127. '193.title': 'Geen spatie voor/achter de afkorting in de plaatsnaam',
  2128. '193.problem.en': 'No space before (\'1943r.\') or after (\'st.Jan\') an abbreviation in the city name',
  2129. '193.problem': 'Geen spatie voor (\'1943r.\') of achter (\'st.Jan\') een afkorting in de plaatsnaam',
  2130. '193.solution.en': 'Use this form to rename the city',
  2131. '193.solution': 'Gebruik dit formulier om de plaatsnaam te hernoemen',
  2132. '200.title.en': 'Node A: Unconfirmed turn on minor road',
  2133. '200.title': 'Node A: Onbevestigde verbinding op weg',
  2134. '200.problem.en': 'The minor drivable segment has an unconfirmed (soft) turn at node A',
  2135. '200.problem': 'Het berijdbare segment heeft een onbevestigd (zachte) bocht op node A',
  2136. '200.solution.en': 'Click the turn indicated with a purple question mark to confirm it. Note: you may need to make the segment \'Two-way\' in order to see those turns',
  2137. '200.solution': 'Klik op de aangegeven verbinding met een paarse vraagteken om het te bevestigen. Opmerking: het kan nodig zijn om het segment 2-richtingen te maken om die verbindingen te zien',
  2138. '201.title.en': 'Node A: Unconfirmed turn on primary road',
  2139. '201.title': 'Node A: Onbevestigde verbinding op hoofdweg',
  2140. '201.problem.en': 'The primary segment has an unconfirmed (soft) turn at node A',
  2141. '201.problem': 'Het hoofdweg segment heeft een onbevestigde (zachte) verbinding bij node A',
  2142. '201.solution.en': 'Click the turn indicated with a purple question mark to confirm it. Note: you may need to make the segment \'Two-way\' in order to see those turns',
  2143. '201.solution': 'Klik op de aangegeven verbinding met een paarse vraagteken om het te bevestigen. Opmerking: het kan nodig zijn om het segment 2-richtingen te maken om die verbindingen te zien',
  2144. '202.title.en': 'BETA: No public connection for public segment (slow)',
  2145. '202.title': 'BETA: Routeerbaar segment lijkt geisoleerd (langzaam)',
  2146. '202.problem.en': 'The public segment is not connected to any other public segment',
  2147. '202.problem': 'Het segment lijkt een publiek toegankelijk segment in het midden van niet publieke segmenten te zijn',
  2148. '202.solution.en': 'Verify if the segment is meant to be a public accessible segment, or it should be changed to a private segment',
  2149. '202.solution': 'Controleer of dit segment wel publiek toegankelijk moet zijn, of van type moet wijzigen',
  2150. '214.params': {'regexp': '/^5|15|25|.+0$/'},
  2151. '215.params': {'regexp': '/^5|15|25|.+0$/'}
  2152. },
  2153. 'MY': {
  2154. '.codeISO': 'MY',
  2155. '.country': 'Malaysia',
  2156. '69.enabled': true,
  2157. '73.enabled': true,
  2158. '150.enabled': true,
  2159. '150.params': {'n': 2},
  2160. '151.enabled': true,
  2161. '151.params': {'n': 2},
  2162. '152.enabled': true,
  2163. '152.params': {'n': 2}
  2164. },
  2165. 'MX': {
  2166. '.codeISO': 'MX',
  2167. '.country': 'Mexico',
  2168. '.updated': '2018-09-19',
  2169. '.author': 'carloslaso',
  2170. '.fallbackCode': 'ES',
  2171. '.lng': ['ES-419'],
  2172. 'city.consider': 'Considera el siguiente nombre de ciudad:',
  2173. 'city.1': 'El nombre de la ciudad es muy corto',
  2174. 'city.2': 'Poner la Abreviación con palabra completa',
  2175. 'city.3': 'Escribir el nombre corto',
  2176. 'city.4': 'Escribir el Nombre de Ciudad',
  2177. 'city.5': 'Corregir Mayúsculas / Minúsculas',
  2178. 'city.6': 'Checar el orden de las palabras',
  2179. 'city.7': 'Checar Abreviación',
  2180. 'city.8r': 'Quitar nombre de País',
  2181. 'city.9': 'Verificar nombre de País',
  2182. 'city.10r': 'Quitar palabra',
  2183. 'city.12': 'Existen nombres iguales con distinto número de Identificador de Ciudad',
  2184. 'city.13a': 'Añadir un espacio',
  2185. 'city.13r': 'Quitar un espacio',
  2186. 'city.14': 'Verificar el número',
  2187. 'props.skipped.problem': 'El segmento ha sido modificado después del 01-05-2014 y bloqueado por Ud., por lo que el Validator no lo verificó',
  2188. 'err.regexp': 'Error analizando la opción #${n}:',
  2189. 'props.disabled': 'WME Validator está desactivado',
  2190. 'props.limit.title': 'Demasiados problemas reportados',
  2191. 'props.limit.problem': 'Hay demasiados problemas reportados por lo que algunos de ellos pueden no mostrarse',
  2192. 'props.limit.solution': 'Deje de seleccionar el segmento y pare el proceso de análisis. Luego presione el botón con la \'✘\' de color rojo (Borrar Reporte)',
  2193. 'props.reports': 'Reportes',
  2194. 'report.save': 'Almacena el reporte',
  2195. 'report.list.andUp': 'y más',
  2196. 'report.list.reportOnly': 'Sólo en el reporte',
  2197. 'report.list.forCountries': 'Para Países:',
  2198. 'report.list.params': 'Parámetros pare configurar en el Paquete de localización:',
  2199. 'report.list.params.set': 'Configuración Actual para ${country}:',
  2200. 'report.list.enabled': 'Hay ${n} parámetros activados para',
  2201. 'report.list.disabled': 'Hay ${n} parámetros desactivados para',
  2202. 'report.list.total': 'Hay ${n} parámetros disponibles',
  2203. 'report.list.title': 'Complete la lista de parámetros para',
  2204. 'report.list.checks': 'Ajustes->Acerca de->Parámetros disponibles',
  2205. 'report.segments': 'Segmentos totales revisados:',
  2206. 'report.reported': 'Reportado(s)',
  2207. 'report.warnings': 'avisos',
  2208. 'report.link.forum': 'foro',
  2209. 'report.link.other': 'enlace',
  2210. 'report.title': 'Reporte del WME Validator',
  2211. 'report.source': 'Fuente del reporte:',
  2212. 'report.filter.streets': 'Calles y vías de Servicio',
  2213. 'report.filter.other': 'Otras vías transitables y no transitables',
  2214. 'report.filter.noneditable': 'segmentos no editables',
  2215. 'report.filter.excluded': 'están excluidas de este reporte',
  2216. 'report.search.updated.since': 'actualizado desde el',
  2217. 'report.search.title': 'Buscar:',
  2218. 'report.search.included': 'están incluidos en el reporte.',
  2219. 'report.beta.warning': 'Advertencia del WME Beta!',
  2220. 'report.beta.text': 'Este reporte está generado en el WME Beta con permalinks beta.',
  2221. 'report.beta.share': 'Por favor, no comparta estos permalinks!',
  2222. 'report.size.warning':
  2223. '<b>Advertencia!</b><br>Este reporte tiene ${n} caracteres por lo que <b>no cabrá</b> en un solo mensaje privado o del foro.\n<br>Por favor añada<b>más filtros</b> para reducir el tamaño del reporte.',
  2224. 'report.note.limit': '* Nota: Existieron muchas irregularidades en el reporte, por lo que algunas no están tomadas en cuenta en el resumen.',
  2225. 'report.forum': 'Para motivar mayor desarrollo, por favor deje su comentario en el',
  2226. 'report.forum.link': 'Hilo del foro de Waze.',
  2227. 'report.thanks': 'Gracias por usar el WME Validator!',
  2228. 'msg.limit.segments': 'Existen demasiados segmentos.\n\nPulse\'Show report\'para revisar el reporte, luego\n',
  2229. 'msg.limit.segments.continue': 'pulse \'▶\' (Play) para continuar.',
  2230. 'msg.limit.segments.clear': 'pulse \'✘\' (Clear) para borrar el reporte.',
  2231. 'msg.pan.text': 'Mueva el mapa para validarlo',
  2232. 'msg.zoomout.text': 'Aleje el zoom para comenzar el WME Validator',
  2233. 'msg.click.text': 'Pulse \'▶\' (Play) para validar el área visible del mapa',
  2234. 'msg.autopaused': 'paro automático',
  2235. 'msg.autopaused.text': '¡Paro automático! Pulse \'▶\' (Play) para continuar.',
  2236. 'msg.finished.text': 'Pulse <b>\'Show report\'</b> para revisar los problemas en el mapa',
  2237. 'msg.finished.tip': 'Pulse \'✉\' (Share) button para hacer un reporte en el\nforo o en un mensaje privado',
  2238. 'msg.noissues.tip': 'Trata de quitar algunas opciones de filtrado o inicia el WME Validator sobre otra área del mapa',
  2239. 'msg.scanning.text': '¡Analizando! Terminando en ~ ${n} min',
  2240. 'msg.scanning.text.soon': '¡Analizando! Terminando en un minuto!',
  2241. 'msg.scanning.tip': 'Pulse el botón de \'Pause\' para pausar o \'■\' (Stop) para detener el análisis',
  2242. 'msg.starting.text': '¡Comenzando! Las capas se han deshabilitado para analizar más rápido!',
  2243. 'msg.starting.tip': 'Utilice el botón\'Pause\' para pausar o el botón \'■\' para parar',
  2244. 'msg.paused.text': '¡En Pausa! pulse el botón de \'▶\' (Play) para continuar.',
  2245. 'msg.paused.tip': 'Para ver el reporte pulse el botón de \'Show report\' (si está disponible) ',
  2246. 'msg.continuing.tip': 'El WME Validator continuará desde la localización donde fue pausado',
  2247. 'msg.settings.text': 'Pulse <b>\'Back\'</b> para regresar a la vista principal',
  2248. 'msg.settings.tip': '¡Pulse el botón de \'Reset defaults\' para resetear todos los ajustes en un click!',
  2249. 'msg.reset.text': 'Todas las opciones y ajustes han sido devueltos a su estado original',
  2250. 'msg.reset.tip': 'Pulse el botón de \'Back\' para regresar a la vista principal',
  2251. 'msg.textarea.pack':
  2252. 'Este es un Script alojado enGreasemonkey/Tampermonkey. Puedes copiar y pegar el texto en un <b>nuevo archivo .user.js</b><br>o <b>pegarlo directamente</b> en Greasemonkey/Tampermonkey',
  2253. 'msg.textarea': 'Por favor copia el texto de abajo y pegalo en el foro o en un mensaje privado',
  2254. 'noaccess.text':
  2255. '<b>Lo sentimos,</b><br>No puedes usar el WME Validator aquí.<br>Por favor revisa <a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488\'>este hilo en el foro</a><br>para mayor información.',
  2256. 'noaccess.tip': '¡Por favor revisa el hilo del foro para mayor información',
  2257. 'tab.switch.tip.on': 'Para encender el resaltado pulsa (Alt+V)',
  2258. 'tab.switch.tip.off': 'Para apagar el resaltado pulsa (Alt+V)',
  2259. 'tab.filter.tip': 'Opciones para filtrar el reporte y los segmentos resaltados',
  2260. 'tab.search.text': 'búsqueda',
  2261. 'tab.search.tip': 'Opciones avanzadas de filtrado para inculír segmentos específicos solamente',
  2262. 'tab.help.tip': '¿Necesita ayuda?',
  2263. 'filter.noneditables.text': 'Excluir los segmentos <b>no editables</b>',
  2264. 'filter.noneditables.tip': 'No reportar los segmentos bloqueados o\nsegmentos fuera de mis áreas de edción',
  2265. 'filter.duplicates.text': 'No incluir segmentos <b>duplicados</b>',
  2266. 'filter.duplicates.tip': 'No mostrar el mismo segmento en distintas\npartes del reporte\n* Nota: Esta opción NO afecta el resaltado',
  2267. 'filter.streets.text': 'No incluir <b>Calles y Vías de Servicio</b>',
  2268. 'filter.other.text': 'No incluir <b>Otras vías conducibles y no conducibles</b>',
  2269. 'filter.other.tip': 'No reportar Vías de Tierra, Vías de estacionamiento, Vías privadas ni \nsegmentos no conducibles',
  2270. 'filter.notes.text': 'No incluir <b>notas</b>',
  2271. 'filter.notes.tip': 'Reportar solamente advertencias y errores',
  2272. 'search.youredits.text': 'Incluir <b>sólo mis ediciones</b>',
  2273. 'search.youredits.tip': 'Incluir sólo los segmentos editados por mí',
  2274. 'search.updatedby.text': '<b>Actualizados por*:</b>',
  2275. 'search.updatedby.tip':
  2276. 'Incluir solamente los segmentos actualizados por el editor especificado\n* Nota: Esta opción está disponible sólo para Country Managers\nEste campo soporta:\n - Lists: Mías, de otro editor\n - wildcards: pal*bra\n - negation: !me *\n* Nota: puedes usar \'me\' para encontrar coincidencias de ti mismo',
  2277. 'search.updatedsince.tip': 'Incluir segmentos editados desde el día epecificado\nFormato de fecha de Firefox: AAAA-MM-DD',
  2278. 'search.city.tip': 'Incluir sólo segmentos con el Nombre de ciudad especificado\nEste campo soporta:\n - lists: Paris, Meudon\n - wildcards: Greater * Area\n - negation: !Paris, *',
  2279. 'search.checks.tip':
  2280. 'Incluir sólo segmentos reportados como se especifica\nEste campo puede buscar:\n - severities: errores\n - check names: Nuevo Camino\n - check IDs: 200\nEste campo soporta:\n - listas: 36, 37\n - comodines: *rotonda*\n - negación: !unconfirmed*, *',
  2281. 'search.checks.example': 'Ejempo: revertir*',
  2282. 'help.text':
  2283. '<b>Tópicos de Ayuda:</b><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=666476#p666476">F.A.Q.</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488">Haz tu pregunta en el foro</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=661300#p661185">Cómo ajustar Validator para tu País</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=663286#p663286">Acerca de"Puede estar incorrecto el Nombre de Ciudad"</a>',
  2284. 'help.tip': 'Abrir en una nueva pestaña en el navegador',
  2285. 'button.scan.tip': 'Comenzar escaneando el área actual del mapa\n* Nota: Esto puede tomar algunos minutos',
  2286. 'button.scan.tip.NA': 'Aleje para comenzar a escanear el área actual del mapa',
  2287. 'button.stop.tip': 'Parar escaneo y regresar a la posición de inicio',
  2288. 'button.clear.tip': 'Borrar reporte y caché de segmento',
  2289. 'button.clear.tip.red': 'Existen demasiados segmentos reportados:\n 1. Pulse \'Muestre reporte\' para generar el reporte.\n 2. Pulse este boton para borrar el reporte y comenzar de nuevo.',
  2290. 'button.report.text': 'Muestra reporte',
  2291. 'button.report.tip': 'Aplicar el filtro y generar un reporte en HTML en una nueva pestaña',
  2292. 'button.BBreport.tip': 'Compartir el reporte en el Foro de Waze o en un Mensaje Privado',
  2293. 'tab.custom.text': 'Ajustes predefinidos',
  2294. 'tab.custom.tip': 'Ajustes predefinidos por el usuario',
  2295. 'tab.scanner.tip': 'Ajustes de escaneado del mapa',
  2296. 'tab.about.tip': 'Acerca del WME Validator',
  2297. 'scanner.sounds.NA': 'Su navegador no soporta AudioContext',
  2298. 'scanner.highlight.text': 'Resaltar problemas en el mapa',
  2299. 'scanner.highlight.tip': 'Resaltar problemas reportados en el mapa',
  2300. 'scanner.slow.text': 'Habilitar"chequeos" lentos',
  2301. 'scanner.slow.tip': 'Habilita análisis profundo del mapa\n* Nota: esta opción puede hacer lento el proceso de escaneo',
  2302. 'scanner.ext.text': 'Reportar resaltados externos',
  2303. 'scanner.ext.tip': 'Reportar segmentos resaltados por WME Toolbox o WME Color Highlights',
  2304. 'advanced.atbottom.text': 'Hasta abajo',
  2305. 'advanced.atbottom.tip': 'Poner WME Validator en la parte de abajo de la página',
  2306. 'custom.template.text': '<a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=749456#p749456\'>Planilla Propia</a>',
  2307. 'custom.template.tip':
  2308. 'Checar con planilla expandible definida por el usuario.\n\nPuedes usar las siguientes variables de expansión:\nDirección:\n${country}, ${state}, ${city}, ${street},\n${altCity[index or delimeter]}, ${altStreet[index or delimeter]}\nPropiedades de segmentos:\n${type}, ${typeRank}, ${toll}, ${direction}, ${elevation}, ${lock},\n${length}, ${ID}\nAyudantes:\n${drivable}, ${roundabout}, ${hasHNs},\n${Uturn}, ${deadEnd}, ${softTurns},\n${deadEndA}, ${partialA},\n${deadEndB}, ${partialB}\nConnectivity:\n${segmentsA}, ${inA}, ${outA}, ${UturnA},\n${segmentsB}, ${inB}, ${outB}, ${UturnB}',
  2309. 'about.tip': 'Abrir liga en una pestaña nueva',
  2310. 'button.reset.text': 'Regresar a los ajustes originales',
  2311. 'button.reset.tip': 'Revertir las opciones de filtrado y ajustes a los originales',
  2312. 'button.list.text': 'Revisiones disponibles...',
  2313. 'button.list.tip': 'Mostrar una lista de revisiones disponibles en WME Validator',
  2314. 'button.wizard.tip': 'Crear un paquete de localización',
  2315. 'button.back.text': 'Regresar',
  2316. 'button.back.tip': 'Cerrar ajustes y regresar a la vista principal',
  2317. '1.problem': 'Los números de salida de los segmentos de la rotonda no son consecutivos',
  2318. '2.problem': 'El segmento tiene nodos geométricos innecesarios',
  2319. '2.solution': 'Simplificar la geometría del segmento pasando el puntero encima del segmento y presionando la letra "d"',
  2320. '3.problem': 'El segmento está resaltado por el WME Toolbox. No representa un problema',
  2321. '4.problem': 'El segmento está resaltado por el WME Toolbox. No representa un problema',
  2322. '5.problem': 'El segmento está resaltado por el WME Toolbox. No representa un problema',
  2323. '6.problem': 'El segmento está resaltado por el WME Toolbox. No representa un problema',
  2324. '7.problem': 'El segmento está resaltado por el WME Toolbox. No representa un problema',
  2325. '8.title': 'WME Toolbox: Numeración de Casas',
  2326. '8.problem': 'El segmento está resaltado por el WME Toolbox. No representa un problema',
  2327. '9.problem': 'El segmento está resaltado por el WME Toolbox. No representa un problema',
  2328. '13.title': 'WME Color Highlights: Bloqueo de un editor',
  2329. '13.problem': 'El segmento está resaltado por el WME Color Highlights. No representa un problema',
  2330. '14.title': 'WME Color Highlights: Vía de peaje / Vía de un sólo sentido',
  2331. '14.problem': 'El segmento está resaltado por el WME Color Highlights. No representa un problema',
  2332. '15.title': 'WME Color Highlights: Recientemente editado',
  2333. '15.problem': 'El segmento está resaltado por elWME Color Highlights. No representa un problema',
  2334. '16.title': 'WME Color Highlights: Rango de v',
  2335. '16.problem': 'El segmento está resaltado por el WME Color Highlights. No representa un problema',
  2336. '17.title': 'WME Color Highlights: Sin Ciudad',
  2337. '17.problem': 'El segmento está resaltado por el WME Color Highlights. No representa un problema',
  2338. '18.title': 'WME Color Highlights: Restricción de tiempo / Tipo de camino resaltado',
  2339. '18.problem': 'El segmento está resaltado por el WME Color Highlights. No representa un problema',
  2340. '19.title': 'WME Color Highlights: Sin nombre',
  2341. '19.problem': 'El segmento está resaltado por el WME Color Highlights. No representa un problema',
  2342. '20.title': 'WME Color Highlights: Filtrar por Ciudad',
  2343. '20.problem': 'El segmento está resaltado por el WME Color Highlights. No representa un problema',
  2344. '21.title': 'WME Color Highlights: Filtrar por nombre alterno de Ciudad (alt. city)',
  2345. '21.problem': 'El segmento está resaltado por el WME Color Highlights. No representa un problema',
  2346. '22.title': 'WME Color Highlights: Filtrar por editor',
  2347. '22.problem': 'El segmento está resaltado por el WME Color Highlights. No representa un problema',
  2348. '23.title': 'Camino sin confirmar',
  2349. '23.problem': 'Cada segmento debe contener como mínimo Información de Estado y País',
  2350. '23.solution': 'Actualice el camino actualizando sus datos',
  2351. '24.enabled': false,
  2352. '24.title': 'Puede contener un nombre de ciudad incorrecto (sólo disponible en el reporte)',
  2353. '24.problem': 'El segmento puede contener el nombre de ciudad incorrecto',
  2354. '24.solution': 'Considere el nombre de ciudad Sugerido y use esta forma para renombrar la ciudad',
  2355. '25.title': 'Sentido desconocido en un camino conducible',
  2356. '25.problem': 'El sentido desconocido del segmento no prevendrá el ruteo por el mismo',
  2357. '25.solution': 'Coloque la dirección del segmento',
  2358. '28.title': 'Nombre de calle en una Rampa de doble sentido',
  2359. '28.problem': 'Si una rampa no tiene nombre, se aplicará el nombre del siguiente camino que lo tenga',
  2360. '28.solution': 'En las propiedades de dirección, active la casilla de \'Ninguno\' seguida del nombre de calle y entonces pulse \'Aplicar\'',
  2361. '29.problem': 'En Waze no se nombran los segmentos de las rotondas',
  2362. '29.solution':
  2363. 'En las propiedades de dirección, seleccione la opción \'Ninguno\' en seguida del nombre de calle, pulse \'Aplicar\' y entonces añada un \'lugar\' de tipo \'distribuidor vial\' y escriba el nombre de la glorieta',
  2364. '34.title': 'Vaciar el nombre alterno de calle',
  2365. '34.problem': 'El nombre alterno de calle está vacío',
  2366. '34.solution': 'Quitar los nombres alternos de calle vacíos',
  2367. '35.title': 'Camino conducible no terminado',
  2368. '35.problem': 'Waze no otorgará rutas por segmentos sin terminar',
  2369. '35.solution': 'Mueva un poco el segmento para que el nodo se añada de manera automática',
  2370. '38.title': 'Restricción de segmento vencida (no grave)',
  2371. '38.problem': 'El segmento tiene una restricción que ya venció',
  2372. '38.solution': 'Pulsar \'Editar restricciones\' y borrar las restricciones vencidas',
  2373. '39.title': 'Restricción de giro vencida (no grave)',
  2374. '39.problem': 'El segmento tiene un giro con restricció vencida',
  2375. '39.solution': 'Pulsar la figura del reloj en seguida de la flecha amarilla y borre las restricciones vencidas',
  2376. '41.enabled': false,
  2377. '41.title': 'Conectividad reversible en un segmento conducible',
  2378. '41.problem': 'Existe un giro que va contra la dirección del segmento en el nodo A',
  2379. '41.solution': 'Haga el segmento de \'doble sentido\', restrinja todos los giros en el nodo A y luego haga el segmento de \'Un sólo sentido (A-B) de nuevo',
  2380. '42.enabled': false,
  2381. '42.title': 'Nodo B: Conectividad reversible en segmento conducible',
  2382. '42.problem': 'Existe un giro que va en contra de la dirección del segmento en el nodo B',
  2383. '42.solution': 'Haga el segmento de \'doble sentido\', restrinja todos los giros en el nodo A y luego haga el segmento de \'Un sólo sentido (A-B) de nuevo',
  2384. '43.problem': 'El segmento está conectado en sí mismo',
  2385. '43.solution': 'Divida el segmento en tres',
  2386. '46.title': 'Nodo A: No existe conectividad hacia adentro del camino conducible',
  2387. '46.problem': 'El segmento conducible no privado no tiene ningún giro permitido en el nodo A',
  2388. '46.solution': 'Seleccione un segmento adyacente y active por lo menos un giro al segmento en el nodo A',
  2389. '47.title': 'Nodo B: No existe conectividad hacia adentro del camino conducible (no grave) ',
  2390. '47.problem': 'El segmento conducible no privado no tiene ningún giro permitido en el nodo B',
  2391. '47.solution': 'Seleccione un segmento adyacente y active por lo menos un giro al segmento en el nodo B',
  2392. '48.title': 'Segmento de glorieta de doble sentido',
  2393. '48.problem': 'El segmento de la glorieta es bidireccional',
  2394. '48.solution': 'Rehacer la glorieta',
  2395. '78.title': 'El segmento que creó comienza y termina en un mismo segmento',
  2396. '78.problem': 'Los dos segmentos comparten los mismos puntos finales',
  2397. '78.solution': 'Parta el segmento. Puede también remover uno de ellos si son idénticos',
  2398. '87.title': 'Múltiples segmentos de salida de la glorieta en el nodo A',
  2399. '87.problem': 'El nodo A en la glorieta tiene más de un segmento de salida conectado',
  2400. '87.solution': 'Re hacer la glorieta',
  2401. '99.title': 'Vuelta en U habilitada en segmento de entrada a la glorieta (no grave)',
  2402. '99.problem': 'El segmento de entrada a la glorieta tiene una vuelta en U habilitada',
  2403. '99.solution': 'Deshabilite la vuelta en U',
  2404. '101.title': 'Camino Cerrado (Sólo disponible en el reporte)',
  2405. '101.problem': 'El segmento está marcado como Cerrado',
  2406. '101.solution': 'Si la construcción ya terminó, reactive la conectividad del segmento y remueva el sufijo',
  2407. '102.title': 'No existe conectividad hacia afuera del segmento en el nodo A (no grave)',
  2408. '102.problem': 'El segmento no tiene habilitado ningún giro hacia afuera en el nodo A',
  2409. '102.solution': 'Permita por lo menos un giro hacia el segmento en el nodo A',
  2410. '103.title': 'No existe conectividad hacia afuera en el nodo B (no grave))',
  2411. '103.problem': 'El segmento no tiene habilitado ningún giro hacia afuera en el nodo B',
  2412. '103.solution': 'Permita por lo menos un giro desde el segmento en el nodo B',
  2413. '104.enabled': false,
  2414. '104.title': 'Segmento tipo ferrocarril usado para comentarios',
  2415. '104.problem': 'El segmentotipo ferrocarril etá siendo usado probablemente para comentarios del mapa',
  2416. '104.solution': 'Remover los comentarios ya que las vías férreas se verán en la aplicación',
  2417. '107.title': 'No hay conexion del Nodo A (no grave)',
  2418. '107.problem': 'El Nodo A del segmento está a dentro del rango de 5m de otro segmento pero no está conectado por una intersección',
  2419. '107.solution': 'Arrastre el nodo A al segmento más cercano de modo que se junten, o muévalo un poco más lejos.',
  2420. '108.title': 'No hay conexión en el nodo B (no grave)',
  2421. '108.problem': 'El nodo B del segmento está dentro del rango de 5m de otro segmento pero no está conectado por una intersección',
  2422. '108.solution': 'Arrastre el nodo B al segmento más cercano de modo que lo toque o muévalo un poco más lejos',
  2423. '109.problem': 'El segmento es de menos de ${n}m de largo, por lo que es difícil verlo en el mapa y puede causar problemas de ruteo',
  2424. '109.solution': 'Aumente el largo del segmento, remuévalo o llévelo al nodo del segmento adyacente',
  2425. '112.title': 'Nombre de rampa demasiado largo',
  2426. '112.problem': 'El nombre de la rampa tiene más de ${n} letras',
  2427. '112.solution': 'Acorte el nombre de la rampa',
  2428. '116.solution': 'Corrija la elevación',
  2429. '117.title': 'Marcador de Zona de Construcción obsoleto',
  2430. '117.problem': 'El segmento está marcado con un sufijo de Zona de Construcción obsoleto',
  2431. '117.solution': 'Cambie el CONST ZN a (cerrado)',
  2432. '118.title': 'En el Nodo A: Segmentos encimados (no grave)',
  2433. '118.problem': 'El segmento está encimado con el segmento adyacente en el nodo A',
  2434. '118.solution': 'Abra los segmentos a 2°, borre el punto geométrico o el segmento duplicado en el nodo A',
  2435. '119.title': 'Nodo B: Segmentos encimados',
  2436. '119.problem': 'El segmento está encimado con el segmento adyacente en el nodoB',
  2437. '119.solution': 'Abra los segmentos a 2°, borre el punto geométrico o el segmento duplicado en el nodo B',
  2438. '120.title': 'Nodo A: Giro demasiado cerrado (no grave)',
  2439. '120.problem': 'El segmento conducible tiene un ángulo de giro muy cerrado en el nodo A',
  2440. '120.solution': 'Prohíba la vuelta cerrada en el nodo A o abra los segmentos a 30°',
  2441. '121.title': 'Nodo B: Giro demasiado cerrado (no grave)',
  2442. '121.problem': 'El segmento conducible tiene un ángulo de giro muy cerrado en el nodo B',
  2443. '121.solution': 'Prohíba la vuelta cerrada en el nodo B o abra los segmentos a 30°',
  2444. '128.title': 'Revisión definida por el usuario (verde)',
  2445. '128.problem': 'Algunas propiedades del segmento van en contra de la expresión regular definida por el usuario (ver Settings→Custom)',
  2446. '128.solution': 'Resuelva el problema',
  2447. '129.title': 'Revisión definida por el usuario (azúl)',
  2448. '129.problem': 'Algunas propiedades del segmento van en contra de la expresión regular definida por el usuario (ver Settings→Custom)',
  2449. '129.solution': 'Resuelva el problema',
  2450. '150.enabled': false,
  2451. '151.enabled': false,
  2452. '152.enabled': false,
  2453. '172.title': 'Espacios innecesarios en el nombre de calle',
  2454. '172.solution': 'Eliminar espacios innecesarios del nombre de la calle',
  2455. '173.title': 'No hay espacio antes/después de la abreviatura en el nombre de calle',
  2456. '173.problem': 'No hay espacio antes de (\'1943r.\') o después (\'Sn.Juan\') de una abreviatura en el nombre de calle',
  2457. '173.solution': 'Añadir un espacio antes/después de la abreviatura',
  2458. '175.title': 'Nombre de calle vacío',
  2459. '175.problem': 'El nombre de la calle tiene solamente espacios o un punto',
  2460. '175.solution': 'En las propiedades de la dirección, elija la casilla \'Ninguno\' enseguida de \'nombre\' o escriba el nombre de la Calle. Presione \'Aplicar\'',
  2461. '190.enabled': false,
  2462. '190.title': 'Nombre de ciudad en minúsculas',
  2463. '190.solution': 'Use esta forma para renombrar la ciudad',
  2464. '192.enabled': false,
  2465. '192.title': 'Espacios innecesarios en el nombre de ciudad',
  2466. '192.solution': 'Use esta forma para renombrar la ciudad',
  2467. '193.title': 'No hay espacios antes/después de la abreviatura de la Ciudad',
  2468. '193.problem': 'No hay espacio antes (\'1943r.\') o después (\'Sn.Juan\') de una abreviatura en el nombre de ciudad',
  2469. '193.solution': 'Use esta forma para renombrar la ciudad',
  2470. '200.enabled': false,
  2471. '200.title': 'En el nodo A: Giro no confirmado en un camino menor',
  2472. '200.problem': 'El segmento del camino menor tiene un giro no confirmado (suave) en el nodo A',
  2473. '200.solution':
  2474. 'Pulse en la flecha de giro indicada con un signo de interrogación morado para confirmarla. Nota: Puede ser necesario hacer el segmento de doble sentido para poder ver dichos giros',
  2475. '201.enabled': false,
  2476. '201.title': 'En el nodo A: Giro no confirmado en una vía primaria',
  2477. '201.problem': 'El segmento de vía primaria tiene un giro no confirmado (suave) en el nodo A',
  2478. '201.solution':
  2479. 'Pulse en la flecha de giro indicada con un signo de interrogación morado para confirmarla. Nota: Puede ser necesario hacer el segmento de doble sentido para poder ver dichos giros',
  2480. '202.enabled': false
  2481. },
  2482. 'LU': {'.codeISO': 'LU', '.country': 'Luxembourg', '.fallbackCode': 'BE', '160.enabled': false},
  2483. 'IT': {
  2484. '.codeISO': 'IT',
  2485. '.country': 'Italy',
  2486. '57.enabled': true,
  2487. '59.enabled': true,
  2488. '90.enabled': true,
  2489. '95.enabled': true,
  2490. '150.enabled': true,
  2491. '151.enabled': true,
  2492. '151.params': {'n': 5},
  2493. '152.enabled': true,
  2494. '152.params': {'n': 4},
  2495. '163.enabled': true,
  2496. '163.params': {'titleEN': 'Ramp name starts with an \'A\'', 'problemEN': 'The Ramp name starts with an \'A\'', 'solutionEN': 'Replace \'A\' with \'Dir.\'', 'regexp': '/^A /i'},
  2497. '170.enabled': true
  2498. },
  2499. 'IL': {
  2500. '.codeISO': 'IL',
  2501. '.country': 'Israel',
  2502. '.author': 'gad_m',
  2503. '.updated': '2014-06-30',
  2504. '.lng': 'HE',
  2505. '.dir': 'rtl',
  2506. 'city.consider': 'בדוק את שם העיר:',
  2507. 'city.1': 'שם העיר קצר מדי',
  2508. 'city.2': 'אל תשתמש בשם מקוצר',
  2509. 'city.3': 'השלם את השם הקצר',
  2510. 'city.4': 'השלם את שם העיר',
  2511. 'city.5': 'תקן אותיות רישיות',
  2512. 'city.6': 'בדוק סדר המילה',
  2513. 'city.7': 'בדוק סימני קיצור',
  2514. 'city.8a': 'הוסף מדינה',
  2515. 'city.8r': 'מחק מדינה',
  2516. 'city.9': 'בדוק מדינה',
  2517. 'city.10a': 'הוסף מילה',
  2518. 'city.10r': 'הורד מילה',
  2519. 'city.11': 'הוסף קוד מדינה',
  2520. 'city.12': 'שמות זהים, אבל קוד זיהוי עיר שונה',
  2521. 'city.13a': 'הוסף רווח',
  2522. 'city.13r': 'הורד רווח',
  2523. 'city.14': 'בדוק את המספר',
  2524. 'props.skipped.title': 'המקטע לא נבדק',
  2525. 'props.skipped.problem': 'הקטע נערך לאחר 2014/5/1 ונעול לעריכה עבורך, אז Validator לא יכול לבדוק אותו',
  2526. 'err.regexp': 'אירעה שגיאה עבור בדיקה #${n}:',
  2527. 'props.disabled': 'התוסף אינו מופעל',
  2528. 'props.limit.title': 'יותר מדי בעיות דווחו',
  2529. 'props.limit.problem': 'ישנם בעיות רבות מדי שדווחו, כך שחלק מהם אולי לא יראו',
  2530. 'props.limit.solution': 'בטל את הבחירה של המקטע והפסק את תהליך סריקה. לאחר מכן לחץ על הכפתור האדום \'✘\' (מחק הדו"ח)',
  2531. 'props.reports': 'בעיות שנמצאו ע"י ',
  2532. 'props.noneditable': 'אינך יכול לערוך מקטע זה',
  2533. 'report.save': 'שמור את הדו"ח',
  2534. 'report.list.andUp': 'ולמעלה',
  2535. 'report.list.severity': 'חומרה',
  2536. 'report.list.reportOnly': 'רק בדיווח',
  2537. 'report.list.forEditors': 'לרמת עורכים',
  2538. 'report.list.forCountries': 'לארצות',
  2539. 'report.list.forStates': 'למדינות',
  2540. 'report.list.forCities': 'לערים',
  2541. 'report.list.params': 'משתנים להגדרת חבילת לוקליזציה',
  2542. 'report.list.params.set': 'תצורה נוכחית עבור ${country}:',
  2543. 'report.list.enabled': '${n} בדיקות מאופשרות עבור',
  2544. 'report.list.disabled': '${n} בדיקות כבויות עבור',
  2545. 'report.list.total': 'יש ${n} בדיקות זמינות',
  2546. 'report.list.title': 'רשימה מלאה של בדיקות עבור',
  2547. 'report.list.see': 'ראה',
  2548. 'report.list.checks': 'הגדרות->אודות->בדיקות זמינות',
  2549. 'report.list.fallback': 'כללי עתודה של תמיכת הלוקליזציה:',
  2550. 'report.and': 'וגם',
  2551. 'report.segments': 'סה"כ מקטעים שנבדקו:',
  2552. 'report.customs': 'בדיקות מותאמות אישית תואמים (#1/#2):',
  2553. 'report.reported': 'דווחו',
  2554. 'report.errors': 'טעויות',
  2555. 'report.warnings': 'אזהרות',
  2556. 'report.notes': 'הערות',
  2557. 'report.contents': 'תוכן:',
  2558. 'report.summary': 'סיכום',
  2559. 'report.title': 'דו"ח WME Validator',
  2560. 'report.share': 'לשתף',
  2561. 'report.generated.by': 'נוצר ע"י',
  2562. 'report.generated.on': 'ב',
  2563. 'report.source': 'מקור הדו"ח:',
  2564. 'report.filter.duplicate': 'מקטעים כפולים',
  2565. 'report.filter.streets': 'רחובות וכבישי שרות',
  2566. 'report.filter.other': 'אחרים - מותרים ואסורים לנהיגה',
  2567. 'report.filter.noneditable': 'מקטעים שלא ניתנים לעריכה',
  2568. 'report.filter.notes': 'הערות',
  2569. 'report.filter.title': 'מסננים:',
  2570. 'report.filter.excluded': 'אינם נכללים בדו"ח זה.',
  2571. 'report.search.updated.by': 'עודכן ע"י',
  2572. 'report.search.updated.since': 'עודכן ב',
  2573. 'report.search.city': 'מ',
  2574. 'report.search.reported': 'דווח כ',
  2575. 'report.search.title': 'חפש:',
  2576. 'report.search.only': 'מקטעים בלבד',
  2577. 'report.search.included': 'נכללים בדו"ח זה.',
  2578. 'report.beta.warning': 'אזהרות עורך בטא:',
  2579. 'report.beta.text': 'דו"ח זה חולל ע"י עורך גירסת בטא וכולל קישורים קבועים לבטא.',
  2580. 'report.beta.share': 'אנא אל תשתף את הפרמלינקים האלה!',
  2581. 'report.size.warning': '<b>אזהרה!</b><br>אורך הדו"ח הוא ${n} תווים<b>הוא לא מתאים להכנס</b> להודעה פרטית אחת בפורום\n<br>אנא הוסף<b>מסננים נוספים</b> על מנת להקטין את גודל הדו"ח',
  2582. 'report.note.limit': '* הערה: היו בעיות רבות מדי שדווחו, כך שחלק מהם אינם נספר בסיכום.',
  2583. 'report.forum': 'לעידוד פיתוח נוסף, אנא השאר משוב ב',
  2584. 'report.thanks': 'תודה שהשתמשת ב WME Validator!',
  2585. 'msg.limit.segments': 'יש יותר מדי מקטעים.\n\nלחץ \'צפה בדו"ח\' בכדי לצפות בדו"ח, אח"כ לחץ \'▶\' כדי להמשיך.',
  2586. 'msg.limit.segments.continue': 'לחץ \'▶\' (בצע) כדי להמשיך',
  2587. 'msg.limit.segments.clear': 'לחץ \'✘\' (מחק) כדי למחוק את הדו"ח.',
  2588. 'msg.pan.text': 'הזז מעט את המפה כדי להתחיל בבדיקה',
  2589. 'msg.zoomout.text': 'הקטן את התצוגה כדי להתחיל את יצירת הדו"ח ע"י WME Validator',
  2590. 'msg.click.text': 'לניתוח שטח המפה הגלוי לחץ על \'▶\' ',
  2591. 'msg.autopaused': 'עצירה אוטומטית',
  2592. 'msg.autopaused.text': 'עצירה אוטומטית! לחץ על \'▶\' כדי להמשיך',
  2593. 'msg.autopaused.tip': 'כלי זה עוצר אוטומטית כשמזיזים את המפה או כשמשנים את גודל החלון',
  2594. 'msg.finished.text': 'לחץ <b>\'צפה בדו"ח\'</b> כדי לצפות בבעיות במפה',
  2595. 'msg.finished.tip': 'לחץ על \'✉\' (שתף) כדי לדווח בפורום\nאו כהודעה פרטית',
  2596. 'msg.noissues.text': 'הסריקה הסתיימה! לא נמצאו בעיות!',
  2597. 'msg.noissues.tip': 'נסה לכבות חלק מהמסננים או התחל מחדש את הסריקה',
  2598. 'msg.scanning.text': 'סורק! יסיים בעוד כ ${n} דקות לערך',
  2599. 'msg.scanning.text.soon': 'סורק! יסיים בעוד כדקה!',
  2600. 'msg.scanning.tip': 'לחץ על \'השהה\' כדי לעצור או על \'■\' כדי לעצור',
  2601. 'msg.starting.text': 'מכין את הדו"ח! השכבות מוסתרות כדי לסרוק מהר יותר',
  2602. 'msg.starting.tip': 'לחץ על \'השהה\' או על \'■\' כדי לעצור',
  2603. 'msg.paused.text': 'בהשהייה! לחץ \'▶\' כדי להמשיך',
  2604. 'msg.paused.tip': 'לצפיה בדו"ח לחץ על \'צפה בדו"ח\' (אם זמין)',
  2605. 'msg.continuing.text': 'ממשיך!',
  2606. 'msg.continuing.tip': 'WME Validator ימשיך מהמקום בו הפסיק',
  2607. 'msg.settings.text': 'לחץ <b>\'חזרה\'</b> לחזרה למסך הראשי',
  2608. 'msg.settings.tip': 'לחץ \'אפס לברירת מחדל\' כדי לאפס את כל ההגדרות',
  2609. 'msg.reset.text': 'כל אפשרויות הסינון וההגדרות אופסו לברירת המחדל שלהם',
  2610. 'msg.reset.tip': 'לחץ על \'חזרה\' כדי לחזור לתצוגה הראשית',
  2611. 'msg.textarea.pack': 'אנא העתק את הטקסט שלהלן ולאחר מכן הדבק אותו בקובץ <b>.user.js</b> חדש',
  2612. 'msg.textarea': 'אנא העתק את הטקסט שלהלן ולאחר מכן הדבק אותו בשרשור בפורום או כהודעה פרטית',
  2613. 'noaccess.text':
  2614. '<b>מצטער,</b><br>אינך יכול להשתמש ב WME Validator כאן.<br>אנא בדוק <a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488">את השרשור בפורום</a><br>למידע נוסף.',
  2615. 'noaccess.tip': 'אנא בדוק את השרשור בפורום למידע נוסף!',
  2616. 'tab.switch.tip.on': 'לחץ להפעלה (Alt+V)',
  2617. 'tab.switch.tip.off': 'לחץ לכיבוי (Alt+V)',
  2618. 'tab.filter.text': 'מסננים',
  2619. 'tab.filter.tip': 'אפשרויות סינון הדו"ח והדגשות בעורך המפה',
  2620. 'tab.search.text': 'חיפוש',
  2621. 'tab.search.tip': 'אפשרויות סינון מתקדמות כדי לכלול מקטעים ספציפיים בלבד',
  2622. 'tab.help.text': 'עזרה',
  2623. 'tab.help.tip': 'צריך עזרה?',
  2624. 'filter.noneditables.text': 'הסתר מקטעים <b>שאינם ניתנים לעריכה</b>',
  2625. 'filter.noneditables.tip': 'אל תדווח על מקטעים נעולים או\nמקטעים מחוץ לאיזור העריכה שלך',
  2626. 'filter.duplicates.text': 'הסתר <b>כפילויות</b> במקטעים',
  2627. 'filter.duplicates.tip': 'אל תראה את אותו המקטע בחלקים\nשונים של הדו"ח\n* שים לב: אפשרות זו אינה משפיעה על ההדגשות',
  2628. 'filter.streets.text': 'הסתר <b>רחוב</b> ו<b>כביש שרות</b>',
  2629. 'filter.streets.tip': 'אל תכלול בדו"ח מקטעים מסוג רחוב וכביש שרות',
  2630. 'filter.other.text': 'הסתר אחרים ש<b>מותרים לנהיגה</b> וכל ה<b>אסורים לנהיגה</b>',
  2631. 'filter.other.tip': 'אל תכלול בדו"ח מקטעים מסוג דרך עפר, מגרש חניה, כביש פרטי\nומקטעים שאסורים לנהיגה',
  2632. 'filter.notes.text': 'הסתר <b>הערות</b>',
  2633. 'filter.notes.tip': 'דווח רק על אזהרות ושגיאות',
  2634. 'search.youredits.text': 'כלול <b>רק עריכות שלך</b>',
  2635. 'search.youredits.tip': 'כלול רק מקטעים שערכת בעצמך',
  2636. 'search.updatedby.text': '<b>עודכן על ידי:</b>',
  2637. 'search.updatedby.tip': 'כלול סיגמנטים שנערכו ע"י עורך מסויים\nשדה זה תומך ב:\n- רשימות: me, otherEditorName\n- תווים חופשיים: world*\n- שלילה: !me, *\nשים לב: ניתן להשתמש ב me כהתאמה לעצמך',
  2638. 'search.updatedby.example': 'דוגמה: אני',
  2639. 'search.updatedsince.text': '<b>עודכן ב:</b>',
  2640. 'search.updatedsince.tip': 'כלול מקטעים שנערכו מאז תאריך מסויים\nפורמט תאריך: YYYY-MM-DD',
  2641. 'search.updatedsince.example': 'YYYY-MM-DD',
  2642. 'search.city.text': '<b>שם העיר:</b>',
  2643. 'search.city.tip': 'כלול מקטעים בעלי שם עיר מסויימת\nשדה זה תומך ב:\nרשימות: ירושלים, אשקלון\nתווים כלליים: תל *\nשלילה: !ירושלים, *',
  2644. 'search.city.example': 'דוגמה: !ירושלים, *',
  2645. 'search.checks.text': '<b>דווח כ:</b>',
  2646. 'search.checks.tip':
  2647. 'כלול רק מקטעים שדווחו לגביהם:\nשדה זה תואם:\n- חומרת הבעיה: errors\n- שמות קבועים: New road\n- מספרים מזהים: 40\nשדה זה תומך ב:\n- רשימות: 36,37\n- תווים כלליים: *roundabout*\n- שלילה: !soft turns*, *\n',
  2648. 'search.checks.example': 'דוגמה: *הפוך*',
  2649. 'help.text':
  2650. '<b>נושאי עזרה:</b><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=666476#p666476">שאלות נפוצות</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488">שאל את שאלתך בפורום</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?t=76488&p=661300#p661185">כיצד להתאים את ה Validator למדינה שלך</a><br><a target="_blank" href="https://www.waze.com/forum/viewtopic.php?f=819&t=76488&p=663286#p663286">אודות "יתכן ששם העיר שגוי"</a>',
  2651. 'help.tip': 'פתח בכרטיסיית דפדפן חדשה',
  2652. 'button.scan.tip': 'התחל לסרוק את המפה הנוכחית\nשים לב: פעולה זו יכולה לקחת מספר דקות',
  2653. 'button.scan.tip.NA': 'הקטן את התצוגה כדי להתחיל את יצירת הדו"ח באיזור המפה הנוכחי',
  2654. 'button.pause.tip': 'עצור את הסריקה',
  2655. 'button.continue.tip': 'המשך לסרוק את המפה',
  2656. 'button.stop.tip': 'עצור את הסריקה וחזור להתחלה',
  2657. 'button.clear.tip': 'מחק הדו"ח ומקטעים מהזיכרון',
  2658. 'button.clear.tip.red': 'יותר מדי דיווחים על בעיות במקטעים:\n1. לחץ \'צפה בדו"ח להפיק את הדו"ח\'.\n2. לחץ על כפתור זה כדי למחוק את הדו"ח ולהתחיל מחדש.',
  2659. 'button.report.text': 'צפה בדו"ח',
  2660. 'button.report.tip': 'השתמש בהגדרות המסננים והפק דו"ח HTML שיפתח בכרטיסיית דפדפן חדשה',
  2661. 'button.BBreport.tip': 'שתף את הדו"ח בפורום של וייז או בהודעה פרטית',
  2662. 'button.settings.tip': 'הגדרות',
  2663. 'tab.custom.text': 'מותאם',
  2664. 'tab.custom.tip': 'הגדרת בדיקות מותאמות אישית לפי הגדרות המשתמש',
  2665. 'tab.settings.text': 'הגדרות',
  2666. 'tab.scanner.text': 'סורק',
  2667. 'tab.scanner.tip': 'הגדרות סריקה',
  2668. 'tab.about.text': 'אודות</span>',
  2669. 'tab.about.tip': 'אודות WME Validator',
  2670. 'scanner.sounds.text': 'אפשר צלילים',
  2671. 'scanner.sounds.tip': 'ציפצופים וביפים בזמן סריקה',
  2672. 'scanner.sounds.NA': 'הדפדפן שלך אינו תומך ב AudioContext',
  2673. 'scanner.highlight.text': 'הדגש בעיות על גבי המפה',
  2674. 'scanner.highlight.tip': 'הדגר בעיות מדווחות על גבי המפה',
  2675. 'scanner.slow.text': 'אפשר בדיקות המוגדרות כ"איטי"',
  2676. 'scanner.slow.tip': 'מאפשר ניתוח מעמיק של המפה\n* שים לב: אפשרות זו עלולה להאט את תהליך הסריקה',
  2677. 'scanner.ext.text': 'דווח על הדגשות ממקורות אחרים',
  2678. 'scanner.ext.tip': 'דווח על מקטעים שהודגשו ע"י WME Toolbox או WME Color Highlights',
  2679. 'custom.template.text': '<a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=749456#p749456\'>תבנית מותאמת אישית</a>',
  2680. 'custom.template.tip':
  2681. 'תבנית להרחבת בדיקות מותאמת אישית המוגדרת על ידי משתמש.\n\nניתן להשתמש במשתנים הבאים\n${country}, ${state}, ${city}, ${street},\n${type}, ${typeRank}, ${toll}, ${direction}, ${elevation}, ${lock},\n${length}, ${ID}, ${roundabout}, ${hasHNs},\n${drivable}, ${softTurns}, ${Uturn}, ${deadEnd},\n${segmentsA}, ${inA}, ${outB}, ${UturnA},\n${segmentsB}, ${inB}, ${outB}, ${UturnB}',
  2682. 'custom.template.example': 'דוגמה: ${city}',
  2683. 'custom.regexp.text': '<a target="_blank" href="https://developer.mozilla.org/docs/JavaScript/Guide/Regular_Expressions">ביטוי רגולרי</a> מותאם אישית',
  2684. 'custom.regexp.tip': 'ביטוי רגולרי מותאם אישית ע"י המשתמש התואם את התבנית\nהתאמה: /regexp/\nשלילה: !/regexp/\nכתוב מידע של התוכנית לקונסולה (debug)\n',
  2685. 'custom.regexp.example': 'דוגמה: /גבעת שמואל/',
  2686. 'about.tip': 'פתח קישור בכרטיסיית דפדפן חדשה',
  2687. 'button.reset.text': 'אפס לברירת מחדל',
  2688. 'button.reset.tip': 'אפס אפשרויות סינון והגדרות לברירת המחדל',
  2689. 'button.list.text': 'בדיקות זמינות...',
  2690. 'button.list.tip': 'הראה את רשימ הבדיקות הזמינות של WME Validator',
  2691. 'button.wizard.tip': 'צור קבצי לוקליזציה',
  2692. 'button.back.text': 'חזרה',
  2693. 'button.back.tip': 'סגור הגדרות וחזור לחלון ראשי',
  2694. '1.enabled': false,
  2695. '1.title': 'WME Toolbox: כיכר שעלול ליצור בעיות',
  2696. '1.problem': 'מספרים מזהים של צמתים של מקטעים בכיכר אינם רצופים',
  2697. '1.solution': 'בנה מחדש את הכיכר',
  2698. '2.title': 'WME Toolbox: מקטע פשוט',
  2699. '2.problem': 'למקטע יש מפרקים מיותרים',
  2700. '2.solution': 'פשט את מפרקי המקטע ע"י מעבר עם העכבר מעל המקטע ולחיצה על מקש "d"',
  2701. '3.title': 'WME Toolbox: נעילה ברמה 2',
  2702. '3.problem': 'המקטע מודגש ע"י WME Toolbox. זו אינה שגיאה',
  2703. '4.title': 'WME Toolbox: נעילה ברמה 3',
  2704. '4.problem': 'המקטע מודגש ע"י WME Toolbox. זו אינה שגיאה',
  2705. '5.title': 'WME Toolbox: נעילה ברמה 4',
  2706. '5.problem': 'המקטע מודגש ע"י WME Toolbox. זו אינה שגיאה',
  2707. '6.title': 'WME Toolbox: נעילה ברמה 5',
  2708. '6.problem': 'המקטע מודגש ע"י WME Toolbox. זו אינה שגיאה',
  2709. '7.title': 'WME Toolbox: נעילה ברמה 6',
  2710. '7.problem': 'המקטע מודגש ע"י WME Toolbox. זו אינה שגיאה',
  2711. '8.title': 'WME Toolbox: מספרי בתים',
  2712. '8.problem': 'המקטע מודגש ע"י WME Toolbox. זו אינה שגיאה',
  2713. '9.title': 'WME Toolbox: מקטע עם הגבלות לפי שעות',
  2714. '9.problem': 'המקטע מודגש ע"י WME Toolbox. זו אינה שגיאה',
  2715. '13.title': 'WME Color Highlights: נעילת עורך',
  2716. '13.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2717. '14.title': 'WME Color Highlights: כביש אגרה / כביש חד סיטרי',
  2718. '14.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2719. '15.title': 'WME Color Highlights: נערך לאחרונה',
  2720. '15.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2721. '16.title': 'WME Color Highlights: דרגה של כביש',
  2722. '16.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2723. '17.title': 'WME Color Highlights: ללא עיר',
  2724. '17.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2725. '18.title': 'WME Color Highlights: הגבלות לפי שעות / סוג כביש מודגש',
  2726. '18.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2727. '19.title': 'WME Color Highlights: ללא שם',
  2728. '19.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2729. '20.title': 'WME Color Highlights: מסנן לפי עיר',
  2730. '20.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2731. '21.title': 'WME Color Highlights: מסנן לפי עיר',
  2732. '21.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2733. '22.title': 'WME Color Highlights: מסנן לפי עורך',
  2734. '22.problem': 'המקטע מודגש ע"י WME Color Highlights. זו אינה שגיאה',
  2735. '23.title': 'מקטע ללא שם',
  2736. '23.problem': 'כל מקטע חייב לפחות הגדרת מדינה',
  2737. '23.solution': 'אשר את הכביש ע"י עריכת הפרטים שלו',
  2738. '24.title': 'יתכן ששם העיר שגוי (זמין רק בדו"ח)',
  2739. '24.problem': 'יתכן ששם העיר של המקטע שגוי (זמין רק בדו"ח)',
  2740. '24.solution': 'שקול להשתמש בשם העיר שמוצע והשתמש בטופס זה כדי לשנות שם עיר',
  2741. '25.title': 'כיוון לא ידוע של כביש מותר בנהיגה',
  2742. '25.problem': 'כיוון "לא ידוע" של כביש לא מונע ניווט דרכו',
  2743. '25.solution': 'קבע את כיוון הנסיעה של הכביש',
  2744. '27.enabled': true,
  2745. '27.title': 'שם עיר על מסילת רכבת',
  2746. '27.problem': 'שם עיר על מסילת רכבת עלול לטשטש את גבולות העיר',
  2747. '27.solution': 'בשדה \'עיר\' הדלק את האפשרות \'אין\' ואז \'החל\'',
  2748. '28.enabled': false,
  2749. '28.title': 'שם רחוב למחבר דו כיווני',
  2750. '28.problem': 'כשהמחבר ללא שם, הוא יקבל את שמו מהכביש אליו הוא מוביל',
  2751. '28.solution': 'בשדה \'רחוב\' הדלק את האפשרות \'אין\' ואז \'החל\'',
  2752. '29.title': 'לכיכר יש שם רחוב',
  2753. '29.problem': 'בווויז לא נותנים שמות למקטעים השייכים לכיכר',
  2754. '29.solution': 'בשדה \'רחוב\' הדלק את האפשרות \'אין\', לחץ \'החל\'. כדי לתת שם לכיכר הוסף \'מקום\' עם קטגורית \'צומת\' ותן לו את שם הכיכר',
  2755. '34.title': '\'שם חלופי\' ריק',
  2756. '34.problem': 'שדה \'שם חלופי\' של הרחוב ריק',
  2757. '34.solution': 'הסר את ה\'שם חלופי\' של הרחוב',
  2758. '35.title': 'כביש מותר לנהיגה קטוע',
  2759. '35.problem': 'וייז לא ינווט מכביש קטוע',
  2760. '35.solution': 'הזז מעט את המקטע כך שיתווסף אוטומטית צומת המסיים את המקטע',
  2761. '36.title': 'צומת A: מיותר (איטי)',
  2762. '36.problem': 'מקטעים סמוכים בצומת A זהים',
  2763. '36.solution': 'בחר את צומת A ולחץ על \'מחיקה\' כדי לאחד את המקטעים',
  2764. '37.title': 'צומת B: מיותר (איטי)',
  2765. '37.problem': 'מקטעים סמוכים בצומת B זהים',
  2766. '37.solution': 'בחר את צומת B ולחץ על \'מחיקה\' כדי לאחד את המקטעים',
  2767. '38.title': 'פג תוקף של מגבלה על מקטע (איטי)',
  2768. '38.problem': 'למקטע יש מגבלות שפג תוקפם',
  2769. '38.solution': 'לחץ על "הוסף הגבלות" ומחק מגבלות שפג תוקפם',
  2770. '39.title': 'פג תוקף של מגבלה על פניה (איטי)',
  2771. '39.problem': 'במקטע יש פניה עם מגבלה שפג תוקפה',
  2772. '39.solution': 'לחץ על סימון השעון שליד החץ הצהוב של הפניה ומחק הגבלות שפג תוקפן',
  2773. '41.enabled': false,
  2774. '41.title': 'צומת A: קישוריות הפוכה של כביש מותר לנהיגה',
  2775. '41.problem': 'יש פניה הפוכה לכיוון הנסיעה של המקטע בצומת A',
  2776. '41.solution': 'הפוך את המקטע לדו כיווני, אסור את כל הפניות בצומת A ואחר כך הפוך חזרה את המקטע ל"חד כיווני (A→B)"',
  2777. '42.enabled': false,
  2778. '42.title': 'צומת B: קישוריות הפוכה של כביש מותר לנהיגה',
  2779. '42.problem': 'יש פניה הפוכה לכיוון הנסיעה של המקטע בצומת B',
  2780. '42.solution': 'הפוך את המקטע לדו כיווני, אסור את כל הפניות בצומת B ואחר כך הפוך חזרה את המקטע ל"חד כיווני (B→A)"',
  2781. '43.title': 'קישור לעצמי',
  2782. '43.problem': 'המקטע יוצר צומת עם המקטע עצמו',
  2783. '43.solution': 'פצל את המקטע לשלושה מקטעים',
  2784. '44.title': 'אין חיבור ביציאה',
  2785. '44.problem': 'מקטע מותר בנהיגה ללא אף פניה מאופשרת ביציאה ממנו',
  2786. '44.solution': 'אפשר לפחות פניה אחת ביציאה מהמקטע',
  2787. '45.title': 'אין חיבור בכניסה',
  2788. '45.problem': 'אין אף פניה מאופשרת בכניסה למקטע המותר בנהיגה',
  2789. '45.solution': 'בחר מקטע סמוך ואפשר פניה למקטע זה',
  2790. '46.title': 'צומת A: אין מקטע מותר לנהיגה המוביל לצומת זו (איטי)',
  2791. '46.problem': 'לכביש מותר לנהיגה אין מקטע סמוך עם פניה מאופשרת המובילה אליו בצומת A',
  2792. '46.solution': 'בחר מקטע סמוך, אפשר פניה אל המקטע בצומת A',
  2793. '47.title': 'צומת B: אין מקטע מותר לנהיגה המוביל לצומת זו (איטי)',
  2794. '47.problem': 'לכביש מותר לנהיגה אין מקטע סמוך עם פניה מאופשרת המובילה אליו בצומת B',
  2795. '47.solution': 'בחר מקטע סמוך, אפשר פניה אל המקטע בצומת B',
  2796. '48.title': 'מקטע דו כיווני בכיכר',
  2797. '48.problem': 'מקטע מותר לנהיגה בכיכר הוא דו כיווני',
  2798. '48.solution': 'צור מחדש את הכיכר',
  2799. '50.title': 'אין חיבור לכיכר (איטי)',
  2800. '50.problem': 'למקטע מותר לנהיגה בכיכר אין חיבור למקטע סמוך בכיכר',
  2801. '50.solution': 'אפשר פניה במקטע סמוך או צור מחדש את הכיכר',
  2802. '57.enabled': true,
  2803. '57.title': 'שם עיר במחבר עם שם רחוב',
  2804. '57.problem': 'שם עיר במחבר עם שם רחוב עלול להשפיע על תוצאות החיפוש',
  2805. '57.solution': 'בשדה \'עיר\' הדלק את האפשרות \'אין\' ואז \'החל\'',
  2806. '59.enabled': true,
  2807. '59.title': 'שם עיר בכביש מהיר',
  2808. '59.problem': 'שם עיר בכביש מהיר עלול לטשטש את גבולות העיר',
  2809. '59.solution': 'בשדה \'עיר\' הדלק את האפשרות \'אין\' ואז \'החל\'',
  2810. '77.enabled': false,
  2811. '77.title': 'פניית פרסה ברחוב ללא מוצא',
  2812. '77.problem': 'מאופשרת פניית פרסה במקטע מותר לנהיגה ללא מוצא',
  2813. '77.solution': 'אל תאפשר פניית פרסה',
  2814. '78.title': 'שני מקטעים המותרים לנהיגה מסתיימים באותן נקודות (איטי)',
  2815. '78.problem': 'שני מקטעים המותרים לנהיגה בעלי אותן נקודות קצה',
  2816. '78.solution': 'פצל את המקטע לשני מקטעים. יתכן ויש צורך למחוק את אחד המקטעים אם הם זהים',
  2817. '87.title': 'מקטעים מרובים יוצאים מצומת A',
  2818. '87.problem': 'לצומת A בכיכר מחובר יותר ממקטע יציאה אחד',
  2819. '87.solution': 'צור מחדש את הכיכר',
  2820. '90.enabled': true,
  2821. '90.title': 'כביש מהיר דו סיטרי',
  2822. '90.problem': 'רוב הכבישים המהירים מפוצלים לשני מקטעים חד סיטריים כך שיתכן שיש טעות במקטע',
  2823. '90.solution': 'בדוק את כיוון הנסיעה של הכביש המהיר',
  2824. '91.title': 'מחבר דו כיווני',
  2825. '91.problem': 'רוב המחברים הם חד סיטריים, כך שיתכן שזו שגיאה שמחבר זה מוגדר כדו-סיטרי',
  2826. '91.solution': 'בדוק כיווני נסיעה במחבר',
  2827. '99.title': 'פניית פרסה מאופשרת בכניסה לכיכר (איטי)',
  2828. '99.problem': 'פניית פרסה מאופשרת במקטע הנכנס לכיכר',
  2829. '99.solution': 'אל תאפשר פניית פרסה',
  2830. '101.title': 'כביש סגור (זמין רק בדו"ח)',
  2831. '101.problem': 'המקטע מסומן כסגור',
  2832. '101.solution': 'אם הבנייה הסתיימה, שחזר את קישוריות המקטע והסר את הסיומת',
  2833. '102.title': 'צומת A: אין חיבור ביציאה של כביש מותר בנהיגה (איטי)',
  2834. '102.problem': 'מקטע מותר בנהיגה ללא אף יציאה מאופשרת בצומת A',
  2835. '102.solution': 'אפשר לפחות יציאה אחת מהמקטע בצומת A',
  2836. '103.title': 'צומת B: אין חיבור ביציאה של כביש מותר בנהיגה (איטי)',
  2837. '103.problem': 'מקטע מותר בנהיגה ללא אף יציאה מאופשרת בצומת B',
  2838. '103.solution': 'אפשר לפחות יציאה אחת מהמקטע בצומת B',
  2839. '104.title': 'מסילת רכבת משמשת כהערה',
  2840. '104.problem': 'נראה שמקטע מסוג מסילת רכבת משמש כהערה',
  2841. '104.solution': 'הסר את המקטע כיוון שמסילת רכבת תיראה במסך של משתמש הקצה',
  2842. '107.title': 'צומת A: אין חיבור (איטי)',
  2843. '107.problem': 'צומת A של מקטע מותר לנהיגה נמצאת במרחק של 5 מטרים ממקטע אחר מותר לנהיגה שאינו מחובר',
  2844. '107.solution': 'חבר את צומת A למקטע הקרוב ביותר או הרחק אותו מעט',
  2845. '108.title': 'צומת B: אין חיבור (איטי)',
  2846. '108.problem': 'צומת B של מקטע מותר לנהיגה נמצאת במרחק של 5 מטרים ממקטע אחר מותר לנהיגה שאינו מחובר',
  2847. '108.solution': 'חבר את צומת B למקטע הקרוב ביותר או הרחק אותו מעט',
  2848. '109.enabled': false,
  2849. '109.title': 'מקטע קצר מדי',
  2850. '109.problem': 'מקטע מותר לנהיגה ללא קצה הוא פחות מ 2 מטר. וקשה לראות זאת במפה',
  2851. '109.solution': 'הארך את המקטע, מחק אותו או חבר אותו למקטע סמוך',
  2852. '112.title': 'לשם המחבר יש יותר מ ${n} אותיות',
  2853. '112.problem': 'שם המחבר ארוך מדי',
  2854. '112.solution': 'קצר את שם המחבר',
  2855. '114.enabled': false,
  2856. '114.title': 'צומת A: מקטע אסור לנהיגה מחובר למקטע מותר לנהיגה (איטי)',
  2857. '114.problem': 'מקטע אסור לנהיגה יוצר צומת עם מקטע מותר לנהיגה בצומת A',
  2858. '114.solution': 'נתק את צומת A ממקטעים מותרים לנהיגה',
  2859. '115.enabled': false,
  2860. '115.title': 'צומת B: מקטע אסור לנהיגה מחובר למקטע מותר לנהיגה (איטי)',
  2861. '115.problem': 'מקטע אסור לנהיגה יוצר צומת עם מקטע מותר לנהיגה בצומת B',
  2862. '115.solution': 'נתק את צומת B ממקטעים מותרים לנהיגה',
  2863. '116.title': 'גובה לא בטווח המותר',
  2864. '116.problem': 'גובה המקטע לא בטווח המותר',
  2865. '116.solution': 'תקן את הגובה',
  2866. '117.title': 'סימון של קבוע ישן ZN',
  2867. '117.problem': 'המקטע מסומן בסימון של קבוע שלא בתוקף: ZN',
  2868. '117.solution': 'שנה את הקבוע ZN ל: (סגור)',
  2869. '118.title': 'צומת A: מקטעים חופפים (איטי)',
  2870. '118.problem': 'המקטע חופף למקטע סמוך בצומת A',
  2871. '118.solution': 'הזז את המקטע ב 2° או מחק מפרקים או מחק את המקטע הכפול בצומת A',
  2872. '119.title': 'צומת B: מקטעים חופפים (איטי)',
  2873. '119.problem': 'המקטע חופף למקטע סמוך בצומת B',
  2874. '119.solution': 'הזז את המקטע ב 2° או מחק מפרקים או מחק את המקטע הכפול בצומת B',
  2875. '120.title': 'צומת A: פנייה חדה מדי (איטי)',
  2876. '120.problem': 'במקטע מותר לנהיגה יש פנייה מאד חדה בצומת A',
  2877. '120.solution': 'אסור את הפנייה החדה בצומת A או שנה את זווית הפניה ל 30°',
  2878. '121.title': 'צומת B: פנייה חדה מדי (איטי)',
  2879. '121.problem': 'במקטע מותר לנהיגה יש פנייה מאד חדה בצומת B',
  2880. '121.solution': 'אסור את הפנייה החדה בצומת B או שנה את זווית הפניה ל 30°',
  2881. '128.title': 'בדיקה מותאמת אישית ע"י המשתמש (ירוק)',
  2882. '128.problem': 'חלק ממאפייני המקטע תואמים לביטוי רגולרי שהוגדר ע"י המשתמש (ראה הגדרות->תבנית מותאמת אישית)',
  2883. '128.solution': 'פתור את הבעיה (מי שהגדיר בדיקה מותאמת אישית אמור לדעת כיצד לפתור את הבעיה)',
  2884. '129.title': 'בדיקה מותאמת אישית ע"י המשתמש (כחול)',
  2885. '129.problem': 'חלק ממאפייני המקטע תואמים לביטוי רגולרי שהוגדר ע"י המשתמש (ראה הגדרות->תבנית מותאמת אישית)',
  2886. '129.solution': 'פתור את הבעיה (מי שהגדיר בדיקה מותאמת אישית אמור לדעת כיצד לפתור את הבעיה)',
  2887. '171.enabled': false,
  2888. '171.title': 'שם רחוב מקוצר באופן שגוי',
  2889. '171.problem': 'בשם הרחוב יש קיצור שגוי',
  2890. '171.solution': 'בדוק אותיות קטנות / גדולות, רווח לפני / אחרי הקיצור ובהתאם לטבלת הקיצורים',
  2891. '172.title': 'מרווחים מיותרים בשם של רחוב',
  2892. '172.problem': 'מרווח כפול/לפני/אחרי שם של רחוב',
  2893. '172.solution': 'מחק מרווחים מיותרים בשם של הרחוב',
  2894. '173.enabled': false,
  2895. '173.title': 'אין רווח לפני/אחרי שם קיצור של רחוב',
  2896. '173.problem': 'חסר מרווח לפני או אחרי שימוש בקיצור בשם של רחוב',
  2897. '173.solution': 'הוסף רווח לפני/אחרי הקיצור',
  2898. '175.title': 'שם רחוב ריק',
  2899. '175.problem': 'שם הרחוב מכיל רק מרווחים או נקודות',
  2900. '175.solution': 'במאפייני הכתובת, סמן את תיבת \'אין\' ליד שם הרחוב, לחץ \'החל\', או תן שם תקין לרחוב',
  2901. '190.enabled': false,
  2902. '190.title': 'שם העיר באותיות קטנות',
  2903. '190.problem': 'שם העיר מתחיל באות קטנה',
  2904. '190.solution': 'השתמש בטופס זה כדי לשנות שם עיר',
  2905. '192.title': 'מרווחים מיותרים בשם של עיר',
  2906. '192.problem': 'מרווח כפול/לפני/אחרי שם של עיר',
  2907. '192.solution': 'השתמש בטופס זה כדי לשנות שם עיר',
  2908. '193.enabled': false,
  2909. '193.title': 'מרווחים לפני/אחרי קיצור של שם עיר',
  2910. '193.problem': 'מרווחים אסורים לפני או אחרי שימוש בקיצור בשם של עיר',
  2911. '193.solution': 'השתמש בטופס זה כדי לשנות שם עיר',
  2912. '200.enabled': false,
  2913. '200.title': 'צומת A: פניה שלא אושרה ברחוב משני',
  2914. '200.problem': 'במקטע המשני יש פניה שלא אושרה בצומת A',
  2915. '200.solution': 'לחץ על הפניה שלידה סימן שאלה סגול כדי לאשר אותה. הערה: ייתכן שתצטרך להפוך את המקטע ל\'דו כיווני\' כדי לראות פניה זו',
  2916. '201.title': 'צומת A: פניה שלא אושרה ברחוב ראשי',
  2917. '201.problem': 'במקטע הראשי יש פניה שלא אושרה בצומת A',
  2918. '201.solution': 'לחץ על הפניה שלידה סימן שאלה סגול כדי לאשר אותה. הערה: ייתכן שתצטרך להפוך את המקטע ל\'דו כיווני\' כדי לראות פניה זו'
  2919. },
  2920. 'IE': {
  2921. '.codeISO': 'IE',
  2922. '.country': 'Ireland',
  2923. '70.enabled': true,
  2924. '70.problemLink': 'W:How_to_label_and_name_roads_(Ireland)#Road_Types',
  2925. '71.enabled': true,
  2926. '71.problemLink': 'W:How_to_label_and_name_roads_(Ireland)#Road_Types',
  2927. '72.enabled': true,
  2928. '72.problemLink': 'W:How_to_label_and_name_roads_(Ireland)#Road_Types',
  2929. '160.enabled': true,
  2930. '160.problemLink': 'W:How_to_label_and_name_roads_(Ireland)#Road_Types',
  2931. '160.params': {'solutionEN': 'Rename the street to \'Mxx\' or \'Mxx N/S/W/E\' or change the road type', 'regexp': '!/^M[0-9]+( [NSWE])?$/'},
  2932. '161.enabled': true,
  2933. '161.problemLink': 'W:How_to_label_and_name_roads_(Ireland)#Road_Types',
  2934. '161.params': {'solutionEN': 'Rename the street to \'Nxx\' or \'Nxx Local Name\' or change the road type', 'regexp': '!/^N[0-9]+( .*)?$/'},
  2935. '162.enabled': true,
  2936. '162.problemLink': 'W:How_to_label_and_name_roads_(Ireland)#Road_Types',
  2937. '162.params': {'solutionEN': 'Rename the street to \'Rxxx\' or \'Rxxx Local Name\' or change the road type', 'regexp': '!/^R[0-9]+( .*)?$/'}
  2938. },
  2939. 'FR': {
  2940. '.codeISO': 'FR',
  2941. '.country': ['France', 'French Guiana', 'New Caledonia', 'Reunion'],
  2942. '.author': 'arbaot and ClementH44',
  2943. '.updated': '2014-03-27',
  2944. '.lng': 'FR',
  2945. 'err.regexp': 'Erreur d\'interprétation pour la vérification #${n}:',
  2946. 'props.disabled': 'WME Validator est désactivé',
  2947. 'props.limit.title': 'Trop de problèmes signalés',
  2948. 'props.limit.problem': 'Il y a trop de problèmes signalés, de sorte que certains d\'entre eux pourraient ne pas être affichés',
  2949. 'props.limit.solution': 'Désélectionnez le segment et arrêtez le scan. Ensuite, cliquez sur le bouton rouge «✘» (Effacer le rapport)',
  2950. 'props.reports': 'Rapports',
  2951. 'props.noneditable': 'Vous ne pouvez éditer ce segment',
  2952. 'report.list.andUp': 'et jusqu\'à',
  2953. 'report.list.severity': 'Gravité :',
  2954. 'report.list.reportOnly': 'seulement dans le rapport',
  2955. 'report.list.forEditors': 'Pour le niveau d\'édition :',
  2956. 'report.list.forCountries': 'Pour les pays :',
  2957. 'report.list.forStates': 'Pour les états :',
  2958. 'report.list.forCities': 'Pour les villes :',
  2959. 'report.list.params': 'Paramètres à configurer dans le pack de localisation :',
  2960. 'report.list.enabled': '${n} vérifications sont activés pour',
  2961. 'report.list.disabled': '${n} vérifications sont désactivés pour',
  2962. 'report.list.total': 'Il y a ${n} points de contôles activés',
  2963. 'report.list.title': 'Liste complète des vérifications pour',
  2964. 'report.list.see': 'Voir',
  2965. 'report.list.checks': 'Paramètres->À propos->Les vérifications',
  2966. 'report.list.fallback': 'Règles de regroupement géographique :',
  2967. 'report.and': 'et',
  2968. 'report.segments': 'Nombre total de segments vérifiés :',
  2969. 'report.customs': 'Les vérifications personnalisés adaptés (vert/bleu):',
  2970. 'report.reported': 'Signalement',
  2971. 'report.errors': 'd\'erreurs',
  2972. 'report.warnings': 'd\'avertissements',
  2973. 'report.notes': 'de remarques',
  2974. 'report.contents': 'Contenus :',
  2975. 'report.summary': 'Récapitulatif',
  2976. 'report.title': 'Rapport de WME Validator',
  2977. 'report.share': 'à partager',
  2978. 'report.generated.by': 'généré par',
  2979. 'report.generated.on': 'le',
  2980. 'report.source': 'Source du rapport :',
  2981. 'report.filter.duplicate': 'les segments doublons',
  2982. 'report.filter.streets': 'Rue et Routes de service',
  2983. 'report.filter.other': 'Autres',
  2984. 'report.filter.noneditable': 'segments non modifiables',
  2985. 'report.filter.notes': 'notes',
  2986. 'report.filter.title': 'Filtre :',
  2987. 'report.filter.excluded': 'sont exclues de ce rapport.',
  2988. 'report.search.updated.by': 'mis à jour par',
  2989. 'report.search.updated.since': 'mis à jour depuis',
  2990. 'report.search.city': 'à partir de',
  2991. 'report.search.reported': 'signalé comme',
  2992. 'report.search.title': 'Rechercher:',
  2993. 'report.search.only': 'seulement les segments',
  2994. 'report.search.included': 'sont inclus dans le rapport.',
  2995. 'report.beta.warning': 'avertissement WME Beta !',
  2996. 'report.beta.text': 'Ce rapport est généré pour WME beta avec des permaliens en beta.',
  2997. 'report.beta.share': 'Ne pas partager ces permaliens !',
  2998. 'report.size.warning':
  2999. '<b>Avertissement !</b><br>Le rapport est trop long de ${n} charactères de sorte qu\'<b>il ne passe pas</b> dans un seul forum ou message privé.\n<br>Ajoutez <b>des filtres</b> pour réduire la taille du rapport.',
  3000. 'report.note.limit': '* Remarque: il y avait trop de problèmes signalés, de sorte que certains d\'entre eux ne sont pas pris en compte dans le récapitulatif.',
  3001. 'report.forum': 'Pour soutenir le développement, merci de laisser un commentaire sur',
  3002. 'report.thanks': 'Merci d\'utiliser WME Validator !',
  3003. 'msg.limit.segments': 'Il y a trop de segments.\n\nCliquez sur \'Le rapport\' pour examiner le rapport, ensuite\n',
  3004. 'msg.limit.segments.continue': 'cliquez sur \'▶\' pour continuer.',
  3005. 'msg.pan.text': 'Déplacez-vous sur pour valider la carte',
  3006. 'msg.zoomout.text': 'Effectuer un zoom arrière pour démarrer WME Validator',
  3007. 'msg.click.text': 'Cliquez sur \'▶\' pour valider la zone visible de la carte',
  3008. 'msg.autopaused': 'Pause automatique',
  3009. 'msg.autopaused.text': 'Pause automatique ! Cliquez sur \'▶\' pour continuer.',
  3010. 'msg.autopaused.tip': 'WME Validator est automatiquement suspendu si la carte est déplacée ou si la taille de la fenêtre change',
  3011. 'msg.finished.text': 'Cliquez sur <b>\'Le rapport\'</b> pour examiner les problèmes de carte',
  3012. 'msg.finished.tip': 'Cliquez sur \'✉\' (Partager) pour poster un rapport sur un\nforum ou par message privé',
  3013. 'msg.noissues.text': 'Terminé ! Aucun problème trouvé !',
  3014. 'msg.noissues.tip': 'Essayez de désactiver quelques filtres ou démarrez WME Validator sur une autre zone de la carte !',
  3015. 'msg.scanning.text': 'Scan en cours ! Terminé dans ~ ${n} min',
  3016. 'msg.scanning.text.soon': 'Scan en cours ! Terminé dans une minute !',
  3017. 'msg.scanning.tip': 'Cliquez sur \'Pause\' pour suspendre ou \'■\' pour stopper',
  3018. 'msg.starting.text': 'Lancement ! Les calques ne peuvent scanner plus vite !',
  3019. 'msg.starting.tip': 'Utilisez le bouton \'Pause\' pour suspendre ou le bouton \'■\' pour stopper',
  3020. 'msg.paused.text': 'En pause ! Cliquez sur \'▶\' pour continuer.',
  3021. 'msg.paused.tip': 'Pour voirla raport, cliquez sur \'Le rapport\' (si disponible)',
  3022. 'msg.continuing.text': 'En cours !',
  3023. 'msg.continuing.tip': 'WME Validator continuera à l\'endroit où il a été suspendu',
  3024. 'msg.settings.text': 'Cliquez sur <b>\'Retour\'</b> pour retourner sur la vue principale',
  3025. 'msg.settings.tip': 'Cliquez sur \'Par défaut\' pour réinitialiser tous les réglages en un clic !',
  3026. 'msg.reset.text': 'Toutes les options de filtrage et les paramètres ont été remis à leurs valeurs par défaut',
  3027. 'msg.reset.tip': 'Cliquez sur \'Retour\' pour retourner sur la vue principale',
  3028. 'msg.textarea.pack': 'Merci de copier le texte ci-dessous et de le coller dans un nouveau fichier <b>.user.js</b>',
  3029. 'msg.textarea': 'Merci de copier le texte ci-dessous et de le coller dans votre forum pour par message privé',
  3030. 'noaccess.text':
  3031. '<b>Désolé,</b><br>Vous ne pouvez utiliser WME Validator ici.<br>Merci de visiter (en anglais) <a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488\'>ce forum</a><br>pour plus d\'informations.',
  3032. 'noaccess.tip': 'Merci de visiter le forum du programme pour plus d\'informations !',
  3033. 'tab.switch.tip.on': 'Cliquez pour activer la surbrillance',
  3034. 'tab.switch.tip.off': 'Cliquez pour désactiver la surbrillance',
  3035. 'tab.filter.text': 'filtre',
  3036. 'tab.filter.tip': 'Options pour filtrer le rapport et les segments à mettre en évidence',
  3037. 'tab.search.text': 'cherche',
  3038. 'tab.search.tip': 'Options avancées de filtrage pour inclure uniquement des segments spécifiques',
  3039. 'tab.help.text': 'aide',
  3040. 'tab.help.tip': 'Besoins d\'aide ?',
  3041. 'filter.noneditables.text': 'Exclure les segments <b>non modifiables</b>',
  3042. 'filter.noneditables.tip': 'Ne pas éxaminer les segments verrouillés ou en dehors de vos zones modifiables',
  3043. 'filter.duplicates.text': 'Exclure les segments <b>doublons</b>',
  3044. 'filter.duplicates.tip': 'Ne pas éxaminer le même segment dans différentes\nparties du rapport\n* Remarque: cette option n\'affecte pas la surbrillance',
  3045. 'filter.streets.text': 'Exclure les <b>Rues et Routes de service</b>',
  3046. 'filter.streets.tip': 'Ne pas éxaminer les rues et routes/chemins de service',
  3047. 'filter.other.text': 'Exclure les <b>autres rues carrossables</b>',
  3048. 'filter.other.tip': 'Ne pas éxaminer les chemins de terres, les parkings, les routes privées\net les segments non carrossables',
  3049. 'filter.notes.text': 'Exclure les <b>remarques</b>',
  3050. 'filter.notes.tip': 'Rapporte uniquement les avertissements et les erreurs',
  3051. 'search.youredits.text': 'Inclure <b>uniquement vos modifications</b>',
  3052. 'search.youredits.tip': 'Inclure uniquement les segments modifiés par vous',
  3053. 'search.updatedby.text': '<b>Mis à jour par:</b>',
  3054. 'search.updatedby.tip':
  3055. 'Inclure uniquement les segments mis à jour par un éditeur déterminé\nCe champ prend en charge:\n - les listes: me, otherEditor\n - les métacaractères: world*\n - la négation: !me, *\n* Remarque: vous pouvez utiliser \'me\' pour vous désigner',
  3056. 'search.updatedby.example': 'Example: me',
  3057. 'search.updatedsince.text': '<b>Mis à jour depuis:</b>',
  3058. 'search.updatedsince.tip': 'Inclure uniquement les segments modifiés depuis la date spécifiée\nFormat de date Firefox: AAAA-MM-JJ',
  3059. 'search.updatedsince.example': 'AAAA-MM-JJ',
  3060. 'search.city.text': '<b>Nom de Ville:</b>',
  3061. 'search.city.tip':
  3062. 'Inclure uniquement les segments d\'une ville spécifiée\nCe champ prend en charge:\n - les listes: Paris, Meudon\n - les métacaractères (wildcards): Greater * Area\n - la négaction: !Paris, *',
  3063. 'search.city.example': 'Example: !Paris, *',
  3064. 'search.checks.text': '<b>Signalé comme:</b>',
  3065. 'search.checks.tip':
  3066. 'Inclure uniquement les segments \nCe champ correspond:\n - aux gravités: erreur\n - aux noms: Nouvelle route\n - aux identifiants (IDs): 40\nCe champ prend en charge:\n - les listes: 36, 37\n - les métacaractères (wildcards): *roundabout*\n - la négation: !unconfirmed*, *',
  3067. 'search.checks.example': 'Example: reverse*',
  3068. 'help.text':
  3069. '<b>Rubriques d\'aide (en anglais):</b><br><a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=666476#p666476\'>F.A.Q.</a><br><a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488\'>Posez votre question sur le forum</a><br><a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488&p=661300#p661185\'>Comment ajuster Validator à votre pays</a><br><a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?f=819&t=76488&p=663286#p663286\'>À propos de \'Might be Incorrect City Name\'</a>',
  3070. 'help.tip': 'S\'ouvre dans un nouvel onglet du navigateur',
  3071. 'button.scan.tip': 'Commencer à scanner la zone actuelle de la carte\n* Remarque: cela peut prendre quelques minutes',
  3072. 'button.scan.tip.NA': 'Dézoomez pour commencer à scanner la zone actuelle de la carte',
  3073. 'button.pause.tip': 'Scan en pause',
  3074. 'button.continue.tip': 'Continuer à scanner la zone de la carte',
  3075. 'button.stop.tip': 'Arrêter le scan et retourner à la position de départ',
  3076. 'button.clear.tip': 'Effacer la mémoire cache des rapports et segments',
  3077. 'button.clear.tip.red': 'Il y a trop de segments signalés:\n 1. Cliquez sur \'Le rapport\' pour générer le rapport.\n 2. Cliquez sur ce bouton pour effacer le rapport et recommencer.',
  3078. 'button.report.text': 'Le rapport',
  3079. 'button.report.tip': 'Appliquer le filtre et générer un rapport HTML dans un nouvel onglet.',
  3080. 'button.BBreport.tip': 'Partagez le rapport sur le forum Waze ou dans un message privé.',
  3081. 'button.settings.tip': 'Configurer les paramètres',
  3082. 'tab.custom.text': 'perso',
  3083. 'tab.custom.tip': 'Paramètres de vérification personnalisés définis par l\'utilisateur',
  3084. 'tab.settings.text': 'Params',
  3085. 'tab.scanner.text': 'scan',
  3086. 'tab.scanner.tip': 'Paramètres du scan de la carte',
  3087. 'tab.about.text': 'à propos</span>',
  3088. 'tab.about.tip': 'À propos de WME Validator',
  3089. 'scanner.sounds.text': 'Activer les sons',
  3090. 'scanner.sounds.tip': 'Joue un \'bip\' pendant le scan',
  3091. 'scanner.sounds.NA': 'Votre navigateur ne supporte pas AudioContext',
  3092. 'scanner.highlight.text': 'Mettre en surbrillance sur la carte',
  3093. 'scanner.highlight.tip': 'Mettre en surbrillance les problèmes repérés sur la carte',
  3094. 'scanner.slow.text': 'Activer le mode \'lent\'',
  3095. 'scanner.slow.tip': 'Permet un scan plus poussé et précis de la carte\n* Remarque: cette option peut ralentir le processus de scan',
  3096. 'scanner.ext.text': 'Signaler des surbrillances externes',
  3097. 'scanner.ext.tip': 'Signaler des segments mis en évidence par WME Toolbox ou WME Color Highlights',
  3098. 'custom.template.text': 'Modèle perso',
  3099. 'custom.template.tip': 'Modèle de contrôle personnalisé définis par l\'utilisateur.\n\nVous pouvez utiliser les variables suivantes:\n${country}, ${state}, ${city}, ${street},' +
  3100. '\n${altCity[index or delimeter]} Example: ${altCity[0]},' +
  3101. '\n${altStreet[index or delimeter]} Example: ${altStreet[##]},' +
  3102. '\n${type}, ${typeRank}, ${toll}, ${direction}, ${elevation}, ${lock},\n${length}, ${ID}, ${roundabout}, ${hasHNs},\n${drivable}, ${softTurns}, ${Uturn}, ${deadEnd},\n${segmentsA}, ${inA}, ${outB}, ${UturnA},\n${segmentsB}, ${inB}, ${outB}, ${UturnB}',
  3103. 'custom.template.example': 'Example: ${street}',
  3104. 'custom.regexp.text': '<a target=\'_blank\' href=\'https://developer.mozilla.org/docs/JavaScript/Guide/Regular_Expressions\'>RegExp</a> perso',
  3105. 'custom.regexp.tip':
  3106. 'Modèle de contrôle personnalisé définis par l\'utilisateur (en utilisant le Regular Expressions).\n\nInsensible à la casse: /regexp/i\nNegation (ne fonctionne pas): !/regexp/\nInformation en mode debug des log sur la console: D/regexp/',
  3107. 'custom.regexp.example': 'Example: !/.+/',
  3108. 'about.tip': 'Ouvre le lien dans un nouvel onglet',
  3109. 'button.reset.text': 'Par défaut',
  3110. 'button.reset.tip': 'Rétablir les options de filtrage et les paramètres par défaut',
  3111. 'button.list.text': 'Les vérifications...',
  3112. 'button.list.tip': 'Montre une liste des vérifications possibles dans WME Validator',
  3113. 'button.wizard.tip': 'Créer un pack géographique',
  3114. 'button.back.text': 'Ret.',
  3115. 'button.back.tip': 'Fermer les paramètres et revenir à l\'ecran principal',
  3116. '1.solutionLink': 'W:Tout_sur_les_ronds-points',
  3117. '1.title': 'WME Toolbox: Rond-point pouvant causer des problèmes',
  3118. '1.problem': 'Les ID des segments du rond-point ne sont pas consécutif',
  3119. '1.solution': 'Refaire le rond-point',
  3120. '2.title': 'WME Toolbox: Simple segment (une voie)',
  3121. '2.problem': 'Ce segments a des nœuds de géométrie inutile',
  3122. '2.solution': 'Simplifier le tracé du segment sélectionné en survolant les nœuds en trop en appuyant sur le \'d\' du clavier',
  3123. '3.title': 'WME Toolbox: Verrouillage de niveau 2',
  3124. '3.problem': 'Segment surligné par WME Toolbox. Pas un problème',
  3125. '4.title': 'WME Toolbox: Verrouillage de niveau 3',
  3126. '4.problem': 'Segment surligné par WME Toolbox. Pas un problème',
  3127. '5.title': 'WME Toolbox: Verrouillage de niveau 4',
  3128. '5.problem': 'Segment surligné par WME Toolbox. Pas un problème',
  3129. '6.title': 'WME Toolbox: Verrouillage de niveau 5',
  3130. '6.problem': 'Segment surligné par WME Toolbox. Pas un problème',
  3131. '7.title': 'WME Toolbox: Verrouillage de niveau 6',
  3132. '7.problem': 'Segment surligné par WME Toolbox. Pas un problème',
  3133. '8.title': 'WME Toolbox: Numéros de maison',
  3134. '8.problem': 'Segment surligné par WME Toolbox. Pas un problème',
  3135. '9.title': 'WME Toolbox: Segment avec une restriction programmée',
  3136. '9.problem': 'Segment surligné par WME Toolbox. Pas un problème',
  3137. '13.title': 'WME Color Highlights: Verrouillage de l\'éditeur',
  3138. '13.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3139. '14.title': 'WME Color Highlights: Péage / Route à sens unique',
  3140. '14.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3141. '15.title': 'WME Color Highlights: Récemment modifié',
  3142. '15.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3143. '16.title': 'WME Color Highlights: Rang de la route',
  3144. '16.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3145. '17.title': 'WME Color Highlights: Pas de ville',
  3146. '17.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3147. '18.title': 'WME Color Highlights: Restriction programmée / Type de route mis en évidence',
  3148. '18.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3149. '19.title': 'WME Color Highlights: Pas de nom',
  3150. '19.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3151. '20.title': 'WME Color Highlights: Filtrer par ville',
  3152. '20.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3153. '21.title': 'WME Color Highlights: Filtrer par ville (ville alt.)',
  3154. '21.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3155. '22.title': 'WME Color Highlights: Filtrer par éditeur',
  3156. '22.problem': 'Segment surligné par WME Color Highlights. Pas un problème',
  3157. '23.problemLink': 'W:Nommage_France#R.C3.A8gles_de_nommage',
  3158. '23.solutionLink': 'W:Nommage_France',
  3159. '23.title': 'Route non confirmée',
  3160. '23.problem': 'Création de segment incomplète ville et nom de rue non renseigné',
  3161. '23.solution': 'Terminer la création en complétant les propriétés',
  3162. '24.problemLink': 'W:Comment_nommer_les_routes_et_les_villes#Nommage_des_villes_et_villages',
  3163. '24.solutionLink': 'F:t=29403',
  3164. '24.title': 'Nom de ville peut-être erroné (uniquement disponible dans le rapport)',
  3165. '24.problem': 'Le nom de la ville est peut-être incorrecte',
  3166. '24.solution': 'Comparer le nom avec celui proposé et éventuellement signaler le problème sur le forum',
  3167. '25.title': 'Direction inconnue de la route carrossable',
  3168. '25.problem': 'Un sens de circulation \'Inconnu\' n\'empêchera Waze de faire emprunter le segment',
  3169. '25.solution': 'Régler le sens de circulation du segment',
  3170. '27.enabled': true,
  3171. '27.title': 'Nom de ville sur une voie ferrée',
  3172. '27.problem': 'Un nom de ville sur les segment voie ferré provoque des incohérence des polygones Ville',
  3173. '27.solution': 'Régler le nom de ville à \'Sans\' ou signaler le problème sur le Forum ',
  3174. '28.problemLink': 'W:Guide_des_intersections#Noms_3',
  3175. '28.title': 'Nom de rue sur une rampe',
  3176. '28.problem': 'Une rampe sans nom \'hérite\' du nom du segment suivant',
  3177. '28.solution': 'Régler le nom du segment à \'Sans\'',
  3178. '29.problemLink': 'W:Tout_sur_les_ronds-points#A_retenir',
  3179. '29.solutionLink': 'W:Tout_sur_les_ronds-points',
  3180. '29.title': 'Nom de rue sur rond-point',
  3181. '29.problem': 'Dans Waze pas de nom de rue sur les rond-point',
  3182. '29.solution': 'Régler le nom des segment du RP à \'Sans\' et créer un POI Jonction/ échangeur avec le nom du RP',
  3183. '34.title': 'Nom de rue alternatif vide',
  3184. '34.problem': 'Le nom de rue alternatif vide',
  3185. '34.solution': 'Supprimer le nom alternatif',
  3186. '35.title': 'Route carrossable non terminé',
  3187. '35.problem': 'Waze ne propose pas de guidage vers/dans les segment non terminés',
  3188. '35.solution': 'Déplacer légèrement l\'extrémité libre du segment pour afin que le nœuds de terminaison soit ajouté',
  3189. '36.title': 'Noeud A: inutil (mode lent)',
  3190. '36.problem': 'Les segments de part et d\'autres du nœud A ont les mêmes propriétés',
  3191. '36.solution': 'Sélectionner le nœud A et appuyer sur Suppr pour fusionner les 2 segments',
  3192. '37.title': 'Noeud B: inutil (mode lent)',
  3193. '37.problem': 'Les segments de part et d\'autres du nœud B ont les mêmes propriétés',
  3194. '37.solution': 'Sélectionner le nœud B et appuyer sur Suppr pour fusionner les 2 segments',
  3195. '38.problemLink': 'W:Les_fermetures_programmées#Segments',
  3196. '38.title': 'Fermetures programmées périmées (mode lent)',
  3197. '38.problem': 'Il y a des fermetures programmées périmées sur ce segment',
  3198. '38.solution': 'Cliquer \'Modifier les restrictions\' et supprimer les restrictions périmées',
  3199. '39.problemLink': 'W:Les_fermetures_programmées#Restriction_de_tourner',
  3200. '39.title': 'Restrictions de tourner périmés (mode lent)',
  3201. '39.problem': 'Il y a des restrictions de tourner périmées sur ce nœud de jonction',
  3202. '39.solution': 'Cliquer l\'icône horloge accolée à la flèche jaune et supprimer les restrictions périmées',
  3203. '41.title': 'Noeud A: Autorisation en sens interdit',
  3204. '41.problem': 'Au nœud A il y a une autorisation de tourner qui va à l\'encontre du sens unique',
  3205. '41.solution': 'Passer le segment à double sens, corriger la flèche au nœud A puis repasser en sens unique',
  3206. '42.title': 'Noeud B: Autorisation en sens interdit',
  3207. '42.problem': 'Au nœud B il y a une autorisation de tourner qui va à l\'encontre du sens unique',
  3208. '42.solution': 'Passer le segment à double sens, corriger la flèche au nœud B puis repasser en sens unique',
  3209. '43.title': 'Connecté à lui-même',
  3210. '43.problem': 'Le segment est connecté à lui même',
  3211. '43.solution': 'Couper le segment en deux',
  3212. '44.title': 'Pas ne connexion sortante',
  3213. '44.problem': 'Le segment carrossable n\'a pas de connexion sortante',
  3214. '44.solution': 'Activer au moins une connexion sortante = une flèche verte',
  3215. '45.title': 'Pas de connexion entrante',
  3216. '45.problem': 'Le segment carrossable (non privé) n\'a pas de connexion entrante',
  3217. '45.solution': 'Sélectionner un segment adjacent et autoriser au moins un accès (flèche rouge → verte)',
  3218. '46.title': 'Noeud A: Pas de connexion entrante pour le segment (mode lent)',
  3219. '46.problem': 'Le segment carrossable (non privé) n\'a pas de connexion entrante au nœud A',
  3220. '46.solution': 'Sélectionner un segment adjacent et autoriser au moins un accès (flèche rouge → verte) au nœud A',
  3221. '47.title': 'Noeud B: Pas de connexion entrante pour le segment (mode lent)',
  3222. '47.problem': 'Le segment carrossable (non privé) n\'a pas de connexion entrante au nœud B',
  3223. '47.solution': 'Sélectionner un segment adjacent et autoriser au moins un accès (flèche rouge → verte) au nœud B',
  3224. '48.solutionLink': 'W:Tout_sur_les_ronds-points#Remplacer_.2F_Editer_un_rond-point',
  3225. '48.title': 'Segment de rond-point à double sens',
  3226. '48.problem': 'Segment de rond-point à double sens de circulation',
  3227. '48.solution': 'Refaire le rond-point',
  3228. '50.solutionLink': 'W:Tout_sur_les_ronds-points#A_retenir',
  3229. '50.title': 'Pas de connectivité sur le rond-point (mode lent)',
  3230. '50.problem': 'Le segment du rond-point n\'a pas de connectivité avec le segment adjacent',
  3231. '50.solution': 'Autoriser un virage vers le segment adjacent = Corriger la flèche rouge',
  3232. '57.enabled': true,
  3233. '57.title': 'Nom de ville sur une rampe',
  3234. '57.problem': 'Un Nom de ville sur une rampe peu affecter la recherche dans Waze',
  3235. '57.solution': 'Cocher la case \'Sans\' pour ville',
  3236. '59.enabled': true,
  3237. '59.title': 'Nom de ville sur Freeway',
  3238. '59.problem': 'Un nom de ville sur les segment Freeway provoque des incohérence des polygones Ville',
  3239. '59.solution': 'Régler le nom de ville à \'Sans\' ou signaler le problème sur le Forum',
  3240. '74.problemLink': 'W:Tout_sur_les_ronds-points#A_retenir',
  3241. '74.solutionLink': 'W:Tout_sur_les_ronds-points#Remplacer_.2F_Editer_un_rond-point',
  3242. '74.title': 'Noeud A: Plusieurs segments connectés',
  3243. '74.problem': 'La jonction A du rond-point est connectée à plusieurs segments',
  3244. '74.solution': 'Refaire le rond-point',
  3245. '77.title': 'Demi-tour autorisé',
  3246. '77.problem': 'L\'impasse carrossable à un demi-tour autorisé à son extrémité',
  3247. '77.solution': 'Éventuellement Interdire le demi-tour',
  3248. '78.title': 'Mêmes extrémités des segments carrossables (mode lent)',
  3249. '78.problem': 'Deux segments carrossables partagent les deux mêmes extrémités',
  3250. '78.solution': 'Diviser le segment. Vous pouvez également supprimer l\'un des segments si ils sont identiques',
  3251. '79.title': 'Demi-tour trop court (mode lent)',
  3252. '79.problem': 'Le segment fait moins de 15m si nécessaire Waze ne proposera pas de demi-tour',
  3253. '79.solution': 'Agrandisseur le segment à 15m mini (si le demi-tour est autorisé)',
  3254. '87.problemLink': 'W:Tout_sur_les_ronds-points#A_retenir',
  3255. '87.solutionLink': 'W:Tout_sur_les_ronds-points#Remplacer_.2F_Editer_un_rond-point',
  3256. '87.title': 'Noeud A: Plusieurs sorties au rond-point',
  3257. '87.problem': 'La jonction A du rond-point est connectée à plusieurs segments sortant',
  3258. '87.solution': 'Refaire le rond-point',
  3259. '99.title': 'Demi-tour à l\'entrée du rond-point (mode lent)',
  3260. '99.problem': 'Le segment d\'entrée du rond-point à un demi-tour autorisé',
  3261. '99.solution': 'Désactiver le demi-tour',
  3262. '101.title': 'Route fermée (seulement disponible dans le rapport)',
  3263. '101.problem': 'Le segment est marqué comme étant fermé',
  3264. '101.solution': 'Si la construction est terminée, restaurez la connectivité du segment et supprimez le suffixe',
  3265. '101.params': {'regexp': '/(^|\\b)travaux(\\b|$)/i'},
  3266. '102.title': 'Noeud A: Pas de connexion sortante (mode lent)',
  3267. '102.problem': 'Le segment carrossable n\'a pas de connexion sortante au nœud A',
  3268. '102.solution': 'Activer au moins une connexion sortante = une flèche verte au nœud A',
  3269. '103.title': 'Noeud B: Pas de connexion sortante (mode lent)',
  3270. '103.problem': 'Le segment carrossable n\'a pas de connexion sortante au nœud B',
  3271. '103.solution': 'Activer au moins une connexion sortante = une flèche verte au nœud B',
  3272. '104.title': 'Voie ferré utilisée pour des commentaires',
  3273. '104.problem': 'Le segment de voie ferré est probablement utilisé pour mettre un commentaire',
  3274. '104.solution': 'Supprimez le commentaire car les voies ferrée sont affichées pour le client',
  3275. '107.title': 'Noeud A: Pas de connexion (mode lent)',
  3276. '107.problem': 'Le noeud A du segment carrossable est à moins de 5m d\'un autre secteur carrossable mais n\'y est pas connecté',
  3277. '107.solution': 'Connectez le noeud A à un segment à proximité ou le déplacer un peu plus loin',
  3278. '108.title': 'Noeud B: pas de connexion (mode lent)',
  3279. '108.problem': 'Le noeud B du segment carrossable est à moins de 5m d\'un autre secteur carrossable mais n\'y est pas connecté',
  3280. '108.solution': 'Connectez le noeud B à un segment à proximité ou le déplacer un peu plus loin',
  3281. '109.title': 'Segment trop court',
  3282. '109.problem': 'Le segment carrossables non-terminal est de moins de 2m de long, il est difficile de le voir sur la carte',
  3283. '109.solution': 'Augmentez sa taille, supprimez le ou connectez le à un segment adjacent',
  3284. '112.title': 'Plus de ${n} lettres en trop pour le nom de la rampe',
  3285. '112.problem': 'Le nom de la rampe est trop long',
  3286. '112.solution': 'Renommez de façon plus courte le nom de la rampe',
  3287. '114.title': 'Noeud A: non carrossable connecté à un carrossable (mode lent)',
  3288. '114.problem': 'Le segment non carrossable a une jonction avec un segment carrossable au noeud A',
  3289. '114.solution': 'Déconnectez le noeud A de tous les segments carrossables',
  3290. '115.title': 'Noeud B: non carrossable connecté à un carrossable (mode lent)',
  3291. '115.problem': 'Le segment non carrossable a une jonction avec un segment carrossable au noeud B',
  3292. '115.solution': 'Déconnectez le noeud B de tous les segments carrossables',
  3293. '116.title': 'Élévation hors de portée',
  3294. '116.problem': 'L\'élévation est en dehors des limites habituelle',
  3295. '116.solution': 'Corrigez l\'élévation',
  3296. '117.title': 'Obsolete CONST ZN marker',
  3297. '117.problem': 'The segment is marked with obsolete CONST ZN suffix',
  3298. '117.solution': 'Change CONST ZN to (closed)',
  3299. '118.title': 'Noeud A: Chevauchement des segments (mode lent)',
  3300. '118.problem': 'Le segment se chevauche avec le segment adjacent au noeud A',
  3301. '118.solution': 'Divisez les segments à 2° ou supprimez le point de la géométrie inutile ou supprimez le segment double au noeud A',
  3302. '119.title': 'Noeud B: Chevauchement des segments (mode lent)',
  3303. '119.problem': 'Le segment se chevauche avec le segment adjacent au noeud B',
  3304. '119.solution': 'Divisez les segments à 2° ou supprimez le point de la géométrie inutile ou supprimez le segment double au noeud B',
  3305. '120.title': 'Noeud A: Virage trop fort (mode lent)',
  3306. '120.problem': 'Le segment carrossable a un virage très fort au noeud A',
  3307. '120.solution': 'Désactiver le virage au noeud A ou écarter les segments à 30°',
  3308. '121.title': 'Noeud B: Virage trop fort (mode lent)',
  3309. '121.problem': 'Le segment carrossable a un virage très fort au noeud B',
  3310. '121.solution': 'Désactiver le virage au noeud A ou écarter les segments à 30°',
  3311. '128.title': 'Vérification personnalisée définie par l\'utilisateur (vert)',
  3312. '128.problem': 'Certaines des propriétés du segment sont à l\'encontre de la Regular Expression définie par l\'utilisateur (voir Paramètres→Personnaliser)',
  3313. '128.solution': 'Résoudre le problème',
  3314. '129.title': 'Vérification personnalisée définie par l\'utilisateur (bleu)',
  3315. '129.problem': 'Certaines des propriétés du segment sont à l\'encontre de la Regular Expression définie par l\'utilisateur (voir Paramètres→Personnaliser)',
  3316. '129.solution': 'Résoudre le problème',
  3317. '163.enabled': true,
  3318. '163.title': '\'Vers\' dans le nom de la rue',
  3319. '163.problem': 'Nom de rue contenant \'vers\'',
  3320. '163.solution': 'Renommer le segment selon les règles du wiki ou signaler sur le forum',
  3321. '163.solutionLink': 'W:Nommage_France#Nommage_des_entr.C3.A9es.2C_sorties_et_des_embranchements_d.27autoroutes',
  3322. '163.params':
  3323. {'titleEN': '\'Vers\' in Ramp name', 'problemEN': 'The Ramp name contains word \'vers\'', 'solutionEN': 'Rename the Ramp in accordance with the guidelines', 'regexp': '/(^|\\b)vers\\b/i'},
  3324. '170.enabled': true,
  3325. '170.solutionLink': 'W:Nommage_France#R.C3.A8gles_de_nommage',
  3326. '170.title': 'Majuscule dans le nom de rue',
  3327. '170.problem': 'Le nom de la rue commence par une miniscule',
  3328. '170.solution': 'Passer la première lettre en majuscule',
  3329. '171.enabled': true,
  3330. '171.title': 'Abréviation dans le nom de rue',
  3331. '171.problem': 'Abréviation indésirable dans le nom de rue',
  3332. '171.solution': 'Écrire le mot abréger en toute lettre',
  3333. '171.params': {
  3334. 'regexp':
  3335. '/((^| )([Ss]t-|[Ss]te-))|((^| )([Ss]t|[Ss]te|[Mm]al(?! Assis)|[Gg]al|[Aa]v|[Bb]lvd|[Ii]mp|[Pp]l|[Ss]q|[Aa]ll|[Bb][Dd])($| ))|((^| )(?!(Z\\.I|Z\\.A|Z\\.A\\.C|C\\.C|S\\.N\\.C\\.F|R\\.E\\.R)\\.)[^ ]+\\.)/'
  3336. },
  3337. '172.title': 'Nom de rue avec des espaces inutiles',
  3338. '172.problem': 'Double espace dans le nom de rue',
  3339. '172.problemLink': 'W:Comment_nommer_les_routes_et_les_villes',
  3340. '172.solution': 'Supprimer les espaces inutiles',
  3341. '173.enabled': false,
  3342. '173.title': 'Nom de rue sans espace avant ou après une abrévation',
  3343. '173.problem': 'Pas d\'espace avant (\'1943r.\') ou après (\'st.Jan\') une abrévation dans le nom de rue',
  3344. '173.solution': 'Ajouter un espace avant/après l\'abrévation',
  3345. '174.enabled': true,
  3346. '174.title': 'Mauvais orthographe',
  3347. '174.problem': 'Mauvais orthographe qui provoque une mauvaise prononciation',
  3348. '174.solution': 'Corriger l\'orthographe (É = Alt-144 etc)',
  3349. '174.solutionLink': 'W:Nommage_France#R.C3.A8gles_de_nommage',
  3350. '174.params': {
  3351. 'regexp':
  3352. '/(^|\\b)(allee|acces|chateau|ecole|egalit[eé]|[eé]galite|eglise|etang|gen[eé]ral|g[eé]neral|hotel|hopital|marechal|president|republique|ocean|ev[eê]ch[eé]|[eé]vech[eé]|[eé]v[eê]che|periphérique|elodie|etienne|eric|emile|emilie|edouard|elisabeth)/i'
  3353. },
  3354. '175.title': 'Nom de rue avec uniquement des espaces',
  3355. '175.problem': 'Le nom de la rue n\'a que des espaces',
  3356. '175.solution': 'Dans les propriétés de l\'adresse, cocher \'Sans\' pour le nom de la rue et cliquer sur \'Appliquer\' OU entrer un nom de rue approprié',
  3357. '190.title': 'Minuscule dans le nom de ville',
  3358. '190.problem': 'Le nom de ville commence avec une lettre en majuscule',
  3359. '190.solution': 'Utilisé ce formulaire pour renommer la ville',
  3360. '192.problemLink': 'W:Comment_nommer_les_routes_et_les_villes#Nommage_des_villes_et_villages',
  3361. '192.solutionLink': 'F:t=29403',
  3362. '192.title': 'Nom de ville avec des espaces inutiles',
  3363. '192.problem': 'Double espace dans le nom de ville',
  3364. '192.solution': 'Utiliser le formulaire suivant pour faire une demande de modification',
  3365. '193.enabled': false,
  3366. '193.title': 'Nom de bille sans espace avant ou après une abrévation',
  3367. '193.problem': 'Pas d\'espace avant (\'1943r.\') ou après (\'st.Jana\') une abrévation dans le nom de rue',
  3368. '193.solution': 'Utiliser ce formulaire pour renommer la ville',
  3369. '200.problemLink': 'W:Soft_et_hard_turns',
  3370. '200.solutionLink': 'W:Soft_et_hard_turns#Bonnes_pratiques',
  3371. '200.title': 'Noeud A: Autorisation de tourner non confirmée',
  3372. '200.problem': 'Le segment carrossable à une autorisation de tourner non confirmée au noeud A',
  3373. '200.solution': 'Cliquer l\'autorisation de tourner avec un ? violet pour la confirmer. Il peut être nécessaire de passer les sens unique à double sens pour afficher des flèches cachées'
  3374. },
  3375. 'ES': {
  3376. '.codeISO': 'ES',
  3377. '.country': [
  3378. 'Spain', 'Andorra', 'Bolivia', 'Costa Rica', 'Colombia', 'Cuba', 'Dominican Republic', 'Ecuador', 'Equatorial Guinea', 'Guatemala', 'Honduras', 'Nicaragua', 'Panama', 'Peru', 'Paraguay',
  3379. 'El Salvador', 'Uruguay', 'Venezuela'
  3380. ],
  3381. '.author': 'robindlc and fernandoanguita',
  3382. '.updated': '2014-08-30',
  3383. '.lng': ['ES', 'ES-419', 'GL'],
  3384. 'city.consider': 'considerar este nombre de ciudad:',
  3385. 'city.1': 'nombre de ciudad demasiado corto',
  3386. 'city.2': 'expandir la abreviación',
  3387. 'city.3': 'completar nombre corto',
  3388. 'city.4': 'completar nombre de ciudad',
  3389. 'city.5': 'corregir mayúsculas',
  3390. 'city.6': 'comprobar orden de palabras',
  3391. 'city.7': 'comprobar abreviaciones',
  3392. 'city.8a': 'añadir nombre de país',
  3393. 'city.8r': 'eliminar nombre de país',
  3394. 'city.9': 'comprobar nombre de país',
  3395. 'city.10a': 'añadir palabra',
  3396. 'city.10r': 'eliminar palabra',
  3397. 'city.11': 'añadir código de país',
  3398. 'city.12': 'nombres idénticos, pero ciudades con diferentes IDs',
  3399. 'city.13a': 'añadir espacio',
  3400. 'city.13r': 'eliminar espacio',
  3401. 'city.14': 'revisar el número',
  3402. 'props.skipped.title': 'El segmento no está revisado',
  3403. 'props.skipped.problem': 'El segmento se modificó después del 01-05-2014 Y está bloqueado por ti, por lo que Validator no lo revisó',
  3404. 'err.regexp': 'Error al analizar la opción de revisión #${n}:',
  3405. 'props.disabled': 'WME Validator deshabilitado',
  3406. 'props.limit.title': 'Demasiados problemas notificados',
  3407. 'props.limit.problem': 'Hay demasiados problemas notificados, puede que no se muestren todos',
  3408. 'props.limit.solution': 'Deselecciona el segmento y detiene el proceso de escaneo. Luego pincha el botón con la \'✘\' roja (Limpiar Reporte)',
  3409. 'props.reports': 'informes',
  3410. 'props.noneditable': 'No puedes editar este segmento',
  3411. 'report.save': 'Guardar este informe',
  3412. 'report.list.andUp': 'y subiendo',
  3413. 'report.list.severity': 'Severidad:',
  3414. 'report.list.reportOnly': 'sólo en el informe',
  3415. 'report.list.forEditors': 'Para editores nivel:',
  3416. 'report.list.forCountries': 'Para paises:',
  3417. 'report.list.forStates': 'Para estados:',
  3418. 'report.list.forCities': 'Para ciudades:',
  3419. 'report.list.params': 'Parámetros para configurar en el paquete de localización:',
  3420. 'report.list.params.set': 'Parámetros ajustados en el paquete de localización:',
  3421. 'report.list.enabled': '${n} revisiones están habilitadas para',
  3422. 'report.list.disabled': '${n} revisiones están deshabilitadas para',
  3423. 'report.list.total': 'Hay ${n} revisiones disponibles',
  3424. 'report.list.title': 'Lista Completa de Revisiones para',
  3425. 'report.list.see': 'Ver',
  3426. 'report.list.checks': 'Configuración>Acerca>Revisiones disponibles',
  3427. 'report.list.fallback': 'Reglas de Localización de respaldo:',
  3428. 'report.and': 'y',
  3429. 'report.segments': 'Número total de segmentos revisados:',
  3430. 'report.customs': 'Revisiones personalizadas combinadas (verde/azul):',
  3431. 'report.reported': 'Reportados',
  3432. 'report.errors': 'errores',
  3433. 'report.warnings': 'advertencias',
  3434. 'report.notes': 'notas',
  3435. 'report.contents': 'Contenidos:',
  3436. 'report.summary': 'Resumen',
  3437. 'report.title': 'Informe de WME Validator',
  3438. 'report.share': 'para Compartir',
  3439. 'report.generated.by': 'generado por',
  3440. 'report.generated.on': 'activo',
  3441. 'report.source': 'Fuente del informe:',
  3442. 'report.filter.duplicate': 'segmentos duplicados',
  3443. 'report.filter.streets': 'Calles y Calles de Servicio',
  3444. 'report.filter.other': 'Otros conducibles y no conducibles',
  3445. 'report.filter.noneditable': 'segmentos no-editables',
  3446. 'report.filter.notes': 'notas',
  3447. 'report.filter.title': 'Filtro:',
  3448. 'report.filter.excluded': 'están excluidos de este informe.',
  3449. 'report.search.updated.by': 'actualizado por',
  3450. 'report.search.updated.since': 'actualizado desde',
  3451. 'report.search.city': 'desde',
  3452. 'report.search.reported': 'reportado como',
  3453. 'report.search.title': 'Búsqueda:',
  3454. 'report.search.only': 'sólo segmentos',
  3455. 'report.search.included': 'están incluídos en el informe.',
  3456. 'report.beta.warning': '¡Advertencia WME Beta!',
  3457. 'report.beta.text': 'Este informe se genera en WME Beta con permalinks beta.',
  3458. 'report.beta.share': 'Por favor no comparta estos permalinks!',
  3459. 'report.size.warning':
  3460. '<b>¡Advertencia!</b><br> El informe tiene ${n} caracteres, por lo que <b>no cabrá</b> en un mensaje de foro o privado.\n<br>Por favor agrega <b>más filtros</b> para reducir el tamaño del informe.',
  3461. 'report.note.limit': '* Nota: había demasiados problemas reportados, por lo que algunos de ellos no se incluyen en el resumen.',
  3462. 'report.forum': 'Para motivar futuros desarrollos, por favor deje su mensaje en el',
  3463. 'report.thanks': 'Gracias por usar WME Validator!',
  3464. 'msg.limit.segments': 'Hay demasiados segmentos.\n\nPincha \'Mostrar informe\' para revisar el informe, luego\n',
  3465. 'msg.limit.segments.continue': 'pincha \'▶\' para continuar.',
  3466. 'msg.limit.segments.clear': 'pulsa \'✘\' para borrar el informe.',
  3467. 'msg.pan.text': 'Desplaza el mapa para validarlo',
  3468. 'msg.zoomout.text': 'Aleja el zoom\tpara iniciar WME Validator',
  3469. 'msg.click.text': 'Pincha \'▶\' para validar el área visible del mapa',
  3470. 'msg.autopaused': 'autopausado',
  3471. 'msg.autopaused.text': '¡Autopausado! Pincha \'▶\' para continuar.',
  3472. 'msg.autopaused.tip': 'WME Validator automáticamente pausó al arrastrar el mapa o cambiar el tamaño de la ventana',
  3473. 'msg.finished.text': 'Pincha <b>\'Mostrar informe\'</b> para ver los problemas del mapa',
  3474. 'msg.finished.tip': 'Pincha el botón \'✉\' (Compartir) para publicar el informe en un \nforo o en un mensaje privado',
  3475. 'msg.noissues.text': '¡Terminado! ¡No se encontraron problemas!',
  3476. 'msg.noissues.tip': '¡Trata de deseleccionar algunas opciones de filtro o inicia WME Validator sobre otra zona del mapa!',
  3477. 'msg.scanning.text': '¡Escaneando! Finalizando en ~ ${n} minutos',
  3478. 'msg.scanning.text.soon': '¡Escaneando! ¡Finalizando en un minuto!',
  3479. 'msg.scanning.tip': 'Pincha el botón \'Pausa\' para pausar o \'■\' para detener',
  3480. 'msg.starting.text': '¡Comenzando! ¡Las capas están desactivadas para escanear más rápido!',
  3481. 'msg.starting.tip': 'Usa el botón \'Pausa\' para pausar o el botón \'■\' para detener',
  3482. 'msg.paused.text': '¡En pausa! Pincha el botón \'▶\' para continuar.',
  3483. 'msg.paused.tip': 'Para ver el informe pincha el botón \'Mostrar informe\' (si está disponible)',
  3484. 'msg.continuing.text': '¡Continuando!',
  3485. 'msg.continuing.tip': 'WME Validator continuará desde la ubicación en que fue pausado',
  3486. 'msg.settings.text': 'Pincha <b>\'Atrás\'</b> para retornar a la vista principal',
  3487. 'msg.settings.tip': 'Pincha el botón \'Restaurar valores predeterminados\' para resetear todos los parámetros en un clic!',
  3488. 'msg.reset.text': 'Todas las opciones de filtro y configuración han sido reseteadas a sus valores por defecto',
  3489. 'msg.reset.tip': 'Pincha el botón \'Atrás\' para retornar a la vista principal',
  3490. 'msg.textarea.pack': 'Por favor copia el texto abajo y luego pégalo en el nuevo archivo <b>.user.js</b>',
  3491. 'msg.textarea': 'Por favor copia el texto abajo y luego pégalo en tu publicación del foro o mensaje privado',
  3492. 'noaccess.text':
  3493. '<b>Lo sentimos,</b><br> No puedes usar WME Validator\taquí.<br>Por favor revisa <a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488\'>el hilo del foro</a><br>para más información.',
  3494. 'noaccess.tip': 'Por favor revisa el hilo del foro para más información!',
  3495. 'tab.switch.tip.on': 'Pincha para activar el resaltado',
  3496. 'tab.switch.tip.off': 'Pincha para desactivar el resaltado',
  3497. 'tab.filter.text': 'filtro',
  3498. 'tab.filter.tip': 'Opciones para filtrar el informe y los segmentos resaltados',
  3499. 'tab.search.text': 'buscar',
  3500. 'tab.search.tip': 'Opciones de filtro avanzadas para incluir sólo segmentos específicos',
  3501. 'tab.help.text': 'ayuda',
  3502. 'tab.help.tip': '¿Necesitas ayuda?',
  3503. 'filter.noneditables.text': 'Excluir segmentos <b>no-editables</b>',
  3504. 'filter.noneditables.tip': 'No reportar segmentos bloqueados o \nsegmentos fuera de su área de edición',
  3505. 'filter.duplicates.text': 'Excluir segmentos <b>duplicados</b>',
  3506. 'filter.duplicates.tip': 'No mostrar el mismo segmento en diferentes \npartes del reporte\n* Nota: esta opción NO AFECTA el resaltado',
  3507. 'filter.streets.text': 'Excluir <b>Calles y Vías de Servicio</b>',
  3508. 'filter.streets.tip': 'No reportar Calles y Vías de Servicio',
  3509. 'filter.other.text': 'Excluir <b>otros conducibles y no-conducibles</b>',
  3510. 'filter.other.tip': 'No reportar Caminos de Tierra, Vías de Estacionamiento y Caminos Privados\ny no-conducibles',
  3511. 'filter.notes.text': 'Excluir <b>notas</b>',
  3512. 'filter.notes.tip': 'Reportar sólo advertencias y errores',
  3513. 'search.youredits.text': 'Incluir <b>sólo tus ediciones</b>',
  3514. 'search.youredits.tip': 'Incluir sólo los segmentos editados por ti',
  3515. 'search.updatedby.text': '<b>Actualizado por:</b>',
  3516. 'search.updatedby.tip':
  3517. 'Incluir sólo segmentos actualizados por el editor especificado\nEste campo soporta:\n - listas: yo, OtrosEditores\n - comodines: palabra*\n - negación: !yo, *\n* Nota: puedes usar \'me\' para indicarte a ti mismo',
  3518. 'search.updatedby.example': 'Ejemplo: me',
  3519. 'search.updatedsince.text': '<b>Actualizado desde:</b>',
  3520. 'search.updatedsince.tip': 'Incluir sólo segmentos editados desde la fecha especificada formato de fecha\nFirefox: AAAA-MM-DD',
  3521. 'search.updatedsince.example': 'AAAA-MM-DD',
  3522. 'search.city.text': '<b>Nombre de ciudad:</b>',
  3523. 'search.city.tip': 'Incluir sólo segmentos con el nombre de ciudad especificado\nEste campo soporta:\n - listas: Paris, Meudon\n - comodines: Área * Mayor\n - negación: !Paris, *',
  3524. 'search.city.example': 'Ejemplo: !Paris, *',
  3525. 'search.checks.text': '<b>Reportado como:</b>',
  3526. 'search.checks.tip':
  3527. 'Incluir sólo segmentos reportados como específicos\nEste campo empareja:\n - severidades: errores\n - revisar nombres: Calle nueva\n - revisar IDs: 40\nEste campo soporta:\n - listas: 36, 37\n - comodines: *rotonda*\n - negación: !giros suaves*, *',
  3528. 'search.checks.example': 'Ejemplo: inverso*',
  3529. 'help.text':
  3530. ' <b>Hilos de Ayuda:</b><br><a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?f=819&t=76488&p=666476#p666476\'>F.A.Q.</a><br><a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?t=76488\'>Consulta tu duda en el foro</a><br><a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?f=819&t=76488&p=661300#p661185\'>Como ajustar Validator para tu país</a><br><a target=\'_blank\' href=\'https://www.waze.com/forum/viewtopic.php?f=819&t=76488&p=663286#p663286\'>Acerca de \'Puede ser un nombre de Ciudad incorrecto\'</a>',
  3531. 'help.tip': 'Abrir en una nueva pestaña del explorador',
  3532. 'button.scan.tip': 'Comenzar escaneo del área del mapa actual \n* Nota: esto puede tomar unos minutos',
  3533. 'button.scan.tip.NA': 'Aleja el zoom para comenzar a escanear el área del mapa actual',
  3534. 'button.pause.tip': 'Pausar escaneo',
  3535. 'button.continue.tip': 'Continuar escaneando el área del mapa',
  3536. 'button.stop.tip': 'Detener el escaneo y volver a la posición de inicio',
  3537. 'button.clear.tip': 'Borrar informe y caché de segmentos',
  3538. 'button.clear.tip.red': 'Hay demasiados segmentos reportados:\n 1. Pincha \'Mostrar informe\' para generar informe.\n 2. Pincha este botón para borrar el informe y comenzar de nuevo.',
  3539. 'button.report.text': 'Mostrar informe',
  3540. 'button.report.tip': 'Aplicar el filtro y generar informe HTML en una nueva pestaña',
  3541. 'button.BBreport.tip': 'Compartir el informe en el foro Waze o en un mensaje privado',
  3542. 'button.settings.tip': 'Configurar ajustes',
  3543. 'tab.custom.text': 'personalizado',
  3544. 'tab.custom.tip': 'Ajustes de revisión personalizados definidos por el usuario',
  3545. 'tab.settings.text': 'Ajustes',
  3546. 'tab.scanner.text': 'escanear',
  3547. 'tab.scanner.tip': 'Ajustes de escaneo de mapa',
  3548. 'tab.about.text': 'acerca de</span>',
  3549. 'tab.about.tip': 'Acerca de WME Validator',
  3550. 'scanner.sounds.text': 'Habilitar sonidos',
  3551. 'scanner.sounds.tip': 'Pitidos y sonidos mientras escanea',
  3552. 'scanner.sounds.NA': 'Su navegador no admite AudioContext',
  3553. 'scanner.highlight.text': 'Resalta problemas en el mapa',
  3554. 'scanner.highlight.tip': 'Resalta problemas reportados en el mapa',
  3555. 'scanner.slow.text': 'Activa \'slow\' verificaciones',
  3556. 'scanner.slow.tip': 'Activa análisis profundo del mapa\n* Nota: esta opción puede ralentizar el proceso de escaneo',
  3557. 'scanner.ext.text': 'Informa de resaltados externos',
  3558. 'scanner.ext.tip': 'Informa de segmentos resaltados por WME Toolbox o WME Color Highlights',
  3559. 'custom.template.text': 'Plantilla personalizada',
  3560. 'custom.template.tip':
  3561. 'Plantilla para comprobaciones definidas por el usuario.\n\nPuede usar las siguientes variables expandibles:\n${country}, ${state}, ${city}, ${street},\n${country}, ${state}, ${city}, ${street},\n${altCity[index or delimeter]} Example: ${altCity[0]},\n${altStreet[index or delimeter]} Example: ${altStreet[##]},\n${type}, ${typeRank}, ${toll}, ${direction}, ${elevation}, ${lock},\n${length}, ${ID}, ${roundabout}, ${hasHNs},\n${drivable}, ${softTurns}, ${Uturn}, ${deadEnd},\n${segmentsA}, ${inA}, ${outB}, ${UturnA},\n${segmentsB}, ${inB}, ${outB}, ${UturnB}',
  3562. 'custom.template.example': 'Ejemplo: ${street}',
  3563. 'custom.regexp.text': 'Personalizado <a target=\'_blank\' href=\'https://developer.mozilla.org/docs/JavaScript/Guide/Regular_Expressions\'>RegExp</a>',
  3564. 'custom.regexp.tip':
  3565. 'Expresión regular de comprobación personalizada definida por el usuario para que coincida con la plantilla.\n\nCase-insensitive match: /regexp/i\nNegation (do not match): !/regexp/\nLog debug information on console: D/regexp/',
  3566. 'custom.regexp.example': 'Ejemplo: !/.+/',
  3567. 'about.tip': 'Pincha \'actualizar\' para abrir el hilo del foro en una pestaña nueva',
  3568. 'button.reset.text': 'Restablecer predeterminados',
  3569. 'button.reset.tip': 'Revertir opciones de filtro y ajustes a sus valores predeterminados',
  3570. 'button.list.text': 'Comprobaciones disponibles...',
  3571. 'button.list.tip': 'Muestra una lista de las comprobaciones disponibles en WME Validator',
  3572. 'button.wizard.tip': 'Crear paquete de localización',
  3573. 'button.back.text': 'Atrás',
  3574. 'button.back.tip': 'Cerrar configuración y volver a la vista principal',
  3575. '1.solutionLink': 'W:Crear_y_editar_rotondas#Arreglar_rotondas_editadas_manualmente',
  3576. '1.title': 'WME Toolbox: Rotonda que puede causar problemas',
  3577. '1.problem': 'Los números de identificación de los puntos de unión de los segmentos de la rotonda no son consecutivos',
  3578. '1.solution': 'Rehacer la rotonda',
  3579. '2.title': 'WME Toolbox: Segmento Simple',
  3580. '2.problem': 'El segmento tiene nodos de geometría innecesarios',
  3581. '2.solution': 'Simplifica la geometría del segmento pasando el puntero del ratón por encima y pulsando la tecla \'d\'',
  3582. '3.title': 'WME Toolbox: Bloqueo nivel 2',
  3583. '3.problem': 'El segmento está resaltado por WME Toolbox. No es un problema',
  3584. '4.title': 'WME Toolbox: Bloqueo nivel 3',
  3585. '4.problem': 'El segmento está resaltado por WME Toolbox. No es un problema',
  3586. '5.title': 'WME Toolbox: Bloqueo nivel 4',
  3587. '5.problem': 'El segmento está resaltado por WME Toolbox. No es un problema',
  3588. '6.title': 'WME Toolbox: Bloqueo nivel 5',
  3589. '6.problem': 'El segmento está resaltado por WME Toolbox. No es un problema',
  3590. '7.title': 'WME Toolbox: Bloqueo nivel 6',
  3591. '7.problem': 'El segmento está resaltado por WME Toolbox. No es un problema',
  3592. '8.title': 'WME Toolbox: Numeros de casas',
  3593. '8.problem': 'El segmento está resaltado por WME Toolbox. No es un problema',
  3594. '9.title': 'WME Toolbox: Segmento con restricciones de tiempo',
  3595. '9.problem': 'El segmento está resaltado por WME Toolbox. No es un problema',
  3596. '13.title': 'WME Colour Highlights: Bloqueo de editor',
  3597. '13.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3598. '14.title': 'WME Colour Highlights: Peaje / Vía de sentido único',
  3599. '14.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3600. '15.title': 'WME Colour Highlights: Editado recientemente',
  3601. '15.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3602. '16.title': 'WME Colour Highlights: Rango de vías',
  3603. '16.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3604. '17.title': 'WME Colour Highlights: Sin ciudad',
  3605. '17.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3606. '18.title': 'WME Colour Highlights: Restricción horaria / Tipo de vía resaltado',
  3607. '18.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3608. '19.title': 'WME Colour Highlights: Sin nombre',
  3609. '19.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3610. '20.title': 'WME Colour Highlights: Filtro por ciudad',
  3611. '20.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3612. '21.title': 'WME Colour Highlights: Filtro por ciudad (alt. ciudad)',
  3613. '21.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3614. '22.title': 'WME Colour Highlights: Filtro por editor',
  3615. '22.problem': 'El segmento está resaltado por WME Colour Highlights. No es un problema',
  3616. '23.title': 'Segmento no confirmado',
  3617. '23.problem': 'Cada segmento debe tener al menos el nombre del país o estado',
  3618. '23.solution': 'Confirma la vía actualizando sus detalles',
  3619. '24.problemLink': 'W:Corrigiendo_ciudades_"manchadas"',
  3620. '24.title': 'Puede haber nombre incorrecto de ciudad (sólo disponible en el informe)',
  3621. '24.problem': 'El segmento puede tener un nombre de ciudad incorrecto',
  3622. '24.solution': 'Considera el nombre de ciudad sugerido y use este formulario para renombrar la ciudad',
  3623. '25.title': 'Dirección del segmento marcada como desconocida',
  3624. '25.problem': 'La dirección del segmento \'Desconocida\' no impedirá enrutar por la vía',
  3625. '25.solution': 'Fijar la dirección de la vía',
  3626. '27.enabled': true,
  3627. '27.problemLink': 'W:Corrigiendo_ciudades_"manchadas"',
  3628. '27.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Address_Properties',
  3629. '27.title': 'Nombre de ciudad en vía férrea',
  3630. '27.problem': 'Poner nombres de ciudad en la vía férrea puede generar ciudades manchadas',
  3631. '27.solution': 'En las propiedades de dirección seleccione la casilla \'Ninguno\' cerca del nombre de ciudad, haz clic en \'Aplicar\'',
  3632. '28.problemLink': 'W:Puntos_de_Unión._Guía_de_estilo#Bifurcaciones_de_rampas',
  3633. '28.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Address_Properties',
  3634. '28.title': 'Nombre de calle en una rampa bidireccional',
  3635. '28.problem': 'Si la rampa no tiene nombre, el nombre del segmento siguiente se propagará hacia atrás',
  3636. '28.solution': 'En la caja de propiedades de la dirección, marca la casilla \'Ninguno\' en el nombre de la calle y haz clic en \'Aplicar\'',
  3637. '29.problemLink': 'W:Crear_y_editar_rotondas#Creaci.C3.B3n_de_una_rotonda_a_partir_de_una_intersecci.C3.B3n',
  3638. '29.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Address_Properties',
  3639. '29.title': 'Nombre de calle en rotonda',
  3640. '29.problem': 'En Waze, no nombramos los segmentos de las rotondas',
  3641. '29.solution':
  3642. 'En la caja de propiedades de la dirección, marca la casilla \'Ninguno\' en el nombre de la calle y haz clic en \'Aplicar\' y después crea un punto de interés tipo \'intersección / intercambio\' para nombrar la rotonda',
  3643. '34.title': 'Nombre de calle alternativo vacío',
  3644. '34.problem': 'El nombre de calle alternativo está vacío',
  3645. '34.solution': 'Borrar el nombre alternativo de calle vacío',
  3646. '35.title': 'Segmento de vía sin terminar',
  3647. '35.problem': 'Waze no enrutará desde un segmento sin terminar',
  3648. '35.solution': 'Mover un poco el segmento para que el extremo sin terminar sea añadido automáticamente al punto de unión',
  3649. '36.title': 'Punto de unión A innecesario (slow)',
  3650. '36.problem': 'Los segmentos adyacentes al punto de unión A son idénticos',
  3651. '36.solution': 'Selecciona el punto de unión A y pulsa la tecla borrar para unir los dos segmentos',
  3652. '37.title': 'Punto de unión B innecesario (slow)',
  3653. '37.problem': 'Los segmentos adyacentes al punto de unión B son idénticos',
  3654. '37.solution': 'Selecciona el punto de unión B y pulsa la tecla borrar para unir los dos segmentos',
  3655. '38.problemLink': 'W:Restricciones_horarias#En_segmentos',
  3656. '38.title': 'Restricción de segmento caducada (slow)',
  3657. '38.problem': 'El segmento tiene una restricción caducada',
  3658. '38.solution': 'Hacer clic en \'Editar restricciones\' y borrar la restricción caducada',
  3659. '39.problemLink': 'W:Restricciones_horarias#En_giros',
  3660. '39.title': 'Restricción de giro caducada (slow)',
  3661. '39.problem': 'El segmento tiene un giro con una restricción caducada',
  3662. '39.solution': 'Hacer clic en el icono de reloj cerca de la flecha amarilla y borrar la restricción caducada',
  3663. '41.title': 'Conectividad inversa en punto de unión A del segmento',
  3664. '41.problem': 'Hay un giro que va contra la dirección del segmento en el punto de unión A del segmento',
  3665. '41.solution': 'Hacer el segmento \'bidireccional\', restringir todos los giros en el punto de unión A y luego hacer el segmento \'Unidireccional (A→B)\' nuevamente',
  3666. '42.title': 'Conectividad inversa en punto de unión B del segmento',
  3667. '42.problem': 'Hay un giro que va contra la dirección del segmento en el punto de unión B del segmento',
  3668. '42.solution': 'Hacer el segmento \'bidireccional\', restringir todos los giros en el punto de unión B y luego hacer el segmento \'Unidireccional (B→A)\' nuevamente',
  3669. '43.solutionLink': 'W:Guía_rápida_de_edición_de_mapas#Dividir_un_segmento',
  3670. '43.title': 'Auto conectividad',
  3671. '43.problem': 'El segmento está conectado a si mismo',
  3672. '43.solution': 'Divide el segmento en TRES partes',
  3673. '44.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Establecer_giros_permitidos_.28conexiones.29',
  3674. '44.title': 'Sin conexión de salida',
  3675. '44.problem': 'El segmento no tiene ningún giro de salida permitido',
  3676. '44.solution': 'Activa al menos un giro de salida desde el segmento',
  3677. '45.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Establecer_giros_permitidos_.28conexiones.29',
  3678. '45.title': 'Sin conexión de entrada',
  3679. '45.problem': 'El segmento no privado no tiene ningún giro de entrada permitido',
  3680. '45.solution': 'Selecciona un segmento adyacente y activa por lo menos un giro hacia el segmento',
  3681. '46.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Establecer_giros_permitidos_.28conexiones.29',
  3682. '46.title': 'Sin entrada en A (slow)',
  3683. '46.problem': 'El segmento no-privado no tiene ningún giro de entrada habilitado en el punto de unión A',
  3684. '46.solution': 'Selecciona un segmento adyacente y habilita al menos un giro hacia el segmento en el punto de unión A',
  3685. '47.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Establecer_giros_permitidos_.28conexiones.29',
  3686. '47.title': 'Sin entrada en B (slow)',
  3687. '47.problem': 'El segmento no-privado no tiene ningún giro de entrada habilitado en el punto de unión B',
  3688. '47.solution': 'Selecciona un segmento adyacente y habilita al menos un giro hacia el segmento en el punto de unión B',
  3689. '48.solutionLink': 'W:Crear_y_editar_rotondas#Arreglar_rotondas_editadas_manualmente',
  3690. '48.title': 'Segmento de rotonda bidireccional',
  3691. '48.problem': 'El segmento de rotonda es bidireccional',
  3692. '48.solution': 'Rehacer la rotonda',
  3693. '50.solutionLink': 'W:Crear_y_editar_rotondas#Arreglar_rotondas_editadas_manualmente',
  3694. '50.title': 'No hay conectividad en la rotonda (slow)',
  3695. '50.problem': 'El segmento de la rotonda no tiene conectividad con el segmento de rotonda siguiente',
  3696. '50.solution': 'Permitir un giro al segmento adyacente o rehacer la rotonda',
  3697. '57.enabled': true,
  3698. '57.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Address_Properties',
  3699. '57.title': 'Nombre de ciudad en rampa con nombre',
  3700. '57.problem': 'Poner el nombre de ciudad en las rampas puede afectar a los resultados de búsqueda',
  3701. '57.solution': 'En las propiedades de dirección seleccione la casilla \'Ninguno\' cerca del nombre de ciudad, haz clic en \'Aplicar\'',
  3702. '59.enabled': true,
  3703. '59.problemLink': 'W:Corrigiendo_ciudades_\'manchadas\'',
  3704. '59.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Address_Properties',
  3705. '59.title': 'Nombre de Ciudad en Autopista',
  3706. '59.problem': 'Poner nombres de ciudad en la Autopista puede generar ciudades manchadas',
  3707. '59.solution': 'En las propiedades de dirección seleccione la casilla \'Ninguno\' cerca del nombre de ciudad, haz clic en \'Aplicar\'',
  3708. '73.enabled': true,
  3709. '73.title': 'Menos de 3 caracteres de longitud en el nombre de la calle',
  3710. '73.problem': 'El nombre de la calle tiene una longitud de menos de 3 caracteres',
  3711. '73.solution': 'Corrige el nombre de la calle',
  3712. '74.problemLink': 'W:Crear_y_editar_rotondas',
  3713. '74.solutionLink': 'W:Crear_y_editar_rotondas#Arreglar_rotondas_editadas_manualmente',
  3714. '74.title': 'Varios segmentos en el punto de unión A de la rotonda',
  3715. '74.problem': 'La rotonda tiene en el punto de unión A más de un segmento conectado',
  3716. '74.solution': 'Rehacer la rotonda',
  3717. '77.title': 'Calle sin salida con giro en U',
  3718. '77.problem': 'La calle sin salida tiene un giro en U habilitado',
  3719. '77.solution': 'Deshabilitar el giro en U',
  3720. '78.solutionLink': 'W:Guía_rápida_de_edición_de_mapas#Dividir_un_segmento',
  3721. '78.title': 'Segmentos con los mismos puntos de inicio y final (slow)',
  3722. '78.problem': 'Dos segmentos comparten los puntos de inicio y final',
  3723. '78.solution': 'Divide el segmento. También puedes borrar uno de los segmentos si son idénticos',
  3724. '79.title': 'Conector para giros en U demasiado corto (slow)',
  3725. '79.problem': 'La longitud del segmento es menor de 15 metros por lo que el giro en U no es posible',
  3726. '79.solution': 'Aumente la longitud del segmento',
  3727. '87.problemLink': 'W:Crear_y_editar_rotondas',
  3728. '87.solutionLink': 'W:Crear_y_editar_rotondas#Arreglar_rotondas_editadas_manualmente',
  3729. '87.title': 'Más de un segmento de salida en el punto de unión A de la rotonda',
  3730. '87.problem': 'La rotonda tiene en el punto de unión A más de un segmento de salida conectado',
  3731. '87.solution': 'Rehacer la rotonda',
  3732. '90.enabled': true,
  3733. '90.title': 'Segmento de Autopista bidireccional',
  3734. '90.problem': 'La mayoría de las Autopistas están separadas en dos vías de un sentido, por lo que este segmento bidireccional puede ser un error',
  3735. '90.solution': 'Revisar dirección de Autopista',
  3736. '99.title': 'Giro en U en la entrada de rotonda (slow)',
  3737. '99.problem': 'El segmento de entrada a la rotonda tiene un giro en U habilitado',
  3738. '99.solution': 'Deshabilitar el giro en U',
  3739. '101.enabled': false,
  3740. '101.title': 'Zona en construcción (sólo disponible en el informe)',
  3741. '101.problem': 'El segmento está marcado como zona de construcción',
  3742. '101.solution': 'Si la construcción está terminada, volver a conectar el segmento y borrar el sufijo',
  3743. '102.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Establecer_giros_permitidos_.28conexiones.29',
  3744. '102.title': 'Sin salida en A (slow)',
  3745. '102.problem': 'El segmento no tiene ningún giro de salida habilitado en el punto de unión A',
  3746. '102.solution': 'Habilita al menos un giro de salida desde el segmento en el punto de unión A',
  3747. '103.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Establecer_giros_permitidos_.28conexiones.29',
  3748. '103.title': 'Sin salida en B (slow)',
  3749. '103.problem': 'El segmento no tiene ningún giro de salida habilitado en el punto de unión B',
  3750. '103.solution': 'Habilita al menos un giro de salida desde el segmento en el punto de unión B',
  3751. '104.title': 'Vía férrea usada para comentarios',
  3752. '104.problem': 'El segmento de vía férrea es probablemente usado como comentario de mapa',
  3753. '104.solution': 'Borrar el comentario ya que las vías férreas serán añadidas al mapa del cliente',
  3754. '107.title': 'Sin conexión en punto de unión A (slow)',
  3755. '107.problem': 'El punto de unión A del segmento está a menos de 5 metros de otro segmento pero no está conectado',
  3756. '107.solution': 'Conectar el punto de unión A a un segmento cercano o separarlos un poco más',
  3757. '108.title': 'Sin conexión en punto de unión B (slow)',
  3758. '108.problem': 'El punto de unión B del segmento está a menos de 5 metros de otro segmento pero no está conectado',
  3759. '108.solution': 'Conectar el punto de unión B a un segmento cercano o separarlos un poco más',
  3760. '109.solutionLink': 'W:Guía_rápida_de_edición_de_mapas#Eliminar_un_punto_de_uni.C3.B3n',
  3761. '109.title': 'Segmento muy corto',
  3762. '109.problem': 'El segmento tiene menos de 2 metros de longitud, así que es difícil de ver en el mapa',
  3763. '109.solution': 'Aumentar la longitud, borrar el segmento, o unirlo a un segmento adyacente',
  3764. '112.title': 'Más de 55 caracteres en el nombre de la Rampa',
  3765. '112.problem': 'El nombre de la Rampa tiene más de 55 caracteres',
  3766. '112.solution': 'Acorta el nombre de la Rampa',
  3767. '114.enabled': false,
  3768. '114.title': 'No transitable conectada a transitable en el punto de unión A (slow)',
  3769. '114.problem': 'El segmento no transitable tiene un punto de unión con un segmento transitable en el extremo A',
  3770. '114.solution': 'Desconecta el extremo A de todos los segmentos transitables',
  3771. '115.enabled': false,
  3772. '115.title': 'No transitable conectada a transitable en el punto de unión B (slow)',
  3773. '115.problem': 'El segmento no transitable tiene un punto de unión con un segmento transitable en el extremo B',
  3774. '115.solution': 'Desconecta el extremo B de todos los segmentos transitables',
  3775. '116.title': 'Elevación fuera de rango',
  3776. '116.problem': 'La elevación del segmento está fuera de rango',
  3777. '116.solution': 'Corrige la elevación',
  3778. '117.enabled': false,
  3779. '117.title': 'Marcado obsoleto: CONST ZN',
  3780. '117.problem': 'El segmento está marcado con el sufijo obsoleto CONST ZN',
  3781. '117.solution': 'Cambiar CONST ZN a (closed)',
  3782. '118.title': 'Segmentos superpuestos en A (slow)',
  3783. '118.problem': 'El segmento se solapa con el segmento adyacente en el punto de unión A',
  3784. '118.solution': 'Separa los dos segmentos al menos 2º o elimina el nodo de geometría innecesario o borra el segmento duplicado en el punto de unión A',
  3785. '119.title': 'Segmentos superpuestos en B (slow)',
  3786. '119.problem': 'El segmento se solapa con el segmento adyacente en el punto de unión B',
  3787. '119.solution': 'Separa los dos segmentos al menos 2º o elimina el nodo de geometría innecesario o borra el segmento duplicado en el punto de unión B',
  3788. '120.title': 'Giro demasiado cerrado en A (slow)',
  3789. '120.problem': 'El segmento tiene un giro demasiado cerrado en el punto de unión A',
  3790. '120.solution': 'Desactiva el giro cerrado en el punto de unión A o considera separar los segmentos hasta un ángulo de 30°',
  3791. '121.title': 'Giro demasiado cerrado en B (slow)',
  3792. '121.problem': 'El segmento tiene un giro demasiado cerrado en el punto de unión B',
  3793. '121.solution': 'Desactiva el giro cerrado en el punto de unión B o considera separar los segmentos hasta un ángulo de 30°',
  3794. '128.title': 'Comprobación personalizada por el usuario 1',
  3795. '128.problem': 'Alguna de las propiedades del segmento coinciden con la expresión regular definida por el usuario (ver Ajustes→Personalización)',
  3796. '128.solution': 'Resolver el problema',
  3797. '129.title': 'Comprobación personalizada por el usuario 2',
  3798. '129.problem': 'Alguna de las propiedades del segmento coinciden con la expresión regular definida por el usuario (ver Ajustes→Personalización)',
  3799. '129.solution': 'Resolver el problema',
  3800. '130.enabled': true,
  3801. '130.severity': 'N',
  3802. '130.title': 'Nivel de bloqueo de Autopista incorrecto',
  3803. '130.problem': 'El segmento de Autopista no está bloqueado a nivel 4',
  3804. '130.problemLink': 'W:Dudas_frecuentes_editando_mapas#.C2.BFDebo_.22bloquear.22_mis_ediciones.3F',
  3805. '130.solution': 'Bloquear el segmento de Autopista a nivel 4',
  3806. '130.params':
  3807. {'titleEN': 'No lock on Freeway', 'problemEN': 'The Freeway segment should be locked to Lvl 4', 'solutionEN': 'Lock the segment', 'template': '${type}:${lock}', 'regexp': '/^3:[^4]/'},
  3808. '131.enabled': true,
  3809. '131.severity': 'N',
  3810. '131.title': 'No lock on Major Highway',
  3811. '131.problem': 'The Major Highway segment should be locked to Lvl 3',
  3812. '131.problemLink': 'W:Dudas_frecuentes_editando_mapas#.C2.BFDebo_.22bloquear.22_mis_ediciones.3F',
  3813. '131.solution': 'Lock the segment',
  3814. '131.params': {
  3815. 'titleEN': 'No lock on Major Highway',
  3816. 'problemEN': 'The Major Highway segment should be locked to Lvl 3',
  3817. 'solutionEN': 'Lock the segment',
  3818. 'template': '${type}:${lock}:${street}',
  3819. 'regexp': '/^6:[^3]:N-/'
  3820. },
  3821. '133.enabled': true,
  3822. '133.severity': 'N',
  3823. '133.title': 'No lock on Ramp',
  3824. '133.problem': 'The Ramp segment should be locked to Lvl 3',
  3825. '133.problemLink': 'W:Dudas_frecuentes_editando_mapas#.C2.BFDebo_.22bloquear.22_mis_ediciones.3F',
  3826. '133.solution': 'Lock the segment',
  3827. '133.params': {'titleEN': 'No lock on Ramp', 'problemEN': 'The Ramp segment should be locked to Lvl 3', 'solutionEN': 'Lock the segment', 'template': '${type}:${lock}', 'regexp': '/^4:[^3]/'},
  3828. '150.title': 'Nivel de bloqueo de Autopista incorrecto',
  3829. '150.problem': 'El segmento de Autopista no está bloqueado a nivel ${n}',
  3830. '150.solution': 'Bloquear el segmento de Autopista a nivel ${n}',
  3831. '169.title': 'Calle nombrada incorrectamente',
  3832. '169.problem': 'La calle tiene el nombre incorrecto, usando caracteres o palabras ilegales',
  3833. '169.solution': 'Renombre la calle de acuerdo a los criterios establecidos',
  3834. '170.enabled': true,
  3835. '170.title': 'Nombre de calle comienza con minúscula',
  3836. '170.problem': 'El nombre de la calle comienza con minúscula',
  3837. '170.solution': 'Escribir en mayúscula la primera letra del nombre',
  3838. '172.title': 'Nombre de calle con espacios innecesarios',
  3839. '172.problem': 'Espacio en blanco inicial/final o doble en el nombre de la calle',
  3840. '172.solution': 'Borrar los espacios innecesarios del nombre de Calle',
  3841. '173.enabled': false,
  3842. '173.title': 'Nombre de segmento sin espacio antes o después de una abreviación',
  3843. '173.problem': 'Sin espacio antes (\'1943r.\') o después (\'St.Jan\') de una abreviación en el nombre del segmento',
  3844. '173.solution': 'Agregar un espacio antes/después de la abreviación',
  3845. '175.solutionLink': 'W:Crear_y_editar_segmentos_de_vías#Address_Properties',
  3846. '175.title': 'Nombre del segmento sólo con espacios',
  3847. '175.problem': 'El nombre del segmento sólo tiene espacios en blanco en el nombre',
  3848. '175.solution': 'En la caja de propiedades de la dirección, marca la casilla \'Ninguno\' en el nombre de la calle y haz clic en \'Aplicar\' o escribe un nombre de calle correcto',
  3849. '190.title': 'Nombre de ciudad con minúscula',
  3850. '190.problem': 'El nombre de la ciudad comienza con minúscula',
  3851. '190.solution': 'Utiliza este formulario para renombrar la ciudad',
  3852. '192.title': 'Nombre de Ciudad con espacios innecesarios',
  3853. '192.problem': 'Espacio en blanco inicial/final o doble en el nombre de la ciudad',
  3854. '192.solution': 'Use este formulario para renombrar la Ciudad',
  3855. '193.enabled': false,
  3856. '193.title': 'Nombre de Ciudad sin espacio delante o atrás de una abreviación',
  3857. '193.problem': 'Sin espacio antes (\'1943r.\') o después (\'St.Jean\') de una abreviación en el nombre de la ciudad',
  3858. '193.solution': 'Use este formulario para renombrar la Ciudad',
  3859. '200.problemLink': 'W:Giros_implícitos_y_explícitos',
  3860. '200.solutionLink': 'W:Giros_implícitos_y_explícitos#Mejores_pr.C3.A1cticas',
  3861. '200.title': 'Unión A: Giro suave (implícito) en segmento',
  3862. '200.problem': 'El segmento tiene un giro no confirmado',
  3863. '200.solution': 'Haz clic en el giro indicado con un signo de interrogación color púrpura para confirmarlo. Nota: es posible que debas hacer el segmento bidireccional para ver todos los giros',
  3864. '201.problemLink': 'W:Giros_implícitos_y_explícitos',
  3865. '201.solutionLink': 'W:Giros_implícitos_y_explícitos#Mejores_pr.C3.A1cticas',
  3866. '201.title': 'Unión A: Giro suave (implícito) en segmento principal',
  3867. '201.problem': 'El segmento principal tiene un giro no confirmado',
  3868. '201.solution': 'Haz clic en el giro indicado con un signo de interrogación color púrpura para confirmarlo. Nota: es posible que debas hacer el segmento bidireccional para ver todos los giros'
  3869. },
  3870. 'DE': {
  3871. '.codeISO': 'DE',
  3872. '.country': 'Germany',
  3873. '59.enabled': true,
  3874. '59.problemLink': 'W:How_to_label_and_name_roads_(Austria)#Autobahnen_and_Schnellstra.C3.9Fen_.28A_.26_S.29',
  3875. '90.enabled': true,
  3876. '110.enabled': true,
  3877. '150.enabled': true,
  3878. '150.problemLink': 'W:Die_beste_Vorgehensweise_beim_Bearbeiten_der_Karte#Richtung_und_Sperren_von_Stra.C3.9Fen',
  3879. '214.params': {'regexp': '/^7|.+0$/'},
  3880. '215.params': {'regexp': '/^7|.+0$/'}
  3881. },
  3882. 'CZ': {
  3883. '.codeISO': 'CZ',
  3884. '.country': 'Czech Republic',
  3885. '27.enabled': true,
  3886. '52.enabled': true,
  3887. '73.enabled': true,
  3888. '90.enabled': true,
  3889. '105.enabled': true,
  3890. '150.enabled': true,
  3891. '150.problemLink': 'F:t=64980&p=572847#p572847',
  3892. '150.params': {'n': 4},
  3893. '151.enabled': true,
  3894. '151.problemLink': 'F:t=64980&p=572847#p572847',
  3895. '151.params': {'n': 4},
  3896. '152.enabled': true,
  3897. '152.problemLink': 'F:t=64980&p=572847#p572847',
  3898. '152.params': {'n': 4},
  3899. '153.enabled': true,
  3900. '153.problemLink': 'F:t=64980&p=572847#p572847',
  3901. '153.params': {'n': 4},
  3902. '154.enabled': true,
  3903. '154.problemLink': 'F:t=64980&p=572847#p572847',
  3904. '154.params': {'n': 3},
  3905. '170.enabled': true,
  3906. '170.params': {
  3907. 'regexp':
  3908. '/^(?!(alej|bratranců|bratří|bří|dr\\.|gen\\.|generála|kapitána|kpt\\.|krále|majora|mjr\\.|most|nábř\\.|nábřeží|nám\\.|náměstí|park|plk\\.|plukovníka|podplukovníka|por\\.|poručíka|pplk\\.|prap\\.|praporčíka|prof\\.|promenáda|sad|sady|sídl\\.|sídliště|tř\\.|třída|tunel|ul\\.|ulice|zahrada) [^a-z])[a-z]/'
  3909. }
  3910. },
  3911. 'CL': {'.codeISO': 'CL', '.country': 'Chile', '.fallbackCode': 'ES', '59.enabled': true, '150.enabled': true, '170.enabled': true, '200.enabled': false},
  3912. 'CH': {
  3913. '.codeISO': 'CH',
  3914. '.country': 'Switzerland',
  3915. '59.enabled': true,
  3916. '59.problemLink': 'W:How_to_label_and_name_roads_(Austria)#Autobahnen_and_Schnellstra.C3.9Fen_.28A_.26_S.29',
  3917. '90.enabled': true,
  3918. '110.enabled': true,
  3919. '150.enabled': true,
  3920. '150.problemLink': 'W:Die_beste_Vorgehensweise_beim_Bearbeiten_der_Karte#Richtung_und_Sperren_von_Stra.C3.9Fen'
  3921. },
  3922. 'BN': {
  3923. '.codeISO': 'BN',
  3924. '.country': 'Brunei',
  3925. '69.enabled': true,
  3926. '73.enabled': true,
  3927. '150.enabled': true,
  3928. '150.params': {'n': 2},
  3929. '151.enabled': true,
  3930. '151.params': {'n': 2},
  3931. '152.enabled': true,
  3932. '152.params': {'n': 2}
  3933. },
  3934. 'BG': {'.codeISO': 'BG', '.country': 'Bulgaria', '27.enabled': true},
  3935. 'BE': {
  3936. '.codeISO': 'BE',
  3937. '.country': 'Belgium',
  3938. '109.params': {'n': 6},
  3939. '150.enabled': true,
  3940. '150.problemLink': 'W:Benelux_Freeway',
  3941. '151.enabled': true,
  3942. '151.problemLink': 'W:Benelux_Major_Highway',
  3943. '152.enabled': true,
  3944. '152.problemLink': 'W:Benelux_Minor_Highway',
  3945. '154.enabled': true,
  3946. '154.problemLink': 'W:Benelux_Primary_Street',
  3947. '160.enabled': true,
  3948. '160.problemLink': 'W:Benelux_Freeway',
  3949. '160.params':
  3950. {'solutionEN': 'Rename the Freeway segment to a \'Anum\' or \'Anum - Enum\' or \'Anum ri Dir1 / Dir2\'', 'regexp': '!/^(A|B|E)[0-9]+( - (A|E)[0-9]+)*( ri [^\\/]+( \\/ [^\\/]+)*)?$/'},
  3951. '163.enabled': true,
  3952. '163.problemLink': 'W:Benelux_Roads#Highways',
  3953. '163.solutionLink': 'W:Benelux_Ramp',
  3954. '163.params':
  3955. {'titleEN': 'Ramp name starts with a number', 'problemEN': 'The Ramp name starts with a number', 'solutionEN': 'Rename the Ramp in accordance with the guidelines', 'regexp': '/^([0-9]+)/'},
  3956. '171.enabled': true,
  3957. '171.problemLink': 'W:Benelux_Ramp#Text_To_Speech_.28TTS.29_-_ri_-_di',
  3958. '171.params': {'problemEN': 'The street name contains incorrect \'ri.\' abbreviation', 'solutionEN': 'Change the \'ri.\' abbreviation to \'ri\' (no dot)', 'regexp': '/(^|\\b)ri\\./i'}
  3959. },
  3960. 'AU': {
  3961. '.codeISO': 'AU',
  3962. '.country': 'Australia',
  3963. '27.enabled': true,
  3964. '59.enabled': true,
  3965. '59.problemLink': 'W:How_to_label_and_name_roads_(Australia)#Freeway',
  3966. '112.enabled': false,
  3967. '150.enabled': true,
  3968. '150.problemLink': 'W:How_to_label_and_name_roads_(Australia)#Freeway',
  3969. '151.enabled': true,
  3970. '151.problemLink': 'W:How_to_label_and_name_roads_(Australia)#Major_Highway',
  3971. '151.params': {'n': 3},
  3972. '152.enabled': true,
  3973. '152.problemLink': 'W:How_to_label_and_name_roads_(Australia)#Minor_Highway'
  3974. },
  3975. 'AT': {
  3976. '.codeISO': 'AT',
  3977. '.country': 'Austria',
  3978. '59.enabled': true,
  3979. '59.problemLink': 'W:How_to_label_and_name_roads_(Austria)#Autobahnen_and_Schnellstra.C3.9Fen_.28A_.26_S.29',
  3980. '90.enabled': true,
  3981. '110.enabled': true,
  3982. '150.enabled': true,
  3983. '150.problemLink': 'W:Die_beste_Vorgehensweise_beim_Bearbeiten_der_Karte#Richtung_und_Sperren_von_Stra.C3.9Fen'
  3984. },
  3985. 'AR': {
  3986. '.codeISO': 'AR',
  3987. '.country': 'Argentina',
  3988. '.fallbackCode': 'ES',
  3989. '150.enabled': true,
  3990. '169.enabled': true,
  3991. '169.solutionLink': 'W:Como_categorizar_y_nombrar_calles_(Argentina)#Calles',
  3992. '169.params': {'regexp': '/(^|\\b)[Cc]alle(?! [0-9]+( ([A-Z]|bis))?$)/'}
  3993. }
  3994. };
  3995. var CC_UNDEFINED = 48;
  3996. var CC_NULL = 34;
  3997. var CC_BOOL = 46;
  3998. var CC_NUMBER = 44;
  3999. var CC_STRING = 58;
  4000. var CC_GLOBAL = 5;
  4001. var CC_FUNCTION = 37;
  4002. var CC_ARRAY = 32;
  4003. var CC_OBJECT = 42;
  4004. var CC_REGEXP = 23;
  4005. var CC_DATE = 33;
  4006. function classOf(val) {
  4007. return {}.toString.call(val).slice(8, -1)
  4008. }
  4009. function classCode(obj) {
  4010. return {}.toString.call(obj).charCodeAt(8) ^ {}.toString.call(obj).charCodeAt(11)
  4011. }
  4012. function classCodeIs(obj, cc) {
  4013. return cc === classCode(obj)
  4014. }
  4015. function classCodeDefined(obj) {
  4016. return CC_UNDEFINED !== classCode(obj)
  4017. }
  4018. function isEmpty(obj) {
  4019. for (var k in obj)
  4020. if (obj.hasOwnProperty(k)) return false;
  4021. return true
  4022. }
  4023. function deepCopy(obj) {
  4024. switch (classCode(obj)) {
  4025. case CC_ARRAY:
  4026. var cpy = [];
  4027. for (var i = 0, len = obj.length; i < len; i++) cpy[i] = deepCopy(obj[i]);
  4028. return cpy;
  4029. case CC_OBJECT:
  4030. var cpy = {};
  4031. for (var attr in obj)
  4032. if (obj.hasOwnProperty(attr)) cpy[attr] = deepCopy(obj[attr]);
  4033. return cpy
  4034. }
  4035. return obj
  4036. }
  4037. function deepCompare(obj1, obj2) {
  4038. if (obj1 === obj2) return true;
  4039. if (classCode(obj1) !== classCode(obj2)) return false;
  4040. switch (classCode(obj1)) {
  4041. case CC_ARRAY:
  4042. if (obj1.length != obj2.length) return false;
  4043. for (var i = 0; i < obj1.length; i++)
  4044. if (!deepCompare(obj1[i], obj2[i])) return false;
  4045. return true;
  4046. case CC_OBJECT:
  4047. for (var k in obj1) {
  4048. if (!obj1.hasOwnProperty(k)) continue;
  4049. if (!obj2.hasOwnProperty(k)) return false;
  4050. if (!deepCompare(obj1[k], obj2[k])) return false
  4051. }
  4052. return true
  4053. }
  4054. return false
  4055. }
  4056. function getDirection(seg) {
  4057. return (seg.attributes.fwdDirection ? 1 : 0) + (seg.attributes.revDirection ? 2 : 0)
  4058. }
  4059. function getLocalizedValue(val, country) {
  4060. var ipu = OpenLayers.INCHES_PER_UNIT;
  4061. var mph = false;
  4062. if (country == 'United Kingdom' || country == 'Jersey' || country == 'Guernsey' || country == 'United States') mph = true;
  4063. return mph ? Math.round(val * ipu['km'] / ipu['mi']) : val
  4064. };
  4065. var DEF_DEBUG = false;
  4066. var _THUI = {};
  4067. _THUI.NONE = 1;
  4068. _THUI.DIV = 2;
  4069. _THUI.NUMBER = 3;
  4070. _THUI.RADIO = 4;
  4071. _THUI.CHECKBOX = 5;
  4072. _THUI.BUTTON = 6;
  4073. _THUI.TEXT = 7;
  4074. _THUI.PASSWORD = 8;
  4075. _THUI.DATE = 9;
  4076. var _WV = {};
  4077. var WME_BETA = false;
  4078. _WV.$loggedIn = 0;
  4079. _WV.$functions = [];
  4080. var _UI = {};
  4081. var _RT = {};
  4082. var _REP = {};
  4083. var GL_SHOWLAYERS = false;
  4084. var GL_LAYERNAME = 'WME Validator';
  4085. var GL_LAYERUNAME = 'WMEValidator';
  4086. var GL_LAYERACCEL = 'toggleWMEValidator';
  4087. var GL_LAYERSHORTCUT = 'A+v';
  4088. var GL_TBCOLOR = 'WMETB_color';
  4089. var GL_TBPREFIX = 'WMETB';
  4090. var GL_WMECHCOLOR = 'WMECH_color';
  4091. var GL_NOTECOLOR = '#30E';
  4092. var GL_NOTEBGCOLOR = '#EEF';
  4093. var GL_WARNINGCOLOR = '#DA0';
  4094. var GL_WARNINGBGCOLOR = '#FFE';
  4095. var GL_ERRORCOLOR = '#E00';
  4096. var GL_ERRORBGCOLOR = '#FEE';
  4097. var GL_CUSTOM1COLOR = '#0A0';
  4098. var GL_CUSTOM1BGCOLOR = '#EFE';
  4099. var GL_CUSTOM2COLOR = '#09E';
  4100. var GL_CUSTOM2BGCOLOR = '#EFF';
  4101. var GL_VISITEDCOLOR = '#0E0';
  4102. var GL_VISITEDBGCOLOR = '#EFE';
  4103. var GL_NOID = 'No ID';
  4104. var GL_GRAYCOLOR = '#AAA';
  4105. var GL_TODOMARKER = 'TODO: ';
  4106. var RT_RUNWAY = 19;
  4107. var RR_RUNWAY = 1;
  4108. var RT_RAILROAD = 18;
  4109. var RR_RAILROAD = 2;
  4110. var RT_STAIRWAY = 16;
  4111. var RR_STAIRWAY = 3;
  4112. var RT_BOARDWALK = 10;
  4113. var RR_BOARDWALK = 4;
  4114. var RT_TRAIL = 5;
  4115. var RR_TRAIL = 5;
  4116. var RT_PRIVATE = 17;
  4117. var RR_PRIVATE = 6;
  4118. var RT_PARKING = 20;
  4119. var RR_PARKING = 7;
  4120. var RT_DIRT = 8;
  4121. var RR_DIRT = 8;
  4122. var RT_SERVICE = 21;
  4123. var RR_SERVICE = 9;
  4124. var RT_STREET = 1;
  4125. var RR_STREET = 10;
  4126. var RT_PRIMARY = 2;
  4127. var RR_PRIMARY = 11;
  4128. var RT_RAMP = 4;
  4129. var RR_RAMP = 12;
  4130. var RT_MINOR = 7;
  4131. var RR_MINOR = 13;
  4132. var RT_MAJOR = 6;
  4133. var RR_MAJOR = 14;
  4134. var RT_FREEWAY = 3;
  4135. var RR_FREEWAY = 15;
  4136. var DIR_UNKNOWN = 0;
  4137. var DIR_AB = 1;
  4138. var DIR_BA = 2;
  4139. var DIR_TWO = 3;
  4140. var ST_STOP = 1116352408;
  4141. var ST_RUN = 1899447441;
  4142. var ST_PAUSE = 3049323471;
  4143. var ST_CONTINUE = 3921009573;
  4144. var DIR_L2R = 961987163;
  4145. var DIR_R2L = -961987163;
  4146. var RF_HTML = 1508970993;
  4147. var RF_BB = 2453635748;
  4148. var RF_LIST = 2870763221;
  4149. var RF_UPDATEMAXSEVERITY = 1;
  4150. var RF_CREATEPACK = 2;
  4151. var RT_STOP = 1;
  4152. var RT_NEXTCHECK = 2;
  4153. var RS_NOTE = 1;
  4154. var RS_WARNING = 2;
  4155. var RS_ERROR = 3;
  4156. var RS_CUSTOM2 = 4;
  4157. var RS_CUSTOM1 = 5;
  4158. var RS_MAX = 6;
  4159. var LIMIT_PERCHECK = 300;
  4160. var LIMIT_TOLERANCE = 6;
  4161. var LIMIT_DEBUG = 20;
  4162. var CK_TBFIRST = 1;
  4163. var CK_TBLAST = 9;
  4164. var CK_WMECHFIRST = 13;
  4165. var CK_WMECHLAST = 22;
  4166. var CK_TYPEFIRST = 70;
  4167. var CK_TYPELAST = 72;
  4168. var CK_MATCHFIRST = 128;
  4169. var CK_MATCHLAST = 139;
  4170. var CK_CUSTOMFIRST = 130;
  4171. var CK_CUSTOMLAST = 139;
  4172. var CK_LOCKFIRST = 150;
  4173. var CK_LOCKLAST = 158;
  4174. var CK_STREETTNFIRST = 160;
  4175. var CK_STREETTNLAST = 167;
  4176. var CK_STREETNAMEFIRST = 170;
  4177. var CK_STREETNAMELAST = 175;
  4178. var CK_CITYNAMEFIRST = 190;
  4179. var CK_CITYNAMELAST = 193;
  4180. var CK_MIRRORFIRST = 200;
  4181. var CK_MIRRORLAST = 201;
  4182. var CL_UI = 2821834349 - 1;
  4183. var ID_PREFIX = 2554220882;
  4184. var CL_TABS = 2821834349;
  4185. var CL_PANEL = 2952996808;
  4186. var CL_BUTTONS = 3210313671;
  4187. var CL_MSG = 3336571891;
  4188. var CL_MSGY = 3584528711;
  4189. var CL_TRANSLATETIP = 3584528711 + 1;
  4190. var AS_LICENSE = 'license';
  4191. var AS_VERSION = 'version';
  4192. var AS_NONEDITABLES = 'non_editables';
  4193. var AS_DUPLICATES = 'duplicates';
  4194. var AS_STREETS = 'streets';
  4195. var AS_OTHERS = 'others';
  4196. var AS_NOTES = 'notes';
  4197. var AS_YOUREDITS = 'your_edits';
  4198. var AS_UPDATEDSINCE = 'updated_since';
  4199. var AS_CITYNAME = 'city_name';
  4200. var AS_CHECKS = 'checks';
  4201. var AS_UPDATEDBY = 'updated_by';
  4202. var AS_SOUNDS = 'sounds';
  4203. var AS_HLISSUES = 'hl_issues';
  4204. var AS_SLOWCHECKS = 'slow_checks';
  4205. var AS_CUSTOM1TEMPLATE = 'custom1_template';
  4206. var AS_CUSTOM1REGEXP = 'custom1_regexp';
  4207. var AS_CUSTOM2TEMPLATE = 'custom2_template';
  4208. var AS_CUSTOM2REGEXP = 'custom2_regexp';
  4209. var AS_REPORTEXT = 'report_ext';
  4210. var ID_PROPERTY = 3835390401;
  4211. var ID_PROPERTY_DISABLED = 3835390401 + 1;
  4212. var CL_COLLAPSE = 4022224774;
  4213. var CL_NOTE = 264347078;
  4214. var CL_WARNING = 604807628;
  4215. var CL_ERROR = 770255983;
  4216. var CL_CUSTOM1 = 770255983 + 1;
  4217. var CL_CUSTOM2 = 770255983 + 2;
  4218. var CL_RIGHTTIP = 1249150122;
  4219. var CL_RIGHTTIPPOPUP = 1249150122 + 1;
  4220. var CL_RIGHTTIPDESCR = 1249150122 + 2;
  4221. var AS_NAME = 'WME_Validator';
  4222. var SZ_PANEL_HEIGHT = 190;
  4223. var SCAN_ZOOM = 4;
  4224. var SCAN_STEP = 100;
  4225. var HL_WIDTH = 30;
  4226. var HL_OPACITY = .4;
  4227. var I_SEVERITY = 0;
  4228. var I_SEGMENTCOPY = 1;
  4229. var I_ISTBCOLOR = 2;
  4230. var I_ISWMECHCOLOR = 3;
  4231. var I_ISPARTIAL = 4;
  4232. var I_CITYID = 5;
  4233. var CO_MIN = 0;
  4234. var CO_REGEXP = 0;
  4235. var CO_STRING = 1;
  4236. var CO_NUMBER = 2;
  4237. var CO_BOOL = 3;
  4238. var CO_MAX = 3;
  4239. var WD_SHORT = 5;
  4240. var WD_LONG = 1E4;
  4241. var Wa = null;
  4242. var nW = null;
  4243. var WM = null;
  4244. var WLM = null;
  4245. var WSM = null;
  4246. var WMo = null;
  4247. var WC = null;
  4248. var UW = null;
  4249. var R = null;
  4250. function esc(msg) {
  4251. return msg.split('"').join('\\"').split('\n').join('\\n')
  4252. }
  4253. function escRE(e) {
  4254. return e.split('\\')
  4255. .join('\\\\')
  4256. .split('^')
  4257. .join('\\^')
  4258. .split('$')
  4259. .join('\\$')
  4260. .split('+')
  4261. .join('\\+')
  4262. .split('?')
  4263. .join('\\?')
  4264. .split(':')
  4265. .join('\\:')
  4266. .split('!')
  4267. .join('\\!')
  4268. .split('.')
  4269. .join('\\.')
  4270. .split('-')
  4271. .join('\\-')
  4272. .split('*')
  4273. .join('.*')
  4274. .split('(')
  4275. .join('\\(')
  4276. .split(')')
  4277. .join('\\)')
  4278. .split('[')
  4279. .join('\\[')
  4280. .split(']')
  4281. .join('\\]')
  4282. .split('{')
  4283. .join('\\{')
  4284. .split('}')
  4285. .join('\\}')
  4286. }
  4287. function getMsg(mType, msg, newLine) {
  4288. return 'WME Validator v' + WV_VERSION + (mType ? ' ' + mType : '') + (msg ? ':' + (newLine ? '\n' : ' ') + msg : '')
  4289. }
  4290. function log(msg) {
  4291. window.console.log(getMsg('', msg))
  4292. }
  4293. function error(msg) {
  4294. var s = getMsg('error', msg, true);
  4295. log(s);
  4296. if (!isErrorFlag()) {
  4297. setErrorFlag();
  4298. alert(s)
  4299. }
  4300. async(F_PAUSE);
  4301. return -1
  4302. }
  4303. function warning(msg) {
  4304. var s = getMsg('warning', msg, true);
  4305. log(s);
  4306. alert(s);
  4307. return -1
  4308. }
  4309. function info(msg) {
  4310. var s = getMsg('', msg, true);
  4311. alert(s);
  4312. return -1
  4313. }
  4314. function sync(func, param) {
  4315. return func(param)
  4316. }
  4317. function async(func, param, inter) {
  4318. var i = 0;
  4319. if (inter) i = inter;
  4320. window.setTimeout(func, i, param)
  4321. }
  4322. function clearWD() {
  4323. window.clearTimeout(_RT.$WDmoveID);
  4324. window.clearTimeout(_RT.$WDloadID);
  4325. _RT.$WDmoveID = -1;
  4326. _RT.$WDloadID = -1
  4327. }
  4328. function updateTimer(nstate) {
  4329. var csec = Date.now() / 1E3;
  4330. if (RTStateIs(ST_RUN)) _RT.$timer.$secInRun += csec - _RT.$timer.$lastUpdate;
  4331. if (RTStateIs(ST_STOP)) _RT.$timer.$secInRun = 0;
  4332. _RT.$timer.$lastUpdate = csec
  4333. }
  4334. function setRTState(nstate) {
  4335. if (RTStateIs(ST_STOP) && ST_PAUSE === nstate) nstate = ST_STOP;
  4336. updateTimer(nstate);
  4337. _RT.$state = nstate;
  4338. async(F_UPDATEUI)
  4339. }
  4340. function clearReport() {
  4341. _RT.$seen = {};
  4342. _RT.$revalidate = {};
  4343. _REP = {
  4344. $debugCounter: LIMIT_DEBUG,
  4345. $isLimitPerCheck: false,
  4346. $isEditableFound: false,
  4347. $counterTotal: 0,
  4348. $maxSeverity: 0,
  4349. $incompleteIDs: {},
  4350. $users: {},
  4351. $reportCounters: {},
  4352. $cityCounters: {},
  4353. $countries: {},
  4354. $cities: {},
  4355. $streets: {},
  4356. $cityIDs: {},
  4357. $unsortedCityIDs: [],
  4358. $sortedCityIDs: []
  4359. };
  4360. _RT.$reportEditableNotFound = false
  4361. }
  4362. function beep(dur, oscType) {
  4363. try {
  4364. if (_UI.pSettings.pScanner.oSounds.CHECKED) _AUDIO.beep(dur, oscType)
  4365. } catch (e) {
  4366. }
  4367. }
  4368. function setErrorFlag() {
  4369. _RT.$error = true
  4370. }
  4371. function isErrorFlag() {
  4372. return _RT.$error
  4373. }
  4374. function clearErrorFlag() {
  4375. _RT.$error = false
  4376. }
  4377. function RTStateIs(st) {
  4378. return getRTState() === st
  4379. }
  4380. function getRTState() {
  4381. return _RT.$state
  4382. }
  4383. function HLAllSegments() {
  4384. if (RTStateIs(ST_STOP) || RTStateIs(ST_PAUSE))
  4385. if (_UI.pSettings.pScanner.oHLReported.CHECKED)
  4386. sync(F_VALIDATE, false);
  4387. else
  4388. sync(F_VALIDATE, true);
  4389. async(F_UPDATEUI)
  4390. }
  4391. function ForceHLAllSegments() {
  4392. _RT.$isMapChanged = true;
  4393. HLAllSegments()
  4394. }
  4395. function resetDefaults() {
  4396. _UI.pMain.pFilter.oExcludeNonEditables.CHECKED = true;
  4397. _UI.pMain.pFilter.oExcludeDuplicates.CHECKED = true;
  4398. _UI.pMain.pFilter.oExcludeStreets.CHECKED = false;
  4399. _UI.pMain.pFilter.oExcludeOther.CHECKED = false;
  4400. _UI.pMain.pFilter.oExcludeNotes.CHECKED = false;
  4401. _UI.pMain.pSearch.oIncludeYourEdits.CHECKED = false;
  4402. _UI.pMain.pSearch.oIncludeUpdatedBy.VALUE = '';
  4403. _RT.$includeUpdatedByCache = {};
  4404. _UI.pMain.pSearch.oIncludeUpdatedSince.VALUE = '';
  4405. _RT.$includeUpdatedSinceTime = 0;
  4406. _UI.pMain.pSearch.oIncludeCityName.VALUE = '';
  4407. _RT.$includeCityNameCache = {};
  4408. _UI.pMain.pSearch.oIncludeChecks.VALUE = '';
  4409. _RT.$includeChecksCache = {};
  4410. _UI.pSettings.pScanner.oSlowChecks.CHECKED = true;
  4411. _UI.pSettings.pScanner.oReportExt.CHECKED = true;
  4412. _UI.pSettings.pScanner.oHLReported.CHECKED = true;
  4413. _UI.pSettings.pScanner.oSounds.CHECKED = false;
  4414. _UI.pSettings.pCustom.oTemplate1.VALUE = '';
  4415. _UI.pSettings.pCustom.oRegExp1.VALUE = '';
  4416. _UI.pSettings.pCustom.oTemplate2.VALUE = '';
  4417. _UI.pSettings.pCustom.oRegExp2.VALUE = ''
  4418. }
  4419. function cmpCheckIDs(a, b) {
  4420. var checkA = _RT.$checks[a], checkB = _RT.$checks[b];
  4421. if (checkA.SEVERITY !== checkB.SEVERITY) return checkB.SEVERITY - checkA.SEVERITY;
  4422. var cmp = checkA.TITLE.localeCompare(checkB.TITLE);
  4423. if (!cmp) return a - b;
  4424. return cmp
  4425. }
  4426. function checkNoCity(str) {
  4427. return str ? str : 'No City'
  4428. }
  4429. function checkNoStreet(str) {
  4430. return str ? str : 'No Street'
  4431. }
  4432. function getFilteredSeverity(oldSeverity, checkID, checkToHL) {
  4433. if (!_UI.pMain.pSearch.oIncludeChecks.VALUE) return oldSeverity;
  4434. var check = _RT.$checks[checkID];
  4435. if (checkToHL && check.REPORTONLY) return 0;
  4436. var textSeverity = getTextSeverity(check.SEVERITY).toUpperCase();
  4437. var cache = _RT.$includeChecksCache;
  4438. var hash = checkID;
  4439. if (hash in cache) {
  4440. if (cache[hash]) return check.SEVERITY
  4441. } else {
  4442. var forChecks = _UI.pMain.pSearch.oIncludeChecks.VALUE;
  4443. var ccode = _RT.$cachedTopCCode;
  4444. var options = trO(check.OPTIONS, ccode);
  4445. var curTitle = exSOS(check.TITLE, options, 'titleEN');
  4446. try {
  4447. cache[hash] = false;
  4448. if (_WV.checkAccessFor(forChecks, function(e) {
  4449. if (/^#?\d+$/.test(e)) {
  4450. if ('#' === e.charAt(0)) e = e.slice(1);
  4451. return +checkID === +e
  4452. }
  4453. if (e.toUpperCase() === textSeverity) return true;
  4454. e = escRE(e);
  4455. var r = new RegExp('^' + e + '$', 'i');
  4456. return r.test(curTitle)
  4457. })) {
  4458. cache[hash] = true;
  4459. return check.SEVERITY
  4460. }
  4461. } catch (e) {
  4462. }
  4463. }
  4464. return 0
  4465. }
  4466. function getFilteredSeverityObj(oldSeverity, checkIDs, checkToHL) {
  4467. if (!_UI.pMain.pSearch.oIncludeChecks.VALUE) return oldSeverity;
  4468. var ret = 0;
  4469. for (var cid in checkIDs) {
  4470. if (!checkIDs.hasOwnProperty(cid)) continue;
  4471. var check = _RT.$checks[cid];
  4472. if (getFilteredSeverity(check.SEVERITY, cid, checkToHL))
  4473. if (ret < check.SEVERITY) {
  4474. ret = check.SEVERITY;
  4475. if (_RT.$curMaxSeverity === ret) return ret
  4476. }
  4477. }
  4478. return ret
  4479. }
  4480. function checkFilter(severity, segmentCopy, seenSegments) {
  4481. if (seenSegments) {
  4482. if (segmentCopy.$segmentID in seenSegments && _UI.pMain.pFilter.oExcludeDuplicates.CHECKED) return false;
  4483. seenSegments[segmentCopy.$segmentID] = null
  4484. }
  4485. if ((RR_STREET === segmentCopy.$typeRank || RR_SERVICE === segmentCopy.$typeRank) && _UI.pMain.pFilter.oExcludeStreets.CHECKED) return false;
  4486. if (RR_SERVICE > segmentCopy.$typeRank && _UI.pMain.pFilter.oExcludeOther.CHECKED) return false;
  4487. if (!segmentCopy.$isEditable && _UI.pMain.pFilter.oExcludeNonEditables.CHECKED) return false;
  4488. if (RS_NOTE === severity && _UI.pMain.pFilter.oExcludeNotes.CHECKED) return false;
  4489. if (segmentCopy.$userID !== _RT.$topUser.$userID && !_UI.pMain.pSearch.oIncludeYourEdits.NODISPLAY && _UI.pMain.pSearch.oIncludeYourEdits.CHECKED) return false;
  4490. if (!_UI.pMain.pSearch.oIncludeUpdatedBy.NODISPLAY && _UI.pMain.pSearch.oIncludeUpdatedBy.VALUE) {
  4491. var cache = _RT.$includeUpdatedByCache;
  4492. var hash = segmentCopy.$userID;
  4493. if (hash in cache) {
  4494. if (!cache[hash]) return false
  4495. } else {
  4496. var forUser = _UI.pMain.pSearch.oIncludeUpdatedBy.VALUE;
  4497. var curUser = _REP.$users[segmentCopy.$userID];
  4498. try {
  4499. cache[hash] = false;
  4500. if (curUser !== _RT.$topUser.$userName && !_RT.$topUser.$isCM) return false;
  4501. if (_RT.$topUser.$isCM && -1 === _RT.$topUser.$countryIDs.indexOf(segmentCopy.$countryID)) return false;
  4502. if (!_WV.checkAccessFor(forUser, function(e) {
  4503. e = escRE(e);
  4504. e = e.replace(/(^|\b)(me|i)($|\b)/gi, _RT.$topUser.$userName);
  4505. var r = new RegExp('^' + e + '$', 'i');
  4506. return r.test(curUser)
  4507. }))
  4508. return false;
  4509. cache[hash] = true
  4510. } catch (e) {
  4511. }
  4512. }
  4513. }
  4514. if (segmentCopy.$updated && _UI.pMain.pSearch.oIncludeUpdatedSince.VALUE) try {
  4515. if (!_RT.$includeUpdatedSinceTime) _RT.$includeUpdatedSinceTime = (new Date(_UI.pMain.pSearch.oIncludeUpdatedSince.VALUE)).getTime();
  4516. if (segmentCopy.$updated < _RT.$includeUpdatedSinceTime) return false
  4517. } catch (e) {
  4518. }
  4519. if (_UI.pMain.pSearch.oIncludeCityName.VALUE) {
  4520. if (!segmentCopy.$cityID) return false;
  4521. var cache = _RT.$includeCityNameCache;
  4522. var hash = segmentCopy.$cityID;
  4523. if (hash in cache) {
  4524. if (!cache[hash]) return false
  4525. } else {
  4526. var forCity = _UI.pMain.pSearch.oIncludeCityName.VALUE;
  4527. var curCity = _REP.$cities[segmentCopy.$cityID];
  4528. try {
  4529. cache[hash] = false;
  4530. if (!_WV.checkAccessFor(forCity, function(e) {
  4531. e = escRE(e);
  4532. var r = new RegExp('^' + e + '$', 'i');
  4533. return r.test(curCity)
  4534. }))
  4535. return false;
  4536. cache[hash] = true
  4537. } catch (e) {
  4538. }
  4539. }
  4540. }
  4541. return true
  4542. }
  4543. function trO(obj, ccode) {
  4544. if (obj) return _I18n.getValueOC(obj, ccode)
  4545. }
  4546. function getCheckOptions(checkID, ccode) {
  4547. return _I18n.getValueOC(_RT.$checks[checkID].OPTIONS, ccode)
  4548. }
  4549. function trLeft(dir) {
  4550. if ('ltr' === dir)
  4551. return 'left';
  4552. else
  4553. return 'right'
  4554. }
  4555. function trRight(dir) {
  4556. if ('ltr' === dir)
  4557. return 'right';
  4558. else
  4559. return 'left'
  4560. }
  4561. function trS(label) {
  4562. return _I18n.getString(label)
  4563. }
  4564. function trSO(label, options) {
  4565. return _I18n.expandSO(_I18n.getString(label), options)
  4566. }
  4567. function exSOS(str, options, subst) {
  4568. if (options && _I18n.$defLng === _RT.$lng && options[subst])
  4569. return _I18n.expandSO(options[subst], options);
  4570. else
  4571. return _I18n.expandSO(str, options)
  4572. }
  4573. function getTextSeverity(sev) {
  4574. switch (sev) {
  4575. case RS_WARNING:
  4576. return 'warning';
  4577. case RS_ERROR:
  4578. return 'error';
  4579. case RS_CUSTOM1:
  4580. return 'custom1';
  4581. case RS_CUSTOM2:
  4582. return 'custom2'
  4583. }
  4584. return 'note'
  4585. }
  4586. function onUpdateUI(e) {
  4587. async(F_UPDATEUI, e)
  4588. }
  4589. function onShowChecks(e) {
  4590. sync(F_SHOWREPORT, RF_LIST)
  4591. }
  4592. function onCreatePack(e) {
  4593. sync(F_SHOWREPORT, RF_CREATEPACK)
  4594. }
  4595. function onShowReport(e) {
  4596. sync(F_SHOWREPORT, RF_HTML)
  4597. }
  4598. function onShareReport(e) {
  4599. sync(F_SHOWREPORT, RF_BB)
  4600. }
  4601. function onWarning(e) {
  4602. async(F_ONWARNING, e)
  4603. }
  4604. function onLogin() {
  4605. async(F_ONLOGIN)
  4606. }
  4607. function onMergeEnd() {
  4608. _RT.$isMapChanged = true;
  4609. window.clearTimeout(_RT.$WDmoveID);
  4610. window.clearTimeout(_RT.$WDloadID);
  4611. async(F_ONMERGEEND)
  4612. }
  4613. function onMoveEnd() {
  4614. if (RTStateIs(ST_RUN) || RTStateIs(ST_CONTINUE))
  4615. async(F_ONMOVEEND);
  4616. else
  4617. ForceHLAllSegments()
  4618. }
  4619. function onLoadStart() {
  4620. async(F_ONLOADSTART)
  4621. }
  4622. function onChangeLayer(e) {
  4623. sync(F_ONCHANGELAYER, e)
  4624. }
  4625. function onSegmentsChanged(e) {
  4626. _RT.$isMapChanged = true;
  4627. sync(F_ONSEGMENTSCHANGED, e)
  4628. }
  4629. function onSegmentsRemoved(e) {
  4630. _RT.$isMapChanged = true;
  4631. if (1 === e.length)
  4632. if (RTStateIs(ST_STOP) || RTStateIs(ST_PAUSE)) sync(F_ONSEGMENTSCHANGED, e)
  4633. }
  4634. function onSegmentsAdded(e) {
  4635. _RT.$isMapChanged = true
  4636. }
  4637. function onNodesChanged(e) {
  4638. _RT.$isMapChanged = true;
  4639. sync(F_ONNODESCHANGED, e)
  4640. }
  4641. function onNodesRemoved(e) {
  4642. _RT.$isMapChanged = true;
  4643. if (1 === e.length)
  4644. if (RTStateIs(ST_STOP) || RTStateIs(ST_PAUSE)) sync(F_ONNODESCHANGED, e)
  4645. }
  4646. function onChangeIsImperial() {
  4647. clearReport();
  4648. _RT.$HLedObjects = {};
  4649. _RT.$HLlayer.destroyFeatures();
  4650. _RT.$isMapChanged = true;
  4651. async(F_LOGIN)
  4652. };
  4653. function F_SHOWREPORT(reportFormat) {
  4654. var _now = new Date;
  4655. var _nowISO = _now.toISOString().slice(0, 10);
  4656. var _repU = _REP.$users;
  4657. var _repC = _REP.$cities;
  4658. var _repCC = _REP.$cityCounters;
  4659. var _repRC = _REP.$reportCounters;
  4660. var _repS = _REP.$streets;
  4661. var isBeta = -1 !== window.location.href.indexOf('beta');
  4662. var noFilters = true;
  4663. var FR = '';
  4664. var FRheader = '';
  4665. var FRfooter = '';
  4666. var newWin = null;
  4667. var Bh1, Eh1;
  4668. var Bh2, Eh2;
  4669. var Bsmall, Esmall;
  4670. var Bbig, Ebig;
  4671. var Ba, Ca, Ea;
  4672. var BaV;
  4673. var Bcolor, Ccolor, Ecolor;
  4674. var Bb, Eb;
  4675. var Bp, Ep;
  4676. var Br;
  4677. var Bol, Eol;
  4678. var Bul, Eul;
  4679. var Bli, Eli;
  4680. var Bcode, Ecode;
  4681. var Mdash, Nbsp;
  4682. var curFormat;
  4683. function setFormat(fmt) {
  4684. curFormat = fmt;
  4685. switch (fmt) {
  4686. case RF_HTML:
  4687. Bh1 = '\n<h1>', Eh1 = '</h1>\n<hr>\n';
  4688. Bh2 = '\n\n<h2>', Eh2 = '</h2>\n';
  4689. Bsmall = '<small>', Esmall = '</small>';
  4690. Bbig = '<big>', Ebig = '</big>';
  4691. Ba = '<a target="_blank" href="', Ca = '">', Ea = '</a>';
  4692. BaV = '<a target="Validator" href="';
  4693. Bcolor = '<span style="color:', Ccolor = '">', Ecolor = '</span>';
  4694. Bb = '<b>', Eb = '</b>';
  4695. Bp = '<p>', Ep = '</p>';
  4696. Br = '<br>\n';
  4697. Bul = '\n<ul>\n', Eul = '\n</ul>\n';
  4698. Bcode = '\n<div style="text-align:left" dir="ltr" class="code" onclick="selectAll(this)">', Ecode = '</div>\n';
  4699. Bol = '\n<ol>\n', Eol = '\n</ol>\n';
  4700. Bli = '\n<li>', Eli = '</li>\n';
  4701. Mdash = ' &mdash; ';
  4702. Nbsp = '&nbsp;';
  4703. break;
  4704. case RF_BB:
  4705. Bh1 = '\n[size=200]', Eh1 = '[/size]\n';
  4706. Bh2 = '\n[size=150]', Eh2 = '[/size]\n';
  4707. Bsmall = '[size=85]', Esmall = '[/size]';
  4708. Bbig = '[size=120]', Ebig = '[/size]';
  4709. Ba = '[url=', Ca = ']', Ea = '[/url]';
  4710. BaV = Ba;
  4711. Bcolor = '[color=', Ccolor = ']', Ecolor = '[/color]';
  4712. Bb = '[b]', Eb = '[/b]';
  4713. Bp = '\n', Ep = '\n';
  4714. Br = '\n';
  4715. Bul = '\n[list]', Eul = '[/list]\n';
  4716. Bcode = '\n[code]', Ecode = '\n[/code]';
  4717. Bol = '\n[list=1]', Eol = '[/list]\n';
  4718. Bli = '\n[*]', Eli = '[/*]\n';
  4719. Mdash = ' - ';
  4720. Nbsp = ' ';
  4721. break
  4722. }
  4723. return ''
  4724. }
  4725. function getReportSource() {
  4726. var m = 0;
  4727. var n = '';
  4728. for (var cid in _repCC)
  4729. if (_repCC.hasOwnProperty(cid) && m < _repCC[cid] && _repC[cid]) {
  4730. m = _repCC[cid];
  4731. n = _repC[cid]
  4732. }
  4733. return n
  4734. }
  4735. function getTopPermalink() {
  4736. var center, zoom;
  4737. if (_RT.$startCenter) {
  4738. center = _RT.$startCenter;
  4739. zoom = _RT.$startZoom
  4740. } else {
  4741. center = WM.getCenter();
  4742. zoom = WM.getZoom()
  4743. }
  4744. var c = center.clone().transform(WM.projection, WM.displayProjection);
  4745. return window.location.origin + window.location.pathname + '?zoom=' + zoom + '&lat=' + Math.round(c.lat * 1E5) / 1E5 + '&lon=' + Math.round(c.lon * 1E5) / 1E5 + '&env=' + nW.app.getAppRegionCode()
  4746. }
  4747. function getHTMLHeader(strTitle) {
  4748. var dir = _I18n.getDir();
  4749. var dirLeft = trLeft(dir);
  4750. var dirRight = trRight(dir);
  4751. return '<html dir="' + dir + '"><head><style>' +
  4752. '\na{background-color:white}' +
  4753. '\na:visited{background-color:' + GL_VISITEDBGCOLOR + ' !important;color:' + GL_VISITEDCOLOR + ' !important}' +
  4754. '\n.note a{background-color:' + GL_NOTEBGCOLOR + ';color:' + GL_NOTECOLOR + '}' +
  4755. '\n.warning a{background-color:' + GL_WARNINGBGCOLOR + ';color:' + GL_WARNINGCOLOR + '}' +
  4756. '\n.error a{background-color:' + GL_ERRORBGCOLOR + ';color:' + GL_ERRORCOLOR + '}' +
  4757. '\n.custom1 a{background-color:' + GL_CUSTOM1BGCOLOR + ';color:' + GL_CUSTOM1COLOR + '}' +
  4758. '\n.custom2 a{background-color:' + GL_CUSTOM2BGCOLOR + ';color:' + GL_CUSTOM2COLOR + '}' +
  4759. '\ndiv.note{background-color:' + GL_NOTEBGCOLOR + ';padding:1em;margin-top:0.5em}' +
  4760. '\ndiv.warning{background-color:' + GL_WARNINGBGCOLOR + ';padding:1em;margin-top:0.5em}' +
  4761. '\ndiv.error{background-color:' + GL_ERRORBGCOLOR + ';padding:1em;margin-top:0.5em}' +
  4762. '\nh2+ul>li{margin-bottom:1em}' +
  4763. '\nul{margin-top:0}' +
  4764. '\nh1,h2{margin-bottom:4px;font-family:Georgia,Times,"Times New Roman",serif}' +
  4765. '\nbody{margin:2em;font-family:"Lucida Grande","Lucida Sans Unicode","DejaVu Sans",Lucida,Arial,Helvetica,sans-serif}' +
  4766. '\ndiv#contents{display:inline-block;margin:1em 0;padding:1em;background-color:#f9f9f9;border:1px solid #aaa}' +
  4767. '\ndiv#contents li{margin-bottom:0.1em}' +
  4768. '\ndiv.code::before{content: "CODE: SELECT ALL";display:block;border-bottom:1px solid #ccc;font:bold 1em "Lucida Grande","Trebuchet MS",Verdana,Helvetica,Arial,sans-serif;color:#105289;margin-bottom:5px;}' +
  4769. '\ndiv.code{margin-top:0.5em;display:block;width:650px;overflow:auto;padding:0.5em;border:1px solid #ccc;background-color:#f4fff4;white-space:pre;font:0.9em Monaco,"Andale Mono","Courier New",Courier,mono;line-height:1.3em;color:#2E8B57;cursor:pointer}' +
  4770. '\n</style>' +
  4771. '\n<script>' +
  4772. '\nfunction selectAll(e){' +
  4773. 'if(window.getSelection){' +
  4774. 'var s = window.getSelection();' +
  4775. 'var r = document.createRange();' +
  4776. 'r.selectNodeContents(e);' +
  4777. 's.removeAllRanges();' +
  4778. 's.addRange(r);' +
  4779. '}}' +
  4780. '\n\x3c/script>' +
  4781. '\n<title>' + strTitle + ' ' + _nowISO + '</title>' +
  4782. '\n<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>' +
  4783. '\n</head><body>'
  4784. }
  4785. function getNaturalList(arr) {
  4786. if (1 === arr.length) return arr[0];
  4787. var ret = '';
  4788. arr.forEach(function(e, i) {
  4789. if (arr.length - 1 === i)
  4790. ret += ' ' + trS('report.and') + ' ';
  4791. else if (0 !== i)
  4792. ret += ', ';
  4793. ret += e
  4794. });
  4795. return ret
  4796. }
  4797. function getHeader(strTitle) {
  4798. var ret = Bh1 + strTitle + Eh1;
  4799. if (RF_LIST !== reportFormat && RF_CREATEPACK !== reportFormat) {
  4800. ret += Bsmall + trS('report.generated.by') + ' ' + _RT.$curUserName + ' ' + trS('report.generated.on') + ' ' + _nowISO + Esmall + Br + Br + Bb + trS('report.source') + ' ' + Eb + Ba +
  4801. getTopPermalink() + Ca + checkNoCity(getReportSource()) + Ea + Br;
  4802. var filters = [];
  4803. if (_UI.pMain.pFilter.oExcludeDuplicates.CHECKED) filters.push(trS('report.filter.duplicate'));
  4804. if (_UI.pMain.pFilter.oExcludeStreets.CHECKED) filters.push(trS('report.filter.streets'));
  4805. if (_UI.pMain.pFilter.oExcludeOther.CHECKED) filters.push(trS('report.filter.other'));
  4806. if (_UI.pMain.pFilter.oExcludeNonEditables.CHECKED) filters.push(trS('report.filter.noneditable'));
  4807. if (_UI.pMain.pFilter.oExcludeNotes.CHECKED) filters.push(trS('report.filter.notes'));
  4808. if (filters.length) {
  4809. noFilters = false;
  4810. ret += Bb + trS('report.filter.title') + ' ' + Eb + getNaturalList(filters) + ' ' + trS('report.filter.excluded') + Br
  4811. }
  4812. filters = [];
  4813. if (!_UI.pMain.pSearch.oIncludeYourEdits.NODISPLAY && _UI.pMain.pSearch.oIncludeYourEdits.CHECKED) filters.push(trS('report.search.updated.by') + ' ' + _RT.$curUserName);
  4814. if (!_UI.pMain.pSearch.oIncludeUpdatedBy.NODISPLAY && _UI.pMain.pSearch.oIncludeUpdatedBy.VALUE) filters.push(trS('report.search.updated.by') + ' ' + _UI.pMain.pSearch.oIncludeUpdatedBy.VALUE);
  4815. if (_UI.pMain.pSearch.oIncludeUpdatedSince.VALUE) filters.push(trS('report.search.updated.since') + ' ' + _UI.pMain.pSearch.oIncludeUpdatedSince.VALUE);
  4816. if (_UI.pMain.pSearch.oIncludeCityName.VALUE) filters.push(trS('report.search.city') + ' ' + _UI.pMain.pSearch.oIncludeCityName.VALUE);
  4817. if (_UI.pMain.pSearch.oIncludeChecks.VALUE) filters.push(trS('report.search.reported') + ' ' + _UI.pMain.pSearch.oIncludeChecks.VALUE);
  4818. if (filters.length) {
  4819. noFilters = false;
  4820. ret += Bb + trS('report.search.title') + Eb + ' ' + trS('report.search.only') + ' ' + getNaturalList(filters) + ' ' + trS('report.search.included') + Br
  4821. }
  4822. if (isBeta) ret += Br + Bb + trS('report.beta.warning') + Eb + Br + trS('report.beta.text') + Br + Bb + trS('report.beta.share') + Eb + Br
  4823. }
  4824. return ret
  4825. }
  4826. function getSubHeader(strTitle) {
  4827. return Bh2 + strTitle + Eh2
  4828. }
  4829. function getTextACL(acl) {
  4830. if (acl)
  4831. return acl.split(',').join(', ');
  4832. else
  4833. return '*'
  4834. }
  4835. function getCheckProperties(checkID, ccode, showSeverity, showCountry) {
  4836. var check = _RT.$checks[checkID];
  4837. var ret = '';
  4838. if (showSeverity && check.SEVERITY && RS_MAX > check.SEVERITY)
  4839. ret += Bb + trS('report.list.severity') + ' ' + Eb + getTextSeverity(check.SEVERITY) + (check.REPORTONLY ? ' (' + trS('report.list.reportOnly') + ')' : '') + Br;
  4840. if (1 < check.FORLEVEL) ret += Bb + trS('report.list.forEditors') + ' ' + Eb + check.FORLEVEL + ' ' + trS('report.list.andUp') + Br;
  4841. if (showCountry) ret += Bb + trS('report.list.forCountries') + ' ' + Eb + getTextACL(check.FORCOUNTRY) + Br;
  4842. if (check.FORCITY) ret += Bb + trS('report.list.forCities') + ' ' + Eb + getTextACL(check.FORCITY) + Br;
  4843. var options;
  4844. if (check.OPTIONS && (options = getCheckOptions(checkID, ccode))) {
  4845. var defParams = ccode === _I18n.$defLng;
  4846. var arrParams = [];
  4847. for (var optionName in options) {
  4848. if (!/^[a-z]+$/i.test(optionName)) continue;
  4849. var optionTitle = options[optionName + '.title'];
  4850. if (defParams && !optionTitle) continue;
  4851. arrParams.push({$name: optionName, $title: optionTitle, $value: options[optionName]})
  4852. }
  4853. if (arrParams.length) {
  4854. ret += Bb;
  4855. var country = _I18n.getCapitalizedCountry(ccode) || ccode;
  4856. if (defParams)
  4857. ret += trS('report.list.params');
  4858. else
  4859. ret += trSO('report.list.params.set', {'country': country});
  4860. ret += Eb + Bcode + '"' + checkID + '.params": {\n';
  4861. for (var i = 0; i < arrParams.length; i++) {
  4862. var param = arrParams[i];
  4863. if (defParams) ret += ' // ' + param.$title + '\n';
  4864. ret += ' "' + param.$name + '": ' + JSON.stringify(param.$value) + ',' +
  4865. '\n'
  4866. }
  4867. ret += '},' + Ecode
  4868. }
  4869. }
  4870. return ret
  4871. }
  4872. function addTextLabels(pack, label, defSet, oldPack) {
  4873. var defData = (defSet[label] || '').replace(new RegExp('^W:'), PFX_WIKI).replace(new RegExp('^P:'), PFX_PEDIA).replace(new RegExp('^F:'), PFX_FORUM);
  4874. var origData = oldPack[label] || '';
  4875. if (origData) {
  4876. var oldData = origData.replace(new RegExp('^' + GL_TODOMARKER), '').replace(new RegExp('^W:'), PFX_WIKI).replace(new RegExp('^P:'), PFX_PEDIA).replace(new RegExp('^F:'), PFX_FORUM);
  4877. var oldDataEN = (oldPack[label + '.en'] || '').replace(new RegExp('^W:'), PFX_WIKI).replace(new RegExp('^P:'), PFX_PEDIA).replace(new RegExp('^F:'), PFX_FORUM);
  4878. if (oldDataEN)
  4879. if (oldDataEN === defData) {
  4880. pack[label + '.en'] = defData;
  4881. pack[label] = origData
  4882. } else {
  4883. pack[label + '.en'] = defData;
  4884. pack[label] = GL_TODOMARKER + oldData
  4885. }
  4886. else {
  4887. pack[label + '.en'] = defData;
  4888. pack[label] = origData
  4889. }
  4890. } else {
  4891. pack[label + '.en'] = defData;
  4892. pack[label] = GL_TODOMARKER + defData
  4893. }
  4894. }
  4895. function getPackHeader(country, lng) {
  4896. return '// ==UserScript==' + Br + '// @name WME Validator Localization for ' + country + Br + '// @version ' + WV_VERSION + Br +
  4897. '// @description This script localizes WME Validator for ' + country + '. You also need main package (WME Validator) installed.' + Br +
  4898. '// @match https://beta.waze.com/*editor*' + Br + '// @match https://www.waze.com/*editor*' + Br + '// @exclude https://www.waze.com/*user/*editor/*' +
  4899. Br + '// @grant none' + Br + '// @run-at document-start' + Br + '// ==/UserScript==' + Br + '//' + Br + '/*' + Br +
  4900. (lng ? ' Please translate all the lines marked with "' + GL_TODOMARKER + '"' + Br + ' Please DO NOT change ".en" properties. To override english text use "titleEN",' + Br +
  4901. ' "problemEN" and "solutionEN" properties (see an example below).' + Br + Br :
  4902. '') +
  4903. ' See Settings->About->Available checks for complete list of checks and their params.' + Br + Br + ' Examples:' + Br + Br +
  4904. ' Enable #170 "Lowercase street name" but allow lowercase "exit" and "to":' + Br + ' "170.enabled": true,' + Br + ' "170.params": {' + Br +
  4905. ' "regexp": "/^((exit|to) )?[a-z]/",' + Br + ' "},' + Br + Br + ' Enable #130 "Custom check" to find a dot in street names, but allow dots at Ramps:' + Br +
  4906. ' "130.enabled": true,' + Br + ' "130.params": {' + Br + ' "titleEN": "Street name with a dot",' + Br +
  4907. ' "problemEN": "There is a dot in the street name (excluding Ramps)",' + Br + ' "solutionEN": "Expand the abbreviation or remove the dot",' + Br +
  4908. ' "template": "${type}:${street}",' + Br + ' "regexp": "D/^[^4][0-9]?:.*\\\\./",' + Br + ' },' + Br +
  4909. ' *Note: use D at the beginning of RegExp to enable debugging on JS console.' + Br + ' *Note: do not forget to escape backslashes in strings, i.e. use "\\\\" instead of "\\".' + Br +
  4910. '*/' + Br
  4911. }
  4912. function getPack(country, ccode, lng) {
  4913. var ucountry = country.toUpperCase();
  4914. var _country = country.split(' ').join('_');
  4915. var oldPack = _I18n.$translations[ccode] || {};
  4916. var ret = '' + Br + 'window.WME_Validator_' + _country + ' = ';
  4917. var newCountries = [];
  4918. for (var k in _I18n.$country2code)
  4919. if (ccode === _I18n.$country2code[k] && ucountry !== k) newCountries.push(_I18n.capitalize(k));
  4920. newCountries.unshift(country);
  4921. var newAuthor = oldPack['.author'] || _RT.$topUser.$userName;
  4922. if (-1 === newAuthor.indexOf(_RT.$topUser.$userName)) newAuthor += ' and ' + _RT.$topUser.$userName;
  4923. var newLink = oldPack['.link'] || GL_TODOMARKER;
  4924. var pack = {'.country': 1 === newCountries.length ? newCountries[0] : newCountries, '.codeISO': ccode, '.author': newAuthor, '.updated': _nowISO, '.link': newLink};
  4925. if (ccode in _I18n.$code2code) pack['.fallbackCode'] = _I18n.$code2code[ccode];
  4926. if (lng) {
  4927. if (ccode in _I18n.$code2dir) pack['.dir'] = _I18n.$code2dir[ccode];
  4928. var newLngs = [];
  4929. for (var k in _I18n.$lng2code)
  4930. if (ccode === _I18n.$lng2code[k] && k !== lng) newLngs.push(k);
  4931. newLngs.unshift(lng);
  4932. pack['.lng'] = 1 === newLngs.length ? newLngs[0] : newLngs
  4933. }
  4934. if (lng)
  4935. for (var label in _I18n.$defSet) {
  4936. if (/^\./.test(label) || /^[0-9]/.test(label)) continue;
  4937. addTextLabels(pack, label, _I18n.$defSet, oldPack)
  4938. }
  4939. var allLabels = _RT.$otherLabels.concat(_RT.$textLabels);
  4940. var arrDepCodes = _I18n.getDependantCodes(ccode);
  4941. for (var i = 1; i < MAX_CHECKS; i++) {
  4942. if (CK_MIRRORFIRST + 100 <= i && CK_MIRRORLAST + 100 >= i) continue;
  4943. var label = i + '.enabled';
  4944. var checkEnabled = false;
  4945. if (_I18n.$defSet[label] || oldPack[label]) checkEnabled = true;
  4946. if (!checkEnabled)
  4947. for (var depC = 0; depC < arrDepCodes.length; depC++) {
  4948. var depCode = arrDepCodes[depC];
  4949. if (_I18n.$translations[depCode] && _I18n.$translations[depCode][label]) checkEnabled = true
  4950. }
  4951. if (checkEnabled && !(i + '.title' in _I18n.$defSet)) {
  4952. pack[i + '.note'] = GL_TODOMARKER + 'The check #' + i + ' is no longer exist. See the forum thread for more details.';
  4953. continue
  4954. }
  4955. for (var j = 0; j < allLabels.length; j++) {
  4956. var labelSfx = allLabels[j];
  4957. label = i + '.' + labelSfx;
  4958. var defData = _I18n.$defSet[label];
  4959. var oldData = oldPack[label];
  4960. if (classCodeDefined(defData) || classCodeDefined(oldData))
  4961. if (-1 !== _RT.$textLabels.indexOf(labelSfx)) {
  4962. if (lng && checkEnabled) addTextLabels(pack, label, _I18n.$defSet, oldPack)
  4963. } else {
  4964. if ('params' === labelSfx) {
  4965. if (!classCodeDefined(oldData)) continue;
  4966. defData = deepCopy(defData || {});
  4967. oldData = deepCopy(oldData);
  4968. for (var k = CO_MIN; k <= CO_MAX; k++) {
  4969. delete defData[k];
  4970. delete oldData[k]
  4971. }
  4972. for (var k in defData) {
  4973. if (!defData.hasOwnProperty(k)) continue;
  4974. if (/\.title$/.test(k)) delete defData[k]
  4975. }
  4976. }
  4977. if (!deepCompare(defData, oldData)) pack[label] = oldData
  4978. }
  4979. }
  4980. }
  4981. ret += JSON.stringify(pack, null, ' ') + ';\n';
  4982. return ret
  4983. }
  4984. function getListOfChecks(countryID, country) {
  4985. var ucountry = country.toUpperCase();
  4986. var ccode = '';
  4987. if (countryID) ccode = _I18n.getCountryCode(ucountry);
  4988. var ret = trS('report.list.see') + ' ' + Bb + trS('report.list.checks') + Eb + Br + Br;
  4989. var fallbacks = '';
  4990. if (ccode)
  4991. for (var i in _I18n.$country2code) {
  4992. if (!_I18n.$country2code.hasOwnProperty(i)) continue;
  4993. if (i === ucountry) continue;
  4994. var acode = _I18n.$country2code[i];
  4995. if (ccode && acode !== ccode) continue;
  4996. fallbacks += _I18n.capitalize(i) + ' → ' + country + Br
  4997. }
  4998. for (var i in _I18n.$code2code) {
  4999. if (!_I18n.$code2code.hasOwnProperty(i)) continue;
  5000. var countryFrom = _I18n.getCapitalizedCountry(i);
  5001. var countryTo = _I18n.getCapitalizedCountry(_I18n.$code2code[i]);
  5002. if (ccode && i !== ccode && _I18n.$code2code[i] !== ccode) continue;
  5003. if (country && countryFrom !== country && countryTo !== country) continue;
  5004. fallbacks += countryFrom + ' (' + i + ') → ' + countryTo + ' (' + _I18n.$code2code[i] + ')' + Br
  5005. }
  5006. if (fallbacks) ret += Bb + trS('report.list.fallback') + Eb + Br + fallbacks;
  5007. var sortedIDs = getSortedCheckIDs();
  5008. if (ccode) {
  5009. var enabledIDs = [];
  5010. var disabledIDs = [];
  5011. sortedIDs.forEach(function(cid) {
  5012. var c = _RT.$checks[cid];
  5013. if (!c) return;
  5014. if (RS_MAX === c.SEVERITY) return;
  5015. var en = true;
  5016. var forCountry = c.FORCOUNTRY;
  5017. if (forCountry)
  5018. if (!_WV.checkAccessFor(forCountry, function(e) {
  5019. if (e in _I18n.$code2country) return _I18n.$code2country[e] === ucountry;
  5020. error('Please report: fc=' + e);
  5021. return false
  5022. }))
  5023. en = false;
  5024. if (en)
  5025. enabledIDs.push(cid);
  5026. else
  5027. disabledIDs.push(cid)
  5028. });
  5029. ret += Bh2 + trSO('report.list.enabled', {'n': enabledIDs.length}) + ' ' + country + ':' + Eh2 + Bul;
  5030. enabledIDs.forEach(function(cid) {
  5031. ret += Bli + getCheckDescription(cid, countryID, Bb, Eb + Br) + Bsmall;
  5032. ret += getCheckProperties(cid, ccode, false, false);
  5033. ret += Esmall + Eli
  5034. });
  5035. ret += Eul;
  5036. ret += Bh2 + trSO('report.list.disabled', {'n': disabledIDs.length}) + ' ' + country + ':' + Eh2 + Bul;
  5037. disabledIDs.forEach(function(cid) {
  5038. ret += Bli + getCheckDescription(cid, 0, Bb, Eb + Br) + Bsmall;
  5039. ret += getCheckProperties(cid, _I18n.$defLng, false, true);
  5040. ret += Esmall + Eli
  5041. });
  5042. ret += Eul
  5043. } else {
  5044. ret += Bh2 + trSO('report.list.total', {'n': sortedIDs.length}) + ':' + Eh2 + Bul;
  5045. sortedIDs.forEach(function(cid) {
  5046. var c = _RT.$checks[cid];
  5047. if (!c) return;
  5048. if (RS_MAX === c.SEVERITY) return;
  5049. ret += Bli + getCheckDescription(cid, 0, Bb, Eb + Br) + Bsmall;
  5050. ret += getCheckProperties(cid, _I18n.$defLng, false, true);
  5051. ret += Esmall + Eli
  5052. });
  5053. ret += Eul
  5054. }
  5055. return ret
  5056. }
  5057. function getHTMLFooter() {
  5058. return '\n<hr>' +
  5059. '\n<center dir="ltr"><small>WME Validator v' + WV_VERSION + '<br>&copy; 2013-2018 Andriy Berestovskyy</small></center>' +
  5060. '\n</body></html>'
  5061. }
  5062. function getTAHeader(h) {
  5063. var ret = '\n<p>' + (RF_CREATEPACK === reportFormat ? trS('msg.textarea.pack') : trS('msg.textarea')) + ':</p>' +
  5064. '\n<p><textarea style="resize:vertical;width:100%;height:' + h + '">';
  5065. setFormat(RF_BB);
  5066. return ret
  5067. }
  5068. function getTAFooter() {
  5069. setFormat(RF_HTML);
  5070. return '\n</textarea></p>'
  5071. }
  5072. function getSizeWarning(size) {
  5073. return 5E4 < size ? '\n<p style="color:#e00">' + trSO('report.size.warning', {'n': size}) + '</p>' : ''
  5074. }
  5075. function openWindow(data) {
  5076. var nw = UW.open('', '_blank');
  5077. nw.document.write(data)
  5078. }
  5079. function openWindowFR(title) {
  5080. var encFR = 'data:text/html;charset=UTF-8,';
  5081. if (newWin)
  5082. if (reportFormat === RF_HTML) {
  5083. title = title.split(' ').join('_');
  5084. newWin.document.write(FRheader);
  5085. var saveRep = FRheader;
  5086. saveRep += FR;
  5087. saveRep += FRfooter;
  5088. saveRep = encodeURIComponent(saveRep);
  5089. var saveLink = '<br><a download="';
  5090. saveLink += title;
  5091. saveLink += '_';
  5092. saveLink += _nowISO;
  5093. saveLink += '.html" href="data:text/html;charset=UTF-8,';
  5094. saveLink += saveRep;
  5095. saveRep = '';
  5096. saveLink += '"><button>';
  5097. saveLink += trS('report.save');
  5098. saveLink += '</button></a><br>';
  5099. newWin.document.write(saveLink);
  5100. newWin.document.write(FR);
  5101. newWin.document.write(saveLink);
  5102. newWin.document.write(FRfooter)
  5103. } else
  5104. newWin.document.write(FR);
  5105. else {
  5106. encFR += encodeURIComponent(FRheader);
  5107. FRheader = '';
  5108. encFR += encodeURIComponent(FR);
  5109. FR = '';
  5110. encFR += encodeURIComponent(FRfooter);
  5111. FRfooter = '';
  5112. UW.open(encFR, '_blank')
  5113. }
  5114. }
  5115. var seenSegments = {};
  5116. var lastCheckID = -1;
  5117. var lastCityID = -1;
  5118. var lastStreetID = -1;
  5119. var counterNotes = 0;
  5120. var counterWarnings = 0;
  5121. var counterErrors = 0;
  5122. var counterCustoms1 = 0;
  5123. var counterCustoms2 = 0;
  5124. function resetFilter() {
  5125. seenSegments = {};
  5126. lastCheckID = -1;
  5127. lastCityID = -1;
  5128. lastStreetID = -1;
  5129. counterNotes = 0;
  5130. counterWarnings = 0;
  5131. counterErrors = 0;
  5132. counterCustoms1 = 0;
  5133. counterCustoms2 = 0
  5134. }
  5135. function getTOC() {
  5136. resetFilter();
  5137. FR += '\n<br><div id="contents">';
  5138. FR += '\n<big><b>';
  5139. FR += trS('report.contents');
  5140. FR += '</b></big>';
  5141. FR += '\n<ol>';
  5142. traverseReport(function(obj) {
  5143. if (checkFilter(0, obj.$segmentCopy, seenSegments) && getFilteredSeverity(obj.$check.SEVERITY, obj.$checkID, false))
  5144. if (obj.$checkID !== lastCheckID) {
  5145. lastCheckID = obj.$checkID;
  5146. var check = obj.$check;
  5147. var strCountry = _REP.$countries[obj.$segmentCopy.$countryID];
  5148. var ccode = '';
  5149. if (strCountry)
  5150. ccode = _I18n.getCountryCode(strCountry.toUpperCase());
  5151. else
  5152. ccode = _RT.$cachedTopCCode;
  5153. var options = trO(check.OPTIONS, ccode);
  5154. FR += '\n<li class="';
  5155. FR += getTextSeverity(obj.$check.SEVERITY);
  5156. FR += '"><a href="#a';
  5157. FR += lastCheckID;
  5158. FR += '">';
  5159. FR += exSOS(check.TITLE, options, 'titleEN');
  5160. FR += '</a></li>'
  5161. }
  5162. });
  5163. FR += '\n<li><a href="#a">';
  5164. FR += trS('report.summary');
  5165. FR += '</a></li>';
  5166. FR += '\n</ol>\n</div>'
  5167. }
  5168. function getSortedCheckIDs() {
  5169. return _RT.$sortedCheckIDs ? _RT.$sortedCheckIDs : _RT.$sortedCheckIDs = Object.keys(_RT.$checks).sort(cmpCheckIDs)
  5170. }
  5171. function traverseReport(handler) {
  5172. var mapCenter = WM.getCenter();
  5173. function getSortedCities() {
  5174. var ret = _REP.$sortedCityIDs;
  5175. if (!ret || ret.length != _REP.$unsortedCityIDs.length)
  5176. return _REP.$sortedCityIDs = [].concat(_REP.$unsortedCityIDs).sort(function(a, b) {
  5177. return _repC[a].localeCompare(_repC[b])
  5178. });
  5179. return ret
  5180. }
  5181. function getSortedStreets(repC) {
  5182. var ret = repC.$sortedStreetIDs;
  5183. if (!ret || ret.length != repC.$unsortedStreetIDs.length)
  5184. return repC.$sortedStreetIDs = [].concat(repC.$unsortedStreetIDs).sort(function(a, b) {
  5185. return _repS[a].localeCompare(_repS[b])
  5186. });
  5187. return ret
  5188. }
  5189. function getHypot(c1, c2) {
  5190. return Math.sqrt(c1 * c1 + c2 * c2)
  5191. }
  5192. function getSortedSegments(repS) {
  5193. var ret = repS.$sortedSegmentIDs;
  5194. var repSeg = repS.$segmentIDs;
  5195. if (!ret || ret.length != repS.$unsortedSegmentIDs.length)
  5196. return repS.$sortedSegmentIDs = [].concat(repS.$unsortedSegmentIDs).sort(function(a, b) {
  5197. var segA = repSeg[a], segB = repSeg[b];
  5198. if (segA.$typeRank !== segB.$typeRank) return segB.$typeRank - segA.$typeRank;
  5199. var distAB = getHypot(segA.$center.lat - segB.$center.lat, segA.$center.lon - segB.$center.lon);
  5200. if (.002 > distAB) return 0;
  5201. var distA = getHypot(mapCenter.lat - segA.$center.lat, mapCenter.lon - segA.$center.lon);
  5202. var distB = getHypot(mapCenter.lat - segB.$center.lat, mapCenter.lon - segB.$center.lon);
  5203. return distA - distB
  5204. });
  5205. return ret
  5206. }
  5207. var checkIDs = getSortedCheckIDs();
  5208. nextCheck: for (var i = 1; i < checkIDs.length; i++) {
  5209. var checkID = checkIDs[i];
  5210. var check = _RT.$checks[checkID];
  5211. if (!check) continue;
  5212. if (_UI.pMain.pFilter.oExcludeNotes.CHECKED && RS_NOTE === check.SEVERITY) continue;
  5213. var sortedCities = getSortedCities();
  5214. for (var sorcid = 0; sorcid < sortedCities.length; sorcid++) {
  5215. var cid = sortedCities[sorcid];
  5216. var repC = _REP.$cityIDs[cid];
  5217. var sortedStreets = getSortedStreets(repC);
  5218. for (var sorsid = 0; sorsid < sortedStreets.length; sorsid++) {
  5219. var sid = sortedStreets[sorsid];
  5220. var repS = repC.$streetIDs[sid];
  5221. var sortedSegments = getSortedSegments(repS);
  5222. for (var sorscid = 0; sorscid < sortedSegments.length; sorscid++) {
  5223. var scid = sortedSegments[sorscid];
  5224. var sc = repS.$segmentIDs[scid];
  5225. if (checkID in sc.$reportIDs) {
  5226. var obj = {$checkID: checkID, $check: check, $param: sc.$reportIDs[checkID], $cityParam: repC.$params[checkID], $streetParam: repS.$params[checkID], $segmentCopy: sc};
  5227. switch (handler(obj)) {
  5228. case RT_STOP:
  5229. return;
  5230. case RT_NEXTCHECK:
  5231. continue nextCheck
  5232. }
  5233. }
  5234. }
  5235. }
  5236. }
  5237. }
  5238. }
  5239. function closeReportStreet() {
  5240. if (0 <= lastStreetID || 0 <= lastCityID) {
  5241. lastStreetID = -1;
  5242. FR += Eli
  5243. }
  5244. }
  5245. function closeReportCity() {
  5246. if (0 <= lastCityID) {
  5247. lastCityID = -1;
  5248. closeReportStreet();
  5249. FR += Eul
  5250. }
  5251. }
  5252. function closeReportCheck() {
  5253. if (0 <= lastCheckID) {
  5254. if (LIMIT_PERCHECK < _repRC[lastCheckID])
  5255. if (1 === _repRC[lastCheckID] - LIMIT_PERCHECK)
  5256. FR += '[and more...]';
  5257. else {
  5258. FR += '[and ';
  5259. FR += _repRC[lastCheckID] - LIMIT_PERCHECK;
  5260. FR += ' segments more...]'
  5261. }
  5262. lastCheckID = -1;
  5263. closeReportCity()
  5264. }
  5265. if (RF_HTML === curFormat) FR += '</div>'
  5266. }
  5267. function getCheckDescription(checkID, countryID, headB, headE) {
  5268. var check = _RT.$checks[checkID];
  5269. var ret = headB;
  5270. var strCountry = _REP.$countries[countryID];
  5271. var ccode = '';
  5272. if (strCountry)
  5273. ccode = _I18n.getCountryCode(strCountry.toUpperCase());
  5274. else
  5275. ccode = _RT.$cachedTopCCode;
  5276. var options = trO(check.OPTIONS, ccode);
  5277. if (check.COLOR) ret += Bcolor + check.COLOR + Ccolor + '██ ' + Ecolor;
  5278. ret += '' + (countryID ? exSOS(check.TITLE, options, 'titleEN') : check.TITLE) + ' (#' + checkID + ')' + headE;
  5279. var sevColor = GL_NOTECOLOR;
  5280. switch (check.SEVERITY) {
  5281. case RS_WARNING:
  5282. sevColor = GL_WARNINGCOLOR;
  5283. break;
  5284. case RS_ERROR:
  5285. sevColor = GL_ERRORCOLOR;
  5286. break;
  5287. case RS_CUSTOM1:
  5288. sevColor = GL_CUSTOM1COLOR;
  5289. break;
  5290. case RS_CUSTOM2:
  5291. sevColor = GL_CUSTOM2COLOR;
  5292. break
  5293. }
  5294. if (check.PROBLEM) {
  5295. ret += Bcolor + sevColor + Ccolor + (countryID ? exSOS(check.PROBLEM, options, 'problemEN') : check.PROBLEM);
  5296. var pl = trO(check.PROBLEMLINK, ccode);
  5297. if (pl)
  5298. ret += ': ' + Ba + pl + Ca + trO(check.PROBLEMLINKTEXT, ccode) + Ea;
  5299. else
  5300. ret += '.';
  5301. ret += Ecolor + Br
  5302. }
  5303. if (check.SOLUTION) {
  5304. ret += countryID ? exSOS(check.SOLUTION, options, 'solutionEN') : check.SOLUTION;
  5305. var sl = trO(check.SOLUTIONLINK, ccode);
  5306. if (sl)
  5307. ret += ': ' + Ba + sl + Ca + trO(check.SOLUTIONLINKTEXT, ccode) + Ea;
  5308. else
  5309. ret += '.';
  5310. ret += Br
  5311. }
  5312. return ret
  5313. }
  5314. function getReportCheck(obj) {
  5315. closeReportCheck();
  5316. if (RF_HTML === curFormat) {
  5317. FR += '<div class="';
  5318. FR += getTextSeverity(obj.$check.SEVERITY);
  5319. FR += '"><a name="a';
  5320. FR += obj.$checkID;
  5321. FR += '"></a>'
  5322. }
  5323. FR += getCheckDescription(obj.$checkID, obj.$segmentCopy.$countryID, Bh2, Eh2);
  5324. FR += Br
  5325. }
  5326. function getReportCity(obj) {
  5327. closeReportCity();
  5328. FR += Bbig;
  5329. FR += Bb;
  5330. FR += checkNoCity(_repC[obj.$segmentCopy.$cityID]);
  5331. FR += Eb;
  5332. FR += Ebig;
  5333. if (obj.$cityParam) {
  5334. FR += Mdash;
  5335. FR += obj.$cityParam
  5336. }
  5337. FR += Bul
  5338. }
  5339. function getReportStreet(obj) {
  5340. closeReportStreet();
  5341. FR += Bli;
  5342. FR += checkNoStreet(_repS[obj.$segmentCopy.$streetID]);
  5343. FR += ', ';
  5344. FR += checkNoCity(_repC[obj.$segmentCopy.$cityID]);
  5345. if (obj.$streetParam) {
  5346. FR += Mdash;
  5347. FR += obj.$streetParam
  5348. }
  5349. FR += Br
  5350. }
  5351. function getPermalink(obj) {
  5352. var z = SCAN_ZOOM;
  5353. if (50 > obj.$segmentCopy.$length)
  5354. z = 7;
  5355. else if (500 > obj.$segmentCopy.$length) {
  5356. if (6 > z) z += 1
  5357. } else
  5358. z = 4;
  5359. FR += window.location.origin;
  5360. FR += window.location.pathname;
  5361. FR += '?zoom=';
  5362. FR += z;
  5363. FR += '&lat=';
  5364. FR += obj.$segmentCopy.$center.lat;
  5365. FR += '&lon=';
  5366. FR += obj.$segmentCopy.$center.lon;
  5367. FR += '&env=';
  5368. FR += nW.app.getAppRegionCode();
  5369. FR += '&segments=';
  5370. FR += obj.$segmentCopy.$segmentID
  5371. }
  5372. function getReportItem(obj) {
  5373. if (!checkFilter(0, obj.$segmentCopy, seenSegments) || !getFilteredSeverity(obj.$check.SEVERITY, obj.$checkID, false)) return;
  5374. if (_REP.$maxSeverity < obj.$check.SEVERITY) _REP.$maxSeverity = obj.$check.SEVERITY;
  5375. if (obj.$checkID !== lastCheckID) {
  5376. getReportCheck(obj);
  5377. if (noFilters) {
  5378. var c = _repRC[obj.$checkID];
  5379. switch (obj.$check.SEVERITY) {
  5380. case RS_NOTE:
  5381. counterNotes += c;
  5382. break;
  5383. case RS_WARNING:
  5384. counterWarnings += c;
  5385. break;
  5386. case RS_ERROR:
  5387. counterErrors += c;
  5388. break;
  5389. case RS_CUSTOM1:
  5390. counterCustoms1 += c;
  5391. break;
  5392. case RS_CUSTOM2:
  5393. counterCustoms2 += c;
  5394. break
  5395. }
  5396. }
  5397. }
  5398. if (obj.$segmentCopy.$cityID !== lastCityID) getReportCity(obj);
  5399. if (obj.$segmentCopy.$streetID !== lastStreetID) getReportStreet(obj);
  5400. lastCheckID = obj.$checkID;
  5401. lastCityID = obj.$segmentCopy.$cityID;
  5402. lastStreetID = obj.$segmentCopy.$streetID;
  5403. if (!noFilters) switch (obj.$check.SEVERITY) {
  5404. case RS_NOTE:
  5405. counterNotes++;
  5406. break;
  5407. case RS_WARNING:
  5408. counterWarnings++;
  5409. break;
  5410. case RS_ERROR:
  5411. counterErrors++;
  5412. break;
  5413. case RS_CUSTOM1:
  5414. counterCustoms1++;
  5415. break;
  5416. case RS_CUSTOM2:
  5417. counterCustoms2++;
  5418. break
  5419. }
  5420. FR += BaV;
  5421. getPermalink(obj);
  5422. FR += Ca;
  5423. if (isBeta) FR += 'B:';
  5424. FR += obj.$segmentCopy.$segmentID;
  5425. FR += Ea;
  5426. FR += ' '
  5427. }
  5428. function getSummary() {
  5429. if (RF_HTML === curFormat) FR += '<a name="a"></a>';
  5430. FR += Bh2;
  5431. FR += trS('report.summary');
  5432. FR += Eh2;
  5433. FR += Bb;
  5434. FR += trS('report.segments');
  5435. FR += Eb;
  5436. FR += ' ';
  5437. FR += _REP.$counterTotal;
  5438. FR += Br;
  5439. if (counterCustoms1 || counterCustoms2) {
  5440. FR += Bb;
  5441. FR += trS('report.customs');
  5442. FR += Eb;
  5443. FR += ' ';
  5444. FR += counterCustoms1;
  5445. FR += '/';
  5446. FR += counterCustoms2;
  5447. if (_REP.$isLimitPerCheck) FR += '*';
  5448. FR += Br
  5449. }
  5450. FR += Bb;
  5451. FR += trS('report.reported');
  5452. FR += Eb;
  5453. FR += ' ';
  5454. var summary = [];
  5455. if (counterErrors)
  5456. summary.push(Bb + trS('report.errors') + Mdash + Eb + ' ' + counterErrors + (_REP.$isLimitPerCheck ? '*' : '') + ' (' + Math.round(counterErrors * 1E3 / _REP.$counterTotal) + '‰)');
  5457. if (counterWarnings)
  5458. summary.push(Bb + trS('report.warnings') + Mdash + Eb + ' ' + counterWarnings + (_REP.$isLimitPerCheck ? '*' : '') + ' (' + Math.round(counterWarnings * 1E3 / _REP.$counterTotal) + '‰)');
  5459. if (counterNotes) summary.push(Bb + trS('report.notes') + Mdash + Eb + ' ' + counterNotes + (_REP.$isLimitPerCheck ? '*' : ''));
  5460. FR += getNaturalList(summary);
  5461. FR += Br;
  5462. if (_REP.$isLimitPerCheck) {
  5463. FR += trS('report.note.limit');
  5464. FR += Br
  5465. }
  5466. FR += Br;
  5467. FR += trS('report.forum');
  5468. FR += ' ';
  5469. FR += Ba;
  5470. FR += PFX_FORUM;
  5471. FR += FORUM_HOME;
  5472. FR += Ca;
  5473. FR += trS('report.forum.link');
  5474. FR += Ea;
  5475. FR += Br;
  5476. FR += Br;
  5477. FR += trS('report.thanks');
  5478. FR += Br
  5479. }
  5480. function getReport(fmt) {
  5481. var oldFormat = curFormat;
  5482. setFormat(fmt);
  5483. resetFilter();
  5484. _REP.$maxSeverity = 0;
  5485. traverseReport(function(e) {
  5486. getReportItem(e)
  5487. });
  5488. closeReportCheck();
  5489. getSummary();
  5490. setFormat(oldFormat)
  5491. }
  5492. function updateMaxSeverity() {
  5493. resetFilter();
  5494. _REP.$maxSeverity = 0;
  5495. traverseReport(function(obj) {
  5496. if (checkFilter(0, obj.$segmentCopy, seenSegments) && getFilteredSeverity(obj.$check.SEVERITY, obj.$checkID, false)) {
  5497. if (_REP.$maxSeverity < obj.$check.SEVERITY) _REP.$maxSeverity = obj.$check.SEVERITY;
  5498. if (_RT.$curMaxSeverity === _REP.$maxSeverity) return RT_STOP
  5499. }
  5500. })
  5501. }
  5502. setFormat(RF_HTML);
  5503. var t = trS('report.title');
  5504. switch (reportFormat) {
  5505. case RF_UPDATEMAXSEVERITY:
  5506. updateMaxSeverity();
  5507. break;
  5508. case RF_CREATEPACK:
  5509. var wType = 'Localization Package Wizard';
  5510. if (!window.confirm(getMsg(
  5511. wType,
  5512. '\nBefore starting the Wizard:' +
  5513. '\n\n1. Position WME over your country' +
  5514. '\n so the Wizard will know your country name' +
  5515. '\n\n2. Switch WME to your language' +
  5516. '\n so the Wizard will add translations into the package' +
  5517. '\n\n3. Enable any previous version of localization pack' +
  5518. '\n so the Wizard will preserve already translated text',
  5519. true)))
  5520. break;
  5521. var country = _RT.$topCity && _RT.$topCity.$country ? _RT.$topCity.$country : window.prompt(getMsg(wType, '\nWME country name (example: United Kingdom):', true));
  5522. if (!country) break;
  5523. var ucountry = country.toUpperCase();
  5524. var ccode = _I18n.getCountryCode(ucountry) ? _I18n.getCountryCode(ucountry) : window.prompt(getMsg(wType, '\nISO 3166-1 Alpha-2 country code (example: UK):', true));
  5525. if (!ccode) break;
  5526. ccode = ccode.toUpperCase();
  5527. var lng = window.prompt(
  5528. getMsg(
  5529. wType,
  5530. '\nPlease confirm the WME language code:' +
  5531. '\n\nfor "EN" no translations will be included into the package' +
  5532. '\nfor any other code the translations will be included',
  5533. true),
  5534. _RT.$lng);
  5535. if (!lng) break;
  5536. lng = lng.toUpperCase();
  5537. if (_I18n.$defLng === lng)
  5538. t = 'Minimal Localization for ' + country;
  5539. else
  5540. t = 'Localization and Translation for ' + country;
  5541. if (_I18n.$defLng === lng) lng = '';
  5542. var lPack = getHTMLHeader(t) + getHeader(t) + getTAHeader('400px') + getPackHeader(country, lng) + getPack(country, ccode, lng);
  5543. var arrDepCodes = _I18n.getDependantCodes(ccode);
  5544. for (var i = 0; i < arrDepCodes.length; i++) {
  5545. var depCode = arrDepCodes[i];
  5546. var depCountry = _I18n.getCapitalizedCountry(depCode);
  5547. if (depCountry && depCode) {
  5548. lPack += '\n// Dependant package:';
  5549. lPack += getPack(depCountry, depCode, '')
  5550. }
  5551. }
  5552. openWindow(lPack + getTAFooter() + getHTMLFooter());
  5553. break;
  5554. case RF_LIST:
  5555. var countryID = 0;
  5556. var country = '';
  5557. t = trS('report.list.title') + ' ';
  5558. if (_RT.$topCity && _RT.$topCity.$country) {
  5559. countryID = _RT.$topCity.$countryID;
  5560. country = _RT.$topCity.$country;
  5561. t += country + ' (v' + WV_VERSION + ')'
  5562. } else
  5563. t += 'v' + WV_VERSION;
  5564. openWindow(getHTMLHeader(t) + getHeader(t) + getListOfChecks(countryID, country) + getTAHeader('200px') + getHeader(t) + getListOfChecks(countryID, country) + getTAFooter() + getHTMLFooter());
  5565. break;
  5566. case RF_HTML:
  5567. newWin = UW.open('', '_blank');
  5568. FR += getHTMLHeader(t);
  5569. FR += getHeader(t);
  5570. FRheader = FR;
  5571. FR = '';
  5572. getTOC();
  5573. getReport(RF_HTML);
  5574. if (0 === counterNotes + counterWarnings + counterErrors + counterCustoms1 + counterCustoms2) {
  5575. if (newWin) newWin.close();
  5576. async(F_UPDATEUI);
  5577. break
  5578. }
  5579. FRfooter += getHTMLFooter();
  5580. openWindowFR(t);
  5581. break;
  5582. case RF_BB:
  5583. newWin = UW.open('', '_blank');
  5584. var tf = t + ' ' + trS('report.share');
  5585. FR += getHTMLHeader(tf);
  5586. FR += getHeader(tf);
  5587. FR += getTAHeader('200px');
  5588. var beforeShareLen = FR.length;
  5589. FR += getHeader(t);
  5590. getReport(RF_BB);
  5591. var shareLen = FR.length - beforeShareLen;
  5592. if (0 === counterNotes + counterWarnings + counterErrors + counterCustoms1 + counterCustoms2) {
  5593. if (newWin) newWin.close();
  5594. async(F_UPDATEUI);
  5595. break
  5596. }
  5597. FR += getTAFooter();
  5598. FR += getSizeWarning(shareLen);
  5599. FR += getHTMLFooter();
  5600. openWindowFR();
  5601. break
  5602. }
  5603. resetFilter()
  5604. };
  5605. function F_VALIDATE(disabledHL) {
  5606. if (!_RT.$isMapChanged) return;
  5607. _RT.$isMapChanged = false;
  5608. var bUpdateMaxSeverity = false;
  5609. if (RTStateIs(ST_RUN)) beep(10);
  5610. var options;
  5611. var skippedSegment = false;
  5612. if (disabledHL) {
  5613. updateSegmentProperties([], true);
  5614. return
  5615. }
  5616. if (LIMIT_TOTAL < _REP.$counterTotal && !isErrorFlag()) {
  5617. setErrorFlag();
  5618. if (RTStateIs(ST_RUN)) {
  5619. window.alert(getMsg(trS('msg.autopaused'), '\n' + trS('msg.limit.segments') + trS('msg.limit.segments.continue'), true));
  5620. sync(F_PAUSE)
  5621. } else
  5622. warning(trS('msg.limit.segments') + trS('msg.limit.segments.clear'));
  5623. return
  5624. }
  5625. _RT.$topCenter = WM.getCenter();
  5626. if (_UI.pSettings.pScanner.oReportExt.CHECKED && _RT.oReportWMECH.CHECKED) {
  5627. var el = document.getElementById(_RT.oReportWMECH.FORID);
  5628. if (el) {
  5629. var ev = new CustomEvent('click');
  5630. el.dispatchEvent(ev)
  5631. }
  5632. }
  5633. var _repC = _REP.$cities;
  5634. var _repCC = _REP.$cityCounters;
  5635. var _repRC = _REP.$reportCounters;
  5636. var _repS = _REP.$streets;
  5637. var _repU = _REP.$users;
  5638. function isLimitOk(id) {
  5639. if (DEF_DEBUG)
  5640. return true;
  5641. else
  5642. return !(LIMIT_PERCHECK < _repRC[id])
  5643. }
  5644. function formatDate(d) {
  5645. var n = new Date(d);
  5646. return n.toISOString().substr(0, 10)
  5647. }
  5648. function getUserName(objID) {
  5649. var u = WMo.users.getObjectById(objID);
  5650. return u ? u.userName : objID.toString()
  5651. }
  5652. function getUserLevel(objID) {
  5653. var u = WMo.users.getObjectById(objID);
  5654. return u ? u.normalizedLevel : 0
  5655. }
  5656. function SimpleNODE(objID, segID) {
  5657. this.$rawNode = null;
  5658. this.$nodeID = objID;
  5659. this._center = null;
  5660. this.$center = null;
  5661. this.$isUturn = false;
  5662. this.$isEditable = true;
  5663. this.$isPartial = true;
  5664. this._rawRestrictions = [];
  5665. this._rawRestrictionIDs = [];
  5666. this._restrictions = null;
  5667. this.$restrictions = null;
  5668. this._rawOtherSegments = [];
  5669. this._otherSegments = null;
  5670. this.$otherSegments = null;
  5671. this._rawOutConnections = [];
  5672. this._outConnections = null;
  5673. this.$outConnections = null;
  5674. this._rawInConnections = [];
  5675. this._inConnections = null;
  5676. this.$inConnections = null;
  5677. this.$restrictionsLen = 0;
  5678. this.$otherSegmentsLen = 0;
  5679. this.$outConnectionsLen = 0;
  5680. this.$inConnectionsLen = 0;
  5681. var n = WMo.nodes.getObjectById(objID);
  5682. this.$rawNode = n;
  5683. if (n) {
  5684. this.$isPartial = n.attributes.partial;
  5685. this.$isEditable = true;
  5686. var co = n.attributes.restrictions;
  5687. for (var k in co) {
  5688. if (!co[k]) continue;
  5689. var _con = k.split(',');
  5690. var con0 = +_con[0];
  5691. if (segID === con0) {
  5692. var con1 = +_con[1];
  5693. var cok = co[k];
  5694. for (var j = 0, l = cok.length; j < l; j++) {
  5695. this._rawRestrictions.push(cok[j]);
  5696. this._rawRestrictionIDs.push(con1)
  5697. }
  5698. }
  5699. }
  5700. this.$restrictionsLen = this._rawRestrictions.length;
  5701. for (var i = 0; i < n.attributes.segIDs.length; i++) {
  5702. var si = n.attributes.segIDs[i];
  5703. if (segID === si || !WMo.segments.getObjectById(si)) continue;
  5704. this._rawOtherSegments.push(si)
  5705. }
  5706. this.$otherSegmentsLen = this._rawOtherSegments.length;
  5707. co = n.attributes.connections;
  5708. for (var k in co) {
  5709. if (!co[k]) continue;
  5710. var _con = k.split(',');
  5711. var con0 = +_con[0];
  5712. var con1 = +_con[1];
  5713. if (segID === con0 && segID === con1) {
  5714. this.$isUturn = true;
  5715. continue
  5716. }
  5717. if (segID === con0) this._rawOutConnections.push(con1);
  5718. if (segID === con1) this._rawInConnections.push(con0)
  5719. }
  5720. }
  5721. this.$outConnectionsLen = this._rawOutConnections.length;
  5722. this.$inConnectionsLen = this._rawInConnections.length;
  5723. Object.defineProperties(this, {
  5724. $rawNode: {enumerable: false},
  5725. $nodeID: {writable: false},
  5726. _center: {enumerable: false},
  5727. $center: {get: this.getCenter},
  5728. $isUturn: {writable: false},
  5729. $isEditable: {writable: false},
  5730. $isPartial: {writable: false},
  5731. _rawRestrictions: {enumerable: false},
  5732. _rawRestrictionIDs: {enumerable: false},
  5733. _restrictions: {enumerable: false},
  5734. $restrictions: {get: this.getRestrictions},
  5735. _rawOtherSegments: {enumerable: false},
  5736. _otherSegments: {enumerable: false},
  5737. $otherSegments: {get: this.getOtherSegments},
  5738. _rawOutConnections: {enumerable: false},
  5739. _outConnections: {enumerable: false},
  5740. $outConnections: {get: this.getOutConnections},
  5741. _rawInConnections: {enumerable: false},
  5742. _inConnections: {enumerable: false},
  5743. $inConnections: {get: this.getInConnections},
  5744. $restrictionsLen: {writable: false},
  5745. $otherSegmentsLen: {writable: false},
  5746. $outConnectionsLen: {writable: false},
  5747. $inConnectionsLen: {writable: false}
  5748. })
  5749. }
  5750. SimpleNODE.prototype.getCenter = function() {
  5751. if (this._center) return this._center;
  5752. if (!this.$rawNode) return null;
  5753. var bounds = this.$rawNode.geometry.bounds;
  5754. this._center = (new OpenLayers.LonLat(bounds.left, bounds.bottom)).transform(WM.projection, WM.displayProjection);
  5755. this._center.lon = Math.round(this._center.lon * 1E5) / 1E5;
  5756. this._center.lat = Math.round(this._center.lat * 1E5) / 1E5;
  5757. return this._center
  5758. };
  5759. SimpleNODE.prototype.getRestrictions = function() {
  5760. var t;
  5761. return this._restrictions ? this._restrictions : (t = this, this._restrictions = this._rawRestrictions.map(function(e, i) {
  5762. return new SimpleRESTRICTION(e, t._rawRestrictionIDs[i])
  5763. }))
  5764. };
  5765. SimpleNODE.prototype.getOutConnections = function() {
  5766. return this._outConnections ? this._outConnections : this._outConnections = this._rawOutConnections.map(function(e) {
  5767. return new SimpleSEGMENT(e)
  5768. })
  5769. };
  5770. SimpleNODE.prototype.getInConnections = function() {
  5771. return this._inConnections ? this._inConnections : this._inConnections = this._rawInConnections.map(function(e) {
  5772. return new SimpleSEGMENT(e)
  5773. })
  5774. };
  5775. SimpleNODE.prototype.getOtherSegments = function() {
  5776. return this._otherSegments ? this._otherSegments : this._otherSegments = this._rawOtherSegments.map(function(e) {
  5777. return new SimpleSEGMENT(e)
  5778. })
  5779. };
  5780. function SimpleROADCLOSURE(obj) {
  5781. this.$id = obj.id;
  5782. this.$segID = obj.segID;
  5783. this.$active = obj.active;
  5784. this.$updatedOn = '';
  5785. this.$updatedBy = '';
  5786. this.$updatedByID = 0;
  5787. this.$updatedByLevel = 0;
  5788. this.$createdOn = '';
  5789. this.$createdBy = '';
  5790. this.$createdByID = 0;
  5791. this.$createdByLevel = 0;
  5792. this.$startDate = Date.parse(obj.startDate);
  5793. this.$endDate = Date.parse(obj.endDate);
  5794. this.$location = obj.location;
  5795. this.$reason = obj.reason;
  5796. if (obj.updatedOn) this.$updatedOn = formatDate('' + obj.updatedOn);
  5797. if (0 < obj.updatedBy) {
  5798. this.$updatedByID = obj.updatedBy;
  5799. this.$updatedBy = getUserName(obj.updatedBy);
  5800. this.$updatedByLevel = getUserLevel(obj.updatedBy)
  5801. }
  5802. if (obj.createdOn) this.$createdOn = formatDate('' + obj.createdOn);
  5803. if (obj.createdBy) {
  5804. this.$createdByID = obj.createdBy;
  5805. this.$createdBy = getUserName(obj.createdBy);
  5806. this.$createdByLevel = getUserLevel(obj.createdBy)
  5807. }
  5808. var past = new Date;
  5809. past.setDate(past.getDate() - 2);
  5810. this.$isInThePast = this.$endDate < past
  5811. }
  5812. function SimpleRESTRICTION(obj, segID) {
  5813. var timeFrame = obj.getTimeFrame();
  5814. this._to = null;
  5815. this.$to = null;
  5816. this.$toID = segID;
  5817. this.$allDay = timeFrame.isAllDay() || false;
  5818. this.$days = timeFrame.getWeekdays();
  5819. this.$description = obj.getDescription() || '';
  5820. this.$isEnabled = true;
  5821. this.$fromDate = timeFrame.getStartDate() || '';
  5822. this.$fromTime = timeFrame.getFromTime() || '';
  5823. this.$toDate = timeFrame.getEndDate() || '';
  5824. this.$toTime = timeFrame.getToTime() || '';
  5825. var past = new Date;
  5826. past.setDate(past.getDate() - 2);
  5827. this.$isInThePast = new Date(this.$toDate + ' ' + this.$toTime) < past;
  5828. Object.defineProperties(this, {
  5829. _to: {enumerable: false},
  5830. $to: {get: this.getTo},
  5831. $toID: {writable: false},
  5832. $allDay: {writable: false},
  5833. $days: {writable: false},
  5834. $description: {writable: false},
  5835. $isInThePast: {writable: false},
  5836. $isEnabled: {writable: false},
  5837. $fromDate: {writable: false},
  5838. $fromTime: {writable: false},
  5839. $toDate: {writable: false},
  5840. $toTime: {writable: false}
  5841. })
  5842. }
  5843. SimpleRESTRICTION.prototype.getTo = function() {
  5844. return this._to ? this._to : this._to = new SimpleSEGMENT(this.$toID)
  5845. };
  5846. function SimpleSEGMENT(objID) {
  5847. this.$rawSegment = null;
  5848. this._nodeA = null;
  5849. this.$nodeA = null;
  5850. this.$nodeAID = 0;
  5851. this._nodeB = null;
  5852. this.$nodeB = null;
  5853. this.$nodeBID = 0;
  5854. this._center = null;
  5855. this.$center = null;
  5856. this._restrictions = null;
  5857. this.$restrictions = null;
  5858. this.$segmentID = objID;
  5859. this.$address = null;
  5860. this.$isTurnALocked = false;
  5861. this.$isTurnBLocked = false;
  5862. this.$isRoundabout = false;
  5863. this.$hasHNs = false;
  5864. this.$isEditable = false;
  5865. this.$forceNonEditable = false;
  5866. this.$type = 0;
  5867. this.$typeRank = 0;
  5868. this.$direction = 0;
  5869. this.$isToll = false;
  5870. this.$elevation = 0;
  5871. this.$lock = 0;
  5872. this.$rank = 0;
  5873. this.$length = 0;
  5874. this.$updatedOn = '';
  5875. this.$updatedBy = '';
  5876. this.$updatedByID = 0;
  5877. this.$updatedByLevel = 0;
  5878. this.$createdOn = '';
  5879. this.$createdBy = '';
  5880. this.$createdByID = 0;
  5881. this.$createdByLevel = 0;
  5882. this.$alts = [];
  5883. this.restrictionsLen = 0;
  5884. this.$fwdMaxSpeed = 0;
  5885. this.$fwdMaxSpeedUnverified = true;
  5886. this.$revMaxSpeed = 0;
  5887. this.$revMaxSpeedUnverified = false;
  5888. this.$flags = null;
  5889. this.$hasClosures = false;
  5890. var seg = WMo.segments.getObjectById(objID);
  5891. if (classCodeIs(seg, CC_UNDEFINED) || classCodeIs(seg, CC_NULL)) return;
  5892. var attrs = seg.attributes;
  5893. this.$rawSegment = seg;
  5894. this.$nodeAID = attrs.fromNodeID;
  5895. this.$nodeBID = attrs.toNodeID;
  5896. this.$address = new _WV.SimpleADDRESS(attrs.primaryStreetID);
  5897. this.$isTurnALocked = attrs.revTurnsLocked;
  5898. this.$isTurnBLocked = attrs.fwdTurnsLocked;
  5899. this.$isRoundabout = classCodeDefined(attrs.junctionID) && null !== attrs.junctionID;
  5900. this.$hasHNs = attrs.hasHNs;
  5901. this.$isEditable = seg.arePropertiesEditable();
  5902. this.$hasRestrictions = seg.hasRestrictions();
  5903. this.$restrictions = attrs.restrictions;
  5904. this.$type = attrs.roadType;
  5905. this.$typeRank = this.getTypeRank(attrs.roadType);
  5906. this.$direction = getDirection(seg);
  5907. this.$elevation = attrs.level;
  5908. this.$lock = attrs.lockRank + 1;
  5909. this.$rank = attrs.rank + 1;
  5910. if ('length' in attrs)
  5911. this.$length = attrs.length;
  5912. else
  5913. this.$length = Math.round(seg.geometry.getGeodesicLength(WM.projection));
  5914. if (attrs.updatedOn) this.$updatedOn = formatDate(attrs.updatedOn);
  5915. if (0 < attrs.updatedBy) {
  5916. this.$updatedByID = attrs.updatedBy;
  5917. this.$updatedBy = getUserName(attrs.updatedBy);
  5918. this.$updatedByLevel = getUserLevel(attrs.updatedBy)
  5919. }
  5920. if (attrs.createdOn) this.$createdOn = formatDate(attrs.createdOn);
  5921. if (attrs.createdBy) {
  5922. this.$createdByID = attrs.createdBy;
  5923. this.$createdBy = getUserName(attrs.createdBy);
  5924. this.$createdByLevel = getUserLevel(attrs.createdBy)
  5925. }
  5926. this.$alts = attrs.streetIDs.map(function(objID) {
  5927. return new _WV.SimpleADDRESS(objID)
  5928. });
  5929. this.$restrictionsLen = attrs.restrictions.length;
  5930. this.$fwdMaxSpeed = getLocalizedValue(+attrs.fwdMaxSpeed, this.$address.$country);
  5931. this.$fwdMaxSpeedUnverified = attrs.fwdMaxSpeedUnverified;
  5932. this.$revMaxSpeed = getLocalizedValue(+attrs.revMaxSpeed, this.$address.$country);
  5933. this.$revMaxSpeedUnverified = attrs.revMaxSpeedUnverified;
  5934. this.$hasClosures = attrs.hasClosures;
  5935. this.$flags = seg.getFlagAttributes();
  5936. Object.defineProperties(this, {
  5937. $rawSegment: {enumerable: false},
  5938. _nodeA: {enumerable: false},
  5939. $nodeA: {get: this.getNodeA},
  5940. $nodeAID: {writable: false},
  5941. _nodeB: {enumerable: false},
  5942. $nodeB: {get: this.getNodeB},
  5943. $nodeBID: {writable: false},
  5944. _center: {enumerable: false},
  5945. $center: {get: this.getCenter},
  5946. _restrictions: {enumerable: false},
  5947. $restrictions: {get: this.getRestrictions},
  5948. $segmentID: {writable: false},
  5949. $isTurnALocked: {writable: false},
  5950. $isTurnBLocked: {writable: false},
  5951. $isRoundabout: {writable: false},
  5952. $hasHNs: {writable: false},
  5953. $typeRank: {writable: false},
  5954. $isEditable: {writable: false},
  5955. $rank: {writable: false},
  5956. $length: {writable: false},
  5957. $updatedOn: {writable: false},
  5958. $updatedBy: {writable: false},
  5959. $updatedByID: {writable: false},
  5960. $updatedByLevel: {writable: false},
  5961. $createdOn: {writable: false},
  5962. $createdBy: {writable: false},
  5963. $createdByID: {writable: false},
  5964. $createdByLevel: {writable: false},
  5965. $restrictionsLen: {writable: false}
  5966. })
  5967. }
  5968. SimpleSEGMENT.prototype.isRoutable = function() {
  5969. var routeableRoadTypes = [RT_STREET, RT_PRIMARY, RT_MINOR, RT_MAJOR, RT_FREEWAY];
  5970. return routeableRoadTypes.includes(this.$type)
  5971. };
  5972. SimpleSEGMENT.prototype.getTypeRank = function(typeID) {
  5973. return {19: 1, 18: 2, 16: 3, 10: 4, 5: 5, 17: 6, 20: 7, 8: 8, 21: 9, 1: 10, 2: 11, 4: 12, 7: 13, 6: 14, 3: 15}[typeID]
  5974. };
  5975. SimpleSEGMENT.prototype.getNodeA = function() {
  5976. return this._nodeA ? this._nodeA : this._nodeA = new SimpleNODE(this.$nodeAID, this.$segmentID)
  5977. };
  5978. SimpleSEGMENT.prototype.getNodeB = function() {
  5979. return this._nodeB ? this._nodeB : this._nodeB = new SimpleNODE(this.$nodeBID, this.$segmentID)
  5980. };
  5981. SimpleSEGMENT.prototype.getCenter = function() {
  5982. if (this._center) return this._center;
  5983. this._center = this.$rawSegment.geometry.bounds.getCenterLonLat().clone().transform(WM.projection, WM.displayProjection);
  5984. this._center.lon = Math.round(this._center.lon * 1E5) / 1E5;
  5985. this._center.lat = Math.round(this._center.lat * 1E5) / 1E5;
  5986. return this._center
  5987. };
  5988. SimpleSEGMENT.prototype.getRestrictions = function() {
  5989. var t;
  5990. return this._restrictions ? this._restrictions : this._restrictions = (t = this, this.$rawSegment.attributes.restrictions.map(function(e) {
  5991. return new SimpleRESTRICTION(e, t.$segmentID)
  5992. }))
  5993. };
  5994. SimpleSEGMENT.prototype.report = function(params) {
  5995. if (classCodeIs(params, CC_NUMBER)) params = {$checkID: params};
  5996. var id = params.$checkID;
  5997. if (!id || !isLimitOk(id)) return;
  5998. function getSegmentCopy(ss) {
  5999. return {
  6000. $segmentID: +ss.$segmentID, $countryID: +ss.$address.$countryID, $cityID: +ss.$address.$cityID, $streetID: +ss.$address.$streetID, $reportIDs: {},
  6001. $updated: ss.$updatedOn ? ss.$rawSegment.attributes.updatedOn : ss.$createdOn ? ss.$rawSegment.attributes.createdOn : 0,
  6002. $userID: ss.$updatedByID ? +ss.$updatedByID : ss.$createdByID ? +ss.$createdByID : 0,
  6003. $isEditable: ss.$isEditable && (ss.$nodeA.$isEditable || ss.$nodeA.$isPartial) && (ss.$nodeB.$isEditable || ss.$nodeB.$isPartial), $typeRank: +ss.$typeRank, $center: ss.$center,
  6004. $length: +ss.$length
  6005. }
  6006. }
  6007. var rep = _REP.$cityIDs[this.$address.$cityID];
  6008. var check = _RT.$checks[id];
  6009. if (_repRC[id])
  6010. _repRC[id]++;
  6011. else
  6012. _repRC[id] = 1;
  6013. if (LIMIT_PERCHECK < _repRC[id]) {
  6014. _REP.$isLimitPerCheck = true;
  6015. return
  6016. }
  6017. if (params.$cityParam) rep.$params[id] = params.$cityParam;
  6018. var sid = this.$address.$streetID;
  6019. if (!(sid in rep.$streetIDs)) {
  6020. rep.$unsortedStreetIDs.push(sid);
  6021. _repS[sid] = this.$address.$street;
  6022. rep.$streetIDs[sid] = {};
  6023. rep.$streetIDs[sid].$params = {};
  6024. rep.$streetIDs[sid].$segmentIDs = {};
  6025. rep.$streetIDs[sid].$unsortedSegmentIDs = [];
  6026. rep.$streetIDs[sid].$sortedSegmentIDs = []
  6027. }
  6028. rep = rep.$streetIDs[sid];
  6029. if (params.$streetParam) rep.$params[id] = params.$streetParam;
  6030. if (!(this.$segmentID in rep.$segmentIDs)) {
  6031. rep.$unsortedSegmentIDs.push(this.$segmentID);
  6032. rep.$segmentIDs[this.$segmentID] = getSegmentCopy(this)
  6033. }
  6034. var segmentCopy = rep.$segmentIDs[this.$segmentID];
  6035. var uid = segmentCopy.$userID;
  6036. if (!(uid in _repU)) {
  6037. var n = '';
  6038. if (uid === this.$createdByID)
  6039. n = this.$createdBy;
  6040. else if (uid === this.$updatedByID)
  6041. n = this.$updatedBy;
  6042. _repU[uid] = n
  6043. }
  6044. var seenObj = _RT.$seen[this.$segmentID];
  6045. if (this.$forceNonEditable) {
  6046. this.$forceNonEditable = false;
  6047. segmentCopy.$isEditable = false;
  6048. if (_REP.$maxSeverity <= seenObj[I_SEVERITY] || _REP.$maxSeverity <= check.SEVERITY) bUpdateMaxSeverity = true
  6049. }
  6050. segmentCopy.$reportIDs[id] = params.$param;
  6051. if (_REP.$maxSeverity < check.SEVERITY)
  6052. if (checkFilter(check.SEVERITY, segmentCopy, null) && getFilteredSeverity(check.SEVERITY, id, true)) _REP.$maxSeverity = check.SEVERITY;
  6053. if (!check.REPORTONLY && seenObj[I_SEVERITY] < check.SEVERITY) seenObj[I_SEVERITY] = check.SEVERITY;
  6054. seenObj[I_SEGMENTCOPY] = segmentCopy
  6055. };
  6056. SimpleSEGMENT.prototype.incCityCounter = function() {
  6057. var rep = _REP.$cityIDs;
  6058. var cid = this.$address.$cityID;
  6059. if (!(cid in rep)) {
  6060. _REP.$countries[this.$address.$countryID] = this.$address.$country;
  6061. _REP.$unsortedCityIDs.push(cid);
  6062. _repC[cid] = this.$address.$city;
  6063. _repCC[cid] = 0;
  6064. rep[cid] = {};
  6065. rep[cid].$params = {};
  6066. rep[cid].$streetIDs = {};
  6067. rep[cid].$unsortedStreetIDs = [];
  6068. rep[cid].$sortedStreetIDs = []
  6069. }
  6070. _repCC[cid]++;
  6071. _REP.$counterTotal++
  6072. };
  6073. function deleteCityCheck(cityID, checkID) {
  6074. var repS = _REP.$cityIDs[cityID].$streetIDs;
  6075. for (var sid in repS) {
  6076. if (!repS.hasOwnProperty(sid)) continue;
  6077. var repSG = repS[sid].$segmentIDs;
  6078. for (var sgid in repSG) {
  6079. if (!repSG.hasOwnProperty(sgid)) continue;
  6080. var reportIDs = repSG[sgid].$reportIDs;
  6081. if (!(checkID in reportIDs)) continue;
  6082. var seen = _RT.$seen[sgid];
  6083. var maxSev = 0;
  6084. var filSev = 0;
  6085. delete reportIDs[checkID];
  6086. for (var repID in reportIDs) {
  6087. if (!reportIDs.hasOwnProperty(repID)) continue;
  6088. var check = _RT.$checks[repID];
  6089. if (!check) continue;
  6090. if (filSev < check.SEVERITY && getFilteredSeverity(check.SEVERITY, repID, true)) filSev = check.SEVERITY;
  6091. if (maxSev < check.SEVERITY) {
  6092. maxSev = check.SEVERITY;
  6093. if (_RT.$curMaxSeverity === maxSev) break
  6094. }
  6095. }
  6096. seen[I_SEVERITY] = maxSev;
  6097. reHLSegmentID(+sgid, filSev)
  6098. }
  6099. }
  6100. }
  6101. function getCityCmpObj(cityID, city, otherCity) {
  6102. var obj = {
  6103. $cityID: cityID,
  6104. $counterReported: 0,
  6105. $limit: 0,
  6106. $city: city,
  6107. $otherCity: otherCity,
  6108. $CITY: city.toUpperCase(),
  6109. $noCountyCity: '',
  6110. $noAbbreviationCity: '',
  6111. $sortedCity: '',
  6112. $noSpaceCity: '',
  6113. $reason: ''
  6114. };
  6115. obj.$noCountyCity = obj.$CITY.replace(/ *\([^\)]+\) */g, '').replace(/ *,.*/g, '');
  6116. obj.$noAbbreviationCity = obj.$noCountyCity.replace(/ *[^\. ]+ *\. */g, '');
  6117. obj.$noDigitsCity = obj.$noCountyCity.replace(/ *\d+ */g, ' ');
  6118. obj.$sortedCity = obj.$noAbbreviationCity.split(' ').sort().join(' ');
  6119. obj.$noSpaceCity = obj.$noAbbreviationCity.split(' ').join('');
  6120. return obj
  6121. }
  6122. function setCmpObjLimits(obj1, obj2) {
  6123. var curCase = '';
  6124. if (obj1.$city === obj2.$city) {
  6125. curCase = trS('city.12') + ' ' + obj1.$cityID + ' & ' + obj2.$cityID;
  6126. obj1.$reason = obj2.$reason = curCase;
  6127. obj1.$limit = obj2.$limit = 100;
  6128. return
  6129. }
  6130. if (obj1.$noSpaceCity !== obj1.$noAbbreviationCity && obj1.$noSpaceCity === obj2.$noAbbreviationCity) {
  6131. obj1.$reason = trS('city.13r');
  6132. obj2.$reason = trS('city.13a');
  6133. obj1.$limit = 10;
  6134. obj2.$limit = 1E3;
  6135. return
  6136. }
  6137. if ((new RegExp('(^| )' + obj1.$sortedCity)).test(obj2.$sortedCity)) {
  6138. if (obj1.$noCountyCity.length !== obj1.$noAbbreviationCity.length) {
  6139. curCase = trS('city.2');
  6140. obj1.$reason = obj2.$reason = curCase;
  6141. obj1.$limit = 1E3;
  6142. obj2.$limit = 10;
  6143. return
  6144. }
  6145. if (3 > obj1.$city.length) {
  6146. curCase = trS('city.3');
  6147. obj1.$reason = obj2.$reason = curCase;
  6148. obj1.$limit = 1E3;
  6149. obj2.$limit = 0;
  6150. return
  6151. }
  6152. if (obj1.$CITY === obj2.$CITY) {
  6153. curCase = trS('city.5');
  6154. obj1.$reason = obj2.$reason = curCase;
  6155. if (obj1.$city.charAt(0) !== obj1.$CITY.charAt(0)) {
  6156. obj1.$limit = 1E3;
  6157. obj2.$limit = 10
  6158. } else {
  6159. obj1.$limit = 10;
  6160. obj2.$limit = 1E3
  6161. }
  6162. return
  6163. }
  6164. if (obj1.$sortedCity === obj2.$sortedCity) {
  6165. if (obj1.$noSpaceCity !== obj1.$noAbbreviationCity) {
  6166. curCase = trS('city.6');
  6167. obj1.$reason = obj2.$reason = curCase;
  6168. obj1.$limit = obj2.$limit = 1E3;
  6169. return
  6170. }
  6171. if (obj1.$city.length === obj1.$noCountyCity.length) {
  6172. if (obj2.$city.length === obj2.$noCountyCity.length) {
  6173. curCase = trS('city.7');
  6174. obj1.$reason = obj2.$reason = curCase;
  6175. obj1.$limit = obj2.$limit = 1E3
  6176. } else {
  6177. obj1.$reason = trS('city.8a');
  6178. obj2.$reason = trS('city.8r');
  6179. obj1.$limit = 1E3;
  6180. obj2.$limit = 10
  6181. }
  6182. return
  6183. }
  6184. if (obj2.$city.length === obj2.$noCountyCity.length) {
  6185. obj1.$reason = trS('city.8r');
  6186. obj2.$reason = trS('city.8a');
  6187. obj1.$limit = 10;
  6188. obj2.$limit = 1E3
  6189. } else {
  6190. curCase = trS('city.9');
  6191. obj1.$reason = obj2.$reason = curCase;
  6192. obj1.$limit = obj2.$limit = 1E3
  6193. }
  6194. return
  6195. }
  6196. if ((new RegExp(obj1.$sortedCity + '( |$)')).test(obj2.$sortedCity)) {
  6197. if (4 < obj2.$sortedCity.length - obj1.$sortedCity.length) {
  6198. obj1.$reason = trS('city.10a');
  6199. obj2.$reason = trS('city.10r');
  6200. obj1.$limit = obj2.$limit = 10;
  6201. return
  6202. }
  6203. if (obj1.$noDigitsCity === obj2.$noDigitsCity) {
  6204. curCase = trS('city.14');
  6205. obj1.$reason = obj2.$reason = curCase;
  6206. obj1.$limit = obj2.$limit = 1;
  6207. return
  6208. }
  6209. curCase = trS('city.11');
  6210. obj1.$reason = obj2.$reason = curCase;
  6211. obj1.$limit = 1E3;
  6212. obj2.$limit = 10;
  6213. return
  6214. }
  6215. curCase = trS('city.4');
  6216. obj1.$reason = obj2.$reason = curCase;
  6217. obj1.$limit = 1E3;
  6218. obj2.$limit = 10;
  6219. return
  6220. }
  6221. }
  6222. function addHLedSegments() {
  6223. if (RTStateIs(ST_RUN) || RTStateIs(ST_CONTINUE)) return;
  6224. var features = [];
  6225. for (var i in _RT.$HLedObjects) {
  6226. if (!_RT.$HLedObjects.hasOwnProperty(i)) continue;
  6227. var obj = _RT.$HLedObjects[i];
  6228. if (obj.$severity) features.push(new OpenLayers.Feature.Vector(obj.$geometry.clone(), {0: obj.$severity}))
  6229. }
  6230. _RT.$HLlayer.destroyFeatures();
  6231. _RT.$HLlayer.addFeatures(features)
  6232. }
  6233. function HLSegment(rawSegment) {
  6234. if (RTStateIs(ST_RUN) || RTStateIs(ST_CONTINUE)) return;
  6235. var segmentID = rawSegment.getID();
  6236. var seenObj = _RT.$seen[segmentID];
  6237. var severity = seenObj[I_SEVERITY];
  6238. var segmentCopy = seenObj[I_SEGMENTCOPY];
  6239. if (!severity || !segmentCopy || !checkFilter(severity, segmentCopy, null)) return;
  6240. var filteredSeverity = getFilteredSeverityObj(severity, segmentCopy.$reportIDs, true);
  6241. if (!filteredSeverity) return;
  6242. var obj = {$severity: filteredSeverity, $geometry: rawSegment.geometry};
  6243. _RT.$HLedObjects[segmentID] = obj
  6244. }
  6245. function reHLSegmentID(segmentID, newSeverity) {
  6246. if (RTStateIs(ST_RUN) || RTStateIs(ST_CONTINUE)) return;
  6247. if (_REP.$maxSeverity !== newSeverity) bUpdateMaxSeverity = true;
  6248. if (oExcludeNotes && RS_NOTE === newSeverity) newSeverity = 0;
  6249. if (segmentID in _RT.$HLedObjects) {
  6250. var hlObj = _RT.$HLedObjects[segmentID];
  6251. hlObj.$severity = newSeverity
  6252. }
  6253. }
  6254. function deleteSeenSegment(segmentID) {
  6255. reHLSegmentID(segmentID, 0);
  6256. var seen = null;
  6257. if (segmentID in _RT.$seen) seen = _RT.$seen[segmentID];
  6258. if (!seen) return;
  6259. if (_REP.$maxSeverity <= seen[I_SEVERITY]) bUpdateMaxSeverity = true;
  6260. var segmentCopy = seen[I_SEGMENTCOPY];
  6261. var cityID = seen[I_CITYID];
  6262. delete _RT.$seen[segmentID];
  6263. if (0 < _REP.$counterTotal) _REP.$counterTotal--;
  6264. if (0 < _repCC[cityID]) _repCC[cityID]--;
  6265. if (!segmentCopy) return;
  6266. var repC = _REP.$cityIDs;
  6267. for (var cid in repC) {
  6268. if (!repC.hasOwnProperty(cid)) continue;
  6269. var repS = repC[cid].$streetIDs;
  6270. for (var sid in repS) {
  6271. if (!repS.hasOwnProperty(sid)) continue;
  6272. var repSG = repS[sid].$segmentIDs;
  6273. for (var sgid in repSG) {
  6274. if (!repSG.hasOwnProperty(sgid) || +sgid !== segmentID) continue;
  6275. var reportIDs = repSG[sgid].$reportIDs;
  6276. for (var repID in reportIDs) {
  6277. if (!reportIDs.hasOwnProperty(repID)) continue;
  6278. if (0 < _repRC[repID]) _repRC[repID]--
  6279. }
  6280. delete repSG[sgid];
  6281. var repUSG = repS[sid].$unsortedSegmentIDs;
  6282. repUSG.splice(repUSG.indexOf(+sgid), 1);
  6283. repS[sid].$sortedSegmentIDs = [];
  6284. return
  6285. }
  6286. }
  6287. }
  6288. }
  6289. function updateSegmentProperties(selectedSegments, disabledHL) {
  6290. if (RTStateIs(ST_RUN) || RTStateIs(ST_CONTINUE)) return;
  6291. var prop = document.getElementById('i' + ID_PROPERTY);
  6292. var propDis = document.getElementById('i' + ID_PROPERTY_DISABLED);
  6293. var defID = ID_PROPERTY;
  6294. var defHTML = '';
  6295. if (disabledHL) {
  6296. defID = ID_PROPERTY_DISABLED;
  6297. defHTML = '<div class="direction-message">' +
  6298. '<i class="fa fa-info-circle" aria-hidden="true"></i> ' + trS('props.disabled') + '</div> ';
  6299. if (prop) prop.parentNode.removeChild(prop);
  6300. prop = propDis
  6301. } else if (propDis)
  6302. propDis.parentNode.removeChild(propDis);
  6303. if (prop)
  6304. prop.innerHTML = defHTML;
  6305. else {
  6306. var segmentProperties = document.getElementsByClassName('selection-icon')[0];
  6307. if (segmentProperties) {
  6308. var d = document.createElement('div');
  6309. d.innerHTML = defHTML;
  6310. d.id = 'i' + defID;
  6311. d.style.cssText = 'text-transform: none; padding: 5px;';
  6312. prop = segmentProperties.appendChild(d)
  6313. }
  6314. }
  6315. if (disabledHL) return;
  6316. if (!selectedSegments.length) return;
  6317. var selectedIssues = [];
  6318. for (var i = 0; i < selectedSegments.length; i++) {
  6319. var segmentID = selectedSegments[i];
  6320. if (segmentID in _RT.$seen) {
  6321. var segmentCopy = _RT.$seen[segmentID][I_SEGMENTCOPY];
  6322. if (!segmentCopy) continue;
  6323. for (var cid in segmentCopy.$reportIDs)
  6324. if (segmentCopy.$reportIDs.hasOwnProperty(cid)) {
  6325. var check = _RT.$checks[cid];
  6326. if (check.REPORTONLY) continue;
  6327. selectedIssues.push([check, segmentCopy, cid])
  6328. }
  6329. }
  6330. }
  6331. var newProp = '<b style="display:block"><a target="_blank" href="' + PFX_FORUM + FORUM_HOME + '">WME Validator</a> ' + trS('props.reports') + ':</b>';
  6332. if (_REP.$isLimitPerCheck)
  6333. newProp += '<div class="c' + CL_RIGHTTIP + ' c' + CL_NOTE + '">' +
  6334. '<span><i class="fa fa-info-circle" aria-hidden="true"></i>' +
  6335. ' <a class="c' + CL_NOTE + '" href="#">' + trS('props.limit.title') + '</a></span>' +
  6336. '<div class="c' + CL_RIGHTTIPPOPUP + '">' +
  6337. '<i class="fa fa-times-circle fa-lg fa-pull-left" style="margin-top:0.3em" aria-hidden="true"></i>' +
  6338. '<div class="c' + CL_RIGHTTIPDESCR + '">' + trS('props.limit.problem') + '.</div>' +
  6339. '<i class="fa fa-check-square-o fa-lg fa-pull-left" style="color:black;margin-top:0.8em" aria-hidden="true"></i>' +
  6340. '<div class="c' + CL_RIGHTTIPDESCR + '">' +
  6341. '<p>' + trS('props.limit.solution') + '.</p>' +
  6342. '</div></div><br></div>';
  6343. if (skippedSegment)
  6344. newProp += '<div class="c' + CL_RIGHTTIP + ' c' + CL_NOTE + '">' +
  6345. '<span><i class="fa fa-info-circle" aria-hidden="true"></i>' +
  6346. ' <a class="c' + CL_NOTE + '" href="#">' + trS('props.skipped.title') + '</a></span>' +
  6347. '<div class="c' + CL_RIGHTTIPPOPUP + '">' +
  6348. '<i class="fa fa-times-circle fa-lg fa-pull-left" style="margin-top:0.3em" aria-hidden="true"></i>' +
  6349. '<div class="c' + CL_RIGHTTIPDESCR + '">' + trS('props.skipped.problem') + '.</div>' +
  6350. '</div><br></div>';
  6351. if (!selectedIssues.length) {
  6352. if (prop && (_REP.$isLimitPerCheck || skippedSegment)) prop.innerHTML = newProp;
  6353. return
  6354. }
  6355. selectedIssues.sort(function(a, b) {
  6356. return cmpCheckIDs(a[2], b[2])
  6357. });
  6358. var selectedCounters = {};
  6359. selectedIssues = selectedIssues.filter(function(e, i, arr) {
  6360. var checkID = e[2];
  6361. if (i && arr[i - 1][2] === checkID) {
  6362. selectedCounters[checkID]++;
  6363. return false
  6364. }
  6365. selectedCounters[checkID] = 1;
  6366. return true
  6367. });
  6368. selectedIssues.forEach(function(e) {
  6369. var check = e[0];
  6370. var segmentCopy = e[1];
  6371. var checkID = e[2];
  6372. var checkCounter = selectedCounters[checkID];
  6373. var sevClass = 0;
  6374. var sevIcon = '';
  6375. var sevBG = '';
  6376. var strCountry = _REP.$countries[segmentCopy.$countryID];
  6377. var ccode = '';
  6378. if (strCountry)
  6379. ccode = _I18n.getCountryCode(strCountry.toUpperCase());
  6380. else
  6381. ccode = _RT.$cachedTopCCode;
  6382. options = trO(check.OPTIONS, ccode);
  6383. switch (check.SEVERITY) {
  6384. case RS_NOTE:
  6385. sevClass = CL_NOTE;
  6386. sevIcon = 'info-circle';
  6387. sevBG = GL_NOTEBGCOLOR;
  6388. break;
  6389. case RS_WARNING:
  6390. sevClass = CL_WARNING;
  6391. sevIcon = 'exclamation-triangle';
  6392. sevBG = GL_WARNINGBGCOLOR;
  6393. break;
  6394. case RS_ERROR:
  6395. sevClass = CL_ERROR;
  6396. sevIcon = 'times-circle';
  6397. sevBG = GL_ERRORBGCOLOR;
  6398. break;
  6399. case RS_CUSTOM1:
  6400. sevClass = CL_CUSTOM1;
  6401. sevIcon = 'user';
  6402. sevBG = GL_CUSTOM1BGCOLOR;
  6403. break;
  6404. case RS_CUSTOM2:
  6405. sevClass = CL_CUSTOM2;
  6406. sevIcon = 'user';
  6407. sevBG = GL_CUSTOM2BGCOLOR;
  6408. break
  6409. }
  6410. var shortTitle = exSOS(check.TITLE, options, 'titleEN').replace('WME Color Highlights', 'WMECH').replace('WME Toolbox', 'WMETB');
  6411. newProp += '<div class="c' + CL_RIGHTTIP + ' c' + sevClass + '">' +
  6412. '<span><i class="fa fa-' + sevIcon + '" aria-hidden="true"></i>' +
  6413. ' <a class="c' + sevClass + '" href="#">' + shortTitle + (1 < checkCounter ? ' (' + checkCounter + ')' : '') + '</a></span>' +
  6414. '<div class="c' + CL_RIGHTTIPPOPUP + '">' +
  6415. '<i class="fa fa-' + sevIcon + ' fa-lg fa-pull-left" style="margin-top:0.3em" aria-hidden="true"></i>' +
  6416. '<div class="c' + CL_RIGHTTIPDESCR + '">' +
  6417. '#' + checkID + ' ' + exSOS(check.PROBLEM, options, 'problemEN');
  6418. var pl = trO(check.PROBLEMLINK, ccode);
  6419. if (pl)
  6420. newProp += ': <a target="_blank" href="' + pl + '">' + trO(check.PROBLEMLINKTEXT, ccode) + '</a>';
  6421. else
  6422. newProp += '.';
  6423. newProp += '</div>';
  6424. if (segmentCopy.$isEditable) {
  6425. newProp += '<i class="fa fa-check-square-o fa-pull-left fa-lg" style="color:black;margin-top:0.8em" aria-hidden="true"></i>' +
  6426. '<div class="c' + CL_RIGHTTIPDESCR + '">';
  6427. if (check.SOLUTION) {
  6428. newProp += '<p>' + exSOS(check.SOLUTION, options, 'solutionEN');
  6429. var sl = trO(check.SOLUTIONLINK, ccode);
  6430. if (sl)
  6431. newProp += ': <a target="_blank" href="' + sl + '">' + trO(check.SOLUTIONLINKTEXT, ccode) + '</a>';
  6432. else
  6433. newProp += '.';
  6434. newProp += '</p>'
  6435. }
  6436. } else
  6437. newProp += '<i class="fa fa-ban fa-pull-left fa-lg" style="color:black;margin-top:0.8em" aria-hidden="true"></i>' +
  6438. '<div class="c' + CL_RIGHTTIPDESCR + '">' +
  6439. '<p>' + trS('props.noneditable') + '.</p>';
  6440. var cityID = segmentCopy.$cityID;
  6441. var cityParam = _REP.$cityIDs[cityID].$params[checkID];
  6442. if (cityParam) newProp += '<p>' + cityParam + '</p>';
  6443. var streetID = segmentCopy.$streetID;
  6444. var streetParam = _REP.$cityIDs[cityID].$streetIDs[streetID].$params[checkID];
  6445. if (streetParam) newProp += '<p>' + streetParam + '</p>';
  6446. newProp += '</div></div><br></div>'
  6447. });
  6448. if (prop) prop.innerHTML = newProp
  6449. }
  6450. function matchRegExp(checkID, segmentID, expandedString, options) {
  6451. var optRegExp = options[CO_REGEXP];
  6452. if (!optRegExp) return false;
  6453. var optString = options[CO_STRING];
  6454. var optBool = options[CO_BOOL];
  6455. if (options[CO_NUMBER] && 0 < _REP.$debugCounter) {
  6456. var checkTitle = '';
  6457. if (_RT.$checks[checkID] && _RT.$checks[checkID].TITLE) checkTitle = _RT.$checks[checkID].TITLE;
  6458. var reported = optRegExp.test(expandedString) ? optBool ? false : true : optBool ? true : false;
  6459. _REP.$debugCounter--;
  6460. log(getMsg(
  6461. 'debug log for segment ' + segmentID + ', check #' + checkID,
  6462. '\n1. ' + (optString ? 'Expand template: ' + optString + ' -> ' : 'String: ') + expandedString + '\n2. Match RegExp: ' + (optBool ? 'not ' : '') + optRegExp + ' -> ' +
  6463. JSON.stringify(expandedString.match(optRegExp)) + '\n=> ' + (reported ? 'REPORT the segment as #' + checkID + ' \'' + checkTitle + '\'' : 'skip the segment') +
  6464. (0 < _REP.$debugCounter ? '' : '\nEnd of debug log. Click \'✘\' (Clear report) button to start debug over.')))
  6465. }
  6466. if (optRegExp.test(expandedString)) {
  6467. if (!optBool) return true
  6468. } else if (optBool)
  6469. return true;
  6470. return false
  6471. }
  6472. function checkPublicConnection(seg, ignoreSegment) {
  6473. var foundPublicConnection = false;
  6474. if (!seg.$nodeA.$isPartial && seg.$nodeA.$otherSegmentsLen > 0)
  6475. for (var i = 0; i < seg.$nodeA.$otherSegmentsLen; i++) {
  6476. var otherSegment = seg.$nodeA.$otherSegments[i];
  6477. if (ignoreSegment && otherSegment === ignoreSegment) continue;
  6478. if (otherSegment.isRoutable() || RT_RAMP === otherSegment.$type) {
  6479. foundPublicConnection = true;
  6480. break
  6481. }
  6482. }
  6483. if (!seg.$nodeB.$isPartial && seg.$nodeB.$otherSegmentsLen > 0)
  6484. for (var i = 0; i < seg.$nodeB.$otherSegmentsLen; i++) {
  6485. var otherSegment = seg.$nodeB.$otherSegments[i];
  6486. if (ignoreSegment && otherSegment === ignoreSegment) continue;
  6487. if (otherSegment.isRoutable() || RT_RAMP === otherSegment.$type) {
  6488. foundPublicConnection = true;
  6489. break
  6490. }
  6491. }
  6492. return foundPublicConnection
  6493. }
  6494. var reportWMECH = _UI.pSettings.pScanner.oReportExt.CHECKED && _RT.oReportWMECH.CHECKED;
  6495. var reportToolbox = _UI.pSettings.pScanner.oReportExt.CHECKED && _RT.oReportToolbox.CHECKED;
  6496. var currentZoom = WM.getZoom();
  6497. var slowChecks = _UI.pSettings.pScanner.oSlowChecks.CHECKED && 3 < currentZoom;
  6498. var oExcludeNotes = _UI.pMain.pFilter.oExcludeNotes.CHECKED;
  6499. var selectedSegments = [];
  6500. _RT.$HLedObjects = {};
  6501. for (var segmentKey in WMo.segments.objects) {
  6502. var rawSegment = WMo.segments.objects[segmentKey];
  6503. var segmentID = rawSegment.getID();
  6504. if (_RT.$topUser.$userLevel <= rawSegment.attributes.lockRank && rawSegment.attributes.updatedOn && 13989024E5 < rawSegment.attributes.updatedOn) {
  6505. if (rawSegment.selected) {
  6506. skippedSegment = true;
  6507. if (!DEF_DEBUG) selectedSegments.push(segmentID)
  6508. }
  6509. if (!DEF_DEBUG) continue
  6510. }
  6511. if (rawSegment.layer && rawSegment.id in rawSegment.layer.unrenderedFeatures) continue;
  6512. if ('Delete' === rawSegment.state) continue;
  6513. var seen = null;
  6514. if (segmentID in _RT.$seen) seen = _RT.$seen[segmentID];
  6515. if (rawSegment.selected) {
  6516. selectedSegments.push(segmentID);
  6517. _RT.$revalidate[segmentID] = true;
  6518. if (seen && !seen[I_ISWMECHCOLOR]) {
  6519. deleteSeenSegment(segmentID);
  6520. seen = null
  6521. }
  6522. } else if (segmentID in _RT.$revalidate) {
  6523. deleteSeenSegment(segmentID);
  6524. seen = null;
  6525. delete _RT.$revalidate[segmentID];
  6526. delete rawSegment[GL_WMECHCOLOR]
  6527. }
  6528. var segmentGeometry = document.getElementById(rawSegment.geometry.id);
  6529. if (segmentGeometry) {
  6530. var strokeColor = segmentGeometry.getAttribute('stroke').toUpperCase();
  6531. if (4 === strokeColor.length) strokeColor = '#' + strokeColor.charAt(1) + strokeColor.charAt(1) + strokeColor.charAt(2) + strokeColor.charAt(2) + strokeColor.charAt(3) + strokeColor.charAt(3);
  6532. if (strokeColor in _RT.$WMECHcolors) rawSegment[GL_WMECHCOLOR] = strokeColor
  6533. }
  6534. if (seen) {
  6535. var isTBColor = GL_TBCOLOR in rawSegment;
  6536. var isWMECHColor = GL_WMECHCOLOR in rawSegment;
  6537. if (!seen[I_ISPARTIAL] && isTBColor === seen[I_ISTBCOLOR] && isWMECHColor === seen[I_ISWMECHCOLOR]) {
  6538. HLSegment(rawSegment);
  6539. continue
  6540. }
  6541. }
  6542. var segment = new SimpleSEGMENT(segmentID);
  6543. Object.seal(segment);
  6544. var address = segment.$address;
  6545. var country = address.$country;
  6546. var countryLen = country.length;
  6547. var countryCode = country ? _I18n.getCountryCode(country.toUpperCase()) : _RT.$cachedTopCCode;
  6548. var city = address.$city;
  6549. var cityLen = city.length;
  6550. var cityID = address.$cityID;
  6551. var street = address.$street;
  6552. var state = address.$state;
  6553. var streetLen = street.length;
  6554. var alts = segment.$alts;
  6555. var roadType = segment.$type;
  6556. var typeRank = segment.$typeRank;
  6557. var isToll = segment.$isToll;
  6558. var direction = segment.$direction;
  6559. var elevation = segment.$elevation;
  6560. var lock = Math.max(segment.$lock, segment.$rank);
  6561. var segmentLen = segment.$length;
  6562. var isRoundabout = segment.$isRoundabout;
  6563. var hasHNs = segment.$hasHNs;
  6564. var isDrivable = RR_TRAIL < typeRank;
  6565. var nodeA = segment.$nodeA;
  6566. var nodeB = segment.$nodeB;
  6567. var nodeAID = segment.$nodeAID;
  6568. var nodeBID = segment.$nodeBID;
  6569. var isPartial = nodeA.$isPartial || nodeB.$isPartial;
  6570. var forwardSpeed = segment.$fwdMaxSpeed;
  6571. var reverseSpeed = segment.$revMaxSpeed;
  6572. var forwardSpeedUnverified = segment.$fwdMaxSpeedUnverified;
  6573. var reverseSpeedUnverified = segment.$revMaxSpeedUnverified;
  6574. var hasRestrictions = segment.$hasRestrictions;
  6575. var hasClosures = segment.$hasClosures;
  6576. var flags = segment.$flags;
  6577. var now = Date.now();
  6578. if (seen) {
  6579. if (seen[I_ISPARTIAL] && isPartial) {
  6580. HLSegment(rawSegment);
  6581. continue
  6582. }
  6583. deleteSeenSegment(segmentID);
  6584. seen = null
  6585. }
  6586. _RT.$seen[segmentID] = seen = [0, null, GL_TBCOLOR in rawSegment, GL_WMECHCOLOR in rawSegment, isPartial || 4 > currentZoom, cityID];
  6587. segment.incCityCounter();
  6588. if (segment.$isEditable) _REP.$isEditableFound = true;
  6589. if (GL_NOID === street) {
  6590. deleteSeenSegment(segmentID);
  6591. continue
  6592. }
  6593. _RT.$isGlobalAccess = true;
  6594. if (!address.isOkFor(0)) {
  6595. _RT.$isGlobalAccess = false;
  6596. continue
  6597. }
  6598. if (slowChecks && RT_RAILROAD !== roadType) {
  6599. if (nodeA.$otherSegmentsLen && isLimitOk(118)) {
  6600. var rawNode = nodeA.$rawNode;
  6601. var baseAngle = rawNode.getAngleToSegment(rawSegment);
  6602. for (var i = 0; i < nodeA.$otherSegmentsLen; i++) {
  6603. var otherSegment = nodeA.$otherSegments[i];
  6604. if (!otherSegment.$rawSegment) continue;
  6605. var curAngle = rawNode.getAngleToSegment(otherSegment.$rawSegment);
  6606. var angle = Math.abs(baseAngle - curAngle);
  6607. if (angle > 180) angle = 360 - angle;
  6608. if (2 > angle && address.isOkFor(118)) {
  6609. segment.report(118);
  6610. break
  6611. }
  6612. }
  6613. }
  6614. if (nodeB.$otherSegmentsLen && isLimitOk(119)) {
  6615. var rawNode = nodeB.$rawNode;
  6616. var baseAngle = rawNode.getAngleToSegment(rawSegment);
  6617. for (var i = 0; i < nodeB.$otherSegmentsLen; i++) {
  6618. var otherSegment = nodeB.$otherSegments[i];
  6619. if (!otherSegment.$rawSegment) continue;
  6620. var curAngle = rawNode.getAngleToSegment(otherSegment.$rawSegment);
  6621. var angle = Math.abs(baseAngle - curAngle);
  6622. if (angle > 180) angle = 360 - angle;
  6623. if (2 > angle && address.isOkFor(119)) {
  6624. segment.report(119);
  6625. break
  6626. }
  6627. }
  6628. }
  6629. }
  6630. if (!countryLen && isLimitOk(23)) {
  6631. seen[I_ISPARTIAL] = false;
  6632. if (address.isOkFor(23)) {
  6633. segment.report(23);
  6634. HLSegment(rawSegment)
  6635. }
  6636. continue
  6637. }
  6638. if (streetLen && address.isOkFor(101)) {
  6639. options = getCheckOptions(101, countryCode);
  6640. if (options[CO_REGEXP].test(street)) {
  6641. segment.report(101);
  6642. HLSegment(rawSegment);
  6643. continue
  6644. }
  6645. }
  6646. if (!state && address.isOkFor(106)) segment.report(106);
  6647. if (reportToolbox && address.isOkFor(CK_TBFIRST)) {
  6648. var col = rawSegment[GL_TBCOLOR];
  6649. if (col) {
  6650. col = col.toUpperCase();
  6651. for (var i = CK_TBFIRST; i <= CK_TBLAST; i++) {
  6652. var check = _RT.$checks[i];
  6653. if (check.COLOR === col) {
  6654. segment.report(i);
  6655. break
  6656. }
  6657. }
  6658. }
  6659. }
  6660. if (reportWMECH && address.isOkFor(CK_WMECHFIRST)) {
  6661. var col = rawSegment[GL_WMECHCOLOR];
  6662. if (col)
  6663. for (var i = CK_WMECHFIRST; i <= CK_WMECHLAST; i++) {
  6664. var check = _RT.$checks[i];
  6665. if (check && check.COLOR === col) {
  6666. segment.report(i);
  6667. break
  6668. }
  6669. }
  6670. }
  6671. if (alts.length && address.isOkFor(34))
  6672. for (var i = 0; i < alts.length; i++)
  6673. if (!alts[i].$street) {
  6674. segment.report(34);
  6675. break
  6676. }
  6677. if (slowChecks && segment.$restrictionsLen && isLimitOk(38) && address.isOkFor(38)) {
  6678. var restrictions = segment.$restrictions;
  6679. for (var i = 0; i < restrictions.length; i++)
  6680. if (restrictions[i].$isInThePast) {
  6681. segment.report(38);
  6682. break
  6683. }
  6684. }
  6685. if (slowChecks && (nodeA.$restrictionsLen || nodeB.$restrictionsLen) && isLimitOk(39) && address.isOkFor(39)) {
  6686. var restrictions = nodeA.$restrictions.concat(nodeB.$restrictions);
  6687. for (var i = 0; i < restrictions.length; i++) {
  6688. var restriction = restrictions[i];
  6689. if (restriction.$isInThePast) {
  6690. var param = '';
  6691. if (restriction.$to.$address && restriction.$to.$address.$street) param = 'turn to ' + restriction.$to.$address.$street;
  6692. segment.report({$checkID: 39, $streetParam: param});
  6693. break
  6694. }
  6695. }
  6696. }
  6697. if (nodeAID && nodeAID === nodeBID && address.isOkFor(43)) segment.report(43);
  6698. if (RT_RAILROAD === roadType && 100 > segmentLen && !isPartial && !nodeA.$otherSegmentsLen && !nodeB.$otherSegmentsLen && address.isOkFor(104)) segment.report(104);
  6699. if (RT_TRAIL === roadType && -5 === elevation && address.isOkFor(105)) segment.report(105);
  6700. if ((9 < elevation || -5 > elevation) && address.isOkFor(116)) segment.report(116);
  6701. var expandOptions = {
  6702. 'country': country,
  6703. 'state': state,
  6704. 'city': city,
  6705. 'street': street,
  6706. 'altStreet': alts.map(function(e) {
  6707. return e.$street
  6708. }),
  6709. 'altCity': alts.map(function(e) {
  6710. return e.$city
  6711. }),
  6712. 'type': roadType,
  6713. 'typeRank': typeRank,
  6714. 'toll': +isToll,
  6715. 'direction': direction,
  6716. 'elevation': elevation,
  6717. 'lock': lock,
  6718. 'length': segmentLen,
  6719. 'ID': segmentID,
  6720. 'roundabout': +isRoundabout,
  6721. 'hasHNs': +hasHNs,
  6722. 'drivable': +isDrivable,
  6723. 'Uturn': +(nodeA.$isUturn || nodeB.$isUturn),
  6724. 'deadEnd': +!(isPartial || nodeA.$otherSegmentsLen && nodeB.$otherSegmentsLen),
  6725. 'partialA': +nodeA.$isPartial,
  6726. 'deadEndA': +!(nodeA.$isPartial || nodeA.$otherSegmentsLen),
  6727. 'segmentsA': nodeA.$otherSegmentsLen,
  6728. 'inA': nodeA.$inConnectionsLen,
  6729. 'outA': nodeA.$outConnectionsLen,
  6730. 'UturnA': +nodeA.$isUturn,
  6731. 'partialB': +nodeB.$isPartial,
  6732. 'deadEndB': +!(nodeB.$isPartial || nodeB.$otherSegmentsLen),
  6733. 'segmentsB': nodeB.$otherSegmentsLen,
  6734. 'inB': nodeB.$inConnectionsLen,
  6735. 'outB': nodeB.$outConnectionsLen,
  6736. 'UturnB': +nodeB.$isUturn,
  6737. 'softTurns': +!(segment.$isTurnALocked && segment.$isTurnBLocked),
  6738. 'speedLimit': forwardSpeed || reverseSpeed,
  6739. 'speedLimitAB': forwardSpeed,
  6740. 'speedLimitBA': reverseSpeed,
  6741. 'checkSpeedLimit': isDrivable && (reverseSpeedUnverified || forwardSpeedUnverified)
  6742. };
  6743. for (var i = CK_MATCHFIRST; i <= CK_MATCHLAST; i++) {
  6744. if (!isLimitOk(i) || !address.isOkFor(i)) continue;
  6745. options = getCheckOptions(i, countryCode);
  6746. var optString = options[CO_STRING];
  6747. var optRegExp = options[CO_REGEXP];
  6748. if (!optString || !optRegExp) continue;
  6749. var expandedString = _I18n.expandSO(optString, expandOptions);
  6750. if (matchRegExp(i, segmentID, expandedString, options)) segment.report(i)
  6751. }
  6752. if (!cityLen && RT_FREEWAY === roadType && isLimitOk(69) && address.isOkFor(69)) segment.report(69);
  6753. if (slowChecks) {
  6754. if (1 === nodeA.$otherSegmentsLen && DIR_UNKNOWN !== direction && !nodeA.$isPartial && !nodeA.$isUturn && !nodeA.$restrictionsLen && !segment.$restrictionsLen && !hasClosures && isLimitOk(36) &&
  6755. address.isOkFor(36)) {
  6756. var otherSegment = nodeA.$otherSegments[0];
  6757. var otherNode, nextNode;
  6758. if (otherSegment.$nodeAID === nodeAID) {
  6759. otherNode = otherSegment.$nodeA;
  6760. nextNode = otherSegment.$nodeB
  6761. } else {
  6762. otherNode = otherSegment.$nodeB;
  6763. nextNode = otherSegment.$nodeA
  6764. }
  6765. if ((!nodeB.$isPartial || !nextNode.$isPartial) && otherSegment.$segmentID !== segmentID && otherSegment.$rawSegment && (1E4 > otherSegment.$length + segmentLen || 1E3 > segmentLen) &&
  6766. otherSegment.$address.$street === street && otherSegment.$address.$city === city && otherSegment.$address.$state === state && otherSegment.$address.$country === country &&
  6767. otherSegment.$fwdMaxSpeed === forwardSpeed && otherSegment.$revMaxSpeed === reverseSpeed && otherSegment.$fwdMaxSpeedUnverified === forwardSpeedUnverified &&
  6768. otherSegment.$revMaxSpeedUnverified === reverseSpeedUnverified && otherSegment.$type === roadType && otherSegment.$isToll === isToll && otherSegment.$hasRestrictions === hasRestrictions &&
  6769. !otherSegment.$hasClosures && deepCompare(otherSegment.$flags, flags) &&
  6770. (DIR_TWO === otherSegment.$direction && DIR_TWO === direction || DIR_TWO !== otherSegment.$direction && DIR_TWO !== direction) && otherSegment.$elevation === elevation &&
  6771. otherSegment.$nodeAID !== nodeBID && otherSegment.$nodeBID !== nodeBID && !otherSegment.$restrictionsLen && !otherNode.$restrictionsLen && deepCompare(otherSegment.$alts, alts)) {
  6772. var loopFound = false;
  6773. for (var i = 0; i < nextNode.$otherSegmentsLen; i++) {
  6774. var thirdSegment = nextNode.$otherSegments[i];
  6775. if (thirdSegment.$nodeAID === nodeBID || thirdSegment.$nodeBID === nodeBID) {
  6776. loopFound = true;
  6777. break
  6778. }
  6779. }
  6780. if (!loopFound) segment.report(36)
  6781. }
  6782. }
  6783. if (DIR_UNKNOWN !== direction && !nodeB.$isPartial && 1 === nodeB.$otherSegmentsLen && !nodeB.$isUturn && !nodeB.$restrictionsLen && !segment.$restrictionsLen && !hasClosures && isLimitOk(37) &&
  6784. address.isOkFor(37)) {
  6785. var otherSegment = nodeB.$otherSegments[0];
  6786. var otherNode, nextNode;
  6787. if (otherSegment.$nodeAID === nodeBID) {
  6788. otherNode = otherSegment.$nodeA;
  6789. nextNode = otherSegment.$nodeB
  6790. } else {
  6791. otherNode = otherSegment.$nodeB;
  6792. nextNode = otherSegment.$nodeA
  6793. }
  6794. if ((!nodeA.$isPartial || !nextNode.$isPartial) && otherSegment.$segmentID !== segmentID && otherSegment.$rawSegment && 1E4 > otherSegment.$length + segmentLen &&
  6795. otherSegment.$address.$street === street && otherSegment.$address.$city === city && otherSegment.$address.$state === state && otherSegment.$address.$country === country &&
  6796. otherSegment.$fwdMaxSpeed === forwardSpeed && otherSegment.$revMaxSpeed === reverseSpeed && otherSegment.$fwdMaxSpeedUnverified === forwardSpeedUnverified &&
  6797. otherSegment.$revMaxSpeedUnverified === reverseSpeedUnverified && otherSegment.$type === roadType && otherSegment.$isToll === isToll && otherSegment.$hasRestrictions === hasRestrictions &&
  6798. !otherSegment.$hasClosures && deepCompare(otherSegment.$flags, flags) &&
  6799. (DIR_TWO === otherSegment.$direction && DIR_TWO === direction || DIR_TWO !== otherSegment.$direction && DIR_TWO !== direction) && otherSegment.$elevation === elevation &&
  6800. otherSegment.$nodeAID !== nodeAID && otherSegment.$nodeBID !== nodeAID && !otherSegment.$restrictionsLen && !otherNode.$restrictionsLen && deepCompare(otherSegment.$alts, alts)) {
  6801. var loopFound = false;
  6802. for (var i = 0; i < nextNode.$otherSegmentsLen; i++) {
  6803. var thirdSegment = nextNode.$otherSegments[i];
  6804. if (thirdSegment.$nodeAID === nodeAID || thirdSegment.$nodeBID === nodeAID) {
  6805. loopFound = true;
  6806. break
  6807. }
  6808. }
  6809. if (!loopFound) segment.report(37)
  6810. }
  6811. }
  6812. }
  6813. if (cityLen) {
  6814. for (var i = CK_CITYNAMEFIRST; i <= CK_CITYNAMELAST; i++) {
  6815. if (!address.isOkFor(i) || !isLimitOk(i)) continue;
  6816. if (matchRegExp(i, segmentID, city, getCheckOptions(i, countryCode))) segment.report(i)
  6817. }
  6818. if (isLimitOk(24) && address.isOkFor(24)) {
  6819. var param = trS('city.1');
  6820. var r = 3 > cityLen ? true : false;
  6821. var cityCounter = _repCC[cityID];
  6822. if (1 === cityCounter || cityID in _REP.$incompleteIDs && !_REP.$incompleteIDs[cityID].$counterReported)
  6823. for (var i = 0, len = _REP.$unsortedCityIDs.length; i < len; i++) {
  6824. var cid = _REP.$unsortedCityIDs[i];
  6825. if (cid === cityID) continue;
  6826. var c = _repC[cid];
  6827. var cLen = c.length;
  6828. if (1 > cLen) continue;
  6829. var cityObj = getCityCmpObj(cityID, city, c);
  6830. var cObj = getCityCmpObj(cid, c, city);
  6831. setCmpObjLimits(cityObj, cObj);
  6832. setCmpObjLimits(cObj, cityObj);
  6833. if (cityObj.$limit) _REP.$incompleteIDs[cityID] = cityObj;
  6834. if (cObj.$limit && !_REP.$incompleteIDs[cid]) _REP.$incompleteIDs[cid] = cObj;
  6835. if (cityObj.$limit || cObj.$limit) break
  6836. }
  6837. if (cityID in _REP.$incompleteIDs) {
  6838. var incompleteCity = _REP.$incompleteIDs[cityID];
  6839. incompleteCity.$counterReported++;
  6840. if (incompleteCity.$limit < cityCounter) {
  6841. r = false;
  6842. deleteCityCheck(cityID, 24);
  6843. delete _REP.$incompleteIDs[cityID]
  6844. } else {
  6845. r = true;
  6846. param = trS('city.consider') + ' ' + incompleteCity.$otherCity + ' [' + incompleteCity.$reason + ']'
  6847. }
  6848. }
  6849. if (r) segment.report({$checkID: 24, $cityParam: param})
  6850. }
  6851. if (RT_RAILROAD === roadType && isLimitOk(24) && address.isOkFor(27)) segment.report(27);
  6852. if (RT_FREEWAY === roadType && isLimitOk(59) && address.isOkFor(59)) segment.report(59)
  6853. }
  6854. if (isDrivable) {
  6855. if (slowChecks) {
  6856. if (nodeA.$outConnectionsLen && (DIR_TWO === direction || DIR_BA === direction) && isLimitOk(120)) {
  6857. var rawNode = nodeA.$rawNode;
  6858. var baseAngle = rawNode.getAngleToSegment(rawSegment);
  6859. for (var i = 0; i < nodeA.$outConnectionsLen; i++) {
  6860. var otherSegment = nodeA.$outConnections[i];
  6861. if (!otherSegment.$rawSegment) continue;
  6862. var curAngle = rawNode.getAngleToSegment(otherSegment.$rawSegment);
  6863. var angle = Math.abs(baseAngle - curAngle);
  6864. if (angle > 180) angle = 360 - angle;
  6865. if (30 > angle && 2 <= angle && address.isOkFor(120))
  6866. if (10 > angle) {
  6867. segment.report(120);
  6868. break
  6869. } else if (!nodeA.$isPartial && 3 > nodeA.$otherSegmentsLen && RR_STREET < typeRank) {
  6870. segment.report(120);
  6871. break
  6872. }
  6873. }
  6874. }
  6875. if (nodeB.$outConnectionsLen && (DIR_TWO === direction || DIR_AB === direction) && isLimitOk(121)) {
  6876. var rawNode = nodeB.$rawNode;
  6877. var baseAngle = rawNode.getAngleToSegment(rawSegment);
  6878. for (var i = 0; i < nodeB.$outConnectionsLen; i++) {
  6879. var otherSegment = nodeB.$outConnections[i];
  6880. if (!otherSegment.$rawSegment) continue;
  6881. var curAngle = rawNode.getAngleToSegment(otherSegment.$rawSegment);
  6882. var angle = Math.abs(baseAngle - curAngle);
  6883. if (angle > 180) angle = 360 - angle;
  6884. if (30 > angle && 2 <= angle && address.isOkFor(121))
  6885. if (10 > angle) {
  6886. segment.report(121);
  6887. break
  6888. } else if (!nodeB.$isPartial && 3 > nodeB.$otherSegmentsLen && RR_STREET < typeRank) {
  6889. segment.report(121);
  6890. break
  6891. }
  6892. }
  6893. }
  6894. }
  6895. if (RT_PRIVATE !== roadType && isLimitOk(45) && address.isOkFor(45))
  6896. if (!nodeA.$isPartial && !nodeA.$inConnectionsLen)
  6897. if (DIR_AB === direction)
  6898. segment.report(45);
  6899. else if (!nodeB.$isPartial && !nodeB.$inConnectionsLen)
  6900. segment.report(45);
  6901. else {
  6902. if (slowChecks && DIR_TWO === direction && nodeA.$otherSegmentsLen && isLimitOk(46))
  6903. for (var i = 0; i < nodeA.$otherSegmentsLen; i++) {
  6904. var otherSegment = nodeA.$otherSegments[i];
  6905. if (!otherSegment.$rawSegment) continue;
  6906. if (RR_TRAIL < otherSegment.$typeRank &&
  6907. (DIR_TWO === otherSegment.$direction || DIR_AB === otherSegment.$direction && nodeAID === otherSegment.$nodeBID ||
  6908. DIR_BA === otherSegment.$direction && nodeAID === otherSegment.$nodeAID)) {
  6909. segment.report(46);
  6910. break
  6911. }
  6912. }
  6913. }
  6914. else if (!nodeB.$isPartial && !nodeB.$inConnectionsLen)
  6915. if (DIR_BA === direction)
  6916. segment.report(45);
  6917. else if (slowChecks && DIR_TWO === direction && nodeB.$otherSegmentsLen && isLimitOk(47))
  6918. for (var i = 0; i < nodeB.$otherSegmentsLen; i++) {
  6919. var otherSegment = nodeB.$otherSegments[i];
  6920. if (!otherSegment.$rawSegment) continue;
  6921. if (RR_TRAIL < otherSegment.$typeRank &&
  6922. (DIR_TWO === otherSegment.$direction || DIR_AB === otherSegment.$direction && nodeBID === otherSegment.$nodeBID ||
  6923. DIR_BA === otherSegment.$direction && nodeBID === otherSegment.$nodeAID)) {
  6924. segment.report(47);
  6925. break
  6926. }
  6927. }
  6928. if (5 < segmentLen && isLimitOk(44) && address.isOkFor(44))
  6929. if (!nodeA.$isPartial && !nodeA.$outConnectionsLen)
  6930. if (DIR_BA === direction)
  6931. segment.report(44);
  6932. else if (!nodeB.$isPartial && !nodeB.$outConnectionsLen)
  6933. segment.report(44);
  6934. else {
  6935. if (slowChecks && DIR_TWO === direction && nodeA.$otherSegmentsLen && isLimitOk(102))
  6936. for (var i = 0; i < nodeA.$otherSegmentsLen; i++) {
  6937. var otherSegment = nodeA.$otherSegments[i];
  6938. if (!otherSegment.$rawSegment) continue;
  6939. if (RR_TRAIL < otherSegment.$typeRank && RT_PRIVATE !== otherSegment.$type &&
  6940. (DIR_TWO === otherSegment.$direction || DIR_BA === otherSegment.$direction && nodeAID === otherSegment.$nodeBID ||
  6941. DIR_AB === otherSegment.$direction && nodeAID === otherSegment.$nodeAID)) {
  6942. segment.report(102);
  6943. break
  6944. }
  6945. }
  6946. }
  6947. else if (!nodeB.$isPartial && !nodeB.$outConnectionsLen)
  6948. if (DIR_AB === direction)
  6949. segment.report(44);
  6950. else if (slowChecks && DIR_TWO === direction && nodeB.$otherSegmentsLen && isLimitOk(103))
  6951. for (var i = 0; i < nodeB.$otherSegmentsLen; i++) {
  6952. var otherSegment = nodeB.$otherSegments[i];
  6953. if (!otherSegment.$rawSegment) continue;
  6954. if (RR_TRAIL < otherSegment.$typeRank && RT_PRIVATE !== otherSegment.$type &&
  6955. (DIR_TWO === otherSegment.$direction || DIR_BA === otherSegment.$direction && nodeBID === otherSegment.$nodeBID ||
  6956. DIR_AB === otherSegment.$direction && nodeBID === otherSegment.$nodeAID)) {
  6957. segment.report(103);
  6958. break
  6959. }
  6960. }
  6961. if (slowChecks && segment.isRoutable() && !nodeA.$isPartial && !nodeB.$isPartial && nodeA.$otherSegmentsLen > 0 && nodeB.$otherSegmentsLen > 0 && isLimitOk(202) && address.isOkFor(202)) {
  6962. var foundPublicConnection = checkPublicConnection(segment, null);
  6963. if (!foundPublicConnection)
  6964. if (nodeA.$otherSegmentsLen == 1 && nodeB.$otherSegmentsLen == 1) {
  6965. var nodeASegment = nodeA.$otherSegments[0];
  6966. var nodeBSegment = nodeB.$otherSegments[0];
  6967. if (checkPublicConnection(nodeASegment, segment) && checkPublicConnection(nodeBSegment, segment)) foundPublicConnection = true
  6968. }
  6969. if (!foundPublicConnection) segment.report(202)
  6970. }
  6971. if (RR_STREET < typeRank && RT_RAMP !== roadType && !segment.$isRoundabout && segmentLen > 5) {
  6972. if (DIR_AB === direction || DIR_TWO === direction) {
  6973. if (forwardSpeedUnverified && isLimitOk(210) && address.isOkFor(210)) segment.report(210);
  6974. if (!forwardSpeed && isLimitOk(212) && address.isOkFor(212)) segment.report(212);
  6975. if (forwardSpeed) {
  6976. options = getCheckOptions(214, countryCode);
  6977. if (!options[CO_REGEXP].test(forwardSpeed) && isLimitOk(214) && address.isOkFor(214)) segment.report(214)
  6978. }
  6979. }
  6980. if (DIR_BA === direction || DIR_TWO == direction) {
  6981. if (reverseSpeedUnverified && isLimitOk(211) && address.isOkFor(211)) segment.report(211);
  6982. if (!reverseSpeed && isLimitOk(213) && address.isOkFor(213)) segment.report(213);
  6983. if (reverseSpeed) {
  6984. options = getCheckOptions(215, countryCode);
  6985. if (!options[CO_REGEXP].test(reverseSpeed) && isLimitOk(215) && address.isOkFor(215)) segment.report(215)
  6986. }
  6987. }
  6988. }
  6989. if (DIR_UNKNOWN === direction && isLimitOk(25) && address.isOkFor(25)) segment.report(25);
  6990. if (!(nodeAID && nodeBID) && isLimitOk(35) && address.isOkFor(35)) segment.report(35);
  6991. if (RR_PRIMARY > typeRank) {
  6992. if (nodeAID && nodeBID && address.isOkFor(200)) {
  6993. if (!segment.$isTurnALocked && nodeA.$otherSegmentsLen && isLimitOk(200)) segment.report(200);
  6994. if (!segment.$isTurnBLocked && nodeB.$otherSegmentsLen && isLimitOk(300)) segment.report(300)
  6995. }
  6996. } else if (nodeAID && nodeBID && address.isOkFor(201)) {
  6997. if (!segment.$isTurnALocked && nodeA.$otherSegmentsLen && isLimitOk(201)) segment.report(201);
  6998. if (!segment.$isTurnBLocked && nodeB.$otherSegmentsLen && isLimitOk(301)) segment.report(301)
  6999. }
  7000. if ((DIR_AB === direction && nodeA.$outConnectionsLen || DIR_BA === direction && nodeA.$inConnectionsLen) && isLimitOk(41) && address.isOkFor(41)) segment.report(41);
  7001. if ((DIR_BA === direction && nodeB.$outConnectionsLen || DIR_AB === direction && nodeB.$inConnectionsLen) && isLimitOk(42) && address.isOkFor(42)) segment.report(42);
  7002. if (!nodeA.$isPartial) {
  7003. if (slowChecks && 5 < segmentLen && !nodeA.$otherSegmentsLen && nodeA.$rawNode.geometry.bounds && isLimitOk(107) && address.isOkFor(107)) {
  7004. var IDs = nodeA.$rawNode.attributes.segIDs;
  7005. var pt = new OpenLayers.Geometry.Point(nodeA.$rawNode.geometry.bounds.left, nodeA.$rawNode.geometry.bounds.bottom);
  7006. for (var segKey in WMo.segments.objects) {
  7007. var seg = WMo.segments.objects[segKey];
  7008. if (segmentID === seg.getID()) continue;
  7009. if (!seg.geometry) continue;
  7010. if (elevation !== seg.attributes.level) continue;
  7011. if ('Delete' === seg.state) continue;
  7012. if (RR_TRAIL >= SimpleSEGMENT.prototype.getTypeRank(seg.attributes.roadType)) continue;
  7013. if (LIMIT_TOLERANCE > seg.geometry.distanceTo(pt, null)) {
  7014. if (!seg.arePropertiesEditable()) segment.$forceNonEditable = true;
  7015. segment.report(107);
  7016. break
  7017. }
  7018. }
  7019. }
  7020. if (nodeA.$isUturn)
  7021. if (slowChecks && 1 === nodeA.$outConnectionsLen && isLimitOk(99) && address.isOkFor(99) && nodeA.$outConnections[0].$isRoundabout) segment.report(99);
  7022. if (slowChecks && nodeA.$otherSegmentsLen && !isRoundabout && isLimitOk(78) && address.isOkFor(78))
  7023. for (var i = 0; i < nodeA.$otherSegmentsLen; i++) {
  7024. var otherSegment = nodeA.$otherSegments[i];
  7025. if (!otherSegment.$rawSegment) continue;
  7026. if (RR_TRAIL < otherSegment.$typeRank && nodeAID && nodeBID &&
  7027. (otherSegment.$nodeAID === nodeAID && otherSegment.$nodeBID === nodeBID || otherSegment.$nodeAID === nodeBID && otherSegment.$nodeBID === nodeAID))
  7028. if (otherSegment.$typeRank > typeRank || otherSegment.$length < segmentLen && otherSegment.$typeRank === typeRank ||
  7029. otherSegment.$segmentID < segmentID && otherSegment.$length === segmentLen && otherSegment.$typeRank === typeRank) {
  7030. segment.report(78);
  7031. break
  7032. }
  7033. }
  7034. if (!nodeB.$isPartial) {
  7035. options = getCheckOptions(109, countryCode);
  7036. if (options[CO_NUMBER] > segmentLen && nodeA.$otherSegmentsLen && nodeB.$otherSegmentsLen && !isRoundabout && address.isOkFor(109)) segment.report(109);
  7037. if (slowChecks && 15 > segmentLen && !streetLen && 2 === nodeA.$otherSegmentsLen && 2 === nodeB.$otherSegmentsLen && isLimitOk(79) && address.isOkFor(79) &&
  7038. nodeA.$otherSegments[0].$rawSegment && nodeA.$otherSegments[1].$rawSegment && nodeB.$otherSegments[0].$rawSegment && nodeB.$otherSegments[1].$rawSegment &&
  7039. nodeA.$otherSegments[0].$address.$street && nodeA.$otherSegments[0].$type === nodeA.$otherSegments[1].$type && nodeB.$otherSegments[0].$type === nodeB.$otherSegments[1].$type &&
  7040. nodeA.$otherSegments[0].$address.$street === nodeA.$otherSegments[1].$address.$street && nodeB.$otherSegments[0].$address.$street === nodeB.$otherSegments[1].$address.$street &&
  7041. nodeA.$otherSegments[0].$address.$street === nodeB.$otherSegments[0].$address.$street) {
  7042. if ((DIR_TWO === direction || DIR_BA === direction) && 1 === nodeA.$outConnectionsLen && 2 > nodeA.$inConnectionsLen && 1 === nodeB.$inConnectionsLen && 2 > nodeB.$outConnectionsLen)
  7043. segment.report(79);
  7044. if ((DIR_TWO === direction || DIR_AB === direction) && 1 === nodeB.$outConnectionsLen && 2 > nodeB.$inConnectionsLen && 1 === nodeA.$inConnectionsLen && 2 > nodeA.$outConnectionsLen)
  7045. segment.report(79)
  7046. }
  7047. }
  7048. }
  7049. if (!nodeB.$isPartial) {
  7050. if (slowChecks && 5 < segmentLen && !nodeB.$otherSegmentsLen && nodeB.$rawNode.geometry.bounds && isLimitOk(108) && address.isOkFor(108)) {
  7051. var IDs = nodeB.$rawNode.attributes.segIDs;
  7052. var pt = new OpenLayers.Geometry.Point(nodeB.$rawNode.geometry.bounds.left, nodeB.$rawNode.geometry.bounds.bottom);
  7053. for (var segKey in WMo.segments.objects) {
  7054. var seg = WMo.segments.objects[segKey];
  7055. if (segmentID === seg.getID()) continue;
  7056. if (!seg.geometry) continue;
  7057. if (elevation !== seg.attributes.level) continue;
  7058. if ('Delete' === seg.state) continue;
  7059. if (RR_TRAIL >= SimpleSEGMENT.prototype.getTypeRank(seg.attributes.roadType)) continue;
  7060. if (LIMIT_TOLERANCE > seg.geometry.distanceTo(pt, null)) {
  7061. if (!seg.arePropertiesEditable()) segment.$forceNonEditable = true;
  7062. segment.report(108);
  7063. break
  7064. }
  7065. }
  7066. }
  7067. if (nodeB.$isUturn) {
  7068. if (!nodeB.$otherSegmentsLen && isLimitOk(77) && address.isOkFor(77)) segment.report(77);
  7069. if (slowChecks && 1 === nodeB.$outConnectionsLen && isLimitOk(99) && address.isOkFor(99) && nodeB.$outConnections[0].$isRoundabout) segment.report(99)
  7070. }
  7071. }
  7072. if (RT_FREEWAY === roadType) {
  7073. if (0 !== elevation && isLimitOk(110) && address.isOkFor(110)) segment.report(110);
  7074. options = getCheckOptions(150, countryCode);
  7075. if (options[CO_NUMBER] > lock && isLimitOk(150) && address.isOkFor(150)) segment.report(150);
  7076. if (DIR_TWO === direction && address.isOkFor(90)) segment.report(90)
  7077. }
  7078. if (RT_MAJOR === roadType) {
  7079. options = getCheckOptions(151, countryCode);
  7080. if (options[CO_NUMBER] > lock && isLimitOk(151) && address.isOkFor(151)) segment.report(151)
  7081. }
  7082. if (RT_MINOR === roadType) {
  7083. options = getCheckOptions(152, countryCode);
  7084. if (options[CO_NUMBER] > lock && isLimitOk(152) && address.isOkFor(152)) segment.report(152)
  7085. }
  7086. if (RT_RAMP === roadType) {
  7087. if (DIR_TWO === direction && isLimitOk(91) && address.isOkFor(91)) segment.report(91);
  7088. options = getCheckOptions(153, countryCode);
  7089. if (options[CO_NUMBER] > lock && isLimitOk(153) && address.isOkFor(153)) segment.report(153)
  7090. }
  7091. if (RT_PRIMARY === roadType) {
  7092. options = getCheckOptions(154, countryCode);
  7093. if (options[CO_NUMBER] > lock && isLimitOk(154) && address.isOkFor(154)) segment.report(154)
  7094. }
  7095. if (RT_STREET === roadType) {
  7096. options = getCheckOptions(155, countryCode);
  7097. if (options[CO_NUMBER] > lock && isLimitOk(155) && address.isOkFor(155)) segment.report(155)
  7098. }
  7099. if (RT_PARKING === roadType) {
  7100. options = getCheckOptions(156, countryCode);
  7101. if (options[CO_NUMBER] > lock && isLimitOk(156) && address.isOkFor(156)) segment.report(156)
  7102. }
  7103. if (RT_RAILROAD === roadType) {
  7104. options = getCheckOptions(157, countryCode);
  7105. if (options[CO_NUMBER] > lock && isLimitOk(157) && address.isOkFor(157)) segment.report(157)
  7106. }
  7107. if (RT_PRIVATE === roadType) {
  7108. options = getCheckOptions(158, countryCode);
  7109. if (options[CO_NUMBER] > lock && isLimitOk(158) && address.isOkFor(158)) segment.report(158)
  7110. }
  7111. } else if (slowChecks && !hasHNs && RT_RAILROAD !== roadType) {
  7112. if (nodeA.$otherSegmentsLen && (nodeB.$otherSegmentsLen || 300 < segmentLen) && isLimitOk(114) && address.isOkFor(114))
  7113. for (var i = 0; i < nodeA.$otherSegmentsLen; i++) {
  7114. var otherSegment = nodeA.$otherSegments[i];
  7115. if (!otherSegment.$rawSegment) continue;
  7116. if (RR_TRAIL < otherSegment.$typeRank) {
  7117. segment.report(114);
  7118. break
  7119. }
  7120. }
  7121. if (nodeB.$otherSegmentsLen && (nodeA.$otherSegmentsLen || 300 < segmentLen) && isLimitOk(115) && address.isOkFor(115))
  7122. for (var i = 0; i < nodeB.$otherSegmentsLen; i++) {
  7123. var otherSegment = nodeB.$otherSegments[i];
  7124. if (!otherSegment.$rawSegment) continue;
  7125. if (RR_TRAIL < otherSegment.$typeRank) {
  7126. segment.report(115);
  7127. break
  7128. }
  7129. }
  7130. }
  7131. if (streetLen) {
  7132. var checkIDType = {160: RT_FREEWAY, 161: RT_MAJOR, 162: RT_MINOR, 163: RT_RAMP, 164: RT_PRIMARY, 165: RT_STREET, 166: RT_PARKING, 167: RT_RAILROAD, 169: 0};
  7133. var checkIDID = {160: 70, 161: 71, 162: 72};
  7134. for (var i in checkIDType) {
  7135. i = +i;
  7136. if (!address.isOkFor(i) || !isLimitOk(i)) continue;
  7137. var rType = checkIDType[i];
  7138. options = getCheckOptions(i, countryCode);
  7139. if (rType === roadType || !rType) {
  7140. if (matchRegExp(i, segmentID, street, options)) segment.report(i)
  7141. } else {
  7142. var mi = checkIDID[i];
  7143. if (mi && address.isOkFor(mi) && !matchRegExp(i, segmentID, street, options)) segment.report(mi)
  7144. }
  7145. }
  7146. for (var i = CK_STREETNAMEFIRST; i <= CK_STREETNAMELAST; i++) {
  7147. if (!address.isOkFor(i) || !isLimitOk(i)) continue;
  7148. if (matchRegExp(i, segmentID, street, getCheckOptions(i, countryCode))) segment.report(i)
  7149. }
  7150. if (cityLen && RT_RAMP === roadType && isLimitOk(57) && address.isOkFor(57)) segment.report(57);
  7151. if (-1 !== street.indexOf('CONST ZN') && isLimitOk(117) && address.isOkFor(117)) segment.report(117);
  7152. if (RT_RAMP !== roadType && -1 !== street.indexOf('.') && isLimitOk(95) && address.isOkFor(95)) segment.report(95);
  7153. if (RT_RAMP === roadType)
  7154. if (DIR_TWO === direction)
  7155. if (isLimitOk(28) && address.isOkFor(28)) segment.report(28);
  7156. if (RR_RAMP > typeRank) {
  7157. options = getCheckOptions(73, countryCode);
  7158. if (options[CO_NUMBER] > streetLen && isLimitOk(73) && address.isOkFor(73)) segment.report(73)
  7159. }
  7160. if (isDrivable)
  7161. if (RT_RAMP === roadType) {
  7162. options = getCheckOptions(112, countryCode);
  7163. if (options[CO_NUMBER] < streetLen && isLimitOk(112) && address.isOkFor(112)) segment.report(112)
  7164. } else {
  7165. options = getCheckOptions(52, countryCode);
  7166. if (options[CO_NUMBER] < streetLen && isLimitOk(52) && address.isOkFor(52)) segment.report(52)
  7167. }
  7168. }
  7169. if (isRoundabout && isDrivable) {
  7170. if (streetLen && isLimitOk(29) && address.isOkFor(29)) segment.report(29);
  7171. if (DIR_TWO === direction && address.isOkFor(48)) segment.report(48);
  7172. if (!nodeA.$isPartial && 2 < nodeA.$otherSegmentsLen)
  7173. if (2 < nodeA.$outConnectionsLen) {
  7174. if (address.isOkFor(87)) segment.report(87)
  7175. } else if (address.isOkFor(74))
  7176. segment.report(74);
  7177. if (slowChecks && !isPartial && (DIR_AB === direction || DIR_BA === direction)) {
  7178. var okA = false;
  7179. var okB = false;
  7180. var anode, bnode;
  7181. if (DIR_AB === direction)
  7182. anode = nodeA, bnode = nodeB;
  7183. else
  7184. anode = nodeB, bnode = nodeA;
  7185. for (var i = 0; i < bnode.$outConnectionsLen; i++) {
  7186. var otherSegment = bnode.$outConnections[i];
  7187. if (otherSegment.$isRoundabout) {
  7188. okB = true;
  7189. break
  7190. }
  7191. }
  7192. if (okB)
  7193. for (var i = 0; i < anode.$inConnectionsLen; i++) {
  7194. var otherSegment = anode.$inConnections[i];
  7195. if (otherSegment.$isRoundabout) {
  7196. okA = true;
  7197. break
  7198. }
  7199. }
  7200. if ((!okB || !okA) && address.isOkFor(50)) segment.report(50)
  7201. }
  7202. }
  7203. HLSegment(rawSegment)
  7204. }
  7205. if (bUpdateMaxSeverity && (RTStateIs(ST_STOP) || RTStateIs(ST_PAUSE))) async(F_SHOWREPORT, RF_UPDATEMAXSEVERITY);
  7206. updateSegmentProperties(selectedSegments, false);
  7207. addHLedSegments()
  7208. };
  7209. function F_LOGIN() {
  7210. log('login ' + WLM.user.userName);
  7211. _WV.parseAccessList = function(s) {
  7212. var a = s.split(/\s*,\s*/);
  7213. var res = [];
  7214. a.forEach(function(r, i) {
  7215. var n = false;
  7216. if ('!' === r.charAt(0)) n = true, r = r.slice(1);
  7217. res[i] = { $id: r, $not: n }
  7218. });
  7219. return res
  7220. };
  7221. _WV.checkAccessFor = function(forStr, cmpFunc) {
  7222. if (!forStr) return true;
  7223. var l = _WV.parseAccessList(forStr);
  7224. if (!l.length) return true;
  7225. for (var i = 0; i < l.length; i++) {
  7226. var r = l[i];
  7227. if ('*' === r.$id || cmpFunc(r.$id))
  7228. if (r.$not)
  7229. return false;
  7230. else
  7231. return true
  7232. }
  7233. return false
  7234. };
  7235. function mirrorChecks(defTranslation) {
  7236. var allLabels = _RT.$otherLabels.concat(_RT.$textLabels);
  7237. for (var i = CK_MIRRORFIRST; i <= CK_MIRRORLAST; i++)
  7238. allLabels.forEach(function(l) {
  7239. var label = i + '.' + l;
  7240. if (!(label in defTranslation)) return;
  7241. var value = defTranslation[label];
  7242. var mLabel = i + 100 + '.' + l;
  7243. switch (l) {
  7244. case 'title':
  7245. case 'problem':
  7246. case 'solution':
  7247. defTranslation[mLabel] = value.replace(/ A($|\b)/g, ' B');
  7248. break;
  7249. case 'params':
  7250. defTranslation[mLabel] = deepCopy(value);
  7251. break;
  7252. default:
  7253. defTranslation[mLabel] = value;
  7254. break
  7255. }
  7256. })
  7257. }
  7258. _RT = {
  7259. $textLabels: ['title', 'problem', 'solution'],
  7260. $otherLabels: ['enabled', 'color', 'severity', 'reportOnly', 'params', 'problemLink', 'solutionLink'],
  7261. $curMaxSeverity: RS_ERROR,
  7262. $RegExp1: '',
  7263. $RegExp2: '',
  7264. oReportWMECH: {FORID: '_cbHighlightLocked', CHECKED: false, NA: true},
  7265. oReportToolbox: {FORID: 'WMETB_NavBar', CHECKED: false, NA: true},
  7266. $isMapChanged: false,
  7267. $lng: I18n.locale.toUpperCase(),
  7268. $includeUpdatedByCache: {},
  7269. $includeUpdatedSinceTime: 0,
  7270. $includeCityNameCache: {},
  7271. $includeChecksCache: {},
  7272. $switchValidator: false,
  7273. $HLlayer: null,
  7274. $HLedObjects: {},
  7275. $isGlobalAccess: false,
  7276. $timer: {$secInRun: 0, $lastUpdate: 0},
  7277. $curMessage: {TEXT: '', TITLE: '', CLASS: CL_MSG},
  7278. $topCity: null,
  7279. $cachedTopCCode: '',
  7280. $topUser: {
  7281. $userID: WLM.user.id,
  7282. $userName: WLM.user.userName,
  7283. $userLevel: WLM.user.normalizedLevel,
  7284. $isCM: WLM.user.editableCountryIDs ? 0 !== WLM.user.editableCountryIDs.length : false,
  7285. $countryIDs: WLM.user.editableCountryIDs ? WLM.user.editableCountryIDs : []
  7286. },
  7287. $topCenter: null,
  7288. $WDmoveID: -1,
  7289. $WDloadID: -1,
  7290. $layersVisibility: '',
  7291. $state: ST_STOP,
  7292. $direction: DIR_L2R,
  7293. $firstStep: true,
  7294. $startExtent: null,
  7295. $startCenter: null,
  7296. $startZoom: null,
  7297. $nextCenter: null,
  7298. $moveEndCenter: null,
  7299. $seen: {},
  7300. $revalidate: {},
  7301. $curUserName: WLM.user.userName,
  7302. $error: false,
  7303. $reportEditableNotFound: false,
  7304. $checks: {},
  7305. $sortedCheckIDs: null,
  7306. $WMECHcolors: {},
  7307. $untranslatedLngs: ['IT']
  7308. };
  7309. _RT.$checks = {
  7310. 0: {
  7311. SEVERITY: RS_MAX,
  7312. REPORTONLY: false,
  7313. TITLE: 'Global access list to test before any of the checks below',
  7314. FORCOUNTRY: GA_FORCOUNTRY,
  7315. FORCITY: GA_FORCITY,
  7316. FORUSER: GA_FORUSER,
  7317. FORLEVEL: GA_FORLEVEL,
  7318. OPTIONS: {},
  7319. COLOR: '',
  7320. PROBLEM: '',
  7321. PROBLEMLINK: '',
  7322. PROBLEMLINKTEXT: '',
  7323. SOLUTION: '',
  7324. SOLUTIONLINK: '',
  7325. SOLUTIONLINKTEXT: ''
  7326. }
  7327. };
  7328. _I18n.init({$lng: _RT.$lng});
  7329. var defTranslation = _translations[_I18n.$defLng];
  7330. var defTBProblem = 'The segment is highlighted by WME Toolbox. It is not a problem';
  7331. var defTBProblemLink = 'W:Community_Plugins,_Extensions_and_Tools#WME_Toolbox';
  7332. var TBchecks = [
  7333. [
  7334. '#3030FF', 'W', , 'Roundabout which may cause issues', 'Junction IDs of the roundabout segments are not consecutive', '', 'Redo the roundabout',
  7335. 'W:Creating_and_Editing_a_roundabout#Improving_manually_drawn_roundabouts'
  7336. ],
  7337. [
  7338. '#FF30FF', , , 'Simple segment', 'The segment has unneeded geometry nodes', , 'Simplify segment geometry by hovering mouse pointer and pressing "d" key',
  7339. 'W:Creating_and_Editing_street_segments#Adjusting_road_geometry_.28nodes.29'
  7340. ],
  7341. ['#11F247', , true, 'Lvl 2 lock'], ['#71F211', , true, 'Lvl 3 lock'], ['#E2F211', , true, 'Lvl 4 lock'], ['#F29011', , true, 'Lvl 5 lock'], ['#F22011', , true, 'Lvl 6 lock'],
  7342. ['#00A8FF', , true, 'House numbers'], ['#F7B020', , true, 'Segment with time restrictions']
  7343. ];
  7344. for (var i = CK_TBFIRST; i <= CK_TBLAST; i++) {
  7345. var cc = TBchecks[i - CK_TBFIRST];
  7346. var cp = cc[4] || defTBProblem;
  7347. var cpl = cc[5];
  7348. if (!classCodeDefined(cpl)) cpl = defTBProblemLink;
  7349. defTranslation[i + '.enabled'] = true;
  7350. defTranslation[i + '.color'] = cc[0];
  7351. if (cc[1]) defTranslation[i + '.severity'] = cc[1];
  7352. if (cc[2]) defTranslation[i + '.reportOnly'] = cc[2];
  7353. defTranslation[i + '.title'] = 'WME Toolbox: ' + cc[3];
  7354. defTranslation[i + '.problem'] = cp;
  7355. if (cpl) defTranslation[i + '.problemLink'] = cpl;
  7356. if (cc[6]) defTranslation[i + '.solution'] = cc[6];
  7357. if (cc[7]) defTranslation[i + '.solutionLink'] = cc[7]
  7358. }
  7359. var defWMECHProblem = 'The segment is highlighted by WME Color Highlights. It is not a problem';
  7360. var defWMECHProblemLink = 'W:Community_Plugins,_Extensions_and_Tools#WME_Color_Highlights_.28WMECH.29';
  7361. var WMECHchecks = [
  7362. ['#000000', , true, 'Editor lock'], ['#0000FF', , true, 'Toll road / One way road'], ['#00FF00', , true, 'Recently edited'], ['#880000', , true, 'Road rank'], ['#888888', , true, 'No city'],
  7363. ['#990099', , true, 'Time restriction / Highlighted road type'], ['#FFBB00', , true, 'No name'], ['#FFFF00', , true, 'Filter by city'], ['#FFFF01', , true, 'Filter by city (alt. city)'],
  7364. ['#00FF00', , true, 'Filter by editor']
  7365. ];
  7366. for (var i = CK_WMECHFIRST; i <= CK_WMECHLAST; i++) {
  7367. var cc = WMECHchecks[i - CK_WMECHFIRST];
  7368. var cp = defWMECHProblem;
  7369. var cpl = defWMECHProblemLink;
  7370. defTranslation[i + '.enabled'] = true;
  7371. defTranslation[i + '.color'] = cc[0];
  7372. if (cc[1]) defTranslation[i + '.severity'] = cc[1];
  7373. if (cc[2]) defTranslation[i + '.reportOnly'] = cc[2];
  7374. defTranslation[i + '.title'] = 'WME Color Highlights: ' + cc[3];
  7375. defTranslation[i + '.problem'] = cp;
  7376. if (cpl) defTranslation[i + '.problemLink'] = cpl
  7377. }
  7378. var streetNames = ['Freeway', 'Major Highway', 'Minor Highway', 'Ramp', 'Primary Street', 'Street', 'Parking Lot Road', 'Railroad', 'Private Road'];
  7379. for (var i = CK_TYPEFIRST; i <= CK_TYPELAST; i++) {
  7380. var streetName = streetNames[i - CK_TYPEFIRST];
  7381. defTranslation[i + '.severity'] = 'W';
  7382. defTranslation[i + '.title'] = 'Must be a ' + streetName;
  7383. defTranslation[i + '.problem'] = 'This segment must be a ' + streetName;
  7384. defTranslation[i + '.solution'] = 'Set the road type to ' + streetName + ' or change the road name'
  7385. }
  7386. for (var i = CK_CUSTOMFIRST; i <= CK_CUSTOMLAST; i++) {
  7387. defTranslation[i + '.title'] = 'Custom check';
  7388. defTranslation[i + '.severity'] = 'W';
  7389. defTranslation[i + '.problem'] = 'The segment matched custom conditions';
  7390. defTranslation[i + '.solution'] = 'Solve the issue';
  7391. defTranslation[i + '.params'] = {
  7392. 'template.title': '{string} expandable template',
  7393. 'template': '${street}',
  7394. 'regexp.title': '{string} regular expression to match the template',
  7395. 'regexp': '!/.+/',
  7396. 'titleEN.title': '{string} check title in English',
  7397. 'titleEN': '',
  7398. 'problemEN.title': '{string} problem description in English',
  7399. 'problemEN': '',
  7400. 'solutionEN.title': '{string} solution instructions in English',
  7401. 'solutionEN': ''
  7402. }
  7403. }
  7404. var lockLevels = {150: 5, 151: 4, 152: 3, 153: 4, 154: 2, 155: 0, 156: 0, 157: 2, 158: 2};
  7405. for (var i = CK_LOCKFIRST; i <= CK_LOCKLAST; i++) {
  7406. var lockName = streetNames[i - CK_LOCKFIRST];
  7407. var lockLevel = lockLevels[i];
  7408. defTranslation[i + '.title'] = 'No lock on ' + lockName;
  7409. defTranslation[i + '.problem'] = 'The ' + lockName + ' segment should be locked at least to Lvl ${n}';
  7410. defTranslation[i + '.solution'] = 'Lock the segment';
  7411. defTranslation[i + '.params'] = { 'n.title': '{number} minimum lock level', 'n': lockLevel }
  7412. }
  7413. var streetRegExps = {160: '!/^[AS][0-9]{1,2}/', 161: '!/^[0-9]{1,2}/', 162: '!/^[0-9]{1,3}/', 163: '!/^[AS]?[0-9]* ?> /'};
  7414. var streetDefRegExp = '!/.?/';
  7415. for (var i = CK_STREETTNFIRST; i <= CK_STREETTNLAST; i++) {
  7416. var streetName = streetNames[i - CK_STREETTNFIRST];
  7417. var streetRegExp = streetRegExps[CK_STREETTNFIRST] || streetDefRegExp;
  7418. if (i < 165 || i > 167) defTranslation[i + '.severity'] = 'W';
  7419. defTranslation[i + '.title'] = 'Incorrect ' + streetName + ' name';
  7420. defTranslation[i + '.problem'] = 'The ' + streetName + ' segment has incorrect street name';
  7421. defTranslation[i + '.solution'] = 'Rename the segment in accordance with the guidelines';
  7422. defTranslation[i + '.params'] = { 'regexp.title': '{string} regular expression to match incorrect ' + streetName + ' name', 'regexp': streetRegExp }
  7423. }
  7424. mirrorChecks(defTranslation);
  7425. var listOfIntPacks = '';
  7426. for (var translationsKey in _translations) {
  7427. var translation = _translations[translationsKey];
  7428. mirrorChecks(translation);
  7429. _I18n.addTranslation(translation);
  7430. var country = translation['.country'];
  7431. if (!country) continue;
  7432. if (classCodeIs(country, CC_ARRAY)) country = country[0];
  7433. country = country.split(' ').join('&nbsp;');
  7434. if (listOfIntPacks) listOfIntPacks += ', ';
  7435. if ('.lng' in translation)
  7436. listOfIntPacks += '<b>' + country + '*';
  7437. else
  7438. listOfIntPacks += country;
  7439. if ('.author' in translation) listOfIntPacks += ' by&nbsp;' + translation['.author'];
  7440. if ('.lng' in translation) listOfIntPacks += '</b>';
  7441. if ('.updated' in translation) listOfIntPacks += ' (' + translation['.updated'] + ')'
  7442. }
  7443. listOfIntPacks += '.';
  7444. listOfIntPacks += '<br>* localization pack with translations';
  7445. var listOfPacks = '';
  7446. for (var gObject in window) {
  7447. if (!window.hasOwnProperty(gObject)) continue;
  7448. if (-1 !== gObject.indexOf('WME_Validator')) {
  7449. var translation = window[gObject];
  7450. log('found localization pack: ' + gObject.replace('WME_Validator_', ''));
  7451. mirrorChecks(translation);
  7452. _I18n.addTranslation(translation);
  7453. if ('.country' in translation) {
  7454. var country = translation['.country'];
  7455. if (classCodeIs(country, CC_ARRAY)) country = country[0];
  7456. listOfPacks += '<b>' + country;
  7457. if ('.author' in translation) listOfPacks += ' by&nbsp;' + translation['.author'];
  7458. listOfPacks += '</b>';
  7459. if (!('.lng' in translation)) listOfPacks += '<br>(does not include translations)';
  7460. if ('.updated' in translation) {
  7461. listOfPacks += '<br>Updated: ' + translation['.updated'];
  7462. if ('.link' in translation && translation['.link']) listOfPacks += ' <a target="_blank" href="' + translation['.link'] + '">check&nbsp;for&nbsp;updates</a>'
  7463. }
  7464. listOfPacks += '<br>'
  7465. }
  7466. }
  7467. }
  7468. listOfPacks = listOfPacks ? listOfPacks : 'No external localization packs found';
  7469. listOfPacks += '<br><b>See</b> <a target="_blank" href="' + PFX_FORUM + FORUM_LOCAL + '">' +
  7470. 'how to create a localization pack</a>';
  7471. for (var i = 1; i < MAX_CHECKS; i++) {
  7472. var check = {ENABLED: {}, PROBLEMLINK: {}, PROBLEMLINKTEXT: {}, SOLUTIONLINK: {}, SOLUTIONLINKTEXT: {}};
  7473. var label = i + '.title';
  7474. if (!_I18n.isLabelExist(label)) continue;
  7475. check.TITLE = trS(label);
  7476. label = i + '.color';
  7477. if (_I18n.isLabelExist(label)) {
  7478. var col = trS(label).toUpperCase();
  7479. check.COLOR = col;
  7480. if (CK_WMECHFIRST <= i && CK_WMECHLAST >= i) _RT.$WMECHcolors[col] = true
  7481. }
  7482. label = i + '.problem';
  7483. if (_I18n.isLabelExist(label)) check.PROBLEM = trS(label);
  7484. label = i + '.solution';
  7485. if (_I18n.isLabelExist(label)) check.SOLUTION = trS(label);
  7486. label = i + '.reportOnly';
  7487. if (_I18n.isLabelExist(label)) check.REPORTONLY = trS(label);
  7488. label = i + '.severity';
  7489. var s = 'N';
  7490. if (_I18n.isLabelExist(label)) s = trS(label);
  7491. if (s) switch (s.charAt(0)) {
  7492. case 'w':
  7493. case 'W':
  7494. check.SEVERITY = RS_WARNING;
  7495. break;
  7496. case 'e':
  7497. case 'E':
  7498. check.SEVERITY = RS_ERROR;
  7499. break;
  7500. case '1':
  7501. check.SEVERITY = RS_CUSTOM1;
  7502. break;
  7503. case '2':
  7504. check.SEVERITY = RS_CUSTOM2;
  7505. break;
  7506. default:
  7507. check.SEVERITY = RS_NOTE;
  7508. break
  7509. }
  7510. else
  7511. check.SEVERITY = RS_NOTE;
  7512. label = i + '.enabled';
  7513. var labelP = i + '.params';
  7514. var labelPL = i + '.problemLink';
  7515. var labelSL = i + '.solutionLink';
  7516. var defEnabled = false;
  7517. var arrCodes = [];
  7518. for (var ccode in _I18n.$translations) {
  7519. var translation = _I18n.$translations[ccode];
  7520. if (label in translation) {
  7521. var e = translation[label];
  7522. check.ENABLED[ccode] = e;
  7523. if (_I18n.$defLng === ccode) {
  7524. if (e) defEnabled = true
  7525. } else if (e)
  7526. arrCodes.push(ccode);
  7527. else
  7528. arrCodes.push('!' + ccode)
  7529. }
  7530. if (labelPL in translation) {
  7531. var l = translation[labelPL].replace('W:', PFX_WIKI).replace('P:', PFX_PEDIA).replace('F:', PFX_FORUM);
  7532. check.PROBLEMLINK[ccode] = encodeURI(l);
  7533. if (-1 !== l.indexOf(PFX_WIKI) || -1 !== l.indexOf(PFX_PEDIA))
  7534. check.PROBLEMLINKTEXT[ccode] = trS('report.link.wiki');
  7535. else if (-1 !== l.indexOf(PFX_FORUM))
  7536. check.PROBLEMLINKTEXT[ccode] = trS('report.link.forum');
  7537. else
  7538. check.PROBLEMLINKTEXT[ccode] = trS('report.link.other')
  7539. }
  7540. if (labelSL in translation) {
  7541. var l = translation[labelSL].replace('W:', PFX_WIKI).replace('P:', PFX_PEDIA).replace('F:', PFX_FORUM);
  7542. check.SOLUTIONLINK[ccode] = encodeURI(l);
  7543. if (-1 !== l.indexOf(PFX_WIKI || -1 !== l.indexOf(PFX_PEDIA)))
  7544. check.SOLUTIONLINKTEXT[ccode] = trS('report.link.wiki');
  7545. else if (-1 !== l.indexOf(PFX_FORUM))
  7546. check.SOLUTIONLINKTEXT[ccode] = trS('report.link.forum');
  7547. else
  7548. check.SOLUTIONLINKTEXT[ccode] = trS('report.link.other')
  7549. }
  7550. if (labelP in translation) {
  7551. var params = translation[labelP];
  7552. if (!check.OPTIONS) check.OPTIONS = {};
  7553. if (!(ccode in check.OPTIONS)) check.OPTIONS[ccode] = params;
  7554. if (params['template']) check.OPTIONS[ccode][CO_STRING] = params['template'];
  7555. if (params['regexp']) _WV.buildRegExp(i, check.OPTIONS[ccode], params['regexp']);
  7556. if (params['n']) check.OPTIONS[ccode][CO_NUMBER] = +params['n']
  7557. }
  7558. }
  7559. if (defEnabled) {
  7560. if (arrCodes.length) check.FORCOUNTRY = arrCodes.join(',') + ',*'
  7561. } else if (arrCodes.length)
  7562. check.FORCOUNTRY = arrCodes.join(',');
  7563. else
  7564. check.FORCOUNTRY = '!*';
  7565. _RT.$checks[i] = check
  7566. }
  7567. var dir = _I18n.getDir();
  7568. var dirLeft = trLeft(dir);
  7569. var dirRight = trRight(dir);
  7570. var cssRules, cssRules2, cssRulesA = '>a{text-decoration:underline;cursor:pointer;pointer-events:auto}';
  7571. _THUI.addElemetClassStyle('div', CL_TABS, '{border-bottom:2px solid #ddd;height:29px}');
  7572. _THUI.addElemetClassStyle('div', CL_TABS, '>input{display:none}');
  7573. _THUI.addElemetClassStyle(
  7574. 'div', CL_TABS,
  7575. '>label{white-space:nowrap;overflow:hidden;max-width:100px;text-overflow:ellipsis;cursor:pointer;display:inline-block;margin:0px;margin-' + dirRight +
  7576. ':3px;padding:4px 12px;border-radius:4px 4px 0 0;background-color:#dadbdc}');
  7577. _THUI.addElemetClassStyle(
  7578. 'div', CL_TABS,
  7579. '>input:checked+label{font-weight:normal;margin:-2px;min-height:31px;margin-' + dirRight + ':2px;cursor:default;border:2px solid #ddd;border-bottom-color:#fff;background-color:#fff}');
  7580. _THUI.addElemetClassStyle('div', CL_TABS, '>input:disabled+label{font-weight:bold !important;padding-' + dirLeft + ':0px;color:#333;cursor:default;background-color:transparent}');
  7581. _THUI.addElemetClassStyle('div', CL_TABS, '>input:enabled+label:hover{background-color:#fff}');
  7582. _THUI.addElemetClassStyle('div', CL_TABS, '>input:checked+label:hover{background-color:#fff}');
  7583. _THUI.addElemetClassStyle('div', CL_TABS, '>input:enabled+label>span>span.c' + CL_COLLAPSE + '{display:none}');
  7584. _THUI.addElemetClassStyle('div', CL_TABS, '>input:checked+label>span>span.c' + CL_COLLAPSE + '{display:inline}');
  7585. _THUI.addElemetClassStyle(
  7586. 'div', CL_PANEL,
  7587. '{background-color:#fff;padding:4px;margin:0;margin-bottom:4px;border-bottom:2px solid #ddd;white-space:nowrap;overflow-x:hidden;overflow-y:auto;text-overflow:ellipsis;width:100%;height:' +
  7588. SZ_PANEL_HEIGHT + 'px}');
  7589. _THUI.addElemetClassStyle('div', CL_PANEL, '>span' + cssRulesA);
  7590. _THUI.addElemetClassStyle('div', CL_PANEL, '>label>span' + cssRulesA);
  7591. _THUI.addElemetClassStyle('div', CL_PANEL, '>span>p' + cssRulesA);
  7592. cssRules = '>span{border-radius:5px;background-color:';
  7593. _THUI.addElemetClassStyle('label', 'c1', cssRules + GL_CUSTOM1COLOR + ';color:' + GL_CUSTOM1BGCOLOR + '}');
  7594. _THUI.addElemetClassStyle('label', 'c2', cssRules + GL_CUSTOM2COLOR + ';color:' + GL_CUSTOM2BGCOLOR + '}');
  7595. cssRules = '>span>a{color:white}';
  7596. _THUI.addElemetClassStyle('label', 'c1', cssRules);
  7597. _THUI.addElemetClassStyle('label', 'c2', cssRules);
  7598. _THUI.addElemetClassStyle('div', CL_BUTTONS, '{overflow:hidden;margin-bottom:1em}');
  7599. _THUI.addElemetClassStyle('div', CL_BUTTONS, '>button{font-weight:normal;padding:4px 12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}');
  7600. _THUI.addElemetClassStyle('div', CL_BUTTONS, '>button>i{pointer-events:none}');
  7601. _THUI.addElemetClassStyle('div', CL_BUTTONS, '>button:disabled{background-color:#eee;border-bottom:0px;cursor:default;pointer-events:auto}');
  7602. _THUI.addElemetClassStyle('div', CL_PANEL, '>label.checkbox{display:block;height:24px;font-weight:normal;margin:0}');
  7603. _THUI.addElemetClassStyle('div', CL_PANEL, '>label.checkbox>span{display:inline-block;height:20px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}');
  7604. _THUI.addElemetClassStyle('div', CL_PANEL, '>label.date{display:block;height:32px;font-weight:normal;margin:0;padding-' + dirRight + ':155px}');
  7605. _THUI.addElemetClassStyle('div', CL_PANEL, '>label.date>span{display:inline-block;line-height:28px;vertical-align:middle;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}');
  7606. _THUI.addElemetClassStyle(
  7607. 'div', CL_PANEL,
  7608. '>label.date>input[type=date]{box-sizing:border-box;height:28px;padding:2px 10px;padding-' + dirRight + ':2px;float:' + dirRight + ';margin-' + dirRight + ':-155px;width:150px}');
  7609. _THUI.addElemetClassStyle('div', CL_PANEL, '>label.text{display:block;height:30px;font-weight:normal;margin:0;padding-' + dirRight + ':155px}');
  7610. _THUI.addElemetClassStyle('div', CL_PANEL, '>label.text>span{display:inline-block;line-height:28px;vertical-align:middle;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}');
  7611. _THUI.addElemetClassStyle('div', CL_PANEL, '>label.text>input[type=text]{box-sizing:border-box;height:28px;padding:2px 10px;float:' + dirRight + ';margin-' + dirRight + ':-155px;width:150px}');
  7612. cssRules = '{position:relative;height:2em;width:100%;margin-bottom:';
  7613. cssRules2 = '>span{position:absolute;' + dirLeft + ':0;bottom:0;display:inline-block;padding:4px 12px;margin:0px;border-radius:8px;border-bottom-' + dirLeft +
  7614. '-radius:0;box-shadow:3px 3px 3px #aaa;border:1px solid ';
  7615. _THUI.addElemetClassStyle('div', CL_TRANSLATETIP, cssRules + '12px}');
  7616. _THUI.addElemetClassStyle('div', CL_TRANSLATETIP, cssRules2 + '#aea;background-color:#cfc;' + dirLeft + ':auto;' + dirRight + ':0;border-radius:8px;border-bottom-' + dirRight + '-radius:0}');
  7617. _THUI.addElemetClassStyle('div', CL_TRANSLATETIP, '>span' + cssRulesA);
  7618. _THUI.addElemetClassStyle('div', CL_MSG, cssRules + '1em}');
  7619. _THUI.addElemetClassStyle('div', CL_MSG, cssRules2 + '#ded;background-color:#efe}');
  7620. _THUI.addElemetClassStyle('div', CL_MSGY, cssRules + '1em}');
  7621. _THUI.addElemetClassStyle('div', CL_MSGY, cssRules2 + '#ee9;background-color:#ffa}');
  7622. _THUI.addElemetIdStyle('div', ID_PROPERTY, '{padding-bottom:5px}');
  7623. _THUI.addElemetIdStyle('div', ID_PROPERTY, '>b' + cssRulesA);
  7624. cssRules = '{color:' + GL_NOTECOLOR + '}';
  7625. _THUI.addElemetClassStyle('div', CL_NOTE, cssRules);
  7626. _THUI.addElemetClassStyle('a', CL_NOTE, cssRules);
  7627. cssRules = '{color:' + GL_WARNINGCOLOR + '}';
  7628. _THUI.addElemetClassStyle('div', CL_WARNING, cssRules);
  7629. _THUI.addElemetClassStyle('a', CL_WARNING, cssRules);
  7630. cssRules = '{color:' + GL_ERRORCOLOR + '}';
  7631. _THUI.addElemetClassStyle('div', CL_ERROR, cssRules);
  7632. _THUI.addElemetClassStyle('a', CL_ERROR, cssRules);
  7633. cssRules = '{color:' + GL_CUSTOM1COLOR + '}';
  7634. _THUI.addElemetClassStyle('div', CL_CUSTOM1, cssRules);
  7635. _THUI.addElemetClassStyle('a', CL_CUSTOM1, cssRules);
  7636. cssRules = '{color:' + GL_CUSTOM2COLOR + '}';
  7637. _THUI.addElemetClassStyle('div', CL_CUSTOM2, cssRules);
  7638. _THUI.addElemetClassStyle('a', CL_CUSTOM2, cssRules);
  7639. _THUI.addElemetClassStyle('div', CL_RIGHTTIP, '{white-space:nowrap;position:relative;cursor:help}');
  7640. _THUI.addElemetClassStyle('div', CL_RIGHTTIP, '>span{display:inline-block;overflow:hidden;text-overflow:ellipsis;width:279px}');
  7641. _THUI.addElemetClassStyle('div', CL_RIGHTTIP, '>span' + cssRulesA);
  7642. cssRules = ';z-index:1000000;position:absolute;visibility:hidden;opacity:0;transition:0.1s ease;' + dirLeft + ':30px;top:-1.7em;cursor:default}';
  7643. _THUI.addElemetClassStyle(
  7644. 'div', CL_RIGHTTIP, ':before{content:"";position:absolute;border:1em solid transparent;border-' + dirRight + '-color:#ddd;margin-' + dirLeft + ':-2em;margin-top:1.5em' + cssRules);
  7645. _THUI.addElemetClassStyle(
  7646. 'div', CL_RIGHTTIPPOPUP, '{white-space:normal;background-color:#fafafa;padding:1em;width:230px;box-shadow:3px 3px 3px #aaa;border-radius:1em;border:1px solid #ddd' + cssRules);
  7647. _THUI.addElemetClassStyle('div', CL_RIGHTTIPDESCR, '{margin-' + dirLeft + ':2em}');
  7648. _THUI.addElemetClassStyle('div', CL_RIGHTTIPDESCR, cssRulesA);
  7649. _THUI.addElemetClassStyle('div', CL_RIGHTTIPDESCR, '>p{color:black;margin-top:0.5em;margin-bottom:0.5em !important}');
  7650. _THUI.addElemetClassStyle('div', CL_RIGHTTIPDESCR, '>p' + cssRulesA);
  7651. cssRules = '{visibility:visible;opacity:1}';
  7652. _THUI.addElemetClassStyle('div', CL_RIGHTTIP, ':hover:before' + cssRules);
  7653. _THUI.addElemetClassStyle('div', CL_RIGHTTIP, ':hover>div' + cssRules);
  7654. _UI = {
  7655. _DISABLED: undefined,
  7656. _NODISPLAY: undefined,
  7657. MAXLENGTH: undefined,
  7658. REVERSE: undefined,
  7659. WARNING: undefined,
  7660. TYPE: undefined,
  7661. FORUSER: undefined,
  7662. FORCITY: undefined,
  7663. FORCOUNTRY: undefined,
  7664. FORLEVEL: undefined,
  7665. ACCESSKEY: undefined,
  7666. STYLEI: '',
  7667. DISCLOSE: 0,
  7668. _NAME: '',
  7669. READONLY: 0,
  7670. _STYLE: '',
  7671. ONWARNING: null,
  7672. ONCHANGE: null,
  7673. _ONCHANGE: undefined,
  7674. ONCLICKO: undefined,
  7675. MIN: undefined,
  7676. MAX: undefined,
  7677. STEP: undefined,
  7678. CLASS: CL_UI,
  7679. _TYPE: _THUI.DIV,
  7680. _ONWARNING: onWarning,
  7681. pTips: {},
  7682. pTranslateBanner: {
  7683. CLASS: CL_TRANSLATETIP,
  7684. TEXT: 'Please help to ' +
  7685. '<a target="_blank" href="' + PFX_FORUM + FORUM_LOCAL + '">' +
  7686. 'translate Validator!</a>',
  7687. TITLE: trS('about.tip')
  7688. },
  7689. pNoAccess: {CLASS: CL_PANEL, NODISPLAY: 1, STYLE: 'text-align:center', TEXT: trS('noaccess.text'), TITLE: trS('noaccess.tip')},
  7690. pMain: {
  7691. pTabs: {
  7692. CLASS: CL_TABS,
  7693. _DISCLOSE: 1,
  7694. _TYPE: _THUI.RADIO,
  7695. _ONCLICK: onUpdateUI,
  7696. tMain: {TEXT: '', TITLE: '', DISABLED: 1, STYLEO: 'cursor:pointer;max-width:97px', ONCLICKO: onUpdateUI},
  7697. tFilter: {
  7698. TEXT: '<i class="fa fa-filter" aria-hidden="true"></i>' +
  7699. '<span class=\'c' + CL_COLLAPSE + '\'> ' + trS('tab.filter.text') + '</span>',
  7700. TITLE: trS('tab.filter.tip'),
  7701. CHECKED: 1
  7702. },
  7703. tSearch: {
  7704. TEXT: '<i class="fa fa-search" aria-hidden="true"></i>' +
  7705. '<span class=\'c' + CL_COLLAPSE + '\'> ' + trS('tab.search.text') + '</span>',
  7706. TITLE: trS('tab.search.tip')
  7707. },
  7708. tHelp: {
  7709. TEXT: '<i class="fa fa-question-circle" aria-hidden="true"></i>' +
  7710. '<span class=\'c' + CL_COLLAPSE + '\'> ' + trS('tab.help.text') + '</span>',
  7711. TITLE: trS('tab.help.tip'),
  7712. STYLEO: 'float:' + dirRight
  7713. }
  7714. },
  7715. pFilter: {
  7716. CLASS: CL_PANEL,
  7717. _CLASS: 'checkbox',
  7718. _TYPE: _THUI.CHECKBOX,
  7719. _REVERSE: 1,
  7720. _ONCHANGE: onUpdateUI,
  7721. oExcludeNonEditables: {TEXT: trS('filter.noneditables.text'), TITLE: trS('filter.noneditables.tip'), AUTOSAVE: AS_NONEDITABLES},
  7722. oExcludeDuplicates: {TEXT: trS('filter.duplicates.text'), TITLE: trS('filter.duplicates.tip'), AUTOSAVE: AS_DUPLICATES},
  7723. oExcludeStreets: {TEXT: trS('filter.streets.text'), TITLE: trS('filter.streets.tip'), AUTOSAVE: AS_STREETS},
  7724. oExcludeOther: {TEXT: trS('filter.other.text'), TITLE: trS('filter.other.tip'), AUTOSAVE: AS_OTHERS},
  7725. oExcludeNotes: {TEXT: trS('filter.notes.text'), TITLE: trS('filter.notes.tip'), AUTOSAVE: AS_NOTES}
  7726. },
  7727. pSearch: {
  7728. CLASS: CL_PANEL,
  7729. NODISPLAY: 1,
  7730. _REVERSE: 1,
  7731. _ONCHANGE: onUpdateUI,
  7732. oIncludeYourEdits: {NODISPLAY: 1, TYPE: _THUI.CHECKBOX, TEXT: trS('search.youredits.text'), TITLE: trS('search.youredits.tip'), CLASS: 'checkbox', AUTOSAVE: AS_YOUREDITS},
  7733. oIncludeUpdatedBy: {
  7734. TYPE: _THUI.TEXT,
  7735. TEXT: trS('search.updatedby.text'),
  7736. TITLE: trS('search.updatedby.tip'),
  7737. PLACEHOLDER: trS('search.updatedby.example'),
  7738. CLASS: 'form-label text',
  7739. CLASSI: 'form-control',
  7740. AUTOSAVE: AS_UPDATEDBY
  7741. },
  7742. oIncludeUpdatedSince: {
  7743. TYPE: _THUI.DATE,
  7744. TEXT: trS('search.updatedsince.text'),
  7745. TITLE: trS('search.updatedsince.tip'),
  7746. PLACEHOLDER: trS('search.updatedsince.example'),
  7747. CLASS: 'form-label date',
  7748. CLASSI: 'form-control',
  7749. AUTOSAVE: AS_UPDATEDSINCE
  7750. },
  7751. oIncludeCityName: {
  7752. TYPE: _THUI.TEXT,
  7753. TEXT: trS('search.city.text'),
  7754. TITLE: trS('search.city.tip'),
  7755. PLACEHOLDER: trS('search.city.example'),
  7756. CLASS: 'form-label text',
  7757. CLASSI: 'form-control',
  7758. AUTOSAVE: AS_CITYNAME
  7759. },
  7760. oIncludeChecks: {
  7761. TYPE: _THUI.TEXT,
  7762. TEXT: trS('search.checks.text'),
  7763. TITLE: trS('search.checks.tip'),
  7764. PLACEHOLDER: trS('search.checks.example'),
  7765. CLASS: 'form-label text',
  7766. CLASSI: 'form-control',
  7767. AUTOSAVE: AS_CHECKS
  7768. }
  7769. },
  7770. pHelp: {CLASS: CL_PANEL, NODISPLAY: 1, TEXT: trS('help.text'), TITLE: trS('help.tip')},
  7771. pButtons: {
  7772. CLASS: CL_BUTTONS,
  7773. _CLASS: 'btn btn-default',
  7774. _TYPE: _THUI.BUTTON,
  7775. _ONCLICK: onUpdateUI,
  7776. bScan: {TEXT: '', TITLE: '', STYLE: 'float:' + dirLeft + ';width:38px;font-family:FontAwesome'},
  7777. bPause: {NODISPLAY: 1, TEXT: '', TITLE: trS('button.pause.tip'), STYLE: 'float:' + dirLeft + ';width:38px;font-family:FontAwesome'},
  7778. bContinue: {TEXT: '', TITLE: trS('button.continue.tip'), NODISPLAY: 1, STYLE: 'float:' + dirLeft + ';width:38px;font-family:FontAwesome'},
  7779. bStop: {TEXT: '', TITLE: trS('button.stop.tip'), STYLE: 'float:' + dirLeft + ';width:38px;font-family:FontAwesome;margin-' + dirRight + ':10px'},
  7780. bClear: {TEXT: '✘', TITLE: '', NODISPLAY: 1, DISABLED: 1, STYLE: 'float:' + dirLeft + ';width:38px;margin-' + dirRight + ':10px'},
  7781. bReport: {TEXT: trS('button.report.text'), TITLE: trS('button.report.tip'), STYLE: 'float:' + dirLeft + ';max-width:110px', ONCLICK: onShowReport},
  7782. bReportBB: {TEXT: '', TITLE: trS('button.BBreport.tip'), ONCLICK: onShareReport, STYLE: 'float:' + dirLeft + ';width:38px;font-family:FontAwesome'},
  7783. bSettings: {TEXT: '', TITLE: trS('button.settings.tip'), STYLE: 'float:' + dirRight + ';width:38px;font-family:FontAwesome'}
  7784. }
  7785. },
  7786. pSettings: {
  7787. NODISPLAY: 1,
  7788. pTabs: {
  7789. CLASS: CL_TABS,
  7790. _DISCLOSE: 1,
  7791. _TYPE: _THUI.RADIO,
  7792. _ONCLICK: onUpdateUI,
  7793. tMain: {TEXT: trS('tab.settings.text') + ':', TITLE: 'WME Validator Version ' + WV_VERSION, STYLEO: 'max-width:85px', DISABLED: 1},
  7794. tCustom: {
  7795. TEXT: '<i class="fa fa-user" aria-hidden="true"></i>' +
  7796. '<span class=\'c' + CL_COLLAPSE + '\'> ' + trS('tab.custom.text') + '</span>',
  7797. STYLEO: 'max-width:110px',
  7798. TITLE: trS('tab.custom.tip'),
  7799. CHECKED: 1
  7800. },
  7801. tScanner: {
  7802. TEXT: '<i class="fa fa-wrench" aria-hidden="true"></i>' +
  7803. '<span class=\'c' + CL_COLLAPSE + '\'> ' + trS('tab.scanner.text') + '</span>',
  7804. TITLE: trS('tab.scanner.tip'),
  7805. STYLEO: 'max-width:110px'
  7806. },
  7807. tAbout: {
  7808. TEXT: '<i class="fa fa-question-circle" aria-hidden="true"></i>' +
  7809. '<span class=\'c' + CL_COLLAPSE + '\'> ' + trS('tab.about.text') + '</span>',
  7810. TITLE: trS('tab.about.tip'),
  7811. STYLEO: 'float:' + dirRight + ';max-width:110px'
  7812. }
  7813. },
  7814. pCustom: {
  7815. CLASS: CL_PANEL,
  7816. _CLASS: 'form-label text',
  7817. _REVERSE: 1,
  7818. _ONCHANGE: onUpdateUI,
  7819. oTemplate1: {
  7820. TYPE: _THUI.TEXT,
  7821. TEXT: '&nbsp;' + trS('custom.template.text'),
  7822. TITLE: trS('custom.template.tip'),
  7823. PLACEHOLDER: trS('custom.template.example'),
  7824. CLASS: 'form-label text c1',
  7825. CLASSI: 'form-control',
  7826. AUTOSAVE: AS_CUSTOM1TEMPLATE
  7827. },
  7828. oRegExp1: {
  7829. TYPE: _THUI.TEXT,
  7830. TEXT: '&nbsp;' + trS('custom.regexp.text'),
  7831. TITLE: trS('custom.regexp.tip'),
  7832. PLACEHOLDER: trS('custom.regexp.example'),
  7833. CLASSI: 'form-control',
  7834. AUTOSAVE: AS_CUSTOM1REGEXP
  7835. },
  7836. oTemplate2: {
  7837. TYPE: _THUI.TEXT,
  7838. TEXT: '&nbsp;' + trS('custom.template.text'),
  7839. TITLE: trS('custom.template.tip'),
  7840. PLACEHOLDER: trS('custom.template.example'),
  7841. CLASS: 'form-label text c2',
  7842. CLASSI: 'form-control',
  7843. AUTOSAVE: AS_CUSTOM2TEMPLATE
  7844. },
  7845. oRegExp2: {
  7846. TYPE: _THUI.TEXT,
  7847. TEXT: '&nbsp;' + trS('custom.regexp.text'),
  7848. TITLE: trS('custom.regexp.tip'),
  7849. PLACEHOLDER: trS('custom.regexp.example'),
  7850. CLASSI: 'form-control',
  7851. AUTOSAVE: AS_CUSTOM2REGEXP
  7852. }
  7853. },
  7854. pScanner: {
  7855. NODISPLAY: 1,
  7856. CLASS: CL_PANEL,
  7857. _CLASS: 'checkbox',
  7858. _TYPE: _THUI.CHECKBOX,
  7859. _REVERSE: 1,
  7860. _ONCHANGE: onUpdateUI,
  7861. oSlowChecks: {TEXT: trS('scanner.slow.text'), TITLE: trS('scanner.slow.tip'), AUTOSAVE: AS_SLOWCHECKS},
  7862. oReportExt: {TEXT: trS('scanner.ext.text'), TITLE: trS('scanner.ext.tip'), AUTOSAVE: AS_REPORTEXT},
  7863. oHLReported: {TEXT: trS('scanner.highlight.text'), TITLE: trS('scanner.highlight.tip'), AUTOSAVE: AS_HLISSUES},
  7864. oSounds: {TEXT: trS('scanner.sounds.text'), TITLE: trS('scanner.sounds.tip'), NATITLE: trS('scanner.sounds.NA'), AUTOSAVE: AS_SOUNDS}
  7865. },
  7866. pAbout: {
  7867. CLASS: CL_PANEL,
  7868. NODISPLAY: 1,
  7869. TEXT: '<p><b>WME Validator</b>' +
  7870. '<br>Version ' + WV_VERSION + ' <a target="_blank" href="' + PFX_FORUM + FORUM_HOME + '">check for updates</a>' +
  7871. '<br>&copy; 2013-2018 Andriy Berestovskyy</p>' +
  7872. '<p><b>Built-in localization packs for:</b><br>' + listOfIntPacks + '<p><b>External localization packs for:</b><br>' + listOfPacks + '</p>' +
  7873. '<p><b>Special thanks to:</b><br>OyyoDams, Timbones, paulkok_my, petervdveen, MdSyah, sketch, AlanOfTheBerg, arbaot, Zniwek, orbitc, robindlc, fernandoanguita, BellHouse, vidalnit, Manzareck, gad_m, Zirland and <b>YOU!</b></p>',
  7874. TITLE: trS('about.tip'),
  7875. STYLE: 'direction:ltr;text-align:center;white-space:normal'
  7876. },
  7877. pButtons: {
  7878. CLASS: CL_BUTTONS,
  7879. _CLASS: 'btn btn-default',
  7880. _TYPE: _THUI.BUTTON,
  7881. _ONCLICK: onUpdateUI,
  7882. bReset: {TEXT: '<i class="fa fa-undo" aria-hidden="true"></i> ' + trS('button.reset.text'), TITLE: trS('button.reset.tip'), STYLE: 'float:' + dirLeft + ';max-width:165px'},
  7883. bList: {
  7884. NODISPLAY: 1,
  7885. TEXT: '<i class="fa fa-list" aria-hidden="true"></i> ' + trS('button.list.text'),
  7886. TITLE: trS('button.list.tip'),
  7887. STYLE: 'float:' + dirLeft + ';max-width:165px',
  7888. ONCLICK: onShowChecks
  7889. },
  7890. bWizard: {
  7891. NODISPLAY: 1,
  7892. TEXT: '<i class="fa fa-magic" aria-hidden="true"></i>',
  7893. TITLE: trS('button.wizard.tip'),
  7894. STYLE: 'float:' + dirLeft + ';margin-' + dirLeft + ':6px;width:38px',
  7895. ONCLICK: onCreatePack
  7896. },
  7897. bBack: {TEXT: '<i class="fa fa-angle-double-' + dirLeft + '" aria-hidden="true"></i> ' + trS('button.back.text'), TITLE: trS('button.back.tip'), STYLE: 'float:' + dirRight + ';max-width:70px'}
  7898. }
  7899. }
  7900. };
  7901. clearReport();
  7902. if (_RT.$topUser.$isCM) {
  7903. _UI.pMain.pSearch.oIncludeYourEdits.NODISPLAY = 1;
  7904. _UI.pMain.pSearch.oIncludeUpdatedBy.NODISPLAY = 0
  7905. } else {
  7906. _UI.pMain.pSearch.oIncludeYourEdits.NODISPLAY = 0;
  7907. _UI.pMain.pSearch.oIncludeUpdatedBy.NODISPLAY = 1
  7908. }
  7909. if (-1 !== _RT.$untranslatedLngs.indexOf(_RT.$lng.split('-')[0]))
  7910. _UI.pTranslateBanner.NODISPLAY = 0;
  7911. else
  7912. _UI.pTranslateBanner.NODISPLAY = 1;
  7913. if (!classCodeDefined(UW.AudioContext) && !classCodeDefined(UW.webkitAudioContext)) {
  7914. _UI.pSettings.pScanner.oSounds.CHECKED = false;
  7915. _UI.pSettings.pScanner.oSounds.NA = true
  7916. }
  7917. resetDefaults();
  7918. var storageObj = null;
  7919. var s = null;
  7920. try {
  7921. s = window.localStorage.getItem(AS_NAME);
  7922. storageObj = s ? JSON.parse(s) : null;
  7923. if (!(AS_PASSWORD in storageObj)) storageObj = null
  7924. } catch (e) {
  7925. }
  7926. if (!storageObj || WV_LICENSE_VERSION !== storageObj[AS_LICENSE])
  7927. if (!confirm(WV_LICENSE)) {
  7928. _UI = {};
  7929. WLM.events.un({'afterloginchanged': onLogin, 'login': onLogin});
  7930. return
  7931. }
  7932. var showWhatsNew = false;
  7933. if (s && !storageObj) {
  7934. warning('\nDue to the major changes in Validator, all filter options\nand settings have been RESET to their DEFAULTS.');
  7935. showWhatsNew = true
  7936. }
  7937. if (storageObj && WV_VERSION !== storageObj[AS_VERSION]) showWhatsNew = true;
  7938. if (showWhatsNew) info(WV_WHATSNEW);
  7939. _THUI.loadValues(_UI, storageObj);
  7940. var styleMap = new OpenLayers.StyleMap({strokeWidth: HL_WIDTH});
  7941. var lookup = {};
  7942. lookup[RS_NOTE] = {strokeColor: GL_NOTECOLOR, graphicZIndex: 10};
  7943. lookup[RS_WARNING] = {strokeColor: GL_WARNINGCOLOR, graphicZIndex: 20};
  7944. lookup[RS_ERROR] = {strokeColor: GL_ERRORCOLOR, graphicZIndex: 30};
  7945. lookup[RS_CUSTOM2] = {strokeColor: GL_CUSTOM2COLOR, graphicZIndex: 40};
  7946. lookup[RS_CUSTOM1] = {strokeColor: GL_CUSTOM1COLOR, graphicZIndex: 50};
  7947. styleMap.addUniqueValueRules('default', 0, lookup);
  7948. _RT.$HLlayer = new OpenLayers.Layer.Vector(GL_LAYERNAME, {
  7949. uniqueName: GL_LAYERUNAME,
  7950. shortcutKey: GL_LAYERSHORTCUT,
  7951. accelerator: GL_LAYERACCEL,
  7952. units: 'm',
  7953. styleMap: styleMap,
  7954. projection: new OpenLayers.Projection('EPSG:4326'),
  7955. visibility: _UI.pSettings.pScanner.oHLReported.CHECKED
  7956. });
  7957. I18n.translations[I18n.currentLocale()].layers.name[GL_LAYERUNAME] = GL_LAYERNAME;
  7958. _RT.$HLlayer.setOpacity(HL_OPACITY);
  7959. WM.addLayer(_RT.$HLlayer);
  7960. _RT.$HLlayer.setVisibility(_UI.pSettings.pScanner.oHLReported.CHECKED);
  7961. WM.raiseLayer(_RT.$HLlayer, 99);
  7962. $('#sidepanel-' + ID_PREFIX + '').remove();
  7963. $('#tab-' + ID_PREFIX + '').remove();
  7964. $('#user-tabs ul')
  7965. .append(
  7966. '<li id="tab-' + ID_PREFIX + '">' +
  7967. '<a data-toggle="tab" href="#sidepanel-' + ID_PREFIX + '">' +
  7968. '<span class="fa fa-check-square-o"></span>' +
  7969. ' Validator' +
  7970. '</a></li>');
  7971. $('#user-tabs+div.tab-content').append('<div class="tab-pane" id="sidepanel-' + ID_PREFIX + '"></div>');
  7972. _THUI.appendUI(document.getElementById('sidepanel-' + ID_PREFIX), _UI, 'i' + ID_PREFIX);
  7973. async(F_UPDATEUI);
  7974. async(ForceHLAllSegments, null, 700);
  7975. WMo.events.on({'mergeend': onMergeEnd});
  7976. WM.events.on({'moveend': onMoveEnd, 'zoomend': HLAllSegments, 'changelayer': onChangeLayer});
  7977. WSM.events.on({'selectionchanged': ForceHLAllSegments});
  7978. WC.events.on({'loadstart': onLoadStart});
  7979. WMo.segments.on({'objectsadded': onSegmentsAdded, 'objectschanged': onSegmentsChanged, 'objectsremoved': onSegmentsRemoved});
  7980. WMo.nodes.on({'objectschanged': onNodesChanged, 'objectsremoved': onNodesRemoved});
  7981. W.prefs.on({'change:isImperial': onChangeIsImperial})
  7982. };
  7983. function F_ONSEGMENTSCHANGED(e) {
  7984. var changedNodes = [];
  7985. for (var i = 0; i < e.length; i++) {
  7986. var nodeIDs = [e[i].attributes.fromNodeID, e[i].attributes.toNodeID];
  7987. for (var j = 0; j < nodeIDs.length; j++) {
  7988. var nodeID = nodeIDs[j];
  7989. if (!nodeID) continue;
  7990. var node = WMo.nodes.getObjectById(nodeID);
  7991. if (node) changedNodes.push(node)
  7992. }
  7993. }
  7994. if (changedNodes.length) sync(F_ONNODESCHANGED, changedNodes)
  7995. }
  7996. function F_ONNODESCHANGED(e) {
  7997. var reHL = false;
  7998. for (var i = 0; i < e.length; i++) {
  7999. var ids = e[i].attributes.segIDs;
  8000. for (var j = 0; j < ids.length; j++) _RT.$revalidate[ids[j]] = true, reHL = true
  8001. }
  8002. if (reHL) HLAllSegments()
  8003. }
  8004. function F_ONCHANGELAYER(e) {
  8005. if (!e.hasOwnProperty('layer')) return;
  8006. if (-1 !== e.layer.id.indexOf(GL_TBPREFIX)) {
  8007. if (!e.layer.visibility)
  8008. for (var segmentID in WMo.segments.objects) {
  8009. if (!WMo.segments.objects.hasOwnProperty(segmentID)) continue;
  8010. delete WMo.segments.objects[segmentID][GL_TBCOLOR]
  8011. }
  8012. ForceHLAllSegments()
  8013. } else if (GL_LAYERUNAME === e.layer.uniqueName && e.layer.visibility !== _UI.pSettings.pScanner.oHLReported.CHECKED) {
  8014. _RT.$switchValidator = true;
  8015. async(F_UPDATEUI)
  8016. }
  8017. }
  8018. function F_ONMOVEEND() {
  8019. var c = WM.getCenter();
  8020. if (-1 === _RT.$WDmoveID && -1 === _RT.$WDloadID && c.equals(_RT.$nextCenter))
  8021. _RT.$WDmoveID = window.setTimeout(onMergeEnd, WD_SHORT);
  8022. else if (RTStateIs(ST_RUN) && !_RT.$firstStep && !c.equals(_RT.$nextCenter) && !c.equals(_RT.$startCenter)) {
  8023. _RT.$curMessage = {TEXT: trS('msg.autopaused.text'), TITLE: trS('msg.autopaused.tip')};
  8024. async(F_PAUSE)
  8025. }
  8026. _RT.$moveEndCenter = c
  8027. }
  8028. function F_ONLOADSTART() {
  8029. var c = WM.getCenter();
  8030. window.clearTimeout(_RT.$WDmoveID);
  8031. if (-1 === _RT.$WDloadID && c.equals(_RT.$nextCenter)) _RT.$WDloadID = window.setTimeout(onMergeEnd, WD_LONG);
  8032. _RT.$WDmoveID = -1
  8033. }
  8034. function F_LAYERSOFF() {
  8035. _RT.$HLlayer.destroyFeatures();
  8036. if (_RT.$layersVisibility || GL_SHOWLAYERS) return;
  8037. WM.layers.forEach(function(el) {
  8038. if (el.displayInLayerSwitcher && GL_LAYERUNAME !== el.uniqueName) {
  8039. if (el.getVisibility())
  8040. _RT.$layersVisibility += 'T';
  8041. else
  8042. _RT.$layersVisibility += 'F';
  8043. el.setVisibility(false)
  8044. }
  8045. })
  8046. }
  8047. function F_LAYERSON() {
  8048. if (!_RT.$layersVisibility || GL_SHOWLAYERS) return;
  8049. var j = 0;
  8050. WM.layers.forEach(function(el) {
  8051. if (el.displayInLayerSwitcher && GL_LAYERUNAME !== el.uniqueName)
  8052. if (_RT.$layersVisibility.length > j) {
  8053. el.setVisibility('T' === _RT.$layersVisibility.charAt(j));
  8054. j++
  8055. }
  8056. });
  8057. _RT.$layersVisibility = ''
  8058. }
  8059. function F_PAUSE() {
  8060. if (!RTStateIs(ST_RUN)) return;
  8061. beep(50, 'square');
  8062. sync(F_SHOWREPORT, RF_UPDATEMAXSEVERITY);
  8063. setRTState(ST_PAUSE);
  8064. async(F_LAYERSON)
  8065. }
  8066. function F_STOP() {
  8067. if (!RTStateIs(ST_STOP)) {
  8068. beep(100, 'square');
  8069. if (_RT.$startCenter) {
  8070. WM.panTo(_RT.$startCenter);
  8071. WM.zoomTo(_RT.$startZoom)
  8072. }
  8073. if (!_REP.$maxSeverity) _RT.$curMessage = { TEXT: trS('msg.noissues.text'), TITLE: trS('msg.noissues.tip') }
  8074. }
  8075. sync(F_SHOWREPORT, RF_UPDATEMAXSEVERITY);
  8076. setRTState(ST_STOP);
  8077. async(F_LAYERSON)
  8078. }
  8079. function F_ONMERGEEND() {
  8080. var c = WM.getCenter();
  8081. if (RTStateIs(ST_RUN) && _RT.$nextCenter && !c.equals(_RT.$nextCenter)) return;
  8082. var e = WM.getExtent();
  8083. var ew = e.getWidth();
  8084. var eh = e.getHeight();
  8085. var ew2 = ew / 2;
  8086. var eh2 = eh / 2;
  8087. var s = _RT.$startExtent;
  8088. if (!s) s = new UW.OpenLayers.Bounds;
  8089. var cx = c.lon;
  8090. var cy = c.lat;
  8091. var dir = Math.round(_RT.$direction / Math.abs(_RT.$direction));
  8092. var sw = s.getWidth();
  8093. var sh = s.getHeight();
  8094. var kxMax = Math.ceil(sw / (ew * SCAN_STEP / 100));
  8095. var stepX = sw / kxMax;
  8096. var kyMax = Math.ceil(sh / (eh * SCAN_STEP / 100));
  8097. var stepY = sh / kyMax;
  8098. if (RTStateIs(ST_CONTINUE)) {
  8099. if (_RT.$nextCenter) {
  8100. setRTState(ST_RUN);
  8101. WM.zoomTo(SCAN_ZOOM);
  8102. WM.panTo(_RT.$nextCenter);
  8103. clearWD();
  8104. return
  8105. }
  8106. async(F_ONRUN);
  8107. return
  8108. }
  8109. if (!RTStateIs(ST_RUN)) {
  8110. HLAllSegments();
  8111. return
  8112. }
  8113. async(F_UPDATEUI);
  8114. if (_RT.$firstStep) {
  8115. _RT.$firstStep = false;
  8116. var newX = s.left + ew2;
  8117. var newY = s.top - eh2;
  8118. _RT.$nextCenter = new UW.OpenLayers.LonLat(newX, newY);
  8119. WM.zoomTo(SCAN_ZOOM);
  8120. WM.panTo(_RT.$nextCenter);
  8121. clearWD();
  8122. return
  8123. }
  8124. sync(F_VALIDATE, false);
  8125. var deltaX = Number.MAX_VALUE;
  8126. var deltaY = Number.MAX_VALUE;
  8127. var kx = 0;
  8128. var ky = 0;
  8129. for (var i = 0;; i++) {
  8130. var x = s.left + ew2 + i * stepX;
  8131. var y = s.top - eh2 - i * stepY;
  8132. if (x > s.right && y < s.bottom) break;
  8133. var cd = Math.abs(x - cx);
  8134. if (cd < deltaX) deltaX = cd, kx = i;
  8135. cd = Math.abs(y - cy);
  8136. if (cd < deltaY) deltaY = cd, ky = i
  8137. }
  8138. updateTimer(ST_RUN);
  8139. var curStep = ky * kxMax + (0 < dir ? kx : kxMax - kx);
  8140. if (4 < curStep)
  8141. if (0 === curStep % 5) {
  8142. var maxStep = kyMax * kxMax;
  8143. var minETA = (maxStep / curStep - 1) * _RT.$timer.$secInRun / 60;
  8144. var strMsg = 1 > minETA ? trS('msg.scanning.text.soon') : trSO('msg.scanning.text', {'n': Math.round(minETA)});
  8145. _RT.$curMessage = { TEXT: strMsg, TITLE: trS('msg.scanning.tip') }
  8146. }
  8147. kx = kx + dir;
  8148. var newX = s.left + ew2 + kx * stepX;
  8149. if (newX < s.left || newX > s.right || Math.abs(newX - s.left) < Math.abs(newX - ew2 - s.left) || Math.abs(newX - s.right) < Math.abs(newX + ew2 - s.right)) {
  8150. newX = s.left + ew2 + (kx - dir) * stepX;
  8151. _RT.$direction = -_RT.$direction;
  8152. ky++
  8153. }
  8154. var newY = s.top - eh2 - ky * stepY;
  8155. if (newY < s.bottom || Math.abs(newY - s.bottom) < Math.abs(newY - eh2 - s.bottom)) {
  8156. if (!_REP.$isEditableFound && _UI.pMain.pFilter.oExcludeNonEditables.CHECKED) _RT.$reportEditableNotFound = true;
  8157. async(F_STOP);
  8158. return
  8159. }
  8160. _RT.$nextCenter = new UW.OpenLayers.LonLat(newX, newY);
  8161. WM.zoomTo(SCAN_ZOOM);
  8162. WM.panTo(_RT.$nextCenter);
  8163. clearWD()
  8164. }
  8165. function F_ONRUN() {
  8166. clearErrorFlag();
  8167. if (RTStateIs(ST_RUN)) return;
  8168. async(F_LAYERSOFF);
  8169. _RT.$curMessage = {TEXT: trS('msg.starting.text'), TITLE: trS('msg.starting.tip')};
  8170. setRTState(ST_RUN);
  8171. clearWD();
  8172. _RT.$direction = DIR_L2R;
  8173. _RT.$firstStep = true;
  8174. var e = WM.getExtent();
  8175. _RT.$startExtent = e;
  8176. _RT.$startCenter = WM.getCenter();
  8177. _RT.$startZoom = WM.getZoom();
  8178. _RT.$nextCenter = null;
  8179. _RT.$moveEndCenter = null;
  8180. _RT.$nextCenter = new UW.OpenLayers.LonLat(e.left, e.top);
  8181. WM.panTo(_RT.$nextCenter);
  8182. WM.zoomTo(SCAN_ZOOM)
  8183. }
  8184. function F_ONLOGIN() {
  8185. if (WLM.user) {
  8186. if (!_WV.$loggedIn) {
  8187. _WV.$loggedIn = true;
  8188. async(F_LOGIN)
  8189. }
  8190. } else if (_WV.$loggedIn) {
  8191. _WV.$loggedIn = false;
  8192. async(F_LOGOUT)
  8193. } else {
  8194. log('waiting for login...');
  8195. async(F_ONLOGIN, null, 1E3)
  8196. }
  8197. }
  8198. function F_INIT() {
  8199. UW = window;
  8200. Wa = UW.W;
  8201. nW = UW.W;
  8202. WLM = nW.loginManager;
  8203. WSM = nW.selectionManager;
  8204. WM = nW.map;
  8205. WMo = nW.model;
  8206. WC = nW.controller;
  8207. if (!Wa || !WLM || !WLM.user || !WSM || !WM || !WMo || !WC || !$('#user-tabs')) {
  8208. log('waiting for WME...');
  8209. async(F_INIT, null, 1E3);
  8210. return
  8211. }
  8212. if (classCodeDefined(UW.require)) {
  8213. R = UW.require;
  8214. WME_BETA = /beta/.test(location.href)
  8215. }
  8216. var _gaq = UW['_gaq'];
  8217. if (_gaq) {
  8218. _gaq.push(['WME_Validator._setAccount', 'UA-46853768-3']);
  8219. _gaq.push(['WME_Validator._setDomainName', 'waze.com']);
  8220. _gaq.push(['WME_Validator._trackPageview'])
  8221. }
  8222. _WV.$loggedIn = false;
  8223. WLM.events.on({'loginStatus': onLogin, 'login': onLogin});
  8224. W.app.modeController.model.bind('change:mode', F_INIT);
  8225. async(F_ONLOGIN);
  8226. _WV.buildRegExp = function(checkID, options, strRegExp) {
  8227. try {
  8228. while (strRegExp && ' ' === strRegExp.charAt(0)) strRegExp = strRegExp.substr(1);
  8229. if (strRegExp) {
  8230. if ('D' === strRegExp.charAt(0)) {
  8231. strRegExp = strRegExp.substr(1);
  8232. options[CO_NUMBER] = 1
  8233. } else
  8234. options[CO_NUMBER] = 0;
  8235. if ('!' === strRegExp.charAt(0)) {
  8236. strRegExp = strRegExp.substr(1);
  8237. options[CO_BOOL] = true
  8238. } else
  8239. options[CO_BOOL] = false;
  8240. if ('/' === strRegExp.charAt(0)) strRegExp = strRegExp.substr(1);
  8241. var strRegExpOptions = '';
  8242. var arrMatch = strRegExp.match(/\/([igmy]*)$/);
  8243. if (arrMatch) {
  8244. strRegExpOptions = arrMatch[1];
  8245. strRegExp = strRegExp.slice(0, -arrMatch[0].length)
  8246. }
  8247. options[CO_REGEXP] = new RegExp(strRegExp, strRegExpOptions)
  8248. } else {
  8249. options[CO_BOOL] = false;
  8250. options[CO_NUMBER] = 0;
  8251. options[CO_REGEXP] = null
  8252. }
  8253. } catch (e) {
  8254. error(trSO('err.regexp', {'n': checkID}) + '\n\n' + e);
  8255. options[CO_BOOL] = false;
  8256. options[CO_NUMBER] = 0;
  8257. options[CO_REGEXP] = null
  8258. }
  8259. };
  8260. _WV.SimpleCITY = function(objID) {
  8261. this.$hash = 0;
  8262. this.$cityID = 0;
  8263. this.$city = '';
  8264. this.$state = '';
  8265. this.$countryID = 0;
  8266. this.$country = '';
  8267. if (objID) {
  8268. this.$cityID = objID;
  8269. var oc = WMo.cities.getObjectById(objID);
  8270. if (oc) {
  8271. this.$city = oc.attributes.isEmpty ? '' : oc.attributes.name;
  8272. var o = WMo.states.getObjectById(oc.attributes.stateID);
  8273. if (o) this.$state = o.name;
  8274. this.$countryID = oc.attributes.countryID;
  8275. o = WMo.countries.getObjectById(oc.attributes.countryID);
  8276. if (o) this.$country = o.name
  8277. }
  8278. this.$hash = this.$cityID + this.$countryID;
  8279. Object.defineProperties(this, {$hash: {writable: false}, $cityID: {writable: false}, $state: {writable: false}, $countryID: {writable: false}, $country: {writable: false}})
  8280. }
  8281. };
  8282. _WV.SimpleCITY.prototype.isOkFor = function(checkID) {
  8283. if (!_RT.$isGlobalAccess) return false;
  8284. var rep = _RT.$checks[checkID];
  8285. if (!rep.$cache) rep.$cache = {};
  8286. var cache = rep.$cache;
  8287. var forCity = rep.FORCITY;
  8288. var hash = forCity ? this.$hash : this.$countryID;
  8289. if (hash in cache) return cache[hash];
  8290. cache[hash] = false;
  8291. var forLevel = rep.FORLEVEL;
  8292. if (forLevel && forLevel > _RT.$topUser.$userLevel) return false;
  8293. if (forCity) {
  8294. var curCity = this.$city.toUpperCase();
  8295. if (!_WV.checkAccessFor(forCity, function(e) {
  8296. return e.toUpperCase() === curCity
  8297. }))
  8298. return false
  8299. }
  8300. var forUser = rep.FORUSER;
  8301. if (forUser) {
  8302. var curUser = _RT.$topUser.$userName.toUpperCase();
  8303. if (!_WV.checkAccessFor(forUser, function(e) {
  8304. return e.toUpperCase() === curUser
  8305. }))
  8306. return false
  8307. }
  8308. var forCountry = rep.FORCOUNTRY;
  8309. if (forCountry) {
  8310. var curCountry = this.$country.toUpperCase();
  8311. if (!_WV.checkAccessFor(forCountry, function(e) {
  8312. if (e in _I18n.$code2country) return _I18n.$code2country[e] === curCountry;
  8313. error('Please report: fc=' + e);
  8314. return false
  8315. }))
  8316. return false
  8317. }
  8318. cache[hash] = true;
  8319. return true
  8320. };
  8321. _WV.SimpleADDRESS = function(objID) {
  8322. this.$streetID = 0;
  8323. this.$street = '';
  8324. if (objID) {
  8325. this.$streetID = objID;
  8326. var o = WMo.streets.getObjectById(objID);
  8327. if (o) {
  8328. this.$street = o.isEmpty ? '' : o.name;
  8329. _WV.SimpleCITY.call(this, o.cityID)
  8330. } else {
  8331. this.$street = GL_NOID;
  8332. _WV.SimpleCITY.call(this, 0)
  8333. }
  8334. }
  8335. Object.defineProperties(this, {$streetID: {writable: false}})
  8336. };
  8337. _WV.SimpleADDRESS.prototype = new _WV.SimpleCITY;
  8338. _WV.SimpleADDRESS.prototype.constructor = _WV.SimpleADDRESS
  8339. }
  8340. function F_ONWARNING(e) {
  8341. _THUI.viewToDoc(_UI);
  8342. var target = _THUI.getByDOM(_UI, e.target);
  8343. if (target && target.CHECKED && target.WARNING) warning(target.WARNING);
  8344. async(F_UPDATEUI)
  8345. }
  8346. function F_UPDATEUI(e) {
  8347. function destroyHLs() {
  8348. _RT.$HLedObjects = {};
  8349. _RT.$HLlayer.destroyFeatures()
  8350. }
  8351. function updateReportButtons() {
  8352. if (RTStateIs(ST_RUN) || RTStateIs(ST_CONTINUE)) {
  8353. btns.bReport.CLASS = 'btn btn-default';
  8354. btns.bReport.DISABLED = true;
  8355. btns.bReportBB.DISABLED = true;
  8356. return
  8357. }
  8358. if (!_REP.$maxSeverity) {
  8359. btns.bReport.CLASS = 'btn btn-default';
  8360. btns.bReport.DISABLED = true;
  8361. btns.bReportBB.DISABLED = true
  8362. } else {
  8363. switch (_REP.$maxSeverity) {
  8364. case RS_NOTE:
  8365. btns.bReport.CLASS = 'btn btn-info';
  8366. break;
  8367. case RS_WARNING:
  8368. btns.bReport.CLASS = 'btn btn-warning';
  8369. break;
  8370. case RS_ERROR:
  8371. btns.bReport.CLASS = 'btn btn-danger';
  8372. break;
  8373. case RS_CUSTOM1:
  8374. btns.bReport.CLASS = 'btn btn-success';
  8375. break;
  8376. case RS_CUSTOM2:
  8377. btns.bReport.CLASS = 'btn btn-primary';
  8378. break
  8379. }
  8380. btns.bReport.DISABLED = false;
  8381. btns.bReportBB.DISABLED = false
  8382. }
  8383. if (3 < WM.getZoom()) {
  8384. btns.bScan.CLASS = 'btn btn-default';
  8385. btns.bScan.DISABLED = true;
  8386. btns.bScan.TITLE = trS('button.scan.tip.NA')
  8387. } else {
  8388. btns.bScan.CLASS = 'btn btn-success';
  8389. btns.bScan.DISABLED = false;
  8390. btns.bScan.TITLE = trS('button.scan.tip')
  8391. }
  8392. if (_REP.$isLimitPerCheck) {
  8393. btns.bClear.CLASS = 'btn btn-danger';
  8394. btns.bClear.TITLE = trS('button.clear.tip.red')
  8395. } else {
  8396. btns.bClear.CLASS = 'btn btn-default';
  8397. btns.bClear.TITLE = trS('button.clear.tip')
  8398. }
  8399. if (_UI.pSettings.pScanner.oHLReported.CHECKED) {
  8400. _UI.pMain.pTabs.tMain.TEXT = '<i class="fa fa-check-square-o" aria-hidden="true"></i> ' +
  8401. 'Validator:';
  8402. _UI.pMain.pTabs.tMain.TITLE = trS('tab.switch.tip.off')
  8403. } else {
  8404. _UI.pMain.pTabs.tMain.TEXT = '<font color="#ccc"><i class="fa fa-power-off" aria-hidden="true"></i> ' +
  8405. 'Validator:</font>';
  8406. _UI.pMain.pTabs.tMain.TITLE = trS('tab.switch.tip.on')
  8407. }
  8408. _UI.pMain.pTabs.tMain.TITLE += '\nWME Validator Version ' + WV_VERSION
  8409. }
  8410. function getTopCity() {
  8411. var i = WMo.segments.topCityID;
  8412. if (i) return new _WV.SimpleCITY(i);
  8413. return new _WV.SimpleCITY(0)
  8414. }
  8415. _RT.$topCity = getTopCity();
  8416. if (_RT.$topCity.$country) _RT.$cachedTopCCode = _I18n.getCountryCode(_RT.$topCity.$country.toUpperCase());
  8417. _THUI.viewToDoc(_UI);
  8418. _RT.$isGlobalAccess = true;
  8419. if (!_RT.$topCity.isOkFor(0)) _RT.$isGlobalAccess = false;
  8420. if (!_RT.$isGlobalAccess) {
  8421. _UI.pMain.NODISPLAY = 1;
  8422. _UI.pSettings.NODISPLAY = 1;
  8423. _UI.pTips.NODISPLAY = 1;
  8424. _UI.pNoAccess.NODISPLAY = 0;
  8425. _THUI.docToView(_UI);
  8426. return
  8427. } else if (!_UI.pNoAccess.NODISPLAY) {
  8428. _UI.pMain.NODISPLAY = 0;
  8429. _UI.pTips.NODISPLAY = 0;
  8430. _UI.pNoAccess.NODISPLAY = 1
  8431. }
  8432. if (_RT.oReportToolbox.NA && null !== document.getElementById(_RT.oReportToolbox.FORID)) {
  8433. _RT.oReportToolbox.CHECKED = true;
  8434. _RT.oReportToolbox.NA = false;
  8435. clearReport();
  8436. async(ForceHLAllSegments, null, 1E3)
  8437. }
  8438. if (_RT.oReportWMECH.NA && null !== document.getElementById(_RT.oReportWMECH.FORID)) {
  8439. _RT.oReportWMECH.CHECKED = true;
  8440. _RT.oReportWMECH.NA = false;
  8441. clearReport();
  8442. async(ForceHLAllSegments, null, 1E3)
  8443. }
  8444. var customOptions = _RT.$checks[128].OPTIONS[_I18n.$defLng];
  8445. if (customOptions[CO_STRING] !== _UI.pSettings.pCustom.oTemplate1.VALUE || _RT.$RegExp1 !== _UI.pSettings.pCustom.oRegExp1.VALUE) {
  8446. customOptions[CO_STRING] = _UI.pSettings.pCustom.oTemplate1.VALUE;
  8447. if (customOptions[CO_STRING]) {
  8448. clearErrorFlag();
  8449. _RT.$RegExp1 = _UI.pSettings.pCustom.oRegExp1.VALUE;
  8450. _WV.buildRegExp(128, customOptions, _UI.pSettings.pCustom.oRegExp1.VALUE)
  8451. } else
  8452. customOptions[CO_REGEXP] = null
  8453. }
  8454. customOptions = _RT.$checks[129].OPTIONS[_I18n.$defLng];
  8455. if (customOptions[CO_STRING] !== _UI.pSettings.pCustom.oTemplate2.VALUE || _RT.$RegExp2 !== _UI.pSettings.pCustom.oRegExp2.VALUE) {
  8456. customOptions[CO_STRING] = _UI.pSettings.pCustom.oTemplate2.VALUE;
  8457. if (customOptions[CO_STRING]) {
  8458. clearErrorFlag();
  8459. _RT.$RegExp2 = _UI.pSettings.pCustom.oRegExp2.VALUE;
  8460. _WV.buildRegExp(128, customOptions, _UI.pSettings.pCustom.oRegExp2.VALUE)
  8461. } else
  8462. customOptions[CO_REGEXP] = null
  8463. }
  8464. if (_RT.$checks[128].OPTIONS[_I18n.$defLng][CO_REGEXP])
  8465. _RT.$curMaxSeverity = RS_CUSTOM1;
  8466. else if (_RT.$checks[129].OPTIONS[_I18n.$defLng][CO_REGEXP])
  8467. _RT.$curMaxSeverity = RS_CUSTOM2;
  8468. else
  8469. _RT.$curMaxSeverity = RS_ERROR;
  8470. if (e) {
  8471. switch (_THUI.getByDOM(_UI, e.target)) {
  8472. case _UI.pMain.pTabs.tMain:
  8473. _RT.$switchValidator = true;
  8474. break;
  8475. case _UI.pSettings.pCustom.oTemplate1:
  8476. case _UI.pSettings.pCustom.oRegExp1:
  8477. case _UI.pSettings.pCustom.oTemplate2:
  8478. case _UI.pSettings.pCustom.oRegExp2:
  8479. _RT.$isMapChanged = true;
  8480. clearReport();
  8481. async(ForceHLAllSegments);
  8482. break;
  8483. case _UI.pMain.pFilter.oExcludeNonEditables:
  8484. case _UI.pMain.pFilter.oExcludeDuplicates:
  8485. case _UI.pMain.pFilter.oExcludeStreets:
  8486. case _UI.pMain.pFilter.oExcludeOther:
  8487. case _UI.pMain.pFilter.oExcludeNotes:
  8488. case _UI.pMain.pSearch.oIncludeYourEdits:
  8489. case _UI.pMain.pSearch.oIncludeUpdatedBy:
  8490. case _UI.pMain.pSearch.oIncludeUpdatedSince:
  8491. case _UI.pMain.pSearch.oIncludeCityName:
  8492. case _UI.pMain.pSearch.oIncludeChecks:
  8493. _RT.$includeUpdatedByCache = {};
  8494. _RT.$includeUpdatedSinceTime = 0;
  8495. _RT.$includeCityNameCache = {};
  8496. _RT.$includeChecksCache = {};
  8497. async(F_SHOWREPORT, RF_UPDATEMAXSEVERITY);
  8498. async(ForceHLAllSegments);
  8499. break;
  8500. case _UI.pMain.pButtons.bScan:
  8501. async(F_ONRUN);
  8502. break;
  8503. case _UI.pMain.pButtons.bStop:
  8504. async(F_STOP);
  8505. break;
  8506. case _UI.pMain.pButtons.bClear:
  8507. _RT.$isMapChanged = true;
  8508. clearErrorFlag();
  8509. clearReport();
  8510. destroyHLs();
  8511. break;
  8512. case _UI.pMain.pButtons.bPause:
  8513. _RT.$curMessage = {TEXT: trS('msg.paused.text'), TITLE: trS('msg.paused.tip')};
  8514. async(F_PAUSE);
  8515. break;
  8516. case _UI.pMain.pButtons.bContinue:
  8517. clearErrorFlag();
  8518. if (!RTStateIs(ST_PAUSE)) break;
  8519. if (LIMIT_TOTAL < _REP.$counterTotal) clearReport();
  8520. async(F_LAYERSOFF);
  8521. _RT.$curMessage = {TEXT: trS('msg.continuing.text'), TITLE: trS('msg.continuing.tip')};
  8522. setRTState(ST_CONTINUE);
  8523. if (_RT.$startCenter) {
  8524. WM.zoomTo(_RT.$startZoom);
  8525. WM.panTo(_RT.$startCenter)
  8526. }
  8527. clearWD();
  8528. break;
  8529. case _UI.pMain.pButtons.bSettings:
  8530. _UI.pMain.NODISPLAY = true;
  8531. _UI.pSettings.NODISPLAY = false;
  8532. _RT.$curMessage = {TEXT: trS('msg.settings.text'), TITLE: trS('msg.settings.tip')};
  8533. break;
  8534. case _UI.pSettings.pButtons.bReset:
  8535. resetDefaults();
  8536. _RT.$curMessage = {TEXT: trS('msg.reset.text'), TITLE: trS('msg.reset.tip')};
  8537. sync(F_SHOWREPORT, RF_UPDATEMAXSEVERITY);
  8538. async(ForceHLAllSegments);
  8539. break;
  8540. case _UI.pSettings.pButtons.bBack:
  8541. _UI.pMain.NODISPLAY = false;
  8542. _UI.pSettings.NODISPLAY = true;
  8543. break;
  8544. case _UI.pSettings.pScanner.oHLReported:
  8545. _UI.pSettings.pScanner.oHLReported.CHECKED = !_UI.pSettings.pScanner.oHLReported.CHECKED;
  8546. _RT.$switchValidator = true;
  8547. break
  8548. }
  8549. async(F_ONWARNING, e)
  8550. }
  8551. if (_RT.$switchValidator) {
  8552. _UI.pSettings.pScanner.oHLReported.CHECKED = !_UI.pSettings.pScanner.oHLReported.CHECKED;
  8553. if (_UI.pSettings.pScanner.oHLReported.CHECKED) {
  8554. ForceHLAllSegments();
  8555. _RT.$HLlayer.setVisibility(true)
  8556. } else {
  8557. ForceHLAllSegments();
  8558. destroyHLs();
  8559. _RT.$HLlayer.setVisibility(false)
  8560. }
  8561. _RT.$switchValidator = false
  8562. }
  8563. if (_RT.$reportEditableNotFound) {
  8564. _RT.$reportEditableNotFound = false;
  8565. _UI.pMain.pFilter.oExcludeNonEditables.CHECKED = false;
  8566. info('\'Exclude non-editable segments\' filter option has been removed because the area you just scanned has no editable segments.\n\nNow just click \'Show report\' to view the report!')
  8567. }
  8568. _UI.pMain.pHelp.NODISPLAY = !_UI.pMain.pTabs.tHelp.CHECKED;
  8569. _UI.pMain.pFilter.NODISPLAY = !_UI.pMain.pTabs.tFilter.CHECKED;
  8570. _UI.pMain.pSearch.NODISPLAY = !_UI.pMain.pTabs.tSearch.CHECKED;
  8571. _UI.pSettings.pScanner.NODISPLAY = !_UI.pSettings.pTabs.tScanner.CHECKED;
  8572. _UI.pSettings.pCustom.NODISPLAY = !_UI.pSettings.pTabs.tCustom.CHECKED;
  8573. _UI.pSettings.pAbout.NODISPLAY = !_UI.pSettings.pTabs.tAbout.CHECKED;
  8574. if (_UI.pSettings.pTabs.tAbout.CHECKED) {
  8575. _UI.pSettings.pButtons.bReset.NODISPLAY = 1;
  8576. _UI.pSettings.pButtons.bList.NODISPLAY = 0;
  8577. _UI.pSettings.pButtons.bWizard.NODISPLAY = 0
  8578. } else {
  8579. _UI.pSettings.pButtons.bReset.NODISPLAY = 0;
  8580. _UI.pSettings.pButtons.bList.NODISPLAY = 1;
  8581. _UI.pSettings.pButtons.bWizard.NODISPLAY = 1
  8582. }
  8583. var btns = _UI.pMain.pButtons;
  8584. switch (getRTState()) {
  8585. case ST_CONTINUE:
  8586. case ST_RUN:
  8587. btns.bScan.NODISPLAY = true;
  8588. btns.bPause.NODISPLAY = false;
  8589. btns.bContinue.NODISPLAY = true;
  8590. btns.bStop.NODISPLAY = false;
  8591. btns.bClear.NODISPLAY = true;
  8592. updateReportButtons();
  8593. btns.bSettings.DISABLED = true;
  8594. _UI.pMain.pFilter._DISABLED = true;
  8595. _UI.pMain.pSearch._DISABLED = true;
  8596. break;
  8597. case ST_STOP:
  8598. btns.bScan.NODISPLAY = false;
  8599. btns.bPause.NODISPLAY = true;
  8600. btns.bContinue.NODISPLAY = true;
  8601. btns.bStop.NODISPLAY = true;
  8602. btns.bClear.NODISPLAY = false;
  8603. if (isEmpty(_RT.$seen))
  8604. btns.bClear.DISABLED = true;
  8605. else
  8606. btns.bClear.DISABLED = false;
  8607. updateReportButtons();
  8608. if (_REP.$maxSeverity && !_UI.pMain.NODISPLAY) _RT.$curMessage = {TEXT: trS('msg.finished.text'), TITLE: trS('msg.finished.tip'), CLASS: CL_MSGY};
  8609. btns.bSettings.DISABLED = false;
  8610. _UI.pMain.pFilter._DISABLED = false;
  8611. _UI.pMain.pSearch._DISABLED = false;
  8612. break;
  8613. case ST_PAUSE:
  8614. btns.bScan.NODISPLAY = true;
  8615. btns.bPause.NODISPLAY = true;
  8616. btns.bContinue.NODISPLAY = false;
  8617. btns.bContinue.DISABLED = false;
  8618. btns.bStop.NODISPLAY = false;
  8619. btns.bClear.NODISPLAY = true;
  8620. updateReportButtons();
  8621. btns.bSettings.DISABLED = false;
  8622. _UI.pMain.pFilter._DISABLED = false;
  8623. _UI.pMain.pSearch._DISABLED = false;
  8624. break
  8625. }
  8626. if (RTStateIs(ST_STOP) && !_REP.$maxSeverity)
  8627. if (!_UI.pMain.NODISPLAY)
  8628. if (3 < WM.getZoom())
  8629. _RT.$curMessage = {TEXT: _UI.pSettings.pScanner.oHLReported.CHECKED ? trS('msg.pan.text') : trS('msg.zoomout.text'), TITLE: '', CLASS: CL_MSGY};
  8630. else
  8631. _RT.$curMessage = {TEXT: trS('msg.click.text'), TITLE: '', CLASS: CL_MSGY};
  8632. _UI.pTips.TEXT = _RT.$curMessage.TEXT;
  8633. if (_RT.$curMessage.TITLE)
  8634. _UI.pTips.TITLE = _RT.$curMessage.TITLE;
  8635. else
  8636. _UI.pTips.TITLE = '';
  8637. if (_RT.$curMessage.CLASS)
  8638. _UI.pTips.CLASS = _RT.$curMessage.CLASS;
  8639. else
  8640. _UI.pTips.CLASS = CL_MSG;
  8641. var storageObj = _THUI.saveValues(_UI);
  8642. storageObj[AS_VERSION] = WV_VERSION;
  8643. storageObj[AS_LICENSE] = WV_LICENSE_VERSION;
  8644. storageObj[AS_PASSWORD] = 1;
  8645. try {
  8646. window.localStorage.setItem(AS_NAME, JSON.stringify(storageObj))
  8647. } catch (err) {
  8648. }
  8649. _THUI.docToView(_UI)
  8650. }
  8651. function F_LOGOUT() {
  8652. log('logout');
  8653. _UI = {};
  8654. WMo.events.un({'mergeend': onMergeEnd});
  8655. WM.events.un({'moveend': onMoveEnd, 'zoomend': HLAllSegments, 'changelayer': onChangeLayer});
  8656. WSM.events.un({'selectionchanged': ForceHLAllSegments});
  8657. WC.events.un({'loadstart': onLoadStart});
  8658. WMo.segments.events.un({'objectsadded': onSegmentsAdded, 'objectschanged': onSegmentsChanged, 'objectsremoved': onSegmentsRemoved});
  8659. WMo.nodes.events.un({'objectschanged': onNodesChanged, 'objectsremoved': onNodesRemoved})
  8660. }
  8661. async(F_INIT, null, 0);
  8662. var _I18n = {
  8663. $defLng: 'EN',
  8664. $lng: '',
  8665. $translations: null,
  8666. $curSet: null,
  8667. $curCode: '',
  8668. $fallbackSet: null,
  8669. $fallbackCode: '',
  8670. $defSet: null,
  8671. $country2code: null,
  8672. $code2country: null,
  8673. $code2code: null,
  8674. $lng2code: null,
  8675. $code2dir: null
  8676. };
  8677. _I18n.init = function(options) {
  8678. _I18n.$lng = options.$lng || _I18n.$defLng;
  8679. _I18n.$translations = options.$translations || {};
  8680. _I18n.$country2code = options.$country2code || {};
  8681. _I18n.$code2country = options.$code2country || {};
  8682. _I18n.$code2code = options.$code2code || {};
  8683. _I18n.$lng2code = options.$lng2code || {};
  8684. _I18n.$code2dir = options.$code2dir || {}
  8685. };
  8686. _I18n.addTranslation = function(translation) {
  8687. var ccode = translation['.codeISO'];
  8688. if (!ccode) return;
  8689. ccode = ccode.toUpperCase();
  8690. _I18n.$translations[ccode] = translation;
  8691. if (_I18n.$defLng !== ccode) {
  8692. var country = translation['.country'];
  8693. if (country) {
  8694. if (!classCodeIs(country, CC_ARRAY)) country = [country];
  8695. for (var i = 0; i < country.length; i++) {
  8696. var ucountry = country[i].toUpperCase();
  8697. _I18n.$country2code[ucountry] = ccode;
  8698. if (!(ccode in _I18n.$code2country)) _I18n.$code2country[ccode] = ucountry
  8699. }
  8700. }
  8701. var lng = translation['.lng'];
  8702. if (lng) {
  8703. if (!classCodeIs(lng, CC_ARRAY)) lng = [lng];
  8704. for (var i = 0; i < lng.length; i++) {
  8705. var ulng = lng[i].toUpperCase();
  8706. _I18n.$lng2code[ulng] = ccode
  8707. }
  8708. }
  8709. var dir = translation['.dir'];
  8710. if (dir) _I18n.$code2dir[ccode] = dir.toLowerCase();
  8711. var fcode = translation['.fallbackCode'];
  8712. if (fcode) {
  8713. fcode = fcode.toUpperCase();
  8714. if (_I18n.$defLng !== fcode) _I18n.$code2code[ccode] = fcode
  8715. }
  8716. }
  8717. _I18n.$curCode = _I18n.getCodeOL(_I18n.$translations, _I18n.$lng);
  8718. _I18n.$curSet = _I18n.getValueOC(_I18n.$translations, _I18n.$curCode);
  8719. _I18n.$fallbackCode = _I18n.getFallbackCodeOC(_I18n.$translations, _I18n.$curCode);
  8720. _I18n.$fallbackSet = _I18n.getValueOC(_I18n.$translations, _I18n.$fallbackCode);
  8721. _I18n.$defSet = _I18n.$translations[_I18n.$defLng]
  8722. };
  8723. _I18n.getDependantCodes = function(uc) {
  8724. var ret = [];
  8725. for (var depCode in _I18n.$code2code)
  8726. if (_I18n.$code2code[depCode] === uc) ret.push(depCode);
  8727. return ret
  8728. };
  8729. _I18n.getCountryCode = function(uc) {
  8730. if (uc in _I18n.$country2code) return _I18n.$country2code[uc];
  8731. return ''
  8732. };
  8733. _I18n.getCountry = function(ucc) {
  8734. if (ucc in _I18n.$code2country) return _I18n.$code2country[ucc];
  8735. return ''
  8736. };
  8737. _I18n.getCapitalizedCountry = function(ucc) {
  8738. return _I18n.capitalize(_I18n.getCountry(ucc)).toLowerCase().replace(/\b./g, function(c) {
  8739. return c.toUpperCase()
  8740. })
  8741. };
  8742. _I18n.capitalize = function(str) {
  8743. return str.toLowerCase().replace(/\b./g, function(c) {
  8744. return c.toUpperCase()
  8745. })
  8746. };
  8747. _I18n.getDir = function() {
  8748. if (_I18n.$curCode in _I18n.$code2dir) return _I18n.$code2dir[_I18n.$curCode];
  8749. if (_I18n.$fallbackCode in _I18n.$code2dir) return _I18n.$code2dir[_I18n.$fallbackCode];
  8750. return 'ltr'
  8751. };
  8752. _I18n.getString = function(label) {
  8753. if (label in _I18n.$curSet) return _I18n.$curSet[label];
  8754. if (label in _I18n.$fallbackSet) return _I18n.$fallbackSet[label];
  8755. if (label in _I18n.$defSet) return _I18n.$defSet[label];
  8756. var ret = '[missing ' + label + ']';
  8757. return ret
  8758. };
  8759. _I18n.isLabelExist = function(label) {
  8760. if (label in _I18n.$curSet) return true;
  8761. if (label in _I18n.$fallbackSet) return true;
  8762. if (label in _I18n.$defSet) return true;
  8763. return false
  8764. };
  8765. _I18n.getCodeOL = function(obj, lng) {
  8766. var ccode = _I18n.$lng2code[lng];
  8767. if (ccode)
  8768. if (ccode in obj)
  8769. return ccode;
  8770. else
  8771. return _I18n.getFallbackCodeOC(obj, ccode);
  8772. else
  8773. return _I18n.$defLng
  8774. };
  8775. _I18n.getFallbackCodeOC = function(obj, ccode) {
  8776. var fcode = _I18n.$code2code[ccode];
  8777. if (fcode && fcode in obj) return fcode;
  8778. return _I18n.$defLng
  8779. };
  8780. _I18n.getValueOL = function(obj, lng) {
  8781. return _I18n.getValueOC(obj, _I18n.getCodeOL(obj, lng))
  8782. };
  8783. _I18n.getValueOC = function(obj, ccode) {
  8784. if (ccode in obj)
  8785. return obj[ccode];
  8786. else if (ccode in _I18n.$code2code) {
  8787. var fcode = _I18n.$code2code[ccode];
  8788. if (fcode in obj) return obj[fcode]
  8789. }
  8790. return obj[_I18n.$defLng]
  8791. };
  8792. _I18n.expandSO = function(str, options) {
  8793. if (!options) return str;
  8794. return str.replace(/\$\{(\w+)(\[(\d+)\]|\[(\W*)\])?\}/g, function(all, name, arr, idx, delims) {
  8795. if (arr) {
  8796. if (idx) return options[name][idx] || '';
  8797. return options[name].join(delims)
  8798. } else
  8799. return options[name]
  8800. })
  8801. };
  8802. _I18n.t = function(obj, ccode, options) {
  8803. return _I18n.expandSO(_I18n.getValueOC(obj, ccode), options)
  8804. };
  8805. _I18n.tL = function(obj, options) {
  8806. return _I18n.expandSO(_I18n.getValueOL(obj, _I18n.$lng), options)
  8807. };
  8808. var _AUDIO = {};
  8809. _AUDIO.beep = function(dur, oscType) {
  8810. try {
  8811. _AUDIO._context = new (window.AudioContext || window.webkitAudioContext);
  8812. var osc = _AUDIO._context.createOscillator();
  8813. osc.connect(_AUDIO._context.destination);
  8814. osc.type = oscType || 'sine';
  8815. osc.start(0);
  8816. setTimeout(function() {
  8817. osc.stop(0)
  8818. }, dur)
  8819. } catch (e) {
  8820. log('beep!')
  8821. }
  8822. };
  8823. _THUI.$def = {
  8824. _class: '',
  8825. _disclose: 0,
  8826. _name: '',
  8827. _nodisplay: 0,
  8828. _disabled: 0,
  8829. _reverse: 0,
  8830. _style: '',
  8831. _type: '',
  8832. _onclick: null,
  8833. _onwarning: null,
  8834. _onchange: null
  8835. };
  8836. _THUI.loadValues = function(uiObj, storageObj) {
  8837. if (!storageObj) return;
  8838. if (uiObj.AUTOSAVE && uiObj.AUTOSAVE in storageObj) {
  8839. switch (uiObj.TYPE) {
  8840. case _THUI.TEXT:
  8841. case _THUI.DATE:
  8842. uiObj.VALUE = storageObj[uiObj.AUTOSAVE];
  8843. break;
  8844. default:
  8845. uiObj.CHECKED = storageObj[uiObj.AUTOSAVE];
  8846. break
  8847. }
  8848. return
  8849. }
  8850. for (var i in uiObj) {
  8851. if (!uiObj.hasOwnProperty(i)) continue;
  8852. var o = uiObj[i];
  8853. switch (classCode(o)) {
  8854. case CC_OBJECT:
  8855. _THUI.loadValues(o, storageObj);
  8856. break;
  8857. case CC_ARRAY:
  8858. for (var j = 0; j < o.length; j++) _THUI.loadValues(o[j], storageObj);
  8859. break
  8860. }
  8861. }
  8862. };
  8863. _THUI.saveValues = function(uiObj, storageObj) {
  8864. if (!storageObj) storageObj = {};
  8865. if (uiObj.AUTOSAVE) {
  8866. switch (uiObj.TYPE) {
  8867. case _THUI.TEXT:
  8868. case _THUI.DATE:
  8869. storageObj[uiObj.AUTOSAVE] = uiObj.VALUE;
  8870. break;
  8871. default:
  8872. storageObj[uiObj.AUTOSAVE] = uiObj.CHECKED;
  8873. break
  8874. }
  8875. return storageObj
  8876. }
  8877. for (var i in uiObj) {
  8878. if (!uiObj.hasOwnProperty(i)) continue;
  8879. var o = uiObj[i];
  8880. switch (classCode(o)) {
  8881. case CC_OBJECT:
  8882. _THUI.saveValues(o, storageObj);
  8883. break;
  8884. case CC_ARRAY:
  8885. for (var j = 0; j < o.length; j++) _THUI.saveValues(o[j], storageObj);
  8886. break
  8887. }
  8888. }
  8889. return storageObj
  8890. };
  8891. _THUI.storage = {
  8892. get: function(name) {
  8893. try {
  8894. var s = window.localStorage.getItem(name);
  8895. return s ? JSON.parse(s) : null
  8896. } catch (e) {
  8897. return null
  8898. }
  8899. },
  8900. set: function(name, obj) {
  8901. try {
  8902. var s = JSON.stringify(obj);
  8903. window.localStorage.setItem(name, s);
  8904. return true
  8905. } catch (e) {
  8906. return false
  8907. }
  8908. }
  8909. };
  8910. _THUI.addElemetClassStyle = function(elem, cl, newStyle) {
  8911. if (classCodeIs(cl, CC_NUMBER)) cl = 'c' + cl;
  8912. return _THUI.addStyle(elem + '.' + cl + newStyle)
  8913. };
  8914. _THUI.addElemetIdStyle = function(elem, id, newStyle) {
  8915. if (classCodeIs(id, CC_NUMBER)) id = 'i' + id;
  8916. return _THUI.addStyle(elem + '#' + id + newStyle)
  8917. };
  8918. _THUI.addStyle = function(newStyle) {
  8919. for (var i = 0; i < 10; i++) {
  8920. var sheet = document.styleSheets[i];
  8921. try {
  8922. if ('cssRules' in sheet) return sheet.insertRule(newStyle, sheet.cssRules.length)
  8923. } catch (e) {
  8924. }
  8925. }
  8926. };
  8927. _THUI.getByDOM = function(uiObj, elem) {
  8928. if (uiObj.IDOM == elem || uiObj.ODOM == elem) return uiObj;
  8929. var ret = null;
  8930. for (var i in uiObj) {
  8931. if (!uiObj.hasOwnProperty(i)) continue;
  8932. var o = uiObj[i];
  8933. switch (classCode(o)) {
  8934. case CC_OBJECT:
  8935. if (ret = _THUI.getByDOM(o, elem)) return ret;
  8936. break;
  8937. case CC_ARRAY:
  8938. for (var j = 0; j < o.length; j++)
  8939. if (ret = _THUI.getByDOM(o[j], elem)) return ret;
  8940. break
  8941. }
  8942. }
  8943. return null
  8944. };
  8945. _THUI.getById = function(uiObj, id) {
  8946. if (uiObj.ID && uiObj.ID == id) return uiObj;
  8947. var ret = null;
  8948. for (var i in uiObj) {
  8949. if (!uiObj.hasOwnProperty(i)) continue;
  8950. var o = uiObj[i];
  8951. switch (classCode(o)) {
  8952. case CC_OBJECT:
  8953. if (ret = _THUI.getById(o, id)) return ret;
  8954. break;
  8955. case CC_ARRAY:
  8956. for (var j = 0; j < o.length; j++)
  8957. if (ret = _THUI.getById(o[j], id)) return ret;
  8958. break
  8959. }
  8960. }
  8961. return null
  8962. };
  8963. _THUI.docToView = function(uiObj) {
  8964. _THUI.appendUI(null, uiObj)
  8965. };
  8966. _THUI.viewToDoc = function(uiObj) {
  8967. if (uiObj.IDOM) {
  8968. if (classCodeDefined(uiObj.IDOM.value)) {
  8969. var val = uiObj.IDOM.value;
  8970. if (classCodeDefined(uiObj.MAX) && val > uiObj.MAX) val = uiObj.MAX;
  8971. if (classCodeDefined(uiObj.MIN) && val < uiObj.MIN) val = uiObj.MIN;
  8972. uiObj.VALUE = val
  8973. }
  8974. if (classCodeDefined(uiObj.IDOM.checked)) uiObj.CHECKED = uiObj.IDOM.checked
  8975. }
  8976. for (var i in uiObj) {
  8977. if (!uiObj.hasOwnProperty(i)) continue;
  8978. var o = uiObj[i];
  8979. switch (classCode(o)) {
  8980. case CC_OBJECT:
  8981. _THUI.viewToDoc(o);
  8982. break;
  8983. case CC_ARRAY:
  8984. o.forEach(_THUI.viewToDoc);
  8985. break
  8986. }
  8987. }
  8988. };
  8989. _THUI.appendUI = function(parent, uiObj, uiPrefix, uiName) {
  8990. uiPrefix = uiPrefix || '';
  8991. uiName = uiName || '';
  8992. var id = uiObj.ID;
  8993. if (!classCodeDefined(id)) id = '';
  8994. var NA = uiObj.NA || false;
  8995. var NAti = uiObj.NATITLE || '';
  8996. var ch = uiObj.CHECKED || false;
  8997. var cl = classCodeDefined(uiObj.CLASS) ? uiObj.CLASS : _THUI.$def._class;
  8998. var cli = uiObj.CLASSI;
  8999. var _cl = uiObj._CLASS;
  9000. var va = uiObj.VALUE;
  9001. var disc = classCodeDefined(uiObj.DISCLOSE) ? uiObj.DISCLOSE : _THUI.$def._disclose;
  9002. var _disc = uiObj._DISCLOSE;
  9003. var di = NA ? NA : classCodeDefined(uiObj.DISABLED) ? uiObj.DISABLED : _THUI.$def._disabled;
  9004. var _di = uiObj._DISABLED;
  9005. var no = classCodeDefined(uiObj.NODISPLAY) ? uiObj.NODISPLAY : _THUI.$def._nodisplay;
  9006. var _no = uiObj._NODISPLAY;
  9007. var ma = uiObj.MAX;
  9008. var mal = uiObj.MAXLENGTH;
  9009. var plh = uiObj.PLACEHOLDER;
  9010. var mi = uiObj.MIN;
  9011. var name = classCodeDefined(uiObj.NAME) ? uiObj.NAME : _THUI.$def._name;
  9012. var _name = uiObj._NAME;
  9013. var ro = uiObj.READONLY || false;
  9014. var re = classCodeDefined(uiObj.REVERSE) ? uiObj.REVERSE : _THUI.$def._reverse;
  9015. var _re = uiObj._REVERSE;
  9016. var step = uiObj.STEP;
  9017. var st = classCodeDefined(uiObj.STYLE) ? uiObj.STYLE : _THUI.$def._style;
  9018. var _st = uiObj._STYLE;
  9019. var sti = classCodeDefined(uiObj.STYLEI) ? uiObj.STYLEI : '';
  9020. var sto = classCodeDefined(uiObj.STYLEO) ? uiObj.STYLEO : '';
  9021. var te = uiObj.TEXT || '';
  9022. var ti = NA ? NAti ? NAti : 'Not available' : uiObj.TITLE;
  9023. var ty = classCodeDefined(uiObj.TYPE) ? uiObj.TYPE : _THUI.$def._type;
  9024. var _ty = uiObj._TYPE;
  9025. var accK = uiObj.ACCESSKEY || '';
  9026. var oncl = uiObj.ONCLICK || _THUI.$def._onclick;
  9027. var onclo = uiObj.ONCLICKO;
  9028. var _oncl = uiObj._ONCLICK;
  9029. var onwa = uiObj.ONWARNING || _THUI.$def._onwarning;
  9030. var _onwa = uiObj._ONWARNING;
  9031. var onch = uiObj.ONCHANGE || _THUI.$def._onchange;
  9032. var _onch = uiObj._ONCHANGE;
  9033. var els = [];
  9034. var iel = document.createElement('input');
  9035. var oel = document.createElement('label');
  9036. var ote = te;
  9037. if (classCodeIs(uiPrefix, CC_NUMBER)) uiPrefix = 'p' + uiPrefix;
  9038. if (classCodeIs(id, CC_NUMBER)) id = 'i' + id;
  9039. if (classCodeIs(cl, CC_NUMBER)) cl = 'c' + cl;
  9040. if (classCodeIs(cli, CC_NUMBER)) cli = 'c' + cli;
  9041. if (classCodeIs(name, CC_NUMBER)) name = 'n' + name;
  9042. switch (ty) {
  9043. case _THUI.NONE:
  9044. iel = oel = null;
  9045. ote = '';
  9046. break;
  9047. case _THUI.NUMBER:
  9048. iel.type = 'number';
  9049. break;
  9050. case _THUI.RADIO:
  9051. if (disc && !id) id = uiPrefix + uiName + 'i';
  9052. if (!name) name = uiPrefix + 'n';
  9053. iel.type = 'radio';
  9054. if (disc) oel.htmlFor = id;
  9055. break;
  9056. case _THUI.CHECKBOX:
  9057. if (disc && !id) id = uiPrefix + uiName + 'i';
  9058. iel.type = 'checkbox';
  9059. if (disc) oel.htmlFor = id;
  9060. break;
  9061. case _THUI.BUTTON:
  9062. iel = document.createElement('button');
  9063. if (te) iel.innerHTML = te;
  9064. oel = null;
  9065. ote = '';
  9066. break;
  9067. case _THUI.TEXT:
  9068. iel.type = 'text';
  9069. break;
  9070. case _THUI.PASSWORD:
  9071. iel.type = 'password';
  9072. break;
  9073. case _THUI.DATE:
  9074. iel.type = 'date';
  9075. break;
  9076. default:
  9077. iel = null;
  9078. oel = document.createElement('div');
  9079. break
  9080. }
  9081. if (oel && iel && !disc)
  9082. if (re)
  9083. oel.appendChild(iel);
  9084. else
  9085. oel.insertBefore(iel, oel.firstChild);
  9086. if (classCodeDefined(uiObj.ODOM)) oel = uiObj.ODOM;
  9087. if (classCodeDefined(uiObj.IDOM)) iel = uiObj.IDOM;
  9088. if (ote) {
  9089. var spanEl = document.createElement('span');
  9090. spanEl.innerHTML = ote;
  9091. spanEl.style.pointerEvents = 'none';
  9092. var oldSpans = oel.getElementsByTagName('span');
  9093. var bInserted = false;
  9094. for (var i = 0; i < oldSpans.length; i++) oel.removeChild(oldSpans[i]);
  9095. oel.insertBefore(spanEl, oel.firstChild)
  9096. }
  9097. if (oel && iel)
  9098. if (disc)
  9099. if (re)
  9100. els.push(oel, iel);
  9101. else
  9102. els.push(iel, oel);
  9103. else
  9104. els.push(oel);
  9105. else {
  9106. if (oel) els.push(oel);
  9107. if (iel) els.push(iel)
  9108. }
  9109. if (id) {
  9110. if (iel)
  9111. iel.id = id;
  9112. else if (oel)
  9113. oel.id = id;
  9114. uiObj.ID = id
  9115. }
  9116. if (name) uiObj.NAME = name;
  9117. if (iel) {
  9118. if (cli) iel.className = cli;
  9119. if (accK) iel.accessKey = accK;
  9120. if (classCodeDefined(ch)) iel.checked = ch;
  9121. iel.disabled = di;
  9122. if (classCodeDefined(ma)) iel.max = ma;
  9123. if (classCodeDefined(mal)) iel.maxLength = mal;
  9124. if (classCodeDefined(mi)) iel.min = mi;
  9125. if (plh) iel.placeholder = plh;
  9126. if (name) iel.name = name;
  9127. if (classCodeDefined(ro)) iel.readonly = ro;
  9128. if (classCodeDefined(step)) iel.step = step;
  9129. if (classCodeDefined(va)) iel.value = va;
  9130. if (classCodeDefined(oncl)) iel.onclick = oncl;
  9131. if (classCodeDefined(onch)) iel.onchange = onch;
  9132. if (classCodeDefined(onwa) && uiObj.WARNING) iel.onchange = onwa;
  9133. if (sti) iel.style.cssText = sti
  9134. }
  9135. if (oel) {
  9136. if (classCodeDefined(onclo)) oel.onclick = onclo;
  9137. if (sto) oel.style.cssText = sto
  9138. }
  9139. var fel = els[0];
  9140. if (fel) {
  9141. if (cl) fel.className = cl;
  9142. if (st) fel.style.cssText = st
  9143. } else
  9144. fel = parent;
  9145. var oldDef = deepCopy(_THUI.$def);
  9146. if (classCodeDefined(_cl)) _THUI.$def._class = _cl;
  9147. if (classCodeDefined(_disc)) _THUI.$def._disclose = _disc;
  9148. if (classCodeDefined(_name)) _THUI.$def._name = _name;
  9149. if (classCodeDefined(_di)) _THUI.$def._disabled = _di;
  9150. if (classCodeDefined(_no)) _THUI.$def._nodisplay = _no;
  9151. if (classCodeDefined(_re)) _THUI.$def._reverse = _re;
  9152. if (classCodeDefined(_st)) _THUI.$def._style = _st;
  9153. if (classCodeDefined(_ty)) _THUI.$def._type = _ty;
  9154. if (_oncl) _THUI.$def._onclick = _oncl;
  9155. if (_onch) _THUI.$def._onchange = _onch;
  9156. if (_onwa) _THUI.$def._onwarning = _onwa;
  9157. for (var i in uiObj) {
  9158. if (!uiObj.hasOwnProperty(i)) continue;
  9159. var o = uiObj[i];
  9160. switch (classCode(o)) {
  9161. case CC_OBJECT:
  9162. fel = _THUI.appendUI(fel, o, uiPrefix + uiName, i);
  9163. break;
  9164. case CC_ARRAY:
  9165. for (var j = 0; j < o.length; j++)
  9166. if (classCodeIs(o[j], CC_OBJECT)) fel = _THUI.appendUI(fel, o[j], uiPrefix + uiName, i);
  9167. break
  9168. }
  9169. }
  9170. _THUI.$def = oldDef;
  9171. els.forEach(function(e) {
  9172. if (no)
  9173. e.style.display = 'none';
  9174. else
  9175. e.style.display = '';
  9176. if (classCodeDefined(ti)) e.title = ti;
  9177. if (e !== uiObj.IDOM && e !== uiObj.ODOM) parent.appendChild(e)
  9178. });
  9179. uiObj.IDOM = iel;
  9180. uiObj.ODOM = oel;
  9181. Object.defineProperties(uiObj, {IDOM: {enumerable: false}, ODOM: {enumerable: false}});
  9182. return parent
  9183. };
  9184. })()

QingJ © 2025

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