您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Saves state of roads in area and it finds changes between history snapshots.
当前为
// ==UserScript== // @name WME Road History // @name:pl WME Road History // @description Saves state of roads in area and it finds changes between history snapshots. // @description:pl Zapisuje stan obszaru mapy i tworzy historię zmian pomiędzy "migawkami" mapy. // @include https://www.waze.com/editor/* // @include https://www.waze.com/*/editor/* // @include https://editor-beta.waze.com/* // @version 1.0.33 // @grant none // @namespace https://greasyfork.org/pl/scripts/8593-wme-road-history // @copyright 2015 wlodek76 // @credits FZ69617 tips and tricks // ==/UserScript== var wmech_version = "1.0.33"; var epsg900913 = new OpenLayers.Projection("EPSG:900913"); var epsg4326 = new OpenLayers.Projection("EPSG:4326"); var lang = {code:'en', amonly : 'Tools for Area Managers or L3 editors.', trAB : 'Time Restrictions (A do B):', trBA : 'Time Restrictions (B do A):', removedtr : 'Removed TR turn: ', changedtr : 'Changed TR turn: ', addedtr : 'Added TR turn: ', removed_uturn : 'Removed U-Turn: ', added_uturn : 'Added U-Turn: ', veh1 : 'Trucks', veh2 : 'Public Transportation', veh3 : 'Taxis', veh4 : 'Buses', veh5 : 'HOV - 2', veh6 : 'HOV - 3', veh7 : 'RV', veh8 : 'Towing vehicles', veh9 : 'Motorcycles', veh10 : 'Private vehicles', veh11 : 'Hazardous materials', exceptvehicles : 'Except vehicles: ', allweek : 'All Week', day1 : 'Su', day2 : 'Mo', day3 : 'Tu', day4 : 'We', day5 : 'Th', day6 : 'Fr', day7 : 'Sa', allday : 'All Day', atob : 'A to B', btoa : 'B to A', none : 'None', trbefore : 'Time restrictions before:', trafter : 'Time restrictions:', tollchange : 'Changed: ', tollpart : 'Toll Road Partially', tollfree : 'Toll Road Free', toll : 'Toll Road', changename : 'Street: ', changecity : 'City: ', level : 'Level: ', changedgeom : 'Changed geometry', into : 'to ', to : 'to', noname : 'No name', removedturn : 'Removed turn: ', addedturn : 'Added turn: ', road1 : 'Street', road2 : 'Primary Street', road3 : 'Freeway', road4 : 'Ramp', road5 : 'Walking Trail', road6 : 'Major Highway', road7 : 'Minor Highway', road8 : 'Dirt road / 4x4 Trail', road10 : 'Pedestrian Boardwalk', road17 : 'Private Road', road18 : 'Railroad', road19 : 'Runway / Taxiway', road20 : 'Parking Lot Road', road21 : 'Service Road', roadtype : 'RoadType(', dirchange0 : '<b class=wmeroadhistory_error>Removed direction</b>', dirchange1 : 'Changed to <b class=wmeroadhistory_error>One-way</b>', dirchange2 : 'Changed to <b class=wmeroadhistory_error>Two-way</b>', dirchangerev : '<b class=wmeroadhistory_error>Reversed direction</b>', dirchangeadd : '<b class=wmeroadhistory_error>Added direction</b>', newsegment : 'New', sec : 'sec.', prev : 'Newest', next : 'Oldest', stop : 'Stop', changes: 'Changes', segments: 'Segments', edits: 'Edits', scanarea: 'Scan Area' }; var langPL = {code:'pl', amonly : 'Narzędzie przeznaczone dla Area Manager lub edytorów L3.', trAB : 'Ograniczenia czasowe (A do B):', trBA : 'Ograniczenia czasowe (B do A):', removedtr : 'Usunięty TR skrętu: ', changedtr : 'Zmieniony TR skrętu: ', addedtr : 'Dodany TR skrętu: ', removed_uturn : 'Usunięte zawracanie: ', added_uturn : 'Dodane zawracanie: ', veh1 : 'Ciężarówki', veh2 : 'Transport Publiczny', veh3 : 'Taksówki', veh4 : 'Autobusy', veh5 : 'Więcej niż 2 pasażerów (HOV - 2)', veh6 : 'Więcej niż 3 pasażerów (HOV - 3)', veh7 : 'Kamper', veh8 : 'Pojazdy holujące', veh9 : 'Motocykle', veh10 : 'Samochody prywatne', veh11 : 'Materiały niebezpieczne', exceptvehicles : 'Z wyjątkiem pojazdów: ', allweek : 'Każdy tydzień', day1 : 'Nd', day2 : 'Pon', day3 : 'Wt', day4 : 'Śr', day5 : 'Czw', day6 : 'Pt', day7 : 'Sob', allday : 'Cały dzień', atob : 'A do B', btoa : 'B do A', none : 'Brak', trbefore : 'Poprzednie ograniczenia czasowe:', trafter : 'Ograniczenia czasowe:', tollchange : 'Zmiana: ', tollpart : 'Droga częściowo płatna', tollfree : 'Droga bezpłatna', toll : 'Droga płatna', changename : 'Nazwa: ', changecity : 'Miasto: ', level : 'Poziom: ', changedgeom : 'Zmiana geometrii', into : 'w ', to : 'do', noname : 'Bez nazwy', removedturn : 'Usunięto skręt: ', addedturn : 'Dodano skręt: ', road1 : 'Ulica', road2 : 'Główna ulica', road3 : 'Autostrada / Droga ekspresowa', road4 : 'Wjazd / Zjazd', road5 : 'Ścieżka dla pieszych', road6 : 'Droga krajowa', road7 : 'Droga wojewódzka', road8 : 'Droga gruntowa', road10 : 'Deptak', road17 : 'Droga prywatna', road18 : 'Tory kolejowe / tramwajowe', road19 : 'Pas startowy / Droga kołowania', road20 : 'Droga wewnętrzna', road21 : 'Droga serwisowa', roadtype : 'RoadType(', dirchange0 : '<b class=wmeroadhistory_error>Usunięto kierunkowość</b>', dirchange1 : 'Zmieniono na <b class=wmeroadhistory_error>Jednokierunkowa</b>', dirchange2 : 'Zmieniono na <b class=wmeroadhistory_error>Dwukierunkowa</b>', dirchangerev : '<b class=wmeroadhistory_error>Odwrócono kierunkowość</b>', dirchangeadd : '<b class=wmeroadhistory_error>Dodano kierunkowość</b>', newsegment : 'Nowy', sec : 'sek.', prev : 'Nowsze', next : 'Starsze', stop : 'Stop', changes: 'Zmiany', segments: 'Segmentów', edits: 'Edycje', scanarea: 'Skanuj Obszar' }; var DIFF_DIR = 0x01; var DIFF_TYPE = 0x02; var DIFF_TURNS = 0x04; var DIFF_NAMES = 0x08; var DIFF_CITY = 0x10; var DIFF_TR = 0x20; var DIFF_LEVEL = 0x40; var DIFF_GEOM = 0x80; var DIFF_TOLL = 0x100; var DIFF_TS = 0x200; var last_LONLAT; var last_ZOOM; var wazepending; var rec_xy1; var rec_xy2; var rec = false; var rec_direction = 1; var rec_loop_count = 0; var scanned_segments_list = ''; var scanned_segments = 0; var scanned_segments_prev = 0; var added_segments = 0; var added_segments_prev = 0; var added_changes = 0; var added_changes_prev = 0; var rec_zoom = 5; var rec_elapsed_time = 0; var wazeDataBaseName = 'wazeDB'; var wazeDB; var readconfig = 0; var LastTimeScan = 0; var ShowHistMode = 2; var pageEdits = 0; var prevScroll = 0; var userinfoDispPrev = ''; var showturn = [0,0,0,0]; //------------------------------------------------------------------------------------------------ window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction; window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange if (!window.indexedDB) { window.alert("Your browser doesn't support a stable version of IndexedDB.") } //------------------------------------------------------------------------------------------------ var openrequest = window.indexedDB.open( wazeDataBaseName, 1 ); openrequest.onsuccess = function(event) { wazeDB = event.target.result; console.log("WMERoadHistory.DataBase.OK = ", openrequest.result.name ); }; openrequest.onerror = function(event) { }; openrequest.onupgradeneeded = function(event) { var db = event.target.result; var objectStore1 = db.createObjectStore("segments", { keyPath: "ID", autoIncrement: false }); objectStore1.createIndex("T", "T", { unique: false }); objectStore1.transaction.oncomplete = function(event) { } var objectStore2 = db.createObjectStore("changes", { keyPath: "nr", autoIncrement: true }); objectStore2.createIndex("T", "T", { unique: false }); objectStore2.transaction.oncomplete = function(event) { } } //------------------------------------------------------------------------------------------------ function bootstrapWMERoadHistory() { var bGreasemonkeyServiceDefined = false; try { bGreasemonkeyServiceDefined = (typeof Components.interfaces.gmIGreasemonkeyService === "object"); } catch (err) { /* Ignore */ } if (typeof unsafeWindow === "undefined" || ! bGreasemonkeyServiceDefined) { unsafeWindow = ( function () { var dummyElem = document.createElement('p'); dummyElem.setAttribute('onclick', 'return window;'); return dummyElem.onclick(); }) (); } setTimeout(initialiseWMERoadHistory, 999); } //------------------------------------------------------------------------------------------------ function getElementsByClassName(classname, node) { if(!node) node = document.getElementsByTagName("body")[0]; var a = []; var re = new RegExp('\\b' + classname + '\\b'); var els = node.getElementsByTagName("*"); for (var i=0,j=els.length; i<j; i++) if (re.test(els[i].className)) a.push(els[i]); return a; } //-------------------------------------------------------------------------------------------------------- function getId(node) { return document.getElementById(node); } //-------------------------------------------------------------------------------------------------------- function precFloat(f, prec) { if (!isFinite(f)) return "—"; if (f < 0) { f -= Math.pow(0.1, prec) * 0.5; } else { f += Math.pow(0.1, prec) * 0.5; } var ipart = parseInt(f); var fpart = Math.abs(f - ipart); f = ipart; if (fpart == '0') fpart = '0.0'; fpart += '0000000000000000'; if (prec) f += fpart.substr(1, prec + 1); return f; } //-------------------------------------------------------------------------------------------------------- function createCRC32() { var c, i, j, crcTable = []; for (i = 0; i < 256; i++) { c = i; for (j = 0; j < 8; j++) { c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); } crcTable[i] = c; } return function (str) { var i, crc = 0 ^ (-1); for (i = 0; i < str.length; i++) { crc = (crc >>> 8) ^ crcTable[(crc ^ str.charCodeAt(i)) & 0xFF]; } return (crc ^ (-1)) >>> 0; }; } //-------------------------------------------------------------------------------------------------------- var crc32 = createCRC32(); //-------------------------------------------------------------------------------------------------------- function updateSaveButton() { var obj = getId('wmeroadhistory_scanarea'); if (rec == true) { obj.style.backgroundColor = '#C00000'; obj.style.color = '#FFFFFF'; obj.innerHTML = lang.stop; } else { obj.style.backgroundColor = ''; obj.style.color = ''; obj.innerHTML = lang.scanarea; } } //-------------------------------------------------------------------------------------------------------- function stopRec(finished) { var WM = unsafeWindow.Waze.map; rec = false; updateSaveButton(rec); WM.panTo(last_LONLAT); WM.zoomTo(last_ZOOM); if (ShowHistMode == 0) wmeroadhistoryTAB2(); if (ShowHistMode == 1) wmeroadhistoryTAB1(); if (ShowHistMode == 2) wmeroadhistoryTAB2(); } //-------------------------------------------------------------------------------------------------------- function getMidPointLen(seg) { var points, p1, p2; points = seg.geometry.components.length; var x = 0; var y = 0; var length = 0; if (points == 2) { p1 = seg.geometry.components[0]; p2 = seg.geometry.components[1]; x = p1.x + (p2.x - p1.x) * 0.5; y = p1.y + (p2.y - p1.y) * 0.5; var dx = p2.x - p1.x; var dy = p2.y - p1.y; length += Math.sqrt(dx*dx + dy*dy); } else { for(var i=0; i<points-1; i++) { p1 = seg.geometry.components[i + 0]; p2 = seg.geometry.components[i + 1]; var dx = p2.x - p1.x; var dy = p2.y - p1.y; length += Math.sqrt(dx*dx + dy*dy); } var midlen = length / 2.0; var length1 = 0; var length2 = 0; for(var i=0; i<points-1; i++) { p1 = seg.geometry.components[i + 0]; p2 = seg.geometry.components[i + 1]; var dx = p2.x - p1.x; var dy = p2.y - p1.y; length1 = length2; length2 = length2 + Math.sqrt(dx*dx + dy*dy); if (midlen >= length1 && midlen < length2) { var proc = (midlen - length1) / (length2 - length1); x = p1.x + (p2.x - p1.x) * proc; y = p1.y + (p2.y - p1.y) * proc; } } } var xyd = { x:x, y:y, d:length}; return xyd; } //------------------------------------------------------------------------------------------------ function changesDB(diff, segID, segtime, segeditor, segx, segy, segnames, segcity, before, after, segkind, segequal) { var item = { ID: segID, T: segtime, E: segeditor, D: diff, x: segx, y: segy, N: segnames, C: segcity, K: segkind, Q: segequal}; if (diff & DIFF_DIR) item.drA = before.D; if (diff & DIFF_DIR) item.drB = after.D; if (diff & DIFF_TYPE) item.tyA = before.K; if (diff & DIFF_TYPE) item.tyB = after.K; if (diff & DIFF_TURNS) item.arA = before.A; if (diff & DIFF_TURNS) item.arB = after.A; if (diff & DIFF_NAMES) item.naA = before.N; if (diff & DIFF_NAMES) item.naB = after.N; if (diff & DIFF_CITY) item.ciA = before.C; if (diff & DIFF_CITY) item.ciB = after.C; if (diff & DIFF_TR) item.trA = before.TR; if (diff & DIFF_TR) item.trB = after.TR; if (diff & DIFF_TS) item.tsA = before.TS; if (diff & DIFF_TS) item.tsB = after.TS; if (diff & DIFF_LEVEL) item.lvA = before.L; if (diff & DIFF_LEVEL) item.lvB = after.L; if (diff & DIFF_GEOM) item.geA = before.G; if (diff & DIFF_GEOM) item.geB = after.G; if (diff & DIFF_TOLL) item.tolA = before.TL; if (diff & DIFF_TOLL) item.tolB = after.TL; var objectStore = wazeDB.transaction('changes', 'readwrite').objectStore('changes'); var request = objectStore.add( item ); request.onsuccess = function() { added_changes++; } request.onerror = function() { } } //-------------------------------------------------------------------------------------------------------- function addDB(segID, roadtime, roadeditor, roaddir, roadkind, roadarrows, roadnames, roadcity, roadtr, roadts, roadlevel, roadgeom, roadtoll, roadx, roady, roadequal, roadpoints) { var objectStore = wazeDB.transaction('segments', 'readwrite').objectStore('segments'); var request = objectStore.get( segID ); request.onsuccess = function() { if(request.result) { var item = { ID: segID, T: roadtime, E: roadeditor, D: roaddir, K: roadkind, A: roadarrows, N: roadnames, C: roadcity, TR: roadtr, TS: roadts, L: roadlevel, G: roadgeom, TL: roadtoll, x: roadx, y: roady, Q:roadequal, P:roadpoints }; var rekord = request.result; var diff = 0; if (roaddir != rekord.D) diff |= DIFF_DIR; if (roadkind != rekord.K) diff |= DIFF_TYPE; if (roadarrows != rekord.A) diff |= DIFF_TURNS; if (roadnames != rekord.N) diff |= DIFF_NAMES; if (roadcity != rekord.C) diff |= DIFF_CITY; if (roadtr != rekord.TR) diff |= DIFF_TR; if (roadts != rekord.TS) diff |= DIFF_TS; if (roadlevel != rekord.L) diff |= DIFF_LEVEL; if (roadgeom != rekord.G) diff |= DIFF_GEOM; if (roadtoll != rekord.TL) diff |= DIFF_TOLL; if (diff) { if (roadtime == rekord.T) { var t = new Date(); roadtime = parseInt(t.getTime() / 1000); roadeditor = '?'; } changesDB(diff, segID, roadtime, roadeditor, roadx, roady, roadnames, roadcity, rekord, item, roadkind, roadequal); objectStore.put( item ); } } else { var item = { ID: segID, T: roadtime, E: roadeditor, D: roaddir, K: roadkind, A: roadarrows, N: roadnames, C: roadcity, TR: roadtr, TS:roadts, L: roadlevel, G: roadgeom, TL: roadtoll, x: roadx, y: roady, Q:roadequal, P:roadpoints }; objectStore.put( item ); added_segments++; } } request.onerror = function() { } } //-------------------------------------------------------------------------------------------------------- function SCAN_SEGMENTS() { for (var seg in Waze.model.segments.objects) { var segment = Waze.model.segments.get(seg); var attributes = segment.attributes; var line = getId(segment.geometry.id); var segID = attributes.id; if (line !== null && segID !== null) { var s = 'S' + segID + '·'; if (scanned_segments_list.indexOf(s) == -1) { scanned_segments_list += s; scanned_segments++; var roadtime = parseInt(attributes.updatedOn / 1000); var roadcreated = parseInt(attributes.createdOn / 1000); var roadequal = 0; if (roadtime == roadcreated) roadequal = 1; var roadeditor = parseInt(attributes.updatedBy); var user = Waze.model.users.get(roadeditor); if (user === null || typeof(user) === "undefined") roadeditor = '-'; else roadeditor = user.userName + '(' + user.normalizedLevel + ')'; var roadkind = parseInt(attributes.roadType); var roaddir = (attributes.fwdDirection ? 1 : 0) * 2 + (attributes.revDirection ? 1 : 0); var roadarrows = ''; for (s in attributes.fromConnections) { roadarrows += 'A' + parseInt(s) + '·'; } for (s in attributes.toConnections) { roadarrows += 'B' + parseInt(s) + '·'; } var roadnames = ''; var roadcity = ''; var street = Waze.model.streets.get(attributes.primaryStreetID); if (street != undefined) { if (street.name != null) { roadnames += street.name; } if (street.cityID != null) { roadcity = Waze.model.cities.get(street.cityID).isEmpty ? '·' : Waze.model.cities.get(street.cityID).name; } } for(var j=0; j<attributes.streetIDs.length; j++) { var sid = attributes.streetIDs[j]; if (sid !== null) { var street = Waze.model.streets.get(sid); if (street != undefined) { if (street.name != null) { if (roadnames != '') roadnames += ", "; roadnames += street.name; } } } } var roadtr = ''; var tr = attributes.fwdRestrictions; if (tr.length) { roadtr += 'AB¹'; for(var i=0; i<tr.length; i++) { roadtr += (tr[i].allDay==true ? 1 : 0) + '·'; roadtr += tr[i].days + '·'; roadtr += tr[i].description + '·'; roadtr += (tr[i].enabled ? 1 : 0) + '·'; roadtr += (tr[i].fromDate == null ? '' : tr[i].fromDate) + '·'; roadtr += (tr[i].fromTime == null ? '00:00' : tr[i].fromTime) + '·'; roadtr += (tr[i].toDate == null ? '' : tr[i].toDate) + '·'; roadtr += (tr[i].toTime == null ? '23:59' : tr[i].toTime) + '·'; roadtr += tr[i].vehicleTypes + '¹'; } roadtr += '²'; } var tr = attributes.revRestrictions; if (tr.length) { roadtr += 'BA¹'; for(var i=0; i<tr.length; i++) { roadtr += (tr[i].allDay==true ? 1 : 0) + '·'; roadtr += tr[i].days + '·'; roadtr += tr[i].description + '·'; roadtr += (tr[i].enabled ? 1 : 0) + '·'; roadtr += (tr[i].fromDate == null ? '' : tr[i].fromDate) + '·'; roadtr += (tr[i].fromTime == null ? '00:00' : tr[i].fromTime) + '·'; roadtr += (tr[i].toDate == null ? '' : tr[i].toDate) + '·'; roadtr += (tr[i].toTime == null ? '23:59' : tr[i].toTime) + '·'; roadtr += tr[i].vehicleTypes + '¹'; } roadtr += '²'; } var roadts = ''; for(trseg in attributes.toRestrictions) { var tr = attributes.toRestrictions[trseg]; roadts += 'B' + trseg + '¹'; for(var i=0; i<tr.length; i++) { roadts += (tr[i].allDay==true ? 1 : 0) + '·'; roadts += tr[i].days + '·'; roadts += tr[i].description + '·'; roadts += (tr[i].enabled ? 1 : 0) + '·'; roadts += (tr[i].fromDate == null ? '' : tr[i].fromDate) + '·'; roadts += (tr[i].fromTime == null ? '00:00' : tr[i].fromTime) + '·'; roadts += (tr[i].toDate == null ? '' : tr[i].toDate) + '·'; roadts += (tr[i].toTime == null ? '23:59' : tr[i].toTime) + '·'; roadts += tr[i].vehicleTypes + '¹'; } roadts += '²'; } for(trseg in attributes.fromRestrictions) { var tr = attributes.fromRestrictions[trseg]; roadts += 'A' + trseg + '¹'; for(var i=0; i<tr.length; i++) { roadts += (tr[i].allDay==true ? 1 : 0) + '·'; roadts += tr[i].days + '·'; roadts += tr[i].description + '·'; roadts += (tr[i].enabled ? 1 : 0) + '·'; roadts += (tr[i].fromDate == null ? '' : tr[i].fromDate) + '·'; roadts += (tr[i].fromTime == null ? '00:00' : tr[i].fromTime) + '·'; roadts += (tr[i].toDate == null ? '' : tr[i].toDate) + '·'; roadts += (tr[i].toTime == null ? '23:59' : tr[i].toTime) + '·'; roadts += tr[i].vehicleTypes + '¹'; } roadts += '²'; } var roadlevel = parseInt(attributes.level); var roadgeom = crc32(attributes.geometry.toString()); var roadtoll = (attributes.fwdToll ? 1 : 0) * 2 + (attributes.revToll ? 1 : 0); var xyd = getMidPointLen( segment ); var roadx = parseInt( xyd.x ); var roady = parseInt( xyd.y ); var roadpoints = new Array(); var points = attributes.geometry.components; var num = points.length; if (num >= 2) { roadpoints.push ( parseInt(points[0].x + 0.5) ); roadpoints.push ( parseInt(points[0].y + 0.5) ); roadpoints.push ( parseInt(points[num-1].x + 0.5) ); roadpoints.push ( parseInt(points[num-1].y + 0.5) ); } addDB(segID, roadtime, roadeditor, roaddir, roadkind, roadarrows, roadnames, roadcity, roadtr, roadts, roadlevel, roadgeom, roadtoll, roadx, roady, roadequal, roadpoints); } } } updateCountTime(); } //-------------------------------------------------------------------------------------------------------- function updateCountTime() { var tNow = new Date(); var t = parseInt( (tNow.getTime() - rec_elapsed_time) / 1000); var ts = ''; if (t < 60) { ts = t + ' ' + lang.sec; } else { var a = parseInt(t / 60); var b = t - a*60; if (b<10) ts = a + ':0' + b + ' min.' else ts = a + ':' + b + ' min.' } var bs = ''; var be = ''; if (added_changes) { bs = '<b>'; be = '</b>'; } getId('wmeroadhistory_log').innerHTML = lang.segments + ': ' + scanned_segments + ' ' + bs + lang.changes + ': ' + added_changes + be + ' ' + '(' + ts + ')'; } //-------------------------------------------------------------------------------------------------------- function selectShowTurn(segs) { for(var i=0; i<4; i++) { if (segs[i]==0) continue; var segment = Waze.model.segments.get( segs[i] ); if (segment !== undefined) { var line = getId(segment.geometry.id); if (line !== null) { var color = line.getAttribute("stroke"); var opacity = line.getAttribute("stroke-opacity"); var lineWidth = line.getAttribute("stroke-width"); var kol1 = '#FE61FE'; var kol2 = '#FE01FE'; var selected = false; if (opacity == 1 || lineWidth == 9) selected = true; if (color == kol1) selected = false; if (color == kol2) selected = false; if (!selected) { if (i < 2) { line.setAttribute("stroke", "#dd7700"); line.setAttribute("stroke-opacity", 0.001 ); line.setAttribute("stroke-width", 2); } else if (i == 2) { line.setAttribute("stroke", kol1); line.setAttribute("stroke-opacity", 0.6 ); line.setAttribute("stroke-width", 9); } else if (i == 3) { line.setAttribute("stroke", kol2); line.setAttribute("stroke-opacity", 0.8 ); line.setAttribute("stroke-width", 9); } } } } } } //-------------------------------------------------------------------------------------------------------- function wmeroadhistoryLOOPSEL() { //--------------zaznaczenie segmentów selectShowTurn(showturn); } //-------------------------------------------------------------------------------------------------------- function wmeroadhistoryLOOP() { if (scanned_segments != scanned_segments_prev || added_changes != added_changes_prev) { scanned_segments_prev = scanned_segments; added_changes_prev = added_changes; updateCountTime(); } //--------------przywrócenie pozycji sidebar, która resetuje się po zaznaczeniu segmentu if (getId('wmeroadhistory_scanarea').onclick == null) { getId('wmeroadhistory_list').innerHTML = '<p class=wmeroadhistory_amonly>' + lang.amonly + '</p>'; } var scanarea = getId('wmeroadhistory_scanarea'); var tab = getId('wmeroadhistory_tab'); var sidebar = getId('sidebar'); var userinfoDisp = getId('user-info').style.display; if (tab.className == 'active') { if (userinfoDisp == 'block') { if (userinfoDisp != userinfoDispPrev) { sidebar.scrollTop = prevScroll; //alert('sidebar restore'); } prevScroll = sidebar.scrollTop; } userinfoDispPrev = userinfoDisp; } if (rec) { var p = wazepending.className.indexOf("hidden"); if (p >= 0) { var WM = unsafeWindow.Waze.map; var zoom = WM.getZoom(); var W = WM.getSize().w; var H = WM.getSize().h; if (zoom == rec_zoom) { W -= 30; H -= 30; rec_loop_count++; SCAN_SEGMENTS(); var cent = WM.getCenter(); if (rec_direction == 1 && cent.lon > rec_xy2.lon) rec_direction = 2; if (rec_direction == 3 && cent.lon < rec_xy1.lon) rec_direction = 4; if (rec_direction == 1) WM.pan( W, 0); else if (rec_direction == 2) { WM.pan( 0, H); rec_direction = 3; } else if (rec_direction == 3) WM.pan(-W, 0); else if (rec_direction == 4) { WM.pan( 0, H); rec_direction = 1; } if (cent.lon > rec_xy2.lon && cent.lat < rec_xy2.lat) { stopRec(true); LastTimeScan = rec_elapsed_time; } } } } } //-------------------------------------------------------------------------------------------------------- function wmeroadhistorySCANAREA() { var WM = unsafeWindow.Waze.map; if (rec) { stopRec(false); } else { last_LONLAT = WM.getCenter(); last_ZOOM = WM.getZoom(); var W = WM.getSize().w; var H = WM.getSize().h; var e1 = new OL.Geometry.Point(0, 0); var e2 = new OL.Geometry.Point(W, H); rec_xy1 = WM.getLonLatFromViewPortPx(e1); rec_xy2 = WM.getLonLatFromViewPortPx(e2); rec_direction = 1; getId('wmeroadhistory_log').innerHTML = ' '; scanned_segments_list = ''; scanned_segments = 0; scanned_segments_prev = 0; added_segments = 0; added_segments_prev = 0; added_changes = 0; added_changes_prev = 0; var tNow = new Date(); rec_elapsed_time = tNow.getTime(); rec_zoom = last_ZOOM + 1; if (rec_zoom < 5) rec_zoom = 5; if (rec_zoom > 10) rec_zoom = 10; if (typeof Waze == 'undefined') Waze = unsafeWindow.Waze; if (typeof Waze.loginManager == 'undefined') Waze.loginManager = unsafeWindow.Waze.loginManager; if (typeof Waze.loginManager == 'undefined') Waze.loginManager = unsafeWindow.loginManager; if (Waze.loginManager !== null && Waze.loginManager.isLoggedIn()) { thisUser = Waze.loginManager.user; var lev = thisUser.normalizedLevel; if (thisUser !== null && (lev*lev >= lev+lev+lev || thisUser.isAreaManager)) { rec = true; WM.zoomTo(rec_zoom); WM.panTo(rec_xy1); updateSaveButton(rec); } } } } //-------------------------------------------------------------------------------------------------------- function htmlEntities(str) { return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/\'/g, ''').replace(/\r/g, ' ').replace(/\n/g, ' '); } //-------------------------------------------------------------------------------------------------------- function createLink(segx, segy, zoom, idsegments) { var WM = unsafeWindow.Waze.map; var docurl = document.URL; var docurlparams = docurl.split('&'); var layers = ''; var link = ''; for(var i=0; i<docurlparams.length; i++) { if (docurlparams[i].indexOf( 'waze.com' ) >= 0) link = docurlparams[i]; if (docurlparams[i].indexOf( 'layers' ) >= 0) layers = docurlparams[i]; } var lonlat = new OL.LonLat(segx, segy).transform(epsg900913, epsg4326); link += '&lon=' + parseInt(lonlat.lon * 1000000 + 0.5) / 1000000; link += '&lat=' + parseInt(lonlat.lat * 1000000 + 0.5) / 1000000; if (layers != '') link += '&' + layers; link += '&zoom=' + zoom; link += '&segments=' + idsegments; return link; } //-------------------------------------------------------------------------------------------------------- function gotoSEG(x, y, segid) { var WM = unsafeWindow.Waze.map; var xy = new OL.LonLat( x, y ); WM.panTo(xy); WM.zoomTo(6); showturn[0] = showturn[2]; showturn[1] = showturn[3]; showturn[2] = segid; showturn[3] = 0; } //-------------------------------------------------------------------------------------------------------- function gotoTURN(event) { var WM = unsafeWindow.Waze.map; var segs = event.target.id.split('_'); var seg1 = parseInt( segs[1] ); var segN = segs[2]; var seg2 = parseInt( segs[3] ); var objectStore = wazeDB.transaction('segments', 'readonly').objectStore('segments'); var request = objectStore.get( seg1 ); request.onsuccess = function() { var rekord = request.result; if(rekord) { if (rekord.P.length >= 2) { if (segN == 'A') { var x = rekord.P[ 0 ]; var y = rekord.P[ 1 ]; } else { var x = rekord.P[ rekord.P.length - 2 ]; var y = rekord.P[ rekord.P.length - 1 ]; } var xy = new OL.LonLat( x, y ); showturn[0] = showturn[2]; showturn[1] = showturn[3]; showturn[2] = seg1; showturn[3] = seg2; WM.panTo(xy); WM.zoomTo(6); } } } } //-------------------------------------------------------------------------------------------------------- function foundPELinkName( pe, seg2 ) { var objectStore = wazeDB.transaction('segments', 'readonly').objectStore('segments'); var request = objectStore.get( seg2 ); request.onsuccess = function() { var rekord = request.result; if (rekord) { if (rekord.N == '') pe.innerHTML = lang.into + lang.noname; else pe.innerHTML = lang.into + rekord.N; } } } //-------------------------------------------------------------------------------------------------------- function formatRestriction(str, bs, be) { var items = str.split('·'); var li = document.createElement('p'); if (items[4]=='') li.innerHTML += bs + lang.allweek + be + '<br>'; else li.innerHTML += bs + items[4] + ' <span style="font-weight:normal">..</span> ' + items[6] + be + '<br>'; if (items[0] == 0) li.innerHTML += bs + items[5] + ' - ' + items[7] + be + '<br>'; if (items[1] != 127) { var html = bs; if (items[1] & 0x01) { if (html!='') html+=' · '; html += lang.day1; } if (items[1] & 0x02) { if (html!='') html+=' · '; html += lang.day2; } if (items[1] & 0x04) { if (html!='') html+=' · '; html += lang.day3; } if (items[1] & 0x08) { if (html!='') html+=' · '; html += lang.day4; } if (items[1] & 0x10) { if (html!='') html+=' · '; html += lang.day5; } if (items[1] & 0x20) { if (html!='') html+=' · '; html += lang.day6; } if (items[1] & 0x40) { if (html!='') html+=' · '; html += lang.day7; } html += be + '<br>'; li.innerHTML += html; } if (items[2]!='') li.innerHTML += '<i>"' + htmlEntities(items[2]) + '"</i><br>'; if (items[8] != '-1') { li.innerHTML += lang.exceptvehicles + '<br>'; var html = bs; if ((items[8] & 0x01)==0) html += '- ' + lang.veh1 + '<br>'; if ((items[8] & 0x02)==0) html += '- ' + lang.veh2 + '<br>'; if ((items[8] & 0x04)==0) html += '- ' + lang.veh3 + '<br>'; if ((items[8] & 0x08)==0) html += '- ' + lang.veh4 + '<br>'; if ((items[8] & 0x10)==0) html += '- ' + lang.veh5 + '<br>'; if ((items[8] & 0x20)==0) html += '- ' + lang.veh6 + '<br>'; if ((items[8] & 0x40)==0) html += '- ' + lang.veh7 + '<br>'; if ((items[8] & 0x80)==0) html += '- ' + lang.veh8 + '<br>'; if ((items[8] & 0x100)==0) html += '- ' + lang.veh9 + '<br>'; if ((items[8] & 0x200)==0) html += '- ' + lang.veh10 + '<br>'; if ((items[8] & 0x400)==0) html += '- ' + lang.veh11 + '<br>'; html += be; li.innerHTML += html; } return li; } //-------------------------------------------------------------------------------------------------------- function showEdits(histmode, fromPage) { var objlist = getId('wmeroadhistory_list'); if (objlist == null) return; var range, transaction, store, index; if (histmode == 1) { range = IDBKeyRange.upperBound( 9999999999 ); transaction = wazeDB.transaction(["changes"], "readonly"); store = transaction.objectStore("changes"); index = store.index("T"); } else { range = IDBKeyRange.upperBound( 9999999999 ); transaction = wazeDB.transaction(["segments"], "readonly"); store = transaction.objectStore("segments"); index = store.index("T"); } var count = 0; var page = 0; var end = 0; var t = new Date(); var curtime = parseInt( t.getTime() / 1000); index.openCursor(range, "prev").onsuccess = function(event) { var cursor = event.target.result; if (cursor) { if (page < fromPage) { page++; cursor.advance( 50 ); } else if (count < 50) { var segid = cursor.value.ID; var segtime = cursor.value.T; var segeditor = cursor.value.E; var segnames = cursor.value.N; var segcity = cursor.value.C; var segx = cursor.value.x; var segy = cursor.value.y; var segkind = cursor.value.K; var segequal = cursor.value.Q; var h1 = document.createElement('h1'); var h2 = document.createElement('h2'); var ul = document.createElement('ul'); var h4 = document.createElement('h4'); var h5 = document.createElement('h5'); var h6 = document.createElement('h6'); var hr = document.createElement('hr'); if (histmode == 1) { if (cursor.value.drA != null && cursor.value.drB != null) { var li = document.createElement('li'); if (cursor.value.drA == 0) li.innerHTML = lang.dirchangeadd; if (cursor.value.drA == 1) { if (cursor.value.drB == 0) li.innerHTML = lang.dirchange0; if (cursor.value.drB == 2) li.innerHTML = lang.dirchangerev; if (cursor.value.drB == 3) li.innerHTML = lang.dirchange2; } if (cursor.value.drA == 2) { if (cursor.value.drB == 0) li.innerHTML = lang.dirchange0; if (cursor.value.drB == 1) li.innerHTML = lang.dirchangerev; if (cursor.value.drB == 3) li.innerHTML = lang.dirchange2; } if (cursor.value.drA == 3) { if (cursor.value.drB == 0) li.innerHTML = lang.dirchange0; if (cursor.value.drB == 1) li.innerHTML = lang.dirchange1; if (cursor.value.drB == 2) li.innerHTML = lang.dirchange1; } ul.appendChild(li); } var tyA = cursor.value.tyA; var tyB = cursor.value.tyB; if (tyA != null && tyB != null) { var li = document.createElement('li'); var html = ''; switch (tyA) { case 1: html += lang.road1; break; case 2: html += lang.road2; break; case 3: html += lang.road3; break; case 4: html += lang.road4; break; case 5: html += lang.road5; break; case 6: html += lang.road6; break; case 7: html += lang.road7; break; case 8: html += lang.road8; break; case 10: html += lang.road10; break; case 17: html += lang.road17; break; case 18: html += lang.road18; break; case 19: html += lang.road19; break; case 20: html += lang.road20; break; default: html += lang.roadtype + tyA + ')'; break; } html += ' » <b class=wmeroadhistory_kind >'; switch (tyB) { case 1: html += lang.road1; break; case 2: html += lang.road2; break; case 3: html += lang.road3; break; case 4: html += lang.road4; break; case 5: html += lang.road5; break; case 6: html += lang.road6; break; case 7: html += lang.road7; break; case 8: html += lang.road8; break; case 10: html += lang.road10; break; case 17: html += lang.road17; break; case 18: html += lang.road18; break; case 19: html += lang.road19; break; case 20: html += lang.road20; break; default: html += lang.roadtype + tyB + ')'; break; } html += '</b>'; li.innerHTML = html; ul.appendChild(li); } var arA = cursor.value.arA; var arB = cursor.value.arB; if (arA != null && arB != null) { var turnsA = arA.split('·'); var turnsB = arB.split('·'); for(var i=0; i<turnsA.length - 1; i++) { var p = arB.indexOf( turnsA[i] + '·' ); if (p < 0) { var seg1 = segid; var segN = turnsA[i].substr(0,1); var seg2 = turnsA[i].substr(1,12); var li = document.createElement('li'); if (seg1 == seg2) li.innerHTML += '<b class=wmeroadhistory_uturn >' + lang.removed_uturn + '</b>'; else li.innerHTML += '<b class=wmeroadhistory_error >' + lang.removedturn + '</b>'; var pe = document.createElement('p'); pe.innerHTML = 'link'; pe.className = 'wmeroadhistory_turnlink'; pe.id = 'turnlink_' + seg1 + '_' + segN + '_' + seg2; foundPELinkName( pe, parseInt(seg2) ); pe.onclick = (function(event) { gotoTURN(event); }); li.appendChild(pe); ul.appendChild(li); } } for(var i=0; i<turnsB.length - 1; i++) { var p = arA.indexOf( turnsB[i] + '·' ); if (p < 0) { var seg1 = segid; var segN = turnsB[i].substr(0,1); var seg2 = turnsB[i].substr(1,12); var li = document.createElement('li'); if (seg1 == seg2) li.innerHTML += '<b class=wmeroadhistory_uturn >' + lang.added_uturn + '</b>'; else li.innerHTML += '<b class=wmeroadhistory_error >' + lang.addedturn + '</b>'; var pe = document.createElement('p'); pe.innerHTML = 'link'; pe.className = 'wmeroadhistory_turnlink'; pe.id = 'turnlink_' + seg1 + '_' + segN + '_' + seg2; foundPELinkName( pe, parseInt(seg2) ); pe.onclick = (function(event) { gotoTURN(event); }); li.appendChild(pe); ul.appendChild(li); } } } if (cursor.value.naA != null && cursor.value.naB != null) { var li = document.createElement('li'); li.innerHTML = lang.changename + cursor.value.naA + ' » ' + cursor.value.naB; ul.appendChild(li); } if (cursor.value.ciA != null && cursor.value.ciB != null) { var li = document.createElement('li'); li.innerHTML = lang.changecity + cursor.value.ciA + ' » ' + cursor.value.ciB; ul.appendChild(li); } if (cursor.value.geA != null && cursor.value.geB != null) { var li = document.createElement('li'); li.innerHTML = lang.changedgeom; ul.appendChild(li); } if (cursor.value.lvA != null && cursor.value.lvB != null) { var li = document.createElement('li'); li.innerHTML = lang.level + cursor.value.lvA + ' » ' + cursor.value.lvB; ul.appendChild(li); } if (cursor.value.tolA != null && cursor.value.tolB != null) { var li = document.createElement('li'); if (cursor.value.tolA == 0) li.innerHTML += lang.tollfree; if (cursor.value.tolA == 1) li.innerHTML += lang.tollpart; if (cursor.value.tolA == 2) li.innerHTML += lang.tollpart; if (cursor.value.tolA == 3) li.innerHTML += lang.toll; if (cursor.value.tolB == 0) li.innerHTML += ' » <b class=wmeroadhistory_toll>' + lang.tollfree + '</b>'; if (cursor.value.tolB == 1) li.innerHTML += ' » <b class=wmeroadhistory_toll>' + lang.tollpart + '</b>'; if (cursor.value.tolB == 2) li.innerHTML += ' » <b class=wmeroadhistory_toll>' + lang.tollpart + '</b>'; if (cursor.value.tolB == 3) li.innerHTML += ' » <b class=wmeroadhistory_toll>' + lang.toll + '</b>'; ul.appendChild(li); } var trBefore = cursor.value.trA; var trAfter = cursor.value.trB; if (trBefore != null && trAfter != null) { var before = trBefore.split('²'); var after = trAfter.split('²'); var abBefore = ''; var abAfter = ''; var baBefore = ''; var baAfter = ''; for(var i=0; i<before.length - 1; i++) { if (before[i].indexOf('AB¹') == 0) abBefore = before[i]; if (before[i].indexOf('BA¹') == 0) baBefore = before[i]; } for(var i=0; i<after.length - 1; i++) { if (after[i].indexOf('AB¹') == 0) abAfter = after[i]; if (after[i].indexOf('BA¹') == 0) baAfter = after[i]; } if (abBefore != abAfter) { var li = document.createElement('li'); li.innerHTML = '<b class=wmeroadhistory_trafter>' + lang.trAB + '</b>'; ul.appendChild(li); if (abAfter == '') { var li = document.createElement('p'); li.innerHTML = '<b class=wmeroadhistory_trafter>' + lang.none + '</b>'; ul.appendChild(li); } else { var lines = abAfter.split('¹'); for(var i=1; i<lines.length-1; i++) { var li = formatRestriction( lines[i], '<b class=wmeroadhistory_trafter>', '</b>'); ul.appendChild(li); } } var lines = abBefore.split('¹'); for(var i=1; i<lines.length-1; i++) { var li = formatRestriction( lines[i], '', ''); li.className = 'wmeroadhistory_trbefore'; ul.appendChild(li); } } if (baBefore != baAfter) { var li = document.createElement('li'); li.innerHTML = '<b class=wmeroadhistory_trafter>' + lang.trBA + '</b>'; ul.appendChild(li); if (baAfter == '') { var li = document.createElement('p'); li.innerHTML = '<b class=wmeroadhistory_trafter>' + lang.none + '</b>'; ul.appendChild(li); } else { var lines = baAfter.split('¹'); for(var i=1; i<lines.length-1; i++) { var li = formatRestriction( lines[i], '<b class=wmeroadhistory_trafter>', '</b>'); ul.appendChild(li); } } var lines = baBefore.split('¹'); for(var i=1; i<lines.length-1; i++) { var li = formatRestriction( lines[i], '', ''); li.className = 'wmeroadhistory_trbefore'; ul.appendChild(li); } } } var trBefore = cursor.value.tsA; var trAfter = cursor.value.tsB; if (trBefore != null && trAfter != null) { var before = trBefore.split('²'); var after = trAfter.split('²'); for(var i=0; i<before.length - 1; i++) { var bi = before[i].split('¹'); var aifound; for(var i=0; i<after.length - 1; i++) { var ai = after[i].split('¹'); if (ai[0] == bi[0]) { aifound = ai; } } if (aifound && aifound.length > 2) { var li = document.createElement('li'); li.innerHTML = '<b class=wmeroadhistory_trturn>' + lang.changedtr + '</b>'; var seg1 = segid; var segN = bi[0].substr(0,1); var seg2 = bi[0].substr(1,12); var pe = document.createElement('p'); pe.innerHTML = 'link'; pe.className = 'wmeroadhistory_turnlink'; pe.id = 'turnlink_' + seg1 + '_' + segN + '_' + seg2; foundPELinkName( pe, parseInt(seg2) ); pe.onclick = (function(event) { gotoTURN(event); }); li.appendChild(pe); ul.appendChild(li); if (aifound.length <= 2) { var li = document.createElement('p'); li.innerHTML = '<b class=wmeroadhistory_trturn>' + lang.none + '</b>'; ul.appendChild(li); } else { for(var k=1; k<aifound.length-1; k++) { var li = formatRestriction( aifound[k], '<b class=wmeroadhistory_trturn>', '</b>'); ul.appendChild(li); } } for(var k=1; k<bi.length-1; k++) { var li = formatRestriction( bi[k], '', ''); ul.appendChild(li); } } else { var li = document.createElement('li'); li.innerHTML = '<b class=wmeroadhistory_trturn>' + lang.removedtr + '</b>'; var seg1 = segid; var segN = bi[0].substr(0,1); var seg2 = bi[0].substr(1,12); var pe = document.createElement('p'); pe.innerHTML = 'link'; pe.className = 'wmeroadhistory_turnlink'; pe.id = 'turnlink_' + seg1 + '_' + segN + '_' + seg2; foundPELinkName( pe, parseInt(seg2) ); pe.onclick = (function(event) { gotoTURN(event); }); li.appendChild(pe); ul.appendChild(li); //var li = document.createElement('p'); //li.innerHTML = '<b class=wmeroadhistory_trturn>' + lang.none + '</b>'; //ul.appendChild(li); for(var k=1; k<bi.length-1; k++) { var li = formatRestriction( bi[k], '', ''); ul.appendChild(li); } } } for(var i=0; i<after.length - 1; i++) { var ai = after[i].split('¹'); var p = trBefore.indexOf( ai[0] + '¹' ); if (p < 0) { var li = document.createElement('li'); li.innerHTML = '<b class=wmeroadhistory_trturn>' + lang.addedtr + '</b>'; var seg1 = segid; var segN = ai[0].substr(0,1); var seg2 = ai[0].substr(1,12); var pe = document.createElement('p'); pe.innerHTML = 'link'; pe.className = 'wmeroadhistory_turnlink'; pe.id = 'turnlink_' + seg1 + '_' + segN + '_' + seg2; foundPELinkName( pe, parseInt(seg2) ); pe.onclick = (function(event) { gotoTURN(event); }); li.appendChild(pe); ul.appendChild(li); for(var k=1; k<ai.length-1; k++) { var li = formatRestriction( ai[k], '<b class=wmeroadhistory_trturn>', '</b>'); ul.appendChild(li); } } } } } var t = new Date; t.setTime( segtime * 1000 ); var czas = t.toLocaleDateString() + ', ' + t.toLocaleTimeString().substr(0, 5); if (segnames == '') h1.innerHTML = '<b>' + lang.noname + '</b>'; else h1.innerHTML = '<b>' + htmlEntities(segnames) + '</b>'; h1.onclick = (function() { gotoSEG(segx, segy, segid); }); if (segkind == 1) h1.style.color = '#488193'; // street else if (segkind == 2) h1.style.color = '#488193'; // primary street else if (segkind == 3) h1.style.color = '#488193'; // freeways else if (segkind == 4) h1.style.color = '#488193'; // ramps else if (segkind == 6) h1.style.color = '#488193'; // major highway else if (segkind == 7) h1.style.color = '#488193'; // minor highway else if (segkind == 8) h1.style.color = '#404040'; // dirt roads else if (segkind == 18) h1.style.color = '#c0c0c0'; // pkp else if (segkind == 21) h1.style.color = '#808080'; // service road else if (segkind == 120) h1.style.color = '#808080'; // service road else h1.style.color = '#808080'; if (segequal && curtime - segtime < 7*24*3600) { h4.innerHTML = '<b class=wmeroadhistory_newseg>' + lang.newsegment + '</b>'; } h2.innerHTML = htmlEntities(segcity); h5.innerHTML = czas; h6.innerHTML = htmlEntities(segeditor); if (segeditor.indexOf('(1)') >= 0) h6.className = 'wmeroadhistory_rank1'; if (segeditor.indexOf('(2)') >= 0) h6.className = 'wmeroadhistory_rank2'; if (segeditor.indexOf('(3)') >= 0) h6.className = 'wmeroadhistory_rank3'; if (segeditor.indexOf('(4)') >= 0) h6.className = 'wmeroadhistory_rank4'; if (segeditor.indexOf('(5)') >= 0) h6.className = 'wmeroadhistory_rank5'; if (segeditor.indexOf('Inactive User') >= 0) h6.className = 'wmeroadhistory_rank0'; if (count < objlist.childNodes.length) { var div = objlist.childNodes[count]; div.innerHTML = ''; div.appendChild(h1); div.appendChild(h4); div.appendChild(h2); div.appendChild(ul); div.appendChild(h5); div.appendChild(h6); div.appendChild(hr); } else { var newdiv = document.createElement('div'); newdiv.appendChild(h1); newdiv.appendChild(h4); newdiv.appendChild(h2); newdiv.appendChild(ul); newdiv.appendChild(h5); newdiv.appendChild(h6); newdiv.appendChild(hr); objlist.appendChild(newdiv); } count++; cursor.continue(); } else { } } else { if (count == 0) { if (pageEdits > page) pageEdits = page - 1; if (pageEdits < 0) pageEdits = 0; } } } } //-------------------------------------------------------------------------------------------------------- function wmeroadhistoryTAB1() { ShowHistMode = 1; updateTabs(); //reset zaznaczonych segmentów showturn[0] = showturn[2]; showturn[1] = showturn[3]; showturn[2] = 0; showturn[3] = 0; var objlist = getId('wmeroadhistory_list'); objlist.innerHTML = ''; pageEdits = 0; showEdits(ShowHistMode, pageEdits); getId('wmeroadhistory_list_buttons_1').style.visibility = ''; getId('wmeroadhistory_list_buttons_2').style.visibility = ''; } //-------------------------------------------------------------------------------------------------------- function wmeroadhistoryTAB2() { ShowHistMode = 2; updateTabs(); //reset zaznaczonych segmentów showturn[0] = showturn[2]; showturn[1] = showturn[3]; showturn[2] = 0; showturn[3] = 0; var objlist = getId('wmeroadhistory_list'); objlist.innerHTML = ''; pageEdits = 0; showEdits(ShowHistMode, pageEdits); getId('wmeroadhistory_list_buttons_1').style.visibility = ''; getId('wmeroadhistory_list_buttons_2').style.visibility = ''; } //-------------------------------------------------------------------------------------------------------- function wmeroadhistoryPREV() { pageEdits--; if (pageEdits < 0) pageEdits = 0; showEdits(ShowHistMode, pageEdits); } //-------------------------------------------------------------------------------------------------------- function wmeroadhistoryNEXT() { pageEdits++; showEdits(ShowHistMode, pageEdits); } //-------------------------------------------------------------------------------------------------------- function wmeroadhistoryPREVDOWN() { pageEdits--; if (pageEdits < 0) pageEdits = 0; getId('sidebar').scrollTop = 0; showEdits(ShowHistMode, pageEdits); } //-------------------------------------------------------------------------------------------------------- function wmeroadhistoryNEXTDOWN() { pageEdits++; getId('sidebar').scrollTop = 0; showEdits(ShowHistMode, pageEdits); } //-------------------------------------------------------------------------------------------------------- function updateTabs() { if (ShowHistMode == 1) { getId('wmeroadhistory_tab1').className = 'wmeroadhistory_tab_active'; getId('wmeroadhistory_tab2').className = ''; } if (ShowHistMode == 2) { getId('wmeroadhistory_tab2').className = 'wmeroadhistory_tab_active'; getId('wmeroadhistory_tab1').className = ''; } } //-------------------------------------------------------------------------------------------------------- function initialiseWMERoadHistory() { var docurl = window.document.URL; if (docurl.indexOf( "/pl/" ) >=0 ) lang = langPL; var addon = document.createElement('section'); addon.id = "wmeroadhistory-addon"; addon.innerHTML = '' + '<div style="margin-bottom: 5px;"><b style="margin:0px; padding:0px;"><a href="https://greasyfork.org/pl/scripts/8593-wme-road-history" target="_blank"><u>WME Road History</u></a></b> v' + wmech_version + '</div>' + '<button id=wmeroadhistory_scanarea class="btn btn-default" style="min-width:150px; margin: 0px; "></button> ' + '<div id=wmeroadhistory_log style="margin-bottom:10px;"> </div>' + '<div class=wmeroadhistory_noselect>' + '<div id=wmeroadhistory_tab1>' + lang.changes + '</div>' + '<div id=wmeroadhistory_tab2>' + lang.edits + '</div>' + '<div id=wmeroadhistory_tab9></div>' + '</div>' + '<div id=wmeroadhistory_list_buttons_1 style="text-align: center; margin:0px; background: #f8f8f8; padding: 5px; visibility: hidden; ">' + '<button id=wmeroadhistory_prev class="btn btn-default" style="margin: 2px; padding:0px; font-weight:normal; height:20px; padding-left:20px; padding-right:20px; " ><< ' + lang.prev + '</button>' + '<button id=wmeroadhistory_next class="btn btn-default" style="margin: 2px; padding:0px; font-weight:normal; height:20px; padding-left:20px; padding-right:20px; " >' + lang.next + ' >></button>' + '</div>' + '<div id=wmeroadhistory_list></div>' + '<div id=wmeroadhistory_list_buttons_2 style="text-align: center; margin:0px; background: #f8f8f8; padding: 5px; visibility: hidden; ">' + '<button id=wmeroadhistory_prev2 class="btn btn-default" style="margin: 2px; padding:0px; font-weight:normal; height:20px; padding-left:20px; padding-right:20px; " ><< ' + lang.prev + '</button>' + '<button id=wmeroadhistory_next2 class="btn btn-default" style="margin: 2px; padding:0px; font-weight:normal; height:20px; padding-left:20px; padding-right:20px; " >' + lang.next + ' >></button>' + '</div>' + '<style>' + '.wmeroadhistory_hovbutton:hover { cursor:pointer; color: #0000FF; text-decoration: underline; }' + '#wmeroadhistory_list div { padding-left: 15px; border: 0px solid #f0f0f0; border-bottom-width: 1px; margin-top: 2px; }' + '#wmeroadhistory_list div { background-position: 0px 3px; background-repeat: no-repeat; }' + '#wmeroadhistory_list div { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAMCAIAAAA/PgD0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA7ElEQVR4nGWNQUvDQBSE34Z1N65dU0mMaSkoItriqVdP/nOP/gEPYkV6MSgloUVsTbPvjYd4qHT4Tt8wjAIA0PP7x+yz2rTh8EBfF9nN8EwpUgw8PL3W2+CdU0oB+Ppep7G+v72KXsrFspWecyASAES9I1dvZVYu9LxeGWuDgHZirZnXK90wQEJ72bBoH5vqJ+x3aWyj8zRpmRnYpWW+SBM9SLw39bL5Nz2xukh8JMB0lAfmIPIH83SUCxAJ4djZ8Wk/iLAgsEzyvndWCBFAAE0GaRqbIJI5My6yTqpq3XQfTQiPb+Xd5dBo3ZlfDOiS3+b9cP0AAAAASUVORK5CYII="); }' + '#wmeroadhistory_list h1 { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }' + '#wmeroadhistory_list h1 { margin: 0px; padding: 0px; line-height: 100%; font-size: 15px; display: inline-block; }' + '#wmeroadhistory_list h1:hover { cursor: pointer; color: #0D5270; text-decoration: underline; }' + '#wmeroadhistory_list h2 { margin: 0px; padding: 0px; line-height: 100%; color: #606060; font-size: 100%; }' + '#wmeroadhistory_list ul { margin: 0px; padding: 0px; margin-left: 30px; margin-top: 5px; font-family: Tahoma; font-size: 11px; margin-bottom:5px; color: #606060; line-height: 18px; }' + '#wmeroadhistory_list h4 { margin: 0px; padding: 0px; line-height: 100%; color: #606060; font-family: Tahoma; font-size: 11px; display: inline-block; }' + '#wmeroadhistory_list h5 { margin: 0px; padding: 0px; line-height: 100%; color: #606060; font-family: Tahoma; font-size: 11px; float:left; margin-top: 5px; }' + '#wmeroadhistory_list h6 { margin: 0px; padding: 0px; line-height: 100%; font-family: Tahoma; font-size: 11px; float:right; font-weight: normal; margin-top: 5px; }' + '#wmeroadhistory_list p { margin: 0px; }' + '#wmeroadhistory_list hr { margin: 0px; clear: both; border: 0px; outline: 0px; height: 5px; }' + '#wmeroadhistory_tab1 { font-size: 12px; display: inline-block; width: 100px; height: 30px; line-height: 30px; border: 1px solid #e0e0e0; border-radius: 5px 5px 0 0; border-bottom-width: 0px; text-align: center; }' + '#wmeroadhistory_tab2 { font-size: 12px; display: inline-block; width: 100px; height: 30px; line-height: 30px; border: 1px solid #e0e0e0; border-radius: 5px 5px 0 0; border-bottom-width: 0px; text-align: center; }' + '#wmeroadhistory_tab1:hover { background: #d0d0d0; cursor: pointer; }' + '#wmeroadhistory_tab2:hover { background: #d0d0d0; cursor: pointer; }' + '#wmeroadhistory_tab9 { width: 100%; height:1px; background: #e0e0e0; }' + '.wmeroadhistory_tab_active { font-weight: bold; background: #e9e9e9; }' + '.wmeroadhistory_tab_noactive { font-weight: normal; background: #f8f8f8; }' + '.wmeroadhistory_noselect { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }' + '.wmeroadhistory_rank0 { color: #808080 }' + '.wmeroadhistory_rank1 { color: #E12222 }' + '.wmeroadhistory_rank2 { color: #EB712D }' + '.wmeroadhistory_rank3 { color: #349B20 }' + '.wmeroadhistory_rank4 { color: #3176E9 }' + '.wmeroadhistory_rank5 { color: #C000C0 }' + '.wmeroadhistory_newseg { color: #ffffff; font-weight: bold; background: #4CD429; border-radius: 5px 5px 5px 5px; padding: 1px 5px 1px 5px; margin-left: 3px; }' + '.wmeroadhistory_turnlink { display: inline-block; color: #0091FF; text-decoration: underline; }' + '.wmeroadhistory_turnlink:hover { color: #000000; text-decoration: underline; cursor: pointer; }' + '.wmeroadhistory_turnlink { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }' + '.wmeroadhistory_error { color: #D72C2C }' + '.wmeroadhistory_kind { color: #404040 }' + '.wmeroadhistory_toll { color: #CC38CC }' + '.wmeroadhistory_trbefore { color: #808080 }' + '.wmeroadhistory_trafter { color: #D72C2C }' + '.wmeroadhistory_uturn { color: #808080 }' + '.wmeroadhistory_trturn { color: #D72C2C }' + '.wmeroadhistory_amonly { color: #59899e; font-weight:bold; }' + '</style>' ; var userTabs = getId('user-info'); var navTabs = getElementsByClassName('nav-tabs', userTabs)[0]; var tabContent = getElementsByClassName('tab-content', userTabs)[0]; var newtab = document.createElement('li'); newtab.innerHTML = '<a id=sidepanel-wmeroadhistory-tab href="#sidepanel-wmeroadhistory" data-toggle="tab" style="" >Road History</a>'; newtab.id = 'wmeroadhistory_tab'; navTabs.appendChild(newtab); addon.id = "sidepanel-wmeroadhistory"; addon.className = "tab-pane"; tabContent.appendChild(addon); if (typeof Waze == 'undefined') Waze = unsafeWindow.Waze; if (typeof Waze.loginManager == 'undefined') Waze.loginManager = unsafeWindow.Waze.loginManager; if (typeof Waze.loginManager == 'undefined') Waze.loginManager = unsafeWindow.loginManager; if (Waze.loginManager !== null && Waze.loginManager.isLoggedIn()) { thisUser = Waze.loginManager.user; var lev = thisUser.normalizedLevel; if (thisUser !== null && (lev*lev >= lev+lev+lev || thisUser.isAreaManager)) { getId('wmeroadhistory_scanarea').onclick = wmeroadhistorySCANAREA; getId('wmeroadhistory_tab1').onclick = wmeroadhistoryTAB1; getId('wmeroadhistory_tab2').onclick = wmeroadhistoryTAB2; getId('wmeroadhistory_prev').onclick = wmeroadhistoryPREV; getId('wmeroadhistory_next').onclick = wmeroadhistoryNEXT; getId('wmeroadhistory_prev2').onclick = wmeroadhistoryPREVDOWN; getId('wmeroadhistory_next2').onclick = wmeroadhistoryNEXTDOWN; } } updateSaveButton(); var list = document.getElementsByTagName("div"); for(var i=0; i<list.length; i++) { var id = list[i].id; var p = id.indexOf("PendingOperation"); if (p>=0) { wazepending = list[i]; } } window.setInterval(wmeroadhistoryLOOP, 500); window.setInterval(wmeroadhistoryLOOPSEL, 200); } //-------------------------------------------------------------------------------------------------------------- bootstrapWMERoadHistory();