Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
  • Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
  •  Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
// Fonction JavaScript pour Convertir les listings anglais en listings français.  var translateListing = function() {    var handler = {       get: function(target, name){           return name in target?               target[name] :               "";       }   };    function convert(parsing) {   	let p = new Proxy(parsing.tags, handler);     let mapping = {         'see': 'Voir',         'do': 'Faire',         'buy': 'Acheter',         'eat': 'Manger',         'drink': 'Sortir',         'sleep': 'Se loger',     };     let type = parsing.type in mapping ? mapping[parsing.type] : parsing.type;     return `* {{${type} | nom=${p.name} | alt=${p.alt} | url=${p.url} | email=${p.email} | wikipédia=${p.wikipedia} | wikidata=${p.wikidata} | facebook=${p.facebook}  | adresse=${p.address} | latitude=${p.lat} | longitude=${p.long} | direction=${p.directions} | image = ${p.image} | téléphone=${p.phone} | numéro gratuit=${p.tollfree} | téléphone portable= | fax= ${p.fax} | prix=${p.price} | horaire= ${p.hours} | wifi= | handicap= | mise à jour=${p.lastedit} | description=${p.content} }}`;   }    var tmplTagSearchExpr = /([^$*])$([^ ]+).*/;    var exprParams = /\*\s*{{\s*([\S]+)([\S\s]*)/;   var exprNextTag = /([\S\s]*?)(\||{{|\[\[|\]\]|\}\})([\S\s]*)/;    function pushNotEmpty(arr, text) {     if (text.trim()!=""){       arr.push(text);     }   }    function parseTokens(text) {       // search keyword       var ret = [];       for(;;) {           res = exprNextTag.exec(text)           if (res == null ) {               pushNotEmpty(ret, text)               return ret;           }           pushNotEmpty(ret, res[1]);           pushNotEmpty(ret, res[2]);           text = res[3];           if (text=="") {               return ret           }       }   }    function processParamEnd(ctx, tok) {     if (tok.trim()=="|" || (tok.trim()=="}}" && ctx.stack.length==0)) {       if (ctx.stack.length==0) {         if (ctx.param!="") {           let tmp = ctx.param.trim().split("=")           var value = "";           if (tmp.length==2) {             ctx.param = tmp[0].trim();             value = tmp[1].trim();           }           // console.log(ctx.param)           value = value.trim();           if (value!="") {             ctx.res[ctx.param] = value;           }         }         ctx.param = "";       } else {         ctx.param += tok;       }       return true;     } else {       return false;     }   }    function processIn(ctx, tok, expectIn) {     if (tok.trim()==expectIn) {       ctx.param += tok       ctx.stack.push(tok);       return true;     }     return false;   }    function processOut(ctx, tok, expectIn, expectOut) {     if (tok.trim()==expectOut) {       if (ctx.stack.length==0) {         console.log("bad pop " + expectOut);       } else {         let last = ctx.stack[ctx.stack.length-1];         if (last!=expectIn) {           console.log("bad pop " + expectOut);         } else {           ctx.param += tok;           ctx.stack.pop();         }       }       return true;     }     return false;   }    function processOther(ctx, tok) {     ctx.param += tok;   }    function parseTemplate(text) {       // search template start       let res = exprParams.exec(text)       if (res==null) { return; }       let type = res[1];       let rest = res[2];       let tokens = parseTokens(rest)       let ctx = new Object();       ctx.param = "";       ctx.stack = [];       ctx.res = new Object();       // console.log("Tokens: ", tokens)       for(let idx in tokens) {         let tok = tokens[idx];         processParamEnd(ctx, tok) || processIn(ctx, tok, "[[") || processOut(ctx, tok, "[[", "]]") || processIn(ctx, tok, "{{") ||         processOut(ctx, tok, "{{", "}}") || processOther(ctx, tok);         // processPipe(ctx, "|");       }        return {type: type, tags: ctx.res}   }    function pad(num) {       num = parseInt(num);       return (num<10)?"0"+num:String(num)   }    var timeExpr = /(\d+)(?::(\d+))?(AM|PM)/;   function postProcessTime(value) {     var out = "";     var offset = 0;     for(;;) {       var remaining = value.substr(offset);       var res = remaining.match(timeExpr);       if (res==null) {         out += remaining;         break;       }       out += remaining.substr(0, res.index);       var hour = parseInt(res[1]);       if (res[3].toLowerCase()=="pm" && hour!=12) {         hour += 12;       }       out += "{{Heure|" + hour;       if (res[2]) {         out += "|" + pad(res[2]);       }           out += "}}";       offset += res.index+res[0].length;     }       out = out.replace("Mon", "lun");       out = out.replace("Wed", "mer");       out = out.replace("Fri", "ven");       out = out.replace("Sat", "sam");       out = out.replace("Sun", "dim");     return out;   }    var priceExpr = /¥((?:[\d ,]+)?[\d,])/;   function postProcessPrice(value) {     var out = "";     var offset = 0;     for(;;) {       var remaining = value.substr(offset);       var res = remaining.match(priceExpr);       if (res==null) {         out += remaining;         break;       }       out += remaining.substr(0, res.index);       var price = res[1].replace(/[ ,]/, "");       out += "{{Prix|" + parseInt(price) + "|¥}}";       offset += res.index+res[0].length;     }       out = out.replace(/free/i, "gratuit");     return out;   }    function postProcessDirection(value) {       return value.replace(/walk/g, "à pied").replace(/Station/g, "gare");   }    function postProcess(key, value) {     value = value.replace(/&yen;/g, "¥");     if (key=="hours") {       return postProcessTime(value);     }     else if (key=="price") {       return postProcessPrice(value);     }     else if (key=="directions") {       return postProcessDirection(value);     }     return value;   }    function postProcessTags(tags) {     for(let key in tags) {       tags[key] = postProcess(key, tags[key]);     }   }    function inner(orig) {      let parsing = parseTemplate(orig);     // console.log(tags);     postProcessTags(parsing.tags);     return convert(parsing);   }   return inner; }();