您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Vrstva míst úprav pro nováčky Freedit L1+
// ==UserScript== // @name Freedit L1+ // @namespace https://gf.qytechs.cn/users/10038-janek250 // @author Janek250 & Martin Kolář & krizecek // @description Vrstva míst úprav pro nováčky Freedit L1+ // @include https://www.waze.com/editor/* // @include https://www.waze.com/*/editor/* // @include https://editor-beta.waze.com/* // @include https://beta.waze.com/* // @version 0.6.7.2 // @grant none // ==/UserScript== //-------------------------------------------------------------------------------------- FE_version = '0.6.7.2'; /* definice trvalých proměných */ var FE_data = []; var FE_dataLoad = false; var FE_dataCount = 0; var FE_colors = ['#00BBFF', '#FFAE00', '#FFFF00', '#5E8F47', '#FF0000']; //HTML barvy modrá = #00BBFF oranžová = #FFAE00 žlutá = #FFFF00 zelená = #5E8F47 červená = #FF0000 var FE_date = new Date(); var Fe_me = null; var FE_baseURLs = [new RegExp("https://www.waze.com/editor/"), new RegExp("https://www.waze.com/[^/]+/editor/"), new RegExp("https://editor-beta.waze.com/")]; var freedit_select_dataWaitForMergeEnd = false; var freedit_div_perma = null; var FE_url = '//www.wazer.cz/f/'; // var FE_url = '//freedit.local/'; // controllors keys settings var FE_controllorKey = localStorage.getItem('FE_controllorKey'); if (typeof FE_controllorKey != 'string') { FE_controllorKey = ''; } else if (FE_controllorKey == '') { FE_controllorKey = ''; // pokud jsi dostal klic pro kontrolory, sem ho prosim zadej! } // controllors keys settings var FE_controllorKeyEnable = localStorage.getItem('FE_controllorKeyEnable'); if (typeof FE_controllorKeyEnable != 'string') { FE_controllorKeyEnable = ''; } // online/offline status var FE_status = localStorage.getItem('FE_status'); if (FE_status === null) { // default status FE_status = 'on'; } console.log('WME Freedit Status: ' + FE_status); var FE_linksSettings = { 'add_new': FE_url + 'addFreedit.php?name={name}&link={link}®ion={region}&district={district}&added_by={added_by}', 'register_freedit': FE_url + 'giveMeEdit.php?editor={editor}&freedit={freedit}&state=1', 'send_freedit_to_control': FE_url + 'giveMeEdit.php?editor={editor}&freedit={freedit}', 'send_control_report': FE_url + 'sendControlMessage.php?freedit={freedit}&editor={editor}&key={key}', 'get_all_data_of_freedit': FE_url + 'getDataById.php?freedit={freedit}' }; // language settings // var FE_allowLanguage = ['cs', 'en']; var FE_allowLanguage = ['cs']; var FE_language = 'cs'; // default language var FE_translation = []; // cs translation FE_translation['cs'] = { 'link': 'https://www.waze.com/cs/editor/?env=row&lon={lon}&lat={lat}&zoom={zoom}', 'map_layer_state_0': 'Freedit: {id}\nVložil: {added_by}', 'map_layer_state_1': 'Freedit: {id}\nEdituje: {editor}', 'map_layer_state_2': 'Freedit: {id}\neditoval: {editor}\n ke kontrole', 'map_layer_state_3': 'Freedit: {id}\neditoval: {editor}\n HOTOVO, děkujeme', 'map_layer_state_4': 'Freedit: {id}\neditoval: {editor}\n CHYBA', 'tab_add_new_freedit': 'Formulář pro zadání nového', 'tab_freedit_table': 'Tabulka', 'tab_graphs': 'Grafy', 'tab_forum': 'Fórum', 'tab_signpost': 'Rozcestník', 'tab_status_message_online': 'Status: <a href="#" id="freedit-switch-on-off">{state}</a><br> Načteno: {freedit_count} F', 'tab_status_message_offline': 'Status: <a href="#" id="freedit-switch-on-off">{state}</a><br> Načteno: {freedit_count} F<br>Data pochází z data: {date}', 'tab_hot_tips_headline': '<br /><br /><b>K editaci:</b>', 'tab_hot_tips_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a> {attrs}', 'tab_editing_headline': '<br /><b>Edituji:</b><br />', 'tab_editing_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a></u> {editor}: {attrs}', 'tab_control_headline': '<br /><b>Ke kontrole:</b><br />', 'tab_control_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a></u> {editor}: {attrs}', 'tab_mistake_headline': '<br /><b>Přepracovat:</b><br />', 'tab_mistake_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a> {editor}: {attrs}', 'tab_my_complete_freedit_headline': '<br /><b>Moje hotové freedity:</b><br />', 'tab_my_complete_freedit_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a> {editor}: {attrs}', 'tab_bottom_legend': '<font size="1">Legenda:<br />G - oprava geometrie<br />K - kreslit nové uličky / parkoviště<br />O - kontrola odbočení / jednosměrek<br />N - kontrola názvu ulic / obce<br />A - Areály</font>', 'script_version': '<font size="1"><a href="https://www.waze.com/forum/viewtopic.php?f=22&t=136397" target="_blank">Script Freedit L1+ verze {version}</a></font>', 'add_new_form_error': 'Formulář není kompletní! Vyplň všechny údaje!', 'add_new_form_success': 'Nový freedit byl úspěšně zadán. Děkujeme!', 'register_editing_error': 'Formulář není kompletní! Vyplň všechny údaje!', 'register_editing_success': 'Úspěšně jsi se přihlásil k editování. Můžeš začít!', 'freedit_to_control_error': 'Formulář není kompletní! Vyplň všechny údaje!', 'freedit_to_control_success': 'Díky za opravení. V nejbližší době se na tvoje dílo podívá L3+ editor a upozorní tě na případné chyby.', 'control_message_error': 'Formulář není kompletní! Vyplň všechny údaje!', 'control_message_success': 'Díky za kontrolu!', 'msg_center_change_status': 'Změna stavu:', 'msg_center_change_status_0': '0', 'msg_center_change_status_1': 'přihlášen k editaci.', 'msg_center_change_status_2': 'odevzdáno.', 'msg_center_change_status_3': 'uzavřeno.', 'msg_center_change_status_4': 'vráceno s chybou.', // forms 'modal-window-close': 'Zavřít okno', 'add-new-form-name': 'Název:', 'add-new-form-permalink': 'Permalink:', 'add-new-form-shape': 'Tvar:', 'add-new-form-shape-1': '1 - Obdelník na ležato (výřez z obrazovky)', 'add-new-form-shape-2': '2 - Obdelník na stojato', 'add-new-form-shape-3': '3 - Čtverec', 'add-new-form-region': 'Kraj:', 'add-new-form-district': 'Okres:', 'add-new-form-attr-header': 'Co je potřeba udělat:', 'add-new-form-shape-g': 'G - oprava geometrie', 'add-new-form-shape-k': 'K - kreslit nové uličky / parkoviště', 'add-new-form-shape-o': 'O - kontrola odbočení / jednosměrek', 'add-new-form-shape-n': 'N - kontrola názvu ulic / obce', 'add-new-form-shape-a': 'A - areál', 'add-new-form-added-by': 'Vložil:', 'add-new-form-button': 'Přidat', 'register-editing-freedit-number': 'Číslo Freeditu:', 'register-editing-editor': 'Editor:', 'register-editing-freedit-state': 'Stav:', 'register-editing-freedit-state-1': '1 - Přihlásit se k editování', 'register-editing-freedit-state-2': '2 - Mám hotovo prosím zkontrolujte', 'register-editing-comment': 'Komentář:', 'register-editing-button': 'Odeslat', 'control-message-freedit-number': 'Číslo Freeditu:', 'control-message-editor': 'Editor:', 'control-message-state': 'Stav:', 'control-message-state-3': '3 - Zkontrolováno, bez výhrad', 'control-message-state-4': '4 - Nedostatky, nutná oprava', 'control-message-comment': 'Komentář:', 'control-message-button': 'Odeslat', 'send_error': 'Při odesílání formuláře došlo k chybě. Zkus to za chvíli znovu…', }; // en translation FE_translation['en'] = { }; //Obdelník na ležato var FE_shape1x = [0.245760,0.122880,0.061440,0.030720,0.015360,0.007680,0.003840,0.001920,0.000960,0.000480,0.000240]; var FE_shape1y = [0.088064,0.044032,0.022016,0.011008,0.005504,0.002752,0.001376,0.000688,0.000344,0.000172,0.000086]; //Obdelní na stojato var FE_shape2x = [0.075562,0.037781,0.018890,0.009445,0.004723,0.002361,0.001181,0.000590,0.000295,0.000148,0.000074]; var FE_shape2y = [0.088064,0.044032,0.022016,0.011008,0.005504,0.002752,0.001376,0.000688,0.000344,0.000172,0.000086]; //Čtverec var FE_shape3x = [0.136272,0.068136,0.034068,0.017034,0.008517,0.004259,0.002129,0.001065,0.000532,0.000266,0.000133]; var FE_shape3y = [0.088064,0.044032,0.022016,0.011008,0.005504,0.002752,0.001376,0.000688,0.000344,0.000172,0.000086]; // styles var FE_styles = '<style type="text/css">' + '#fe-modal-window-background { position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);z-index:99990; }' + '#fe-modal-window { position:fixed;width:900px;left:50%;margin-left:-450px;height:700px;top:50%;margin-top:-350px;z-index:99992;background:#ffffff;padding:20px; }' + '.fe-hot-tips {width:100%;height:300px;overflow-y:scroll;}' + '#FEmsg textarea {height: 140px;}' + '#FEmsg .header{background-color:#906090;}' + '#FEmsg .list-unstyled{overflow-y:auto;}' + '#FEmsg .problem-data{overflow-y:hidden;}' + '</style>'; if (FE_status == 'on') { console.log('WME Freedit: Start load data'); $.get(FE_url + 'getData.php', function(data) { localStorage.setItem("FE_data", JSON.stringify(data)); localStorage.setItem("FE_data_date", FE_date.toLocaleDateString()); for (var i in data) { FE_data[data[i].id] = data[i]; } FE_dataCount = FE_data.length; FE_dataLoad = true; }, 'json'); } else { data = JSON.parse(localStorage.getItem("FE_data")); for (var i in data) { FE_data[data[i].id] = data[i]; } FE_dataCount = FE_data.length; FE_dataLoad = true; } //Ošetření service Greasymonkey function freedit_bootstrap() { bGreasemonkeyServiceDefined = false; try { bGreasemonkeyServiceDefined = (typeof Components.interfaces.gmIGreasemonkeyService == 'object'); } catch (err) { /* Ignore */ } if (typeof unsafeWindow == 'undefined' || !bGreasemonkeyServiceDefined) { unsafeWindow = (function (){ dummyElem = document.createElement('p'); dummyElem.setAttribute ('onclick', 'return window;'); return dummyElem.onclick (); }); } /* Začátek kódu */ freedit_wait(); } //definování funkce a vzhled polygonu function AddRaidPolygon(raidLayer, groupPoints, groupColor, groupNumber) { mro_Map = Waze.map; mro_OL = OpenLayers; groupName = 'RaidGroup' + groupNumber; style = { //nastavení vzhledu polygonu strokeColor: groupColor, strokeOpacity: .7, //pruhlednost čáry strokeWidth: 2, //toušťka obvodové čáry fillColor: groupColor, fillOpacity: 0.10, //průhlednost výplně label: groupNumber, labelOutlineColor: 'black', //linka kolem textu labelOutlineWidth: 3, //šířka linky fontSize: 14, fontColor: groupColor, fontOpacity: .85, fontWeight: 'bold' }; attributes = { name: groupName, number: groupNumber }; pnt= []; for (i = 0; i < groupPoints.length; i++){ convPoint = new OpenLayers.Geometry.Point(groupPoints[i].lon,groupPoints[i].lat).transform(new OpenLayers.Projection('EPSG:4326'), mro_Map.getProjectionObject()); pnt.push(convPoint); } ring = new mro_OL.Geometry.LinearRing(pnt); polygon = new mro_OL.Geometry.Polygon([ring]); feature = new mro_OL.Feature.Vector(polygon,attributes,style); raidLayer.addFeatures([feature]); } //funkce vycuc lon / lat / zoom z permalinku function getQueryString(link, name) { pos = link.indexOf( name + '=' ) + name.length + 1; len = link.substr(pos).indexOf('&'); if (-1 == len) len = link.substr(pos).length; return link.substr(pos,len); } //funkce MMR?? function CurrentRaidLocation(raid_mapLayer) { mro_Map = Waze.map; for(i = 0; i < raid_mapLayer.features.length; i++){ raidMapCenter = mro_Map.getCenter(); raidCenterPoint = new OpenLayers.Geometry.Point(raidMapCenter.lon,raidMapCenter.lat); raidCenterCheck = raid_mapLayer.features[i].geometry.components[0].containsPoint(raidCenterPoint); if (raidCenterCheck === true) { raidLocationLabel = 'Editorův ráj - ' + $('.WazeControlLocationInfo').text(); setTimeout(function(){ $('.WazeControlLocationInfo').text(raidLocationLabel); },200); } } } //funkce inicializace MMR?? function InitMapRaidOverlay() { mro_Map = Waze.map; mro_OL = OpenLayers; mro_mapLayers = mro_Map.getLayersBy('uniqueName','Freedit L1+'); raid_mapLayer = new mro_OL.Layer.Vector('Freedit L1+', { displayInLayerSwitcher: true, uniqueName: 'Freedit L1+' }); // I18n.translations.en.layers.name['Freedit L1+'] = 'Freedit L1+'; mro_Map.addLayer(raid_mapLayer); // // *** // // Načtení stavu vrstvy zobrazena/skryta // // // // defaultně je vrstva zapnutá // var FE_visible = true; // // načte poslední uložený stav zobrazení vrstvy z localstorage // if (localStorage) { // var options = JSON.parse(localStorage.getItem("FE_options")); // FE_visible = options[0]; // console.log("WME Freedit: Options loaded."); // } // // uložení stavu zobrazení vrstvy při exitu WME // saveOptions = function() { // if (localStorage) { // var options = []; // FE_visible = raid_mapLayer.visibility; // options[0] = FE_visible; // localStorage.setItem("FE_options", JSON.stringify(options)); // console.log("WME Freedit: Options saved."); // } // } // window.addEventListener("beforeunload", saveOptions, false); // // zobrazení nebo skrytí vrstvy podle posledního uloženého stavu // raid_mapLayer.setVisibility(true); for (var i in FE_data) { actualFe = FE_data[i]; if (typeof actualFe == 'object') { switch(actualFe.shape) { case 1: zx = FE_shape1x; zy = FE_shape1y; break; case 2: zx = FE_shape2x; zy = FE_shape2y; break; default: zx = FE_shape3x; zy = FE_shape3y; } b1x = actualFe.lon - zx[actualFe.zoom]; b1y = actualFe.lat + zy[actualFe.zoom]; b2x = actualFe.lon + zx[actualFe.zoom]; b3y = actualFe.lat - zy[actualFe.zoom]; FE_shapeOptions = [{lon:b1x,lat:b1y},{lon:b2x,lat:b1y},{lon:b2x,lat:b3y},{lon:b1x,lat:b3y}]; FE_info = ''; optionsTranslation = {}; switch(actualFe.state) { case 0: FE_info = fe_t('map_layer_state_0', {'id': actualFe.id, 'added_by': actualFe.added_by}); break; case 1: FE_info = fe_t('map_layer_state_1', {'id': actualFe.id, 'editor': actualFe.editor}); break; case 2: FE_info = fe_t('map_layer_state_2', {'id': actualFe.id, 'editor': actualFe.editor}); break; case 3: FE_info = fe_t('map_layer_state_3', {'id': actualFe.id, 'editor': actualFe.editor}); break; case 4: FE_info = fe_t('map_layer_state_4', {'id': actualFe.id, 'editor': actualFe.editor}); break; } AddRaidPolygon(raid_mapLayer, FE_shapeOptions, FE_colors[actualFe.state], FE_info); } } setTimeout(function(){CurrentRaidLocation(raid_mapLayer);},3000); mro_Map.events.register('moveend', Waze.map, function(){CurrentRaidLocation(raid_mapLayer);}); mro_Map.events.register('zoomend', Waze.map, function(){CurrentRaidLocation(raid_mapLayer);}); } //fce k záložce function getElementsByClassName(classname, node) { if (!node) { node = document.getElementsByTagName('body')[0]; } a = []; re = new RegExp('\\b' + classname + '\\b'); els = node.getElementsByTagName('*'); for (i = 0, j = els.length; i<j; i++) { if (re.test(els[i].className)) { a.push(els[i]); } } return a; } //fce obsah záložky function getId(node) { return document.getElementById(node); } function getActualGpsLon() { return getQueryString($('.WazeControlPermalink a').attr('href'), 'lon'); } function getActualGpsLat() { return getQueryString($('.WazeControlPermalink a').attr('href'), 'lat'); } function getActualZoom() { return parseInt(getQueryString($('.WazeControlPermalink a').attr('href'), 'zoom')); } function returnWazeLink(lon, lat, zoom) { return fe_t('link', {'lon': lon, 'lat': lat, 'zoom': zoom}); } function prepareLinkForSend(url) { do { url = url.replace('&', '%26'); } while (url.indexOf('&') !== -1); return url; } function checkCtrlPress() { if (event.ctrlKey || event.shiftKey || event.metaKey || (event.button && event.button == 1)) { return true; } return false; } function getUrlParameter(param, url) { sPageURL = url.substring(1); sURLVariables = sPageURL.split('&'); for (i = 0; i < sURLVariables.length; i++) { sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == param) { return sParameterName[1]; } } } function fe_t(name, params) { // function for translation if (typeof params === 'object') { returnString = FE_translation[FE_language][name]; for (var i in params) { do { returnString = returnString.replace('{' + i + '}', params[i]); } while (returnString.indexOf('{' + i + '}') !== -1); } return returnString; } else { return FE_translation[FE_language][name]; } } function fe_l(name, params) { // function for links if (typeof params === 'object') { returnString = FE_linksSettings[name]; for (var i in params) { do { returnString = returnString.replace('{' + i + '}', params[i]); } while (returnString.indexOf('{' + i + '}') !== -1); } return returnString; } else { return FE_linksSettings[FE_language][name]; } } function freedit_can_controll() { console.log(FE_controllorKey, FE_controllorKeyEnable); if (FE_controllorKey != '' && FE_controllorKeyEnable == '') { return true; } return false; } function freedit_can_control_disable() { if (FE_controllorKey != '' && FE_controllorKeyEnable == '0') { return true; } return false; } function freedit_make_tab() { FE_tipsHtml = ''; FE_editingHtml = ''; FE_forControllHtml = ''; FE_mistakesHtml = ''; FE_editlink = []; FE_onlineContent = ''; FE_myCompleteHtml = ''; tCon = ''; // tabContent (obsah zalozky) tCon += '<div class="fe-tab-header">'; if (Fe_me.rank > 1) { tCon += '<a href="#" id="freedit-add-new">' + fe_t('tab_add_new_freedit') + '</a><br />'; } // + '<a href="https://docs.google.com/spreadsheets/d/1wywD5uYNmejO_t6Gufzu5tBW0SeVAFdr2KVdeSY1mWg/edit#gid=0" target="_blank">' + fe_t('tab_freedit_table') + '</a>' tCon += ' / (' + fe_t('tab_graphs') + ') / ' + '<a href="https://www.waze.com/forum/viewtopic.php?f=274&t=134151#p1065158"" target="_blank">' + fe_t('tab_forum') + '</a> <font size="1">(' + fe_t('tab_signpost') + ')</font><br><br>' + '<form action="" class="freedit_id_form"><input type="text" name="freedit_id_input" class="freedit_id_input" placeholder="Zadej číslo F…"><input type="submit" name="freedit_id_search" class="freedit_id_search" value="Přejít"></form>'; if (FE_status == 'on') { tCon += '<br /><br />' + fe_t('tab_status_message_online', {'state': 'ONline', 'freedit_count': FE_dataCount}); } else { tCon += '<br /><br />' + fe_t('tab_status_message_offline', {'state': 'OFFline', 'freedit_count': FE_dataCount, 'date': localStorage.getItem("FE_data_date")}); } if (freedit_can_controll()) { tCon += '<br><br><a href="#" class="freedit-turn-off-controlor">Vypnout kontrolu</a>'; } else if (freedit_can_control_disable()) { tCon += '<br><br><a href="#" class="freedit-turn-on-controlor">Zapnout kontrolu</a>'; } for (var i in FE_data) { switch(FE_data[i].state) { case 0: if (!freedit_can_controll()) { FE_tipsHtml += fe_t('tab_hot_tips_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'attrs': FE_data[i].attrs, 'user': Fe_me.userName}); FE_tipsHtml += '<br />'; } break; case 1: if (FE_data[i].editor == Fe_me.userName) { FE_editingHtml += fe_t('tab_editing_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'editor': FE_data[i].editor, 'attrs': FE_data[i].attrs}); FE_editingHtml += '<br />'; } break; case 2: if (freedit_can_controll() || FE_data[i].editor == Fe_me.userName) { FE_forControllHtml += fe_t('tab_control_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'editor': FE_data[i].editor, 'attrs': FE_data[i].attrs}); FE_forControllHtml += '<br />'; } break; case 3: if (FE_data[i].editor == Fe_me.userName) { FE_myCompleteHtml += fe_t('tab_my_complete_freedit_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'editor': FE_data[i].editor, 'attrs': FE_data[i].attrs}); FE_myCompleteHtml += '<br />'; } break; case 4: FE_mistakesHtml += fe_t('tab_mistake_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'editor': FE_data[i].editor, 'attrs': FE_data[i].attrs}); FE_mistakesHtml += '<br />'; break; } } if (FE_editingHtml != '') { // pokud se prave neco edituje, zobrazime to FE_onlineContent += fe_t('tab_editing_headline') + FE_editingHtml; } if (FE_forControllHtml != '') { // pokud je neco ke kontrole, zobrazime to FE_onlineContent += fe_t('tab_control_headline') + FE_forControllHtml; } if (FE_mistakesHtml != '') { // pokud jsou nekde nejake chyby, zobrazime to FE_onlineContent += fe_t('tab_mistake_headline') + FE_mistakesHtml; } if (FE_tipsHtml != '') { // pokud jsou nejake horke tipy, zobrazime FE_onlineContent += fe_t('tab_hot_tips_headline') + '<div class="fe-hot-tips">' + FE_tipsHtml + '</div>'; } if (FE_myCompleteHtml != '') { // pokud jsem neco dokoncil, tak to zobrazime FE_onlineContent += fe_t('tab_my_complete_freedit_headline') + FE_myCompleteHtml; } tCon += '<br /><br />' + FE_onlineContent + '<br /><br />'; tCon += fe_t('tab_bottom_legend') + '<br />' + fe_t('script_version', {'version': FE_version}); userTabs = getId('user-info'); navTabs = getElementsByClassName('nav-tabs', userTabs)[0]; tabContent = getElementsByClassName('tab-content', userTabs)[0]; newtab = document.createElement('li'); newtab.innerHTML = '<a href="#sidepanel-freedit" data-toggle="tab">Freedit</a>'; navTabs.appendChild(newtab); addon = document.createElement('section'); addon.innerHTML = tCon; addon.id = 'sidepanel-freedit'; addon.className = 'tab-pane'; tabContent.appendChild(addon); $('.freedit_id_form').on('submit', function(event) { event.preventDefault(); freedit_id = parseInt($('.freedit_id_input').val()); if (!isNaN(freedit_id) && typeof FE_data[freedit_id] === 'object') { $('.freedit_id_input').val(''); freedit_jump_to({lon:FE_data[freedit_id].lon, lat:FE_data[freedit_id].lat, zoom:FE_data[freedit_id].zoom, segments:null, nodes:null, venues:null, mapUpdateRequest:null}); freedit_message_center(freedit_id); } else { alert('Freedit nenalezen.'); } }); } function freedit_message_center(freedit_id) { var actualFe = FE_data[freedit_id]; $.get(fe_l('get_all_data_of_freedit', {'freedit': freedit_id}), function(data) { // console.log(actualFe, data, data.msgs, data.msgs.length); msgCnt = '<div class="problem-edit severity-low" id="FEmsg">' + '<div class="header">' + '<a class="close-panel">×</a>' + '<div class="type">Freedit ' + freedit_id + '</div>' + '<div class="reported">' + actualFe.name + ' (' + actualFe.district + ') - ' + actualFe.attrs + '<br />Vložil: ' + actualFe.added_by; if (actualFe.editor != null) { msgCnt += '<br> Editoval: ' + actualFe.editor; } msgCnt += '</div>' + '</div>' + '<div class="body">' + '<div class="problem-data">' + '<div class="conversation section">' + '<div class="title">Diskuze<span class="comment-count-badge">' + data.msgs.length + '</span></div>' + '<div class="collapsible content">' + '<div class="conversation-view">' + '<div>' + '<ul class="list-unstyled" style="max-height: ' + ($('#WazeMap').height() - 430) + 'px;">'; prevStat = 0; for (var i in data.msgs) { if (typeof data.msgs[i] === 'object') { if (data.msgs[i].comment != '' && prevStat != data.msgs[i].state) { msgCnt += freedit_message_center_comment(false, data.msgs[i].nick, data.msgs[i].date, data.msgs[i].comment); msgCnt += freedit_message_center_comment(true, data.msgs[i].nick, data.msgs[i].date, fe_t('msg_center_change_status') + ' ' + fe_t('msg_center_change_status_' + data.msgs[i].state)); prevStat = data.msgs[i].state; } else if (data.msgs[i].comment == '') { msgCnt += freedit_message_center_comment(true, data.msgs[i].nick, data.msgs[i].date, fe_t('msg_center_change_status') + ' ' + fe_t('msg_center_change_status_' + data.msgs[i].state)); prevStat = data.msgs[i].state; } else { msgCnt += freedit_message_center_comment(false, data.msgs[i].nick, data.msgs[i].date, data.msgs[i].comment); } } } msgCnt += '</ul>'; if (actualFe.editor != null) { msgCnt += '<div class="clearfix new-comment-form">' + '<textarea class="form-control new-comment-text" placeholder="Přidat komentář..." required=""></textarea>' + '<div style="float: left; position: relative; left: 0; margin-top: 6px; display: block;"><a class=" fa fa-link icon-link">+</a></div>' + '<button class="btn btn-default" type="submit">Poslat</button>' + '</div>'; } msgCnt += '</div>' + '</div>' + '</div>' + '</div>' + '<div class="actions">' + '<div class="section">' + '<div class="content">'; if (actualFe.editor == null) { msgCnt += '<div class="navigation">' + '<div class="btn btn-block next" id="freedit-want-edit" data-freedit-id="' + freedit_id + '">Chci začít editovat!</div>' + '</div>'; } else if (actualFe.editor == Fe_me.userName && (actualFe.state != 2 || actualFe.state != 3)) { msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_freedit_to_control', {'editor': Fe_me.userName, 'freedit': freedit_id}) + '">' + '<input type="radio" name="state" value="solved" id="state-solved"><label for="state-solved">Odevzdat ke kontrole</label>' + '<input type="radio" name="state" value="' + actualFe.state + '" id="state-not-identified" checked="checked"><label for="state-not-identified">Neměnit stav</label>' + '</div>'; } else if (actualFe.editor == Fe_me.userName && actualFe.state >= 2) { msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_freedit_to_control', {'editor': Fe_me.userName, 'freedit': freedit_id}) + '"></div>'; } else if (freedit_can_controll() && actualFe.state < 4) { msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_control_report', {'editor': Fe_me.userName, 'freedit': freedit_id, 'key': FE_controllorKey}) + '">' + '<input type="radio" name="state" value="4" id="state-open"><label for="state-open">Vrátit s chybou</label>' + '<input type="radio" name="state" value="3" id="state-solved"><label for="state-solved">Uzavřít freedit jako hotový</label>' + '<input type="radio" name="state" value="' + actualFe.state + '" id="state-not-identified" checked="checked"><label for="state-not-identified">Neměnit stav</label>' + '</div>'; } else if (freedit_can_controll()) { msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_control_report', {'editor': Fe_me.userName, 'freedit': freedit_id}) + '"></div>'; } else { msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_freedit_to_control', {'editor': Fe_me.userName, 'freedit': freedit_id, 'key': FE_controllorKey}) + '"></div>'; } msgCnt += '<input type="hidden" name="actualState" value="' + data.acutalState + '" />' + '</div>' + '</div>' + '</div>' + '</div>' + '</div>' + '</div>'; freedit_message_center_remove(); panelContainer = getId('panel-container'); msgCenter = document.createElement('div'); msgCenter.innerHTML = msgCnt; msgCenter.className = 'panel'; panelContainer.appendChild(msgCenter); $('#FEmsg .close-panel').on('click', function(event) { event.preventDefault(); freedit_message_center_remove(); }); $('#freedit-want-edit').on('click', function(event) { event.preventDefault(); $.get(fe_l('register_freedit', {'state': 1, 'editor': Fe_me.userName, 'freedit': freedit_id}), {}, function(data) { if (data.error == 0) { if (typeof data.msg !== 'undefined') { alert(data.msg); } if (typeof data.state !== 'undefined') { FE_data[freedit_id].state = data.state; } FE_data[freedit_id].editor = Fe_me.userName; freedit_message_center(freedit_id); } else { alert(data.msg); } }, 'json'); }); $('#FEmsg button').on('click', function(event) { event.preventDefault(); $.get($('#FEmsg .controls-container').attr('data-freedit-href'), {actualState: $('#FEmsg input[name=actualState]').val(), state: $('input[name=state]:checked').val(), comment: $('#FEmsg textarea').val()}, function(data) { if (data.error == 0) { if (typeof data.msg !== 'undefined') { alert(data.msg); } if (typeof data.state !== 'undefined') { FE_data[freedit_id].state = data.state; } freedit_message_center(freedit_id); } else { alert(data.msg); } }, 'json'); }); $('#FEmsg .icon-link').on('click', function(event) { event.preventDefault(); var inputmessage = $('#FEmsg textarea'); var curPermalink = null; for (var i = 0;i < freedit_div_perma.children.length;i++) { if (freedit_div_perma.children[i].className == "icon-link" || freedit_div_perma.children[i].className == "fa fa-link") { curPermalink = freedit_div_perma.children[i].href; break; } } inputmessage.val(inputmessage.val() + ' ' + curPermalink); window.setTimeout(freedit_set_focus_on_inputs_message, 100); }); $('#FEmsg .fe-msg-permalink').on('click', function(event) { linkData = $(this); event.preventDefault(); lon = parseFloat(linkData.attr('data-link-lon')); lat = parseFloat(linkData.attr('data-link-lat')); zoom = parseInt(linkData.attr('data-link-zoom')); segments = linkData.attr('data-link-segments') == 'null' ? null : linkData.attr('data-link-segments').split(","); nodes = linkData.attr('data-link-nodes') == 'null' ? null : linkData.attr('data-link-nodes').split(","); freedit_jump_to({lon:lon, lat:lat, zoom:zoom, segments:segments, nodes:nodes, venues:null, mapUpdateRequest:null}); }); }, 'json'); } function freedit_set_focus_on_inputs_message() { $('#FEmsg textarea').focus(); } function freedit_message_center_comment(statusChange, nick, date, comment) { htmlComment = '<li class="comment">' + '<div class="comment-content' + (statusChange ? ' reporter' : '') + ' ">' + '<div class="comment-title">' + '<span class="username">' + nick + '</span> ' + '<span class="date">' + date + '</span>' + '</div>' + '<div class="text">' + freedit_return_msg_with_permalink(comment) + '</div>' + '</div>' + '</li>'; return htmlComment; } function freedit_message_center_remove() { $('#panel-container').empty(); } function freedit_make_modal_window(content) { $('<div id="fe-modal-window-background" />').appendTo('body'); $('<div id="fe-modal-window" />').appendTo('body'); $('#fe-modal-window').html(content); $('.fe-close-modal-window').on('click', function(event) { event.preventDefault(); freedit_close_modal_window(); }); } function freedit_close_modal_window() { $('#fe-modal-window-background').remove(); $('#fe-modal-window').remove(); } function freedit_add_new() { actualLon = getActualGpsLon(); actualLat = getActualGpsLat(); $.get('https://maps.googleapis.com/maps/api/geocode/json?latlng=' + actualLat + ',' + actualLon, function(data) { cityEdit = ''; countryEdit = ''; countryEdit2 = ''; // kraj for (var i in data.results[1].address_components) { if (data.results[1].address_components[i].types[0] == 'locality' && data.results[1].address_components[i].types[1] == 'political') { cityEdit = data.results[1].address_components[i].long_name; } else if (data.results[1].address_components[i].types[0] == 'administrative_area_level_2' && data.results[1].address_components[i].types[1] == 'political') { countryEdit2 = data.results[1].address_components[i].long_name; } else if (data.results[1].address_components[i].types[0] == 'administrative_area_level_1' && data.results[1].address_components[i].types[1] == 'political') { countryEdit = data.results[1].address_components[i].long_name; break; } } $.get(fe_l('add_new', {'name': cityEdit, 'link': prepareLinkForSend(returnWazeLink(actualLon, actualLat, getActualZoom())), 'region': countryEdit, 'district': countryEdit2, 'added_by': Fe_me.userName}), function(data) { freedit_make_modal_window(data); freedit_form_translator(); $('#add-new-freedit').on('submit', function(event) { event.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function(data) { if (data.error) { alert(fe_t('add_new_form_error')); } else { alert(fe_t('add_new_form_success')); freedit_close_modal_window(); } }, 'json'); }); }); }, 'json'); } function freedit_form_translator() { $('#fe-modal-window *[data-fe-translate]').each(function() { $(this).empty().text(fe_t($(this).attr('data-fe-translate'))); }); } function freedit_get_first_permalink(str) { for (var i = 0;i < FE_baseURLs.length;i++) { var start = str.search(FE_baseURLs[i]); if (start == -1) { continue; } var end = start + 1; while (end < str.length && str.charAt(end) != " " && str.charAt(end) != "\n") { end++; } return {start:start, end:end, permalink:str.substring(start, end)}; } return null; } function freedit_get_jump_set_from_permalink(permalink) { var lon = permalink.match(/lon=([\-]?[0-9]*[.]?[0-9]*)/); var lat = permalink.match(/lat=([\-]?[0-9]*[.]?[0-9]*)/); var zoom = permalink.match(/zoom=([0-9]+)/); var segments = permalink.match(/segments=(([0-9]+[,]?)+)+/); var nodes = permalink.match(/nodes=(([0-9]+[,]?)+)+/); var venues = permalink.match(/venues=(([0-9|\.|\-]+[,]?)+)+/); var mapUpdateRequest = permalink.match(/mapUpdateRequest=([0-9]*)/); return {lon:lon == null ? null : lon.length == 2 ? parseFloat(lon[1]) : null, lat:lat == null ? null : lat.length == 2 ? parseFloat(lat[1]) : null, zoom:zoom == null ? null : zoom.length == 2 ? parseFloat(zoom[1]) : null, segments:segments ? segments[1].split(",") : null, nodes:nodes ? nodes[1].split(",") : null, venues:venues ? venues[1].split(",") : null, mapUpdateRequest:mapUpdateRequest ? mapUpdateRequest[1].split(",") : null}; } function freedit_return_msg_with_permalink(msg) { var pos = 0; var remainigMessage = msg; while (remainigMessage.length > 0) { var permalink = freedit_get_first_permalink(remainigMessage); if (permalink) { var details = freedit_get_jump_set_from_permalink(permalink.permalink); if (details.lon && details.lat) { var elements = 0; var elType = ""; if (details.segments != null) { elements = details.segments.length; elType = "segment" + (elements > 1 ? "s" : ""); } else { if (details.nodes != null) { elements = details.nodes.length; elType = "node" + (elements > 1 ? "s" : ""); } else { if (details.venues != null) { elements = details.venues.length; elType = "venue" + (elements > 1 ? "s" : ""); } } } linkData = freedit_get_jump_set_from_permalink(permalink.permalink); msg = msg.replace(permalink.permalink, '<a href="#" class="fe-msg-permalink" data-link-lat="' + linkData.lat + '" data-link-lon="' + linkData.lon + '" data-link-zoom="' + linkData.zoom + '" data-link-segments="' + linkData.segments + '" data-link-nodes="' + linkData.nodes + '" data-link-venues="' + linkData.venues + '" data-link-mapUpdateRequest="' + linkData.mapUpdateRequest + '"><i class="crosshair fa fa-crosshairs icon-screenshot"></i></a>'); remainigMessage = remainigMessage.substring(permalink.end); continue; } else { // Bad permalink: no lon or lat } } remainigMessage = remainigMessage.substring(1); } msg = msg.replace(/(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/g, function(match, contents, offset, s) { return '<a target="_blank" href="' + (match.indexOf("://") != -1 ? match : "http://" + match) + '">' + match + "</a>"; }); return msg; } function freedit_jump_to(jumpSet) { Waze.selectionManager.unselectAll(); if (typeof ChatJumper !== "undefined") { if (ChatJumper.isLast) { } else { var c = Waze.map.getCenter(); var zoom = Waze.map.getZoom(); ChatJumper.last = [c.lon, c.lat]; ChatJumper.zoom = zoom; ChatJumper.isLast = true; ChatJumper.saveLS(); ChatJumper.showButton(); } } freedit_select_dataWaitForMergeEnd = false; if (jumpSet.segments || jumpSet.nodes || jumpSet.venues || jumpSet.mapUpdateRequest) { currentJumpSet = jumpSet; Waze.model.events.register("freedit_mergestart", null, freedit_mergestart); } var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(jumpSet.lon, jumpSet.lat); if (jumpSet.zoom) { Waze.map.setCenter(xy, jumpSet.zoom); } else { Waze.map.setCenter(xy); } if (jumpSet.segments || jumpSet.nodes || jumpSet.venues || jumpSet.mapUpdateRequest) { window.setTimeout(freedit_get_function_with_args(freedit_select_data, [jumpSet]), 500); } } function freedit_mergestart() { try { freedit_select_dataWaitForMergeEnd = true; Waze.model.events.unregister("freedit_mergestart", null, freedit_mergestart); Waze.model.events.register("freedit_mergeend", null, freedit_mergeend); } catch (e) { console.log("Error:", e); } } function freedit_mergeend() { try { Waze.model.events.unregister("freedit_mergeend", null, freedit_mergeend); freedit_select_dataWaitForMergeEnd = false; freedit_select_data(currentJumpSet); } catch (e) { console.log("Error:", e); } } function freedit_select_data(jumpSet) { if (freedit_select_dataWaitForMergeEnd == true) { console.log("waiting for data..."); return; } Waze.model.events.unregister("freedit_mergestart", null, freedit_mergestart); Waze.model.events.unregister("freedit_mergeend", null, freedit_mergeend); var success = true; var notFound = []; var elements = 0; if (jumpSet.segments) { var segs = []; for (var i = 0;i < jumpSet.segments.length;i++) { var segId = parseInt(jumpSet.segments[i]); if (typeof Waze.model.segments.objects[segId] === "undefined") { success = false; notFound.push(segId); } else { segs.push(Waze.model.segments.objects[segId]); } } elements = jumpSet.segments.length; Waze.selectionManager.select(segs); } if (jumpSet.nodes) { var nodes = []; for (var i = 0;i < jumpSet.nodes.length;i++) { var nodeId = parseInt(jumpSet.nodes[i]); if (typeof Waze.model.nodes.objects[nodeId] === "undefined") { success = false; notFound.push(nodeId); } else { nodes.push(Waze.model.nodes.objects[nodeId]); } } elements = jumpSet.nodes.length; Waze.selectionManager.select(nodes); } if (jumpSet.venues) { Waze.map.landmarkLayer.setVisibility(true); var venues = []; for (var i = 0;i < jumpSet.venues.length;i++) { var venueId = jumpSet.venues[i]; if (typeof Waze.model.venues.objects[venueId] === "undefined") { success = false; notFound.push(venueId); } else { venues.push(Waze.model.venues.objects[venueId]); } } elements = jumpSet.venues.length; Waze.selectionManager.select(venues); } if (jumpSet.mapUpdateRequest && jumpSet.mapUpdateRequest.length >= 1 && !jumpSet.segments && !jumpSet.nodes && !jumpSet.venues) { var mp = Waze.model.problems.objects[parseInt(jumpSet.mapUpdateRequest[0])]; var tp = null; if (mp == null) { tp = Waze.model.turnProblems.objects[parseInt(jumpSet.mapUpdateRequest[0])]; } if (mp != null) { problemsControl.selectProblem(mp); success = true; } if (tp != null) { problemsControl.selectProblem(tp); success = true; } } if (!success) { if (jumpSet.hasOwnProperty("attempt") && jumpSet.attempt >= 2) { if (confirm("Some elements can't be found.\nSelection: " + Waze.selectionManager.selectedItems.length + "/" + elements + "\nNot found: " + (notFound.length != 0 ? "Elements ids: " + notFound.join(", ") + "\n" : "") + "Try again to select elements?")) { window.setTimeout(freedit_get_function_with_args(freedit_select_data, [jumpSet]), 500); } return; } if (jumpSet.hasOwnProperty("attempt")) { jumpSet.attempt++; } else { jumpSet.attempt = 0; } window.setTimeout(freedit_get_function_with_args(freedit_select_data, [jumpSet]), 500); } else { console.log("Data selected...:", jumpSet); } } function freedit_get_function_with_args(func, args) { return function() { var json_args = JSON.stringify(args); return function() { var args = JSON.parse(json_args); func.apply(this, args); }; }(); } //fce záložka obsah function freedit_init() { localStorage.setItem('FE_controllorKey', FE_controllorKey); $(FE_styles).appendTo('head'); freedit_make_tab(); $('#freedit-add-new').on('click', function(event) { event.preventDefault(); freedit_add_new(); }); $('.freedit-register').on('click', function(event) { event.preventDefault(); freedit_register_editing($(this)); }); $('.freedit-to-control').on('click', function(event) { event.preventDefault(); freedit_send_to_control($(this)); }); $('.freedit-control-message').on('click', function(event) { event.preventDefault(); freedit_control_message($(this)); }); $('.freedit-link').on('click', function(event) { if (!checkCtrlPress()) { // pokud pri kliknuti nedrzel control event.preventDefault(); event.stopPropagation(); href = $(this).attr('href'); freedit_jump_to({lon:parseFloat(getUrlParameter('lon', href)), lat:parseFloat(getUrlParameter('lat', href)), zoom:getUrlParameter('zoom', href), segments:null, nodes:null, venues:null, mapUpdateRequest:null}); freedit_message_center($(this).attr('data-freedit-id')); } }); $('#freedit-switch-on-off').on('click', function(event) { event.preventDefault(); if (FE_status == "on") { localStorage.setItem('FE_status', 'off'); } else { localStorage.setItem('FE_status', 'on'); } window.location.reload(); }); $('.freedit-turn-off-controlor').on('click', function(event) { event.preventDefault(); localStorage.setItem('FE_controllorKeyEnable', '0'); alert('Refreshni prohlížeč.'); }); $('.freedit-turn-on-controlor').on('click', function(event) { event.preventDefault(); localStorage.setItem('FE_controllorKeyEnable', ''); alert('Refreshni prohlížeč.'); }); var mapFooter = getElementsByClassName("WazeControlPermalink"); if (mapFooter.length == 0) { console.log("error: can't find permalink container"); } else { freedit_div_perma = mapFooter[0]; } } //fce wait co volá freedit_init function freedit_wait() { if (!window.Waze.map || typeof map === 'undefined' || typeof Waze.loginManager.user === 'undefined' || Waze.loginManager.user == null) { setTimeout(freedit_wait, 500); return ; } hasStates = Waze.model.hasStates(); freedit_after_load_data(); } function freedit_after_load_data() { if (FE_dataLoad) { console.log('WME Freedit: Start showing layer'); if (FE_allowLanguage.indexOf(I18n.locale) != -1) { FE_language = I18n.locale; } Fe_me = Waze.loginManager.user; freedit_init(); InitMapRaidOverlay(); } else { setTimeout(freedit_after_load_data, 500); } } //volání fce a samotný script freedit_bootstrap(); /*-------------------------------------------------------------------------------------- poznámky pod čarou :D */
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址