📄 currencies.js
字号:
/** * Objet javascript permettant de g?rer les donn?es des devises */ var niveau ;var class_technique = "techPrice" ; var Currencies = { currenciesViewBean: null, OriginalCurrency: null, CrtCurrency: null, /** * Liste des noms d'objets ? utiliser. */ getBeans: function() { return "CurrenciesViewBean"; }, /** * Initialisation de la variable JSON */ initJSON: function() { var num; try { for( num in beans){ if("CurrenciesViewBean" == beans[num].nom) { currenciesViewBean = beans[num].bean; } } } catch(e) { alert(e); } }, /** * Retourne la variable de classe instanci?e. */ getCurrenciesViewBean: function() { return currenciesViewBean; }, getScriptArg: function() { var ss_oas = document.getElementsByTagName("head")[0].getElementsByTagName("script"); var s_oas; for (var i =0;i<ss_oas.length;i++){if (ss_oas[i].src && ss_oas[i].src.match(/Currencies\.js(\#.*)?$/)) {s_oas = ss_oas[i]; break;}} if (s_oas) var arg = s_oas.src.match(/\#.*currency=([\w]+)/i); if(arg) return arg[1]; else return null ; }, observeSelect: function(sel, whattodonext) { selectHandle = sel ; Event.observe( sel, "change" , function() { if (selectIsBusy) return ; else { selectIsBusy = true; var cur = sel.value; Currencies.convertEverythingFromPage( Currencies.CrtCurrency, cur); Currencies.setCrtCurrency(cur); // if (whattodonext) eval (whattodonext) ; // si des sommes sont calculées, relancer les calculs dans chaque programme (Upsale, Meetings...) pour éviter les pbs d'arrondi selectIsBusy = false ; } }.bind(this) ); }, /** * Ecrivez votre code sur l'initialisation des affichage de la page * ici. * Cette m?thode est appel?e sur le onload de la page. */ rewrite: function() { var b = this.getCurrenciesViewBean(); if (b) { this.setCrtCurrency( b.defaultCurrency); // LH, multirates, upsale this.setOriginalCurrency( b.defaultCurrency); // LH, multirates, upsale if (this.getScriptArg()) { this.setCrtCurrency( b.basketCurrency) ; //customer Details, confirmation this.setOriginalCurrency( b.basketCurrency); // si appel <script type="text/javascript" src="/scripts-v54/view/json/modules/Currencies.js#currency=BasketCurrency"></script> } this.writeSelectCurrencies("s_devise", this.OriginalCurrency); } }, setCrtCurrency: function(crt) { this.CrtCurrency = crt ; }, setOriginalCurrency: function(crt) { this.OriginalCurrency = crt ; }, doSelectCurrency: function(idSelect, currency, doc){ if (!doc) doc =top.document; var select= doc.getElementById(idSelect); if (select) { for(i=0 ; i < select.options.length ; i++) { if (select.options[i].value == currency) { select.options[i].selected = true; break; } } } else { var sousDocs = doc.getElementsByTagName("iframe"); for(var i=0, l = sousDocs.length; i<l; i++){ //console.log("-> iframe"); this.doSelectCurrency(idSelect, currency,sousDocs[i].contentWindow.document ); } } }, /* * G?re la cr?ation du menu d?roulant contenant les devises * @idSelect : ID du Select * @currenciesTab : Tableau de l'ensemble des devises * @defaultCurrency : Valeur ? s?lectionner par d?faut *****************************************************************************************************/ writeSelectCurrencies: function(idSelect, Selectedcurrency){ var select= getElement(idSelect); if (select && select.nodeName== "SELECT") { select.options.length = 0; // mise à zero var count = 0; var def = Selectedcurrency ; for(var currency in Currencies.getCurrenciesViewBean().currencies){ select.options[count] = new Option(currency, currency); if(def == currency) select.options[count].selected = true; count++; } } }, registerEverythingFromPage:function(currency, doc){ if (currency == null) return 0; if (!doc) { doc =top.document; tarifListDevise = currency ; } initPrices(doc, class_technique, 'span'); var sousDocs = doc.getElementsByTagName("iframe"); for( i = sousDocs.length; i>0; i--){ this.registerEverythingFromPage(currency, sousDocs[i-1].contentWindow.document ); } }, purgeTarifs:function() { tarifListByPriceClass.length = 0; tarifListDevise = null ; }, convertEverythingFromPage: function(oldCurrency, newCurrency, doc){ if (!doc) { niveau = 0 ; doc =top.document;} else niveau = 1; var pleaseAddtarifListDevise = null ; if (oldCurrency != newCurrency) { // sommes var tabSpan = getElementsByClassName(doc, 'span', class_technique); for(var i = 0; i < tabSpan.length; i++){ if(tabSpan[i].innerHTML){ if (newCurrency != tarifListDevise || tarifListDevise == null) { // s'il n'existe pas de memoire qu'elle n'est pas utilisable (conversion vers une autre devise) if (tarifListDevise != null && tabSpan[i].className.indexOf('doNotRegister') == -1 && tarifListByPriceClass[doc.body.id + "|" + class_technique] && tarifListByPriceClass[doc.body.id + "|" + class_technique][i]) { // si une memoire existe, est utilisable et qu'on a le droit de l'utiliser (doNotRegister = somme calculée) tabSpan[i].innerHTML = this.convert( tarifListByPriceClass[doc.body.id + "|" + class_technique][i], tarifListDevise, newCurrency); // convertir a partir de la memoire (evite les arrondis successifs } else { if (tarifListDevise == null && tabSpan[i].className.indexOf('doNotRegister') == -1) { // si c'est juste qu'on n'a pas de memoire (cas de convertEverything appelé avant rewrite), en profiter pour la creer pleaseAddtarifListDevise = oldCurrency ; if (tarifListByPriceClass == null) tarifListByPriceClass = new Array(); if (tarifListByPriceClass[doc.body.id + "|" + class_technique] == null) tarifListByPriceClass[doc.body.id + "|" + class_technique] = new Array(); tarifListByPriceClass[doc.body.id + "|" + class_technique].push( Number(tabSpan[i].innerHTML) ); // enregistrer la valeur affichée en HTML } // convertir celle-ci tabSpan[i].innerHTML = this.convert( Number(tabSpan[i].innerHTML), oldCurrency, newCurrency); } } else { // back to original currency if (tabSpan[i].className.indexOf('doNotRegister') == -1 && tarifListByPriceClass[doc.body.id + "|" + class_technique] && tarifListByPriceClass[doc.body.id + "|" + class_technique][i]) { tabSpan[i].innerHTML = deuxDec(tarifListByPriceClass[doc.body.id + "|" + class_technique][i]) ; // utiliser la memoire si on a le droit } else { converted = this.convert( Number(tabSpan[i].innerHTML), oldCurrency, newCurrency); // sinon conversion (risque d'erreur d'arrondi, d'ou le recalcul apres) tabSpan[i].innerHTML = converted ; } } } } if (pleaseAddtarifListDevise != null) {tarifListDevise = pleaseAddtarifListDevise ;pleaseAddtarifListDevise = null} // devise var tabSpand = getElementsByClassName(doc, 'span', 'mdevise'); for(var i = 0; i < tabSpand.length; i++){ if(tabSpand[i].innerHTML){ tabSpand[i].innerHTML = newCurrency ; } } if (!niveau) { // pas plus d'un niveau d'imbrication var sousDocs = doc.getElementsByTagName("iframe"); for( i= sousDocs.length; i>0; i--){ // on passe à l'envers pour s'éviter des soucis avec les "details du prix" //var sousDocs = doc.getElementsByTagName("iframe"); // remettons les choses d'equerre malgré la recursivité... theIframe = sousDocs[i-1]; this.convertEverythingFromPage(oldCurrency, newCurrency, theIframe.contentWindow.document ); } } } }, convert: function( sum, deviseFrom, deviseTo) { var curAr = Currencies.getCurrenciesViewBean().currencies ; var ratioConv = curAr[deviseTo] / curAr[deviseFrom]; var prixConv = ""+ truncate(sum/ (ratioConv)) ; return deuxDec(prixConv); }}core.push(Currencies);/** * Mettez ci-dessous les m?thodes utilis?es par la page, utilisant le JSON. * Toute m?thode n'ayant pas de rapport avec le JSON ne sera pas accept?e. */document.write('<script type="text/javascript" src="/scripts-v54/getElementsByClassName.js"></script>');document.write('<script type="text/javascript" src="/scripts-v54/fct_diverses.js"></script>');var selectIsBusy = false ;var devises = new Array();var tarifListByPriceClass = new Array();var tarifListDevise = null;//var tarif_ref = null;var indexEUR = 28;function deuxDec(prixConv){ prixConv = String(prixConv) ; if (prixConv.indexOf(".",0)==-1) prixConv = prixConv +".00"; else { var nb_decimale = prixConv.length-prixConv.indexOf(".",0)-1; if (nb_decimale==1) prixConv = prixConv +"0"; } return prixConv;}function initPrices(oElm, oClassPrix, strTagNameP){ //console.log(oElm.body.id+" "+oClassPrix); var tabPrix = getElementsByClassName(oElm, strTagNameP, oClassPrix); var tarif_ref2 = new Array(); for(var i = 0; i < tabPrix.length; i++){ if(isNaN(tabPrix[i].innerHTML)) { mPrix = 0; } else { mPrix = tabPrix[i].innerHTML; } tarif_ref2[i] = truncate(mPrix); } tarifListByPriceClass[oElm.body.id + "|" + oClassPrix] = tarif_ref2; }function truncate(nombre) { nombre_tronque = ""+nombre; if (nombre_tronque.indexOf(".",0) !=-1) { return(Number(nombre_tronque.substring(0,Number(nombre_tronque.indexOf(".",0)+3)))); } else { return(Number(nombre)); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -