- // ==UserScript==
- // @name WME Export Trajet
- // @name:fr WME Export Trajet
- // @version 0.7
- // @description Export GPS point of your drives.
- // @description:fr Export des coordonée GPS de vos trajet.
- // @include https://www.waze.com/editor/*
- // @include https://www.waze.com/*/editor/*
- // @include https://editor-beta.waze.com/*
- // @exclude https://www.waze.com/user/*
- // @namespace https://gf.qytechs.cn/fr/scripts/14832-wme-export-trajet
- // @author seb-d59
- // @copyright seb-d59 - 2015
- // ==/UserScript==
-
-
- var WMEExpT_Version = 0.7;
- var WMEExpT_Name = "WME Export Trajet";
-
- var WMEExpT = {};
- var icon_export="iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wgBFAggT+iJkgAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADUklEQVR42u2dTWsTURSGn5lOrEoJVYsff0AqUhHEreBW40IR/FiJKze6cV2NuhFdiFgQXLgQf0ARXIk7t3UhLYp/QBTFEksbmibjYk4kxHSMucn96JwXhtAmTU6fOfecc++cuYmwoxIQ459aQMPkDSILRk4CN4EZDwEuAQ+BZTxVCbgH/ACaHh4/gUdykr3UODAvxqaeHkYQY1STwBXg9iAQEwcG14AFYMXBZ1c2ifttiAB3/icmugC4AFwWI1OLoeRlF7waUDaF6ALgihhXd1CydOo5cNUUoqsYmDr63E6I0wKxZhITi5xEGsB9U4hFz8LLMlQHhqhljCFEBWgIUQEaQlSAhhAVoCHEpMCgJoBdspjQrTUpccgptleBapEBHpPpXd6cvJQzYzkMxEUGWAZO9vG6U3klYJEBDpIDWt1/U5Qk0iJbvq8N+42L4oENsmsfMNi1mRjYAM4UFWC7PKkOOOrGgRdF9sBOT3QaRFUKUAEqQAWoUoAKUAH2rW3ADux0km05gBGwBzgnj5ECHGwadR64AUz5BjEEgBGwl2xR87pvEENJIjFwwEeIIWVhLyGOejVmA7jI8DqxOiECPAG+465ZaeQA273Io/JE5xCTnMA9JsZGjkfIPmB7DsQImAO+uYDYC+AYWe9cBTgC7HQIMQH2AwdzPPGaQL4FfLUNMenhedPAXeAE2fVP14km/sdzU8AF+XnWticmPbyvIvCmAsrQZeCseOBjiYlOzm4sw2UiwHn9buAScBqL13q6AbaAz7i5BcFU68Ai8H4Emb9vgE3gNfBOhsFGIPDqwBuJ3R9dxsBUDJjtysKuEsmYZNhDYkcevCrwwfZJTzYpfpeAT/IPuJ4pzQBPgaO+wcsrpFMxxvUQXpfMWvcRXmiLCd7BswGw1+2ur+T3wcML0QO9gmdjNWaYWgXe+gQvJIBrHXWeN/BCAdiUwn7eN3ghAEzJGiOfAV9sTtG2kgf+kiP10bgQAKY+G6e9MQpQASpABahSgApQASpAlQJUgApQAaoUoAIMSC7WA/M2vPFVk2zSseYCYD8b3vimCeB4rxHrAmC/G94EEe4Sn4zRJPK3RrbhjWPVyJo5W6P2QNMNb3zVIvAAaNi6faHE1iqZ/nyNxm/UEhZ+/DhJcwAAAABJRU5ErkJggg==";
- var lang={};
- WMEExpT.Trajets = {'list': {},'objects':{}};
-
- var resultRequest={};
-
- var debug=true;
-
- // *********************
- // ** HELPER FUNCTION **
- // *********************
-
- function log(msg, obj)
- {
- if (obj === undefined)
- console.log(WMEExpT_Name + " v" + WMEExpT_Version + " - " + msg);
- else if (debug)
- console.debug(WMEExpT_Name + " v" + WMEExpT_Version + " - " + msg + " " ,obj);
- }
-
- function getId(node) {
- return document.getElementById(node);
- }
- function getElementsByClassName(classname, node) {
- node || (node = document.getElementsByTagName("body")[0]);
- for (var a = [], re = new RegExp("\\b" + classname + "\\b"), els = node.getElementsByTagName("*"), i = 0, j = els.length;i < j;i++) {
- re.test(els[i].className) && a.push(els[i]);
- }
- return a;
- }
- function getFunctionWithArgs(func, args) {
- return (
- function () {
- var json_args = JSON.stringify(args);
- return function() {
- var args = JSON.parse(json_args);
- func.apply(this, args);
- };
- }
- )();
- }
-
-
- // *************
- // ** INIT **
- // *************
- function WMEExpT_bootstrap() {
- if (typeof unsafeWindow === "undefined") {
- unsafeWindow = ( function () {
- var dummyElem = document.createElement('p');
- dummyElem.setAttribute('onclick', 'return window;');
- return dummyElem.onclick();
- }) ();
- }
-
- /* begin running the code! */
- log("starting");
- WMEExpT_init();
- }
-
-
- function WMEExpT_init(){
- // Waze object needed
- /*
- WMEExpTWaze = unsafeWindow.Waze;
- if(typeof(WMEExpTWaze) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - WMEExpTWaze : NOK"); }
- window.setTimeout(WMEExpT_init, 500);
- return;
- }
- WMEExpTMap = WMEExpTWaze.map;
- if(typeof(WMEExpTMap) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - WMEExpTmap : NOK"); }
- window.setTimeout(WMEExpT_init, 500);
- return;
- }
-
- WMEExpTModel = WMEExpTWaze.model;
- if(typeof(WMEExpTModel) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - WMEExpTModel DOM : NOK"); }
- window.setTimeout(WMEExpT_init, 500);
- return;
- }
-
- // OpenLayers
- WMEExpTOpenLayers = unsafeWindow.OpenLayers;
- if(typeof(WMEExpTOpenLayers) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - OpenLayers : NOK"); }
- window.setTimeout(WMEExpT_init, 500);
- return;
- }
- */
- // Traductions
- WMEExpTI18n = unsafeWindow.I18n.locale;
- if(typeof(WMEExpTI18n) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - WMEExpTI18n : NOK"); }
- setTimeout(WMEExpT_init, 500);
- return;
- }
- // Waze GUI needed
-
- WMEExpT_userInfo = getId("user-info");
- if(typeof(WMEExpT_userInfo) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - WMEExpT_userInfo : NOK"); }
- setTimeout(WMEExpT_init, 500);
- return;
- }
- WMEExpT_navTabs = getElementsByClassName("nav-tabs", WMEExpT_userInfo)[0];
- if(typeof(WMEExpT_navTabs) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - WMEExpT_navTabs : NOK"); }
- setTimeout(WMEExpT_init, 500);
- return;
- }
- WMEExpT_tabContent = getElementsByClassName("tab-content", WMEExpT_userInfo)[0];
- if(typeof(WMEExpT_tabContent) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - WMEExpT_tabContent : NOK"); }
- setTimeout(WMEExpT_init, 500);
- return;
- }
-
- WMEExpTDrives = getId("sidepanel-drives");
- if(typeof(WMEExpTDrives) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - WMEExpTDrives : NOK"); }
- setTimeout(WMEExpT_Main, 1000);
- return;
- }
-
- /*
- if (typeof(localStorage.WMEExportTrajets) !== "undefined") {
- localStorage.removeItem("WMEExportTrajets");
- }
- if (typeof(sessionStorage.WMEExportTrajets) !== "undefined") {
- sessionStorage.removeItem("WMEExportTrajets");
- }
- */
-
-
-
- //======================================================
-
- // Translation
- if (WMEExpTI18n == "fr") {
- lang = new Array("Export","Selectionnez le trajet");
- }
- else {
- lang = new Array("Export","Select the Drive");
- }
-
- log("init ok");
-
- // Then running
- WMEExpT_css();
-
- }
-
-
- // *************
- // ** HTML **
- // *************
-
- function WMEExpT_css() {
- var Scss = document.createElement("style");
- Scss.type = "text/css";
- var css =".CSETcontent {width:260px; margin-left:10px; box-shadow: 0 4px 10px #aaa;}";
- css +=".divl {float:left; text-align:center;}";
- css +=".divr {float:right; text-align:center;}";
- css +="#export {width:35px; height:22px;}";
- Scss.innerHTML = css;
- document.body.appendChild(Scss);
- log('CSS Ok');
- WMEExpT_html();
- }
-
-
- function WMEExpT_html() {
- var addon= document.createElement('div', "ExpT-cotent");
- var content = "<div style='float:left; margin-left:5px;'><b><a href='https://gf.qytechs.cn/fr/scripts/14832-wme-export-trajet' target='_blank'><u>"+ WMEExpT_Name +"</u></a></b> v"+ WMEExpT_Version +"</div><br>";
- content += "<div style='clear:both; padding-top:10px;'></div><div class='CSETcontent' >";
- content += "<div class='divl' style='width:240px; text-align:left;'><select id='selectTrajet' style='width:200px;'>";
- content +="<option value='0' id='0'>"+lang[1]+"</option>";
- content +="</select></div>";
- content += "<div class='divr' style='width:20px;'><a href='#' id='exportTrajet'><img style='width:20px;' title='"+ lang[0] +"' src='data:image/png;base64,"+ icon_export +"' /></a></div></div>";
- addon.innerHTML = content;
- WMEExpTDrives.appendChild(addon);
-
- getId('selectTrajet').onfocus = updateTrajetsList;
- getId('selectTrajet').onchange = ExpTrajet;
-
- log('html Ok');
-
- }
-
- function updateTrajetsList()
- {
- var available_Trajets = getElementsByClassName('result session session-available');
- if(typeof(available_Trajets) === 'undefined'){
- if (debug) { console.error("WME Export Trajet - available_Trajets : NOK"); }
- return;
- }
-
- var selectTrajet = getId('selectTrajet');
- selectTrajet.options.length = 1;
-
-
- for (var i=0;i<available_Trajets.length;i++){
-
- var trajetID= available_Trajets[i]['dataset'].id;
- var trajetDetail = available_Trajets[i].childNodes[1].childNodes[0].textContent;
- WMEExpT.Trajets.list[trajetID] = trajetDetail.replace(/,/g,'');
-
- var expTrOption = document.createElement('option');
- var expTrText = document.createTextNode(WMEExpT.Trajets.list[trajetID]);
- expTrOption.setAttribute('value','0');
- expTrOption.setAttribute('id', trajetID);
- expTrOption.appendChild(expTrText);
- selectTrajet.appendChild(expTrOption);
- }
- log('updateTrajetsList Ok');
-
- }
-
- function ExpTrajet() {
-
- var selectTrajet = getId('selectTrajet');
-
- if (selectTrajet.selectedIndex <= 0)
- return;
-
- id = selectTrajet.options[selectTrajet.selectedIndex].id;
-
- if (id <= 0)
- return;
-
- if (!WMEExpT.Trajets.objects.hasOwnProperty(id)) {
-
- var url = "https://www.waze.com/row-Descartes-live/app/Archive/Session?id="+id;
-
- RequestObject = window.ActiveXObject
- // ? new ActiveXObject("Microsoft.XMLHTTP")
- ? new ActiveXObject("Msxml2.XMLHTTP")
- : new XMLHttpRequest();
- RequestObject.onreadystatechange = function()
- {
- if(RequestObject.readyState == 4) {
- resultRequest={};
- resultRequest = JSON.parse(RequestObject.responseText);
- WMEExpT.Trajets.objects[id] = resultRequest.archiveSessions.objects[0];
- log('New data download link ok: '+ WMEExpT.Trajets.list[id]+'; id= '+ id);
- generateFile();
-
- }
- };
- RequestObject.open("GET", url,false);
- RequestObject.send(null);
- }else {
- log('data download link ok: '+ WMEExpT.Trajets.list[id]+'; id= '+ id);
- log('WMEExpT.Trajets.objects[id].gpx',WMEExpT.Trajets.objects[id].gpx);
- getId('exportTrajet').setAttribute('download', WMEExpT.Trajets.list[id]+ '.gpx');
- getId('exportTrajet').href='data:Application/octet-stream,' + encodeURIComponent(WMEExpT.Trajets.objects[id].gpx);
-
- }
-
- }
-
- function generateFile(){
-
-
- var entete = '<?xml version="1.0" encoding="UTF-8"?>\n<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="seb-d59" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n';
- entete += '<trk>\n';
-
- var contenu = document.createElement('contenu');
- contenu.id='Détail_'+id;
- contenu.innerHTML = WMEExpT.Trajets.objects[id].data;
- log('contenu',contenu);
-
-
- var roadName = contenu.getElementsByTagName("MYNS:NAME");
- log(roadName[0].textContent +' vers '+ roadName[roadName.length-1].textContent);
-
- var nameIti = '<name>'+ roadName[0].textContent +' vers '+ roadName[roadName.length-1].textContent +'</name>\n<trkseg>\n';
-
- var child = contenu.childNodes[2].childNodes;
- //log('child',child);
- //************************************************//
- // Sens de déplacement: //
- // si direction="1" => node A -> B //
- // si direction="2" => node B -> A //
- //************************************************//
-
- //************************************************//
- // Format du Fichier:
- //
- // <gpx .......>
- // <trk>
- // <name>Test Traces</name>
- // <trkseg>
- // <trkpt lat="..." lon="...">
- // </trkpt>
- // .....
- // <trkpt lat="..." lon="...">
- // </trkpt>
- // </trkseg>
- // </trk>
- // </gpx>
- //
- //***********************************************//
- var traitementlonlat=[];
- for (var i=3; i<child.length; i=i+2){
- traitementlonlat.push(child[i].childNodes[1].childNodes[3].childNodes[1].childNodes[1].textContent);
-
- }
- //log('traitementlonlat',traitementlonlat);
- var lonlat=[];
- for (i=0; i < traitementlonlat.length; i++){
- //log('traitementlonlat['+i+'] = ' + traitementlonlat[i]);
- if (traitementlonlat[i] !== undefined) traitementlonlat[i] = traitementlonlat[i].split(" ");
- }
- //log('traitementlonlat après split',traitementlonlat);
- for (i=0; i < traitementlonlat.length; i++){
- for (j=0; j < traitementlonlat[i].length; j++){
- if ((traitementlonlat[i][j] != "\n") & (traitementlonlat[i][j] != "")) lonlat.push(traitementlonlat[i][j].split(","));
- }
- }
- var lonlatText = "";
- log('lonlat',lonlat);
- for (i=0; i<lonlat.length;i++){
- lonlatText += '<trkpt lon="' + lonlat[i][0] +'" lat="'+ lonlat[i][1] +'"></trkpt>\n';
- }
-
- var end = '</trkseg>\n</trk>\n</gpx>';
-
- WMEExpT.Trajets.objects[id].gpx = entete + nameIti + lonlatText + end;
- log('WMEExpT.Trajets.objects[id].gpx',WMEExpT.Trajets.objects[id].gpx);
-
- getId('exportTrajet').setAttribute('download', WMEExpT.Trajets.list[id]+ '.gpx');
- getId('exportTrajet').href='data:Application/octet-stream,' + encodeURIComponent(WMEExpT.Trajets.objects[id].gpx);
-
- }
-
- /* begin running the code! */
- WMEExpT_bootstrap ();
-
-