Skip to content

Instantly share code, notes, and snippets.

@paulbicheler
Last active October 11, 2017 19:26
Show Gist options
  • Save paulbicheler/98abc1acfa2289e9f708526c46ade38f to your computer and use it in GitHub Desktop.
Save paulbicheler/98abc1acfa2289e9f708526c46ade38f to your computer and use it in GitHub Desktop.
!function(){this.MeteoluxVar={logoSvg:0,OpenSansLoaded:0,cssIconsLoaded:0,cssWidgetLoaded:0,isTouchEventInit:0,slideDown:function(a){a.style.maxHeight="1000px",a.style.opacity="1"},slideUp:function(a){a.style.maxHeight="0",window.MeteoluxVar.once(1,function(){a.style.opacity="0"})},isTouchDevice:function(){return"ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0},once:function(a,b){var c=0,d=window.setInterval(function(){c++,c>=a&&(b(),window.clearInterval(d))},400)},getChildNodeByClass:function(a,b){for(var c=0;c<a.childNodes.length;c++)if(a.childNodes[c].className==b)return a.childNodes[c]},hasChildNode:function(a,b){for(var c=0;c<a.childNodes.length;c++)if(b==a.childNodes[c])return!0;return!1}},this.Meteolux=function(){this.resizeTimeout=null,this.logoUrl="http://meteolux.lu/template/assets/img/meteolux.svg",this.logoSvg="",this.getDataUrl="http://meteolux.lu/widget/getData.php",this.iconsCssUrl="http://meteolux.lu/template/assets/css/icons-meteolux.css",this.widgetCssUrl="http://meteolux.lu/template/assets/css/meteolux-widget.css",this.meteoluxUrl="http://meteolux.lu/";var b={theme:"dark",maxWidth:"1000",dropShadow:!0,displayAlert:!0,displayToday:!0,displayTodayNext:!0,nextDaysNumber:4,fontFamily:"Open sans",containerID:"meteolux-widget",initClass:"js-meteolux",callbackBefore:function(){},callbackAfter:function(){},onResizeCallback:function(){}};arguments[0]&&"object"==typeof arguments[0]?this.options=a(b,arguments[0]):this.options=b,this.element=document.getElementById(this.options.containerID),this.init()};var a=function(a,b){var c;for(c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a},b=function(a){a.resizeTimeout?(clearTimeout(a.resizeTimeout),a.resizeTimeout=null):a.resizeTimeout=setTimeout(function(){a.resizeTimeout=null,g(a),a.options.onResizeCallback()},66)},c=function(a,b){var c=new XMLHttpRequest;c.open("POST",a),c.addEventListener("readystatechange",function(){4!=c.readyState||200!=c.status&&0!==c.status?4==c.readyState&&200!=c.status:b(c.responseText)},!1),c.send()},d=function(a){return[].forEach.call(document.styleSheets,function(b){return b.href&&b.href.indexOf(a)>-1?!0:void 0}),!1},e=function(a,b){var c=document.createElement("link");return c.type="text/css",c.rel="stylesheet",void 0!==b&&(c.onload=function(){b()}),c.href=a,document.getElementsByTagName("head")[0].appendChild(c),!0},f=function(a,b){this.MeteoluxVar.logoSvg=c(a.logoUrl,function(c){a.logoSvg=c,d("http://fonts.googleapis.com/css?family=Open+Sans:700,600,400")||this.MeteoluxVar.OpenSansLoaded||(this.MeteoluxVar.OpenSansLoaded=1,"Open sans"==a.options.fontFamily&&e("http://fonts.googleapis.com/css?family=Open+Sans:700,600,400")),d(a.iconsCssUrl)||this.MeteoluxVar.cssIconsLoaded?this.MeteoluxVar.cssIconsLoaded&&this.MeteoluxVar.cssWidgetLoaded&&a.render(b):(this.MeteoluxVar.cssIconsLoaded=1,e(a.iconsCssUrl,function(){this.MeteoluxVar.cssIconsLoaded&&this.MeteoluxVar.cssWidgetLoaded&&a.render(b)})),d(a.widgetCssUrl)||this.MeteoluxVar.cssWidgetLoaded?this.MeteoluxVar.cssIconsLoaded&&this.MeteoluxVar.cssWidgetLoaded&&a.render(b):(this.MeteoluxVar.cssWidgetLoaded=1,e(a.widgetCssUrl,function(){this.MeteoluxVar.cssIconsLoaded&&this.MeteoluxVar.cssWidgetLoaded&&a.render(b)}))})},g=function(a){var b=a.element.parentNode.offsetWidth,c=(a.element.parentNode.offsetHeight,parseInt(window.getComputedStyle(a.element.parentNode,null).getPropertyValue("padding-left").replace("px",""))+parseInt(window.getComputedStyle(a.element.parentNode,null).getPropertyValue("padding-right").replace("px","")));if(c>0&&(b-=c),a.options.displayToday)var d=(document.querySelector("#"+a.options.containerID+" .mw-today").clientWidth+1,document.querySelector("#"+a.options.containerID+" .mw-today").clientHeight+1);if(a.options.nextDaysNumber&&"0"!==a.options.nextDaysNumber){document.querySelector("#"+a.options.containerID+" .mw-nextDay").clientWidth+1,document.querySelector("#"+a.options.containerID+" .mw-nextDay").clientHeight+1}if(a.options.displayTodayNext){var e=[],f=document.querySelector("#"+a.options.containerID+" .mw-todayNext");f.style.height="initial";var g=document.querySelectorAll("#"+a.options.containerID+" .mw-todayNext .mw-nextInfo");[].forEach.call(g,function(a){e.push(a.clientHeight),a.style.height="initial",a.className=a.className.replace(/mw-clearfix/g," ")}),e=Math.max.apply(Math,e)}a.element.querySelector("svg").setAttribute("height","30"),a.element.querySelector("svg").setAttribute("width","110");var h="mw-width-default";b=parseInt(b),290>=b||a.options.maxWidth<=290?(h="mw-width-160",a.options.displayTodayNext&&setTimeout(function(){f.style.height=e+"px",g=document.querySelectorAll("#"+a.options.containerID+" .mw-todayNext .mw-nextInfo"),[].forEach.call(g,function(a){a.className+=" mw-clearfix"})},50)):b>290&&360>=b||a.options.maxWidth>290&&a.options.maxWidth<=360?(h="mw-width-320",a.options.displayTodayNext&&setTimeout(function(){f.style.height=e+"px",g=document.querySelectorAll("#"+a.options.containerID+" .mw-todayNext .mw-nextInfo"),[].forEach.call(g,function(a){a.style.height=e+1+"px"})},50)):b>360&&620>=b||a.options.maxWidth>360&&a.options.maxWidth<=620?(h="mw-width-360",a.options.displayTodayNext&&setTimeout(function(){f.style.height=e+"px",g=document.querySelectorAll("#"+a.options.containerID+" .mw-todayNext .mw-nextInfo"),[].forEach.call(g,function(a){a.style.height=e+1+"px"})},50)):b>620&&1160>=b||a.options.maxWidth>620&&a.options.maxWidth<=1160?(h="mw-width-1160",a.options.displayTodayNext&&setTimeout(function(){e>d&&(d=e),f.style.height=d+"px",g=document.querySelectorAll("#"+a.options.containerID+" .mw-todayNext .mw-nextInfo"),[].forEach.call(g,function(a){a.style.height=d+1+"px"})},50)):(b>=1160||a.options.maxWidth>=1160)&&(h="mw-width-1160",a.options.displayTodayNext&&setTimeout(function(){f.style.height=d+"px",g=document.querySelectorAll("#"+a.options.containerID+" .mw-todayNext .mw-nextInfo"),[].forEach.call(g,function(a){a.style.height=d+1+"px"})},50)),a.element.className=a.element.className.replace(/mw-width-(.+)/,h)},h=function(a,b){if(window.XDomainRequest?a.xhr=new XDomainRequest:window.XMLHttpRequest?a.xhr=new XMLHttpRequest:a.xhr=new ActiveXObject("Microsoft.XMLHTTP"),a.xhr.open("POST",a.getDataUrl),"undefined"==typeof FormData)var c="testScript=65g1dsfg/*&xhrType=old";else{var c=new FormData;c.append("testScript","65g1dsfg/*")}window.XDomainRequest?a.xhr.onload=function(){b(JSON.parse(a.xhr.responseText))}:a.xhr.onreadystatechange=function(){4!=a.xhr.readyState||200!=a.xhr.status&&0!==a.xhr.status?4==a.xhr.readyState&&200!=a.xhr.status&&console.log("An error occured !\n\nCode :"+a.xhr.status+"\nText : "+a.xhr.statusText):b(JSON.parse(a.xhr.responseText))},a.xhr.send(c)};Meteolux.prototype.render=function(a){var b=this,c="<div class='mw-titleAlert'>";if(c+="<div class='mw-title mw-clearfix'><div><h1>Luxembourg, Findel </h1><span class='mw-date'>"+a.today.date+"</span></div><div class='mw-logo'><a href='"+b.meteoluxUrl+"' target='_blank'>"+b.logoSvg+"</a></div></div>",b.options.displayAlert){var d=0;if(null!==a.alerts&&a.alerts.length>0){for(c+="<div class='mw-alerts'>";a.alerts[d];){var e="";a.alerts[d].link!==b.meteoluxUrl+"fr/aide/dangers-meteorologiques/#"&&(e="<span class='mw-more-info'><i class='icon-right-big'></i><a href='"+a.alerts[d].link+"' target='_blank'>Plus d'informations</a></span>"),c+="<div class='mw-alert mw-descriptionContainer "+a.alerts[d].backgroundColor+"'><i class='"+a.alerts[d].icon+"'><span></span></i> <span class='mw-text'>"+a.alerts[d].text+"</span><div class='mw-description'><p>"+a.alerts[d].description+e+"</p></div></div>",d+=1}c+="</div>"}}c+="</div>",b.options.displayToday&&(c+="<div class='mw-today'>",c+="<div class='mw-generalInfo'><span class='mw-title'>"+a.today.actual.title+"</span><span class='mw-icone'><i class='"+a.today.actual.weatherIcon+"'></i> "+a.today.actual.weatherText+"</span><div class='mw-temps'><span class='mw-temp'>"+a.today.actual.max+"&deg;C <i class='icom-max' title='Température maximale'></i></span><span class='mw-temp'>"+a.today.actual.min+"&deg;C <i class='icom-min' title='Température minimale'></i></span></div><span class='mw-tempActual'>"+a.today.actual.temp+"<span><b>&deg;</b>c</span></span><span class='mw-wind'><i class='icom-icon-54' title='Vents'></i> "+a.today.actual.wind+"</span><span class='mw-gusts'> "+a.today.actual.wind_gusts+"</span></div>",c+="</div>"),b.options.displayTodayNext&&(c+="<div class='mw-todayNext'>",c+="<div class='mw-nextInfo mw-first'><span class='mw-title'>"+a.today.next1.title+"</span><span class='mw-icone'><i class='"+a.today.next1.weatherIcon+"' title='"+a.today.next1.weatherText+"'></i></span><span class='mw-temp'><i class='icom-"+a.today.next1.temp_icon+"' title='Température "+a.today.next1.temp_icon+"imale'></i><span>"+a.today.next1.temp_range+" &deg;C</span></span><span class='mw-wind'><span><i class='icom-icon-54' title='Vents'></i>"+a.today.next1.wind+"</span></span><span class='mw-gusts'><span>"+a.today.next1.wind_gusts+"</span></span></div><div class='mw-nextInfo'><span class='mw-title'>"+a.today.next2.title+"</span><span class='mw-icone'><i class='"+a.today.next2.weatherIcon+"' title='"+a.today.next2.weatherText+"'></i></span><span class='mw-temp'><i class='icom-"+a.today.next2.temp_icon+"' title='Température "+a.today.next2.temp_icon+"imale'></i><span>"+a.today.next2.temp_range+" &deg;C</span></span><span class='mw-wind'><span><i class='icom-icon-54' title='Vents'></i>"+a.today.next2.wind+"</span></span><span class='mw-gusts'><span>"+a.today.next2.wind_gusts+"</span></span></div>",c+="</div>"),c+="<div class='mw-nextDays mw-clearfix'>";for(var f=0;f<b.options.nextDaysNumber&&4>f;)c+="<div class='mw-nextDay mw-descriptionContainer'><span class='mw-icone'><i class='"+a.nextDays[f].weatherIcon+"' title='"+a.nextDays[f].weatherText+"'></i></span><span class='mw-date'>"+a.nextDays[f].date+"</span><span class='mw-temp-range'><i class='icom-max' title='Température maximale'></i> "+a.nextDays[f].maxRange+" &deg;C</span><span class='mw-temp-range'><i class='icom-min' title='Température minimale'></i> "+a.nextDays[f].minRange+" &deg;C</span><div class='mw-description'><p>"+a.nextDays[f].description+"</p></div></div>",f+=1;if(b.element.innerHTML=c,window.MeteoluxVar.isTouchDevice())var h=["touchstart"];else var h=["click"];var i=document.querySelectorAll("#"+b.options.containerID+" .mw-descriptionContainer");i.length>0&&[].forEach.call(i,function(a){h.forEach(function(b){a.addEventListener(b,function(){var b=window.MeteoluxVar.getChildNodeByClass(a,"mw-description");"undefined"==typeof b.dataset.descriptionOpened||"0"==b.dataset.descriptionOpened?(window.MeteoluxVar.slideDown(b),b.dataset.descriptionOpened=1):"1"==b.dataset.descriptionOpened&&(window.MeteoluxVar.slideUp(b),b.dataset.descriptionOpened=0)},!1)})}),g(b)},Meteolux.prototype.destroy=function(){this.options&&(this.element.innerHTML="",window.removeEventListener("resize",function(){b(this)}),this.options=null,this.resizeTimeout=null)},Meteolux.prototype.init=function(){var a=this;a.options&&(a.element.className+=" "+a.options.initClass,a.options.dropShadow&&(a.element.className+=" hasShadow"),a.options.displayToday&&(a.element.className+=" hasToday"),a.options.displayTodayNext&&(a.element.className+=" hasTodayNext"),a.options.displayAlert&&(a.element.className+=" hasAlert"),a.options.nextDaysNumber&&(a.element.className+=" hasNextDay"),a.element.className+=" meteolux-widget",a.element.className+=" "+a.options.theme,a.element.className+=" mw-width-default",a.element.style.maxWidth=a.options.maxWidth+"px",h(a,function(b){f(a,b)}),window.addEventListener("resize",function(){b(a)}))}}();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment