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(/¥/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; }();