angular.module("gettext",[]);angular.module("gettext").constant("gettext",function(n){return n});angular.module("gettext").service("translate",["gettextCatalog",function(n){return function(t){return n.getString(t)}}]);angular.module("gettext").factory("gettextCatalog",["gettextPlurals","gettextFallbackLanguage","$http","$cacheFactory","$interpolate","$rootScope",function(n,t,i,r,u,f){function o(){f.$broadcast("gettextLanguageChanged")}var e,s="$$noContext",h='<span id="test" title="test" class="tested">test<\/span>',a=angular.element("<span>"+h+"<\/span>").html()!==h,c=function(n){return e.debug&&e.currentLanguage!==e.baseLanguage?e.debugPrefix+n:n},l=function(n){return e.showTranslatedMarkers?e.translatedMarkerPrefix+n+e.translatedMarkerSuffix:n};return e={debug:!1,debugPrefix:"[MISSING]: ",showTranslatedMarkers:!1,translatedMarkerPrefix:"[",translatedMarkerSuffix:"]",strings:{},baseLanguage:"en",currentLanguage:"en",cache:r("strings"),setCurrentLanguage:function(n){this.currentLanguage=n;o()},getCurrentLanguage:function(){return this.currentLanguage},setStrings:function(n,t){var r,i,f,e,u;this.strings[n]||(this.strings[n]={});for(r in t){i=t[r];(a&&(r=angular.element("<span>"+r+"<\/span>").html()),angular.isString(i)||angular.isArray(i))&&(f={},f[s]=i,i=f);for(e in i)u=i[e],i[e]=angular.isArray(u)?u:[u];this.strings[n][r]=i}o()},getStringFormFor:function(t,i,r,u){return t?(((this.strings[t]||{})[i]||{})[u||s]||[])[n(t,r)]:null},getString:function(n,i,r){var f=t(this.currentLanguage);return n=this.getStringFormFor(this.currentLanguage,n,1,r)||this.getStringFormFor(f,n,1,r)||c(n),n=i?u(n)(i):n,l(n)},getPlural:function(n,i,r,f,e){var o=t(this.currentLanguage);return i=this.getStringFormFor(this.currentLanguage,i,n,e)||this.getStringFormFor(o,i,n,e)||c(1===n?i:r),f&&(f.$count=n,i=u(i)(f)),l(i)},loadRemote:function(n){return i({method:"GET",url:n,cache:e.cache}).then(function(n){var i=n.data,t;for(t in i)e.setStrings(t,i[t]);return n})}}}]);angular.module("gettext").directive("translate",["gettextCatalog","$parse","$animate","$compile","$window",function(n,t,i,r,u){function e(n,t,i){if(!n)throw new Error("You should add a "+t+" attribute whenever you add a "+i+" attribute.");}var o=function(){return String.prototype.trim?function(n){return"string"==typeof n?n.trim():n}:function(n){return"string"==typeof n?n.replace(/^\s*/,"").replace(/\s*$/,""):n}}(),f=function(){return function(n){if("string"!=typeof n)return n;for(n=o(n),n=n.replace("\n"," ");n.indexOf("  ")>-1;)n=n.replace("  "," ");return n}}(),s=parseInt((/msie (\d+)/.exec(angular.lowercase(u.navigator.userAgent))||[])[1],10);return{restrict:"AE",compile:function(u,o){var h,a,c,l;return e(!o.translatePlural||o.translateN,"translate-n","translate-plural"),e(!o.translateN||o.translatePlural,"translate-plural","translate-n"),o.translate?(a=o.$normalize(o.translate),h=f(o[a])):h=f(u.html()),c=o.translatePlural,l=o.translateContext,s<=8&&"<!--IE fix-->"===h.slice(-13)&&(h=h.slice(0,-13)),{post:function(u,e,o){function s(){var t,s,p,w;if(c?(u=a||(a=u.$new()),u.$count=y(u),t=n.getPlural(u.$count,h,c,null,l)):t=n.getString(h,null,l),o.translate){if(e.attr(o.translate)===t)return;e.attr(o.translate,t)}else{if(s=e.contents(),0===s.length)return;if(t===f(s.html()))return void(v&&r(s)(u));p=angular.element("<span>"+t+"<\/span>");r(p.contents())(u);w=p.contents();i.enter(w,e);i.leave(s)}}var y=t(o.translateN),a=null,v=!0;o.translateN&&u.$watch(o.translateN,s);u.$on("gettextLanguageChanged",s);s();v=!1}}}}}]);angular.module("gettext").factory("gettextFallbackLanguage",function(){var n={},t=/([^_]+)_[^_]+$/;return function(i){if(n[i])return n[i];var r=t.exec(i);return r?(n[i]=r[1],r[1]):null}});angular.module("gettext").filter("translate",["gettextCatalog",function(n){function t(t,i){return n.getString(t,null,i)}return t.$stateful=!0,t}]);angular.module("gettext").factory("gettextPlurals",function(){return function(n,t){switch(n){case"ay":case"bo":case"cgg":case"dz":case"fa":case"id":case"ja":case"jbo":case"ka":case"kk":case"km":case"ko":case"ky":case"lo":case"ms":case"my":case"sah":case"su":case"th":case"tt":case"ug":case"vi":case"wo":case"zh":return 0;case"is":return t%10!=1||t%100==11?1:0;case"jv":return 0!=t?1:0;case"mk":return 1==t||t%10==1?0:1;case"ach":case"ak":case"am":case"arn":case"br":case"fil":case"fr":case"gun":case"ln":case"mfe":case"mg":case"mi":case"oc":case"pt_BR":case"tg":case"ti":case"tr":case"uz":case"wa":case"zh":return t>1?1:0;case"lv":return t%10==1&&t%100!=11?0:0!=t?1:2;case"lt":return t%10==1&&t%100!=11?0:t%10>=2&&(t%100<10||t%100>=20)?1:2;case"be":case"bs":case"hr":case"ru":case"sr":case"uk":return t%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2;case"mnk":return 0==t?0:1==t?1:2;case"ro":return 1==t?0:0==t||t%100>0&&t%100<20?1:2;case"pl":return 1==t?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2;case"cs":case"sk":return 1==t?0:t>=2&&t<=4?1:2;case"sl":return t%100==1?1:t%100==2?2:t%100==3||t%100==4?3:0;case"mt":return 1==t?0:0==t||t%100>1&&t%100<11?1:t%100>10&&t%100<20?2:3;case"gd":return 1==t||11==t?0:2==t||12==t?1:t>2&&t<20?2:3;case"cy":return 1==t?0:2==t?1:8!=t&&11!=t?2:3;case"kw":return 1==t?0:2==t?1:3==t?2:3;case"ga":return 1==t?0:2==t?1:t<7?2:t<11?3:4;case"ar":return 0==t?0:1==t?1:2==t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5;default:return 1!=t?1:0}}}),function(){var i,o,f,p,w,b,s,n,nt,e,tt,k,it,h,rt,ut,d,c,ft,et,u,ot,l,st,ht,ct,lt,g,at,a,vt,t,r,v,y;n=function(n,t,r,u){return new i(n,t,r,u)};"undefined"!=typeof module&&null!==module&&null!=module.exports&&(module.exports=n);"function"==typeof define&&define.amd?define([],function(){return n}):(vt="undefined"!=typeof exports&&null!==exports?exports:this,vt.chroma=n);n.color=function(n,t,r,u){return new i(n,t,r,u)};n.hsl=function(n,t,r,u){return new i(n,t,r,u,"hsl")};n.hsv=function(n,t,r,u){return new i(n,t,r,u,"hsv")};n.rgb=function(n,t,r,u){return new i(n,t,r,u,"rgb")};n.hex=function(n){return new i(n)};n.css=function(n){return new i(n)};n.lab=function(n,t,r){return new i(n,t,r,"lab")};n.lch=function(n,t,r){return new i(n,t,r,"lch")};n.hsi=function(n,t,r){return new i(n,t,r,"hsi")};n.gl=function(n,t,r,u){return new i(255*n,255*t,255*r,u,"gl")};n.interpolate=function(n,r,u,f){return null==n||null==r?"#000":("string"===t(n)&&(n=new i(n)),"string"===t(r)&&(r=new i(r)),n.interpolate(u,r,f))};n.mix=n.interpolate;n.contrast=function(n,r){var u,f;return"string"===t(n)&&(n=new i(n)),"string"===t(r)&&(r=new i(r)),u=n.luminance(),f=r.luminance(),u>f?(u+.05)/(f+.05):(f+.05)/(u+.05)};n.luminance=function(t){return n(t).luminance()};n._Color=i;i=function(){function i(){var i,y,n,r,u,f,e,o,a,p,s,v,c,w,l;for(u=this,n=[],a=0,p=arguments.length;a<p;a++)null!=(y=arguments[a])&&n.push(y);if(0===n.length)s=[255,0,255,1,"rgb"],f=s[0],e=s[1],o=s[2],i=s[3],r=s[4];else if("array"===t(n[0])){if(3===n[0].length)v=n[0],f=v[0],e=v[1],o=v[2],i=1;else{if(4!==n[0].length)throw"unknown input argument";c=n[0];f=c[0];e=c[1];o=c[2];i=c[3]}r=null!=(w=n[1])?w:"rgb"}else"string"===t(n[0])?(f=n[0],r="hex"):"object"===t(n[0])?(l=n[0]._rgb,f=l[0],e=l[1],o=l[2],i=l[3],r="rgb"):n.length>=3&&(f=n[0],e=n[1],o=n[2]);3===n.length?(r="rgb",i=1):4===n.length?"string"===t(n[3])?(r=n[3],i=1):"number"===t(n[3])&&(r="rgb",i=n[3]):5===n.length&&(i=n[3],r=n[4]);null==i&&(i=1);"rgb"===r?u._rgb=[f,e,o,i]:"gl"===r?u._rgb=[255*f,255*e,255*o,i]:"hsl"===r?(u._rgb=h(f,e,o),u._rgb[3]=i):"hsv"===r?(u._rgb=rt(f,e,o),u._rgb[3]=i):"hex"===r?u._rgb=k(f):"lab"===r?(u._rgb=d(f,e,o),u._rgb[3]=i):"lch"===r?(u._rgb=et(f,e,o),u._rgb[3]=i):"hsi"===r&&(u._rgb=it(f,e,o),u._rgb[3]=i);nt(u._rgb)}return i.prototype.rgb=function(){return this._rgb.slice(0,3)},i.prototype.rgba=function(){return this._rgb},i.prototype.hex=function(){return st(this._rgb)},i.prototype.toString=function(){return this.name()},i.prototype.hsl=function(){return ct(this._rgb)},i.prototype.hsv=function(){return lt(this._rgb)},i.prototype.lab=function(){return g(this._rgb)},i.prototype.lch=function(){return at(this._rgb)},i.prototype.hsi=function(){return ht(this._rgb)},i.prototype.gl=function(){return[this._rgb[0]/255,this._rgb[1]/255,this._rgb[2]/255,this._rgb[3]]},i.prototype.luminance=function(){return ot(this._rgb)},i.prototype.name=function(){var t,i;t=this.hex();for(i in n.colors)if(t===n.colors[i])return i;return t},i.prototype.alpha=function(n){return arguments.length?(this._rgb[3]=n,this):this._rgb[3]},i.prototype.css=function(n){var t,u,i,r;return null==n&&(n="rgb"),u=this,i=u._rgb,3===n.length&&i[3]<1&&(n+="a"),"rgb"===n?n+"("+i.slice(0,3).map(Math.round).join(",")+")":"rgba"===n?n+"("+i.slice(0,3).map(Math.round).join(",")+","+i[3]+")":"hsl"===n||"hsla"===n?(t=u.hsl(),r=function(n){return Math.round(100*n)/100},t[0]=r(t[0]),t[1]=r(100*t[1])+"%",t[2]=r(100*t[2])+"%",4===n.length&&(t[3]=i[3]),n+"("+t.join(",")+")"):void 0},i.prototype.interpolate=function(n,r,u){var k,c,o,s,b,l,v,h,y,a,p,w,f,e;if(h=this,null==u&&(u="rgb"),"string"===t(r)&&(r=new i(r)),"hsl"===u||"hsv"===u||"lch"===u||"hsi"===u)"hsl"===u?(f=h.hsl(),e=r.hsl()):"hsv"===u?(f=h.hsv(),e=r.hsv()):"hsi"===u?(f=h.hsi(),e=r.hsi()):"lch"===u&&(f=h.lch(),e=r.lch()),"h"===u.substr(0,1)?(o=f[0],p=f[1],l=f[2],s=e[0],w=e[1],v=e[2]):(l=f[0],p=f[1],o=f[2],v=e[0],w=e[1],s=e[2]),isNaN(o)||isNaN(s)?isNaN(o)?isNaN(s)?c=Number.NaN:(c=s,1!==l&&0!==l||"hsv"===u||(a=w)):(c=o,1!==v&&0!==v||"hsv"===u||(a=p)):(k=s>o&&s-o>180?s-(o+360):s<o&&o-s>180?s+360-o:s-o,c=o+n*k),null==a&&(a=p+n*(w-p)),b=l+n*(v-l),y="h"===u.substr(0,1)?new i(c,a,b,u):new i(b,a,c,u);else if("rgb"===u)f=h._rgb,e=r._rgb,y=new i(f[0]+n*(e[0]-f[0]),f[1]+n*(e[1]-f[1]),f[2]+n*(e[2]-f[2]),u);else{if("lab"!==u)throw"color mode "+u+" is not supported";f=h.lab();e=r.lab();y=new i(f[0]+n*(e[0]-f[0]),f[1]+n*(e[1]-f[1]),f[2]+n*(e[2]-f[2]),u)}return y.alpha(h.alpha()+n*(r.alpha()-h.alpha())),y},i.prototype.premultiply=function(){var t,i;return i=this.rgb(),t=this.alpha(),n(i[0]*t,i[1]*t,i[2]*t,t)},i.prototype.darken=function(t){var i,r;return null==t&&(t=20),r=this,i=r.lch(),i[0]-=t,n.lch(i).alpha(r.alpha())},i.prototype.darker=function(n){return this.darken(n)},i.prototype.brighten=function(n){return null==n&&(n=20),this.darken(-n)},i.prototype.brighter=function(n){return this.brighten(n)},i.prototype.saturate=function(t){var i,r;return null==t&&(t=20),r=this,i=r.lch(),i[1]+=t,n.lch(i).alpha(r.alpha())},i.prototype.desaturate=function(n){return null==n&&(n=20),this.saturate(-n)},i}();nt=function(n){var t;for(t in n)t<3?(n[t]<0&&(n[t]=0),n[t]>255&&(n[t]=255)):3===t&&(n[t]<0&&(n[t]=0),n[t]>1&&(n[t]=1));return n};tt=function(t){var f,r,u,i,e,o,s,c;if(t=t.toLowerCase(),null!=n.colors&&n.colors[t])return k(n.colors[t]);if(u=t.match(/rgb\(\s*(\-?\d+),\s*(\-?\d+)\s*,\s*(\-?\d+)\s*\)/)){for(i=u.slice(1,4),r=e=0;e<=2;r=++e)i[r]=+i[r];i[3]=1}else if(u=t.match(/rgba\(\s*(\-?\d+),\s*(\-?\d+)\s*,\s*(\-?\d+)\s*,\s*([01]|[01]?\.\d+)\)/))for(i=u.slice(1,5),r=o=0;o<=3;r=++o)i[r]=+i[r];else if(u=t.match(/rgb\(\s*(\-?\d+(?:\.\d+)?)%,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*\)/)){for(i=u.slice(1,4),r=s=0;s<=2;r=++s)i[r]=Math.round(2.55*i[r]);i[3]=1}else if(u=t.match(/rgba\(\s*(\-?\d+(?:\.\d+)?)%,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)/)){for(i=u.slice(1,5),r=c=0;c<=2;r=++c)i[r]=Math.round(2.55*i[r]);i[3]=+i[3]}else(u=t.match(/hsl\(\s*(\-?\d+(?:\.\d+)?),\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*\)/))?(f=u.slice(1,4),f[1]*=.01,f[2]*=.01,i=h(f),i[3]=1):(u=t.match(/hsla\(\s*(\-?\d+(?:\.\d+)?),\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)/))&&(f=u.slice(1,4),f[1]*=.01,f[2]*=.01,i=h(f),i[3]=+u[4]);return i};k=function(n){var f,i,r,u,e,t;if(n.match(/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/))return 4!==n.length&&7!==n.length||(n=n.substr(1)),3===n.length&&(n=n.split(""),n=n[0]+n[0]+n[1]+n[1]+n[2]+n[2]),t=parseInt(n,16),u=t>>16,r=t>>8&255,i=255&t,[u,r,i,1];if(n.match(/^#?([A-Fa-f0-9]{8})$/))return 9===n.length&&(n=n.substr(1)),t=parseInt(n,16),u=t>>24&255,r=t>>16&255,i=t>>8&255,f=255&t,[u,r,i,f];if(e=tt(n))return e;throw"unknown color: "+n;};it=function(n,t,i){var s,h,c,l;return l=r(arguments),n=l[0],t=l[1],i=l[2],n/=360,n<1/3?(s=(1-t)/3,c=(1+t*e(f*n)/e(o-f*n))/3,h=1-(s+c)):n<2/3?(n-=1/3,c=(1-t)/3,h=(1+t*e(f*n)/e(o-f*n))/3,s=1-(c+h)):(n-=2/3,h=(1-t)/3,s=(1+t*e(f*n)/e(o-f*n))/3,c=1-(h+s)),c=u(i*c*3),h=u(i*h*3),s=u(i*s*3),[255*c,255*h,255*s]};h=function(){var l,f,a,e,t,i,v,o,u,s,n,y,h,c;if(h=r(arguments),e=h[0],o=h[1],i=h[2],0===o)v=a=l=255*i;else{for(n=[0,0,0],f=[0,0,0],s=i<.5?i*(1+o):i+o-i*o,u=2*i-s,e/=360,n[0]=e+1/3,n[1]=e,n[2]=e-1/3,t=y=0;y<=2;t=++y)n[t]<0&&(n[t]+=1),n[t]>1&&(n[t]-=1),f[t]=6*n[t]<1?u+6*(s-u)*n[t]:2*n[t]<1?s:3*n[t]<2?u+(s-u)*(2/3-n[t])*6:u;c=[Math.round(255*f[0]),Math.round(255*f[1]),Math.round(255*f[2])];v=c[0];a=c[1];l=c[2]}return[v,a,l]};rt=function(){var t,b,i,u,k,e,s,f,o,h,n,c,l,a,v,y,p,w;if(c=r(arguments),u=c[0],o=c[1],n=c[2],n*=255,0===o)f=i=t=n;else switch(360===u&&(u=0),u>360&&(u-=360),u<0&&(u+=360),u/=60,k=Math.floor(u),b=u-k,e=n*(1-o),s=n*(1-o*b),h=n*(1-o*(1-b)),k){case 0:l=[n,h,e];f=l[0];i=l[1];t=l[2];break;case 1:a=[s,n,e];f=a[0];i=a[1];t=a[2];break;case 2:v=[e,n,h];f=v[0];i=v[1];t=v[2];break;case 3:y=[e,s,n];f=y[0];i=y[1];t=y[2];break;case 4:p=[h,e,n];f=p[0];i=p[1];t=p[2];break;case 5:w=[n,e,s];f=w[0];i=w[1];t=w[2]}return f=Math.round(f),i=Math.round(i),t=Math.round(t),[f,i,t]};p=.95047;w=1;b=1.08883;ut=function(){var n,t,u,f,e,i;return i=r(arguments),e=i[0],n=i[1],t=i[2],u=Math.sqrt(n*n+t*t),f=Math.atan2(t,n)/Math.PI*180,[e,u,f]};d=function(n,t,i){var h,l,f,r,e,o,s;return void 0!==n&&3===n.length&&(o=n,n=o[0],t=o[1],i=o[2]),void 0!==n&&3===n.length&&(s=n,n=s[0],t=s[1],i=s[2]),r=(n+16)/116,f=r+t/500,e=r-i/200,f=c(f)*p,r=c(r)*w,e=c(e)*b,l=y(3.2404542*f-1.5371385*r-.4985314*e),h=y(-.969266*f+1.8760108*r+.041556*e),i=y(.0556434*f-.2040259*r+1.0572252*e),[u(l,0,255),u(h,0,255),u(i,0,255),1]};c=function(n){return n>.206893034?n*n*n:(n-4/29)/7.787037};y=function(n){return Math.round(255*(n<=.00304?12.92*n:1.055*Math.pow(n,1/2.4)-.055))};ft=function(){var i,n,u,t;return t=r(arguments),u=t[0],i=t[1],n=t[2],n=n*Math.PI/180,[u,Math.cos(n)*i,Math.sin(n)*i]};et=function(n,t,i){var o,s,r,h,c,f,e;return f=ft(n,t,i),o=f[0],s=f[1],r=f[2],e=d(o,s,r),c=e[0],h=e[1],r=e[2],[u(c,0,255),u(h,0,255),u(r,0,255)]};ot=function(n,t,i){var u;return u=r(arguments),n=u[0],t=u[1],i=u[2],n=l(n),t=l(t),i=l(i),.2126*n+.7152*t+.0722*i};l=function(n){return n/=255,n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)};st=function(){var i,u,f,t,e,n;return n=r(arguments),f=n[0],u=n[1],i=n[2],e=f<<16|u<<8|i,t="000000"+e.toString(16),"#"+t.substr(t.length-6)};ht=function(){var e,u,n,t,o,h,i,s,f;return f=r(arguments),i=f[0],n=f[1],u=f[2],e=2*Math.PI,i/=255,n/=255,u/=255,h=Math.min(i,n,u),o=(i+n+u)/3,s=1-h/o,0===s?t=0:(t=(i-n+(i-u))/2,t/=Math.sqrt((i-n)*(i-n)+(i-u)*(n-u)),t=Math.acos(t),u>n&&(t=e-t),t/=e),[360*t,s,o]};ct=function(n,t,i){var f,o,r,u,s,e;return void 0!==n&&n.length>=3&&(e=n,n=e[0],t=e[1],i=e[2]),n/=255,t/=255,i/=255,u=Math.min(n,t,i),r=Math.max(n,t,i),o=(r+u)/2,r===u?(s=0,f=Number.NaN):s=o<.5?(r-u)/(r+u):(r-u)/(2-r-u),n===r?f=(t-i)/(r-u):t===r?f=2+(i-n)/(r-u):i===r&&(f=4+(n-t)/(r-u)),f*=60,f<0&&(f+=360),[f,s,o]};lt=function(){var i,e,u,t,n,h,f,s,c,o;return o=r(arguments),f=o[0],u=o[1],i=o[2],h=Math.min(f,u,i),n=Math.max(f,u,i),e=n-h,c=n/255,0===n?(t=Number.NaN,s=0):(s=e/n,f===n&&(t=(u-i)/e),u===n&&(t=2+(i-f)/e),i===n&&(t=4+(f-u)/e),(t*=60)<0&&(t+=360)),[t,s,c]};g=function(){var n,t,i,e,u,o,f;return f=r(arguments),i=f[0],t=f[1],n=f[2],i=a(i),t=a(t),n=a(n),e=v((.4124564*i+.3575761*t+.1804375*n)/p),u=v((.2126729*i+.7151522*t+.072175*n)/w),o=v((.0193339*i+.119192*t+.9503041*n)/b),[116*u-16,500*(e-u),200*(u-o)]};a=function(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)};v=function(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29};at=function(){var u,n,f,e,o,t,i;return t=r(arguments),o=t[0],f=t[1],n=t[2],i=g(o,f,n),e=i[0],u=i[1],n=i[2],ut(e,u,n)};n.scale=function(i,r){var f,b,h,c,k,nt,d,l,e,p,u,a,s,w,tt,g,v,o,y;return w="rgb",tt=n("#ccc"),y=0,!1,u=[0,1],e=[],v=!1,o=[],s=0,a=1,p=!1,g=0,l={},k=function(i,r){var u,a,f,s,v,h,l;if(null==i&&(i=["#ddd","#222"]),null!=i&&"string"===t(i)&&null!=(null!=(v=n.brewer)?v[i]:void 0)&&(i=n.brewer[i]),"array"===t(i)){for(i=i.slice(0),u=f=0,h=i.length-1;0<=h?f<=h:f>=h;u=0<=h?++f:--f)a=i[u],"string"===t(a)&&(i[u]=n(a));if(null!=r)o=r;else for(o=[],u=s=0,l=i.length-1;0<=l?s<=l:s>=l;u=0<=l?++s:--s)o.push(u/(i.length-1))}return c(),e=i},nt=function(n){return null==n&&(n=[]),u=n,s=n[0],a=n[n.length-1],c(),g=2===n.length?0:n.length-1},b=function(n){var t,i;if(null!=u){for(i=u.length-1,t=0;t<i&&n>=u[t];)t++;return t-1}return 0},d=function(n){return n},function(n){var t,e,r,i,f;return f=n,u.length>2&&(i=u.length-1,t=b(n),r=u[0]+(u[1]-u[0])*(0+.5*y),e=u[i-1]+(u[i]-u[i-1])*(1-.5*y),f=s+(u[t]+.5*(u[t+1]-u[t])-r)/(e-r)*(a-s)),f},h=function(i,r){var nt,c,h,k,v,f,y,p;if(null==r&&(r=!1),isNaN(i))return tt;if(r?f=i:u.length>2?(nt=b(i),f=nt/(g-1)):a!==s?(f=(i-s)/(a-s),f=Math.min(1,Math.max(0,f))):f=s,r||(f=d(f)),k=Math.floor(1e4*f),l[k])c=l[k];else{if("array"===t(e))for(h=y=0,p=o.length-1;0<=p?y<=p:y>=p;h=0<=p?++y:--y){if(v=o[h],f<=v){c=e[h];break}if(f>=v&&h===o.length-1){c=e[h];break}if(f>v&&f<o[h+1]){f=(f-v)/(o[h+1]-v);c=n.interpolate(e[h],e[h+1],f,w);break}}else"function"===t(e)&&(c=e(f));l[k]=c}return c},c=function(){return l={}},k(i,r),f=function(n){var t;return t=h(n),v&&t[v]?t[v]():t},f.domain=function(t,i,r,e){var o;return null==r&&(r="e"),arguments.length?(null!=i&&(o=n.analyze(t,e),t=0===i?[o.min,o.max]:n.limits(o,r,i)),nt(t),f):u},f.mode=function(n){return arguments.length?(w=n,c(),f):w},f.range=function(n,t){return k(n,t),f},f.out=function(n){return v=n,f},f.spread=function(n){return arguments.length?(y=n,f):y},f.correctLightness=function(n){return arguments.length?(p=n,c(),d=p?function(n){var i,u,r,t,f,s,c,e,o;for(i=h(0,!0).lab()[0],u=h(1,!0).lab()[0],c=i>u,r=h(n,!0).lab()[0],f=i+(u-i)*n,t=r-f,e=0,o=1,s=20;Math.abs(t)>.01&&s-->0;)!function(){c&&(t*=-1);t<0?(e=n,n+=.5*(o-n)):(o=n,n+=.5*(e-n));r=h(n,!0).lab()[0];t=r-f}();return n}:function(n){return n},f):p},f.colors=function(n){var t,r,e,s,h,o;if(null==n&&(n="hex"),i=[],r=[],u.length>2)for(t=e=1,o=u.length;1<=o?e<o:e>o;t=1<=o?++e:--e)r.push(.5*(u[t-1]+u[t]));else r=u;for(s=0,h=r.length;s<h;s++)t=r[s],i.push(f(t)[n]());return i},f};null==n.scales&&(n.scales={});n.scales.cool=function(){return n.scale([n.hsl(180,1,.9),n.hsl(250,.7,.4)])};n.scales.hot=function(){return n.scale(["#000","#f00","#ff0","#fff"],[0,.25,.75,1]).mode("rgb")};n.analyze=function(i,r,u){var c,s,f,e,h,o,l;if(f={min:Number.MAX_VALUE,max:-1*Number.MAX_VALUE,sum:0,values:[],count:0},null==u&&(u=function(){return!0}),c=function(n){null==n||isNaN(n)||(f.values.push(n),f.sum+=n,n<f.min&&(f.min=n),n>f.max&&(f.max=n),f.count+=1)},h=function(n,i){if(u(n,i))return c(null!=r&&"function"===t(r)?r(n):null!=r&&"string"===t(r)||"number"===t(r)?n[r]:n)},"array"===t(i))for(o=0,l=i.length;o<l;o++)e=i[o],h(e);else for(s in i)e=i[s],h(e,s);return f.domain=[f.min,f.max],f.limits=function(t,i){return n.limits(f,t,i)},f};n.limits=function(i,r,u){var fi,si,a,y,ei,yi,f,e,p,o,c,pi,s,hi,ci,b,li,v,oi,w,ai,k,l,wi,h,d,g,nt,tt,it,rt,ut,ft,et,ot,st,ht,ct,lt,at,vt,bi,yt,pt,wt,bt,kt,dt,gt,ni,ti,ii,ri,ui,vi;if(null==r&&(r="equal"),null==u&&(u=7),"array"===t(i)&&(i=n.analyze(i)),s=i.min,c=i.max,i.sum,h=i.values.sort(function(n,t){return n-t}),o=[],"c"===r.substr(0,1)&&(o.push(s),o.push(c)),"e"===r.substr(0,1)){for(o.push(s),f=d=1,st=u-1;1<=st?d<=st:d>=st;f=1<=st?++d:--d)o.push(s+f/u*(c-s));o.push(c)}else if("l"===r.substr(0,1)){if(s<=0)throw"Logarithmic scales are only possible for values > 0";for(hi=Math.LOG10E*Math.log(s),pi=Math.LOG10E*Math.log(c),o.push(s),f=g=1,yt=u-1;1<=yt?g<=yt:g>=yt;f=1<=yt?++g:--g)o.push(Math.pow(10,hi+f/u*(pi-hi)));o.push(c)}else if("q"===r.substr(0,1)){for(o.push(s),f=nt=1,pt=u-1;1<=pt?nt<=pt:nt>=pt;f=1<=pt?++nt:--nt)oi=h.length*f/u,w=Math.floor(oi),w===oi?o.push(h[w]):(ai=oi-w,o.push(h[w]*ai+h[w+1]*(1-ai)));o.push(c)}else if("k"===r.substr(0,1)){for(b=h.length,fi=new Array(b),ei=new Array(u),k=!0,li=0,a=null,a=[],a.push(s),f=tt=1,wt=u-1;1<=wt?tt<=wt:tt>=wt;f=1<=wt?++tt:--tt)a.push(s+f/u*(c-s));for(a.push(c);k;){for(e=it=0,bt=u-1;0<=bt?it<=bt:it>=bt;e=0<=bt?++it:--it)ei[e]=0;for(f=rt=0,kt=b-1;0<=kt?rt<=kt:rt>=kt;f=0<=kt?++rt:--rt){for(wi=h[f],ci=Number.MAX_VALUE,e=ut=0,dt=u-1;0<=dt?ut<=dt:ut>=dt;e=0<=dt?++ut:--ut)(yi=Math.abs(a[e]-wi))<ci&&(ci=yi,si=e);ei[si]++;fi[f]=si}for(v=new Array(u),e=ft=0,gt=u-1;0<=gt?ft<=gt:ft>=gt;e=0<=gt?++ft:--ft)v[e]=null;for(f=et=0,ni=b-1;0<=ni?et<=ni:et>=ni;f=0<=ni?++et:--et)y=fi[f],null===v[y]?v[y]=h[f]:v[y]+=h[f];for(e=ot=0,ht=u-1;0<=ht?ot<=ht:ot>=ht;e=0<=ht?++ot:--ot)v[e]*=1/ei[e];for(k=!1,e=ti=0,ct=u-1;0<=ct?ti<=ct:ti>=ct;e=0<=ct?++ti:--ti)if(v[e]!==a[f]){k=!0;break}a=v;li++;li>200&&(k=!1)}for(p={},e=ii=0,lt=u-1;0<=lt?ii<=lt:ii>=lt;e=0<=lt?++ii:--ii)p[e]=[];for(f=ri=0,at=b-1;0<=at?ri<=at:ri>=at;f=0<=at?++ri:--ri)y=fi[f],p[y].push(h[f]);for(l=[],e=ui=0,vt=u-1;0<=vt?ui<=vt:ui>=vt;e=0<=vt?++ui:--ui)l.push(p[e][0]),l.push(p[e][p[e].length-1]);for(l=l.sort(function(n,t){return n-t}),o.push(l[0]),f=vi=1,bi=l.length-1;vi<=bi;f=vi+=2)isNaN(l[f])||o.push(l[f])}return o};n.brewer={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]};n.colors={indigo:"#4b0082",gold:"#ffd700",hotpink:"#ff69b4",firebrick:"#b22222",indianred:"#cd5c5c",yellow:"#ffff00",mistyrose:"#ffe4e1",darkolivegreen:"#556b2f",olive:"#808000",darkseagreen:"#8fbc8f",pink:"#ffc0cb",tomato:"#ff6347",lightcoral:"#f08080",orangered:"#ff4500",navajowhite:"#ffdead",lime:"#00ff00",palegreen:"#98fb98",darkslategrey:"#2f4f4f",greenyellow:"#adff2f",burlywood:"#deb887",seashell:"#fff5ee",mediumspringgreen:"#00fa9a",fuchsia:"#ff00ff",papayawhip:"#ffefd5",blanchedalmond:"#ffebcd",chartreuse:"#7fff00",dimgray:"#696969",black:"#000000",peachpuff:"#ffdab9",springgreen:"#00ff7f",aquamarine:"#7fffd4",white:"#ffffff",orange:"#ffa500",lightsalmon:"#ffa07a",darkslategray:"#2f4f4f",brown:"#a52a2a",ivory:"#fffff0",dodgerblue:"#1e90ff",peru:"#cd853f",lawngreen:"#7cfc00",chocolate:"#d2691e",crimson:"#dc143c",forestgreen:"#228b22",darkgrey:"#a9a9a9",lightseagreen:"#20b2aa",cyan:"#00ffff",mintcream:"#f5fffa",silver:"#c0c0c0",antiquewhite:"#faebd7",mediumorchid:"#ba55d3",skyblue:"#87ceeb",gray:"#808080",darkturquoise:"#00ced1",goldenrod:"#daa520",darkgreen:"#006400",floralwhite:"#fffaf0",darkviolet:"#9400d3",darkgray:"#a9a9a9",moccasin:"#ffe4b5",saddlebrown:"#8b4513",grey:"#808080",darkslateblue:"#483d8b",lightskyblue:"#87cefa",lightpink:"#ffb6c1",mediumvioletred:"#c71585",slategrey:"#708090",red:"#ff0000",deeppink:"#ff1493",limegreen:"#32cd32",darkmagenta:"#8b008b",palegoldenrod:"#eee8aa",plum:"#dda0dd",turquoise:"#40e0d0",lightgrey:"#d3d3d3",lightgoldenrodyellow:"#fafad2",darkgoldenrod:"#b8860b",lavender:"#e6e6fa",maroon:"#800000",yellowgreen:"#9acd32",sandybrown:"#f4a460",thistle:"#d8bfd8",violet:"#ee82ee",navy:"#000080",magenta:"#ff00ff",dimgrey:"#696969",tan:"#d2b48c",rosybrown:"#bc8f8f",olivedrab:"#6b8e23",blue:"#0000ff",lightblue:"#add8e6",ghostwhite:"#f8f8ff",honeydew:"#f0fff0",cornflowerblue:"#6495ed",slateblue:"#6a5acd",linen:"#faf0e6",darkblue:"#00008b",powderblue:"#b0e0e6",seagreen:"#2e8b57",darkkhaki:"#bdb76b",snow:"#fffafa",sienna:"#a0522d",mediumblue:"#0000cd",royalblue:"#4169e1",lightcyan:"#e0ffff",green:"#008000",mediumpurple:"#9370db",midnightblue:"#191970",cornsilk:"#fff8dc",paleturquoise:"#afeeee",bisque:"#ffe4c4",slategray:"#708090",darkcyan:"#008b8b",khaki:"#f0e68c",wheat:"#f5deb3",teal:"#008080",darkorchid:"#9932cc",deepskyblue:"#00bfff",salmon:"#fa8072",darkred:"#8b0000",steelblue:"#4682b4",palevioletred:"#db7093",lightslategray:"#778899",aliceblue:"#f0f8ff",lightslategrey:"#778899",lightgreen:"#90ee90",orchid:"#da70d6",gainsboro:"#dcdcdc",mediumseagreen:"#3cb371",lightgray:"#d3d3d3",mediumturquoise:"#48d1cc",lemonchiffon:"#fffacd",cadetblue:"#5f9ea0",lightyellow:"#ffffe0",lavenderblush:"#fff0f5",coral:"#ff7f50",purple:"#800080",aqua:"#00ffff",whitesmoke:"#f5f5f5",mediumslateblue:"#7b68ee",darkorange:"#ff8c00",mediumaquamarine:"#66cdaa",darksalmon:"#e9967a",beige:"#f5f5dc",blueviolet:"#8a2be2",azure:"#f0ffff",lightsteelblue:"#b0c4de",oldlace:"#fdf5e6"};t=function(){var t,i,n,u,r;for(t={},r="Boolean Number String Function Array Date RegExp Undefined Null".split(" "),n=0,u=r.length;n<u;n++)i=r[n],t["[object "+i+"]"]=i.toLowerCase();return function(n){var i;return i=Object.prototype.toString.call(n),t[i]||"object"}}();u=function(n,t,i){return null==t&&(t=0),null==i&&(i=1),n<t&&(n=t),n>i&&(n=i),n};r=function(n){return n.length>=3?n:n[0]};f=2*Math.PI;o=Math.PI/3;e=Math.cos;s=function(t){var f,l,a,i,r,u,o,v,c,h,e;return t=function(){var r,f,u;for(u=[],r=0,f=t.length;r<f;r++)i=t[r],u.push(n(i));return u}(),2===t.length?(c=function(){var n,u,r;for(r=[],n=0,u=t.length;n<u;n++)i=t[n],r.push(i.lab());return r}(),r=c[0],u=c[1],f=function(t){var i,f;return f=function(){var n,f;for(f=[],i=n=0;n<=2;i=++n)f.push(r[i]+t*(u[i]-r[i]));return f}(),n.lab.apply(n,f)}):3===t.length?(h=function(){var n,u,r;for(r=[],n=0,u=t.length;n<u;n++)i=t[n],r.push(i.lab());return r}(),r=h[0],u=h[1],o=h[2],f=function(t){var i,f;return f=function(){var n,f;for(f=[],i=n=0;n<=2;i=++n)f.push((1-t)*(1-t)*r[i]+2*(1-t)*t*u[i]+t*t*o[i]);return f}(),n.lab.apply(n,f)}):4===t.length?(e=function(){var n,u,r;for(r=[],n=0,u=t.length;n<u;n++)i=t[n],r.push(i.lab());return r}(),r=e[0],u=e[1],o=e[2],v=e[3],f=function(t){var i,f;return f=function(){var n,f;for(f=[],i=n=0;n<=2;i=++n)f.push((1-t)*(1-t)*(1-t)*r[i]+3*(1-t)*(1-t)*t*u[i]+3*(1-t)*t*t*o[i]+t*t*t*v[i]);return f}(),n.lab.apply(n,f)}):5===t.length&&(l=s(t.slice(0,3)),a=s(t.slice(2,5)),f=function(n){return n<.5?l(2*n):a(2*(n-.5))}),f};n.interpolate.bezier=s}.call(this),function(n){var i={}.hasOwnProperty,r=function(n,t){var r;for(r in n)i.call(n,r)&&t(r,n[r])},u=function(n,t){return t?(r(t,function(t,i){n[t]=i}),n):n},f=/["'\\\b\f\n\r\t]/,e=/[ !#-&\(-\[\]-~]/,t=function(n,t){var p=t&&t.json,i;t=u({es6:!1,json:!1},t);for(var h,c,l,s=n,o=-1,a=s.length,r="";++o<a;)if(i=s.charAt(o),t.es6&&(h=s.charCodeAt(o))>=55296&&h<=56319&&a>o+1&&(c=s.charCodeAt(o+1))>=56320&&c<=57343)l=1024*(h-55296)+c- -9216,r+="\\u{"+l.toString(16).toUpperCase()+"}",o++;else if(e.test(i))r+=i;else if('"'!=i)if("'"!=i)if(f.test(i))r+=i;else{var w=i.charCodeAt(0),v=w.toString(16).toUpperCase(),y=v.length>2||p,b="\\"+(y?"u":"x")+("0000"+v).slice(y?-4:-2);r+=b}else r+=i;else r+=i;return r};t.version="0.5.0";n.jsesc=t}(this),function(n){var t=function(){"use strict";var f="s",n=function(n){var t=-n.getTimezoneOffset();return null!==t?t:0},i=function(n,t,i){var r=new Date;return void 0!==n&&r.setFullYear(n),r.setMonth(t),r.setDate(i),r},r=function(t){return n(i(t,0,2))},u=function(t){return n(i(t,5,2))},e=function(t){var i=t.getMonth()>7,f=i?u(t.getFullYear()):r(t.getFullYear()),o=n(t),s=f<0,e=f-o;return s||i?0!==e:e<0},o=function(){var n=r(),t=u(),i=n-t;return i<0?n+",1":i>0?t+",1,"+f:n+",0"};return{determine:function(){var n=o();return new t.TimeZone(t.olson.timezones[n])},date_is_dst:e,dst_start_for:function(n){var t=new Date(2010,6,15,1,0,0,0);return{"America/Denver":new Date(2011,2,13,3,0,0,0),"America/Mazatlan":new Date(2011,3,3,3,0,0,0),"America/Chicago":new Date(2011,2,13,3,0,0,0),"America/Mexico_City":new Date(2011,3,3,3,0,0,0),"America/Asuncion":new Date(2012,9,7,3,0,0,0),"America/Santiago":new Date(2012,9,3,3,0,0,0),"America/Campo_Grande":new Date(2012,9,21,5,0,0,0),"America/Montevideo":new Date(2011,9,2,3,0,0,0),"America/Sao_Paulo":new Date(2011,9,16,5,0,0,0),"America/Los_Angeles":new Date(2011,2,13,8,0,0,0),"America/Santa_Isabel":new Date(2011,3,5,8,0,0,0),"America/Havana":new Date(2012,2,10,2,0,0,0),"America/New_York":new Date(2012,2,10,7,0,0,0),"Europe/Helsinki":new Date(2013,2,31,5,0,0,0),"Pacific/Auckland":new Date(2011,8,26,7,0,0,0),"America/Halifax":new Date(2011,2,13,6,0,0,0),"America/Goose_Bay":new Date(2011,2,13,2,1,0,0),"America/Miquelon":new Date(2011,2,13,5,0,0,0),"America/Godthab":new Date(2011,2,27,1,0,0,0),"Europe/Moscow":t,"Asia/Amman":new Date(2013,2,29,1,0,0,0),"Asia/Beirut":new Date(2013,2,31,2,0,0,0),"Asia/Damascus":new Date(2013,3,6,2,0,0,0),"Asia/Jerusalem":new Date(2013,2,29,5,0,0,0),"Asia/Yekaterinburg":t,"Asia/Omsk":t,"Asia/Krasnoyarsk":t,"Asia/Irkutsk":t,"Asia/Yakutsk":t,"Asia/Vladivostok":t,"Asia/Baku":new Date(2013,2,31,4,0,0),"Asia/Yerevan":new Date(2013,2,31,3,0,0),"Asia/Kamchatka":t,"Asia/Gaza":new Date(2010,2,27,4,0,0),"Africa/Cairo":new Date(2010,4,1,3,0,0),"Europe/Minsk":t,"Pacific/Apia":new Date(2010,10,1,1,0,0,0),"Pacific/Fiji":new Date(2010,11,1,0,0,0),"Australia/Perth":new Date(2008,10,1,1,0,0,0)}[n]}}}();t.TimeZone=function(n){"use strict";var r={"America/Denver":["America/Denver","America/Mazatlan"],"America/Chicago":["America/Chicago","America/Mexico_City"],"America/Santiago":["America/Santiago","America/Asuncion","America/Campo_Grande"],"America/Montevideo":["America/Montevideo","America/Sao_Paulo"],"Asia/Beirut":["Asia/Amman","Asia/Jerusalem","Asia/Beirut","Europe/Helsinki","Asia/Damascus"],"Pacific/Auckland":["Pacific/Auckland","Pacific/Fiji"],"America/Los_Angeles":["America/Los_Angeles","America/Santa_Isabel"],"America/New_York":["America/Havana","America/New_York"],"America/Halifax":["America/Goose_Bay","America/Halifax"],"America/Godthab":["America/Miquelon","America/Godthab"],"Asia/Dubai":["Europe/Moscow"],"Asia/Dhaka":["Asia/Yekaterinburg"],"Asia/Jakarta":["Asia/Omsk"],"Asia/Shanghai":["Asia/Krasnoyarsk","Australia/Perth"],"Asia/Tokyo":["Asia/Irkutsk"],"Australia/Brisbane":["Asia/Yakutsk"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Tarawa":["Asia/Kamchatka","Pacific/Fiji"],"Pacific/Tongatapu":["Pacific/Apia"],"Asia/Baghdad":["Europe/Minsk"],"Asia/Baku":["Asia/Yerevan","Asia/Baku"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"]},i=n,u=function(){for(var n=r[i],e=n.length,u=0,f=n[0];u<e;u+=1)if(f=n[u],t.date_is_dst(t.dst_start_for(f)))return void(i=f)};return function(){return void 0!==r[i]}()&&u(),{name:function(){return i}}};t.olson={};t.olson.timezones={"-720,0":"Pacific/Majuro","-660,0":"Pacific/Pago_Pago","-600,1":"America/Adak","-600,0":"Pacific/Honolulu","-570,0":"Pacific/Marquesas","-540,0":"Pacific/Gambier","-540,1":"America/Anchorage","-480,1":"America/Los_Angeles","-480,0":"Pacific/Pitcairn","-420,0":"America/Phoenix","-420,1":"America/Denver","-360,0":"America/Guatemala","-360,1":"America/Chicago","-360,1,s":"Pacific/Easter","-300,0":"America/Bogota","-300,1":"America/New_York","-270,0":"America/Caracas","-240,1":"America/Halifax","-240,0":"America/Santo_Domingo","-240,1,s":"America/Santiago","-210,1":"America/St_Johns","-180,1":"America/Godthab","-180,0":"America/Argentina/Buenos_Aires","-180,1,s":"America/Montevideo","-120,0":"America/Noronha","-120,1":"America/Noronha","-60,1":"Atlantic/Azores","-60,0":"Atlantic/Cape_Verde","0,0":"UTC","0,1":"Europe/London","60,1":"Europe/Berlin","60,0":"Africa/Lagos","60,1,s":"Africa/Windhoek","120,1":"Asia/Beirut","120,0":"Africa/Johannesburg","180,0":"Asia/Baghdad","180,1":"Europe/Moscow","210,1":"Asia/Tehran","240,0":"Asia/Dubai","240,1":"Asia/Baku","270,0":"Asia/Kabul","300,1":"Asia/Yekaterinburg","300,0":"Asia/Karachi","330,0":"Asia/Kolkata","345,0":"Asia/Kathmandu","360,0":"Asia/Dhaka","360,1":"Asia/Omsk","390,0":"Asia/Rangoon","420,1":"Asia/Krasnoyarsk","420,0":"Asia/Jakarta","480,0":"Asia/Shanghai","480,1":"Asia/Irkutsk","525,0":"Australia/Eucla","525,1,s":"Australia/Eucla","540,1":"Asia/Yakutsk","540,0":"Asia/Tokyo","570,0":"Australia/Darwin","570,1,s":"Australia/Adelaide","600,0":"Australia/Brisbane","600,1":"Asia/Vladivostok","600,1,s":"Australia/Sydney","630,1,s":"Australia/Lord_Howe","660,1":"Asia/Kamchatka","660,0":"Pacific/Noumea","690,0":"Pacific/Norfolk","720,1,s":"Pacific/Auckland","720,0":"Pacific/Tarawa","765,1,s":"Pacific/Chatham","780,0":"Pacific/Tongatapu","780,1,s":"Pacific/Apia","840,0":"Pacific/Kiritimati"};"undefined"!=typeof exports?exports.jstz=t:n.jstz=t}(this);LazyLoad=function(n){function e(t,i){var r,u=n.createElement(t);for(r in i)i.hasOwnProperty(r)&&u.setAttribute(r,i[r]);return u}function i(n){var i,e,t=r[n];t&&(i=t.callback,e=t.urls,e.shift(),u=0,e.length||(i&&i.call(t.context,t.obj),r[n]=null,f[n].length&&o(n)))}function a(){var i=navigator.userAgent;t={async:!0===n.createElement("script").async};(t.webkit=/AppleWebKit\//.test(i))||(t.ie=/MSIE|Trident/.test(i))||(t.opera=/Opera/.test(i))||(t.gecko=/Gecko\//.test(i))||(t.unknown=!0)}function o(u,o,l,v,y){var w,b,p,g,nt,k,it=function(){i(u)},d="css"===u,tt=[];if(t||a(),o)if(o="string"==typeof o?[o]:o.concat(),d||t.async||t.gecko||t.opera)f[u].push({urls:o,callback:l,obj:v,context:y});else for(w=0,b=o.length;w<b;++w)f[u].push({urls:[o[w]],callback:w===b-1?l:null,obj:v,context:y});if(!r[u]&&(g=r[u]=f[u].shift())){for(s||(s=n.head||n.getElementsByTagName("head")[0]),nt=g.urls.concat(),w=0,b=nt.length;w<b;++w)k=nt[w],d?p=t.gecko?e("style"):e("link",{href:k,rel:"stylesheet"}):(p=e("script",{src:k}),p.async=!1),p.className="lazyload",p.setAttribute("charset","utf-8"),t.ie&&!d&&"onreadystatechange"in p&&!("draggable"in p)?p.onreadystatechange=function(){/loaded|complete/.test(p.readyState)&&(p.onreadystatechange=null,it())}:d&&(t.gecko||t.webkit)?t.webkit?(g.urls[w]=p.href,c()):(p.innerHTML='@import "'+k+'";',h(p)):p.onload=p.onerror=it,tt.push(p);for(w=0,b=tt.length;w<b;++w)s.appendChild(tt[w])}}function h(n){var t;try{t=!!n.sheet.cssRules}catch(r){return u+=1,void(u<200?setTimeout(function(){h(n)},50):t&&i("css"))}i("css")}function c(){var n,t=r.css;if(t){for(n=l.length;--n>=0;)if(l[n].href===t.urls[0]){i("css");break}u+=1;t&&(u<200?setTimeout(c,50):i("css"))}}var t,s,r={},u=0,f={css:[],js:[]},l=n.styleSheets;return{css:function(n,t,i,r){o("css",n,t,i,r)},js:function(n,t,i,r){o("js",n,t,i,r)}}}(this.document);window.Modernizr=function(n,t,i){function w(n){b.cssText=n}function o(n,t){return typeof n===t}var f,s,r={},h=!0,c=t.documentElement,y=t.createElement("modernizr"),b=y.style,p={svg:"http://www.w3.org/2000/svg"},u={},l=[],a=l.slice,v={}.hasOwnProperty,e;s=o(v,"undefined")||o(v.call,"undefined")?function(n,t){return t in n&&o(n.constructor.prototype[t],"undefined")}:function(n,t){return v.call(n,t)};Function.prototype.bind||(Function.prototype.bind=function(n){var t=this,i,r;if("function"!=typeof t)throw new TypeError;return i=a.call(arguments,1),r=function(){var f,e,u;return this instanceof r?(f=function(){},f.prototype=t.prototype,e=new f,u=t.apply(e,i.concat(a.call(arguments))),Object(u)===u?u:e):t.apply(n,i.concat(a.call(arguments)))},r});u.geolocation=function(){return"geolocation"in navigator};u.svg=function(){return!!t.createElementNS&&!!t.createElementNS(p.svg,"svg").createSVGRect};u.inlinesvg=function(){var n=t.createElement("div");return n.innerHTML="<svg/>",(n.firstChild&&n.firstChild.namespaceURI)==p.svg};for(e in u)s(u,e)&&(f=e.toLowerCase(),r[f]=u[e](),l.push((r[f]?"":"no-")+f));return r.addTest=function(n,t){if("object"==typeof n)for(var u in n)s(n,u)&&r.addTest(u,n[u]);else{if(n=n.toLowerCase(),r[n]!==i)return r;t="function"==typeof t?t():t;void 0!==h&&h&&(c.className+=" "+(t?"":"no-")+n);r[n]=t}return r},w(""),y=null,function(n,t){function v(n,t){var i=n.createElement("p"),r=n.getElementsByTagName("head")[0]||n.documentElement;return i.innerHTML="x<style>"+t+"<\/style>",r.insertBefore(i.lastChild,r.firstChild)}function s(){var n=r.elements;return"string"==typeof n?n.split(" "):n}function u(n){var t=a[n[l]];return t||(t={},o++,n[l]=o,a[o]=t),t}function h(n,r,f){if(r||(r=t),i)return r.createElement(n);f||(f=u(r));var e;return e=f.cache[n]?f.cache[n].cloneNode():b.test(n)?(f.cache[n]=f.createElem(n)).cloneNode():f.createElem(n),!e.canHaveChildren||w.test(n)||e.tagUrn?e:f.frag.appendChild(e)}function y(n,r){if(n||(n=t),i)return n.createDocumentFragment();r=r||u(n);for(var e=r.frag.cloneNode(),f=0,o=s(),h=o.length;f<h;f++)e.createElement(o[f]);return e}function p(n,t){t.cache||(t.cache={},t.createElem=n.createElement,t.createFrag=n.createDocumentFragment,t.frag=t.createFrag());n.createElement=function(i){return r.shivMethods?h(i,n,t):t.createElem(i)};n.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+s().join().replace(/[\w\-]+/g,function(n){return t.createElem(n),t.frag.createElement(n),'c("'+n+'")'})+");return n}")(r,t.frag)}function c(n){n||(n=t);var e=u(n);return!r.shivCSS||f||e.hasCSS||(e.hasCSS=!!v(n,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),i||p(n,e),n}var f,i,e=n.html5||{},w=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,b=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,l="_html5shiv",o=0,a={},r;!function(){try{var n=t.createElement("a");n.innerHTML="<xyz><\/xyz>";f="hidden"in n;i=1==n.childNodes.length||function(){t.createElement("a");var n=t.createDocumentFragment();return void 0===n.cloneNode||void 0===n.createDocumentFragment||void 0===n.createElement}()}catch(n){f=!0;i=!0}}();r={elements:e.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==e.shivCSS,supportsUnknownElements:i,shivMethods:!1!==e.shivMethods,type:"default",shivDocument:c,createElement:h,createDocumentFragment:y};n.html5=r;c(t)}(this,t),r._version="2.8.3",c.className=c.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(h?" js "+l.join(" "):""),r}(0,this.document),function(n,t,i){function h(n){return"[object Function]"==y.call(n)}function c(n){return"string"==typeof n}function l(){}function w(n){return!n||"loaded"==n||"complete"==n||"uninitialized"==n}function e(){var n=a.shift();v=1;n?n.t?s(function(){("c"==n.t?r.injectCss:r.injectJs)(n.s,0,n.a,n.x,n.e,1)},0):(n(),e()):v=0}function ut(n,i,f,h,c,l,y){function k(t){if(!d&&w(p.readyState)&&(tt.r=d=1,!v&&e(),p.onload=p.onreadystatechange=null,t)){"img"!=n&&s(function(){nt.removeChild(p)},50);for(var r in u[i])u[i].hasOwnProperty(r)&&u[i][r].onload()}}var y=y||r.errorTimeout,p=t.createElement(n),d=0,b=0,tt={t:f,s:i,e:c,a:l,x:y};1===u[i]&&(b=1,u[i]=[]);"object"==n?p.data=i:(p.src=i,p.type=n);p.width=p.height="0";p.onerror=p.onload=p.onreadystatechange=function(){k.call(this,b)};a.splice(h,0,tt);"img"!=n&&(b||2===u[i]?(nt.insertBefore(p,g?null:o),s(k,y)):u[i].push(p))}function ft(n,t,i,r,u){return v=0,t=t||"j",c(n)?ut("c"==t?et:tt,n,t,this.i++,i,r,u):(a.splice(this.i++,0,n),1==a.length&&e()),this}function b(){var n=r;return n.loader={load:ft,i:0},n}var k,r,f=t.documentElement,s=n.setTimeout,o=t.getElementsByTagName("script")[0],y={}.toString,a=[],v=0,d="MozAppearance"in f.style,g=d&&!!t.createRange().compareNode,nt=g?f:o.parentNode,f=n.opera&&"[object Opera]"==y.call(n.opera),f=!!t.attachEvent&&!f,tt=d?"object":f?"script":"img",et=f?"script":tt,it=Array.isArray||function(n){return"[object Array]"==y.call(n)},p=[],u={},rt={timeout:function(n,t){return t.length&&(n.timeout=t[0]),n}};r=function(n){function a(n){for(var u,r,n=n.split("!"),f=p.length,i=n.pop(),e=n.length,i={url:i,origUrl:i,prefixes:n},t=0;t<e;t++)r=n[t].split("="),(u=rt[r.shift()])&&(i=u(i,r));for(t=0;t<f;t++)i=p[t](i);return i}function f(n,t,r,f,e){var o=a(n),s=o.autoCallback;o.url.split(".").pop().split("?").shift();o.bypass||(t&&(t=h(t)?t:t[n]||t[f]||t[n.split("/").pop().split("?")[0]]),o.instead?o.instead(n,t,r,f,e):(u[o.url]?o.noexec=!0:u[o.url]=1,r.load(o.url,o.forceCSS||!o.forceJS&&"css"==o.url.split(".").pop().split("?").shift()?"c":i,o.noexec,o.attrs,o.timeout),(h(t)||h(s))&&r.load(function(){b();t&&t(o.origUrl,e,f);s&&s(o.origUrl,e,f);u[o.url]=2})))}function s(n,t){function a(n,o){if(n){if(c(n))o||(i=function(){var n=[].slice.call(arguments);s.apply(this,n);u()}),f(n,i,t,0,e);else if(Object(n)===n)for(r in v=function(){var t,i=0;for(t in n)n.hasOwnProperty(t)&&i++;return i}(),n)n.hasOwnProperty(r)&&(!o&&!--v&&(h(i)?i=function(){var n=[].slice.call(arguments);s.apply(this,n);u()}:i[r]=function(n){return function(){var t=[].slice.call(arguments);n&&n.apply(this,t);u()}}(s[r])),f(n[r],i,t,r,e))}else o||u()}var v,r,e=!!n.test,o=n.load||n.both,i=n.callback||l,s=i,u=n.complete||l;a(e?n.yep:n.nope,!!o);o&&a(o)}var e,t,o=this.yepnope.loader;if(c(n))f(n,0,o,0);else if(it(n))for(e=0;e<n.length;e++)t=n[e],c(t)?f(t,0,o,0):it(t)?r(t):Object(t)===t&&s(t,o);else Object(n)===n&&s(n,o)};r.addPrefix=function(n,t){rt[n]=t};r.addFilter=function(n){p.push(n)};r.errorTimeout=1e4;null==t.readyState&&t.addEventListener&&(t.readyState="loading",t.addEventListener("DOMContentLoaded",k=function(){t.removeEventListener("DOMContentLoaded",k,0);t.readyState="complete"},0));n.yepnope=b();n.yepnope.executeStack=e;n.yepnope.injectJs=function(n,i,u,f,h,c){var v,y,a=t.createElement("script"),f=f||r.errorTimeout;a.src=n;for(y in u)a.setAttribute(y,u[y]);i=c?e:i||l;a.onreadystatechange=a.onload=function(){!v&&w(a.readyState)&&(v=1,i(),a.onload=a.onreadystatechange=null)};s(function(){v||(v=1,i(1))},f);h?a.onload():o.parentNode.insertBefore(a,o)};n.yepnope.injectCss=function(n,i,r,u,f,h){var c,u=t.createElement("link"),i=h?e:i||l;u.href=n;u.rel="stylesheet";u.type="text/css";for(c in r)u.setAttribute(c,r[c]);f||(o.parentNode.insertBefore(u,o),s(i,0))}}(this,document);Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};Modernizr.addTest("cors",!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest)),function(n){function d(n,t,i){switch(arguments.length){case 2:return null!=n?n:t;case 3:return null!=n?n:null!=t?t:i;default:throw new Error("Implement me");}}function et(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function g(n,i){function u(){!1===t.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+n)}var r=!0;return s(function(){return r&&(u(),r=!1),i.apply(this,arguments)},i)}function ti(n,t){return function(i){return r(n.call(this,i),t)}}function ar(n,t){return function(i){return this.lang().ordinal(n.call(this,i),t)}}function ii(){}function ot(n){hi(n);s(this,n)}function st(n){var t=fi(n),i=t.year||0,r=t.quarter||0,u=t.month||0,f=t.week||0,e=t.day||0,o=t.hour||0,s=t.minute||0,h=t.second||0,c=t.millisecond||0;this._milliseconds=+c+1e3*h+6e4*s+36e5*o;this._days=+e+7*f;this._months=+u+3*r+12*i;this._data={};this._bubble()}function s(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i]);return t.hasOwnProperty("toString")&&(n.toString=t.toString),t.hasOwnProperty("valueOf")&&(n.valueOf=t.valueOf),n}function vr(n){var t,i={};for(t in n)n.hasOwnProperty(t)&&tr.hasOwnProperty(t)&&(i[t]=n[t]);return i}function e(n){return n<0?Math.ceil(n):Math.floor(n)}function r(n,t,i){for(var r=""+Math.abs(n),u=n>=0;r.length<t;)r="0"+r;return(u?i?"+":"":"-")+r}function ri(n,t){var i={milliseconds:0,months:0};return i.months=t.month()-n.month()+12*(t.year()-n.year()),n.clone().add(i.months,"M").isAfter(t)&&--i.months,i.milliseconds=+t-+n.clone().add(i.months,"M"),i}function yr(n,t){var i;return t=ut(t,n),n.isBefore(t)?i=ri(n,t):(i=ri(t,n),i.milliseconds=-i.milliseconds,i.months=-i.months),i}function ht(n,i,r,u){var o=i._milliseconds,f=i._days,e=i._months;u=null==u||u;o&&n._d.setTime(+n._d+o*r);f&&bi(n,"Date",wt(n,"Date")+f*r);e&&wi(n,wt(n,"Month")+e*r);u&&t.updateOffset(n,f||e)}function rt(n){return"[object Array]"===Object.prototype.toString.call(n)}function pr(n){return"[object Date]"===Object.prototype.toString.call(n)||n instanceof Date}function ui(n,t,r){for(var e=Math.min(n.length,t.length),o=Math.abs(n.length-t.length),f=0,u=0;u<e;u++)(r&&n[u]!==t[u]||!r&&i(n[u])!==i(t[u]))&&f++;return f+o}function h(n){if(n){var t=n.toLowerCase().replace(/(.)s$/,"$1");n=af[n]||vf[t]||t}return n}function fi(n){var i,t,r={};for(t in n)n.hasOwnProperty(t)&&(i=h(t))&&(r[i]=n[t]);return r}function wr(i){var r,u;if(0===i.indexOf("week"))r=7,u="day";else{if(0!==i.indexOf("month"))return;r=12;u="month"}t[i]=function(f,e){var o,s,c=t.fn._lang[i],h=[];if("number"==typeof f&&(e=f,f=n),s=function(n){var i=t().utc().set(u,n);return c.call(t.fn._lang,i,f||"")},null!=e)return s(e);for(o=0;o<r;o++)h.push(s(o));return h}}function i(n){var t=+n,i=0;return 0!==t&&isFinite(t)&&(i=t>=0?Math.floor(t):Math.ceil(t)),i}function ct(n,t){return new Date(Date.UTC(n,t+1,0)).getUTCDate()}function ei(n,i,r){return b(t([n,11,31+i-r]),i,r).week}function oi(n){return si(n)?366:365}function si(n){return n%4==0&&n%100!=0||n%400==0}function hi(n){var t;n._a&&-2===n._pf.overflow&&(t=n._a[a]<0||n._a[a]>11?a:n._a[o]<1||n._a[o]>ct(n._a[l],n._a[a])?o:n._a[v]<0||n._a[v]>23?v:n._a[nt]<0||n._a[nt]>59?nt:n._a[tt]<0||n._a[tt]>59?tt:n._a[it]<0||n._a[it]>999?it:-1,n._pf._overflowDayOfYear&&(t<l||t>o)&&(t=o),n._pf.overflow=t)}function ci(n){return null==n._isValid&&(n._isValid=!isNaN(n._d.getTime())&&n._pf.overflow<0&&!n._pf.empty&&!n._pf.invalidMonth&&!n._pf.nullInput&&!n._pf.invalidFormat&&!n._pf.userInvalidated,n._strict&&(n._isValid=n._isValid&&0===n._pf.charsLeftOver&&0===n._pf.unusedTokens.length)),n._isValid}function lt(n){return n?n.toLowerCase().replace("_","-"):n}function ut(n,i){return i._isUTC?t(n).zone(i._offset||0):t(n).local()}function br(n,t){return t.abbr=n,p[n]||(p[n]=new ii),p[n].set(t),p[n]}function kr(n){delete p[n]}function f(n){var r,u,i,f,e=0,o=function(n){if(!p[n]&&ir)try{require("./lang/"+n)}catch(n){}return p[n]};if(!n)return t.fn._lang;if(!rt(n)){if(u=o(n))return u;n=[n]}for(;e<n.length;){for(f=lt(n[e]).split("-"),r=f.length,i=lt(n[e+1]),i=i?i.split("-"):null;r>0;){if(u=o(f.slice(0,r).join("-")))return u;if(i&&i.length>=r&&ui(f,i,!0)>=r-1)break;r--}e++}return t.fn._lang}function dr(n){return n.match(/\[[\s\S]/)?n.replace(/^\[|\]$/g,""):n.replace(/\\/g,"")}function gr(n){for(var i=n.match(rr),t=0,r=i.length;t<r;t++)i[t]=y[i[t]]?y[i[t]]:dr(i[t]);return function(u){var f="";for(t=0;t<r;t++)f+=i[t]instanceof Function?i[t].call(u,n):i[t];return f}}function at(n,t){return n.isValid()?(t=li(t,n.lang()),ni[t]||(ni[t]=gr(t)),ni[t](n)):n.lang().invalidDate()}function li(n,t){function r(n){return t.longDateFormat(n)||n}var i=5;for(ft.lastIndex=0;i>=0&&ft.test(n);)n=n.replace(ft,r),ft.lastIndex=0,i-=1;return n}function nu(n,t){var i=t._strict;switch(n){case"Q":return fr;case"DDDD":return or;case"YYYY":case"GGGG":case"gggg":return i?of:gu;case"Y":case"G":case"g":return hf;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return i?sf:nf;case"S":if(i)return fr;case"SS":if(i)return er;case"SSS":if(i)return or;case"DDD":return du;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return rf;case"a":case"A":return f(t._l)._meridiemParse;case"X":return ff;case"Z":case"ZZ":return kt;case"T":return uf;case"SSSS":return tf;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return i?er:ur;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return ur;case"Do":return ef;default:return new RegExp(eu(fu(n.replace("\\","")),"i"))}}function ai(n){n=n||"";var r=n.match(kt)||[],f=r[r.length-1]||[],t=(f+"").match(lf)||["-",0,0],u=60*t[1]+i(t[2]);return"+"===t[0]?-u:u}function tu(n,r,u){var s,e=u._a;switch(n){case"Q":null!=r&&(e[a]=3*(i(r)-1));break;case"M":case"MM":null!=r&&(e[a]=i(r)-1);break;case"MMM":case"MMMM":s=f(u._l).monthsParse(r);null!=s?e[a]=s:u._pf.invalidMonth=r;break;case"D":case"DD":null!=r&&(e[o]=i(r));break;case"Do":null!=r&&(e[o]=i(parseInt(r,10)));break;case"DDD":case"DDDD":null!=r&&(u._dayOfYear=i(r));break;case"YY":e[l]=t.parseTwoDigitYear(r);break;case"YYYY":case"YYYYY":case"YYYYYY":e[l]=i(r);break;case"a":case"A":u._isPm=f(u._l).isPM(r);break;case"H":case"HH":case"h":case"hh":e[v]=i(r);break;case"m":case"mm":e[nt]=i(r);break;case"s":case"ss":e[tt]=i(r);break;case"S":case"SS":case"SSS":case"SSSS":e[it]=i(1e3*("0."+r));break;case"X":u._d=new Date(1e3*parseFloat(r));break;case"Z":case"ZZ":u._useUTC=!0;u._tzm=ai(r);break;case"dd":case"ddd":case"dddd":s=f(u._l).weekdaysParse(r);null!=s?(u._w=u._w||{},u._w.d=s):u._pf.invalidWeekday=r;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":n=n.substr(0,1);case"gggg":case"GGGG":case"GGGGG":n=n.substr(0,2);r&&(u._w=u._w||{},u._w[n]=i(r));break;case"gg":case"GG":u._w=u._w||{};u._w[n]=t.parseTwoDigitYear(r)}}function iu(n){var i,s,u,e,r,o,h,c;i=n._w;null!=i.GG||null!=i.W||null!=i.E?(r=1,o=4,s=d(i.GG,n._a[l],b(t(),1,4).year),u=d(i.W,1),e=d(i.E,1)):(c=f(n._l),r=c._week.dow,o=c._week.doy,s=d(i.gg,n._a[l],b(t(),r,o).year),u=d(i.w,1),null!=i.d?(e=i.d)<r&&++u:e=null!=i.e?i.e+r:r);h=yu(s,u,e,o,r);n._a[l]=h.year;n._dayOfYear=h.dayOfYear}function vt(n){var t,i,r,u,f=[];if(!n._d){for(r=uu(n),n._w&&null==n._a[o]&&null==n._a[a]&&iu(n),n._dayOfYear&&(u=d(n._a[l],r[l]),n._dayOfYear>oi(u)&&(n._pf._overflowDayOfYear=!0),i=pt(u,0,n._dayOfYear),n._a[a]=i.getUTCMonth(),n._a[o]=i.getUTCDate()),t=0;t<3&&null==n._a[t];++t)n._a[t]=f[t]=r[t];for(;t<7;t++)n._a[t]=f[t]=null==n._a[t]?2===t?1:0:n._a[t];n._d=(n._useUTC?pt:cu).apply(null,f);null!=n._tzm&&n._d.setUTCMinutes(n._d.getUTCMinutes()+n._tzm)}}function ru(n){var t;n._d||(t=fi(n._i),n._a=[t.year,t.month,t.day,t.hour,t.minute,t.second,t.millisecond],vt(n))}function uu(n){var t=new Date;return n._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function yt(n){if(n._f===t.ISO_8601)return void vi(n);n._a=[];n._pf.empty=!0;for(var i,u,s,c=f(n._l),r=""+n._i,l=r.length,h=0,o=li(n._f,c).match(rr)||[],e=0;e<o.length;e++)u=o[e],i=(r.match(nu(u,n))||[])[0],i&&(s=r.substr(0,r.indexOf(i)),s.length>0&&n._pf.unusedInput.push(s),r=r.slice(r.indexOf(i)+i.length),h+=i.length),y[u]?(i?n._pf.empty=!1:n._pf.unusedTokens.push(u),tu(u,i,n)):n._strict&&!i&&n._pf.unusedTokens.push(u);n._pf.charsLeftOver=l-h;r.length>0&&n._pf.unusedInput.push(r);n._isPm&&n._a[v]<12&&(n._a[v]+=12);!1===n._isPm&&12===n._a[v]&&(n._a[v]=0);vt(n);hi(n)}function fu(n){return n.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(n,t,i,r,u){return t||i||r||u})}function eu(n){return n.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ou(n){var t,f,u,r,i;if(0===n._f.length)return n._pf.invalidFormat=!0,void(n._d=new Date(NaN));for(r=0;r<n._f.length;r++)i=0,t=s({},n),t._pf=et(),t._f=n._f[r],yt(t),ci(t)&&(i+=t._pf.charsLeftOver,i+=10*t._pf.unusedTokens.length,t._pf.score=i,(null==u||i<u)&&(u=i,f=t));s(n,f||t)}function vi(n){var t,i,r=n._i,u=cf.exec(r);if(u){for(n._pf.iso=!0,t=0,i=dt.length;t<i;t++)if(dt[t][1].exec(r)){n._f=dt[t][0]+(u[6]||" ");break}for(t=0,i=gt.length;t<i;t++)if(gt[t][1].exec(r)){n._f+=gt[t][0];break}r.match(kt)&&(n._f+="Z");yt(n)}else n._isValid=!1}function su(n){vi(n);!1===n._isValid&&(delete n._isValid,t.createFromInputFallback(n))}function hu(i){var u,r=i._i;r===n?i._d=new Date:pr(r)?i._d=new Date(+r):null!==(u=wu.exec(r))?i._d=new Date(+u[1]):"string"==typeof r?su(i):rt(r)?(i._a=r.slice(0),vt(i)):"object"==typeof r?ru(i):"number"==typeof r?i._d=new Date(r):t.createFromInputFallback(i)}function cu(n,t,i,r,u,f,e){var o=new Date(n,t,i,r,u,f,e);return n<1970&&o.setFullYear(n),o}function pt(n){var t=new Date(Date.UTC.apply(null,arguments));return n<1970&&t.setUTCFullYear(n),t}function lu(n,t){if("string"==typeof n)if(isNaN(n)){if("number"!=typeof(n=t.weekdaysParse(n)))return null}else n=parseInt(n,10);return n}function au(n,t,i,r,u){return u.relativeTime(t||1,!!i,n,r)}function vu(n,i,r){var u=t.duration(n).abs(),c=k(u.as("s")),e=k(u.as("m")),o=k(u.as("h")),s=k(u.as("d")),h=k(u.as("M")),l=k(u.as("y")),f=c<w.s&&["s",c]||1===e&&["m"]||e<w.m&&["mm",e]||1===o&&["h"]||o<w.h&&["hh",o]||1===s&&["d"]||s<w.d&&["dd",s]||1===h&&["M"]||h<w.M&&["MM",h]||1===l&&["y"]||["yy",l];return f[2]=i,f[3]=+n>0,f[4]=r,au.apply({},f)}function b(n,i,r){var f,e=r-i,u=r-n.day();return u>e&&(u-=7),u<e-7&&(u+=7),f=t(n).add("d",u),{week:Math.ceil(f.dayOfYear()/7),year:f.year()}}function yu(n,t,i,r,u){var o,e,f=pt(n,0,1).getUTCDay();return f=0===f?7:f,i=null!=i?i:u,o=u-f+(f>r?7:0)-(f<u?7:0),e=7*(t-1)+(i-u)+o+1,{year:e>0?n:n-1,dayOfYear:e>0?e:oi(n-1)+e}}function yi(i){var r=i._i,u=i._f;return null===r||u===n&&""===r?t.invalid({nullInput:!0}):("string"==typeof r&&(i._i=r=f().preparse(r)),t.isMoment(r)?(i=vr(r),i._d=new Date(+r._d)):u?rt(u)?ou(i):yt(i):hu(i),new ot(i))}function pi(n,i){var u,r;if(1===i.length&&rt(i[0])&&(i=i[0]),!i.length)return t();for(u=i[0],r=1;r<i.length;++r)i[r][n](u)&&(u=i[r]);return u}function wi(n,t){var i;return"string"==typeof t&&"number"!=typeof(t=n.lang().monthsParse(t))?n:(i=Math.min(n.date(),ct(n.year(),t)),n._d["set"+(n._isUTC?"UTC":"")+"Month"](t,i),n)}function wt(n,t){return n._d["get"+(n._isUTC?"UTC":"")+t]()}function bi(n,t,i){return"Month"===t?wi(n,i):n._d["set"+(n._isUTC?"UTC":"")+t](i)}function c(n,i){return function(r){return null!=r?(bi(this,n,r),t.updateOffset(this,i),this):wt(this,n)}}function ki(n){return 400*n/146097}function di(n){return 146097*n/400}function pu(n){t.duration.fn[n]=function(){return this._data[n]}}function gi(n){"undefined"==typeof ender&&(nr=bt.moment,bt.moment=n?g("Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release.",t):t)}for(var t,nr,u,bt="undefined"!=typeof global?global:this,k=Math.round,l=0,a=1,o=2,v=3,nt=4,tt=5,it=6,p={},tr={_isAMomentObject:null,_i:null,_f:null,_l:null,_strict:null,_tzm:null,_isUTC:null,_offset:null,_pf:null,_lang:null},ir="undefined"!=typeof module&&module.exports,wu=/^\/?Date\((\-?\d+)/i,bu=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,ku=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,rr=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,ft=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,ur=/\d\d?/,du=/\d{1,3}/,gu=/\d{1,4}/,nf=/[+\-]?\d{1,6}/,tf=/\d+/,rf=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,kt=/Z|[\+\-]\d\d:?\d\d/gi,uf=/T/i,ff=/[\+\-]?\d+(\.\d{1,3})?/,ef=/\d{1,2}/,fr=/\d/,er=/\d\d/,or=/\d{3}/,of=/\d{4}/,sf=/[+-]?\d{6}/,hf=/[+-]?\d+/,cf=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,dt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],gt=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],lf=/([\+\-]|\d\d)/gi,sr=("Date|Hours|Minutes|Seconds|Milliseconds".split("|"),{Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6}),af={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",D:"date",w:"week",W:"isoWeek",M:"month",Q:"quarter",y:"year",DDD:"dayOfYear",e:"weekday",E:"isoWeekday",gg:"weekYear",GG:"isoWeekYear"},vf={dayofyear:"dayOfYear",isoweekday:"isoWeekday",isoweek:"isoWeek",weekyear:"weekYear",isoweekyear:"isoWeekYear"},ni={},w={s:45,m:45,h:22,d:26,M:11},hr="DDD w W M D d".split(" "),cr="M D H h m s w W".split(" "),y={M:function(){return this.month()+1},MMM:function(n){return this.lang().monthsShort(this,n)},MMMM:function(n){return this.lang().months(this,n)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(n){return this.lang().weekdaysMin(this,n)},ddd:function(n){return this.lang().weekdaysShort(this,n)},dddd:function(n){return this.lang().weekdays(this,n)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return r(this.year()%100,2)},YYYY:function(){return r(this.year(),4)},YYYYY:function(){return r(this.year(),5)},YYYYYY:function(){var n=this.year();return(n>=0?"+":"-")+r(Math.abs(n),6)},gg:function(){return r(this.weekYear()%100,2)},gggg:function(){return r(this.weekYear(),4)},ggggg:function(){return r(this.weekYear(),5)},GG:function(){return r(this.isoWeekYear()%100,2)},GGGG:function(){return r(this.isoWeekYear(),4)},GGGGG:function(){return r(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return i(this.milliseconds()/100)},SS:function(){return r(i(this.milliseconds()/10),2)},SSS:function(){return r(this.milliseconds(),3)},SSSS:function(){return r(this.milliseconds(),3)},Z:function(){var n=-this.zone(),t="+";return n<0&&(n=-n,t="-"),t+r(i(n/60),2)+":"+r(i(n)%60,2)},ZZ:function(){var n=-this.zone(),t="+";return n<0&&(n=-n,t="-"),t+r(i(n/60),2)+r(i(n)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},lr=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];hr.length;)u=hr.pop(),y[u+"o"]=ar(y[u],u);for(;cr.length;)u=cr.pop(),y[u+u]=ti(y[u],2);for(y.DDDD=ti(y.DDD,3),s(ii.prototype,{set:function(n){var t,i;for(i in n)t=n[i],"function"==typeof t?this[i]=t:this["_"+i]=t},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(n){return this._months[n.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(n){return this._monthsShort[n.month()]},monthsParse:function(n){var i,r,u;for(this._monthsParse||(this._monthsParse=[]),i=0;i<12;i++)if(this._monthsParse[i]||(r=t.utc([2e3,i]),u="^"+this.months(r,"")+"|^"+this.monthsShort(r,""),this._monthsParse[i]=new RegExp(u.replace(".",""),"i")),this._monthsParse[i].test(n))return i},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(n){return this._weekdays[n.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(n){return this._weekdaysShort[n.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(n){return this._weekdaysMin[n.day()]},weekdaysParse:function(n){var i,r,u;for(this._weekdaysParse||(this._weekdaysParse=[]),i=0;i<7;i++)if(this._weekdaysParse[i]||(r=t([2e3,1]).day(i),u="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[i]=new RegExp(u.replace(".",""),"i")),this._weekdaysParse[i].test(n))return i},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(n){var t=this._longDateFormat[n];return!t&&this._longDateFormat[n.toUpperCase()]&&(t=this._longDateFormat[n.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(n){return n.slice(1)}),this._longDateFormat[n]=t),t},isPM:function(n){return"p"===(n+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(n,t,i){return n>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(n,t){var i=this._calendar[n];return"function"==typeof i?i.apply(t):i},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(n,t,i,r){var u=this._relativeTime[i];return"function"==typeof u?u(n,t,i,r):u.replace(/%d/i,n)},pastFuture:function(n,t){var i=this._relativeTime[n>0?"future":"past"];return"function"==typeof i?i(t):i.replace(/%s/i,t)},ordinal:function(n){return this._ordinal.replace("%d",n)},_ordinal:"%d",preparse:function(n){return n},postformat:function(n){return n},week:function(n){return b(n,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),t=function(t,i,r,u){var f;return"boolean"==typeof r&&(u=r,r=n),f={},f._isAMomentObject=!0,f._i=t,f._f=i,f._l=r,f._strict=u,f._isUTC=!1,f._pf=et(),yi(f)},t.suppressDeprecationWarnings=!1,t.createFromInputFallback=g("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(n){n._d=new Date(n._i)}),t.min=function(){return pi("isBefore",[].slice.call(arguments,0))},t.max=function(){return pi("isAfter",[].slice.call(arguments,0))},t.utc=function(t,i,r,u){var f;return"boolean"==typeof r&&(u=r,r=n),f={},f._isAMomentObject=!0,f._useUTC=!0,f._isUTC=!0,f._l=r,f._i=t,f._f=i,f._strict=u,f._pf=et(),yi(f).utc()},t.unix=function(n){return t(1e3*n)},t.duration=function(n,r){var e,h,s,c,f=n,u=null;return t.isDuration(n)?f={ms:n._milliseconds,d:n._days,M:n._months}:"number"==typeof n?(f={},r?f[r]=n:f.milliseconds=n):(u=bu.exec(n))?(e="-"===u[1]?-1:1,f={y:0,d:i(u[o])*e,h:i(u[v])*e,m:i(u[nt])*e,s:i(u[tt])*e,ms:i(u[it])*e}):(u=ku.exec(n))?(e="-"===u[1]?-1:1,s=function(n){var t=n&&parseFloat(n.replace(",","."));return(isNaN(t)?0:t)*e},f={y:s(u[2]),M:s(u[3]),d:s(u[4]),h:s(u[5]),m:s(u[6]),s:s(u[7]),w:s(u[8])}):"object"==typeof f&&("from"in f||"to"in f)&&(c=yr(t(f.from),t(f.to)),f={},f.ms=c.milliseconds,f.M=c.months),h=new st(f),t.isDuration(n)&&n.hasOwnProperty("_lang")&&(h._lang=n._lang),h},t.version="2.7.0",t.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",t.ISO_8601=function(){},t.momentProperties=tr,t.updateOffset=function(){},t.relativeTimeThreshold=function(t,i){return w[t]!==n&&(i===n?w[t]:(w[t]=i,!0))},t.lang=function(n,i){var r;return n?(i?br(lt(n),i):null===i?(kr(n),n="en"):p[n]||f(n),r=t.duration.fn._lang=t.fn._lang=f(n),r._abbr):t.fn._lang._abbr},t.langData=function(n){return n&&n._lang&&n._lang._abbr&&(n=n._lang._abbr),f(n)},t.isMoment=function(n){return n instanceof ot||null!=n&&n.hasOwnProperty("_isAMomentObject")},t.isDuration=function(n){return n instanceof st},u=lr.length-1;u>=0;--u)wr(lr[u]);t.normalizeUnits=function(n){return h(n)};t.invalid=function(n){var i=t.utc(NaN);return null!=n?s(i._pf,n):i._pf.userInvalidated=!0,i};t.parseZone=function(){return t.apply(null,arguments).parseZone()};t.parseTwoDigitYear=function(n){return i(n)+(i(n)>68?1900:2e3)};s(t.fn=ot.prototype,{clone:function(){return t(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var n=t(this).utc();return 0<n.year()&&n.year()<=9999?at(n,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):at(n,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var n=this;return[n.year(),n.month(),n.date(),n.hours(),n.minutes(),n.seconds(),n.milliseconds()]},isValid:function(){return ci(this)},isDSTShifted:function(){return!!this._a&&this.isValid()&&ui(this._a,(this._isUTC?t.utc(this._a):t(this._a)).toArray())>0},parsingFlags:function(){return s({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(n){return this.zone(0,n)},local:function(n){return this._isUTC&&(this.zone(0,n),this._isUTC=!1,n&&this.add(this._d.getTimezoneOffset(),"m")),this},format:function(n){var i=at(this,n||t.defaultFormat);return this.lang().postformat(i)},add:function(n,i){var r;return r="string"==typeof n&&"string"==typeof i?t.duration(isNaN(+i)?+n:+i,isNaN(+i)?i:n):"string"==typeof n?t.duration(+i,n):t.duration(n,i),ht(this,r,1),this},subtract:function(n,i){var r;return r="string"==typeof n&&"string"==typeof i?t.duration(isNaN(+i)?+n:+i,isNaN(+i)?i:n):"string"==typeof n?t.duration(+i,n):t.duration(n,i),ht(this,r,-1),this},diff:function(n,i,r){var u,o,f=ut(n,this),s=6e4*(this.zone()-f.zone());return i=h(i),"year"===i||"month"===i?(u=432e5*(this.daysInMonth()+f.daysInMonth()),o=12*(this.year()-f.year())+(this.month()-f.month()),o+=(this-t(this).startOf("month")-(f-t(f).startOf("month")))/u,o-=6e4*(this.zone()-t(this).startOf("month").zone()-(f.zone()-t(f).startOf("month").zone()))/u,"year"===i&&(o/=12)):(u=this-f,o="second"===i?u/1e3:"minute"===i?u/6e4:"hour"===i?u/36e5:"day"===i?(u-s)/864e5:"week"===i?(u-s)/6048e5:u),r?o:e(o)},from:function(n,i){return t.duration({to:this,from:n}).lang(this.lang()._abbr).humanize(!i)},fromNow:function(n){return this.from(t(),n)},calendar:function(n){var r=n||t(),u=ut(r,this).startOf("day"),i=this.diff(u,"days",!0),f=i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse";return this.format(this.lang().calendar(f,this))},isLeapYear:function(){return si(this.year())},isDST:function(){return this.zone()<this.clone().month(0).zone()||this.zone()<this.clone().month(5).zone()},day:function(n){var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=n?(n=lu(n,this.lang()),this.add(n-t,"days")):t},month:c("Month",!0),startOf:function(n){switch(n=h(n)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===n?this.weekday(0):"isoWeek"===n&&this.isoWeekday(1),"quarter"===n&&this.month(3*Math.floor(this.month()/3)),this},endOf:function(n){return n=h(n),this.startOf(n).add("isoWeek"===n?"week":n,1).subtract("ms",1)},isAfter:function(n,i){return i=void 0!==i?i:"millisecond",+this.clone().startOf(i)>+t(n).startOf(i)},isBefore:function(n,i){return i=void 0!==i?i:"millisecond",+this.clone().startOf(i)<+t(n).startOf(i)},isSame:function(n,t){return t=t||"ms",+this.clone().startOf(t)==+ut(n,this).startOf(t)},min:g("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(n){return n=t.apply(null,arguments),n<this?this:n}),max:g("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(n){return n=t.apply(null,arguments),n>this?this:n}),zone:function(n,i){var r,u=this._offset||0;return null==n?this._isUTC?u:this._d.getTimezoneOffset():("string"==typeof n&&(n=ai(n)),Math.abs(n)<16&&(n*=60),!this._isUTC&&i&&(r=this._d.getTimezoneOffset()),this._offset=n,this._isUTC=!0,null!=r&&this.subtract(r,"m"),u!==n&&(!i||this._changeInProgress?ht(this,t.duration(u-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,t.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(n){return n=n?t(n).zone():0,(this.zone()-n)%60==0},daysInMonth:function(){return ct(this.year(),this.month())},dayOfYear:function(n){var i=k((t(this).startOf("day")-t(this).startOf("year"))/864e5)+1;return null==n?i:this.add("d",n-i)},quarter:function(n){return null==n?Math.ceil((this.month()+1)/3):this.month(3*(n-1)+this.month()%3)},weekYear:function(n){var t=b(this,this.lang()._week.dow,this.lang()._week.doy).year;return null==n?t:this.add("y",n-t)},isoWeekYear:function(n){var t=b(this,1,4).year;return null==n?t:this.add("y",n-t)},week:function(n){var t=this.lang().week(this);return null==n?t:this.add("d",7*(n-t))},isoWeek:function(n){var t=b(this,1,4).week;return null==n?t:this.add("d",7*(n-t))},weekday:function(n){var t=(this.day()+7-this.lang()._week.dow)%7;return null==n?t:this.add("d",n-t)},isoWeekday:function(n){return null==n?this.day()||7:this.day(this.day()%7?n:n-7)},isoWeeksInYear:function(){return ei(this.year(),1,4)},weeksInYear:function(){var n=this._lang._week;return ei(this.year(),n.dow,n.doy)},get:function(n){return n=h(n),this[n]()},set:function(n,t){return n=h(n),"function"==typeof this[n]&&this[n](t),this},lang:function(t){return t===n?this._lang:(this._lang=f(t),this)}});t.fn.millisecond=t.fn.milliseconds=c("Milliseconds",!1);t.fn.second=t.fn.seconds=c("Seconds",!1);t.fn.minute=t.fn.minutes=c("Minutes",!1);t.fn.hour=t.fn.hours=c("Hours",!0);t.fn.date=c("Date",!0);t.fn.dates=g("dates accessor is deprecated. Use date instead.",c("Date",!0));t.fn.year=c("FullYear",!0);t.fn.years=g("years accessor is deprecated. Use year instead.",c("FullYear",!0));t.fn.days=t.fn.day;t.fn.months=t.fn.month;t.fn.weeks=t.fn.week;t.fn.isoWeeks=t.fn.isoWeek;t.fn.quarters=t.fn.quarter;t.fn.toJSON=t.fn.toISOString;s(t.duration.fn=st.prototype,{_bubble:function(){var u,f,o,s=this._milliseconds,t=this._days,i=this._months,n=this._data,r=0;n.milliseconds=s%1e3;u=e(s/1e3);n.seconds=u%60;f=e(u/60);n.minutes=f%60;o=e(f/60);n.hours=o%24;t+=e(o/24);r=e(ki(t));t-=e(di(r));i+=e(t/30);t%=30;r+=e(i/12);i%=12;n.days=t;n.months=i;n.years=r},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return e(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*i(this._months/12)},humanize:function(n){var t=vu(this,!n,this.lang());return n&&(t=this.lang().pastFuture(+this,t)),this.lang().postformat(t)},add:function(n,i){var r=t.duration(n,i);return this._milliseconds+=r._milliseconds,this._days+=r._days,this._months+=r._months,this._bubble(),this},subtract:function(n,i){var r=t.duration(n,i);return this._milliseconds-=r._milliseconds,this._days-=r._days,this._months-=r._months,this._bubble(),this},get:function(n){return n=h(n),this[n.toLowerCase()+"s"]()},as:function(n){var t,i;if(n=h(n),t=this._days+this._milliseconds/864e5,"month"===n||"year"===n)return i=this._months+12*ki(t),"month"===n?i:i/12;switch(t+=di(this._months/12),n){case"week":return t/7;case"day":return t;case"hour":return 24*t;case"minute":return 1440*t;case"second":return 86400*t;case"millisecond":return 864e5*t;default:throw new Error("Unknown unit "+n);}},lang:t.fn.lang,toIsoString:function(){var r=Math.abs(this.years()),u=Math.abs(this.months()),f=Math.abs(this.days()),n=Math.abs(this.hours()),t=Math.abs(this.minutes()),i=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(r?r+"Y":"")+(u?u+"M":"")+(f?f+"D":"")+(n||t||i?"T":"")+(n?n+"H":"")+(t?t+"M":"")+(i?i+"S":""):"P0D"}});for(u in sr)sr.hasOwnProperty(u)&&pu(u.toLowerCase());t.duration.fn.asMilliseconds=function(){return this.as("ms")};t.duration.fn.asSeconds=function(){return this.as("s")};t.duration.fn.asMinutes=function(){return this.as("m")};t.duration.fn.asHours=function(){return this.as("h")};t.duration.fn.asDays=function(){return this.as("d")};t.duration.fn.asWeeks=function(){return this.as("weeks")};t.duration.fn.asMonths=function(){return this.as("M")};t.duration.fn.asYears=function(){return this.as("y")};t.lang("en",{ordinal:function(n){var t=n%10;return n+(1===i(n%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}});ir?module.exports=t:"function"==typeof define&&define.amd?(define("moment",function(n,i,r){return r.config&&r.config()&&!0===r.config().noGlobal&&(bt.moment=nr),t}),gi(!0)):gi()}.call(this);var mod=angular.module("infinite-scroll",[]);mod.directive("infiniteScroll",["$rootScope","$window","$timeout",function(n,t,i){return{link:function(r,u,f){i(function(){t=angular.element(t);var e,s,l,o,h,c,a;return e=u.parents().filter(function(){return/(auto|scroll)/.test($.css(this,"overflow")+$.css(this,"overflow-y"))}).eq(0),0===e.length&&(e=t),null!=f.infiniteScrollSelf&&(e=u),h=0,null!=f.infiniteScrollDistance&&r.$watch(f.infiniteScrollDistance,function(n){return h=parseFloat(n,10)}),c=!0,s=!1,null!=f.infiniteScrollDisabled&&r.$watch(f.infiniteScrollDisabled,function(n){if((c=!n)&&s)return s=!1,o()}),a=e!==t?e.position().top:0,l=u.position().top-a,o=function(){var o,t,a,i;return u==e?(t=u[0].scrollHeight-u.scrollTop()-u.height(),i=t<=u[0].scrollHeight*h):(o=l+u.height(),a=e.height()+e.scrollTop(),t=o-a,i=t<=e.height()*h),i&&c?n.$$phase?r.$eval(f.infiniteScroll):r.$apply(f.infiniteScroll):i?s=!0:void 0},e.on("scroll",o),r.$on("$destroy",function(){return e.off("scroll",o)}),i(function(){return f.infiniteScrollImmediateCheck?r.$eval(f.infiniteScrollImmediateCheck)?o():void 0:o()},0)},0)}}}]),function(){"use strict";Array.prototype.indexOf||(Array.prototype.indexOf=function(n){var i=this.length>>>0,t=Number(arguments[1])||0;for(t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=i);t<i;t++)if(t in this&&this[t]===n)return t;return-1});Array.prototype.filter||(Array.prototype.filter=function(n){var t,u,r;if(void 0===this||null===this)throw new TypeError;if(t=Object(this),u=t.length>>>0,"function"!=typeof n)throw new TypeError;for(var f=[],e=arguments.length>=2?arguments[1]:void 0,i=0;i<u;i++)i in t&&(r=t[i],n.call(e,r,i,t)&&f.push(r));return f});Array.prototype.map||(Array.prototype.map=function(n,t){var e,u,i,r,f,o,s;if(null===this)throw new TypeError(" this is null or not defined");if(r=Object(this),f=r.length>>>0,"function"!=typeof n)throw new TypeError(n+" is not a function");for(arguments.length>1&&(e=t),u=new Array(f),i=0;i<f;)i in r&&(o=r[i],s=n.call(e,o,i,r),u[i]=s),i++;return u});String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});Object.keys||(Object.keys=function(){var t=Object.prototype.hasOwnProperty,i=!{toString:null}.propertyIsEnumerable("toString"),n=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],r=n.length;return function(u){if("object"!=typeof u&&("function"!=typeof u||null===u))throw new TypeError("Object.keys called on non-object");var e,f,o=[];for(e in u)t.call(u,e)&&o.push(e);if(i)for(f=0;f<r;f++)t.call(u,n[f])&&o.push(n[f]);return o}}());String.prototype.startsWith||(String.prototype.startsWith=function(n,t){return t=t||0,this.lastIndexOf(n,t)===t});String.prototype.endsWith||(String.prototype.endsWith=function(n,t){var i=this.toString(),r;return(void 0===t||t>i.length)&&(t=i.length),t-=n.length,r=i.indexOf(n,t),-1!==r&&r===t});window.hasOwnProperty||(window.hasOwnProperty=function(n){return Object.prototype.hasOwnProperty.call(window,n)});window.selectText=function(n){var t,i,r=document;r.body.createTextRange?(t=document.body.createTextRange(),t.moveToElementText(n),t.select()):window.getSelection&&(i=window.getSelection(),t=document.createRange(),t.selectNodeContents(n),i.removeAllRanges(),i.addRange(t))};window.isObjectEmpty=function(n){for(var t in n)if(n.hasOwnProperty(t))return!1;return!0};window.utf8_to_b64=function(n){return window.btoa(jsesc(n,{json:!0}))};window.b64_to_utf8=function(n){return window.atob(n)};window.format_string=function(){var n=arguments[0],r,u,i,t;if(null!==arguments[1]&&"object"==typeof arguments[1]){r=arguments[1];for(u in r)r.hasOwnProperty(u)&&(t=new RegExp("\\{"+u+"\\}","gm"),n=n.replace(t,r[u]))}else for(i=1;i<arguments.length;i++)t=new RegExp("\\{"+(i-1)+"\\}","gm"),n=n.replace(t,arguments[i]);return n};"function"!=typeof Object.assign&&(Object.assign=function(n){var u,i,t,r;if(null==n)throw new TypeError("Cannot convert undefined or null to object");for(u=Object(n),i=1;i<arguments.length;i++)if(t=arguments[i],null!=t)for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(u[r]=t[r]);return u})}(),function(){"use strict";var n=angular.module("ods-widgets",["infinite-scroll","ngSanitize","gettext"]);n.provider("ODSWidgetsConfig",function(){this.defaultConfig={ODSWidgetsVersion:"1.0.10",defaultDomain:"",language:null,disqusShortname:null,customAPIHeaders:null,basemaps:[{provider:"jawg.streets",label:"Jawg Streets",jawg_apikey:"opendatasoft-community"}],mapGeobox:!1,chartColors:null,mapPrependAttribution:null,basePath:null,websiteName:null,themes:{},defaultMapLocation:"12,48.85218,2.36996"};this.customConfig={};this.setConfig=function(n){angular.extend(this.customConfig,n)};this.$get=function(){return angular.extend({},this.defaultConfig,this.customConfig)}});n.run(["gettextCatalog","ODSWidgetsConfig",function(n,t){if(!t.basePath)for(var u,i,f=document.getElementsByTagName("script"),e=/[\/^]ods-widgets(\.min)?\.js\??/,r=0;r<f.length;r++)u=f[r].src,u.match(e)&&(i=u.split(e)[0],t.basePath=i?".js"===i.substring(i.length-3)?"":i+"/":"/")}])}(),function(){"use strict";function n(n,t){return encodeURIComponent(n).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,t?"%20":"+")}function t(n){return angular.isObject(n)?angular.isDate(n)?n.toISOString():angular.toJson(n):n}var i=angular.module("ods-widgets");i.service("ODSParamSerializer",function(){return function(i){if(!i)return"";var r=[];return angular.forEach(i,function(i,u){null===i||angular.isUndefined(i)||(angular.isArray(i)?angular.forEach(i,function(i){r.push(n(u)+"="+n(t(i)))}):r.push(n(u)+"="+n(t(i))))}),r.join("&")}});i.service("ODSAPI",["$http","ODSWidgetsConfig","odsNotificationService","ODSParamSerializer",function(n,t,i,r){var u=function(u,f,e,o){var s=u?u.domainUrl:"",h;return s+=f,e=ODS.URLUtils.cleanupAPIParams(e)||{},e.timezone=jstz.determine().name(),u&&u.apikey&&(e.apikey=u.apikey),u&&u.source&&(e.source=u.source),h={params:e,paramSerializer:r},o&&(h.timeout=o),s.startsWith("http://")||(h.headers=t.customAPIHeaders?t.customAPIHeaders:{},h.headers["ODS-Widgets-Version"]=t.ODSWidgetsVersion),!u.domainUrl||Modernizr.cors?n.get(s,h).error(function(n){n&&i.sendNotification(n)}):(s+=s.indexOf("?")>-1?"&":"?",s+="callback=JSON_CALLBACK",n.jsonp(s,h))};return{getDomainURL:function(n){var i=null;return angular.isUndefined(n)||null===n||""===n?i=t.defaultDomain:(i="/"!==n.substr(0,1)&&-1===n.indexOf(".")?n+".opendatasoft.com":n,"/"!==i.substr(0,1)&&-1===i.indexOf("http://")&&-1===i.indexOf("https://")&&(i="https://"+i)),"/"===i.substr(-1)&&(i=i.substr(0,i.length-1)),i},datasets:{get:function(n,t,i){return u(n,"/api/datasets/1.0/"+t+"/",i)},search:function(n,t){var i=angular.extend({},n.parameters,t);return u(n,"/api/datasets/1.0/search/",i)},facets:function(n,t){return this.search(n,{rows:0,facet:t})}},records:{analyze:function(n,t,r){return u(n,"/api/records/1.0/analyze/",angular.extend({},t,{dataset:n.dataset.datasetid}),r).success(function(n,t,r){r()["ods-analyze-truncated"]&&i.sendNotification("An analysis request hit the maximum number of results limit. Returned data is incomplete and not trustworthy.")})},search:function(n,t,i){return u(n,"/api/records/1.0/search/",angular.extend({},t,{dataset:n.dataset.datasetid}),i)},download:function(n,t,i){return u(n,"/api/records/1.0/download/",angular.extend({},t,{dataset:n.dataset.datasetid}),i)},geo:function(n,t,i){return u(n,"/api/records/1.0/geocluster/",angular.extend({},t,{dataset:n.dataset.datasetid}),i)},geopreview:function(n,t,i){return u(n,"/api/records/1.0/geopreview/",angular.extend({},t,{dataset:n.dataset.datasetid}),i)},boundingbox:function(n,t,i){return u(n,"/api/records/1.0/boundingbox/",angular.extend({},t,{dataset:n.dataset.datasetid}),i)},geopolygon:function(n,t,i){return u(n,"/api/records/1.0/geopolygon/",angular.extend({},t,{dataset:n.dataset.datasetid}),i)}},reuses:function(n,t){return u(n,"/api/reuses/",t)}}}])}(),function(){"use strict";var n=angular.module("ods-widgets");n.factory("AggregationHelper",["translate",function(n){var t=[{label:n("Count"),func:"COUNT"},{label:n("Average"),func:"AVG"},{label:n("Minimum"),func:"MIN"},{label:n("Maximum"),func:"MAX"},{label:n("Standard deviation"),func:"STDDEV"},{label:n("Sum"),func:"SUM"},{label:n("Percentile"),func:"QUANTILES"},{label:n("Constant value"),func:"CONSTANT"}];return{getAvailableFunctions:function(n){return 0===n?[t[0],t[t.length-1]]:t},getAvailableFunction:function(n){return t[n]},getFunctionLabel:function(n){return n=n.toUpperCase(),$.grep(t,function(t){return n===t.func})[0].label}}}]);n.factory("ChartHelper",["translate","AggregationHelper","ODSWidgetsConfig","ODSCurrentDomain","colorScale",function(n,t,i,r,u){var o={},a={},v={year:n("Year"),month:n("Month"),day:n("Day"),hour:n("Hour"),minute:n("Minute"),"month month":n("Month of year"),"day day":n("Day of month"),"day weekday":n("Day of week"),"hour weekday":n("Hour per weekday"),"day month":n("Day of year"),"hour hour":n("Hour of day")},f={},l=[],y={"top left":{center:["15%","20%"],size:"25%"},"top right":{center:["85%","20%"],size:"25%"},"bottom left":{center:["15%","80%"],size:"25%"},"bottom right":{center:["85%","80%"],size:"25%"},center:{}},b=i.chartColors||chroma.brewer.Set2,h=[{label:n("Line"),type:"line",group:n("line charts")},{label:n("Spline"),type:"spline",group:n("line charts")},{label:n("Range"),type:"arearange",group:n("Area charts"),filter:"hasNumericField"},{label:n("Range spline"),type:"areasplinerange",group:n("Area charts"),filter:"hasNumericField"},{label:n("Column range"),type:"columnrange",group:n("Area charts"),filter:"hasNumericField"},{label:n("Treemap"),type:"treemap",group:n("Special")},{label:n("Area"),type:"area",group:n("Area charts")},{label:n("Area spline"),type:"areaspline",group:n("Area charts")},{label:n("Column chart"),type:"column",group:n("Bar charts")},{label:n("Bar chart"),type:"bar",group:n("Bar charts")},{label:n("Pie chart"),type:"pie",group:n("Pie charts")},{label:n("Scatter plot"),type:"scatter",group:n("line charts")},{label:n("Spiderweb chart"),type:"spiderweb",group:n("Pie charts")},{label:n("Polar chart"),type:"polar",group:n("Pie charts")},{label:n("Funnel chart"),type:"funnel",group:n("Pyramid charts")},{label:n("Boxplot"),type:"boxplot",group:n("Boxplot charts")}],s=["year","month","day","hour","minute"],p=["month month","day day","day weekday","hour weekday","day month","hour hour"],e={},c={},w=function(n,t,i){var e=!1,f,r,u;for(n?e=!0:n="date"==t?"day":"hour",f=[],r=0;r<=s.indexOf(n)&&(f.push({name:s[r],label:v[s[r]]}),"date"!==t||"day"!=s[r])&&("datetime"!==t||e||"hour"!=s[r])&&("datetime"!==t||!e||"minute"!=s[r]);r++);if(i)for(u=0;u<p.length&&(f.push({name:p[u],label:v[p[u]]}),"date"!==t||"day month"!=s[u]);u++);return f};return{getDatasetUniqueId:function(n){var t;if(angular.forEach(c,function(i,r){return r.endsWith(n)&&(t=i),!1}),t)return t.getUniqueId();throw"dataset "+n+" not loaded yet.";},getDataset:function(n){var t;return angular.forEach(c,function(i,r){return n===r&&(t=i),!1}),t},isChartSortable:function(n){return!this.isRangeChart(n)},isRangeChart:function(n){return["arearange","areasplinerange","columnrange"].indexOf(n)>-1},getAllTimescales:function(){return w("minute","datetime",!0)},getAvailableX:function(n,t){return void 0===t?o[n]:o[n][t]},getAvailableBreakDowns:function(n,t){if(!t)return[];for(var u=-1!==["date","datetime"].indexOf(this.getFieldType(n,t)),r=[],i=0;i<o[n].length;i++)o[n][i].name!==t&&(u&&-1!==["date","datetime"].indexOf(this.getFieldType(n,o[n][i].name))||r.push({label:o[n][i].label,name:o[n][i].name}));return r},getAvailableY:function(n,t){return void 0===t?a[n]:a[n][t]},getTimescales:function(n,t,i){for(var o,r,f,u=0;u<e[n].length;u++)if(e[n][u].name===t){r=e[n][u];break}if(r){if(r.annotations)for(f=0;f<r.annotations.length;f++)if("timeserie_precision"==r.annotations[f].name){o=r.annotations[f].args[0];break}return w(o,r.type,i)}},getDatasetId:function(n){return(n.domain||r.domainId)+"."+n.dataset.datasetid},init:function(n,t,i){var h,o,r,s,v;void 0===i&&(i=!1);var f=[],a=[],u=this.getDatasetId(n);if(i||!(u in l)){for(e[u]=n.dataset.fields,h=[],o=0;o<e[u].length;o++)if(r=e[u][o],"int"!=r.type&&"double"!=r.type||a.push(r),"datetime"==r.type||"date"==r.type)f.unshift(r);else if("double"==r.type||"int"==r.type)h.push(r);else if(r.annotations)for(s=0;s<r.annotations.length;s++)v=r.annotations[s],"facet"==v.name&&f.push(r);f=f.concat(h);this.setAvailableX(u,f);this.setAvailableY(u,a);l[u]=!0;c[u]=n.dataset;this.load(u)}},isInitialized:function(n){return""===n?!!l.length:!!(n in l)},load:function(n){var t,i;if(f[n])for(t=0;t<f[n].length;t++)f[n][t]();if(f[n]=[],f[""])for(;f[""].length;)i=f[""].pop(),setTimeout(i)},onLoad:function(n,t){"function"==typeof n&&(t=n,n="");this.isInitialized(n)?t():(n in f||(f[n]=[]),f[n].indexOf(t)<0&&f[n].push(t))},setAvailableX:function(n,t){o[n]=t},setAvailableY:function(n,t){a[n]=t},resolvePosition:function(n){return void 0==typeof n&&(n="center"),n in y||(n="center"),y[n]},getPieChartPositions:function(){return $.map(y,function(n,t){return t})},getDefaultColors:function(){return b},getDefaultColor:function(n,t,i,r){return u.getDefaultColor(n,this.getAllowedColors(t,i),r)},getAllowedColors:function(n,t){var i=[];return(t||-1!==["pie","treemap"].indexOf(n))&&i.push("range"),t||-1!==["pie","treemap"].indexOf(n)||i.push("single"),i},getAvailableChartTypes:function(n,t){var r=[],i;if(c[n])for(i=0;i<h.length;i++)(t&&-1!==["column","area","areaspline","line","spline","bar","polar"].indexOf(h[i].type)||!t)&&(void 0===h[i].filter?r.push(h[i]):c[n][h[i].filter]()&&r.push(h[i]));return r},getSerieTemplate:function(){return angular.copy({})},setChartDefaultValues:function(n,t,i,r){var f,e="",u;for(void 0===i&&(i=!1),void 0===r&&(r=!1),u=0;u<t.queries.length;u++)f=this.getFieldType(n,t.queries[u].xAxis),t.queries[u].timescale&&("date"===f||"datetime"===f)&&(e=t.queries[u].timescale);if(e?!t.timescale&&r&&(t.timescale=e):t.timescale="",t.timescale)for(u=0;u<t.queries.length;u++)t.queries[u].timescale||(t.queries[u].timescale=t.timescale);t.singleAxis||(delete t.singleAxisLabel,delete t.singleAxisScale,delete t.yRangeMin,delete t.yRangeMax);i||delete t.xLabel},setDefaultQueryValues:function(n,t,i,r,u){var f,o,s,e;t||(t={});var h={},l=h.x||this.getAvailableX(n,0).name,c=50;for(t.xAxis||(t.xAxis=l),"date"!=this.getFieldType(n,t.xAxis)&&"datetime"!=this.getFieldType(n,t.xAxis)||(c="",h.timescale),void 0===t.maxpoints&&(t.maxpoints=c),t.charts||(t.charts=[]),f=t.xAxis,o=this.getFieldType(n,f),"date"==o||"datetime"==o?t.timescale&&-1!==this.getTimescales(n,f,i).map(function(n){return n.name}).indexOf(t.timescale)||(t.timescale="year",t.timescale=i&&u?u:"year"):t.timescale&&(t.timescale=""),t.seriesBreakdown===f&&(t.seriesBreakdown="",t.seriesBreakdownTimescale=""),s=!1,e=0;e<t.charts.length;e++)-1!==["treemap","pie"].indexOf(t.charts[e].type)&&(s=!0);s&&(t.seriesBreakdown="",t.seriesBreakdownTimescale="");!t.seriesBreakdown&&t.charts.length<2&&delete t.stacked;t.sort&&!t.seriesBreakdown||(t.sort="")},setSerieDefaultValues:function(n,t,i,r){var u,e,f;if(void 0!==i){if(f=this.getAvailableY(n),t.type||(t.type="column",!i||"date"!=this.getFieldType(n,i)&&"datetime"!=this.getFieldType(n,i)||(t.type="line")),t.func||(t.func=f.length>0?"AVG":"COUNT"),void 0!==t.expr&&void 0===t.yAxis&&(t.yAxis=t.expr,delete t.expr),void 0===t.yAxis||""===t.yAxis?(0===f.length&&-1===["COUNT","CONSTANT","CUSTOM"].indexOf(t.func)&&(t.func="COUNT"),r||-1!==["COUNT","CONSTANT","CUSTOM"].indexOf(t.func)||(t.yAxis=f[0].name)):r||-1!==["COUNT","CONSTANT","CUSTOM"].indexOf(t.func)||0===$.grep(f,function(n){return n.name===t.yAxis}).length&&(t.yAxis=f[0].name),t.type&&this.isRangeChart(t.type))for(t.func="COUNT",e=[5,95],t.charts||(t.charts=[{func:"MIN",yAxis:t.yAxis},{func:"MAX",yAxis:t.yAxis}]),5===t.charts.length&&(t.charts[1]=angular.copy(t.charts[4]),t.charts.splice(2,3)),u=0;u<2;u++)void 0!==t.charts[u].yAxis&&""!==t.charts[u].yAxis||(t.charts[u].yAxis=t.charts[u].expr||t.yAxis,delete t.charts[u].expr),"QUANTILES"!==t.charts[u].func||""!==t.charts[u].subsets&&void 0!==t.charts[u].subsets||(t.charts[u].subsets=e[u]),"QUANTILES"!==t.charts[u].func&&t.charts[u].subsets&&delete t.charts[u].subsets;else if(t.type&&"boxplot"===t.type){for(t.func="COUNT",e=[1,25,50,75,100],t.charts||(t.charts=[]),2===t.charts.length&&(t.charts[4]=angular.copy(t.charts[1]),t.charts[1]=void 0),void 0===t.charts[0]&&(t.charts[0]={func:"MIN",yAxis:t.yAxis}),u=1;u<4;u++)void 0===t.charts[u]&&(t.charts[u]={func:"QUANTILES",yAxis:t.yAxis,subsets:e[u]});for(void 0===t.charts[4]&&(t.charts[4]={func:"MAX",yAxis:t.yAxis}),u=0;u<5;u++)void 0!==t.charts[u].yAxis&&""!==t.charts[u].yAxis||(t.charts[u].yAxis=t.charts[u].expr||t.charts[u].yAxis||t.yAxis,delete t.charts[u].expr),"QUANTILES"!==t.charts[u].func||""!==t.charts[u].subsets&&void 0!==t.charts[u].subsets||(t.charts[u].subsets=e[u]),"QUANTILES"!==t.charts[u].func&&t.charts[u].subsets&&delete t.charts[u].subsets}else t.charts&&delete t.charts,"QUANTILES"===t.func?t.subsets||(t.subsets=50):t.subsets&&delete t.subsets;"pie"!==t.type||t.position||(t.position="center");"column"!==t.type&&"bar"!==t.type&&t.displayStackValues&&(t.displayStackValues=!1);void 0===t.scientificDisplay&&(t.scientificDisplay=!0);delete t.yLabel;delete t.extras}},setSerieDefaultColors:function(n,t,i){n.color=this.getDefaultColor(n.color,n.type,t,i)},getXLabel:function(n,t,i){var r=this.getFieldType(n,t),u=this.getFieldLabel(n,t);return"date"!==r&&"datetime"!==r||!i?u:u+" ("+v[i]+")"},getYLabel:function(i,r){if(r.yLabelOverride)return r.yLabelOverride;if(this.isRangeChart(r.type))return this.getYLabel(i,r.charts[0])+" / "+this.getYLabel(i,r.charts[1]);if("boxplot"===r.type)return n("Boxplot");var u=t.getFunctionLabel(r.func),e=r.yAxis||r.expr,f=$.grep(this.getAvailableY(i),function(n){return n.name==e});return f.length>0&&"COUNT"!==r.func&&"CONSTANT"!==r.func&&"CUSTOM"!==r.func?u+" "+f[0].label:u},getField:function(n,t){var i,r;if(!e[n])return null;for(i=0;i<e[n].length;i++)if(r=e[n][i],r.name==t)return r},getFieldLabel:function(n,t){var i=this.getField(n,t);return i?i.label:i},getFieldType:function(n,t){var i=this.getField(n,t);return i?i.type:i},getFieldUnit:function(n,t){var i=this.getField(n,t),r;if(i&&i.annotations){for(r=0;r<i.annotations.length;r++)if("unit"===i.annotations[r].name)return i.annotations[r].args[0];return i.annotations.unit}return!1},getDecimals:function(n,t){var i=this.getField(n,t),r;if(i&&i.annotations){for(r=0;r<i.annotations.length;r++)if("decimals"===i.annotations[r].name)return i.annotations[r].args[0];return!1}return!1},getAvailableFunctions:function(n){return t.getAvailableFunctions(this.getAvailableY(n).length)},allowThresholds:function(n){return-1!==["column","bar","scatter"].indexOf(n)}}}])}(),function(){"use strict";angular.module("ods-widgets").factory("colorScale",["ODSWidgetsConfig",function(n){function r(n){var t;return n?(n.startsWith("custom-")&&(n=n.replace("custom-","")),n.startsWith("range-")?n=n.replace("range-",""):n.startsWith("single-")&&(n=n.replace("single-","")),chroma.brewer[n]&&(t=n)):t=u||o,t}function f(n){var t,i=r(n);return i?t=chroma.scale(i):(n=n.replace("custom-",""),n=n.replace("single-",""),t=chroma.scale().range([n,n])),t}var e=[{label:"Accent",colors:chroma.brewer.Accent},{label:"Dark2",colors:chroma.brewer.Dark2},{label:"Pastel2",colors:chroma.brewer.Pastel2},{label:"Pastel1",colors:chroma.brewer.Pastel1},{label:"Set2",colors:chroma.brewer.Set2},{label:"Set1",colors:chroma.brewer.Set1},{label:"Paired",colors:chroma.brewer.Paired},{label:"Set3",colors:chroma.brewer.Set3},{label:"OrRd",colors:chroma.brewer.OrRd.slice(1)},{label:"PuBu",colors:chroma.brewer.PuBu.slice(1)},{label:"BuPu",colors:chroma.brewer.BuPu.slice(1)},{label:"Oranges",colors:chroma.brewer.Oranges.slice(1)},{label:"YlOrBr",colors:chroma.brewer.YlOrBr.slice(1)},{label:"YlGn",colors:chroma.brewer.YlGn.slice(1)},{label:"Reds",colors:chroma.brewer.Reds.slice(1)},{label:"RdPu",colors:chroma.brewer.RdPu.slice(1)},{label:"Greens",colors:chroma.brewer.Greens.slice(1)},{label:"YlGnBu",colors:chroma.brewer.YlGnBu.slice(1)},{label:"Purples",colors:chroma.brewer.Purples.slice(1)},{label:"GnBu",colors:chroma.brewer.GnBu.slice(1)},{label:"Greys",colors:chroma.brewer.Greys.slice(1)},{label:"YlOrRd",colors:chroma.brewer.YlOrRd.slice(1)},{label:"PuRd",colors:chroma.brewer.PuRd.slice(1)},{label:"Blues",colors:chroma.brewer.Blues.slice(1)},{label:"PuBuGn",colors:chroma.brewer.PuBuGn.slice(1)},{label:"Spectral",colors:chroma.brewer.Spectral},{label:"RdYlGn",colors:chroma.brewer.RdYlGn},{label:"RdBu",colors:chroma.brewer.RdBu},{label:"PiYG",colors:chroma.brewer.PiYG},{label:"PRGn",colors:chroma.brewer.PRGn},{label:"RdYlBu",colors:chroma.brewer.RdYlBu},{label:"BrBG",colors:chroma.brewer.BrBG},{label:"RdGy",colors:chroma.brewer.RdGy},{label:"PuOr",colors:chroma.brewer.PuOr}],o="Set2",u="",i=0,t;return n.chartColors&&n.chartColors.length>0&&(u="custom",t=angular.copy(n.chartColors),angular.isArray(t)||(t=[t]),1==t.length&&t.push(t[0]),e.unshift({label:"custom",colors:t}),chroma.brewer.custom=t),{getScale:function(n,t,i){return t=void 0!==t?t:0,i=void 0!==i?i:1,f(n).domain([t,i])},getUniqueColor:function(n){return f(n)(1).hex()},getColorAtIndex:function(n,t){var i,u=r(n);return u?(i=chroma.brewer[u],i[t%i.length]):n},getColors:function(n){var t=r(n);return t?chroma.brewer[t]:[n,n]},getColorSets:function(){return chroma.brewer},getOrderedColorSets:function(){return e},getDefaultColorSet:function(){return u||o},getDefaultColor:function(n,t,r){var f,u=this.getColorList(t);return void 0!==n&&""!==n?n:"undefined"!=typeof backupColor&&""!==backupColor?backupColor:(u[i].label.startsWith("custom-")&&(i=(i+1)%u.length),void 0!==r?f=u[r%u.length].label:(f=u[i].label,i=(i+1)%u.length),f)},getColorList:function(n){var t=[],i;return-1!==n.indexOf("single")&&(i=this.getColors(this.getDefaultColorSet()),angular.forEach(i,function(n){t.push({label:n,color:n})})),-1!==n.indexOf("range")&&angular.forEach(this.getOrderedColorSets(),function(n){t.push({label:"range-"+n.label,color:n.colors})}),t},isColorAllowed:function(n,t,i){var r=!1;return!!n&&(-1===i.indexOf("range")?!n.startsWith("range-")&&!n.startsWith("custom-range-"):-1!==i.indexOf("range")?!n.startsWith("custom-single-")&&(angular.forEach(t,function(t){t.label===n&&(r=!0)}),r):void 0)}}}])}(),function(){"use strict";var i=angular.module("ods-widgets"),t={},n={};i.factory("ContextHelper",["ODSAPI","$q",function(i,r){return{getDatasetContext:function(u,f,e,o,s,h,c){var v=r.defer(),l={wait:function(){return v.promise},getDownloadURL:function(n,t){n=n||"csv";var i=this.domainUrl+"/explore/dataset/"+this.dataset.datasetid+"/download/?format="+n;return i+this.getQueryStringURL(t)},getQueryStringURL:function(n){return n=n||{},"&"+ODS.URLUtils.getAPIQueryString(angular.extend({},this.parameters,n))},toggleRefine:function(n,t,i){ODS.Context.toggleRefine(this,n,t,i)},getActiveFilters:function(){if(this.parameters){var t=Object.keys(this.parameters),n=this;return t.filter(function(t){return"q"==t&&n.parameters.q&&n.parameters.q.length>0||"q.timerange"==t||"q.timescale"==t||"q.mapfilter"==t||"geofilter.polygon"==t||"geofilter.distance"==t||0===t.indexOf("refine.")})}return[]},name:u,type:"dataset",domain:f,domainUrl:i.getDomainURL(f),apikey:h,dataset:null,parameters:o,source:o&&o.source||s||null},y,a;return c?(l.dataset=new ODS.Dataset(c),v.resolve(l.dataset)):(y=o&&o.source||s||"",a=(l.domain||"")+"."+y+"."+e+"."+(h||""),angular.isDefined(t[a])?(l.dataset=new ODS.Dataset(t[a]),v.resolve(l.dataset)):angular.isDefined(n[a])?n[a].then(function(n){l.dataset=new ODS.Dataset(n.data);v.resolve(l.dataset)}):(n[a]=i.datasets.get(l,e,{extrametas:!0,interopmetas:!0,source:y}),n[a].success(function(n){t[a]=n;l.dataset=new ODS.Dataset(n);v.resolve(l.dataset)}).error(function(){v.reject("Failed to fetch "+u+" context.")}))),l}}}])}(),function(){"use strict";angular.module("ods-widgets").provider("ODSCurrentDomain",[function(){var n={};n.domainId="";this.setDomain=function(t){n.domainId=t};this.$get=function(){return n}}])}(),function(){"use strict";angular.module("ods-widgets").service("I18n",["translate",function(n){return{weekdays:{shorthand:[n("Sun"),n("Mon"),n("Tue"),n("Wed"),n("Thu"),n("Fri"),n("Sat")],longhand:[n("Sunday"),n("Monday"),n("Tuesday"),n("Wednesday"),n("Thursday"),n("Friday"),n("Saturday")]},months:{shorthand:[n("Jan"),n("Feb"),n("Mar"),n("Apr"),n("May"),n("Jun"),n("Jul"),n("Aug"),n("Sep"),n("Oct"),n("Nov"),n("Dec")],longhand:[n("January"),n("February"),n("March"),n("April"),n("May"),n("June"),n("July"),n("August"),n("September"),n("October"),n("November"),n("December")]},fr:{timeFormat:"HH:mm",timeSeparators:[":"],dateFormat:"DD/MM/YYYY",dateSeparators:["/"],firstDayOfWeek:1},en:{timeFormat:"hh:mm A",timeSeparators:[":"," "],dateFormat:"MM/DD/YYYY",dateSeparators:["/"],firstDayOfWeek:0}}}])}(),function(){"use strict";angular.module("ods-widgets").factory("MapHelper",["ODSWidgetsConfig","ODSAPI","$q","AggregationHelper","translate",function(n,t,i,r,u){var e=5,f=",",o="#C32D1C";return{WORLD_BOUNDS:[[-60,-180],[80,180]],DEFAULT_MARKER_COLOR:o,DEFAULT_RANGE_COLORS:["#FC9272","#A5211B"],retrieveBounds:function(n){var f=this,r=i.defer(),u;return 0===n.length?r.resolve(null):(u=[],angular.forEach(n,function(n){var i={};jQuery.extend(i,n.parameters);u.push(t.records.boundingbox(n,i))}),i.all(u).then(function(n){var t;angular.forEach(n,function(n){var i=n.data,r=[[i.bbox[1],i.bbox[0]],[i.bbox[3],i.bbox[2]]];i.count>0&&(t?t.extend(r):t=L.latLngBounds(r))});t&&t.isValid()?r.resolve(t):r.resolve(f.WORLD_BOUNDS)})),r.promise},getLocationStructure:function(n){var t=n.split(f);return{center:[t[1],t[2]],zoom:t[0]}},getLocationParameter:function(n,t){angular.isArray(n)&&(n=L.latLng(n));var i=L.Util.formatNum(n.lat,e),r=L.Util.formatNum(n.lng,e);return t+f+i+f+r},_getDatasetFieldBound:function(n,r,u){var o=this,e=i.defer(),s=angular.extend({},n.parameters,{rows:1}),f=r;return u&&(f=u+f),t.records.search(n,angular.extend(s,{sort:f})).then(function(n){e.resolve(o.boundAsNumber(n.data.records[0].fields[r]))}),e.promise},getDatasetFieldBoundMin:function(n,t){return this._getDatasetFieldBound(n,t,"-")},getDatasetFieldBoundMax:function(n,t){return this._getDatasetFieldBound(n,t)},getDatasetFieldBounds:function(n,t){var u=[this.getDatasetFieldBoundMin(n,t),this.getDatasetFieldBoundMax(n,t)],r=i.defer();return i.all(u).then(function(n){var t=n.sort(ODS.ArrayUtils.sortNumbers),i=t[0],u=t[1];r.resolve([i,u])}),r.promise},boundAsNumber:function(n){return Math.round(100*parseFloat(n))/100},getLayerLegendLabel:function(n){var f=null,t,i,e,o;if(["choropleth","categories","heatmap"].indexOf(n.display)>=0)return("categories"===n.display||"choropleth"===n.display?t=n.context.dataset.getField(n.color.field):"COUNT"!==n.func.toUpperCase()&&(t=n.context.dataset.getField(n.expr)),t)?(f=t.label,i=[],n.func&&i.push(r.getFunctionLabel(n.func)),e=n.context.dataset.getFieldAnnotation(t,"unit"),e&&(o=u("in {unit}"),i.push(format_string(o,{unit:e.args[0]}))),i.length&&(f+=" ("+i.join(", ")+")")):f=u("Number of elements"),f},MapConfiguration:{getActiveContextList:function(n,t){t=t||{};var i=[];return angular.forEach(n.groups,function(n){n.displayed&&angular.forEach(n.layers,function(n){t.geoOnly&&!n.context.dataset.hasGeoField()||n.excludeFromRefit&&t.skipExcludedFromRefit||i.push(n.context)})}),i},getContextList:function(n){var t=[];return angular.forEach(n.groups,function(n){angular.forEach(n.layers,function(n){n.context&&n.context.dataset&&n.context.dataset.hasGeoField()&&t.push(n.context)})}),t},createLayerGroupConfiguration:function(){return{color:null,title:null,description:null,displayed:!0,picto:null,layers:[]}},createLayerConfiguration:function(n,t){var i,r;return angular.isUndefined(t)&&(t={}),i=t.display||"auto","clusters"===i&&(i="polygon"),"clustersforced"===i&&(i="polygonforced"),"raw"===i&&(i="none"),t.size=Math.min(t.size,10),t.radius=Math.min(t.radius,10),r={context:null,color:t.color,colorFunction:t.colorFunction,picto:t.picto,display:i,func:t.function||(t.expression?"AVG":"COUNT"),expr:t.expression||null,marker:null,size:t.size||null,radius:t.radius||null,tooltipTemplate:n,localKey:t.localKey||null,remoteKey:t.remoteKey||null,tooltipSort:t.tooltipSort,hoverField:t.hoverField||null,shapeOpacity:t.shapeOpacity||null,borderOpacity:t.borderOpacity||null,pointOpacity:t.pointOpacity||null,borderColor:t.borderColor,excludeFromRefit:t.excludeFromRefit,caption:!!angular.isDefined(t.caption)&&t.caption,captionTitle:t.captionTitle||null,showZoomMin:t.showZoomMin||null,showZoomMax:t.showZoomMax||null,minSize:t.minSize||null,maxSize:t.maxSize||null,sizeFunction:t.sizeFunction||null},this.createLayerId(r),r},setLayerDisplaySettingsFromDefault:function(n){(angular.isUndefined(n.marker)||null===n.marker)&&(n.marker=null!==n.context.dataset.getExtraMeta("visualization","map_marker_hidemarkershape")?!n.context.dataset.getExtraMeta("visualization","map_marker_hidemarkershape"):!0);n.color=n.color||n.context.dataset.getExtraMeta("visualization","map_marker_color")||o;n.picto=n.picto||n.context.dataset.getExtraMeta("visualization","map_marker_picto")||(n.marker?"ods-circle":"dot");n.size=n.marker?n.size||4:n.size||7;(angular.isUndefined(n.shapeOpacity)||null===n.shapeOpacity)&&(n.shapeOpacity=n.shapeOpacity||.5);(angular.isUndefined(n.pointOpacity)||null===n.pointOpacity)&&(n.pointOpacity=n.pointOpacity||1);n.radius=n.radius||4;n.borderOpacity=n.borderOpacity||1;n.borderColor=n.borderColor||"#FFFFFF";n.borderSize=n.borderSize||1;n.borderPattern=n.borderPattern||"solid";n.sizeFunction=n.sizeFunction||"linear";n.minSize=n.minSize||3;n.maxSize=n.maxSize||5;this.createLayerId(n)},getVisibleLayerIds:function(n){var t=[];return angular.forEach(n.groups,function(n){n.displayed&&angular.forEach(n.layers,function(n){t.push(n._runtimeId)})}),t},createLayerId:function(n){angular.isUndefined(n._runtimeId)&&(n._runtimeId=ODS.StringUtils.getRandomUUID())}}}}])}(),function(){"use strict";angular.module("ods-widgets").factory("MapLayerHelper",["$rootScope","$compile","$filter","ODSAPI","PictoHelper","SVGInliner",function(n,t,i,r,u,f){return{getRecordColor:function(n,t){var i,f,r,u;if(angular.isUndefined(t.color))return"#C32D1C";if(angular.isString(t.color))return t.color;if("range"===t.color.type)return t.color.field?(i=n&&n.fields&&n.fields[t.color.field],angular.isUndefined(i)?t.color.colors[0]:this.getColor(i,t)):(console.error("Range coloring requires a field"),t.color.colors[0]);if("categories"===t.color.type)return i=n&&n.fields&&n.fields[t.color.field],f=t.color.categories[i],angular.isUndefined(f)?t.color.otherCategories||"#000000":f;if("field"!==t.color.type){if("choropleth"===t.color.type){if(i=n&&n.fields&&n.fields[t.color.field],angular.isUndefined(i))return"#000000";if(!angular.isNumber(i))return console.warn(i,"is not a numeric value to display in choropleth mode."),"#000000";for(r=Object.keys(t.color.ranges).map(function(n){return parseFloat(n)}).sort(function(n,t){return n-t}),u=0,u=0;u<r.length;u++)if(i<=r[u])return t.color.ranges[r[u]];return t.color.ranges[r[r.length-1]]}return console.error("Scale coloring is not supported for simple records"),chroma.scale(t.color.scale).out("hex").scale(0)}if(!(f=n&&n.fields&&n.fields[t.color.field]))return"#000000";try{return chroma(f).hex()}catch(n){return"#000000"}},getClusterColor:function(n,t){return angular.isUndefined(t.color)?"#C32D1C":angular.isString(t.color)?t.color:t.color.colors[0]},getColor:function(n,t,i,r,u){if(u=u||10,angular.isUndefined(t.color))return"#C32D1C";if(angular.isString(t.color))return angular.isDefined(i)&&angular.isDefined(r)?chroma.scale([chroma(t.color).brighten(50),t.color]).domain([i,r],Math.min(10,u),t.colorFunction).out("hex")(n):t.color;if("scale"===t.color.type)return chroma.scale(t.color.scale).domain([i,r],Math.min(10,u),t.colorFunction).out("hex")(n);if("range"===t.color.type){for(var f=0;f<t.color.ranges.length;f++)if(n<t.color.ranges[f])return t.color.colors[f];return t.color.colors[t.color.colors.length-1]}},bindTooltip:function(n,t,i,r,u,f,e){var o=this;angular.isArray(r)&&(r={type:"Point",coordinates:[r[1],r[0]]});i.refineOnClick?t.on("click",function(){n.isDrawing||o.refineContextOnClick(i,r,f,e)}):t.on("click",function(t){if(!n.isDrawing&&(r||u||f||t.data)){var e,s;angular.isDefined(t.target.getLatLng)?e=t.target.getLatLng():(e=t.latlng,s=0);o.showPopup(n,i,e,r,u,f,s,t.data||null)}})},refineContextOnClick:function(t,i,u,f){var e=function(e){var h=e.contextField,s=e.mapField,c=e.context,l=e.replaceRefine,o;s||h?angular.isDefined(f)&&s==t.hoverField?n.$apply(function(){c.toggleRefine(h,f,l)}):(o={format:"json"},u?o.geo_digest=u:ODS.GeoFilter.addGeoFilterFromSpatialObject(o,i),angular.extend(o,t.context.parameters,{rows:1}),r.records.download(t.context,o).success(function(n){angular.isDefined(n[0].fields[s])&&c.toggleRefine(h,n[0].fields[s],l)})):n.$apply(function(){ODS.GeoFilter.addGeoFilterFromSpatialObject(c.parameters,i)})};angular.forEach(t.refineOnClick,e)},bindZoomable:function(n,t,i){t.on("click",function(t){n.isDrawing||(n.getZoom()===n.getMaxZoom()?this.showPopup(n,i,t.target.getLatLng(),t.target.getClusterShape()):n.setView(t.latlng,n.getZoom()+2))})},showPopup:function(i,r,u,f,e,o,s,h){var c=n.$new(!0),l,a;e&&(c.recordid=e);f&&(c.shape=f);h&&(c.gridData=h);l=r.context.dataset;c.map=i;c.template=r.tooltipTemplate||l.extra_metas&&l.extra_metas.visualization&&l.extra_metas.visualization.map_tooltip_html_enabled&&l.extra_metas.visualization.map_tooltip_html||"";a={offset:[0,angular.isDefined(s)?s:-30],maxWidth:250,minWidth:250};c.context=r.context;new L.Popup(a).setLatLng(u).setContent(t('<ods-map-tooltip tooltip-sort="'+(r.tooltipSort||"")+'" shape="shape" recordid="recordid" context="context" map="map" template="{{ template }}" grid-data="gridData" geo-digest="'+(o||"")+'"><\/ods-map-tooltip>')(c)[0]).openOn(i)},formatNumber:function(n){return n=Math.round(100*n)/100,n=i("number")(n)},getClusterValue:function(n,t){return"aggregation"===t.display&&t.joinContext?n.serie1:"COUNT"!==t.func&&this.isAnalyzeEnabledClustering(t)?n.series?n.series.serie1:null:n.count},getClusterMin:function(n,t){return"aggregation"===t.display&&t.joinContext?n.aggregations.agg1.min:"COUNT"!==t.func&&this.isAnalyzeEnabledClustering(t)?n.series.serie1.min:n.count.min},getClusterMax:function(n,t){return"aggregation"===t.display&&t.joinContext?n.aggregations.agg1.max:"COUNT"!==t.func&&this.isAnalyzeEnabledClustering(t)?n.series.serie1.max:n.count.max},getClusterValues:function(n,t){var i,r=[];if("aggregation"===t.display&&t.joinContext)for(i=0;i<n.results.length;i++)r.push(n.results[i].serie1);else if("COUNT"!==t.func&&this.isAnalyzeEnabledClustering(t))for(i=0;i<n.clusters.length;i++)n.clusters[i].series&&r.push(n.clusters[i].series.serie1);else for(i=0;i<n.clusters.length;i++)r.push(n.clusters[i].count);return r},isAnalyzeEnabledClustering:function(n){return["heatmap","polygonforced","shape","aggregation","clusters"].indexOf(n.display)>=0},doesLayerRefreshOnLocationChange:function(n){return"tiles"!==n.display&&("shape"!==n.display&&"aggregation"!==n.display||!n.joinContext)},drawPoint:function(n,t,i,r,e,o){var s=this;f.getPromise(u.mapPictoToURL(n.picto,n.context),n.marker?"white":s.getRecordColor(r,n)).then(function(u){var f=new L.VectorMarker(i,{color:s.getRecordColor(r,n),icon:u,marker:n.marker,opacity:n.pointOpacity,size:n.size});e.addLayer(f);r?s.bindTooltip(t,f,n,i,r.recordid):s.bindTooltip(t,f,n,i,null,o)})},drawShape:function(n,t,i,r,u,f){var e=this,o=new L.GeoJSON(i,{style:function(t){var i={};return i.radius=3,n.borderPattern&&"solid"!==n.borderPattern&&(i.dashArray=e.patternToDashArray(n.borderPattern)),"LineString"===t.geometry.type||"MultiLineString"===t.geometry.type?(i.weight=5,i.color=e.getRecordColor(r,n),i.opacity=angular.isDefined(n.shapeOpacity)?n.shapeOpacity:.5):(i.fillColor=e.getRecordColor(r,n),i.weight=angular.isDefined(n.borderSize)?n.borderSize:1,i.fillOpacity=angular.isDefined(n.shapeOpacity)?n.shapeOpacity:.5,i.opacity=angular.isDefined(n.borderOpacity)?n.borderOpacity:1,i.color=angular.isDefined(n.borderColor)?n.borderColor:"#fff",n.borderPattern&&"solid"!==n.borderPattern&&(i.dashArray=e.patternToDashArray(n.borderPattern))),i}});r?e.bindTooltip(t,o,n,i,r.recordid):e.bindTooltip(t,o,n,i,null,f);u.addLayer(o)},patternToDashArray:function(n){var i,u=1,t=5,r=15;switch(n){case"long-dashes":i=[30,r];break;case"medium-dashes":i=[r,r];break;case"short-dashes":i=[t,r];break;case"dots":i=[u,r];break;case"short-dot":i=[u,t,t];break;case"short-dot-dot":i=[u,t,t,u,t];break;case"medium-short":i=[r,t,t,t];break;default:console.error("Unknown border pattern",n)}return i.join(", ")}}}])}(),function(){"use strict";angular.module("ods-widgets").factory("MapLayerRenderer",["ODSAPI","AggregationHelper","SVGInliner","PictoHelper","MapLayerHelper","MapRenderingAggregation","MapRenderingClustered","MapRenderingHeatmap","MapRenderingRaw","MapRenderingShapePreview","$q","$filter","$rootScope","$compile","$timeout",function(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y){return{updateDataLayer:function(t,i){var d=this,g=t._rendered,r,p,l,b,w,v,k;return t._currentRequestTimeout&&t._currentRequestTimeout.resolve(),r=c.defer(),t._currentRequestTimeout=r,p=c.defer(),l=function(n){d.swapLayers(i,g,n);t._rendered=n;t._currentRequestTimeout=null;t._loading=!1;p.resolve()},"tiles"===t.display?(t._rendered||(t._rendered=new L.BundleTileLayer("",{tileSize:512,minZoom:i.getMinZoom(),maxZoom:i.getMaxZoom(),gridLayer:{options:{resolution:4}}}),i.addLayer(t._rendered),y(function(){t._rendered.on("loading",function(){t._loading=!0;a.$apply()});t._rendered.on("load",function(){t._loading=!1;a.$apply()})},0),u.bindTooltip(i,t._rendered,t)),b={color:t.color,icon:t.picto,showmarker:t.marker},angular.extend(b,t.context.parameters),w="/api/datasets/1.0/"+t.context.dataset.datasetid+"/tiles/simple/{z}/{x}/{y}.bundle",v="",angular.forEach(b,function(n,t){null!==n&&(v+=v?"&":"?",v+=t+"="+encodeURIComponent(n))}),w+=v,t._rendered._url!==w&&t._rendered.setUrl(w),p.resolve()):"none"===t.display||i.getZoom()===i.getMaxZoom()&&"polygon"===t.display?(t._loading=!0,s.render(t,i,r).then(l)):["polygon","polygonforced","clusters"].indexOf(t.display)>=0?(t._loading=!0,e.render(t,i,r,!0).then(l)):"heatmap"===t.display?(t._loading=!0,o.render(t,i,r).then(l)):"shape"===t.display||"aggregation"===t.display?(t._loading=!0,f.render(t,i,r).then(l)):"categories"===t.display?(t._loading=!0,s.render(t,i,r).then(l)):"choropleth"===t.display?(t._loading=!0,s.render(t,i,r).then(l)):"auto"===t.display?(t._loading=!0,k=angular.extend({},t.context.parameters,{"geofilter.bbox":ODS.GeoFilter.getBoundsAsBboxParameter(i.getBounds())}),n.records.boundingbox(t.context,k).success(function(n){var u=n.count<5e5;n.geometries&&n.geometries.Point&&n.geometries.Point>n.count/2&&(n.count<200||i.getZoom()===i.getMaxZoom())?s.render(t,i,r).then(l):n.count<5e5?n.geometries&&n.geometries.Point&&n.geometries.Point>n.count/2?e.render(t,i,r,u).then(l):h.render(t,i,r).then(l):e.render(t,i,r,u).then(l)})):console.log('ERROR: Unknown display mode "'+t.display+'"'),p.promise},swapLayers:function(n,t,i){t&&n.removeLayer(t);n.addLayer(i)}}}])}(),function(){"use strict";angular.module("ods-widgets").service("MapRenderingAggregation",["ODSAPI","MapLayerHelper","AggregationHelper","$q",function(n,t,i,r){return{render:function(u,f,e){function b(n){var k=c(n),d,g,nt,it,b;if(0===k.length)return void l.resolve(s);var a=t.getClusterMin(n,u),v=t.getClusterMax(n,u),p=t.getClusterValues(n,u),w=function(n){return t.getColor(n,u,a,v,p.length)},tt={radius:3,color:"#fff",weight:1,opacity:.9,fillOpacity:.5};if((!angular.isObject(u.color)||"range"!==u.color.type)&&("COUNT"!==u.func&&t.isAnalyzeEnabledClustering(u)||a!==v)){L.Legend=L.Control.extend({initialize:function(n){L.Control.prototype.initialize.call(this,n)},onAdd:function(){var r=chroma.scale().domain([a,v],Math.min(10,p.length),u.colorFunction).domain(),n="",o=L.DomUtil.create("div","odswidget-map__legend"),s=u.context.dataset.datasetid,e=u.expr,h,f;if(e&&(e=u.context.dataset.getFieldLabel(u.expr)),s=u.context.dataset.metas.title,n+='<div class="odswidget-map__legend-title">'+s+"<br/>"+i.getFunctionLabel(u.func),"COUNT"!==u.func&&(n+=" "+e),n+="<\/div>",n+='<div class="odswidget-map__legend-colors">',1===p.length)n+='<i class="color_0" style="width: 90%; background-color:'+w((r[0]+r[1])/2)+'; opacity: 1;"><\/i>',n+='<\/div><div class="odswidget-map__legend-counts">',n+='<span class="odswidget-map__legend-value">',n+=t.formatNumber(r[0]),n+="<\/span>";else{for(h=90/(r.length-1),f=0;f<r.length-1;f++)n+='<i class="odswidget-map__legend-color" style="width:'+h+"%; background-color:"+w((r[f]+r[f+1])/2)+'; opacity: 1;"><\/i>';n+="<\/div><div>";n+='<span class="odswidget-map__legend-value">';n+=t.formatNumber(r[0]);n+="<\/span>";n+='<span class="odswidget-map__legend-value">';n+=t.formatNumber(r[r.length-1]);n+="<\/span>"}return n+="<\/div>",o.innerHTML=n,o}});d=new L.Legend({position:"bottomleft"});g=function(n){n.layer===s&&(f.addControl(d),f.off("layeradd",g))};f.on("layeradd",g);nt=function(n){n.layer===s&&(f.removeControl(d),f.off("layerremove",nt))};f.on("layerremove",nt)}for(it=function(n,t){t.on("mouseover",function(n){n.target.setStyle({weight:2})});t.on("mouseout",function(n){n.target.setStyle({weight:1})})},b=0;b<k.length;b++){var e,o,r=k[b],y=t.getClusterValue(r,u),rt=function(n,t){return L.circleMarker(t,tt)};null!==y&&(o=h(r))&&(e=new L.GeoJSON(o,{pointToLayer:rt,highlight:t.getColor(y,u,a,v,p.length),style:function(n){var t=angular.copy(tt);return t.fillColor=w(y),angular.isDefined(u.shapeOpacity)&&(t.fillOpacity=u.shapeOpacity),"LineString"===n.geometry.type||"MultiLineString"===n.geometry.type?(t.weight=5,t.color=w(y)):angular.isDefined(u.borderColor)&&(t.color=u.borderColor),t}}),"LineString"!==o.type&&"MultiLineString"!==o.type&&it(u,e,r,null),u.joinContext&&u.hoverField?r.x[0].fields[u.hoverField]?(e.bindLabel(r.x[0].fields[u.hoverField]),u.refineOnClick&&t.bindTooltip(f,e,u,o,null,r.geo_digest,r.x[0].fields[u.hoverField])):u.refineOnClick&&t.bindTooltip(f,e,u,o,null,r.geo_digest):(("COUNT"!==u.func&&t.isAnalyzeEnabledClustering(u)||a!==v)&&e.bindLabel(t.formatNumber(y)),u.refineOnClick&&t.bindTooltip(f,e,u,o,null,r.geo_digest)),s.addLayer(e))}l.resolve(s)}var h,c,o,l=r.defer(),s=new L.LayerGroup,a,v,y,p,w;return u.joinContext?(a=u.localKey,v=u.remoteKey,a&&v||console.error("An aggregation layer with a remote dataset requires a local-key and a remote-key"),y=u.joinContext.dataset.getFieldsForType("geo_shape"),y.length||console.error("You can only join an aggregation layer with a dataset that contains a geo_shape field."),p=y[0].name,h=function(n){return angular.isArray(n.x)&&n.x[0].fields?n.x[0].fields[p]:null},c=function(n){return n.results},w=p,u.hoverField&&(w+=","+u.hoverField),o=angular.extend({},u.context.parameters,{clusterprecision:f.getZoom(),"geofilter.bbox":ODS.GeoFilter.getBoundsAsBboxParameter(f.getBounds()),"join.agg1.fields":w,"join.agg1.remotedataset":u.joinContext.dataset.datasetid,"join.agg1.remotekey":v,"join.agg1.localkey":a,"agg.agg1.func":"MIN,MAX","agg.agg1.expr":"serie1","y.serie1.expr":u.expr,"y.serie1.func":u.func}),n.records.analyze(u.context,o,e.promise).success(b)):(h=function(n){return n.cluster},c=function(n){return n.clusters},o=angular.extend({},u.context.parameters,{clusterprecision:f.getZoom(),"geofilter.bbox":ODS.GeoFilter.getBoundsAsBboxParameter(f.getBounds())}),"COUNT"!==u.func&&t.isAnalyzeEnabledClustering(u)&&(o["y.serie1.expr"]=u.expr,o["y.serie1.func"]=u.func),n.records.geopolygon(u.context,o,e.promise).success(b)),l.promise}}}])}(),function(){"use strict";angular.module("ods-widgets").service("MapRenderingClustered",["ODSAPI","MapLayerHelper","SVGInliner","PictoHelper","$q",function(n,t,i,r,u){return{render:function(i,r,f,e){var h=u.defer(),o=new L.LayerGroup,s=angular.extend({},i.context.parameters,{clusterdistance:50,clusterprecision:r.getZoom(),"geofilter.bbox":ODS.GeoFilter.getBoundsAsBboxParameter(r.getBounds()),return_polygons:e});return"COUNT"!==i.func&&t.isAnalyzeEnabledClustering(i)&&(s["y.serie1.expr"]=i.expr,s["y.serie1.func"]=i.func),n.records.geo(i.context,s,f.promise).success(function(n){for(var u,s,e=n.clusters,f=0;f<e.length;f++)u=e[f],1===u.count&&"polygonforced"!==i.display?t.drawPoint(i,r,u.cluster_center,u,o):null!==t.getClusterValue(u,i)&&(s=new L.ClusterMarker(u.cluster_center,{geojson:u.cluster,value:t.getClusterValue(u,i),min:t.getClusterMin(n,i),max:t.getClusterMax(n,i),color:t.getClusterColor(u,i),opacity:i.pointOpacity,numberFormattingFunction:t.formatNumber,minSize:i.minSize,maxSize:i.maxSize,borderOpacity:i.borderOpacity,borderSize:i.borderSize,borderColor:i.borderColor,sizeFunction:i.sizeFunction}),t.bindZoomable(r,s,i),o.addLayer(s));h.resolve(o)}),h.promise}}}])}(),function(){"use strict";angular.module("ods-widgets").service("MapRenderingHeatmap",["ODSAPI","MapLayerHelper","$q",function(n,t,i){return{render:function(r,u,f){var s=i.defer(),o={},e;return angular.isObject(r.color)&&"gradient"===r.color.type&&r.color.steps&&(o.gradient=r.color.steps),e=angular.extend({},r.context.parameters,{clustermode:"heatmap",clusterdistance:15,clusterprecision:u.getZoom(),"geofilter.bbox":ODS.GeoFilter.getBoundsAsBboxParameter(u.getBounds())}),"COUNT"!==r.func&&t.isAnalyzeEnabledClustering(r)&&(e["y.serie1.expr"]=r.expr,e["y.serie1.func"]=r.func),n.records.geo(r.context,e,f.promise).success(function(n){var a=n.clusters,e,h,i,u,f,c,v,l;for(o.radius=Math.min(1/n.clusters.length*r.radius*1e3+20,50),e=t.getClusterMin(n,r),h=t.getClusterMax(n,r),r._bounds=[e,h],i=[],u=0;u<a.length;u++)f=a[u],c=t.getClusterValue(f,r),null!==c&&(v=ODS.CalculationUtils.getValueOnScale(c,e,h,r.sizeFunction),i.push([f.cluster_center[0],f.cluster_center[1],v]));l=null;i.length>0&&(l=L.heatLayer(i,o));s.resolve(l)}),s.promise}}}])}(),function(){"use strict";angular.module("ods-widgets").service("MapRenderingRaw",["ODSAPI","MapLayerHelper","SVGInliner","PictoHelper","$q",function(n,t,i,r,u){return{render:function(i,r,f){var h=u.defer(),s=new L.LayerGroup,c=angular.extend({},i.context.parameters,{rows:1e3,format:"json",geo_simplify:!0,geo_simplify_zoom:r.getZoom(),"geofilter.bbox":ODS.GeoFilter.getBoundsAsBboxParameter(r.getBounds())}),l=i.context.dataset.getFieldsForType("geo_shape"),e=l.length?l[0].name:null,o=[];return e?o.push(e):o.push(i.context.dataset.getFieldsForType("geo_point_2d")[0].name),i.color.field&&o.push(i.color.field),c.fields=o.join(","),n.records.download(i.context,c,f.promise).success(function(n){for(var f,u,o=0;o<n.length;o++){if(u=n[o],e){if(!u.fields[e])return;f=u.fields[e];"Point"===f.type&&angular.isDefined(u.geometry)&&(f=u.geometry)}else{if(!u.geometry)return;f=u.geometry}"Point"===f.type?t.drawPoint(i,r,[f.coordinates[1],f.coordinates[0]],u,s):t.drawShape(i,r,f,u,s)}h.resolve(s)}),h.promise}}}])}(),function(){"use strict";angular.module("ods-widgets").service("MapRenderingShapePreview",["ODSAPI","MapLayerHelper","$q",function(n,t,i){return{render:function(r,u,f){var o=i.defer(),s=angular.extend({},r.context.parameters,{rows:1e3,clusterprecision:u.getZoom(),"geofilter.bbox":ODS.GeoFilter.getBoundsAsBboxParameter(u.getBounds())}),e=new L.LayerGroup;return n.records.geopreview(r.context,s,f.promise).success(function(n){for(var i,f=0;f<n.length;f++)i=n[f],"Point"===i.geometry.type?t.drawPoint(r,u,[i.geometry.coordinates[1],i.geometry.coordinates[0]],null,e,i.geo_digest):t.drawShape(r,u,i.geometry,null,e,i.geo_digest);o.resolve(e)}),o.promise}}}])}(),function(){"use strict";var n=angular.module("ods-widgets");n.factory("odsTimerangeParser",function(){var n=/([\w-]+):\[(.*) TO (.*)\]/;return function(t){var i=n.exec(decodeURIComponent(t));return i?{field:i[1],from:i[2],to:i[3]}:{}}});n.factory("odsTimescaleParser",["translate",function(n){var t=/([\w-]+)>=#now\((.*)=-(\w)\)/,i={years:{1:n("Last 12 months")},weeks:{1:n("Last 7 days"),4:n("Last 4 weeks")},days:{1:n("Last 24 hours")}};return function(n){var r=t.exec(decodeURIComponent(n));return r?{field:r[1],scaleLabel:i[r[2]][r[3]]}:{}}}])}(),function(){"use strict";angular.module("ods-widgets").service("Timezones",[function(){return["UTC","Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmara","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montreal","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santa_Isabel","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Shiprock","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Choibalsan","Asia/Chongqing","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Gaza","Asia/Harbin","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Canada/Atlantic","Canada/Central","Canada/Eastern","Canada/Mountain","Canada/Newfoundland","Canada/Pacific","Europe/Amsterdam","Europe/Andorra","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis","US/Alaska","US/Arizona","US/Central","US/Eastern","US/Hawaii","US/Mountain","US/Pacific"]}])}(),function(){"use strict";var n=angular.module("ods-widgets"),t={},i=[];n.provider("ModuleLazyLoader",function(){var r={highcharts:{css:[],js:[["https://code.highcharts.com/5.0.2/highcharts.js"],["https://code.highcharts.com/5.0.2/modules/no-data-to-display.js"],["https://code.highcharts.com/5.0.2/highcharts-more.js"],["https://code.highcharts.com/5.0.2/modules/treemap.js"],["https://code.highcharts.com/5.0.2/modules/funnel.js"]]},leaflet:{css:["https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.3/leaflet.css","https://api.tiles.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v0.0.3/leaflet.fullscreen.css","https://api.tiles.mapbox.com/mapbox.js/plugins/leaflet-locatecontrol/v0.24.0/L.Control.Locate.css","libs/leaflet-control-geocoder/Control.Geocoder.css","libs/ods-vectormarker/vectormarker.css","libs/ods-clustermarker/clustermarker.css","libs/leaflet-label/leaflet.label.css","libs/leaflet-draw/leaflet.draw.css"],js:[["L@https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.3/leaflet.js"],["L.Control.FullScreen@https://api.tiles.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v0.0.3/Leaflet.fullscreen.min.js","L.Control.Locate@https://api.tiles.mapbox.com/mapbox.js/plugins/leaflet-locatecontrol/v0.24.0/L.Control.Locate.js","L.Label@libs/leaflet-label/leaflet.label.js","L.ODSMap@libs/ods-map/ods-map.js","L.ODSTileLayer@libs/ods-map/ods-tilelayer.js","L.Control.Geocoder@libs/leaflet-control-geocoder/Control.Geocoder.js","L.VectorMarker@libs/ods-vectormarker/vectormarker.js","L.ClusterMarker@libs/ods-clustermarker/clustermarker.js","L.Draw@libs/leaflet-draw/leaflet.draw.js","L.HeatLayer@libs/leaflet-heat/leaflet-heat.js"]]},rome:{css:["libs/rome/rome.css"],js:["libs/rome/rome.standalone.js"]},fullcalendar:{css:["libs/fullcalendar/fullcalendar.min.css"],js:["libs/fullcalendar/fullcalendar.min.js"],language_specific:{ar:{js:["libs/fullcalendar/lang/ar.js"]},ca:{js:["libs/fullcalendar/lang/ca.js"]},de:{js:["libs/fullcalendar/lang/de.js"]},es:{js:["libs/fullcalendar/lang/es.js"]},eu:{js:["libs/fullcalendar/lang/eu.js"]},fr:{js:["libs/fullcalendar/lang/fr.js"]},it:{js:["libs/fullcalendar/lang/it.js"]},nl:{js:["libs/fullcalendar/lang/nl.js"]},pt:{js:["libs/fullcalendar/lang/pt.js"]}}},qtip:{css:["libs/qtip/jquery.qtip.min.css"],js:["libs/qtip/jquery.qtip.min.js"]}},n,u;this.getConfig=function(){return r};n=function(t,i){var r=i.split("."),u;return t.hasOwnProperty(r[0])&&angular.isDefined(t[r[0]])?1===r.length?!0:(u=t[r[0]],r.shift(),n(u,r.join("."))):!1};u=function(t){return n(window,t)};this.$get=["$q","ODSWidgetsConfig",function(n,f){var o=function(r,u){var e,o;return angular.isUndefined(t[u])&&(e=n.defer(),t[u]=e,o="/"===u.substring(0,1)||"http://"===u.substring(0,7)||"https://"===u.substring(0,8)?u:f.basePath+u,LazyLoad[r](o,function(){e.resolve();i.push(u)}),t[u]=e),t[u]},e=function(r,f,s,h){var c,y=[],v,l,a;if(angular.isUndefined(h)&&(h=0),h>=f.length)s.resolve();else{for(c=f[h],angular.isArray(c)||(c=[c]),v=0;v<c.length;v++){if(a=c[v].split("@"),a.length>1){if(u(a[0]))continue;l=a[1]}else l=a[0];-1===i.indexOf(l)?y.push(o(r,l).promise):y.push(t[l].promise)}n.all(y).then(function(){e(r,f,s,h+1)})}return s.promise};return function(){for(var t,i=[],u=0;u<arguments.length;u++)t=r[arguments[u]],t.language_specific&&t.language_specific[f.language]&&angular.forEach(t.language_specific[f.language],function(n,i){t[i]=t[i]?t[i].concat(n):n}),t.css&&i.push(e("css",t.css,n.defer())),t.js&&i.push(e("js",t.js,n.defer()));return n.all(i)}}]});n.factory("DebugLogger",["$window",function(n){return{log:function(){("#debug"==n.location.hash||n.location.hash.indexOf("debug=")>=0||$(document.body).hasClass("showDebug"))&&console.log.apply(console,arguments)}}}]);n.factory("odsNotificationService",function(){var n=[];return{registerForNotifications:function(t){n.push(t)},sendNotification:function(t){angular.isString(t)&&(t={title:"Error",type:"error",message:t});angular.forEach(n,function(n){n(t)})},markNotificationAsHandled:function(n){n&&(n.handled=!0)}}});n.provider("SVGInliner",function(){var n={},i='<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg id="dot-icon" width="19px" height="19px" viewBox="0 0 19 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">    <path d="M13,9.50004202 C13,11.4330618 11.4329777,13.000084 9.49995798,13.000084 C7.56693813,13.000084 5.99991595,11.4330618 5.99991595,9.50004202 C5.99991595,7.56702218 7.56693813,6 9.49995798,6 C11.4329777,6 13,7.56702218 13,9.50004202 L13,9.50004202 Z" id="path8568" fill="#000000"><\/path>    <rect style="opacity: 0" x="0" y="0" width="19" height="19"><\/rect><\/svg>',t=function(n,t,i){var r=angular.element(t);i&&(r.css("fill",i),r.find("path, polygon, circle, rect, text, ellipse").css("fill",i));n.append(r)};this.$get=["$http","$q",function(r,u){var f=function(f,e,o){var h,s,c;return o&&(h=u.defer()),s=angular.element('<div class="ods-svginliner__svg-container"><\/div>'),f?-1===f.indexOf(".svg")?(s.append(angular.element('<img src="'+f+'"/>')),o&&h.resolve(s)):n[f]?n[f].code?(t(s,n[f].code,e),o&&h.resolve(s)):n[f].promise.success(function(n){t(s,n,e);o&&h.resolve(s)}).error(function(){t(s,i,e);o&&h.resolve(s)}):(c=r.get(f),n[f]={promise:c},c.success(function(i){n[f].code=i;t(s,i,e);o&&h.resolve(s)}).error(function(r,u){console.log("WARNING: Unable to fetch SVG image",f,"HTTP status:",u);n[f].code=i;t(s,i,e);o&&h.resolve(s)})):(t(s,i,e),o&&h.resolve(s)),o?h.promise:s};return{getElement:function(n,t){return f(n,t)},getPromise:function(n,t){return f(n,t,!0)}}}]});n.service("PictoHelper",function(){var n={"ban-circle":"ban","bar-chart":"bar-chart-o",beaker:"flask",bell:"bell-o","bell-alt":"bell","bitbucket-sign":"bitbucket-square","bookmark-empty":"bookmark-o",building:"building-o (4.0.2)","calendar-empty":"calendar-o","check-empty":"square-o","check-minus":"minus-square-o","check-sign":"check-square",check:"check-square-o","chevron-sign-down":"chevron-down","chevron-sign-left":"chevron-left","chevron-sign-right":"chevron-right","chevron-sign-up":"chevron-up","circle-arrow-down":"arrow-circle-down","circle-arrow-left":"arrow-circle-left","circle-arrow-right":"arrow-circle-right","circle-arrow-up":"arrow-circle-up","circle-blank":"circle-o",cny:"rub","collapse-alt":"minus-square-o","collapse-top":"caret-square-o-up",collapse:"caret-square-o-down","comment-alt":"comment-o","comments-alt":"comments-o",copy:"files-o",cut:"scissors",dashboard:"tachometer","double-angle-down":"angle-double-down","double-angle-left":"angle-double-left","double-angle-right":"angle-double-right","double-angle-up":"angle-double-up",download:"arrow-circle-o-down","download-alt":"download","edit-sign":"pencil-square",edit:"pencil-square-o","ellipsis-horizontal":"ellipsis-h (4.0.2)","ellipsis-vertical":"ellipsis-v (4.0.2)","envelope-alt":"envelope-o",euro:"eur","exclamation-sign":"exclamation-circle","expand-alt":"plus-square-o (4.0.2)",expand:"caret-square-o-right","external-link-sign":"external-link-square","eye-close":"eye-slash","eye-open":"eye","facebook-sign":"facebook-square","facetime-video":"video-camera","file-alt":"file-o","file-text-alt":"file-text-o","flag-alt":"flag-o","folder-close-alt":"folder-o","folder-close":"folder","folder-open-alt":"folder-open-o",food:"cutlery",frown:"frown-o",fullscreen:"arrows-alt (4.0.2)","github-sign":"github-square","google-plus-sign":"google-plus-square",group:"users (4.0.2)","h-sign":"h-square","hand-down":"hand-o-down","hand-left":"hand-o-left","hand-right":"hand-o-right","hand-up":"hand-o-up",hdd:"hdd-o (4.0.1)","heart-empty":"heart-o",hospital:"hospital-o (4.0.2)","indent-left":"outdent","indent-right":"indent","info-sign":"info-circle",keyboard:"keyboard-o",legal:"gavel",lemon:"lemon-o",lightbulb:"lightbulb-o","linkedin-sign":"linkedin-square",meh:"meh-o","microphone-off":"microphone-slash","minus-sign-alt":"minus-square","minus-sign":"minus-circle","mobile-phone":"mobile",moon:"moon-o",move:"arrows (4.0.2)",off:"power-off","ok-circle":"check-circle-o","ok-sign":"check-circle",ok:"check","paper-clip":"paperclip",paste:"clipboard","phone-sign":"phone-square",picture:"picture-o","pinterest-sign":"pinterest-square","play-circle":"play-circle-o","play-sign":"play-circle","plus-sign-alt":"plus-square","plus-sign":"plus-circle",pushpin:"thumb-tack","question-sign":"question-circle","remove-circle":"times-circle-o","remove-sign":"times-circle",remove:"times",reorder:"bars (4.0.2)","resize-full":"expand (4.0.2)","resize-horizontal":"arrows-h (4.0.2)","resize-small":"compress (4.0.2)","resize-vertical":"arrows-v (4.0.2)","rss-sign":"rss-square",save:"floppy-o",screenshot:"crosshairs","share-alt":"share","share-sign":"share-square",share:"share-square-o","sign-blank":"square",signin:"sign-in",signout:"sign-out",smile:"smile-o","sort-by-alphabet-alt":"sort-alpha-desc","sort-by-alphabet":"sort-alpha-asc","sort-by-attributes-alt":"sort-amount-desc","sort-by-attributes":"sort-amount-asc","sort-by-order-alt":"sort-numeric-desc","sort-by-order":"sort-numeric-asc","sort-down":"sort-desc","sort-up":"sort-asc",stackexchange:"stack-overflow","star-empty":"star-o","star-half-empty":"star-half-o",sun:"sun-o","thumbs-down-alt":"thumbs-o-down","thumbs-up-alt":"thumbs-o-up",time:"clock-o",trash:"trash-o","tumblr-sign":"tumblr-square","twitter-sign":"twitter-square",unlink:"chain-broken",upload:"arrow-circle-o-up","upload-alt":"upload","warning-sign":"exclamation-triangle","xing-sign":"xing-square","youtube-sign":"youtube-square","zoom-in":"search-plus","zoom-out":"search-minus"};return{mapPictoToURL:function(t,i){var r,u;return t?(r=i&&i.domainUrl||"",t.startsWith("icon-")?(u=t.replace("icon-",""),n[u]&&(u=n[u]),r+="/static/pictos/img/set-v1/fa/"+u+".svg"):t.startsWith("pdpicto-")||t.startsWith("odspicto-")?(t=t.replace("pdpicto-","pdpicto/").replace("odspicto-","odspicto/"),r+="/static/pictos/img/set-v1/"+t+".svg"):t.startsWith("ods-")?(t=t.replace("ods-",""),r+="/static/pictos/img/set-v3/pictos/"+t+".svg"):r+="/static/pictos/img/set-v2/"+t+".svg",r):null}}});n.factory("URLSynchronizer",["$location","$document",function(n,t){var r=!1,u=[],i;return t.bind("webkitfullscreenchange mozfullscreenchange ofullscreenchange msfullscreenchange khtmlfullscreenchange",function(){if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement)r=!0;else{r=!1;for(var n=0;n<u.length;n++)u[n]()}}),i=[],{addSynchronizedValue:function(t,f,e,o){var h,s,c,l;return i.push(f),e&&i.push(e),h=n.search()[e||f],t.$eval(f+"=newObj",{newObj:h}),s=function(){var i=t.$eval(f);o&&n.replace();n.search(e||f,i)},c=t.$watch(f,function(){r||s()},!0),u.push(s),l=t.$watch(function(){return n.search()[e||f]},function(n){n&&t.$eval(f+"=newObj",{newObj:n})},!0),function(){c();l()}},addJSONSynchronizedObject:function(t,f,e){var o,s,h;return i.push(e||f),o=n.search()[e||f],o&&("{"===o[0]?t.$eval(f+"=newObj",{newObj:JSON.parse(o)}):t.$eval(f+"=newObj",{newObj:JSON.parse(b64_to_utf8(o))})),h=function(){var i=t.$eval(f);void 0===i&&(i="");s=utf8_to_b64(angular.toJson(i));n.search(e||f,s)},u.push(h),t.$watch(function(){return[t.$eval(f),n.search()[e||f]]},function(n){void 0===n[0]&&(n[0]="");s===utf8_to_b64(angular.toJson(n[0]))||r?s!==n[1]&&n[1]&&t.$eval(function(t){t[f]=JSON.parse(b64_to_utf8(n[1]))}):h()},!0)},addSynchronizedObject:function(t,f,e){var o,s,h,c;return e=e||[],o=function(){var r=angular.copy(n.search()),u;(angular.forEach(r,function(n,t){i.indexOf(t)>=0&&delete r[t]}),e.length>0)&&(u=t.$eval(f),angular.forEach(e,function(n){angular.isDefined(u[n])&&(r[n]=u[n])}));t.$eval(f+"=newVal",{newVal:r})},s=function(){var r=angular.copy(t.$eval(f));angular.forEach(e,function(n){angular.isDefined(r[n])&&delete r[n]});angular.forEach(n.search(),function(n,t){(i.indexOf(t)>=0||e.indexOf(t)>=0)&&(r[t]=n)});n.search(r)},o(),h=t.$watch(f,function(){r||s()},!0),u.push(s),c=t.$watch(function(){return n.search()},o,!0),function(){h();c()}}}}])}(),function(){"use strict";angular.module("ods-widgets").service("ValueDisplay",["$filter","translate","ODSWidgetsConfig",function(n,t,i){var r={language:function(t){return n("isocode_to_language")(t)},visualization:function(n){switch(n){case"analyze":return'<i class="odswidget-facet__value-icon fa fa-bar-chart"><\/i> '+t("Analyze");case"calendar":return'<i class="odswidget-facet__value-icon fa fa-calendar"><\/i> '+t("Calendar");case"geo":return'<i class="odswidget-facet__value-icon fa fa-globe"><\/i> '+t("Map");case"image":return'<i class="odswidget-facet__value-icon fa fa-picture-o"><\/i> '+t("Image");case"api":return'<i class="odswidget-facet__value-icon fa fa-cogs"><\/i> '+t("API");case"custom_view":return'<i class="odswidget-facet__value-icon fa fa-'+i.defaultCustomViewConfig.icon+'"><\/i> '+i.defaultCustomViewConfig.title;default:return n}},date:function(n,t){return t.match(/^[0-9]{4}\/[0-9]{2}$/)?ODS.StringUtils.capitalize(moment.months()[parseInt(n,10)-1]):n}};return{format:function(n,t,i){return angular.isDefined(r)?r[t](n,i):(console.log('Warning (ValueDisplay): unknown value formatter "'+t+'"'),n)}}}])}(),function(){"use strict";var n=angular.module("ods-widgets");n.filter("nofollow",function(){return function(n){return angular.isString(n)?n.replace(/<a href="/g,'<a target="_blank" rel="nofollow" href="'):n}});n.filter("prettyText",["$filter",function(n){function t(n){return n.replace(/&/g,"&amp;").replace(r,function(n){return"&#"+n.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}var i=/[<>]+/,r=/([^\#-~| |!])/g;return function(r){return r&&angular.isString(r)?i.test(r)?t(r):n("linky")(r,"_blank"):r}}]);n.filter("safenewlines",function(){return function(n){return n?n.replace(/\n/g,"<br/>").replace(/&#10;/g,"<br/>"):n}});n.filter("imagify",["$sce",function(n){var t=/^(http(?:s?):\/\/[^;,]*(?:jpg|jpeg|png|gif)(?:\?[^,;]*)?)(?:$|;|,|&)/i;return function(i){if(angular.isString(i)){i=i.trim();var r=t.exec(i);if(null!==r)return n.trustAsHtml('<img class="odswidget odswidget-imagified" src="'+r[1]+'" />')}return i}}]);n.filter("videoify",["$sce",function(n){var t=/^https?:\/\/(?:(?:youtu.be\/)|(?:(?:www.)?youtube.com\/watch\?v=))([0-9a-z_-]+)$/i,i=/^https?:\/\/(?:(?:dai.ly)|(?:www.dailymotion.com))\/(?:video\/)?([0-9a-z]+)(?:[0-9a-z_-]*)$/i,r=/^https?:\/\/vimeo.com\/([0-9]+)$/i;return function(u){if(angular.isString(u)){var f=t.exec(u.trim());if(null!==f)return n.trustAsHtml('<iframe width="200" height="113" src="//www.youtube.com/embed/'+f[1]+'" frameborder="0" allowfullscreen><\/iframe>');if(null!==(f=i.exec(u.trim())))return n.trustAsHtml('<iframe frameborder="0" width="200" height="113" src="//www.dailymotion.com/embed/video/'+f[1]+'" allowfullscreen><\/iframe>');if(null!==(f=r.exec(u.trim())))return n.trustAsHtml('<iframe src="https://player.vimeo.com/video/'+f[1]+'" width="200" height="113" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe>')}return u}}]);n.filter("isDefined",function(){return function(n){return angular.isDefined(n)}});n.filter("keys",function(){return function(n){return Object.keys(n)}});n.filter("numKeys",function(){return function(n){return Object.keys(n).length}});n.filter("values",function(){return function(n){var t=[];return angular.forEach(n,function(n){t.push(n)}),t}});n.filter("isEmpty",function(){return function(n){return 0===Object.keys(n).length}});n.filter("displayImageValue",function(n){return function(t,i){if(!t)return t;var r="/explore/dataset/"+i+"/files/"+t.id+"/300/";return n.trustAsHtml('<img class="odswidget odswidget-imagified" src="'+r+'" />')}});n.filter("fieldsForVisualization",function(){var n={table:[],map:["geo_point_2d","geo_shape"],images:["file"],calendar:[]};return function(t,i){if(angular.isUndefined(t))return t;if(angular.isUndefined(n[i]))throw'Unknown visualization type "'+i+"'";return t.filter(function(t){return-1===n[i].indexOf(t.type)})}});n.filter("formatFieldValue",["$filter","$sce",function(n,t){var i=/^\/(explore\/(embed\/)?dataset|publish)\/([\w_@-]+)\//,r=function(n){if(n.annotations){var t=n.annotations.filter(function(n){return"timeserie_precision"===n.name});if(t.length>0)return t[0].args[0]}return null};return function(u,f){var e=u[f.name],c,h,s,o,l,a,v,y;if(null===e||void 0===e)return"";if("int"===f.type||"double"===f.type){if(s="",f.annotations)for(o=0;o<f.annotations.length;o++)"unit"===f.annotations[o].name&&(s=f.annotations[o].args[0]),"double"==f.type&&"decimals"===f.annotations[o].name&&(c=parseInt(f.annotations[o].args[0],10));return h=angular.isDefined(c)?n("number")(e,c):n("number")(e),s&&(h="$"===s?s+h:h+" "+s),h}return"geo_point_2d"===f.type?e[0]+", "+e[1]:"geo_shape"===f.type?n("limitTo")(angular.toJson(e),200):"date"===f.type?(l=r(f),"year"===l)?e:"month"===l?(a=moment(e,"YYYY-MM"),n("capitalize")(n("moment")(a,"MMMM YYYY"))):n("moment")(e,"LL"):"datetime"===f.type?(19===e.length&&(e+="Z"),n("moment")(e,"LLL")):"file"===f.type?angular.isObject(e)?(v=i.exec(decodeURIComponent(window.location.pathname))[3],y="/explore/dataset/"+v+"/files/"+e.id+"/download/",t.trustAsHtml('<a target="_self" href="'+y+'">'+(e.filename||u.filename)+"<\/a>")):""+e:n("limitTo")(""+e,1e3)}}]);n.filter("capitalize",[function(){return function(n){return ODS.StringUtils.capitalize(n)}}]);n.filter("truncate",function(){return function(n,t){return n&&angular.isString(n)?(t||(t=200),n.substring(0,t)):n}});n.filter("fieldsFilter",function(){return function(n,t){if(!n)return n;if(angular.isArray(t)&&t.length){var i=[];return angular.forEach(t,function(t){var r=$.grep(n,function(n){return n.name===t})[0];angular.isDefined(r)&&i.push(r)}),i}return n}});n.filter("moment",[function(){return function(n,t){if(n)return moment(n).format(t)}}]);n.filter("momentadd",[function(){return function(n,t,i){if(n)return moment(n).add(t,parseInt(i,10)).toISOString().replace(".000Z","Z")}}]);n.filter("timesince",[function(){return function(n){if(n)return moment(n).fromNow()}}]);n.filter("momentdiff",function(){return function(n,t,i){return moment(n).diff(t,i)}});n.filter("themeSlug",["$filter",function(n){return function(t){return!t||angular.isArray(t)&&0===t.length?t:(angular.isArray(t)&&(t=t[0]),n("slugify")(n("normalize")(t)))}}]);n.filter("slugify",function(){return function(n){return n?ODS.StringUtils.slugify(n):n}});n.filter("normalize",[function(){return function(n){return ODS.StringUtils.normalize(n)}}]);n.filter("shortSummary",[function(){return function(n,t){var i,r,f,u;return(t=t||400,!n)?"":(i="",r=angular.element("<div>"+n+"<\/div>"),0===r.children().length?i=n.indexOf("\n")>-1?n.substring(0,n.indexOf("\n")):n:(f=r.contents()[0],3==f.nodeType?i=f.textContent:r.find("p").length>0?(u=r.find("p")[0],i=angular.isDefined(u.textContent)?u.textContent:u.innerText):i=r.text()),i.length>t&&(i=i.substring(0,t-3)+"…"),i)}}]);n.filter("imageUrl",function(){return function(n,t){if(!n||angular.equals(n,{})||(t||console.log("ERROR : This filter requires a context as second parameter."),!t.dataset))return null;angular.isObject(n)||console.log("ERROR : This field is not an file field.");var i=t.domainUrl;return i+("/api/datasets/1.0/"+t.dataset.datasetid+"/files/"+n.id+"/")}});n.filter("thumbnailUrl",["imageUrlFilter",function(n){return function(t,i){var r=n(t,i);return r?r+"300/":null}}]);n.filter("firstValue",function(){return function(n){return angular.isArray(n)?n.length>0?n[0]:null:n}});n.filter("split",function(){return function(n,t){return n?(t||(t=";"),n.split(t)):n}});n.filter("join",function(){return function(n,t){return n?(t||(t=", "),angular.isArray(n)?n.join(t):n):n}});n.filter("stringify",function(){return function(n){return angular.isObject(n)?JSON.stringify(n):n}});n.filter("themeColor",["ODSWidgetsConfig",function(n){return function(t){return t&&n.themes[t]?n.themes[t].color:""}}]);n.filter("isBefore",function(){return function(n,t){return moment(n).isBefore(t)}});n.filter("isAfter",function(){return function(n,t){return moment(n).isAfter(t)}});n.filter("propagateAppendedURLParameters",["ODSWidgetsConfig",function(n){return function(t){return t?t.startsWith("http://")||t.startsWith("https://")?t:n.appendedURLQuerystring?(t+=t.indexOf("?")>-1?"&":"?",t+=n.appendedURLQuerystring):t:t}}]);n.filter("toObject",function(){return function(n,t){return t?n.reduce(function(n,i){return n[i[t]]=i,n},{}):(console.log("ERROR : this filter requires a key as a second parameter."),null)}});n.filter("min",function(){return function(n,t){return Math.min(n,t)}});n.filter("max",function(){return function(n,t){return Math.max(n,t)}})}(),function(n){var t=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}],i={Context:{toggleRefine:function(n,t,i,r){var f="refine."+t,e="/",s,o,u;n.dataset&&(s=n.dataset.getField(t),o=n.dataset.getFieldAnnotation(s,"hierarchical"),void 0!==o&&(e=o.args[0]||e));angular.isDefined(n.parameters[f])?(u=angular.copy(n.parameters[f]),angular.isArray(u)||(u=[u]),u.indexOf(i)>-1?u.splice(u.indexOf(i),1):(angular.forEach(u,function(n,t){i.startsWith(n+e)?u.splice(t,1):n.startsWith(i+e)&&u.splice(t,1)}),angular.isUndefined(r)||!1===r?u.push(i):u=[i]),0===u.length?delete n.parameters[f]:n.parameters[f]=u):n.parameters[f]=i}},GeoFilter:{getBboxParameterAsBounds:function(n){var t=n.split(",");return[[t[0],t[1]],[t[2],t[3]]]},getBoundsAsBboxParameter:function(n){return angular.isArray(n)?[n[0][0],n[0][1],n[1][0],n[1][1]].join(","):[n.getSouthWest().lat,n.getSouthWest().lng,n.getNorthEast().lat,n.getNorthEast().lng].join(",")},getBoundsAsPolygonParameter:function(n){var t,f;t=angular.isArray(n)?new L.LatLngBounds(n):n;for(var r=[[t.getNorthWest().lat,t.getNorthWest().lng],[t.getNorthEast().lat,t.getNorthEast().lng],[t.getSouthEast().lat,t.getSouthEast().lng],[t.getSouthWest().lat,t.getSouthWest().lng]],u=[],i=0;i<r.length;i++)f=r[i],u.push(f.join(","));return"("+u.join("),(")+")"},getPolygonParameterAsBounds:function(n){for(var u,f,e,o,i,r,s=n.replace(/[()]/g,"").split(","),t=0;t<s.length;t+=2)i=parseFloat(s[t]),r=parseFloat(s[t+1]),(!u||u>i)&&(u=i),(!f||f>r)&&(f=r),(!e||e<i)&&(e=i),(!o||o<r)&&(o=r);return[[u,f],[e,o]]},getPolygonParameterAsGeoJSON:function(n){for(var u,f,r={type:"Polygon",coordinates:[[]]},i=n.replace(/[()]/g,"").split(","),t=0;t<i.length;t+=2)u=parseFloat(i[t]),f=parseFloat(i[t+1]),r.coordinates[0].push([f,u]);return r},getBboxParameterAsPolygonParameter:function(n){return this.getBoundsAsPolygonParameter(this.getBboxParameterAsBounds(n))},getGeoJSONPolygonAsPolygonParameter:function(n){var t,i=[],s,o;if("LineString"===n.type){t=n.coordinates;var r=null,u=null,f=null,e=null;angular.forEach(t,function(n){var t=n[0],i=n[1];r=null===r?t:Math.min(r,t);u=null===u?i:Math.min(u,i);f=null===f?t:Math.max(f,t);e=null===e?i:Math.max(e,i)});i.push(u+","+r);i.push(u+","+f);i.push(e+","+f);i.push(e+","+r)}else for(t=n.coordinates[0],"MultiPolygon"===n.type&&(t=t[0]),s=0;s<t.length;s++)o=angular.copy(t[s]),o.length>2&&o.splice(2,1),o.reverse(),i.push(o.join(","));return"("+i.join("),(")+")"},addGeoFilterFromSpatialObject:function(n,t){angular.isArray(t)?n["geofilter.distance"]=t[0]+","+t[1]:"Point"===t.type?n["geofilter.distance"]=t.coordinates[1]+","+t.coordinates[0]:n["geofilter.polygon"]=this.getGeoJSONPolygonAsPolygonParameter(t)}},StringUtils:{slugify:function(n){return n?n.toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/-+/g,"-"):n},normalize:function(n){if(!n)return n;for(var i=0;i<t.length;i++)n=n.replace(t[i].letters,t[i].base);return n},capitalize:function(n){return n.charAt(0).toUpperCase()+n.slice(1)},startsWith:function(n,t){return n&&0===n.indexOf(t)},escapeHTML:function(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")},getRandomUUID:function(n){return n=n||7,n=Math.min(n,36),Math.random().toString(36).substring(n)}},ArrayUtils:{transpose:function(n){return angular.isArray(n)?n.reduce(function(n,t){return n[t]=!0,n},{}):Object.keys(n).reduce(function(t,i){return n[i]&&t.push(i),t},[])},sortNumbers:function(n,t){return n-t}},URLUtils:{cleanupAPIParams:function(n){function t(t,i,r){i.startsWith(t+".")&&(n[t]?angular.isArray(n[t])?n[t].push(r):n[t]=[n[t],r]:n[t]=r,delete n[i])}return n=angular.copy(n),angular.forEach(n,function(n,i){angular.forEach(["q","rq"],function(r){t(r,i,n)})}),n},getAPIQueryString:function(n){var t=[];return n=this.cleanupAPIParams(n),angular.forEach(n,function(n,i){angular.isString(n)?t.push(i+"="+encodeURIComponent(n)):angular.forEach(n,function(n){t.push(i+"="+encodeURIComponent(n))})}),t.join("&")}},DatasetUtils:{isFieldSortable:function(n){var t,i;if(["int","double","date","datetime"].indexOf(n.type)>=0)return!0;if("text"===n.type&&n.annotations)for(t=0;t<n.annotations.length;t++)if(i=n.annotations[t],"sortable"===i.name)return!0;return!1}},Dataset:function(n){var t,i,u,f=function(n,t){var i=0;if(n.annotations)for(;i<n.annotations.length;i++)if(n.annotations[i].name===t)return n.annotations[i]},e=function(n,t){return void 0!==f(n,t)},r=function(n){var f,r;for(u={facets:[]},t=[],i=0,f=0;f<n.length;f++)r=n[f],e(r,"facet")&&(i++,u.facets.push(r)),t[r.type]?t[r.type]+=1:t[r.type]=1};return{datasetid:n.datasetid||"preview",has_records:n.has_records,data_visible:n.data_visible,metas:n.metas||{domain:"preview"},features:n.features,attachments:n.attachments,alternative_exports:n.alternative_exports,fields:n.fields,extra_metas:n.extra_metas,interop_metas:n.interop_metas,setFields:function(n){this.fields=n;r(this.fields)},getUniqueId:function(){return this.metas.domain+"."+this.datasetid},getTypes:function(){return void 0===t&&r(this.fields),t},hasFeature:function(t){return n.features.indexOf(t)>-1},hasFieldType:function(n){for(var t=0;t<this.fields.length;t++)if(this.fields[t].type==n)return!0;return!1},countFieldType:function(n){for(var i=0,t=0;t<this.fields.length;t++)this.fields[t].type==n&&i++;return i},countFieldTypes:function(n){for(var i=0,t=0;t<n.length;t++)i+=this.countFieldType(n[t]);return i},getFacetsCount:function(){return void 0===i&&r(this.fields),i},hasFacet:function(){return void 0===i&&r(this.fields),i>0},getFilterDescription:function(){return void 0===u&&r(this.fields),u},getFacets:function(){return this.getFilterDescription().facets},setMetas:function(n){this.metas=n},getField:function(n){for(var i,t=0;t<this.fields.length;t++)if(i=this.fields[t],i.name===n)return i;return null},getFieldLabel:function(n){var t=this.getField(n);return t?t.label:t},getFieldsForType:function(n){for(var r,i=[],t=0;t<this.fields.length;t++)r=this.fields[t],r.type===n&&i.push(r);return i},hasNumericField:function(){for(var t,n=0;n<this.fields.length;n++)if(t=this.fields[n],"int"===t.type||"double"===t.type)return!0;return!1},hasGeoField:function(){for(var t,n=0;n<this.fields.length;n++)if(t=this.fields[n],"geo_point_2d"===t.type||"geo_shape"===t.type)return!0;return!1},getExtraMeta:function(n,t){return this.extra_metas&&this.extra_metas[n]&&this.extra_metas[n][t]?this.extra_metas[n][t]:null},isFieldAnnotated:function(n,t){return e(n,t)},getFieldAnnotation:function(n,t){return f(n,t)}}},Record:{getImageUrl:function(n,t,i,r){return format_string("{domainUrl}/explore/dataset/{datasetId}/files/{imageId}/{size}/",{domainUrl:i||"",datasetId:n.datasetid,imageId:n.fields[t].id,size:r||"300"})}},CalculationUtils:{getValueOnScale:function(n,t,i,r){if(t===i)return 1;r=r||"linear";var u,f=i-t,e=n-t;return"linear"===r?u=e/f:"log"===r&&(u=Math.log(e)/Math.log(f))==-1/0&&(u=0),u}},DateFieldUtils:{datePatternBuilder:function(n){var t={highcharts:{Hh:"%Hh",MMM:"%M",YYYY:"%Y",MMMM:"%B",D:"%e",ddd:"%a"},moment:{Hh:"H[h]",MMM:"MMM",YYYY:"YYYY",MMMM:"MMMM",D:"D",ddd:"ddd"}}[n];return function(n){var i="";return angular.isObject(n)&&("year"in n||"month"in n||"day"in n||"hour"in n||"minute"in n||"weekday"in n)&&("year"in n?("day"in n&&(i+=" "+t.D),"month"in n&&(i+=" "+t.MMMM),i+=" "+t.YYYY,"hour"in n&&(i+="minute"in n?" "+t.Hh+t.MMM:" "+t.Hh)):("month"in n&&(i=t.MMMM),"day"in n&&(i="month"in n?t.D+" "+t.MMMM:t.D),"weekday"in n?(i=t.ddd,"hour"in n&&(i+=" "+t.Hh)):"hour"in n&&(i=t.Hh))),i}},getDateFromXObject:function(n,t){var r=t?t.getUTCFullYear():2e3,u=t?t.getUTCMonth():0,f=t?t.getUTCDate():1,e=t?t.getUTCHours():0,o=t?t.getUTCMinutes():0,i;if(angular.isObject(n)&&("year"in n||"month"in n||"day"in n||"hour"in n||"minute"in n||"weekday"in n||"yearday"in n))return i=new Date(Date.UTC(n.year||r,n.month-1||0,n.day||1,n.hour||0,n.minute||0)),i.setUTCFullYear(n.year||r),"month"in n||i.setUTCMonth(u),"day"in n||i.setUTCDate(f),"hour"in n||i.setUTCHours(e),"minute"in n||i.setUTCMinutes(o),"year"in n||("weekday"in n&&i.setUTCDate(i.getUTCDate()+7-i.getUTCDay()+n.weekday),"yearday"in n&&i.setUTCDate(0+n.yearday)),"day"in n?29!=n.day||2!=n.month||n.year||(i.setUTCDate(28),i.setUTCMonth(1)):"month"in n&&i.setUTCDate(16),i},getTimescaleProperties:function(n){var t={year:["year"],month:["year","month"],day:["year","month","day"],hour:["year","month","day","hour"],minute:["year","month","day","hour","minute"],"month month":["month"],"day day":["day"],"day weekday":["weekday"],"hour weekday":["weekday","hour"],"day month":["yearday"],"hour hour":["hour"]};return n in t?t[n]:null},getTimescaleX:function(n,t){var r=[],u=i.DateFieldUtils.getTimescaleProperties(t);return u?angular.forEach(u,function(t){r.push(n+"."+t)}):r.push(n),r},getTimescaleSort:function(n){return n.map(function(n){return"x."+n}).join(",")}}};void 0===n.ODS&&(n.ODS={});n.ODS=angular.extend(n.ODS,i)}(window),function(){"use strict";angular.module("ods-widgets").directive("odsAggregation",["ODSAPI",function(n){return{restrict:"A",scope:!0,controller:["$scope","$attrs",function(t,i){var r=t.$eval(i.odsAggregationContext),u=i.odsAggregationFunction||"COUNT",f=i.odsAggregationExpression,e=i.odsAggregation||"aggregation";r.wait().then(function(){t.$watch(r.name+".parameters",function(i){var o=angular.extend({},i,{"y.serie1.expr":f,"y.serie1.func":u});n.records.analyze(r,o).success(function(n){t[e]=n[0].serie1})},!0)})}]}}])}(),function(){"use strict";var t=function(n,t,i){try{return!!n.$eval(t,{y:i})}catch(n){console.warn("Error while compiling condition with expr",t)}return!1},n=angular.module("ods-widgets");n.directive("odsAnalysis",["ODSAPI",function(n){var t=function(n,t){var i,o=/([A-Z_-]*?)\((.*?)\)/g,s=/([A-Z_-]*?)\(([a-zA-Z0-9\._]+),\s?([0-9\.]+)\)/g,e=t||n,r,u,f;for(n.compiled_expr=""+n.expr,e.aggregates=[],r={};i=o.exec(n.expr);)u=s.exec(i[0]),(u&&4===u.length&&(i=u),i&&(3===i.length||4===i.length))&&(0===i[2].indexOf("serie")?(f="operators."+i[1].toLowerCase()+".apply(null, accumulation['"+i[2]+"']",4===i.length&&(f+=", "+i[3]),f+=")",n.compiled_expr=n.compiled_expr.replace(i[0],f),e.aggregates.push(i[2])):(r.func=i[1],r.expr=i[2],i[3]&&(r.subsets=i[3]),n.compiled_expr+=n.compiled_expr.replace(i[0],"y")));return r};return{restrict:"A",priority:1001,controller:["$scope","$attrs",function(i,r){i[r.odsAnalysisContext].wait().then(function(){i.$watch(r.odsAnalysisContext,function(u){var s=r.odsAnalysis||"results",f=angular.extend({},u.parameters,{maxpoints:r.odsAnalysisMax||0}),e={},o={},h=[];r.odsAnalysisSort&&(f.sort=r.odsAnalysisSort);angular.forEach(r,function(n,i){var r,u,f;i.startsWith("odsAnalysisSerie")?(r=i.replace("odsAnalysisSerie",""),u=!1,r.endsWith("Cumulative")&&r.replace("Cumulative","").length>0&&(r=r.replace("Cumulative",""),u=n),r=r.toLowerCase(),o[r]||(o[r]={}),u)?o[r].cumulative=u:(f={expr:n},angular.extend(o[r],t(f))):i.startsWith("odsAnalysisAggregation")?(r=i.replace("odsAnalysisAggregation",""),r=r.toLowerCase(),e[r]||(e[r]={}),e[r].expr=r,e[r].func=n):i.startsWith("odsAnalysisX")&&h.push(n)});h.length>0&&(f.x=h);angular.forEach(o,function(n,t){f["y."+t+".expr"]=n.expr;f["y."+t+".func"]=n.func;f["y."+t+".cumulative"]=n.cumulative||"false";"QUANTILES"===n.func&&(f["y."+t+".subsets"]=n.subsets||"50");e[t]&&(f["agg."+t+".expr"]=e[t].expr,f["agg."+t+".func"]=e[t].func)});n.records.analyze(u,f).success(function(n){i[s]={};i[s]=angular.isArray(n)?{results:n}:n})},!0)})}]}}]);n.directive("odsAnalysisSerie",[function(){return{restrict:"A",scope:!0,controller:["$scope","$attrs",function(n,t){n.condition="";n.field="";n.$watch(t.odsAnalysisSerieCondition,function(){t.odsAnalysisSerieCondition&&(n.condition=t.odsAnalysisSerieCondition)},!0);n.$watch(t.odsAnalysisSerieName,function(){t.odsAnalysisSerieName&&(n.name=t.odsAnalysisSerieName)},!0);n.$watch(t.odsAnalysisSerieSeparateOnX,function(){t.odsAnalysisSerieSeparateOnX&&(n.separateOnX=t.odsAnalysisSerieSeparateOnX)},!0);n.$watch(t.odsAnalysisSerieMode,function(){t.odsAnalysisSerieMode&&(n.mode=t.odsAnalysisSerieMode)},!0)}],link:function(n,i,r){n.$watch(r.odsAnalysisSerie,function(i){var r,u,c,f,o=i,e={},s,h;if(n.separateOnX&&(e={}),n.results={},o){for(u={},r=0;r<o.length;r++)c=o[r][n.name],f=n.separateOnX?o[r].x[n.separateOnX]:"global",t(n,n.condition,c)?(e[f]||(e[f]=[]),e[f].push(o[r])):e[f]&&((!u[f]||u[f].length<e[f].length)&&(u[f]=e[f]),e[f]=!1);if(angular.forEach(e,function(n,t){(!u[t]||u[t].length<n.length)&&(u[t]=n)}),"reduce"==n.mode&&n.separateOnX){for(s=Object.keys(u),h=[],r=0;r<s.length;r++)u[s[r]].length>h.length&&(h=u[s[r]]);angular.copy({global:h},n.results)}else angular.copy(u,n.results)}})}}}]);n.directive("odsSubaggregation",["ModuleLazyLoader",function(n){var t=function(n,t){var i,e=/([A-Z_-]*?)\((.*?)\)/g,o=/([A-Z_-]*?)\(([a-zA-Z0-9\._]+),\s?(.+)\)/g,s=t||n,r,u,f;for(n.compiled_expr=""+n.expr,s.aggregates=[],r={};i=e.exec(n.expr);)u=o.exec(i[0]),(u&&4===u.length&&(i=u),i&&(3===i.length||4===i.length))&&(r.func=i[1],r.expr=i[2],i[3]&&(r.param=i[3]),f="operators."+i[1].toLowerCase()+"(accumulation['"+i[2]+"']",4===i.length&&(f+=", "+i[3]),f+=")",r.compiled_expr=n.compiled_expr.replace(i[0],f),r.needed_aggregates=i[2]);return r},i=function(n,t,i,r){var u;try{u=n.$eval(t,{operators:ss,accumulation:function(n,t){var i={};return angular.forEach(t,function(t){i[t]=n[t]}),i}(i,r),console:console})}catch(n){console.warn("Error while compiling aggregation value with expr",t)}return u};return{restrict:"A",scope:!0,controller:["$scope","$attrs",function(n,i){n.aggregations={};var r=n.$watch(i.odsSubaggregation,function(u){if(u){var f={};angular.forEach(i,function(n,i){var r,u;i.startsWith("odsSubaggregationSerie")&&(r=i.replace("odsSubaggregationSerie",""),r=r.toLowerCase(),f[r]||(f[r]={}),u={expr:n},angular.extend(f[r],t(u)))});angular.copy(f,n.aggregations);r()}},!0)}],link:function(t,r,u){n("simple-statistics").then(function(){t.$watch(u.odsSubaggregation,function(n){var r,e,u={},f=n;if(t.results=[],f){for(e={},angular.forEach(t.aggregations,function(n){u[n.needed_aggregates]=[]}),r=0;r<f.length;r++)angular.forEach(u,function(n,t){void 0!==f[r][t]&&u[t].push(f[r][t])});angular.forEach(t.aggregations,function(n,r){e[r]=i(t,n.compiled_expr,u,[n.needed_aggregates])});t.results.push(e)}},!0)})}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsAnalyze",function(){return{restrict:"E",template:'<div class="records-analyze">    <div ng-if="fakeMultiChartContext.datasets" no-controls="noControls" advanced-chart-controls chart-context="chartContext" context="fakeMultiChartContext" urlsynchronize><\/div>    <div ng-if="fakeMultiChartContext.datasets" ods-highcharts-chart colors="colors" context="fakeMultiChartContext" parameters="chartContext.dataChart"><\/div><\/div>',scope:{context:"=",autoResize:"@",noControls:"=?"},replace:!0,controller:["$scope",function(n){n.noControls=!!n.noControls;n.fakeMultiChartContext={datasets:!1};n.chartContext={};n.context.wait().then(function(){n.fakeMultiChartContext.datasets={};n.fakeMultiChartContext.datasets[n.context.dataset.datasetid]=n.context})}]}})}(),function(){"use strict";var n=angular.module("ods-widgets"),t=["$timeout","$window",function(n,t){return{restrict:"A",require:["?odsAutoResize","?autoResize"],controller:function(){},link:function(i,r,u,f){var o,s=f[0]||f[1],e;"false"!==(u.odsAutoResize||u.autoResize)&&(e=function(){var n=Math.max(200,angular.element(t).height()-r.offset().top);r.height(n)},e(),$(window).on("resize",function(){n.cancel(o);o=n(function(){e();s.onResize&&s.onResize()},50)}))}}}];n.directive("odsAutoResize",t);n.directive("autoResize",t)}(),function(){"use strict";angular.module("ods-widgets").directive("odsBreezometer",function(){return{restrict:"E",replace:!0,template:'<div class="ods-widgets"><div class="breezometer_widget"><\/div><\/div>',scope:{key:"@",location:"@"},link:function(n,t,i){function f(n){LazyLoad.js("https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places&weather",n)}function e(n){LazyLoad.css("https://static.breezometer.com/widget/css/breezometer.plugin.min.css");LazyLoad.js("https://static.breezometer.com/widget/breezometer.plugin.min.js",n)}function r(){angular.isDefined($(document).breezometer)&&$(t).find(".breezometer_widget").breezometer({lang:"en",key:i.key,vertical:!1,location:i.location})}function u(){$.breezometer?r():e(r)}window.google&&window.google.maps?u():f(u)}}})}(),function(){"use strict";var n=angular.module("ods-widgets");n.directive("odsCalendar",["ODSAPI","ModuleLazyLoader","ODSWidgetsConfig","$compile","URLSynchronizer",function(n,t,i,r,u){return{restrict:"E",scope:{context:"=",startField:"@?",endField:"@?",titleField:"@?",tooltipFields:"@?",eventColor:"@?",calendarView:"@?",availableCalendarViews:"@?",syncToUrl:"@"},require:"?refineOnClick",replace:!0,template:'<div class="odswidget-calendar">    <div class="odswidget-calendar__fullcalendar"><\/div>    <div class="odswidget-calendar__tooltip"><\/div>    <div class="odswidget-calendar__loading-backdrop">        <ods-spinner class="odswidget-calendar__loading-wheel"><\/ods-spinner>    <\/div><\/div>',controller:function(n){"false"!==n.syncToUrl&&u.addSynchronizedValue(n,"calendarView","calendarview")},link:function(u,f,e,o){var h=function(){var n=u.fullcalendar.fullCalendar("getView");n.name!=u.calendarView&&(u.calendarView=n.name)},c=function(){var n={},t;(u.context.dataset&&u.context.dataset.extra_metas&&u.context.dataset.extra_metas.visualization&&(n=u.context.dataset.extra_metas.visualization),angular.isDefined(u.startField)||(u.startField=n.calendar_event_start),angular.isDefined(u.endField)||(u.endField=n.calendar_event_end),angular.isDefined(u.titleField)||(u.titleField=n.calendar_event_title),angular.isDefined(u.eventColor)||(u.eventColor=n.calendar_event_color?n.calendar_event_color:"#C32D1C"),u.availableCalendarViews=angular.isDefined(u.availableCalendarViews)?u.availableCalendarViews.split(/\s*,\s*/):n.calendar_available_views?n.calendar_available_views.split(/\s*,\s*/):["month","agendaWeek","agendaDay"],angular.isDefined(u.calendarView)?-1===u.availableCalendarViews.indexOf(u.calendarView)&&(u.calendarView=u.availableCalendarViews[0]):u.calendarView=n.calendar_default_view&&u.availableCalendarViews.indexOf(n.calendar_default_view)>-1?n.calendar_default_view:u.availableCalendarViews[0],angular.isDefined(u.tooltipFields))?(t=[],angular.forEach(u.tooltipFields.split(","),function(n){t.push(n.trim())}),u.tooltipFields=t):u.tooltipFields=n.calendar_tooltip_fields?n.calendar_tooltip_fields:[];u.tooltip=$(f).children(".odswidget-calendar__tooltip").first().qtip({content:{text:"",button:!0},position:{my:"bottom center",at:"top center",target:"mouse",viewport:$(".odswidget-calendar__fullcalendar"),adjust:{mouse:!1,scroll:!1}},show:!1,hide:!1,style:{classes:"odswidget-calendar__tooltip odswidget-calendar__tooltip--increase-precedence"}}).qtip("api");$(document).on("click",function(n){$(n.target).parents(".fc-event").length||$(n.target).parents(".odswidget-calendar__tooltip").length||s()});u.fullcalendar=$(f).children(".odswidget-calendar__fullcalendar").first();u.fullcalendar.fullCalendar({lazyFetching:!1,header:{left:"prevYear,prev,next,nextYear, today",center:"title",right:u.availableCalendarViews.join(",")},lang:i.language,loading:a,editable:!0,eventLimit:!0,events:v,eventDataTransform:y,eventColor:u.eventColor,defaultView:u.calendarView,eventClick:function(n,t){o&&o.refineOnRecord(n.record);s();u.tooltip.set({"content.text":n.buildTooltipContent(),"position.target":[t.pageX,t.pageY]}).reposition(t).show(t)}})},s=function(){$(".odswidget-calendar__tooltip").hide()},l=function(){u.fullcalendar.fullCalendar("refetchEvents")},a=function(n){n?$(".odswidget-calendar__loading-backdrop").show():$(".odswidget-calendar__loading-backdrop").hide()},v=function(t,i,r,f){h();n.records.search(u.context,w(t,i)).success(function(n){f(n.records)})},y=function(n){var t;return t="date"===u.context.dataset.getField(u.endField).type?moment(n.fields[u.endField]).add(1,"day").format("YYYY-MM-DD"):n.fields[u.endField],{title:n.fields[u.titleField],start:n.fields[u.startField],end:t,buildTooltipContent:p(n),editable:!1,record:n}},p=function(n){return function(){var t=u.$new(!0),i;return t.record=n,t.dataset=u.context.dataset,u.context.dataset.extra_metas.visualization.calendar_tooltip_html_enabled&&u.context.dataset.extra_metas.visualization.calendar_tooltip_html?i=r("<div>"+u.context.dataset.extra_metas.visualization.calendar_tooltip_html+"<\/div>")(t):(t.titleField=u.titleField,t.tooltipFields=u.tooltipFields,i=r("<ods-calendar-tooltip><\/ods-calendar-tooltip>")(t)),t.$apply(),i}},w=function(n,t){var i={dataset:u.context.dataset.datasetid,rows:1e3},r;return i=$.extend(i,u.context.parameters),r=[u.startField+"<"+t.format("YYYY-MM-DD"),u.endField+">="+n.format("YYYY-MM-DD")].join(" AND "),$.extend(i,{"q.calendar_bounds":r})};t("fullcalendar","qtip").then(function(){u.context.wait().then(function(){c();u.$watch("context.parameters",function(n,t){n!==t&&l()},!0)})})}}}]);n.directive("odsCalendarTooltip",function(){return{restrict:"E",template:'<h2 class="odswidget-calendar__tooltip-title">{{ record.fields[titleField] }}<\/h2><dl class="odswidget-calendar__tooltip-fields">    <dt ng-repeat-start="field in dataset.fields|fieldsForVisualization:\'calendar\'|fieldsFilter:tooltipFields"        ng-show="record.fields[field.name]|isDefined"        class="odswidget-calendar__tooltip-field-name">        {{ field.label }}    <\/dt>    <dd ng-repeat-end ng-switch="field.type" ng-show="record.fields[field.name]|isDefined">        <debug data="record.fields[field.name]"><\/debug>        <span ng-switch-when="geo_point_2d">            <ods-geotooltip width="300" height="300" coords="record.fields[field.name]">                {{ record.fields|formatFieldValue:field }}            <\/ods-geotooltip>        <\/span>        <span ng-switch-when="geo_shape">            <ods-geotooltip width="300" height="300" geojson="record.fields[field.name]">                {{ record.fields|formatFieldValue:field }}            <\/ods-geotooltip>        <\/span>        <span ng-switch-when="file">            <div ng-if="!dataset.isFieldAnnotated(field, \'has_thumbnails\')"                 ng-bind-html="record.fields|formatFieldValue:field"><\/div>            <div ng-if="dataset.isFieldAnnotated(field, \'has_thumbnails\')"                 ng-bind-html="record.fields[field.name]|displayImageValue:dataset.datasetid"                 style="text-align: center;"><\/div>        <\/span>        <span ng-switch-default               title="{{record.fields|formatFieldValue:field}}"               ng-bind-html="record.fields|formatFieldValue:field|imagify|videoify|prettyText|nofollow">        <\/span>    <\/dd><\/dl>'}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsCatalogContext",["ODSAPI","URLSynchronizer","$interpolate",function(n,t,i){return{restrict:"AE",scope:!0,replace:!0,controller:["$scope","$attrs",function(r,u){for(var f,e,h,o,c=u.context.split(","),s=0;s<c.length;s++)f=c[s].trim(),e=u[f+"Domain"],e&&(e=i(e)(r)),h=r.$eval(u[f+"Parameters"])||{},u[f+"Source"]&&(h.source=i(u[f+"Source"])(r)),o=u[f+"Apikey"],o&&(o=i(o)(r)),r[f]={name:f,type:"catalog",domain:e,domainUrl:n.getDomainURL(e),apikey:o,parameters:h,toggleRefine:function(n,t,i){ODS.Context.toggleRefine(this,n,t,i)},getActiveFilters:function(){if(this.parameters){var t=Object.keys(this.parameters),n=this;return t.filter(function(t){return"q"==t&&n.parameters.q&&n.parameters.q.length>0||"q.timerange"==t||"geofilter.polygon"==t||"geofilter.distance"==t||0===t.indexOf("refine.")||"q.geographic_area"==t&&n.parameters["q.geographic_area"]&&n.parameters["q.geographic_area"].length>0})}return[]},clearActiveFilters:function(){for(var t=this.getActiveFilters(),n=0;n<t.length;n++)delete this.parameters[t[n]]}},r.$eval(u[f+"Urlsync"])&&(angular.equals(h,{})||console.log("WARNING : Context "+f+" : There are specific parameters defined, but URL sync is enabled, so the parameters will be ignored."),t.addSynchronizedObject(r,f+".parameters"))}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsClearAllFilters",function(){return{restrict:"E",replace:!0,scope:{context:"="},template:'<a class="odswidget-clear-all-filters" href="" ng-click="clearAll()">    <i class="fa fa-ban" aria-hidden="true"><\/i>     <span translate>Clear all<\/span><\/a>',controller:["$scope",function(n){n.clearAll=function(){var t=n.context;return angular.isArray(n.context)||(t=[n.context]),angular.forEach(t,function(n){angular.forEach(n.getActiveFilters(),function(t){delete n.parameters[t]})}),!1}}]}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsCrossTable",["ODSAPI","$q","$filter","$timeout",function(n,t,i,r){var e=function(n,t,r,e,s,h,c,l){return this.rowFields=n,this.colField=t,this.schema=e,this.dataset=s,this.series=r,this.rowNumbersIndexes=[],this.colNumbersIndex={},this.table=[],this.repeatRowHeaders=h,this.displayIntermediaryResults=c,this._insertedRowHeaders=[],this.labelBuilder=new o(this.dataset,this.schema,this.rowFields,this.colField),this.numberPrecision=l,this.setData=function(n,t,i){this.resetData();this.buildColNumbersIndexes(n,!1);this.buildRowNumbersIndexes(t,this.rowFields.length>1);this.buildTableStructure(t);this.buildTableColumnHeaders(n,!1);this.buildTableRowHeaders(t,this.rowFields.length>1);this.buildTableBody(i,!0)},this.resetData=function(){if(this.colNumbersIndex={},this.rowNumbersIndexes=[],this.displayIntermediaryResults)for(var t=0;t<this.rowFields.length;t++)this.rowNumbersIndexes.push(new f(this.rowFields,t+1,this.labelBuilder));else this.rowNumbersIndexes.push(new f(this.rowFields,this.rowFields.length,this.labelBuilder));this._insertedRowHeaders=n.reduce(function(n,t){return n[t]=[],n},{});this.table=[]},this.buildColNumbersIndexes=function(n,t){for(var u,r,i=0;i<n.length;i++){for(u={},r=0;r<this.series.length;r++)u[this.series[r].name]=i*this.series.length+r;this.colNumbersIndex[this.labelBuilder.buildLabel(n[i],this.colField,t)]=u}},this.buildRowNumbersIndexes=function(n,t){for(var r,f,o=n[n.length-1],u=0,i=this.rowNumbersIndexes[0],e=0;e<o.length;e++)if(r=o[e],this.displayIntermediaryResults)for(f=0;f<this.rowFields.length;f++)i=this.rowNumbersIndexes[f],void 0===i.getRowNumber(r,t)&&(i.setRowNumber(r,u,t),u++);else void 0===i.getRowNumber(r,t)&&(i.setRowNumber(r,u,t),u++)},this.buildTableStructure=function(n){for(var i,r,u,t=0;t<Math.min(2,this.series.length);t++)this.table.push([]);if(r=this,u=Object.keys(this.colNumbersIndex).length*this.series.length+this.rowFields.length,this.displayIntermediaryResults)for(t=0;t<n.length;t++)i=n[t],angular.forEach(i,function(){r.table.push(new Array(u))});else i=n[0],angular.forEach(i,function(){r.table.push(new Array(u))})},this.buildTableColumnHeaders=function(n,t){var i,r=this,e=this.series.length,f;e>1?(i=[],angular.forEach(this.rowFields,function(){i.push(new u("","ods-cross-table__cell--header"))}),angular.forEach(n,function(n){i.push(new u(r.labelBuilder.buildLabel(n,r.colField,t),"ods-cross-table__cell--header",e))}),this.table[0]=i,i=[],angular.forEach(this.rowFields,function(n){i.push(new u(r.schema[n].label,"ods-cross-table__cell--header"))}),f=[],angular.forEach(this.series,function(n){f.push(new u(n.label||n.name,"ods-cross-table__cell--header"))}),angular.forEach(n,function(){i=i.concat(f)}),this.table[1]=i):(i=[],angular.forEach(this.rowFields,function(n){i.push(new u(r.schema[n].label,"ods-cross-table__cell--header"))}),angular.forEach(n,function(n){i.push(new u(r.labelBuilder.buildLabel(n,r.colField,t),"ods-cross-table__cell--header"))}),this.table[0]=i)},this.buildTableRowHeaders=function(n,t){var i=this;angular.forEach(n,function(n,r){angular.forEach(n,function(n){for(var e,o,s=i.getRowNumber(n,r,t)+Math.min(2,i.series.length),h=i.displayIntermediaryResults?r+1:i.rowFields.length,f=0;f<h;f++)e=i.rowFields[f],o=i.labelBuilder.buildLabel(n,e,t),(f===i.rowFields.length-1||i.repeatRowHeaders||-1===i._insertedRowHeaders[e].indexOf(o))&&(i.table[s][f]=new u(o,0,"ods-cross-table__cell--header"),i._insertedRowHeaders[e]=[],i._insertedRowHeaders[e].push(o))})})},this.buildTableBody=function(n,t){var r=this;angular.forEach(n,function(n,f){angular.forEach(n,function(n){angular.forEach(r.series,function(e){var o=r.getRowNumber(n,f,t)+Math.min(2,r.series.length),s=r.getColNumber(n,e.name,t)+r.rowFields.length;r.table[o][s]=new u(i("number")(n[e.name],r.numberPrecision),"ods-cross-table__cell--value")})})})},this.getColNumber=function(n,t,i){return this.colNumbersIndex[this.labelBuilder.buildLabel(n,this.colField,i)][t]},this.getRowNumber=function(n,t,i){return this.rowNumbersIndexes[t].getRowNumber(n,i)},this},o=function(n,t,i,r){return this.dataset=n,this.schema=t,this.rowFields=i,this.colField=r,this.formatXValue=function(n){if(angular.isObject(n)){var t=ODS.DateFieldUtils.datePatternBuilder("moment")(n);return moment(ODS.DateFieldUtils.getDateFromXObject(n)).format(t)}return n},this.buildLabel=function(n,t,i){return i?this.formatXValue(n.x[t]):this.formatXValue(n.x)},this},s=function(n){return this.name=n,this.label=void 0,this.func=void 0,this.expr=void 0,this.update=function(n,t){this[n]=t},this},u=function(n,t,i){return this.label=n,this.colspan=i||0,this.classes=t||"",this},f=function(n,t,i){return this.rowFields=n,this.depth=t,this.labelBuilder=i,this.rowNumbers={},this.getRowNumber=function(n,t){for(var u,i=this.rowNumbers,r=0;r<this.depth;r++)if(u=this.rowFields[r],void 0===(i=i[this.labelBuilder.buildLabel(n,u,t)]))return;return i},this.setRowNumber=function(n,t,i){for(var r=this.depth-1;r>=0;r--){var f=this.rowFields[r],e=this.labelBuilder.buildLabel(n,f,i),u={};u[e]=t;t=u}angular.merge(this.rowNumbers,t)},this};return{restrict:"E",scope:{context:"=",column:"@",rows:"@",repeatRowHeaders:"=",displayIntermediaryResults:"=",numberPrecision:"="},template:'<div class="ods-cross-table">    <ods-spinner with-backdrop ng-show="loading"><\/ods-spinner>    <div class="ods-cross-table__frozen-header-wrapper">        <table class="ods-cross-table__frozen-header">            <tr ng-repeat="row in table | limitTo:nbFrozenRows track by $index" class="ods-cross-table__row">                <td ng-repeat="cell in row | limitTo:nbFrozenCols track by $index"                     colspan="{{ cell.colspan }}"                     class="ods-cross-table__cell {{ cell.classes }}">                    <div class="ods-cross-table__cell-content" ng-bind="cell.label || \'&nbsp;\'"><\/div>                <\/td>            <\/tr>        <\/table>    <\/div>    <div class="ods-cross-table__frozen-rows-wrapper">        <table class="ods-cross-table__frozen-rows">            <tr ng-repeat="row in table | limitTo:nbFrozenRows track by $index" class="ods-cross-table__row">                <td ng-repeat="cell in row | limitTo:row.length:nbFrozenCols track by $index"                     colspan="{{ cell.colspan }}"                     class="ods-cross-table__cell {{ cell.classes }}">                    <div class="ods-cross-table__cell-content" ng-bind="cell.label || \'&nbsp;\'"><\/div>                <\/td>            <\/tr>        <\/table>    <\/div>    <div class="ods-cross-table__frozen-cols-wrapper">        <table class="ods-cross-table__frozen-cols">            <tr ng-repeat="row in table | limitTo:table.length:nbFrozenRows track by $index" class="ods-cross-table__row">                <td ng-repeat="cell in row | limitTo:nbFrozenCols track by $index"                     colspan="{{ cell.colspan }}"                     class="ods-cross-table__cell {{ cell.classes }}">                    <div class="ods-cross-table__cell-content" ng-bind="cell.label || \'&nbsp;\'"><\/div>                <\/td>            <\/tr>        <\/table>    <\/div>    <div class="ods-cross-table__body-wrapper">        <table class="ods-cross-table__body">            <tr ng-repeat="row in table | limitTo:table.length:nbFrozenRows track by $index" class="ods-cross-table__row">                <td ng-repeat="cell in row | limitTo:row.length:nbFrozenCols track by $index"                     colspan="{{ cell.colspan }}"                     class="ods-cross-table__cell {{ cell.classes }}">                    <div class="ods-cross-table__cell-content" ng-bind="cell.label || \'&nbsp;\'"><\/div>                <\/td>            <\/tr>        <\/table>    <\/div><\/div>',link:function(i,u,f){i.table=[];i.nbFrozenRows=0;i.nbFrozenCols=0;i.loading=!1;var o,k=i.rows.split(","),h=$(u),g=h.find(".ods-cross-table__frozen-header-wrapper"),d=h.find(".ods-cross-table__frozen-header"),v=h.find(".ods-cross-table__frozen-cols-wrapper"),l=h.find(".ods-cross-table__frozen-cols"),y=h.find(".ods-cross-table__frozen-rows-wrapper"),p=h.find(".ods-cross-table__frozen-rows"),c=h.find(".ods-cross-table__body-wrapper"),a=h.find(".ods-cross-table__body"),nt=function(){var n={};return angular.forEach(f,function(t,i){var u=/serie([0-9A-Z][0-9a-z]*)(Label|Func|Expr)/g.exec(i),r,f;u&&(r=u[1].toLowerCase(),f=n[r]||new s(r),f.update(u[2].toLowerCase(),t),n[r]=f)}),Object.keys(n).map(function(t){return n[t]})},tt=function(){var n={};return angular.forEach(i.context.dataset.fields,function(t){(k.indexOf(t.name)>-1||t.name==i.column)&&(n[t.name]=t)}),n},w=function(n){n=angular.isArray(n)?n:[n];var t=[];return angular.forEach(n,function(n){var r=i.context.dataset.getField(n),u;["date","datetime"].indexOf(r.type)>-1?(u=i.context.dataset.getFieldAnnotation(r,"timeserie_precision").args[0],t=t.concat(ODS.DateFieldUtils.getTimescaleX(n,u))):t.push(n)}),t},b=function(n){return angular.isArray(n)||(n=[n]),n.map(function(n){return"x."+n}).join(",")},it=function(){var u,f,h;i.loading=!0;var e=[],k=w(o.colField),it={x:k,"y.serie1.func":"COUNT",sort:b(k)};e.push(n.records.analyze(i.context,angular.extend({},i.context.parameters,it)));for(var nt=[],tt=[],s=i.displayIntermediaryResults?0:o.rowFields.length-1;s<o.rowFields.length;s++)h=o.rowFields.slice(0,s+1),f=w(h),u=angular.extend({},i.context.parameters,{x:f,"y.serie1.func":"COUNT",sort:b(f)}),nt.push(n.records.analyze(i.context,u)),f=w(h.concat(o.colField)),u=angular.extend({},i.context.parameters,{x:f,sort:b(f)}),angular.forEach(o.series,function(n){u["y."+n.name+".expr"]=n.expr;u["y."+n.name+".func"]=n.func}),tt.push(n.records.analyze(i.context,u));e=e.concat(nt).concat(tt);t.all(e).then(function(n){var t=n[0].data,u=n.slice(1,(n.length-1)/2+1).map(function(n){return n.data}),f=n.slice((n.length-1)/2+1,n.length).map(function(n){return n.data});o.setData(t,u,f);i.table=o.table;i.nbFrozenCols=o.rowFields.length;i.nbFrozenRows=Math.min(2,o.series.length);r(function(){var u=function(n,t){var i=Math.max(t.outerWidth(),n.outerWidth());t.css({width:i});n.find(".ods-cross-table__cell-content").css({width:i})},f=p.find("tr:last-child .ods-cross-table__cell-content"),n,t,r;a.find("tr:first-child td").each(function(n){u($(this),$(f[n]))});n=d.find("tr:last-child .ods-cross-table__cell-content");l.find("tr:first-child td").each(function(t){u($(this),$(n[t]))});n=d.find("td:first-child .ods-cross-table__cell-content");p.find("td:first-child").each(function(t){$(n[t]).css({height:$(this).height()})});t=v.outerWidth();r=y.outerHeight();g.css({top:0,left:0,width:t,height:r});y.css({top:0,left:t});v.css({top:r,left:0});c.css({top:r,left:t});c.on("scroll",function(){l.css({"margin-top":-$(this).scrollTop()});p.css({"margin-left":-$(this).scrollLeft()})});v.on("wheel",function(n){c.scrollTop(c.scrollTop()+n.originalEvent.deltaY);n.preventDefault()});y.on("wheel",function(n){c.scrollLeft(c.scrollLeft()+n.originalEvent.deltaX);n.preventDefault()});a.find("tr").hover(function(){l.find("tr:nth-child("+($(this).index()+1)+")").addClass("ods-cross-table__row--hover")},function(){l.find("tr:nth-child("+($(this).index()+1)+")").removeClass("ods-cross-table__row--hover")});l.find("tr").hover(function(){a.find("tr:nth-child("+($(this).index()+1)+")").addClass("ods-cross-table__row--hover")},function(){a.find("tr:nth-child("+($(this).index()+1)+")").removeClass("ods-cross-table__row--hover")});i.loading=!1})})};i.context.wait().then(function(){angular.isDefined(i.numberPrecision)||(i.numberPrecision=3);o=new e(k,i.column,nt(),tt(),i.context.dataset,!0===i.repeatRowHeaders,!0===i.displayIntermediaryResults,i.numberPrecision);i.$watch("context.parameters",it)})}}}])}(),function(){"use strict";var n=angular.module("ods-widgets"),t=function(n,t,i){var r=i.find(".dataset-item").first(),f=i.find(".card-container"),u=$(f).outerHeight();"bottom"==t.position?($(r).css("top",0),$(r).css("bottom",u)):($(r).css("top",u),$(r).css("bottom",0));n(function(n){$(r).html(n)})};n.directive("odsDatasetCard",function(){return{restrict:"E",scope:{context:"="},template:'<div class="odswidget odswidget-dataset-card"><div class="card-container" ng-class="{bottom: position == \'bottom\', expanded: expanded, expandable: isExpandable()}"><h2 class="dataset-title" ng-click="expanded = !expanded" ng-show="!expanded || (expanded && !context.dataset.metas.description)">{{context.dataset.metas.title}}<\/h2><div ng-click="expanded = !expanded" class="expand-control" title="Show/hide details" translate="title"><span translate>Details<\/span> <i class="fa fa-chevron-down" ng-show="!expanded" aria-hidden="true"><\/i><i class="fa fa-chevron-up" aria-hidden="true" ng-hide="!expanded"><\/i><\/div><div class="dataset-expanded" ng-click="expanded = !expanded""><h2 class="dataset-title" ng-show="expanded">{{context.dataset.metas.title}}<\/h2><p class="dataset-description" ng-if="expanded" ng-bind-html="safeHtml(context.dataset.metas.description)"><\/p><\/div><div class="dataset-infos"><span class="dataset-infos-text"><a ng-href="{{datasetUrl}}" target="_blank" ng-bind-html="websiteName"><\/a><span ng-show="context.dataset.metas.license"> - <span translate>License<\/span> {{context.dataset.metas.license}}<\/span><\/span><\/div><\/div><div class="dataset-item"><\/div><\/div>',replace:!0,transclude:!0,link:function(n,t,i){n.position=i.position||"top"},controller:["$scope","$element","ODSWidgetsConfig","$transclude","$sce","$timeout",function(n,i,r,u,f,e){n.renderContent=t;n.websiteName=r.websiteName;n.expanded=!1;n.safeHtml=function(n){return f.trustAsHtml(n)};n.isExpandable=function(){return!!(n.context&&n.context.dataset&&n.context.dataset.datasetid)&&!!n.context.dataset.metas.description};var o=n.$watch("context",function(t){t&&t.dataset&&(e(function(){n.renderContent(u,n,i)},0),n.expanded=!1,n.datasetUrl=n.context.domainUrl+"/explore/dataset/"+n.context.dataset.datasetid+"/",n.websiteName||(n.websiteName=n.context.domainUrl),o())},!0);n.renderContent(u,n,i)}]}});n.directive("odsMultidatasetsCard",["ODSWidgetsConfig",function(){return{restrict:"E",scope:{odsTitle:"=",datasets:"=",context:"="},template:'<div class="odswidget-multidatasets-card">  <div class="card-container multidatasets" ng-class="{bottom: (position == \'bottom\'), expanded: expanded, expandable: isExpandable()}">      <h2 ng-show="!expanded" ng-click="tryToggleExpand()">{{ odsTitle }}<\/h2>      <div ng-click="tryToggleExpand()" class="expand-control" ng-class="{expanded: expanded}" title="Show/hide details"><span translate>Details<\/span> <i class="fa fa-chevron-down" aria-hidden="true"><\/i><\/div>      <h3 class="datasets-counter" ng-click="tryToggleExpand()" ng-show="!expanded">          <span class="count-text" ng-hide="!datasetObjectKeys || datasetObjectKeys.length <= 1">               <span translate translate-n="datasetObjectKeys.length" translate-plural="{{ $count }} datasets">{{ $count }} dataset<\/span>          <\/span>      <\/h3>      <div class="datasets-expanded">          <h2 ng-show="expanded" ng-click="tryToggleExpand()">{{ odsTitle }}<\/h2>          <h3 class="datasets-counter" ng-click="tryToggleExpand()" ng-show="expanded">              <span class="count-text">                   <span ng-if="datasetObjectKeys.length == 0" translate>no dataset to display<\/span>                   <span ng-if="datasetObjectKeys.length > 0" translate translate-n="datasetObjectKeys.length" translate-plural="{{ $count }} datasets">{{ $count }} dataset<\/span>              <\/span>          <\/h3>          <ul class="dataset-list"              ng-show="(datasetObjectKeys && datasetObjectKeys.length === 1) || (isExpandable() && expanded)"              ng-class="{\'single-dataset\': datasetObjectKeys.length === 1}">              <li ng-repeat="(key, dataset) in datasets"> <a                  ng-href="{{context.domainUrl}}/explore/dataset/{{dataset.datasetid}}/"                  target="_blank">{{ dataset.metas.title }}<\/a>                  <span ng-show="dataset.metas.license">- <span translate>License<\/span> {{ dataset.metas.license }}<\/span><\/li>          <\/ul>      <\/div>      <div class="dataset-infos"><span class="dataset-infos-text"><a ng-href="/" target="_blank" ng-bind-html="websiteName"><\/a><\/span><\/div>  <\/div>  <!-- embedded content (chart, map etc.) -->  <div class="dataset-item" ng-transclude><\/div><\/div>',replace:!0,transclude:!0,link:function(n,t,i){n.position=i.position||"top"},controller:["$scope","$element","ODSWidgetsConfig","$transclude","$sce","$timeout",function(n,i,r,u,f,e){n.renderContent=t;n.datasetObjectKeys=[];n.websiteName=r.websiteName;n.safeHtml=function(n){return f.trustAsHtml(n)};n.isExpandable=function(){return!(!n.datasetObjectKeys.length||1===n.datasetObjectKeys.length)};n.tryToggleExpand=function(){n.isExpandable()&&(n.expanded=!n.expanded)};var o=n.$watch("datasets",function(t){if(t){var r=Object.keys(t);if(0===r.length)return;n.datasetObjectKeys=r;e(function(){n.renderContent(u,n,i)},0);n.expanded=!1;o()}},!0);e(function(){n.renderContent(u,n,i)},0)}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsDatasetContext",["ODSAPI","$q","$interpolate","URLSynchronizer","ContextHelper",function(n,t,i,r,u){var f=function(n,t,i,f,e,o,s,h,c,l){var a,v;angular.equals(o,{})?s?(v=i.$watch(s,function(n){n&&(h&&(n.parameters.source=h),i[f].parameters=n.parameters,v())}),a=null):a=angular.equals(o,{})?o:{}:(a=o,c&&console.log("WARNING : Context "+f+" : There are specific parameters defined, but URL sync is enabled, so the parameters will be ignored."));h&&a&&(a.source=h);i[f]=u.getDatasetContext(f,n,t,a,h,e,l);c&&r.addSynchronizedObject(i,f+".parameters",["basemap","location"])};return{restrict:"AE",scope:!0,replace:!0,controller:["$scope","$attrs",function(n,t){for(var r,h,c,l,o,a,v,s,y,p,e=t.context.split(","),u=0;u<e.length;u++)r=e[u].trim(),t[r+"Dataset"]||t[r+"DatasetSchema"]||console.log("ERROR : Context "+r+" : Missing dataset parameter"),t[r+"Dataset"]&&(h=i(t[r+"Dataset"])(n)),t[r+"Domain"]&&(c=i(t[r+"Domain"])(n)),t[r+"Apikey"]&&(l=i(t[r+"Apikey"])(n)),t[r+"Sort"]&&(o=i(t[r+"Sort"])(n)),t[r+"Source"]&&(a=i(t[r+"Source"])(n)),t[r+"DatasetSchema"]&&(v=angular.fromJson(t[r+"DatasetSchema"].replace(/\\{/g,"{").replace(/\\}/g,"}"))),s=n.$eval(t[r+"Parameters"])||{},y=t[r+"ParametersFromContext"],o&&(s.sort=o),p=n.$eval(t[r+"Urlsync"]),f(c,h,n,r,l,s,y,a,p,v)}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsDatetime",function(){return{restrict:"A",controller:["$scope","$attrs","$q",function(n,t){var i=t.odsDatetime||"datetime";n.refreshDatetime=function(){n[i]=moment().format()};n.refreshDatetime()}]}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsDisqus",["ODSWidgetsConfig","$location","$window",function(n,t,i){return{restrict:"E",replace:!0,scope:{shortname:"@",identifier:"@"},template:'<div id="disqus_thread" class="odswidget"><\/div>',link:function(r){i.disqus_shortname=r.shortname||n.disqusShortname;r.identifier&&(i.disqus_identifier=r.identifier);i.disqus_url=t.absUrl();i.disqus_config=function(){this.language=n.language};var u=document.createElement("script");u.type="text/javascript";u.async=!0;u.src="//"+i.disqus_shortname+".disqus.com/embed.js";(document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(u)}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsDomainStatistics",["ODSAPI",function(n){return{restrict:"AE",scope:!0,controller:["$scope","$attrs",function(t,i){var r=function(n,t,i){return i.name===t&&(n.stats[t]=i.facets.length,!0)},u=t.$watch(i.context,function(t){t.stats={dataset:0,keyword:0,publisher:0,theme:0};n.datasets.search(t,{facet:["keyword","publisher","theme"],rows:0}).success(function(n){if(t.stats.dataset=n.nhits,n.facet_groups)for(var i=0;i<n.facet_groups.length;i++)r(t,"keyword",n.facet_groups[i])||r(t,"publisher",n.facet_groups[i])||r(t,"theme",n.facet_groups[i])});u()},!0)}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsFacetResults",["ODSAPI",function(n){return{restrict:"A",scope:!0,priority:1001,controller:["$scope","$attrs",function(t,i){t.$watch(i.odsFacetResultsContext,function(r){var f,e=i.odsFacetResultsFacetName,s={},o,u;if(i.odsFacetResultsSort&&(s["facetsort."+e]=i.odsFacetResultsSort),o=angular.extend({},r.parameters,{rows:0,facet:e},s),u=i.odsFacetResults||"results","dataset"===r.type&&r.dataset)f=n.records.search(r,o);else{if("catalog"!==r.type)return;f=n.datasets.search(r,o)}f.success(function(n){if(n.facet_groups){var i=n.facet_groups.filter(function(n){return n.name===e});0===i.length&&(t[u]=[]);t[u]=i[0].facets}else t[u]=[]})},!0)}]}}])}(),function(){"use strict";var n=angular.module("ods-widgets");n.directive("odsFacets",["$compile","translate",function(n,t){var i=function(t,i,r){var f="",u;angular.forEach(r,function(n){f+='<ods-facet name="'+n.name+'" title="'+(n.title&&n.title.replace(/"/g,"&quot;")||n.name)+'" sort="'+(n.sort||"")+'" disjunctive="'+(n.disjunctive||"")+'" hide-if-single-category="'+(n.hideIfSingleCategory?"true":"false")+'" hide-category-if="'+(n.hideCategoryIf||"")+'"value-formatter="'+(n.valueFormatter||"")+'">'+(n.template||"")+"<\/ods-facet>"});u=angular.element(f);i.append(u);n(u)(t)};return{restrict:"E",replace:!0,scope:{context:"=",facetsConfig:"="},compile:function(n){var r=n.children().length;return function(n,u){var o,e,f;(e=function(){var t=n.$watch("context",function(){n.context&&("dataset"===n.context.type?n.context.wait().then(function(){n.init()}):n.init(),t())})},n.facetsConfig)?(i(n,u,n.facetsConfig),e()):0===r?o=n.$watch("context",function(){n.context&&(o(),"catalog"===n.context.type?(f=[{name:"modified",title:t("Modified"),valueFormatter:"date"},{name:"publisher",title:t("Publisher")},{name:"keyword",title:t("Keyword")},{name:"theme",title:t("Theme")}],i(n,u,f),n.init()):n.context.wait().then(function(){f=angular.copy(n.context.dataset.getFacets());angular.forEach(f,function(n){n.title=n.label;delete n.label;angular.forEach(n.annotations,function(t){"facetsort"===t.name&&t.args.length>0&&(n.sort=t.args[0]);"disjunctive"===t.name&&(n.disjunctive=!0)});"datetime"!=n.type&&"date"!=n.type||(n.valueFormatter="date")});i(n,u,f);n.init()}))},!0):e()}},controller:["$scope","ODSAPI",function(n,t){var i={};n.facets=[];n.init=function(){n.$watch(function(){var t=angular.copy(n.context.parameters);return t.sort&&delete t.sort,t.start&&delete t.start,t.tab&&delete t.tab,t.dataChart&&delete t.dataChart,"dataset"===n.context.type?[t,n.context.dataset]:t},function(){("catalog"===n.context.type||n.context.dataset)&&(angular.isDefined(n.context.parameters.start)&&delete n.context.parameters.start,n.refreshData())},!0)};n.refreshData=function(){var i=angular.extend({},n.context.parameters,{rows:0,facet:n.facets.map(function(n){return n.name})}),r;n.facets.map(function(n){n.sort&&n.sort.length&&"["!==n.sort[0]&&(i["facetsort."+n.name]=n.sort)});r="dataset"===n.context.type?t.records.search(n.context,i):t.datasets.search(n.context,i);r.success(function(t){n.context.nhits=t.nhits;var u,i,r;angular.forEach(n.facets,function(n){n.categories.splice(0,n.categories.length)});t.facet_groups&&angular.forEach(t.facet_groups,function(t){if(i=n.facets.filter(function(n){return n.name===t.name}),i.length>0){if(u=i[0].categories,r=[],i[0].sort&&i[0].sort.length&&"["===i[0].sort[0]){var f=n.$eval(i[0].sort);angular.forEach(f,function(n){for(var u,i=0;i<t.facets.length;i++)if(u=t.facets[i],u.path===n){r.push(u);t.facets.splice(i,1);break}});Array.prototype.push.apply(r,t.facets)}else r=t.facets;Array.prototype.push.apply(u,r)}})})};this.registerFacet=function(t,r,u,f){var e=[];return n.facets.push({name:t,categories:e,sort:r}),i[t]=[],u&&(u=angular.isArray(u)?u:[u],angular.forEach(u,function(r){var e=f[r.name+"FacetName"],u;i[t].push({context:r,facetName:e||t});u=function(n,i){angular.forEach(n.dataset.fields,function(r){angular.forEach(i.dataset.fields,function(u){r.name===t&&u.name===e&&r.type!=u.type&&console.warn("Error: mapping "+n.name+"'s \""+r.name+'" (type '+r.type+") on "+i.name+"'s \""+u.name+'" (type '+u.type+").")})})};"dataset"===r.type?r.wait().then(function(){u(n.context,r)}):u(n.context,r)})),e};this.setDisjunctive=function(t){n.context.parameters["disjunctive."+t]=!0};this.toggleRefinement=function(t,r){n.context.toggleRefine(t,r);angular.forEach(i[t],function(n){n.context.toggleRefine(n.facetName,r)})}}]}}]);n.directive("odsFacet",function(){return{restrict:"E",replace:!0,scope:{name:"@",title:"@",visibleItems:"@",hideIfSingleCategory:"@",hideCategoryIf:"@",sort:"@",disjunctive:"@",valueSearch:"@",valueFormatter:"@",refineAlso:"=?"},template:function(n){return n.data("facet-template",n.html().trim()),'<div ng-class="{\'odswidget\': true, \'odswidget-facet\': true, \'odswidget-facet--disjunctive\': isDisjunctive()}">    <h3 class="odswidget-facet__facet-title"         ng-if="title && categories.length && visible()">        {{ title }}    <\/h3>    <ods-facet-category-list ng-if="visible()"                              facet-name="{{ name }}"                              value-search="{{ valueSearch }}"                              hide-category-if="{{ hideCategoryIf }}"                              categories="categories"                              template="{{ customTemplate }}"                              value-formatter="{{valueFormatter}}"><\/ods-facet-category-list><\/div>'},require:"^odsFacets",link:function(n,t,i,r){angular.isUndefined(r)&&console.log("ERROR : odsFacet must be used within an odsFacets tag.");n.categories=r.registerFacet(n.name,n.sort,n.refineAlso,i);n.facetsCtrl=r;n.isDisjunctive()&&r.setDisjunctive(n.name)},controller:["$scope","$element",function(n,t){n.isDisjunctive=function(){return angular.isString(n.disjunctive)&&"true"===n.disjunctive.toLowerCase()};n.visibleItemsNumber=n.visibleItems||6;this.toggleRefinement=function(t){n.facetsCtrl.toggleRefinement(n.name,t)};this.getVisibleItemsNumber=function(){return n.visibleItemsNumber};n.visible=function(){return!(angular.isString(n.hideIfSingleCategory)&&"true"===n.hideIfSingleCategory.toLowerCase()&&1===n.categories.length&&"refined"!==n.categories[0].state)};n.customTemplate=t.data("facet-template")}]}});n.directive("odsFacetCategoryList",function(){return{restrict:"E",replace:!0,scope:{categories:"=",template:"@",facetName:"@",hideCategoryIf:"@",valueSearch:"@",valueFormatter:"@"},require:"^odsFacet",template:'<ul class="odswidget-facet__category-list">   <li class="odswidget-facet__value-search" ng-show="valueSearchEnabled">       <input class="odswidget-facet__value-search-input" ng-model="valueFilter">       <i ng-show="!!valueFilter" class="odswidget-facet__value-search-cancel fa fa-times" ng-click="valueFilter=\'\'"><\/i>   <\/li>   <li ng-repeat="category in categories|filter:searchValue(valueFilter)" class="odswidget-facet__category-container">       <ods-facet-category ng-if="!categoryIsHidden(category)" facet-name="{{ facetName }}" category="category" template="{{template}}" value-formatter="{{valueFormatter}}" ng-show="visible($index)"><\/ods-facet-category>   <\/li>   <li ng-if="!suggestMode && visibleItems < (filterInvisibleCategories(categories)|filter:searchValue(valueFilter)).length"        class="odswidget-facet__expansion-control">       <a ng-hide="expanded" href="#" ng-click="toggle($event)" class="odswidget-facet__expansion-control-link">           <i class="fa fa-angle-right" aria-hidden="true"><\/i>           <span translate>More<\/span>       <\/a>       <a ng-show="expanded" href="#" ng-click="toggle($event)" class="odswidget-facet__expansion-control-link">           <i class="fa fa-angle-right" aria-hidden="true"><\/i>           <span translate>Less<\/span>       <\/a>   <\/li><\/ul>',link:function(n,t,i,r){n.expanded=!1;n.visibleItems=r.getVisibleItemsNumber();n.visible=function(t){return n.expanded||t<n.visibleItems};n.toggle=function(t){t.preventDefault();n.expanded=!n.expanded};n.categoryIsHidden=function(t){if(n.suggestMode&&""===n.valueFilter)return!0;if(!n.hideCategoryIf)return!1;var i=n.$new(!1);return i.category=t,i.$eval(n.hideCategoryIf)};n.filterInvisibleCategories=function(t){return t.filter(function(t){return!n.categoryIsHidden(t)})}},controller:["$scope","$filter",function(n,t){n.valueFilter="";n.valueSearchEnabled=!1;n.suggestMode=!1;angular.isString(n.valueSearch)&&("true"===n.valueSearch.toLowerCase()?n.valueSearchEnabled=!0:"suggest"===n.valueSearch.toLowerCase()&&(n.valueSearchEnabled=!0,n.suggestMode=!0));n.searchValue=function(n){return n?(n=t("normalize")(n).toLowerCase(),function(i){return t("normalize")(i.name).toLowerCase().indexOf(n)>-1}):function(){return!0}};this.emptySearch=function(){n.valueFilter=""}}]}});n.directive("odsFacetCategory",["$compile",function(n){return{restrict:"E",replace:!0,require:["^odsFacet","^?odsFacetCategoryList"],scope:{category:"=",facetName:"@",template:"@",valueFormatter:"@"},template:'<div class="odswidget odswidget-facet-category">   <a class="odswidget-facet__category"       href="#"       ng-click="toggleRefinement($event, category.path)"       ng-class="{\'odswidget-facet__category--refined\': category.state === \'refined\'}"       title="{{ category.name }}">   <\/a><\/div>',link:function(t,i,r,u){var s=u[0],h=u[1],e,o,f;t.toggleRefinement=function(n,t){n.preventDefault();s.toggleRefinement(t);h.emptySearch()};e='<span class="odswidget-facet__category-count">{{ category.count|number }}<\/span> <span class="odswidget-facet__category-name" ng-bind-html="formatCategory(category.name, category.path)"><\/span>';o=t.template||e;(i.find("a").append(n(o)(t)),t.category.facets)&&(f=angular.element('<ods-facet-category-list categories="category.facets" template="{{template}}" value-formatter="{{valueFormatter}}"><\/ods-facet-category-list>'),i.find("a").after(f),n(f)(t))},controller:["$scope","ValueDisplay",function(n,t){n.formatCategory=function(i){return i=ODS.StringUtils.escapeHTML(i),n.valueFormatter?t.format(i,n.valueFormatter,n.category.path):i}}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsFilterSummary",["odsTimerangeParser","odsTimescaleParser",function(n,t){return{restrict:"E",replace:!0,template:'<ul class="odswidget odswidget-filter-summary">    <li class="odswidget-filter-summary__active-filter"         ng-repeat="refinement in refinements">        <a class="odswidget-filter-summary__active-filter-link"            ng-click="removeRefinement(refinement)">            <span class="odswidget-filter-summary__active-filter-label">{{ refinement.label }}<span ng-if="refinement.contextsLabel && !hideContextsLabels"> ({{ refinement.contextsLabel }})<\/span><\/span>            {{ refinement.displayValue || refinement.value }}        <\/a>    <\/li>    <li class="odswidget-filter-summary__clear-all" ng-show="clearAllButton && refinements.length > 0">        <ods-clear-all-filters context="context"><\/ods-clear-all-filters>    <\/li><\/ul>',scope:{context:"=",exclude:"@",clearAllButton:"=?",hideContextsLabels:"=?"},controller:["$scope","$attrs","translate",function(i,r,u){var o;Boolean(i.clearAllButton)!==i.clearAllButton&&(i.clearAllButton=!0);var e=i.exclude?i.exclude.split(","):[],f=function(n,t){return n&&n.parameters&&-1===e.indexOf(t)&&n.parameters[t]&&void 0!==n.parameters[t]},s=function(n,t){return"catalog"===n.type?("features"===t&&(t="view"),u(ODS.StringUtils.capitalize(t))):n.dataset.getFieldLabel(t)},h=function(n){for(var i,t=0;t<n.dataset.fields.length;t++)if(i=n.dataset.fields[t],"geo_point_2d"===i.type||"geo_shape"===i.type)return i.label;return""};i.removeRefinement=function(n){angular.forEach(n.contexts,function(t){var i,r;if(n.value){for(i=t.parameters[n.parameter],angular.isArray(i)||(i=[i]),r=0;r<i.length;r++)if(i[r]===n.value)return i.splice(r,1),void(0===i.length&&delete t.parameters[n.parameter])}else delete t.parameters[n.parameter]})};o=function(i){var c=[],o=function(n,t,i,r,u){var f=!1;angular.forEach(c,function(u){u.parameter===r&&u.label===t&&u.value===i&&(u.contexts.push(n),f=!0)});f||c.push({label:t,value:i,displayValue:u,parameter:r,contexts:[n]})};return angular.forEach(i,function(i){var a,r,c,l;i&&i.parameters&&("catalog"===i.type||i.dataset)&&(f(i,"q")&&o(i,u("Text search"),i.parameters.q,"q"),a=["geofilter.distance","geofilter.polygon"],(angular.forEach(a,function(n){f(i,n)&&o(i,h(i),i.parameters[n],n,u("Drawn area on the map"))}),"catalog"===i.type&&f(i,"q.geographic_area")&&o(i,u("Geographic area"),i.parameters["q.geographic_area"],"q.geographic_area",u("Drawn area on the map")),f(i,"q.timerange"))&&(r=n(i.parameters["q.timerange"]),c=u("Between {from} and {to}"),c=format_string(c,{from:moment(r.from).format("LLL"),to:moment(r.to).format("LLL")}),o(i,i.dataset.getFieldLabel(r.field),i.parameters["q.timerange"],"q.timerange",c)),f(i,"q.timescale")&&(l=t(i.parameters["q.timescale"]),o(i,i.dataset.getFieldLabel(l.field),i.parameters["q.timescale"],"q.timescale",l.scaleLabel)),f(i,"q.mapfilter")&&o(i,u("Map filter"),i.parameters["q.mapfilter"],"q.mapfilter"),angular.forEach(i.parameters,function(n,t){if("refine."==t.substring(0,7)&&-1===e.indexOf(t)){var r=s(i,t.substring(7));angular.isArray(n)||(n=[n]);angular.forEach(n,function(n){o(i,r,n,t)})}}))}),angular.forEach(c,function(n){n.contexts.length<i.length&&(n.contextsLabel=n.contexts.map(function(n){return r[n.name+"Label"]||n.name}).join(", "))}),c};i.$watch("context",function(n){i.refinements=o(angular.isArray(n)?n:[n])},!0)}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsRedirectIfNotLoggedIn",["ODSWidgetsConfig","config",function(n,t){return{restrict:"A",controller:["$scope","$location",function(n,i){""===t.USER&&i.url("/login")}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsGauge",["$timeout",function(n){return{restrict:"E",replace:!0,scope:{displayMode:"@",value:"=",max:"=?"},template:function(n,t){var i=t.displayMode,r;return-1==["horizontal","bar"].indexOf(i)&&(i="circle"),r="bar"==i?'<svg class="odswidget-gauge__svg">    <line x1="0" y1="5px" x2="100%" y2="5px" class="odswidget-gauge__svg-background"/>    <line x1="0" y1="5px" x2="100%" y2="5px" class="odswidget-gauge__svg-filler" /><\/svg>':'<svg class="odswidget-gauge__svg" viewBox="0 0 100 100" >    <circle cx="50" cy="50" r="45"             class="odswidget-gauge__svg-background"             vector-effect="non-scaling-stroke"/>    <circle cx="50%" cy="50%" r="45%"             class="odswidget-gauge__svg-filler"            vector-effect="non-scaling-stroke"/> <\/svg>','<div class="odswidget-gauge odswidget-gauge--'+i+'">    <div class="odswidget-gauge__value">{{ (value/max*100)|number:0 }}%<\/div>'+r+"<\/div>"},link:function(t,i){angular.isDefined(t.max)||(t.max=100);-1==["circle","bar"].indexOf(t.displayMode)&&(t.displayMode="circle");var r=i.find(".odswidget-gauge__svg-filler"),e=function(){var u=Math.PI*i.width()*.91;r.css({"stroke-dasharray":u,"stroke-dashoffset":u,transition:"none"});n(function(){r.css({transition:"stroke-dashoffset 2.5s","stroke-dashoffset":u*(1-t.percentage/100)})})},o=function(){n(function(){var n=Math.PI*i.width()*.91;r.css({"stroke-dashoffset":n*(1-t.percentage/100)})})},s=function(){var u=i.width();r.css({"stroke-dasharray":u,"stroke-dashoffset":u,transition:"none"});n(function(){r.css({transition:"stroke-dashoffset 2.5s","stroke-dashoffset":u*(1-t.percentage/100)+"px"})})},h=function(){n(function(){var n=i.width();r.css({"stroke-dashoffset":n*(1-t.percentage/100)+"px"})})},u={circle:{setup:e,animate:o},bar:{setup:s,animate:h}},f=function(n){t.percentage=n/t.max*100;t.percentage=Math.max(t.percentage,0);t.percentage=Math.min(t.percentage,100)};f(t.value);u[t.displayMode].setup();t.$watch("value",function(n,i){n!=i&&(f(n),u[t.displayMode].animate())});$(window).on("resize",function(){u[t.displayMode].setup()})}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsGeoSearch",["ModuleLazyLoader","ODSWidgetsConfig","MapHelper",function(n,t,i){return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-geo-search">    <div class="odswidget-geo-search__map"><\/div><\/div>',scope:{context:"="},link:function(r,u){var f,e=/.*polygon\(geographic_area,"(.*)"\).*/,o=function(n){var i=n.toGeoJSON(),t;f=ODS.GeoFilter.getGeoJSONPolygonAsPolygonParameter(i.geometry);t=angular.isArray(r.context)?r.context:[r.context];angular.forEach(t,function(n){n.parameters["q.geographic_area"]='#polygon(geographic_area,"'+f+'")'});r.$apply()};n("leaflet").then(function(){var s=new L.ODSMap(u.find(".odswidget-geo-search__map")[0],{scrollWheelZoom:!1,basemapsList:[t.basemaps[0]],disableAttribution:!0,maxBounds:[[-90,-180],[90,180]]}),n=new L.FeatureGroup,l,h,c;s.addLayer(n);l=new L.Control.Draw({edit:{featureGroup:n,edit:!1,remove:!1},draw:{polyline:!1,marker:!1,polygon:!1,circle:!1}});(s.addControl(l),angular.isDefined(t.defaultMapLocation))?(h=i.getLocationStructure(t.defaultMapLocation),s.setView(h.center,h.zoom)):s.setView([0,0],0);c=function(){n.getLayers().length>0&&n.removeLayer(n.getLayers()[0])};s.on("draw:drawstart",function(){c()});s.on("draw:created",function(t){var i=t.layer;n.addLayer(i);o(i)});r.$watch("context",function(t){var i=!1,u=angular.isArray(t)?t:[t],r;(angular.forEach(u,function(n){if(!i&&n.parameters&&n.parameters["q.geographic_area"]){var t=e.exec(n.parameters["q.geographic_area"]);t.length>0&&(i=t[1])}}),i!==f)&&((c(),i)&&(r=L.geoJson(ODS.GeoFilter.getPolygonParameterAsGeoJSON(i)),n.addLayer(r)),f=i)},!0)})}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsGeotooltip",["$timeout","ModuleLazyLoader","ODSWidgetsConfig",function(n,t,i){var r=angular.element('<div id="odswidget-geotooltip" class="odswidget" style="opacity: 0; transition: opacity 200ms ease-out; position: fixed; z-index: 40000; visibility: hidden;"><\/div>'),f=null,u=null,e=function(n,t,e,o,s,h){var c,v=!1,y,p,l,a,w;t===r.css("width")&&e===r.css("height")||(v=!0);r.css("width",t);r.css("height",e);y=jQuery(window).height()-(n.offset().top-jQuery(document).scrollTop());r.height()<y?r.css("top",n.height()+n.offset().top-jQuery(document).scrollTop()+5+"px"):r.css("top",n.offset().top-jQuery(document).scrollTop()-5-r.height()+"px");p=jQuery(window).width()-(n.offset().left-jQuery(document).scrollLeft());r.width()<p?r.css("left",n.offset().left-jQuery(document).scrollLeft()+"px"):r.css("left",n.offset().left-jQuery(document).scrollLeft()-r.width()+"px");n.after(r);null===f?f=new L.ODSMap(r[0],{zoomControl:!1,basemapsList:[i.basemaps[0]],minZoom:1,maxZoom:16}):v&&f.invalidateSize();null!==u&&f.removeLayer(u);u=L.layerGroup();l=new L.LatLngBounds;o&&(angular.isString(o)&&(o=o.split(",")),a=new L.LatLng(o[0],o[1]),w=L.marker(a),u.addLayer(w),l.extend(a));s&&(angular.isString(s)&&(s=angular.fromJson(s)),c=L.geoJson(s),u.addLayer(c),l.extend(c.getBounds()));h&&angular.isDefined(h.geometry)&&(c=L.geoJson(h.geometry),u.addLayer(c),l.extend(c.getBounds()));u.addTo(f);f.fitBounds(l,{reset:!0});r.css("opacity","1");r.css("visibility","visible")},o=function(){r.css("opacity","0");n(function(){r.css("visibility","hidden")},200)};return{template:'<span ng-transclude style="border-bottom: 1px dotted #000000; cursor: help;" class="geotooltip"><\/span>',replace:!0,restrict:"E",transclude:!0,scope:{coords:"=",width:"@",height:"@",delay:"@",geojson:"=",record:"="},link:function(i,r,u){t("leaflet").then(function(){var f=(u.width||200)+"px",s=(u.height||200)+"px",t=null,h=u.delay||500;r.bind("mouseenter",function(){0===h?e(r,f,s,i.coords,i.geojson,i.record):t=n(function(){e(r,f,s,i.coords,i.geojson,i.record);t=null},h)});r.bind("click",function(){e(r,f,s,i.coords,i.geojson,i.record);null!==t&&(n.cancel(t),t=null)});r.bind("mouseleave",function(){o();null!==t&&(n.cancel(t),t=null)})})}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsGist",function(){return{restrict:"E",replace:!0,template:'<div class="odswidget"><\/div>',scope:{username:"@",id:"@"},link:function(n,t,i){$.ajax({url:"https://gist.github.com/"+i.username+"/"+i.id+".json",dataType:"jsonp",timeout:1e3,success:function(n){$(document.head).append('<link href="'+n.stylesheet+'" rel="stylesheet">');t.append(n.div)}})}}})}(),function(){"use strict";var n=angular.module("ods-widgets"),t=function(n){return-1===["COUNT","CONSTANT"].indexOf(n)};n.factory("requestData",["ODSAPI","$q","ChartHelper","AggregationHelper",function(n,t,i){var u=ODS.DateFieldUtils.getTimescaleX,f=function(n,t){for(var e,f={dataset:n.config.dataset,x:[],sort:n.sort||"",maxpoints:n.maxpoints||""},r=u(n.xAxis,n.timescale),i=0;i<r.length;i++)f.x.push(r[i]);if(n.seriesBreakdown)for(e=n.seriesBreakdown,r=u(e,n.seriesBreakdownTimescale),i=0;i<r.length;i++)f.x.push(r[i]);return(t||n.seriesBreakdown)&&(f.sort=ODS.DateFieldUtils.getTimescaleSort(f.x)),f},e=function(n,t,i){var r,o=/([A-Z_-]*?)\((.*?)\)/g,h=/([A-Z_-]*?)\(([a-zA-Z0-9\.]+),\s?([0-9\.]+)\)/g,s=i||n,u,f,e;for(n.compiled_expr=""+n.expr,s.aggregates=[],u={},r=o.exec(n.expr);r;)f=h.exec(r[0]),(f&&4===f.length&&(r=f),r&&(3===r.length||4===r.length))&&(0===r[2].indexOf("serie")?(e="operators."+r[1].toLowerCase()+".apply(null, accumulation['"+r[2]+"']",4===r.length&&(e+=", "+r[3]),e+=")",n.compiled_expr=n.compiled_expr.replace(r[0],e),s.aggregates.push(r[2])):(u[t+".func"]=r[1],u[t+".expr"]=r[2],n.compiled_expr+=n.compiled_expr.replace(r[0],"y"))),r=o.exec(n.expr);return u},o=function(n,t,i,r){var u={};return"CUSTOM"===n.func?e(n,"y."+t,r):(u["y."+t+".expr"]=n.yAxis||n.expr,u["y."+t+".func"]=n.func,u["y."+t+".cumulative"]=n.cumulative||!1,"QUANTILES"===n.func&&(n.subsets||(n.subsets=50),u["y."+t+".subsets"]=n.subsets||50),"CONSTANT"===n.func&&(u["y."+t+".expr"]=n.yAxis||0,u["y."+t+".func"]="AVG"),angular.isDefined(n.multiplier)&&""!==n.multiplier&&null!==n.multiplier&&(u["y."+t+".expr"]+=" * "+n.multiplier),u)},r=function(n,t,u){var f,e,s=!0;if(t.type&&(i.isRangeChart(t.type)||"boxplot"===t.type)){if(n.sort==="y."+u&&(n.sort=""),"QUANTILES"===t.charts[0].func)for(e=angular.copy(t.charts[0]),f=1;f<t.charts.length;f++)"QUANTILES"!==t.charts[f].func||t.charts[f-1].yAxis!==t.charts[f].yAxis?s=!1:e.subsets=e.subsets+","+t.charts[f].subsets;else s=!1;if(s)r(n,e,u);else for(f=0;f<t.charts.length;f++)t.charts[f].multiplier=t.multiplier,r(n,t.charts[f],u+"-range-"+f)}else angular.extend(n,o(t,u))};return function(i,u,e,o,s,h,c,l){var a=[],v=[],y=h;return u=u||{},1===i.length?-1!==["hour","minute","second"].indexOf(i[0].timescale)&&(u.output_timezone="UTC"):-1!==["hour","minute","second"].indexOf(e)&&(u.output_timezone="UTC"),angular.forEach(i,function(t,i){var w={},p=f(t,e,o,s),b;angular.forEach(t.charts,function(n,t){var u="serie"+(i+1)+"-"+(t+1);r(p,n,u);w[u]=n});h=t.config.domain||y;c=t.config.apikey||c;b={domain:h,domainUrl:n.getDomainURL(h),dataset:{datasetid:p.dataset},apikey:c,parameters:{}};a.push(n.records.analyze(b,angular.extend({},u,t.config.options,p),l.promise));v.push(w)}),{promise:t.all(a),charts:v}}}]);n.directive("odsHighchartsChart",["colorScale","requestData","translate","ModuleLazyLoader","AggregationHelper","ChartHelper","$rootScope","odsNotificationService","$q",function(n,i,r,u,f,e,o,s,h){function v(n,t,i,u,f){var e=rt(i,u);return e&&"datetime"===f?e.getTime():e?n(t,e):void 0===i?void 0:angular.isObject(i)&&i.week?r("Week")+" "+i.week:"linear"===f?i:""+i}function l(n,t){return"QUANTILES"===t.func&&t.subsets?void 0===n[t.subsets+".0"]?null:n[t.subsets+".0"]:void 0===n?null:n}function d(n,t,i,r){var u;try{u=n.$eval(t,{operators:Math,accumulation:function(n,t){var i={};return angular.forEach(t,function(t){i[t]=n[t]}),i}(i,r),console:console})}catch(n){console.warn("Error while compiling aggregation value with expr",t)}return u}var c=r,y=function(n,t){return t?t+"."+n:e.getDatasetUniqueId(n)},g=function(n){var u,f,t,i=n.timescale,r;return(i||(i=n.queries[0].timescale||!1),i&&0===$.grep(n.queries,function(n){return n.sort}).length)?(t=i,r=t.split(" "),u=r[0],f=2==r.length?r[1]:""):(t=!1,u=!1,f=!1),{precision:u,periodic:f,timeSerieMode:t}},nt=function(n,t,i,u,f){var c,o,l,a,s,h;for(u.height(),u.width(),0===n.queries.length?n.xLabel="":angular.isDefined(n.xLabel)||(c=y(n.queries[0].config.dataset,f),n.xLabel=e.getXLabel(c,n.queries[0].xAxis,n.timescale)),angular.isUndefined(n.displayLegend)&&(n.displayLegend=!0),o={chart:{},title:{text:""},credits:{enabled:!1},series:[],xAxis:{title:{text:n.xLabel},labels:{step:1,rotation:-45,align:"right",useHTML:!0},startOfWeek:1,minPadding:0,maxPadding:0,dateTimeLabelFormats:{second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e %b %y",week:"%e. %b",month:"%b '%y",year:"%Y"}},legend:{enabled:!!n.displayLegend},yAxis:[],plotOptions:{series:{animation:!1},columnrange:{pointPadding:0,groupPadding:0,borderWidth:0,tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}<\/span>: <b>{point.low}<\/b> - <b>{point.high}<\/b>'}},boxplot:{tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}<\/span>:<br>'+r("Maximum:")+" {point.high}<br>"+r("Upper quartile:")+" {point.q3}<br>"+r("Median:")+" {point.median}<br>"+r("Lower quartile:")+" {point.q1}<br>"+r("Minimum:")+" {point.low}<br>"}},arearange:{tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}<\/span>: <b>{point.low}<\/b> - <b>{point.high}<\/b>'}},areasplinerange:{tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}<\/span>: <b>{point.low}<\/b> - <b>{point.high}<\/b>'}},pie:{tooltip:{pointFormat:'<span style="color:{series.color}">{series.name}<\/span>: <b>{point.y} ({point.percentage:.1f}%)<\/b>'}},treemap:{tooltip:{headerFormat:"",pointFormat:'<span style="color:{series.color}">{point.name}<\/span>: {point.value}<\/b>'},layoutAlgorithm:"squarified",colorByPoint:!0}},tooltip:{valueDecimals:2,headerFormat:"{point.key}<br>",pointFormat:'<span style="color:{series.color}">{series.name}<\/span>: <b>{point.y}<\/b>',formatter:function(n){var r=this.points||angular.isArray(this)?this:[this],t=r[0].series,i=[];return i=[n.tooltipFooterHeaderFormatter(r[0])],angular.forEach(r,function(n){t=n.series;var r=t.tooltipOptions.pointFormatter&&t.tooltipOptions.pointFormatter.bind(n.point)()||n.point.tooltipFormatter(t.tooltipOptions.pointFormat);i.push(r)}),i.push(n.options.footerFormat||""),i.join("")}},noData:{style:{fontFamily:"Open Sans",fontWeight:"normal",fontSize:"1.4em",color:"#333",opacity:"0.5"}},lang:{noData:r("No data available yet")}},l=e.getFieldType(c,n.queries[0].xAxis),(t?(o.xAxis.type="datetime",o.xAxis.maxZoom=36e5,o.chart.zoomType="xy",i&&(o.xAxis.showFirstLabel=!0)):-1!==["double","int"].indexOf(l)&&""===n.queries[0].sort?o.xAxis.type="linear":(o.xAxis.type="category",o.xAxis.categories=[]),"month"===i?o.xAxis.labels.format="{value: %B}":"weekday"===i?(o.xAxis.labels.format="{value: %A}","hour"===t&&(o.xAxis.labels.format="{value: %A %Hh}")):"day"===i?o.xAxis.labels.format="{value: %d}":"hour"===i&&(o.xAxis.labels.format="{value: %H}"),t?o.xAxis.labels.useHTML=!1:o.xAxis.labels.formatter=function(){return this.value.length>12?'<span title="'+this.value.replace('"',"")+'" alt="'+this.value.replace('"',"")+'">'+this.value.substring(0,9)+"...<\/span>":this.value},n.singleAxis)&&(a={color:"#000000",scale:n.singleAxisScale,yRangeMin:n.yRangeMin,yRangeMax:n.yRangeMax,yStep:n.yStep,scientificDisplay:n.scientificDisplay},o.yAxis=[k(n.singleAxisLabel,a,!1)]),s=0;s<n.queries.length;s++)for(h=0;h<n.queries[s].charts.length;h++)"spiderweb"!==n.queries[s].charts[h].type&&"polar"!==n.queries[s].charts[h].type||(o.chart.polar=!0,o.xAxis.lineWidth=0,o.xAxis.tickmarkPlacement="on",o.xAxis.labels={},o.xAxis.title={}),"polar"===n.queries[s].charts[h].type&&(o.plotOptions.series.pointPlacement="on",o.plotOptions.series.pointPadding=0,o.plotOptions.series.groupPadding=0),"funnel"===n.queries[s].charts[h].type&&(o.chart.type="funnel",o.chart.marginRight=100,o.legend.enabled=!1);return o},a={},p=0,w=function(i,u,f,o,s,h,c){function w(n,t,i){return!1!==t?n=Highcharts.numberFormat(n,t):angular.isNumber(n)&&(n=Highcharts.numberFormat(n).replace(/([,.][0-9]*?)0+$/,"$1").replace(/[,.]$/,"")),i&&(n="$"===i?i+n:n+" "+i),n}function tt(n){return"treemap"===n?function(){var n=w(this.value,y,!!o.displayUnits&&v);return'<span style="color:'+this.series.color+'">'+this.series.name+"<\/span>: <b>"+n+"<\/b>"}:"arearange"===n||"areasplinerange"===n||"columnrange"===n?function(){var n=w(this.low,y,!!o.displayUnits&&v),t=w(this.high,y,!!o.displayUnits&&v);return'<span style="color:'+this.series.color+'">'+this.series.name+"<\/span>: <b>"+n+" - "+t+"<\/b>"}:"pie"===n?function(){var n=w(this.y,y,!!o.displayUnits&&v);return'<span style="color:'+this.series.color+'">'+this.series.name+"<\/span>: <b>"+n+" ("+Highcharts.numberFormat(this.percentage,1)+"%)<\/b>"}:"boxplot"===n?function(){var n=function(n){return w(n,y,!!o.displayUnits&&v)};return'<span style="color:'+this.series.color+'">'+this.series.name+"<\/span>: <b><br>"+r("Maximum:")+" "+n(this.high)+"<br>"+r("Upper quartile:")+" "+n(this.q3)+"<br>"+r("Median:")+" "+n(this.median)+"<br>"+r("Lower quartile:")+" "+n(this.q1)+"<br>"+r("Minimum:")+" "+n(this.low)+"<br>"}:function(){var n=w(this.y,y,!!o.displayUnits&&v);return'<span style="color:'+this.series.color+'">'+this.series.name+"<\/span>: <b>"+n+"<\/b>"}}var k,b=e.getDatasetId({dataset:{datasetid:f.config.dataset},domain:h}),nt=e.getYLabel(b,o),d,l,v,y,g;return s||-1!==["pie","treemap"].indexOf(o.type)?-1!==["pie","treemap"].indexOf(o.type)?(o.extras||(o.extras={}),o.innersize&&(o.extras.innerSize=o.innersize),"inside"===o.labelsposition&&(o.extras.dataLabels={distance:-50}),o.extras.colors=n.getColors(o.color)):(a[s+o.color]||(a[s+o.color]=n.getColorAtIndex(o.color,p),p++),k=a[s+o.color]):k=n.getUniqueColor(o.color),d="line",d="spiderweb"===o.type?"line":"polar"===o.type?"column":o.type,l=angular.extend({},{name:s||nt,color:k,type:d,yAxis:i.singleAxis?0:u[b][nt],marker:{enabled:"scatter"===o.type,radius:3},shadow:!1,tooltip:{},data:[],stacking:f.stacked?f.stacked:null},o.extras),l.dataLabels||(l.dataLabels={}),"funnel"===o.type&&(l.neckWidth="30%",l.neckHeight="25%"),v=!1,y=!1,(t(o.func)&&(v=e.getFieldUnit(b,o.yAxis),y=e.getDecimals(b,o.yAxis)),o.displayValues&&(l.dataLabels.enabled=!0,l.dataLabels.color="black","treemap"!==o.type&&(l.dataLabels.formatter=function(){return y?Highcharts.numberFormat(this.point.y,y):Highcharts.numberFormat(this.point.y).replace(/([,.][0-9]*?)0+$/,"$1").replace(/[,.]$/,"")})),o.displayUnits&&v&&(l.tooltip.valueSuffix=" "+v,o.displayValues&&"treemap"!==o.type))&&(g=l.dataLabels.formatter,l.dataLabels.formatter=function(){return"$"===v?v+g.bind(this)(this.point.y):g.bind(this)(this.point.y)+" "+v}),l.tooltip.pointFormatter=tt(o.type),o.refineOnClickCtrl&&(l.point={events:{click:function(){var n=this.category||this.name;o.refineOnClickCtrl.refineOnValue(n);c.$apply()}}},l.cursor="pointer"),l=angular.extend(l,e.resolvePosition(o.position)),delete l.position,l},b=ODS.DateFieldUtils.datePatternBuilder("highcharts"),tt=function(n,t){var i={};return t&&(i.xDateFormat=b(n)),i},it=function(n,t,i){i&&angular.isObject(n)&&("second"in n?t.minTickInterval=Date.UTC(2010,1,1,1,1,2)-Date.UTC(2010,1,1,1,1,1):"minute"in n?t.minTickInterval=Date.UTC(2010,1,1,1,2)-Date.UTC(2010,1,1,1,1):"hour"in n?t.minTickInterval=Date.UTC(2010,1,1,2)-Date.UTC(2010,1,1,1):"weekday"in n?t.minTickInterval=Date.UTC(2010,1,2)-Date.UTC(2010,1,1):"day"in n||"yearday"in n?t.minTickInterval=Date.UTC(2010,1,2)-Date.UTC(2010,1,1):"month"in n?t.minTickInterval=Date.UTC(2010,1,1)-Date.UTC(2010,0,1):"year"in n&&(t.minTickInterval=Date.UTC(2010,0,1)-Date.UTC(2009,0,1)))},k=function(n,t,i,r){var f=void 0!==t.yRangeMin&&""!==t.yRangeMin,e=void 0!==t.yRangeMax&&""!==t.yRangeMax,u={title:{text:n||"",style:{color:t.color}},labels:{style:{color:t.color}},type:t.scale||"linear",min:f?parseFloat(t.yRangeMin):null,max:e?parseFloat(t.yRangeMax):null,tickInterval:t.yStep?parseFloat(t.yStep):null,startOnTick:!f,endOnTick:!e,opposite:i};return t.scientificDisplay||(u.labels.formatter=function(){return angular.isNumber(this.value)?Highcharts.numberFormat(this.value,-1):this.value}),"spiderweb"===t.type?(u.gridLineInterpolation="polygon",u.lineWidth=0,delete u.startOnTick,delete u.endOnTick,delete u.title,delete u.labels):"polar"===t.type&&(u.endOnTick=!1,u.showLastLabel=!0,delete u.title,delete u.labels),r&&(u.stackLabels={enabled:!0,style:{fontWeight:"bold"}}),u},rt=ODS.DateFieldUtils.getDateFromXObject;return{restrict:"A",replace:!0,require:["odsHighchartsChart"],scope:{parameters:"=parameters",domain:"=",apikey:"=",colors:"=",contexts:"=?"},template:'<div class="ods-chart">    <div class="ods-chart__loading" ng-show="loading">        <ods-spinner><\/ods-spinner>    <\/div>    <div class="chartplaceholder"><\/div>    <debug data="chartoptions"><\/debug><\/div>',controller:["$scope","$element","$attrs",function(t){var a,u,f,o,p,rt=this;t.$watch("contexts",function(n){if(n&&n.length>0)for(var i=0;i<n.length;i++)t[n[i].name]=n[i]},!0);this.highchartsLoaded=function(ut,ft){function st(n){if(!f){if(angular.isObject(n)&&("day"in n||"month"in n||"year"in n)){var t=new Date(Date.UTC(n.year,n.month-1||0,n.day||1,n.hour||0,n.minute||0));return ut.dateFormat("%Y-%m-%d",t)}return""+n}switch(console.warn("formatRowX on periodic value should not be used anymore"),f){case"month":return[c("Jan"),c("Feb"),c("Mar"),c("Apr"),c("May"),c("Jun"),c("Jul"),c("Aug"),c("Sep"),c("Oct"),c("Nov"),c("Dec")][n.month-1];case"weekday":return[c("Monday"),c("Tuesday"),c("Wednesday"),c("Thursday"),c("Friday"),c("Saturday"),c("Sunday")][n.weekday];case"day":return n.day;default:return""+n}}var et=ft.find(".chartplaceholder"),ot=h.defer();rt.update=function(c){function vt(n,t,i,r,u,f,e){var s,o,h,c=!1;if("datetime"===ft.xAxis.type||"linear"===ft.xAxis.type){if("object"==typeof u){if(h=[r],"logarithmic"===i)for(o=0;o<u.length;o++)u[o]<=0&&(c=!0);if(c)for(o=0;o<u.length;o++)h.push(null);else for(o=0;o<u.length;o++)h.push(u[o]);n.data.push(h)}else if(-1!==["pie","funnel"].indexOf(n.type))"datetime"===ft.xAxis.type?n.data.push({name:ut.dateFormat(n.tooltip.xDateFormat,new Date(r)),y:u}):n.data.push({name:""+r,y:u});else if("treemap"==n.type)"datetime"===ft.xAxis.type?n.data.push({name:ut.dateFormat(n.tooltip.xDateFormat,new Date(r)),value:u}):n.data.push({name:""+r,y:u});else if("logarithmic"===i&&u<=0?n.data.push([r,null]):n.data.push([r,u]),e.length>0)for(s=e.length-1;s>=0;s--)if(u>=e[s].value){n.data[n.data.length-1]={x:n.data[n.data.length-1][0],y:n.data[n.data.length-1][1],color:e[s].color};break}}else if(-1!==["pie","funnel"].indexOf(n.type))n.data[t]={name:st(r),y:u};else if("treemap"==n.type)n.data[t]={name:st(r),value:u};else{if("object"==typeof u){if(h=[],"logarithmic"===i)for(o=0;o<u.length;o++)u[o]<=0&&(c=!0);if(c)for(o=0;o<u.length;o++)h.push(null);else for(o=0;o<u.length;o++)h.push(u[o]);n.data[t]=h}else n.data[t]="logarithmic"===i&&u<=0?null:u;if(e.length>0)for(s=e.length-1;s>=0;s--)if(u>=e[s].value){n.data[t]={y:n.data[t],color:e[s].color};break}}}var ht,ct,lt,ft,at;if(void 0===c&&(c=t.parameters),!(c=angular.copy(c))||!c.queries||0===c.queries.length)return void(t.chart&&angular.element(t.chart.container).empty());for(a=void 0,u=void 0,f=void 0,o={},ht=0;ht<c.queries.length;ht++)try{y(c.queries[ht].config.dataset,p)}catch(n){return void e.onLoad(rt.update)}ct=g(c);(a=ct.timeSerieMode,u=ct.precision,f=ct.periodic,u)&&(lt=!1,f&&"hour"===u?lt=!0:f||-1!==["year","month","day"].indexOf(u)&&(lt=!0),ut.setOptions({global:{useUTC:lt}}));ft=nt(c,u,f,et,p);t.chartoptions=ft;angular.forEach(c.queries,function(t){var i=e.getDatasetId({dataset:{datasetid:t.config.dataset},domain:t.config.domain});angular.isUndefined(o[i])&&(o[i]={});angular.forEach(t.charts,function(t){var u=e.getYLabel(i,t),f,r;if(!c.singleAxis&&angular.isUndefined(o[i][u])&&(f=k(u,t,!!(ft.yAxis.length%2),!!t.displayStackValues),o[i][u]=ft.yAxis.push(f)-1),"bar"==t.type&&(ft.xAxis.labels.rotation=0),t.colorScale=n.getScale(t.color),e.allowThresholds(t.type)){if(t.thresholds){for(r=0;r<t.thresholds.length;r++)angular.isNumber(t.thresholds[r].value)||t.thresholds.splice(r,1);t.thresholds=t.thresholds.sort(function(n,t){return n.value>t.value})}}else delete t.thresholds})});ot.resolve("new request coming, cancelling current one");ot=h.defer();t.loading=!0;at=i(c.queries,t.searchoptions,a,u,f,t.domain,t.apikey,ot);at.promise.then(function(i){var h,f,ct,g,ht,e,nt,rt,ot,st,y,k;if(t.loading=!1,ct=at.charts,u)for(g=0;g<i.length;g++)for(ht=i[g],f=0;f<ht.data.length;f++)e=ht.data[f],e.x.year&&angular.isNumber(e.x.year)&&(nt=new Date(Date.UTC(e.x.year,e.x.month-1||0,e.x.day||1,e.x.hour||0,e.x.minute||0)),nt.setFullYear(e.x.year),(void 0===h||nt<h)&&(h=nt));for(rt=[],f=0;f<c.queries.length;f++)if(!c.queries[f].seriesBreakdown)for(ot=0;ot<c.queries[f].charts.length;ot++)rt.push("serie"+(f+1)+"-"+(ot+1)),ft.series.push(!1);if(st=function(n,i,r,u,f,e,s,h,c){var a,l=rt.indexOf(n);e.colorScale(h).hex();-1===l?(r.series.push(w(i,o,f,e,c,f.config.domain||p,t)),l=rt.push(n)-1):r.series[l]||(r.series[l]=w(i,o,f,e,c,f.config.domain||p,t));"category"===r.xAxis.type&&-1===(a=r.xAxis.categories.indexOf(s))&&(a=r.xAxis.categories.length,r.xAxis.categories.push(s));angular.extend(r.series[l].tooltip,u);c||"pie"===e.type?vt(r.series[l],a,i.singleAxisScale||e.scale,s,h,r.series[l].color,e.thresholds||[]):vt(r.series[l],a,i.singleAxisScale||e.scale,s,h,e.colorScale(h).hex(),e.thresholds||[])},angular.forEach(i,function(i,r){var o,g,u,e,w,lt,k,p,at;if(i.data&&0!==i.data.length&&(i.data.results?(o=i.data.results,g=i.data.aggregations):o=i.data,0!==o.length)){var f=c.queries[r],s=ct[r],nt=f.xAxis,rt=!!f.seriesBreakdown,et=tt(rt?o[0].x[nt]:o[0].x,ft,a);it(rt?o[0].x[nt]:o[0].x,ft.xAxis,a);f.defaultValues={};angular.forEach(s,function(n,t){f.defaultValues[t]=null});g&&angular.forEach(g,function(t,i){var r,u;if(i.endsWith("min"))i=i.replace("min",""),r=t.min,u=g[i+"max"].max;else{if(i.endsWith("max"))return;s[i].charts&&"QUANTILES"===s[i].charts[0].func&&"QUANTILES"===s[i].charts[1].func?(r=t.min[s[i].charts[0].subset+".0"],r=t.max[s[i].charts[1].subset+".0"]):(r=t.min,u=t.max)}s[i].colorScale=n.getScale(s[i].color,r,u)});var vt=!1,ot=[],y=[],ht={},pt=c.queries[r].charts.length;for(e=0;e<pt;e++){if(w=c.queries[r].charts[e],w.aggregates)for(lt=0;lt<w.aggregates.length;lt++)k=w.aggregates[lt],k&&-1===ot.indexOf(k)&&(ot.push(k),ht[k]=[]);w.compiled_expr&&(vt=!0)}for(u=0;u<o.length;u++)p=o[u],angular.extend({},f.defaultValues,p),at=v(ut.dateFormat,et.xDateFormat,rt?p.x[nt]:p.x,h,ft.xAxis.type),e=0,angular.forEach(p,function(n,t){var r,u,i,a,w=!1,o;if("x"!==t){if((a=t.match(/-range-([0-9])$/))&&2===a.length){if(i=t.replace(/-range-[0-9]$/,""),w=!0,"0"!==a[1])return}else i=t;if(o=s[i],w)for(u=[],r=0;r<o.charts.length;r++)u.push(l(p[i+"-range-"+r],o.charts[r]));else if(o.charts)for(u=[],r=0;r<o.charts.length;r++)u.push(l(n,o.charts[r]));else u=l(n,o);rt?angular.forEach(p.x,function(n,t){t!==nt&&(n=v(ut.dateFormat,b(n),n,h,!1),st(""+i+t+n,c,ft,et,f,o,at,u,n),ot.indexOf(i)>=0&&ht[i].push(u))}):(st(""+i,c,ft,et,f,o,at,u),ot.indexOf(i)>=0&&ht[i].push(u));vt&&y.push(at);e++}});if(vt)for(y.sort(function(n,t){return n-t}),u=y.length-1;u>0;u--)y[u]==y[u-1]&&y.splice(u,1);for(u=0;u<f.charts.length;u++)if(f.charts[u].aggregates)for(var yt=f.charts[u],wt=d(t,yt.compiled_expr,ht,yt.aggregates),e=0;e<y.length;e++)st("aggr"+r+"-"+u,c,ft,et,f,yt,y[e],wt)}}),y=ft.xAxis.categories,y)for(f=0;f<ft.series.length;f++)for(k=0;k<y.length;k++)ft.series[f].data&&void 0===ft.series[f].data[k]&&(ft.series[f].data[k]=null);if(y){if(1===y.length)for(f=0;f<ft.series.length;f++)-1!==["line","spline","area","arearange"].indexOf(ft.series[f].type)&&(ft.series[f].marker=ft.series[f].marker||{},ft.series[f].marker.enabled=!0)}else for(f=0;f<ft.series.length;f++)-1!==["line","spline","area","arearange"].indexOf(ft.series[f].type)&&1===ft.series[f].data.length&&(ft.series[f].marker=ft.series[f].marker||{},ft.series[f].marker.enabled=!0);t.chart&&ft.chart.renderTo&&(t.chart.destroy(),et=$element.find(".chartplaceholder"));ft.chart.renderTo=et[0];try{ft.series.length>500&&(s.sendNotification(r("There are too many series to be displayed correctly, try to refine your query a bit.")),ft.series=ft.series.slice(0,10));t.chart=new ut.Chart(ft,function(){})}catch(n){n.indexOf&&0===n.indexOf("Highcharts error #19")?(s.sendNotification(r("There was too many points to display, the maximum number of points has been decreased.")),angular.forEach(t.parameters.queries,function(n){n.maxpoints=20})):angular.isString(n)?s.sendNotification(n):s.sendNotification(n.message)}},function(){t.loading=!1})}}}],link:function(n,t,i,r){var f=r[0];u("highcharts").then(function(){f.highchartsLoaded(Highcharts,t);n.$watch("parameters",function(n){f.update(n)},!0)})}}}]);n.directive("odsHighcharts",["colorScale",function(n){var t=n.getColors(n.getDefaultColorSet());return{restrict:"E",scope:{context:"=",fieldX:"@",expressionY:"@",functionY:"@",timescale:"@",chartType:"@",color:"@",chartConfig:"=",labelX:"@",labelY:"@",sort:"@",maxpoints:"@"},replace:!0,template:'<div class="odswidget odswidget-highcharts"><div ods-highcharts-chart parameters="chart" domain="context.domain" apikey="context.apikey"><\/div><\/div>',controller:["$scope","ODSWidgetsConfig","ChartHelper",function(n,i,r){var u=i.chartColors||t,f;n.color&&(u=n.color.split(",").map(function(n){return n.trim()}));f=n.$watch("context.dataset",function(t){var i,e,o;t&&(("dataset"!==n.context.type&&console.error("ods-highcharts requires a Dataset Context"),r.init(n.context),angular.isUndefined(n.chartConfig))?(i={},"pie"===n.chartType&&(i={colors:u}),e="",e="y"===n.sort?"serie1-1":"-y"===n.sort?"-serie1-1":n.sort,o=n.labelY||("COUNT"===n.functionY.toUpperCase()?"Count":n.expressionY),n.chart={timescale:n.timescale,xLabel:n.labelX,queries:[{config:{dataset:n.context.dataset.datasetid,options:n.context.parameters,domain:n.context.domain},xAxis:n.fieldX,sort:e,maxpoints:n.maxpoints||50,charts:[{yAxis:n.expressionY,yLabelOverride:o,func:n.functionY,color:u[0],type:n.chartType,extras:i}]}]}):n.chart=angular.isString(n.chartConfig)?JSON.parse(b64_to_utf8(n.chartConfig)):angular.copy(n.chartConfig),n.$broadcast("chartConfigReady",n.chart),n.$watch("chart",function(t){var e,u,f,i;if(t){for(f=r.getDatasetId(n.context),e=0;e<t.queries.length;e++){for(i=t.queries[e],void 0===i.xAxis&&r.setDefaultQueryValues(f,i,!0),u=0;u<i.charts.length;u++)r.setSerieDefaultValues(f,i.charts[u],i.xAxis,!0);for(r.setDefaultQueryValues(f,i,!0),1===n.chart.queries.length&&r.setChartDefaultValues(f,t,!0),u=0;u<i.charts.length;u++)r.setSerieDefaultColors(i.charts[u],i.seriesBreakdown)}n.$broadcast("chartConfigReady",n.chart)}},!0),f())})}]}}]);n.directive("odsMultiHighcharts",["ODSAPI","ChartHelper","$q",function(n,t,i){return{restrict:"E",scope:{context:"=",chartConfig:"="},replace:!0,template:'<div class="odswidget odswidget-multihighcharts"><div ods-chart parameters="chart" domain="context.domain" apikey="context.apikey"><\/div><\/div>',controller:["$scope",function(r){var u=r.$watch("context",function(f){var e,s,o,h,c,l;if(f){for("catalog"!==f.type&&console.error("ods-multi-highcharts requires a Catalog Context"),s=angular.isString(r.chartConfig)?JSON.parse(b64_to_utf8(r.chartConfig)):r.chartConfig,o=[],e=0;e<s.queries.length;e++)h=s.queries[e].config.dataset,-1===o.indexOf(h)&&o.push(h);for(c=[],l=function(n){var i=new ODS.Dataset(n);r.context.dataset=i;t.init(r.context)},e=0;e<o.length;e++)c.push(n.datasets.get(r.context,o[e],{extrametas:!0}).success(l));i.all(c).then(function(){r.chart=s});u()}})}]}}]);n.directive("odsChart",["ODSAPI","ChartHelper","ODSWidgetsConfig",function(n,t,i){return{restrict:"EA",scope:{timescale:"@",labelX:"@",singleYAxis:"@",singleYAxisLabel:"@",singleYAxisScale:"@",min:"@",max:"@",step:"@",scientificDisplay:"@",logarithmic:"@",displayLegend:"@",context:"=?",fieldX:"@",expressionY:"@",functionY:"@",chartType:"@",color:"@",chartConfig:"=?",labelY:"@",sort:"@",maxpoints:"@",chart:"=?parameters"},replace:!0,transclude:!0,template:'<div class="odswidget odswidget-charts"><debug data="chart"><\/debug><div ods-highcharts-chart parameters="chart" domain="context.domain" apikey="context.apikey" contexts="contexts"><\/div><div ng-transclude><\/div><\/div>',controller:["$scope","$element","$attrs","$transclude",function(n,r,u){n.contexts=[];this.pushContext=function(t){n.contexts.push(t)};n.chart||(n.chart={queries:[],xLabel:angular.isDefined(n.labelX)?n.labelX:void 0,timescale:n.timescale||"",singleAxis:!!n.singleYAxis,singleAxisLabel:angular.isDefined(n.singleYAxisLabel)?n.singleYAxisLabel:void 0,singleAxisScale:n.logarithmic?"logarithmic":"",yRangeMin:angular.isDefined(n.min)&&""!==n.min?parseFloat(n.min):void 0,yRangeMax:angular.isDefined(n.max)&&""!==n.max?parseFloat(n.max):void 0,yStep:angular.isDefined(n.step)&&""!==n.step?parseFloat(n.step):void 0,scientificDisplay:!angular.isDefined(n.scientificDisplay)||""===n.scientificDisplay||"true"===n.scientificDisplay,displayLegend:!angular.isDefined(n.displayLegend)||"false"!==n.displayLegend});angular.forEach(n.chart,function(t,i){void 0===t&&delete n.chart[i]});u.context?(!function(){var r=i.chartColors||defaultColors,u;n.color&&(r=n.color.split(",").map(function(n){return n.trim()}));u=n.$watch("context.dataset",function(i){var f,e,o;i&&(("dataset"!==n.context.type&&console.error("ods-chart requires a Dataset Context"),t.init(n.context),angular.isUndefined(n.chartConfig))?(f={},"pie"===n.chartType&&(f={colors:r}),e="",e="y"===n.sort?"serie1-1":"-y"===n.sort?"-serie1-1":n.sort,o=n.labelY||("COUNT"===n.functionY.toUpperCase()?"Count":n.expressionY),n.chart={timescale:n.timescale,xLabel:n.labelX,queries:[{config:{dataset:n.context.dataset.datasetid,options:n.context.parameters},xAxis:n.fieldX,sort:e,maxpoints:n.maxpoints||50,charts:[{yAxis:n.expressionY,yLabelOverride:o,func:n.functionY,color:r[0],type:n.chartType,extras:f}]}]}):n.chart=angular.isString(n.chartConfig)?JSON.parse(b64_to_utf8(n.chartConfig)):n.chartConfig,u())})}(),this.setQuery=function(){console.error("cannot use ods-chart-query when context and chartConfig are declared on ods-chart")}):(this.setQuery=function(i,r){var s,u,f=n.chart.queries.indexOf(i),h,o,e;for(-1===f?(f=n.chart.queries.length,n.chart.queries.push(i)):n.chart.queries[f]=i,i.sort&&(s=i.sort.match(/^(-?)serie([0-9]+)$/))&&(n.chart.queries[f].sort=s[1]+"serie"+(f+1)+"-"+s[2]),h=!1,o=0;o<n.contexts.length;o++)n.contexts[o].name===r.name&&(h=!0);for(h||n.contexts.push(r),e=t.getDatasetId(r),void 0===i.xAxis&&t.setDefaultQueryValues(e,i,!0),u=0;u<i.charts.length;u++)t.setSerieDefaultValues(e,i.charts[u],i.xAxis,!0);for(t.setDefaultQueryValues(e,i,!0),1===n.chart.queries.length&&t.setChartDefaultValues(e,n.chart,!0),u=0;u<i.charts.length;u++)t.setSerieDefaultColors(i.charts[u],i.seriesBreakdown)},n.$watch("labelX",function(t){n.chart.xLabel=t}))}]}}]);n.directive("odsChartQuery",["ODSAPI","ChartHelper",function(n,t){return{restrict:"E",require:["odsChartQuery","^odsChart"],controller:["$scope",function(){}],compile:function(){return{pre:function(n,i,r,u){var s=u[0],c=u[1],f={config:{},charts:[],xAxis:r.fieldX,maxpoints:r.maxpoints?parseInt(r.maxpoints,10):void 0,timescale:r.timescale,stacked:r.stacked,seriesBreakdown:r.seriesBreakdown,seriesBreakdownTimescale:r.seriesBreakdownTimescale},h,o,e;f.sort="";f.sort="y"===r.sort?"serie1":"-y"===r.sort?"-serie1":r.sort;h=r.options||{};angular.forEach(f,function(n,t){void 0===n&&delete f[t]});s.setChart=function(n){-1===f.charts.indexOf(n)&&f.charts.push(n)};o=function(n){n&&c.setQuery(f,n)};s.pushContext=function(n){c.pushContext(n)};e=r.context;n[e].wait().then(function(i){t.init(n[e]);f.config.dataset=i.datasetid;f.config.domain=n[e].domain;f.config.apikey=n[e].apikey;f.config.options=angular.extend({},n[e].parameters,h);s.setChart=function(t){-1===f.charts.indexOf(t)&&f.charts.push(t);o(n[e])};o(n[e]);n.$watch(e+".parameters",function(t){t&&(f.config.options=angular.extend({},t,h),o(n[e]))},!0)})}}}}}]);n.directive("odsChartSerie",["ODSAPI","ChartHelper","$compile","$parse",function(){return{restrict:"E",require:["^odsChartQuery","?refineOnClick","?refineOnClickContext"],controller:["$scope","$transclude",function(){}],link:function(n,t,i,r){var f=r[0],e=r[1]||r[2],u={type:i.chartType||void 0,innersize:i.innersize||void 0,labelsposition:i.labelsposition||void 0,func:i.functionY||void 0,yAxis:i.expressionY||void 0,color:i.color||void 0,cumulative:!!i.cumulative||!1,yLabelOverride:angular.isDefined(i.labelY)?i.labelY:void 0,scale:i.logarithmic?"logarithmic":"",yRangeMin:angular.isDefined(i.min)&&""!==i.min?parseFloat(i.min):void 0,yRangeMax:angular.isDefined(i.max)&&""!==i.max?parseFloat(i.max):void 0,yStep:angular.isDefined(i.step)&&""!==i.step?parseFloat(i.step):void 0,displayUnits:"true"===i.displayUnits,displayValues:"true"===i.displayValues,displayStackValues:"true"===i.displayStackValues,multiplier:angular.isDefined(i.multiplier)?parseFloat(i.multiplier):void 0,thresholds:i.colorThresholds?n.$eval(i.colorThresholds):[],subsets:i.subsets,charts:i.subseries?JSON.parse(i.subseries):void 0,refineOnClickCtrl:e,scientificDisplay:"true"===i.scientificDisplay};angular.forEach(u,function(n,t){void 0===n&&delete u[t]});f.setChart(u);i.$observe("labelY",function(n){u.yLabelOverride=n;f.setChart(u)})}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsHubspotForm",function(){var n=[];return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-hubspot-form" id="{{uniqueId}}"><\/div>',scope:{portalId:"@",formId:"@"},link:function(t,i,r){t.uniqueId="hubspotform-"+Math.random().toString(36).substring(7);var u=function(){-1===n.indexOf(t.uniqueId)&&(n.push(t.uniqueId),hbspt.forms.create({portalId:r.portalId,formId:r.formId,target:"#"+t.uniqueId}))};angular.isUndefined(window.hbspt)?LazyLoad.js("//js.hsforms.net/forms/v2.js",u):u()}}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsInfiniteScrollResults",function(){return{template:'<div class="{{listClass}} odswidget-infinite-scroll-results" infinite-scroll="loadMore()" infinite-scroll-distance="2" infinite-scroll-disabled="fetching">   <div class="{{resultClass}}" ng-repeat="item in results" inject>   <\/div>   <div class="odswidget-infinite-scroll-results__message-container">       <ods-spinner class="odswidget-infinite-scroll-results__spinner" ng-if="fetching"><\/ods-spinner>       <div class="odswidget-infinite-scroll-results__no-more-results-message" ng-if="!fetching && results.length > 0">{{ noMoreResultsMessage }}<\/div>       <div class="odswidget-infinite-scroll-results__no-results-message ng-cloak" ng-if="!fetching && results.length == 0 && context.getActiveFilters().length > 0"">{{ noResultsMessage }}<\/div>       <div class="odswidget-infinite-scroll-results__no-results-message ng-cloak" ng-if="!fetching && results.length == 0 && context.getActiveFilters().length == 0" ng-bind-html="noDataMessage"><\/div>   <\/div><\/div>',scope:{context:"=",resultClass:"@",listClass:"@",noMoreResultsMessage:"@",noResultsMessage:"@",noDataMessage:"@",scrollTopWhenRefresh:"="},transclude:!0,controller:["$scope","$window","$q","ODSAPI",function(n,t,i,r){var e=0,f=!1;n.fetching=!1;n.results=[];var o=i.defer(),u=function(t){var i,u;f||(t?e=0:e+=1,i=10*e,(n.fetching=!0,"catalog"===n.context.type)?r.datasets.search(n.context,{rows:10,start:i,extrametas:!0,interopmetas:!0}).success(function(n){f=0==n.datasets.length;s(n.datasets,t)}):(u=angular.extend({},n.context.parameters,{rows:10,start:i}),r.records.search(n.context,u).success(function(n){f=0==n.records.length;s(n.records,t);o.resolve()})))},s=function(i,r){r&&(n.results=[]);n.results=n.results.concat(i);n.fetching=!1;r&&n.scrollTopWhenRefresh&&t.scrollTo(t.scrollX,0);r&&angular.element(t).trigger("scroll")};n.loadMore=function(){"dataset"===n.context.type?o.promise.then(function(){u(!1)}):u(!1)};n.$watch("context.parameters",function(n,t){n!==t&&(f=!1,u(!0))},!0);"dataset"===n.context.type?n.context.wait().then(function(){u(!0)}):u(!0)}]}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsLastDatasetsFeed",["ODSAPI",function(n){return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-last-datasets-feed"><ul class="odswidget-last-datasets-feed__datasets">   <li class="no-data" ng-hide="datasets" translate>No data available yet<\/li>   <li class="odswidget-last-datasets-feed__dataset" ng-repeat="dataset in datasets" ng-if="datasets">       <ods-theme-picto class="odswidget-last-datasets-feed__theme-picto" theme="{{dataset.metas.theme|firstValue}}"><\/ods-theme-picto>       <div class="odswidget-last-datasets-feed__dataset-details">           <div class="odswidget-last-datasets-feed__dataset-details-title"><a ng-href="{{context.domainUrl}}/explore/dataset/{{dataset.datasetid}}/" target="_self">{{ dataset.metas.title }}<\/a><\/div>           <div class="odswidget-last-datasets-feed__dataset-details-modified"><i class="fa fa-calendar" aria-hidden="true"><\/i> <span title="{{ dataset.metas.modified|moment:\'LLL\' }}"><span translate>Modified<\/span> {{ dataset.metas.modified|timesince }}<\/span><\/div>       <\/div>   <\/li><\/ul><\/div>',scope:{context:"=",max:"@"},controller:["$scope",function(t){t.max=t.max||5;var i=function(){n.datasets.search(t.context,{rows:t.max,sort:"modified"}).success(function(n){t.datasets=n.datasets})};t.$watch("context",function(){i()})}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsLastReusesFeed",["ODSAPI",function(n){return{restrict:"E",replace:!0,transclude:!0,template:'<div class="odswidget odswidget-last-reuses-feed"><ul class="odswidget-last-reuses-feed__reuses">   <li class="no-data" ng-hide="reuses" translate>No data available yet<\/li>   <li class="odswidget-last-reuses-feed__reuse" ng-repeat="reuse in reuses" ng-if="reuses" inject>       <div class="odswidget-last-reuses-feed__reuse-thumbnail">           <span style="display: inline-block; height: 100%; vertical-align: middle;"><\/span>           <a ng-href="{{reuse.url}}" target="_self"><img class="odswidget-last-reuses-feed__reuse-thumbnail-image" ng-if="reuse.thumbnail" ng-src="{{ reuse.thumbnail }}"><\/a>       <\/div>       <div class="odswidget-last-reuses-feed__reuse-details">           <div class="odswidget-last-reuses-feed__reuse-details-title"><a ng-href="{{reuse.url}}" target="_self">{{ reuse.title }}<\/a><\/div>           <div class="odswidget-last-reuses-feed__reuse-details-dataset"><a ng-href="{{reuse.datasetUrl}}" target="_self">{{ reuse.dataset.title }}<\/a><\/div>           <div class="odswidget-last-reuses-feed__reuse-details-modified"><span title="{{ reuse.created_at|moment:\'LLL\' }}"><i class="fa fa-calendar" aria-hidden="true"><\/i> {{ reuse.created_at|timesince }}<\/span><\/div>       <\/div>   <\/li><\/ul><\/div>',scope:{context:"=",max:"@",externalLinks:"=?"},controller:["$scope",function(t){t.max=t.max||5;var i=function(){n.reuses(t.context,{rows:t.max}).success(function(n){angular.forEach(n.reuses,function(n){t.externalLinks||(n.url=t.context.domainUrl+"/explore/dataset/"+n.dataset.id+"/information/");n.datasetUrl=t.context.domainUrl+"/explore/dataset/"+n.dataset.id+"/information/"});t.reuses=n.reuses})};t.$watch("context",function(){i()})}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsMapDisplayControl",[function(){return{restrict:"E",template:'<div class="odswidget odswidget-map-display-control">   <ul class="odswidget-map-display-control__groups">       <li ng-repeat="group in mapConfig.groups"            ng-click="toggleGroup(group)"            ng-class="{\'odswidget-map-display-control__group\': true, \'odswidget-map-display-control__group--disabled\': !group.displayed}">           <div class="odswidget-map-display-control__group-title" ng-bind="group.title || group.layers[0].title || group.layers[0].context.dataset.metas.title"><\/div>           <div class="odswidget-map-display-control__group-description" ng-if="getGroupDescription(group)" ng-bind="getGroupDescription(group)"><\/p>       <\/li>   <\/ul><\/div>',scope:{mapConfig:"=",singleLayer:"="},controller:["$scope","shortSummaryFilter",function(n,t){n.getGroupDescription=function(n){return n.description||t(n.layers[0].description,200)||t(n.layers[0].context.dataset.metas.description,200)};n.toggleGroup=function(t){n.singleLayer?(n.mapConfig.groups.forEach(function(n){n.displayed=!1}),t.displayed=!0):t.displayed=!t.displayed}}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsMapLegacy",["ModuleLazyLoader",function(n){return{restrict:"E",scope:{context:"=",embedMode:"@",autoResize:"@",mapContext:"=?",location:"@",basemap:"@",isStatic:"@",showFilters:"@",itemClickContext:"=",colorBy:"@",colorByField:"@",colorByContext:"=",colorByAggregationKey:"@",colorByKey:"@",colorByExpression:"@",colorByFunction:"@",colorByRanges:"@",colorByRangesColors:"@"},replace:!0,template:function(n){return n.contents().wrapAll("<div>"),n.contents().length>0&&n.contents().html().trim().length>0&&(n.contents().wrapAll("<div>"),n.data("tooltip-template",n.children().html())),'<div class="odswidget odswidget-map"><div class="odswidget-map__map"><\/div><div class="odswidget-overlay map odswidget-overlay--opaque" ng-show="pendingRequests.length && initialLoading"><ods-spinner><\/ods-spinner><\/div><\/div>'},link:function(t,i){function r(){$(".odswidget-map__map").length>0&&$(".odswidget-map__map").height(Math.max(200,$(window).height()-$(".odswidget-map__map").offset().top))}angular.isUndefined(t.mapContext)&&(t.mapContext={},t.location&&(t.mapContext.location=t.location),t.basemap&&(t.mapContext.basemap=t.basemap));"true"===t.autoResize&&($(window).on("resize",r),r());n("leaflet").then(function(){L.Control.FilterByView=L.Control.extend({options:{position:"topright"},onAdd:function(){var n="leaflet-control-filterview leaflet-bar leaflet-control",i=L.DomUtil.create("div",n),r=L.DomUtil.create("a","leaflet-bar-part",i);return r.href="#",t.mapViewFilter&&(i.className=n+" active"),L.DomEvent.on(r,"click",L.DomEvent.stopPropagation).on(r,"click",L.DomEvent.preventDefault).on(r,"click",function(){return t.$apply(function(n){n.mapViewFilter=!n.mapViewFilter}),i.className=t.mapViewFilter?n+" active":n,!1}).on(r,"dblclick",L.DomEvent.stopPropagation),t.$watch("mapViewFilter",function(t,r){t!==r&&(i.className=t?n+" active":n)}),i}});t.initMap=function(n,r,u,f,e,o,s,h,c){var a={basemapsList:u,worldCopyJump:!0,minZoom:2,basemap:o,dragging:!s,zoomControl:!s,prependAttribution:h},l,v;s&&(a.doubleClickZoom=!1,a.scrollWheelZoom=!1);l=new L.ODSMap(i.children()[0],a);(l.addControl(new L.Control.Scale),e&&!s)&&(v=L.Control.geocoder({placeholder:f("Find a place..."),errorMessage:f("Nothing found."),geocoder:new L.Control.Geocoder.Nominatim({serviceUrl:"https://nominatim.openstreetmap.org/",geocodingQueryParams:{"accept-language":c||"en",polygon_geojson:!0}})}),v.markGeocode=function(n){if(l.fitBounds(n.bbox),n.properties.geojson){var t=L.geoJson(n.properties.geojson,{style:function(){return{opacity:0,fillOpacity:.8,fillColor:"orange",className:"leaflet-geocoder-highlight"}}});l.addLayer(t);$timeout(function(){i.addClass("geocoder-highlight-on")},0);$timeout(function(){i.removeClass("geocoder-highlight-on");l.removeLayer(t)},2500)}},l.addControl(v));"true"!==r&&("true"===t.showFilters&&l.addControl(new L.Control.FilterByView),l.addControl(new L.Control.Fullscreen));s||l.addControl(new L.Control.Locate({maxZoom:18}));l.on("popupclose",function(n){jQuery(n.popup.getContent()).trigger("popupclose")});t.map=l}})},controller:["$scope","$http","$compile","$q","$filter","$element","translate","ODSAPI","DebugLogger","ODSWidgetsConfig","$attrs",function(n,t,i,r,u,f,e,o,s,h,c){s.log("init map");n.pendingRequests=t.pendingRequests;n.initialLoading=!0;(n.itemClickMapField&&!n.itemClickContextField||!n.itemClickMapField&&n.itemClickContextField)&&console.log("ERROR: You need to configure both item-click-context-field and item-click-map-field.");var l,v=null,p=null,w={delimiter:",",accuracy:5,formatLatLng:function(n){var t=L.Util.formatNum(n.lat,this.accuracy),i=L.Util.formatNum(n.lng,this.accuracy);return new L.latLng(t,i)},getLocationParameterAsArray:function(n){return n.split(this.delimiter)},getLocationParameterFromMap:function(n){var t=this.formatLatLng(n.getCenter());return n.getZoom()+this.delimiter+t.lat+this.delimiter+t.lng},getCenterFromLocationParameter:function(n){var t=this.getLocationParameterAsArray(n);return new L.latLng(t[1],t[2])},getZoomFromLocationParameter:function(n){return this.getLocationParameterAsArray(n)[0]}},it=function(n,t){ODS.GeoFilter.addGeoFilterFromSpatialObject(n.parameters,t)},b=function(n,t,i,r){angular.isDefined(r.fields[t])&&(n.parameters["refine."+i]=r.fields[t])},k=function(t,i,r,u,f){if(i||r)if(f)n.$apply(function(){b(t,i,r,f)});else{var e={};ODS.GeoFilter.addGeoFilterFromSpatialObject(e,u);jQuery.extend(e,n.staticSearchOptions,n.context.parameters,{rows:1});o.records.download(n.context,e).success(function(n){b(t,i,r,n[0])})}else n.$apply(function(){it(t,u)})},a=function(t,r,u,e){var h,l,a,s,v,o;n.itemClickContext?angular.isArray(n.itemClickContext)?angular.forEach(n.itemClickContext,function(n){l=c["itemClick"+ODS.StringUtils.capitalize(n.name)+"ContextField"];h=c["itemClick"+ODS.StringUtils.capitalize(n.name)+"MapField"];k(n,h,l,r,e)}):(a=n.itemClickContext,l=c["itemClick"+ODS.StringUtils.capitalize(a.name)+"ContextField"]||c.itemClickContextField,h=c["itemClick"+ODS.StringUtils.capitalize(a.name)+"MapField"]||c.itemClickMapField,k(a,h,l,r,e)):(s=n.$new(!1),u?s.recordid=u:s.shape=r,v={offset:[0,-30],maxWidth:250,minWidth:250,autoPanPaddingTopLeft:[50,305],autoPan:!n.mapViewFilter&&!n.staticMap},o=f.data("tooltip-template"),!angular.isUndefined(o)&&angular.isString(o)&&""!==o.trim()||(o=n.context.dataset.extra_metas&&n.context.dataset.extra_metas.visualization&&n.context.dataset.extra_metas.visualization.map_tooltip_html?n.context.dataset.extra_metas.visualization.map_tooltip_html:""),s.template=o,new L.Popup(v).setLatLng(t).setContent(i('<ods-map-tooltip shape="shape" context="context" recordid="recordid" map="map" template="{{template}}"><\/ods-map-tooltip>')(s)[0]).openOn(n.map))},rt=function(n){return n=Math.round(100*n)/100,n=u("number")(n)},ut=function(t){return function(i,r){var u,f;i.count>1?(u=new L.ClusterMarker(i.cluster_center,{geojson:i.cluster,value:i.count,total:r,numberFormattingFunction:rt,color:n.markerColor}),n.staticMap||u.on("click",function(t){n.map.getZoom()===n.map.getMaxZoom()?a(marker.getLatLng(),i.cluster):n.$apply(function(){if(i.cluster)if("Point"===i.cluster.type)n.map.fitBounds([[i.cluster.coordinates[1],i.cluster.coordinates[0]],[i.cluster.coordinates[1],i.cluster.coordinates[0]]]);else{var r={},u=ODS.GeoFilter.getBoundsAsPolygonParameter(L.geoJson(i.cluster).getBounds());jQuery.extend(r,n.staticSearchOptions,n.context.parameters,{"geofilter.polygon":u});o.records.boundingbox(n.context,r).success(function(t){n.map.fitBounds([[t.bbox[1],t.bbox[0]],[t.bbox[3],t.bbox[2]]])})}else n.map.setView(t.latlng,n.map.getZoom()+2)})}),t.addLayer(u)):(f=p(i.cluster_center),f.on("click",function(n){a(n.target.getLatLng(),i.cluster)}),t.addLayer(f))}},d=function(t){var i={"geofilter.polygon":ODS.GeoFilter.getBoundsAsPolygonParameter(n.map.getBounds()),clusterprecision:n.map.getZoom(),clusterdistance:50,return_polygons:t};jQuery.extend(i,n.staticSearchOptions,n.context.parameters);n.currentClusterRequestCanceler&&n.currentClusterRequestCanceler.resolve();n.currentClusterRequestCanceler=r.defer();o.records.geo(n.context,i,n.currentClusterRequestCanceler.promise).success(function(t){var i=t.clusters;n.records=i?i.length:0;for(var r=new L.LayerGroup,f=ut(r),u=0;u<i.length;u++)f(i[u],t.count.max);r.addTo(n.map);n.layerGroup&&n.map.removeLayer(n.layerGroup);n.layerGroup=r;n.initialLoading=!1;n.currentClusterRequestCanceler=null})},ft=function(){var t={"geofilter.polygon":ODS.GeoFilter.getBoundsAsPolygonParameter(n.map.getBounds()),clusterprecision:n.map.getZoom()};jQuery.extend(t,n.staticSearchOptions,n.context.parameters);t.rows=1e3;n.currentClusterRequestCanceler&&n.currentClusterRequestCanceler.resolve();n.currentClusterRequestCanceler=r.defer();o.records.geopreview(n.context,t,n.currentClusterRequestCanceler.promise).success(function(t){for(var i=new L.LayerGroup,r=0;r<t.length;r++)et(i,t[r]);i.addTo(n.map);n.layerGroup&&n.map.removeLayer(n.layerGroup);n.layerGroup=i;n.initialLoading=!1;n.currentClusterRequestCanceler=null})},et=function(n,t){var r={radius:3,fillColor:"#0033ff",color:"#0000ff",weight:1,opacity:1,fillOpacity:.5},i=new L.GeoJSON(t.geometry,{pointToLayer:function(n,t){return L.circleMarker(t,r)}});n.addLayer(i);i.on("click",function(n){a(n.latlng,t.geometry,t.id)})},g=function(n){for(var t=0;t<l.ranges.length;t++)if(n<l.ranges[t])return l.colors[t];return l.colors[l.colors.length-1]},ot=function(){var r=angular.extend({},l.context.parameters,{"join.geo.remotedataset":n.context.dataset.datasetid,"join.geo.localkey":l.localkey,"join.geo.remotekey":l.remotekey,"y.agg.expr":l.expr,"y.agg.func":l.func}),t=new L.LayerGroup,u=new L.LatLngBounds,i=new L.FeatureGroup;o.records.analyze(l.context,r).success(function(r){angular.forEach(r,function(n){var r=n.x,f=n.agg;angular.forEach(r,function(n){nt(n,t,u,i,g(f))})});n.layerGroup&&n.map.removeLayer(n.layerGroup);t.addLayer(i);t.addTo(n.map);n.layerGroup=t;n.initialLoading=!1})},st=function(){var t={};t["geofilter.polygon"]=ODS.GeoFilter.getBoundsAsPolygonParameter(n.map.getBounds());jQuery.extend(t,n.staticSearchOptions,n.context.parameters);s.log("map -> download");o.records.download(n.context,t).success(function(t){var f;n.records=t;n.error="";n.nhits=t.length;for(var i=new L.LayerGroup,e=new L.LatLngBounds,u=new L.FeatureGroup,r=0;r<t.length;r++)f=t[r],nt(f,i,e,u);n.layerGroup&&n.map.removeLayer(n.layerGroup);i.addLayer(u);i.addTo(n.map);n.layerGroup=i;n.initialLoading=!1}).error(function(t){n.error=t.error;n.initialLoading=!1})},nt=function(t,i,r,u,f){var e,o=f,h,c,y,s;if("value"===n.colorBy&&(h=t.fields[l.field],h&&(o=g(h))),v){if(!t.fields[v])return;e=t.fields[v];"Point"===e.type&&angular.isDefined(t.geometry)&&(e=t.geometry)}else{if(!t.geometry)return;e=t.geometry}"Point"==e.type?(c=new L.LatLng(e.coordinates[1],e.coordinates[0]),y=p(c,o),y.on("click",function(n){a(n.target.getLatLng(),e,null,t)}),u.addLayer(y),r.extend(c)):(s=o?new L.GeoJSON(e,{style:function(n){var t={radius:3,weight:1,opacity:.9,fillOpacity:.5,color:o};return t.fillColor=o,"LineString"===n.geometry.type||"MultiLineString"===n.geometry.type?(t.weight=5,t.color=o):t.color="#fff",t}}):new L.GeoJSON(e),s.on("click",function(){a(L.latLng(t.geometry.coordinates[1],t.geometry.coordinates[0]),e,t.recordid,t)}),i.addLayer(s),r.extend(s.getBounds()))};n.$watch("context.parameters",function(t,i){if(t!==i&&!n.initialLoading)return s.log("map -> searchOptions watch -> refresh records"),!t["geofilter.polygon"]&&i["geofilter.polygon"]?void(n.mapViewFilter=!1):!i["geofilter.polygon"]&&t["geofilter.polygon"]?void(n.mapViewFilter=!0):void y(!n.mapViewFilter)},!0);"aggregation"===n.colorBy&&n.$watch("colorByContext.parameters",function(){n.map&&y(!1)},!0);n.$watch("mapContext.location",function(){n.map&&y(!1)},!0);var y=function(t){var f=200,e=5e5,u=5e5,i=function(t){"aggregation"===n.colorBy?ot():"value"===n.colorBy||t.count<f||n.map.getZoom()===n.map.getMaxZoom()?st():t.count<e?t.geometries.Point&&t.geometries.Point>t.count/2?d(t.count<=u):ft():d(t.count<=u)},r={without_bbox:!t};t||(r["geofilter.polygon"]=ODS.GeoFilter.getBoundsAsPolygonParameter(n.map.getBounds()));jQuery.extend(r,n.staticSearchOptions,n.context.parameters);o.records.boundingbox(n.context,r).success(function(r){var u,f;t?r.bbox.length>0?(u=n.map.getBounds(),n.map.fitBounds([[r.bbox[1],r.bbox[0]],[r.bbox[3],r.bbox[2]]]),f=n.map.getBounds(),angular.equals(u,f)&&i(r)):i(r):i(r)})},tt=function(t){var i=t.getSize();i.x>0&&i.y>0&&(n.mapContext.location=w.getLocationParameterFromMap(t),n.mapViewFilter&&(n.context.parameters["geofilter.polygon"]=ODS.GeoFilter.getBoundsAsPolygonParameter(t.getBounds())))},ht=n.$watch("[context.dataset, colorByContext.dataset]",function(t){var c,i,f,u,a;if(t[0]&&t[0].datasetid&&("aggregation"!==n.colorBy||t[1]&&t[1].datasetid)){for("aggregation"===n.colorBy?l={context:n.colorByContext,localkey:n.colorByAggregationKey||n.colorByKey,remotekey:n.colorByKey,expr:n.colorByExpression,func:n.colorByFunction,ranges:n.colorByRanges.split(","),colors:n.colorByRangesColors.split(",")}:"value"===n.colorBy&&(l={field:n.colorByField,ranges:n.colorByRanges.split(","),colors:n.colorByRangesColors.split(",")}),t=t[0],n.mapViewFilter=n.context.parameters["geofilter.polygon"]?!0:!1,n.staticMap="true"===n.isStatic||"true"===n.context.parameters.static,c=n.$watch("initMap",function(){n.initMap&&(c(),n.initMap(t,n.embedMode,h.basemaps,e,h.mapGeobox,n.mapContext.basemap,n.staticMap,h.mapPrependAttribution,h.language))}),ht(),n.staticSearchOptions={rows:n.recordLimit,dataset:n.context.dataset.datasetid,format:"json"},i=0;i<t.fields.length;i++)if(f=t.fields[i],"geo_shape"===f.type){v=f.name;break}u={};t.extra_metas&&t.extra_metas.visualization&&(u=t.extra_metas.visualization);n.markerColor=u.map_marker_color||"#29398C";p=function(t,i){return new L.VectorMarker(t,{color:i||n.markerColor,icon:angular.element('<div><?xml version="1.0" encoding="UTF-8" standalone="no"?><svg width="19px" height="19px" viewBox="0 0 19 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">    <path d="M18,9.50004182 C18,14.1944851 14.1944015,18.0000836 9.49995818,18.0000836 C4.80551469,18.0000836 0.99991635,14.1944851 0.99991635,9.50004182 C0.99991635,4.80559834 4.80551469,1 9.49995818,1 C14.1944015,1 18,4.80559834 18,9.50004182 L18,9.50004182 Z" id="path8568" fill="#000000"><\/path>    <rect style="opacity: 0" x="0" y="0" width="19" height="19"><\/rect><\/svg><\/div>'),size:4,marker:!u.map_marker_hidemarkershape})};s.log("map -> dataset watch -> refresh records");a=n.$watch("map",function(t){if(t){n.$watch("mapViewFilter",function(t,i){t!==i&&(t?n.context.parameters["geofilter.polygon"]=ODS.GeoFilter.getBoundsAsPolygonParameter(n.map.getBounds()):n.context.parameters["geofilter.polygon"]&&delete n.context.parameters["geofilter.polygon"])});var i=function(){var t=r.defer(),i;return n.context.parameters.mapviewport?("("===n.context.parameters.mapviewport.substring(0,1)&&(n.context.parameters.mapviewport=ODS.GeoFilter.getBoundsAsBboxParameter(ODS.GeoFilter.getPolygonParameterAsBounds(n.context.parameters.mapviewport))),t.resolve(ODS.GeoFilter.getBboxParameterAsBounds(n.context.parameters.mapviewport))):n.context.parameters["geofilter.polygon"]?t.resolve(ODS.GeoFilter.getPolygonParameterAsBounds(n.context.parameters["geofilter.polygon"])):(i={},jQuery.extend(i,n.staticSearchOptions,n.context.parameters),o.records.boundingbox(n.context,i).success(function(n){n.count>0?t.resolve([[n.bbox[1],n.bbox[0]],[n.bbox[3],n.bbox[2]]]):t.resolve([[-60,-180],[80,180]])})),t.promise};(function(){var u=r.defer(),f,e;return n.mapContext.location?(s.log("Location found"),f=w.getCenterFromLocationParameter(n.mapContext.location),e=w.getZoomFromLocationParameter(n.mapContext.location),s.log(f,e),t.setView(f,e),y(!1),u.resolve()):(s.log("Use boundsRetrieval"),i(n.context.dataset).then(function(i){n.context.parameters.mapviewport&&(s.log("Deleted mapviewport"),delete n.context.parameters.mapviewport);s.log(i);t.fitBounds(i);u.resolve()})),u.promise})().then(function(){s.log("First onViewportMove");tt(n.map);n.map.on("moveend",function(t){tt(t.target);n.$$phase||n.$root.$$phase||n.$apply()})});h.basemaps.length>1&&n.map.on("baselayerchange",function(t){n.mapContext.basemap=t.layer.basemapId;n.$$phase||n.$root.$$phase||n.$apply()});a()}})}},!0)}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsMapLegend",[function(){return{restrict:"E",template:'<div class="odswidget odswidget-map-legend" ng-class="{\'odswidget-map-legend--extended\': extended}" ng-if="layers.length > 0">   <div class="odswidget-map-legend__header">       <div class="odswidget-map-legend__title" ng-class="{\'odswidget-map-legend__title--toggleable\': getCategoriesCount(selectedLayer) > 6}" ng-click="toggle()">           {{ selectedLayer.config.captionTitle || selectedLayer.config.title || selectedLayer.config.context.dataset.metas.title}}           <i ng-show="getCategoriesCount(selectedLayer) > 6 && !extended" class="odswidget-map-legend__title-toggle odsui-top"><\/i>           <i ng-show="getCategoriesCount(selectedLayer) > 6 && extended" class="odswidget-map-legend__title-toggle odsui-bottom"><\/i>       <\/div>       <div ng-show="selectedLayer.properties.legendLabel" ng-bind="selectedLayer.properties.legendLabel" class="odswidget-map-legend__label">       <\/div>   <\/div>   <div ng-switch="selectedLayer.config.display">       <div ng-switch-when="categories" class="odswidget-map-legend__categories-container">           <div ng-if="getCategoriesCount(selectedLayer) > 6 && !extended" class="odswidget-map-legend__categories--condensed">              <div ng-repeat="(value, color) in getCategories(selectedLayer, 6)" class="odswidget-map-legend__categories--condensed__item">                  <div style="background-color: {{color}}" class="odswidget-map-legend__categories__color-block"><\/div>              <\/div>           <\/div>           <div ng-if="getCategoriesCount(selectedLayer) <= 6 || extended" class="odswidget-map-legend__categories--extended">               <div ng-repeat="(value, color) in getCategories(selectedLayer)" class="odswidget-map-legend__categories--extended__item">                   <div class="odswidget-map-legend__categories--extended__item-color">                       <div style="background-color: {{color}}" class="odswidget-map-legend__categories__color-block"><\/div>                   <\/div>                   <div class="odswidget-map-legend__categories--extended__item-value" ng-bind="value"><\/div>               <\/div>               <div ng-show="selectedLayer.config.color.otherCategories" class="odswidget-map-legend__categories--extended__item">                   <div class="odswidget-map-legend__categories--extended__item-color">                       <div style="background-color: {{selectedLayer.config.color.otherCategories}}" class="odswidget-map-legend__categories__color-block"><\/div>                   <\/div>                   <div class="odswidget-map-legend__categories--extended__item-value--others">Others<\/div>               <\/div>           <\/div>       <\/div>       <div ng-switch-when="choropleth" class="odswidget-map-legend__choropleth-container">           <div ng-repeat="bound in selectedLayer.properties.bounds" class="odswidget-map-legend__choropleth__item">               <div class="odswidget-map-legend__choropleth__item-color">                   <div style="background-color: {{ bound.color }}" class="odswidget-map-legend__choropleth__color-block"><\/div>               <\/div>               <div class="odswidget-map-legend__choropleth__item-range">                   <div class="odswidget-map-legend__choropleth__item-range__bound">                       {{ bound.lowerBound|number:selectedLayer.properties.floatLength }}                       <i aria-hidden="true" class="fa fa-long-arrow-right odswidget-map-legend__choropleth__item-range__bound-arrow"><\/i>                   <\/div>                   <div class="odswidget-map-legend__choropleth__item-range__bound">                       {{ bound.upperBound|number:selectedLayer.properties.floatLength }}                   <\/div>               <\/div>           <\/div>       <\/div>       <div ng-switch-when="heatmap" class="odswidget-map-legend__simple-container">           <div><span translate ng-bind="layer.func"><\/div>            <div style="background: {{selectedLayer.properties.gradient}}" class="odswidget-map-legend__simple__color-block"><\/div>           <div class="odswidget-map-legend__simple__color-block-subtext">               <div class="odswidget-map-legend__simple__color-block-subtext-left" translate>Low<\/div>               <div class="odswidget-map-legend__simple__color-block-subtext-right" translate>High<\/div>           <\/div>       <\/div>       <div ng-switch-default class="odswidget-map-legend__simple-container">           <div style="background-color: {{selectedLayer.config.color}}" class="odswidget-map-legend__simple__color-block"><\/div>       <\/div>   <\/div>   <div ng-if="layers.length > 1" class="odswidget-map-legend__pagination">       <button title="Previous" translate="title" class="odswidget-map-legend__pagination-button" ng-show="selectedIndex > 0" ng-click="previous()">           <i class="odsui-left" aria-hidden="true"><\/i>       <\/button>       {{selectedIndex+1}}/{{layers.length}}       <button title="Next" translate="title" class="odswidget-map-legend__pagination-button" ng-show="selectedIndex < layers.length - 1" ng-click="next()">           <i class="odsui-right"aria-hidden="true"><\/i>       <\/button>   <\/div><\/div>',scope:{mapConfig:"="},controller:["$scope","MapHelper",function(n,t){n.extended=!1;n.selectedLayer=null;n.selectedIndex=0;n.toggle=function(){if(n.getCategoriesCount(n.selectedLayer)<=6)return void(n.extended=!1);n.extended=!n.extended};n.select=function(t){n.selectedLayer=n.layers[t];n.getCategoriesCount(n.selectedLayer)<=6&&n.extended&&n.toggle()};n.previous=function(){n.selectedIndex-=1;n.select(n.selectedIndex)};n.next=function(){n.selectedIndex+=1;n.select(n.selectedIndex)};n.getCategoriesCount=function(n){if(angular.isUndefined(n.config.color.categories))return 1;var t=Object.keys(n.config.color.categories).length;return n.config.otherCategories&&(t+=1),t};n.getCategories=function(n,t){var i,r,u,f;if(t){for(r={},u=Object.keys(n.config.color.categories).sort(ODS.ArrayUtils.sortNumbers),i=0;i<Math.min(t,u.length);i++)f=u[i],r[f]=n.config.color.categories[f];return r}return n.config.color.categories};var f=function(n){var i,t=0;return angular.forEach(n,function(n){angular.forEach(n,function(n,r){"color"!==r&&Math.floor(n)!==n&&(i=n.toString().split(".")[1].length)>t&&(t=i)})}),t>3&&(t=3),t},e=function(n,t,r){return 0!==r?(angular.forEach(t,function(u){u.lowerBound=i(t,n,u.lowerBound,r);u.upperBound=i(t,n,u.upperBound,r,!0)}),t):t},i=function(n,t,i,u,f){i=i.toString();var e;return i===t?i:f&&Math.floor(i)!=i?r(i,u):0===u||Math.floor(i)==i||f?i:(e=i.length-i.split(".")[1].length,i=r(i,u),i=(Number(i.replace(".",""))+1).toString(),e=i.length-(i.length-e)-1,i=[i.slice(0,e),".",i.slice(e)].join(""))},r=function(n,t){var i=n.length-n.split(".")[1].length;return n.split(".")[1].length<t?n+="0".repeat(t-n.split(".")[1].length):n=n.slice(0,i+t),n},u=function(){var i=[];n.mapConfig.groups.forEach(function(n){n.displayed&&n.layers.forEach(function(n){var r,u;if(n.caption&&(angular.isString(n.color)||"field"!==n.color.type))if(r={},i.push({config:n,properties:r}),r.legendLabel=t.getLayerLegendLabel(n),"choropleth"===n.display)t.getDatasetFieldBoundMin(n.context,n.color.field).then(function(i){u=i;var s=Object.keys(n.color.ranges).map(t.boundAsNumber).sort(ODS.ArrayUtils.sortNumbers),o=[];s.forEach(function(i,r){var f=!0;i=t.boundAsNumber(i);angular.forEach(n.color.ranges,function(n,t){i==t&&f&&(0===r?o.push({color:n,lowerBound:u,upperBound:i}):o.push({color:n,lowerBound:s[r-1],upperBound:i}),f=!1)})});r.floatLength=f(o);o=e(u,o,r.floatLength);r.bounds=o});else if("heatmap"===n.display){var o=Object.keys(n.color.steps).map(parseFloat).sort(ODS.ArrayUtils.sortNumbers),s=o.map(function(t){return n.color.steps[t]}),h="linear-gradient(to right, "+s.join(",")+")";r.gradient=h}})});n.layers=i;0===n.layers.length?(n.selectedIndex=0,n.selectedLayer=null):-1===n.layers.indexOf(n.selectedLayer)&&(n.selectedIndex=0,n.select(0));null===n.selectedLayer&&i.length>0&&(n.selectedIndex=0,n.select(0))};u();n.$watchCollection(function(){return n.mapConfig.groups.map(function(n){return n.displayed})},function(t,i){var r,f;angular.isDefined(t)&&angular.isDefined(i)&&!angular.equals(t,i)&&(r=null,(n.selectedLayer&&(r=n.selectedLayer.config._runtimeId),u(),n.layers.length)&&(f=0,r&&n.layers.forEach(function(t){t.config._runtimeId===r&&(n.selectedIndex=f,n.select(n.selectedIndex));f++})))})}]}}])}(),function(){"use strict";var n=angular.module("ods-widgets");n.directive("odsMapSearchBox",["AlgoliaPlaces","MapHelper",function(n,t){return{restrict:"E",template:'<div class="odswidget odswidget-map-search-box" ng-class="{\'odswidget-map-search-box--datasearch\': dataSearchActive}">   <div class="odswidget-map-search-box__box-wrapper"        ng-class="{\'odswidget-map-search-box__box-wrapper--datasearch\': dataSearchActive}">       <input type="text"               class="odswidget-map-search-box__box"              ng-class="{\'odswidget-map-search-box__box--datasearch\': dataSearchActive}"              ng-model="userQuery"               ng-change="runQuery(userQuery)"               ng-keydown="handleKeyDown($event)">       <button type="button" class="odswidget-map-search-box__box-cancel" ng-click="resetSearch()" ng-show="userQuery || dataSearchActive">           <i class="fa fa-times odswidget-map-search-box__close-search-icon"><\/i>       <\/button>   <\/div>   <ul class="odswidget-map-search-box__suggestions" ng-if="!dataSearchActive && userQuery">       <li ng-show="userQuery"           ng-click="runDataSearch(userQuery)"           ng-class="[\'odswidget-map-search-box__search-suggestion\', {\'odswidget-map-search-box__search-suggestion--selected\': selectedIndex === 0}]">           <i class="fa fa-search"><\/i> Search {{userQuery}} in displayed data       <\/li>       <li ng-repeat="suggestion in suggestions"            ng-click="moveToSuggestion(suggestion, $index + 1)"           ng-class="[\'odswidget-map-search-box__suggestion\', {\'odswidget-map-search-box__suggestion--selected\': selectedIndex === $index + 1}]">           <i ng-class="[\'odswidget-map-search-box__suggestion-icon\', getSuggestionIcon(suggestion)]"><\/i>           <span class="odswidget-map-search-box__suggestion-name" ng-bind-html="suggestion._highlightResult.locale_names[0].value"><\/span>           <span class="odswidget-map-search-box__suggestion-localization" ng-bind-html="getLocalization(suggestion)"><\/span>       <\/li>   <\/ul>   <div class="odswidget-map-search-box__data-search" ng-if="dataSearchActive">       <ods-spinner ng-if="dataSearchWorking"><\/ods-spinner>       <ul ng-if="!dataSearchWorking && datasetSearchDatasetsCount > 1" class="odswidget-map-search-box__data-search__datasets">           <li ng-repeat="result in dataSearchResults"                ng-click="selectResult(result)"               class="odswidget-map-search-box__data-search__dataset"               ng-class="{\'odswidget-map-search-box__data-search__dataset--active\': selectedResult === result}">               <div class="odswidget-map-search-box__data-search__dataset-title" ng-bind="::result.context.dataset.metas.title"><\/div>               <div class="odswidget-map-search-box__data-search__dataset-count">                   {{result.nhits}} items               <\/div>           <\/li>       <\/ul>       <ul ng-if="!dataSearchWorking && datasetSearchDatasetsCount > 0" class="odswidget-map-search-box__data-search__results">           <li ng-repeat="record in currentResults"                class="odswidget-map-search-box__data-search__result"               ods-tooltip               ods-tooltip-template="getResultPreviewTemplate(selectedResult.context.dataset, record)"               ng-click="moveToDataRecord(selectedResult.context.dataset, record)">               <i class="fa fa-map-marker odswidget-map-search-box__data-search__result-icon"><\/i>               <span class="odswidget-map-search-box__data-search__result-empty" ng-if="getResultTitle(selectedResult.context.dataset, record) === null" translate>Empty<\/span>               <span ng-if="getResultTitle(selectedResult.context.dataset, record) !== null">{{getResultTitle(selectedResult.context.dataset, record)}}<\/span>           <\/li>       <\/ul>       <div class="odswidget-map-search-box__data-search__no-results" ng-if="!dataSearchWorking && datasetSearchDatasetsCount === 0">           No results found for your search       <\/div>       <div class="odswidget-map-search-box__data-search__pagination" ng-if="!dataSearchWorking && datasetSearchDatasetsCount > 0">           <div class="odswidget-map-search-box__data-search__pagination-counter">               {{ selectedResult.nhits }} results           <\/div>           <div class="odswidget-map-search-box__data-search__pagination-pages">               {{currentResultsStartIndex+1}}               -               {{selectedResult.nhits|min:(currentResultsStartIndex+11)}}               <button type="button"                        ng-click="previousResultPage()"                        ng-disabled="currentResultsStartIndex === 0"                       class="odswidget-map-search-box__data-search__pagination-button">                   <i class="fa fa-chevron-left"><\/i>               <\/button>               <button type="button"                        ng-click="nextResultPage()"                        ng-disabled="currentResultsStartIndex+10 >= selectedResult.nhits"                       class="odswidget-map-search-box__data-search__pagination-button">                   <i class="fa fa-chevron-right"><\/i>               <\/button>           <\/div>       <\/div>   <\/div><\/div>',require:"^odsMap",scope:{},link:function(i,r,u,f){i.suggestions=[];i.selectedIndex=0;i.runQuery=function(r){var u=t.getLocationStructure(f.getCurrentPosition());n(r,u.center.join(",")).then(function(n){i.selectedIndex=0;i.suggestions=n.data.hits},function(){})};i.resetSearch=function(){f.resetMapDataFilter()};f.registerResetCallback(function(){i.suggestions=[];i.userQuery="";i.stopDataSearch()});i.$on("$destroy",i.resetSearch);i.moveToSuggestion=function(n,t){angular.isDefined(t)&&(i.selectedIndex=t);var r;r=n.is_city?14:n.is_country?5:n.is_highway?18:21;f.moveMap(n._geoloc,r)};i.moveToDataRecord=function(n,t){var i,r,u=n.getFieldsForType("geo_shape");u.length?(i=u[0].name,r=!0):(i=n.getFieldsForType("geo_point_2d")[0].name,r=!1);r?console.log("TODO move to data record for shapes"):f.moveMap(t.fields[i],21)};i.runDataSearch=function(n){f.applyMapDataFilter(n);i.startDataSearch(n,f.getActiveContexts())}},controller:["$scope","$q","$compile","ODSAPI",function(n,t,i,r){var e={RETURNKEY:13,ESCAPE:27,UPARROW:38,DOWNARROW:40},u,f,o;n.handleKeyDown=function(t){switch(t.keyCode){case e.UPARROW:n.selectedIndex=Math.max(0,n.selectedIndex-1);t.preventDefault();break;case e.DOWNARROW:n.selectedIndex=Math.min(n.suggestions.length,n.selectedIndex+1);t.preventDefault();break;case e.ESCAPE:n.resetSearch();t.preventDefault();break;case e.RETURNKEY:0===n.selectedIndex?n.runDataSearch(n.userQuery):n.moveToSuggestion(n.suggestions[n.selectedIndex-1]);t.preventDefault()}};n.dataSearchActive=!1;n.dataSearchWorking=!1;n.startDataSearch=function(i,f){var o,e;n.currentResults=[];n.dataSearchActive=!0;n.dataSearchWorking=!0;o=f.slice(0);n.dataSearchResults=o.map(function(n){return{context:n}}).sort(function(n,t){return n.context.dataset.metas.title>t.context.dataset.metas.title});e=[];angular.isArray(u)&&u.forEach(function(n){n.resolve()});u=[];n.dataSearchResults.forEach(function(n){var i=n.context,u=t.defer(),f=angular.extend({},i.parameters,{rows:0}),o=r.records.search(i,f,u.promise).then(function(t){var i=t.data;i.parameters.dataset;n.nhits=i.nhits});e.push(o)});t.all(e).then(function(){n.dataSearchWorking=!1;n.dataSearchResults=n.dataSearchResults.filter(function(n){return n.nhits>0});n.datasetSearchDatasetsCount=Object.keys(n.dataSearchResults).length;n.dataSearchResults.length&&n.selectResult(n.dataSearchResults[0])})};f=null;n.currentResultsStartIndex=0;n.selectResult=function(t){n.selectedResult=t;n.currentResultsStartIndex=0;o(t)};o=function(i){f&&f.resolve();f=t.defer();var u=angular.extend({},i.context.parameters,{rows:10,start:n.currentResultsStartIndex});r.records.search(i.context,u,f.promise).then(function(t){f=null;n.currentResults=t.data.records})};n.previousResultPage=function(){n.currentResultsStartIndex-=10;o(n.selectedResult)};n.nextResultPage=function(){n.currentResultsStartIndex+=10;o(n.selectedResult)};n.stopDataSearch=function(){angular.isArray(u)&&u.forEach(function(n){n.resolve()});u=[];n.dataSearchActive=!1;n.dataSearchWorking=!1};n.getSuggestionIcon=function(n){return n._tags.indexOf("railway")>=0?"fa fa-train":n._tags.indexOf("aeroway")>=0?"fa fa-plane":"fa fa-map-marker"};n.getLocalization=function(n){var t="";return["city","administrative","country"].forEach(function(i){angular.isDefined(n[i])&&(t.length>0&&(t+=", "),t+=n[i])}),t};n.getResultTitle=function(n,t){var u=n.getExtraMeta("explore","map_tooltip_title"),r,i;if(u&&angular.isDefined(t.fields[u]))return t.fields[u];if(r=n.getFieldsForType("text"),r.length>0&&angular.isDefined(t.fields[r[0].name]))return t.fields[r[0].name];for(i=0;i<n.fields.length;i++)if(angular.isDefined(t.fields[n.fields[i]]))return t.fields[n.fields[i]];return null};n.getResultPreviewTemplate=function(t,r){var f=[],u,e;return t.fields.forEach(function(n){f.length<3&&["text","int","double","date","datetime"].indexOf(n.type)>=0&&angular.isDefined(r.fields[n.name])&&f.push({label:n.label,value:r.fields[n.name]})}),u=n.$new(!0),u.items=f,e=i('<ul class="odswidget-map-search-box__data-search__result-preview">   <li ng-repeat="item in items" class="odswidget-map-search-box__data-search__result-preview-line">       <div class="odswidget-map-search-box__data-search__result-preview-label">{{item.label}}<\/div>       <div class="odswidget-map-search-box__data-search__result-preview-value">{{item.value}}<\/div>   <\/li><\/ul>')(u),u.$apply(),e.html()}}]}}]);n.service("AlgoliaPlaces",["$http","ODSWidgetsConfig",function(n,t){var i={};return t.algoliaPlacesApplicationId&&(i.headers={"X-Algolia-Application-Id":t.algoliaPlacesApplicationId,"X-Algolia-API-Key":t.algoliaPlacesAPIKey}),function(r,u){var f=angular.extend({},i);return f.params={query:r,aroundLatLngViaIP:!1,language:t.language||"en",hitsPerPage:5},u&&(f.params.aroundLatLng=u),n.get("https://places-dsn.algolia.net/1/places/query",f)}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsMapTooltip",["$compile","$templateCache",function(n,t){return{restrict:"E",transclude:!0,template:'<div class="odswidget-map-tooltip">   <ods-spinner class="odswidget-map-tooltip__spinner" ng-hide="records"><\/ods-spinner>   <h2 ng-show="records.length > 1" class="odswidget-map-tooltip__scroll-control ng-leaflet-tooltip-cloak">       <i class="odswidget-map-tooltip__scroll-left fa fa-chevron-left" ng-click="moveIndex(-1)"><\/i>       <span ng-bind="(selectedIndex+1)+\'/\'+records.length" ng-click="moveIndex(1)"><\/span>       <i class="odswidget-map-tooltip__scroll-right fa fa-chevron-right" ng-click="moveIndex(1)"><\/i>   <\/h2>   <div class="ng-leaflet-tooltip-cloak odswidget-map-tooltip__limited-results-warning" ng-show="records && records.length == RECORD_LIMIT" translate>(limited to the first {{RECORD_LIMIT}} records)<\/div>   <div ng-repeat="record in records" ng-if="$index == selectedIndex" class="odswidget-map-tooltip__record">       <div ng-if="!template" ng-include src="\'default-tooltip\'"><\/div>       <div ng-if="template" ng-include src="\'custom-tooltip-\'+context.dataset.datasetid"><\/div>   <\/div><\/div>',scope:{shape:"=",context:"=",recordid:"=",map:"=",template:"@",gridData:"=",geoDigest:"@",tooltipSort:"@"},replace:!0,link:function(n,i,r){var u=function(t){t.popup._content===i[0]&&(n.selectedShapeLayer&&n.map.removeLayer(n.selectedShapeLayer),n.map.off("popupclose",u),n.$destroy())};n.map.on("popupclose",u);n.unCloak=function(){jQuery(".ng-leaflet-tooltip-cloak",i).removeClass("ng-leaflet-tooltip-cloak")};r.template&&""!==r.template?t.put("custom-tooltip-"+n.context.dataset.datasetid,r.template):t.put("default-tooltip",'<div class="infoPaneLayout"><h2 class="odswidget-map-tooltip__header" ng-show="!!getTitle(record)" ng-bind="getTitle(record)"><\/h2><dl class="odswidget-map-tooltip__record-values">    <dt ng-repeat-start="field in context.dataset.fields|fieldsForVisualization:\'map\'|fieldsFilter:context.dataset.extra_metas.visualization.map_tooltip_fields"         ng-show="record.fields[field.name]|isDefined"        class="odswidget-map-tooltip__field-name">        {{ field.label }}    <\/dt>    <dd ng-repeat-end         ng-switch="field.type"         ng-show="record.fields[field.name]|isDefined"        class="odswidget-map-tooltip__field-value">        <span ng-switch-when="geo_point_2d">            <ods-geotooltip width="300" height="300" coords="record.fields[field.name]">{{ record.fields|formatFieldValue:field }}<\/ods-geotooltip>        <\/span>        <span ng-switch-when="geo_shape">            <ods-geotooltip width="300" height="300" geojson="record.fields[field.name]">{{ record.fields|formatFieldValue:field }}<\/ods-geotooltip>        <\/span>        <span ng-switch-when="file">            <div ng-if="!context.dataset.isFieldAnnotated(field, \'has_thumbnails\')" ng-bind-html="record.fields|formatFieldValue:field"><\/div>            <div ng-if="context.dataset.isFieldAnnotated(field, \'has_thumbnails\')" ng-bind-html="record.fields[field.name]|displayImageValue:context.dataset.datasetid" style="text-align: center;"><\/div>        <\/span>        <span ng-switch-default title="{{record.fields|formatFieldValue:field}}" ng-bind-html="record.fields|formatFieldValue:field|imagify|videoify|prettyText|nofollow"><\/span>    <\/dd><\/dl><\/div>')},controller:["$scope","$filter","ODSAPI",function(n,t,i){var r,u;n.RECORD_LIMIT=100;n.records=[];n.selectedIndex=0;r=n.tooltipSort;!r&&n.context.dataset.getExtraMeta("visualization","map_tooltip_sort_field")&&(r=(n.context.dataset.getExtraMeta("visualization","map_tooltip_sort_direction")||"")+n.context.dataset.getExtraMeta("visualization","map_tooltip_sort_field"));n.moveIndex=function(t){var i=(n.selectedIndex+t)%n.records.length;i<0&&(i=n.records.length+i);n.selectedIndex=i};u=function(){function f(t){var i,r,u,f;t.length>0?(n.selectedIndex=0,n.records=t,n.unCloak(),r=n.context.dataset.getFieldsForType("geo_shape"),(r.length&&(i=r[0].name),i&&n.gridData&&("Polygon"===n.gridData["ods:geo_type"]||"LineString"===n.gridData["ods:geo_type"]||"MultiPolygon"===n.gridData["ods:geo_type"]||"MultiLineString"===n.gridData["ods:geo_type"]))&&(u=t[0],u.fields[i]&&(f=u.fields[i],"Point"!==f.type&&(n.selectedShapeLayer=L.geoJson(f,{fill:!1,color:"#CC0000",opacity:1,dashArray:[5],weight:2}),n.map.addLayer(n.selectedShapeLayer))))):n.map.closePopup()}var t={format:"json",rows:n.RECORD_LIMIT},e=null,u;n.shape&&(e=n.shape.type);n.recordid&&"Point"!==e?t.q="recordid:'"+n.recordid+"'":n.geoDigest?t.geo_digest=n.geoDigest:n.gridData?null!==n.gridData["ods:geo_grid"]?t.geo_grid=n.gridData["ods:geo_grid"]:t.geo_digest=n.gridData["ods:geo_digest"]:n.shape&&ODS.GeoFilter.addGeoFilterFromSpatialObject(t,n.shape);u={};angular.extend(u,n.context.parameters,t);r?(u.sort=r,i.records.search(n.context,u).success(function(n){f(n.records)})):i.records.download(n.context,u).success(f)};n.$watch("context.parameters",function(){u()},!0);n.$apply();n.getTitle=function(t){if(n.context.dataset.extra_metas&&n.context.dataset.extra_metas.visualization&&n.context.dataset.extra_metas.visualization.map_tooltip_title){var i=n.context.dataset.extra_metas.visualization.map_tooltip_title;if(angular.isDefined(t.fields[i])&&""!==t.fields[i])return t.fields[i]}return null};n.fields=angular.copy(n.context.dataset.fields)}]}}])}(),function(){"use strict";var n=angular.module("ods-widgets");n.directive("odsMap",["URLSynchronizer","MapHelper","ModuleLazyLoader","ODSWidgetsConfig","MapLayerRenderer","translate","$q","$timeout",function(n,t,i,r,u,f,e,o){return{restrict:"EA",scope:{context:"=",syncToUrl:"@",syncToObject:"=",location:"@",basemap:"@",staticMap:"@",noRefit:"@",autoResize:"@",autoGeolocation:"@",toolbarDrawing:"@",toolbarGeolocation:"@",toolbarFullscreen:"@",scrollWheelZoom:"@",minZoom:"@",maxZoom:"@",displayControl:"=?",displayControlSingleLayer:"=?",searchBox:"=?",displayLegend:"=?",mapConfig:"=?",dynamicConfig:"=?"},transclude:!0,template:'<div class="odswidget odswidget-map">    <div class="odswidget odswidget-map__map" ng-class="{\'odswidget-map__map--with-searchbox\': searchBox, \'odswidget-map__map--with-display-control\': displayControl}"><\/div>    <div class="odswidget-overlay map odswidget-overlay--opaque" ng-show="initialLoading">        <ods-spinner><\/ods-spinner>    <\/div>    <div class="odswidget-map__loading" ng-show="loading">        <ods-spinner><\/ods-spinner>    <\/div>    <ods-map-display-control ng-if="displayControl && allContextsInitialized" single-layer="displayControlSingleLayer" map-config="mapConfig"><\/ods-map-display-control>    <ods-map-search-box ng-if="searchBox"><\/ods-map-search-box>    <ods-map-legend ng-if="displayLegend && allContextsInitialized" map-config="mapConfig"><\/ods-map-legend>    <div ng-transclude><\/div><\/div>',link:function(s,h,c){function y(){var n=$(".odswidget-map__map"),t;"true"===s.autoResize&&n.length>0&&(t=Math.max(200,$(window).height()-n.offset().top),n.height(t))}function a(){var n=e.defer(),i=t.MapConfiguration.getActiveContextList(s.mapConfig),r=i.map(function(n){return n.wait()});return e.all(r).then(function(){k();n.resolve()}),n.promise}var p=angular.element(h.children()[0]),b,v,k;c.id&&p.attr("id",c.id);c.style&&p.attr("style",c.style);c.class&&p.addClass(c.class);var d,g,w,l=s.staticMap&&"true"===s.staticMap.toLowerCase(),nt=s.noRefit&&"true"===s.noRefit.toLowerCase(),tt=!(s.toolbarDrawing&&"false"===s.toolbarDrawing.toLowerCase());(d=angular.isUndefined(s.toolbarGeolocation)?!angular.isDefined(s.mapConfig.toolbarGeolocation)||!!s.mapConfig.toolbarGeolocation:!(s.toolbarGeolocation&&"false"===s.toolbarGeolocation.toLowerCase()),g=angular.isUndefined(s.toolbarFullscreen)?!angular.isDefined(s.mapConfig.toolbarFullscreen)||!!s.mapConfig.toolbarFullscreen:!(s.toolbarFullscreen&&"false"===s.toolbarFullscreen.toLowerCase()),w=angular.isUndefined(s.autoGeolocation)?!!s.mapConfig.autoGeolocation:s.autoGeolocation&&"true"===s.autoGeolocation.toLowerCase(),angular.isUndefined(s.displayControl)&&(s.displayControl=s.mapConfig.layerSelection),angular.isUndefined(s.displayLegend)&&(s.displayLegend=!0),angular.isUndefined(s.displayControlSingleLayer)&&(s.displayControlSingleLayer=s.mapConfig.singleLayer),angular.isUndefined(s.searchBox)&&(s.searchBox=s.mapConfig.searchBox),s.context)&&(b=t.MapConfiguration.createLayerGroupConfiguration(),v=t.MapConfiguration.createLayerConfiguration(),b.layers.push(v),s.mapConfig.groups.push(b),v.context=s.context,s.context.wait().then(function(n){n&&t.MapConfiguration.setLayerDisplaySettingsFromDefault(v)}));"true"===s.autoResize&&($(window).on("resize",y),y());s.$on("invalidateMapSize",function(){s.map&&s.map.invalidateSize()});s.$on("mapFitBounds",function(n,t){s.map.fitBounds(t)});s.initialLoading=!0;s.mapContext=s.syncToObject?s.syncToObject:{};"true"===s.syncToUrl&&(n.addSynchronizedValue(s,"mapContext.location","location",!0),n.addSynchronizedValue(s,"mapContext.basemap","basemap"));s.location?s.mapContext.location=s.mapContext.location||s.location:s.mapConfig&&s.mapConfig.mapPresets&&s.mapConfig.mapPresets.location&&(s.mapContext.location=s.mapContext.location||s.mapConfig.mapPresets.location);s.basemap?s.mapContext.basemap=s.mapContext.basemap||s.basemap:s.mapConfig&&s.mapConfig.mapPresets&&s.mapConfig.mapPresets.basemap&&(s.mapContext.basemap=s.mapContext.basemap||s.mapConfig.mapPresets.basemap);i("leaflet").then(function(){var v={basemapsList:r.basemaps,worldCopyJump:!0,minZoom:2,basemap:s.mapContext.basemap,dragging:!l,keyboard:!l,prependAttribution:r.mapPrependAttribution,appendAttribution:r.mapAppendAttribution,maxBounds:[[-90,-180],[90,180]],zoomControl:!1,scrollWheelZoom:"false"!==s.scrollWheelZoom},n,p,i,ut,b,ft,et;if(s.minZoom&&(v.minZoom=s.minZoom),s.maxZoom&&(v.maxZoom=s.maxZoom),l&&(v.doubleClickZoom=!1,v.scrollWheelZoom=!1),y(),n=new L.ODSMap(h.children()[0].children[0],v),n.addControl(new L.Control.Scale),l||n.addControl(new L.Control.Zoom({position:"topright",zoomInTitle:f("Zoom in"),zoomOutTitle:f("Zoom out")})),g)try{window.self===window.top&&n.addControl(new L.Control.Fullscreen({title:{"false":f("View Fullscreen"),"true":f("Exit Fullscreen")}}))}catch(v){}window.location.pathname.startsWith("/map2/")||!r.mapGeobox||s.searchBox||l||(p=L.Control.geocoder({placeholder:f("Find a place..."),errorMessage:f("Nothing found."),geocoder:new L.Control.Geocoder.Nominatim({serviceUrl:"https://nominatim.openstreetmap.org/",geocodingQueryParams:{"accept-language":r.language||"en",polygon_geojson:!0}})}),p.markGeocode=function(t){if(n.fitBounds(t.bbox),t.properties.geojson){var i=L.geoJson(t.properties.geojson,{style:function(){return{opacity:0,fillOpacity:.8,fillColor:"orange",className:"leaflet-geocoder-highlight"}}});n.addLayer(i);o(function(){h.addClass("geocoder-highlight-on")},0);o(function(){h.removeClass("geocoder-highlight-on");n.removeLayer(i)},2500)}},n.addControl(p));d&&!l&&(i=new L.Control.Locate({position:"topright",maxZoom:18,strings:{title:f("Show me where I am"),popup:f("You are within {distance} {unit} from this point"),outsideMapBoundsMsg:f("You seem located outside the boundaries of the map")}}),n.addControl(i));(s.drawnItems=new L.FeatureGroup,n.addLayer(s.drawnItems),tt&&!l)&&(L.drawLocal.draw.toolbar.buttons.circle=f("Draw a circle to filter on"),L.drawLocal.draw.toolbar.buttons.polygon=f("Draw a polygon to filter on"),L.drawLocal.draw.toolbar.buttons.rectangle=f("Draw a rectangle to filter on"),L.drawLocal.draw.toolbar.actions={title:f("Cancel area filter"),text:f("Cancel")},L.drawLocal.draw.toolbar.undo={title:f("Delete last point"),text:f("Delete last point")},L.drawLocal.edit.toolbar.buttons={edit:f("Edit area filter."),editDisabled:f("No area filter to edit."),remove:f("Delete area filter."),removeDisabled:f("No area filter to delete.")},L.drawLocal.edit.toolbar.actions={save:{title:f("Apply"),text:f("Apply")},cancel:{title:f("Cancel editing, discards all changes."),text:f("Cancel")}},L.drawLocal.draw.handlers={circle:{tooltip:{start:f("Click and drag to draw circle")},radius:f("Radius")},marker:{tooltip:{start:f("Click map to place marker")}},polygon:{tooltip:{start:f("Click to start drawing shape"),cont:f("Click to continue drawing shape"),end:f("Click first point to close this shape")}},polyline:{error:"<strong>"+f("Error:")+"<\/strong> "+f("shape edges cannot cross!"),tooltip:{start:f("Click to start drawing line"),cont:f("Click to continue drawing line"),end:f("Click last point to finish line")}},rectangle:{tooltip:{start:f("Click and drag to draw rectangle")}},simpleshape:{tooltip:{end:f("Release mouse to finish drawing")}}},L.drawLocal.edit.handlers={edit:{tooltip:{text:f("Drag handles to edit shape, then apply")+"<br><em>"+f("Click cancel to undo changes")+"<\/em>"}},remove:{tooltip:{text:f("Click on a shape to delete it, then apply")}}},ut=new L.Control.Draw({edit:{featureGroup:s.drawnItems},draw:{polyline:!1,marker:!1,circle:{showRadius:!0,metric:!0,feet:!1}}}),n.options.drawControlTooltips=!0,n.addControl(ut));s.map=n,function(n){var u=e.defer(),f;return n?(f=t.getLocationStructure(n),s.map.setView(f.center,f.zoom),a().then(function(){c(!1)}),u.resolve(),w&&i&&i.locate()):a().then(function(){t.retrieveBounds(t.MapConfiguration.getActiveContextList(s.mapConfig,{geoOnly:!0,skipExcludedFromRefit:!0})).then(function(n){if(n)s.map.fitBounds(n);else{var f=t.getLocationStructure(r.defaultMapLocation);s.map.setView(f.center,f.zoom)}c(!1);u.resolve();w&&i&&i.locate()})}),u.promise}(s.mapContext.location).then(function(){s.initialLoading=!1;it(s.map);l||a().then(ot);s.map.on("moveend",function(n){s.$applyAsync?s.$applyAsync(function(){it(n.target)}):o(function(){it(n.target)})});s.$watch("mapContext.location",function(n,t){n!==t&&c(!1,!0)});s.allContextsInitialized=!1;a().then(function(){s.allContextsInitialized=!0});s.$watch(function(){var n=0;return angular.forEach(s.mapConfig.groups,function(t){angular.forEach(t.layers,function(t){t._loading&&n++})}),n},function(n){s.loading=!!n});s.$watch(function(){var n=[],i=[];return angular.forEach(t.MapConfiguration.getActiveContextList(s.mapConfig),function(t){n.push([t.name,t.parameters])}),angular.forEach(t.MapConfiguration.getActiveContextList(s.mapConfig,{skipExcludedFromRefit:!0}),function(n){i.push([n.name,n.parameters])}),[n,i,t.MapConfiguration.getVisibleLayerIds(s.mapConfig)]},function(n,t){n!==t&&(k(),c(!angular.equals(n[1],t[1])))},!0)});ft=function(){b=s.$watch(function(){return JSON.stringify(s.mapConfig,function(n,t){if("function"!=typeof t&&"$$"!==n.substring(0,2)&&"_"!==n[0]){if("context"===n)return{datasetId:t.dataset.datasetid,parameters:t.parameters};if(!(["mapPresets","singleLayer","toolbarGeolocation","toolbarFullscreen","autoGeolocation","layerSelection","searchBox","title","description","caption","captionTitle"].indexOf(n)>-1))return t}})},function(){c()})};et=function(){b&&b()};s.$watch("dynamicConfig",function(n){angular.isDefined(n)&&(n?ft():et())});r.basemaps.length>1&&s.map.on("baselayerchange",function(n){s.$evalAsync('mapContext.basemap = "'+n.layer.basemapId+'"');angular.forEach(s.mapConfig.groups,function(t){t.displayed&&angular.forEach(t.layers,function(t){"tiles"===t.display&&t._rendered&&(t._rendered.setMinZoom(n.layer.options.minZoom),t._rendered.setMaxZoom(n.layer.options.maxZoom))})})});var it=function(n){var i=n.getSize();i.x>0&&i.y>0&&(s.mapContext.location=t.getLocationParameter(n.getCenter(),n.getZoom()))},rt={},c=function(n,i){n=!nt&&n;var r=function(n){var i=[],t={};angular.forEach(s.mapConfig.groups,function(r){if(!r.displayed)return void angular.forEach(r.layers,function(n){n._currentRequestTimeout&&n._currentRequestTimeout.resolve();n._rendered&&(s.map.removeLayer(n._rendered),n._rendered=null)});angular.forEach(r.layers,function(r){r.showZoomMin&&r.showZoomMin>s.map.getZoom()||r.showZoomMax&&r.showZoomMax<s.map.getZoom()||n&&!u.doesLayerRefreshOnLocationChange(r)||(i.push(u.updateDataLayer(r,s.map)),t[r._runtimeId]=r)})});Object.keys(rt).forEach(function(n){if(angular.isUndefined(t[n])){var i=rt[n];i._currentRequestTimeout&&i._currentRequestTimeout.resolve();i._rendered&&(s.map.removeLayer(i._rendered),i._rendered=null)}});rt=t;e.all(i).then(function(){})};n?t.retrieveBounds(t.MapConfiguration.getActiveContextList(s.mapConfig,{geoOnly:!0,skipExcludedFromRefit:!0})).then(function(n){n&&n!==t.WORLD_BOUNDS?o(function(){var t=s.map.getBounds().toBBoxString();s.map.fitBounds(n);t===s.map.getBounds().toBBoxString()&&c(!1,!0)},0):r(i)}):r()},ot=function(){var r,n;s.map.on("draw:drawstart draw:editstart",function(){s.map.isDrawing=!0});s.map.on("draw:drawstop draw:editstop",function(){s.map.isDrawing=!1});r=function(n){n._path.setAttribute("style","cursor: pointer; pointer-events: auto;")};n=function(n){n._path.setAttribute("style","cursor: auto; pointer-events: none;")};s.map.on("draw:deletestart",function(){r(s.drawnItems.getLayers()[0])});s.map.on("draw:deleteend",function(){n(s.drawnItems.getLayers()[0])});s.map.on("draw:created",function(n){var t=n.layer;s.drawnItems.getLayers().length>0&&s.drawnItems.removeLayer(s.drawnItems.getLayers()[0]);s.drawnItems.addLayer(t);u(t,n.layerType);s.$apply()});s.map.on("draw:edited",function(n){var t=n.layers.getLayers()[0],i=f(t);u(t,i);s.$apply()});s.map.on("draw:deleted",function(){delete s.mapConfig.drawnArea;s.$apply()});var u=function(n,t){var r,i,u,f;"circle"===t?(r=n.getRadius(),i=n.getLatLng(),s.mapConfig.drawnArea={shape:"circle",coordinates:i.lat+","+i.lng+","+r}):(u=n.toGeoJSON(),f=ODS.GeoFilter.getGeoJSONPolygonAsPolygonParameter(u.geometry),s.mapConfig.drawnArea={shape:"polygon",coordinates:f})},f=function(n){return angular.isDefined(n.getRadius)?"circle":"polygon"},i={color:"#2ca25f",fillOpacity:.2,opacity:.8,clickable:!0};s.$watch("mapConfig.drawnArea",function(r){var e,h,u,o,f,l;if(s.drawnItems.getLayers().length>0&&s.drawnItems.removeLayer(s.drawnItems.getLayers()[0]),r){if("polygon"===r.shape){for(h=ODS.GeoFilter.getPolygonParameterAsGeoJSON(r.coordinates),u=h.coordinates[0],u.splice(h.coordinates[0].length-1,1),o=0;o<u.length;o++)f=u[o],l=f[0],f[0]=f[1],f[1]=l;e=4===u.length&&u[0][0]===u[3][0]&&u[1][0]===u[2][0]&&u[0][1]===u[1][1]&&u[2][1]===u[3][1]?new L.Rectangle(u,i):new L.Polygon(u,i)}else if("circle"===r.shape){var c=r.coordinates.split(","),a=c[0],v=c[1],y=c[2]||0;e=new L.Circle([a,v],y,i)}e&&(s.drawnItems.addLayer(e),n(s.drawnItems.getLayers()[0]))}angular.forEach(t.MapConfiguration.getActiveContextList(s.mapConfig,{geoOnly:!0}),function(n){r?"circle"===r.shape?(n.parameters["geofilter.distance"]=r.coordinates,delete n.parameters["geofilter.polygon"]):"polygon"===r.shape&&(n.parameters["geofilter.polygon"]=r.coordinates,delete n.parameters["geofilter.distance"]):(delete n.parameters["geofilter.polygon"],delete n.parameters["geofilter.distance"])})},!0)}});k=function(){var n,i;angular.forEach(t.MapConfiguration.getActiveContextList(s.mapConfig,{geoOnly:!0}),function(t){angular.isUndefined(n)&&angular.isUndefined(n)?(n=t.parameters["geofilter.polygon"],i=t.parameters["geofilter.distance"]):(n!==t.parameters["geofilter.polygon"]&&(n=null),i!==t.parameters["geofilter.distance"]&&(i=null))});s.mapConfig.drawnArea=n?{shape:"polygon",coordinates:n}:i?{shape:"circle",coordinates:i}:{}}},controller:["$scope",function(n){angular.isUndefined(n.mapConfig)?n.mapConfig={singleLayer:!1,layerSelection:!1,groups:[]}:n.mapConfig.groups.forEach(function(n){n.layers.forEach(function(n){n.context.wait().then(function(){t.MapConfiguration.setLayerDisplaySettingsFromDefault(n)})})});window.mapConfig=n.mapConfig;this.registerLayer=function(i){var r=t.MapConfiguration.createLayerGroupConfiguration();return r.layers.push(i),n.mapConfig.groups.push(r),r};this.registerLayerGroup=function(t){n.mapConfig.groups.push(t)};this.getCurrentPosition=function(){return n.mapContext.location};this.moveMap=function(t,i){n.map.setView(t,i)};this.resetMapDataFilter=function(){t.MapConfiguration.getContextList(n.mapConfig).forEach(function(n){delete n.parameters["q.mapfilter"]});i&&i()};this.applyMapDataFilter=function(i){t.MapConfiguration.getContextList(n.mapConfig).forEach(function(n){n.parameters["q.mapfilter"]=i})};this.getActiveContexts=function(){return t.MapConfiguration.getActiveContextList(n.mapConfig)};var i;this.registerResetCallback=function(n){i=n};n.$watch(function(){return t.MapConfiguration.getContextList(n.mapConfig).reduce(function(n,t){return n&&!t.parameters["q.mapfilter"]},!0)},function(n,t){n&&!t&&i&&i()},!0)}]}}]);n.directive("odsMapLayerGroup",["MapHelper",function(n){return{restrict:"EA",scope:{title:"@",description:"@",color:"@",picto:"@"},require:"^odsMap",link:function(n,t,i,r){r.registerLayerGroup(n.group)},controller:["$scope",function(t){t.group=n.MapConfiguration.createLayerGroupConfiguration();angular.extend(t.group,{title:t.title,description:t.description,color:t.color,picto:t.picto});this.registerLayer=function(n){return t.group.layers.push(n),t.group}}]}}]);n.directive("odsMapLayer",["MapHelper",function(n){return{restrict:"EA",scope:{context:"=",showIf:"=",showZoomMin:"@",showZoomMax:"@",color:"@",borderColor:"@",opacity:"@",shapeOpacity:"@",pointOpacity:"@",colorScale:"@",colorRanges:"@",colorCategories:"=",colorCategoriesOther:"@",colorNumericRanges:"=",colorGradient:"=",colorByField:"@",colorFunction:"@",radius:"@",size:"@",sizeMin:"@",sizeMax:"@",sizeFunction:"@",picto:"@",showMarker:"@",display:"@","function":"@",expression:"@",tooltipSort:"@",hoverField:"@",refineOnClickContext:"=",joinContext:"=",localKey:"@",remoteKey:"@",caption:"=?",captionTitle:"@",excludeFromRefit:"=?"},template:function(n){var t="";return n.contents().wrapAll("<div>"),n.contents().length>0&&n.contents().html().trim().length>0&&(n.contents().wrapAll("<div>"),t=n.children().html()),'<div tooltiptemplate="'+t.replace(/"/g,"&quot;")+'"><\/div>'},require:["?^odsMapLayerGroup","^odsMap"],link:function(t,i,r,u){var f,o=u[0],l=u[1],a=angular.element(i.children()[0]),v=a.attr("tooltiptemplate"),h,c,e;if(t.color)f=t.color;else if(t.colorScale)f={type:"scale",scale:t.colorScale};else if(t.colorRanges){var s=t.colorRanges.split(";"),y=s.filter(function(n,t){return t%2==1}),p=s.filter(function(n,t){return t%2==0});f={type:"range",ranges:y,colors:p,field:t.colorByField}}else t.colorCategories?(t.colorByField||console.error("odsMapLayer: using colorCategories requires specifying a field to use, using colorByField"),f={type:"categories",field:t.colorByField,categories:t.colorCategories},t.colorCategoriesOther&&(f.otherCategories=t.colorCategoriesOther)):t.colorGradient?f={type:"gradient",steps:t.colorGradient}:t.colorNumericRanges?(t.colorByField||console.error("odsMapLayer: using colorNumericRanges requires specifying a field to use, using colorByField"),f={type:"choropleth",field:t.colorByField,ranges:t.colorNumericRanges}):t.colorByField&&(f={type:"field",field:t.colorByField});c={color:f,colorFunction:t.colorFunction,borderColor:t.borderColor,shapeOpacity:angular.isDefined(t.shapeOpacity)&&t.shapeOpacity||t.opacity,pointOpacity:angular.isDefined(t.pointOpacity)&&t.pointOpacity||t.opacity,picto:t.picto,display:t.display,"function":t.function,expression:t.expression,localKey:t.localKey,remoteKey:t.remoteKey,tooltipSort:t.tooltipSort,hoverField:t.hoverField,excludeFromRefit:t.excludeFromRefit,caption:!!t.caption,captionTitle:t.captionTitle,showZoomMin:t.showZoomMin,showZoomMax:t.showZoomMax,radius:t.radius,size:t.size,minSize:t.sizeMin,maxSize:t.sizeMax,sizeFunction:t.sizeFunction};e=n.MapConfiguration.createLayerConfiguration(v,c);h=o?o.registerLayer(e):l.registerLayer(e);r.showIf&&t.$watch("showIf",function(n){h.displayed=n});var w=t.$watch("context",function(i){i&&(e.context=i,i.wait().then(function(){t.showMarker&&(e.marker="true"===t.showMarker.toLowerCase());n.MapConfiguration.setLayerDisplaySettingsFromDefault(e)}),w())}),b=t.$watch("joinContext",function(n){n&&(e.joinContext=n,b())}),k=t.$watch("refineOnClickContext",function(n){var t,i;if(angular.isArray(n)){if(t=!0,angular.forEach(n,function(n){t=t&&angular.isDefined(n)}),!t)return}else if(!n)return;e.refineOnClick=[];i=angular.isArray(n)&&n||[n];angular.forEach(i,function(n){var i=!1,t="refineOnClick"+ODS.StringUtils.capitalize(n.name);angular.isDefined(r[t+"ReplaceRefine"])?"false"!==r[t+"ReplaceRefine"]&&(i=!0):angular.isDefined(r.refineOnClickReplaceRefine)&&"false"!==r.refineOnClickReplaceRefine&&(i=!0);e.refineOnClick.push({context:n,mapField:r[t+"MapField"]||r.refineOnClickMapField,contextField:r[t+"ContextField"]||r.refineOnClickContextField,replaceRefine:i});k()})})},controller:["$scope",function(){}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsMediaGallery",["$timeout","$q","ODSAPI",function(t,i,r){var u;return{restrict:"E",scope:{context:"=",displayedFields:"@",imageFields:"@?",displayMode:"@?"},replace:!0,template:'<div class="odswidget odswidget-media-gallery"> <div class="odswidget-media-gallery__container" >     <div style="vertical-align: top;" class="odswidget-images__internal-table" infinite-scroll="loadMore()" infinite-scroll-distance="1" infinite-scroll-disabled="fetching">        <div class="odswidget-media-gallery__media-line" ng-repeat="line in lines track by $index">            <div ng-class="{\'odswidget-media-gallery__media-container--selected\': image.selected}" class="odswidget-media-gallery__media-container" style="vertical-align: top; display: inline-block" ng-repeat="image in line.images track by $index" ng-click="onClick($event, image, line)" data-index="{{ image.index + 1 }}">                <div style="overflow: hidden" ng-style="{width: image.width, height: image.height, marginTop: image.marginTop, marginBottom: image.marginBottom, marginRight: image.marginRight, marginLeft: image.marginLeft }">                    <ods-record-image record="image.record" field="{{ image.fieldname }}" domain-url="{{context.domainUrl}}"><\/ods-record-image>                    <div ng-if="getRecordTitle(image.record)" class="odswidget-media-gallery__media-container__title-container">{{ getRecordTitle(image.record) }}<\/div>                    <ods-spinner ng-show="image.fetching" class="ods-media-gallery__image-spinner-overlay"><\/ods-spinner>                <\/div>            <\/div>        <\/div>     <\/div>     <ods-spinner ng-if="!init && fetching"><\/ods-spinner> <\/div> <div class="odswidget-media-gallery__details"><\/div> <div class="odswidget-overlay" ng-if="done && !records"><span class="odswidget-overlay__message" translate>No results<\/span><\/div> <div class="odswidget-overlay" ng-if="fetching && !records"><ods-spinner><\/ods-spinner><\/div><\/div>',require:["odsMediaGallery","?odsWidgetTooltip","?odsAutoResize","?refineOnClick"],controller:["$scope","$element","$window","DebugLogger","$filter",function(n,t,f,e,o){n.page=0;n.resultsPerPage=40;n.fetching=!0;n.staticSearchOptions={rows:n.resultsPerPage};n.records=[];n.images=[];n.done=!1;n.init=!0;n.nextImage=0;void 0===n.imageFields&&(n.imageFields=[]);var s=[],h=function(){var e,t,u,f,o;n.fetching=!0;t={};n.init?(e=0,s.length&&(s.forEach(function(n){n.resolve()}),s.splice(0,s.length))):(n.page++,e=n.page*n.resultsPerPage);angular.extend(t,n.staticSearchOptions,n.context.parameters,{start:e});u=n.imageFields||[];n.context.dataset.extra_metas&&n.context.dataset.extra_metas.visualization&&n.context.dataset.extra_metas.visualization.image_title&&(u=u.concat(n.context.dataset.extra_metas.visualization.image_title));u.length>0&&angular.extend(t,{fields:u.join(",")});f=i.defer();s.push(f);t.q=angular.isDefined(t.q)?[t.q]:[];o=[];angular.forEach(n.imageFields,function(n){o.push("NOT #null("+n+")")});t.q.push(o.join(" OR "));r.records.search(n.context,t,f.promise).success(function(t){n.records=n.records.concat(t.records);for(var u,e,i,o,r=0;r<t.records.length;r++)for(u=0;u<n.imageFields.length;u++)t.records[r].fields[n.imageFields[u]]&&(i=t.records[r].fields[n.imageFields[u]],i.url?(e=i.url,o=!1):i.placeholder?(e=null,o=!0):(e=n.context.domainUrl+"/explore/dataset/"+t.records[r].datasetid+"/files/"+i.id+"/300/",o=!1),n.images.push({record:t.records[r],fieldname:n.imageFields[u],thumbnail_url:e,download_url:e.replace("/300/","/download/"),id:i.id,index:n.images.length,placeholder:o,realwidth:i.width,realheight:i.height,allFieldsInitialized:!1,fetching:!1}));n.renderImages();n.error="";n.fetching=!1;n.done=(n.page+1)*n.resultsPerPage>=t.nhits;n.init=!1;s.splice(s.indexOf(f),1)}).error(function(t){t&&(n.error=t.error);s.splice(s.indexOf(f),1);n.fetching=!1})};this.getDefaultsFromContext=function(){var t,r,i=n.context.dataset,f=[];if(u=n.context.dataset.extra_metas.visualization&&n.context.dataset.extra_metas.visualization.image_tooltip_html?"<div>"+n.context.dataset.extra_metas.visualization.image_tooltip_html+"<\/div>":'<div><div class="ods-media-gallery__tooltip__image-container" width="{{ image.realwidth }}px" height="{{ image.realheight }}px">   <img class="ods-media-gallery__tooltip__image" ng-src="{{ image.thumbnail_url }}"><\/div><div class="ods-media-gallery__tooltip__fields"><h2 ng-if="getRecordTitle(record)">   {{ getRecordTitle(record) }}<\/h2><dl>   <dt ng-repeat-start="field in displayedFields"           ng-show="record.fields[field.name]|isDefined"           class="ods-dataset-images__infopane-field-name">       {{ field.label }}   <\/dt>   <dd ng-repeat-end ng-switch="field.type"           ng-show="record.fields[field.name]|isDefined">       <span ng-switch-when="geo_point_2d">           <ods-geotooltip width="300" height="300"                   coords="record.fields[field.name]">{{ record.fields|formatFieldValue:field }}<\/ods-geotooltip>       <\/span>       <span ng-switch-when="geo_shape">            <ods-geotooltip width="300" height="300"                   geojson="record.fields[field.name]">{{ record.fields|formatFieldValue:field }}<\/ods-geotooltip>        <\/span>        <span ng-switch-when="double">{{ record.fields|formatFieldValue:field }}<\/span>        <span ng-switch-when="int">{{ record.fields|formatFieldValue:field }}<\/span>        <span ng-switch-when="date">{{ record.fields|formatFieldValue:field }}<\/span>        <span ng-switch-when="datetime">{{ record.fields|formatFieldValue:field }}<\/span>        <span ng-switch-when="file">            <div ng-bind-html="record.fields|formatFieldValue:field"><\/div>        <\/span>       <span ng-switch-default ng-bind-html="record.fields[field.name]|prettyText|nofollow|safenewlines"><\/span>   <\/dd><\/dl><a href="{{ image.download_url }}"       target="_self"       ods-resource-download-conditions       class="ods-button">   <i class="fa fa-download" aria-hidden="true"><\/i>   <span translate>Download image<\/span><\/a><\/div><\/div>',n.detailsTemplate=u,n.context.dataset.extra_metas.visualization&&n.context.dataset.extra_metas.visualization.media_gallery_fields)n.imageFields=n.context.dataset.extra_metas.visualization.media_gallery_fields;else{for(t=0;t<i.fields.length;t++)if("file"==i.fields[t].type)for(r=0;r<i.fields[t].annotations.length;r++)"has_thumbnails"==i.fields[t].annotations[r].name&&(0===n.imageFields.length||n.imageFields.indexOf(i.fields[t].name)>-1)&&f.push(i.fields[t].name);n.imageFields=f}h()};this.watchContext=function(){n.$watch("context.parameters",function(t,i){t!==i&&(n.done=!1,n.lines.splice(0,n.lines.length),n.images.splice(0,n.images.length),n.records.splice(0,n.records.length),n.nextImage=0,n.init=!0,n.page=0,n.layout.resetImages(),h())},!0)};n.loadMore=function(){n.fetching||n.done||!n.staticSearchOptions||h()};n.detailsDisplayed=!1;n.getRecordTitle=function(t){if(n.context.dataset.extra_metas&&n.context.dataset.extra_metas.visualization&&n.context.dataset.extra_metas.visualization.image_title){var i=n.context.dataset.extra_metas.visualization.image_title;if(angular.isDefined(t.fields[i])&&""!==t.fields[i])return o("formatFieldValue")(t.fields,n.context.dataset.getField(i))}return null}}],link:function(t,u,f,e){var c=e[0],h=e[1],l=e[2],a=e[3],o,v,s;l&&(l.onResize=function(){t.lines.splice(0,t.lines.length);t.layout.reset();t.layout.render(t.lines,u.children()[0].getBoundingClientRect().width,t.images.length)});angular.isString(t.displayedFields)&&(t.displayedFields=t.displayedFields.split(","));t.context.wait().then(function(){if(c.getDefaultsFromContext(),c.watchContext(),null!==h){var n;n=t.displayedFields?t.context.dataset.fields.filter(function(n){return-1!==t.displayedFields.indexOf(n.name)}):t.context.dataset.extra_metas.visualization&&t.context.dataset.extra_metas.visualization.image_fields?t.context.dataset.fields.filter(function(n){return-1!==t.context.dataset.extra_metas.visualization.image_fields.indexOf(n.name)}):t.context.dataset.fields;h.configure({defaultTemplate:t.detailsTemplate,displayedFields:n,fields:t.context.dataset.fields})}});o=u.find(".odswidget-media-gallery__details");void 0===t.displayMode?t.displayMode="compact":n[t.displayMode+"Layout"]||(console.warn("ods-media-gallery "+t.displayMode+" displayMode is not valid."),t.displayMode="compact");t.max_height=400;o=o.remove();t.onClick=function(n,u){var f,e;u.allFieldsInitialized?f=i.resolve():(e=angular.copy(t.context.parameters),jQuery.extend(e,{q:["recordid="+u.record.recordid]}),u.fetching=!0,f=r.records.search(t.context,e,i.defer()).success(function(n){u.record=n.records[0];u.allFieldsInitialized=!0;u.fetching=!1}));f.then(function(){if(null!==a)a.refineOnRecord(u.record);else if(null!==h){if(v&&v.$destroy(),s&&(s.selected=!1),s===u)return s=null,void(o=o.remove());s=u;u.selected=!0;o.html(h.render(u.record,{image:angular.copy(u),getRecordTitle:t.getRecordTitle},u.fieldname));o=o.remove();o.insertAfter(angular.element(n.currentTarget).parent(".odswidget-media-gallery__media-line"))}})};t.lines=[];t.layout=n()[t.displayMode+"Layout"]();t.layout.resetImages();t.renderImages=function(){for(var i,n=t.nextImage;n<t.images.length;n++)i=t.images[n],t.layout.addImage(i,t.images.length);t.nextImage=n;t.layout.render(t.lines,u.children()[0].getBoundingClientRect().width,t.images.length)}}}}]);var n=function(){function u(n,t){return Object.keys(t).forEach(function(i){n[i]=t[i]}),n}var f=0,n=250,e=1,o=0,t=[],i=-1,r=!1,s={reset:function(){f=0;o=0;i=-1},resetImages:function(){t.splice(0,t.length);this.reset()},addImage:function(n){var i=angular.copy(n);t.push(i)}};return{largeLayout:function(){return u({render:function(f,e,o){if(!r){r=!0;var a,c,h,l,s;for(0===f.length&&f.push({images:[],height:n,offset:0,cumulated_width:0}),a=i+1;a<t.length;a++)c=t[a],s=f[f.length-1],c.realheight>n-20?(h=Math.floor(c.realwidth*(n-20)/c.realheight),l=n-20):(h=c.realwidth,l=c.realheight),h>e&&(l=Math.floor(l*e/h),h=e),s.cumulated_width+h<e?(s.images.push(u({width:h,height:l},c)),s.cumulated_width+=h):(angular.forEach(s.images,function(n){n.marginTop=n.marginBottom=(s.height-n.height)/2;n.marginLeft=n.marginRight=Math.floor((e-s.cumulated_width)/(2*s.images.length))}),f.push({images:[],height:n,offset:0,cumulated_width:0}),f[f.length-1].images.push(u({width:h,height:l},c)),f[f.length-1].cumulated_width=h),i+=1;i===o-1&&(s=f[f.length-1],angular.forEach(s.images,function(n){n.marginTop=n.marginBottom=(s.height-n.height)/2;n.marginLeft=n.marginRight=Math.floor((e-s.cumulated_width)/(2*s.images.length))}));r=!1}}},s)},compactLayout:function(){return u({render:function(u,s,h){var v,l,y,c,a;if(!r){for(r=!0,0===u.length&&u.push({images:[],height:n,offset:0,max_height:0}),v=i+1;v<t.length;v++){if(l=t[v],y=l.realwidth/l.realheight,c=u[u.length-1],c.images.push(l),c.max_height=Math.min(n,Math.max(c.max_height,l.realheight)),f+=y,c.height=Math.min(Math.floor((s-e*(c.images.length-1))/f),c.max_height),c.height<c.max_height||l.index===h-1)for(a=0,$.each(c.images,function(n,t){t.height=c.height;t.width=Math.floor(t.realwidth*t.height/t.realheight);t.marginTop=t.marginBottom=t.marginRight=t.marginLeft=e+"px";a+=t.width+2*e}),c.offset=o+c.max_height;a>s;)angular.forEach(c.images,function(n){a>s&&(n.width-=1,a-=1)});c.height<c.max_height&&(o+=c.height,u.push({images:[],height:n,offset:0,max_height:0}),f=0);i+=1}r=!1}}},s)}}}}(),function(){"use strict";angular.module("ods-widgets").directive("odsMostPopularDatasets",["ODSAPI",function(n){return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-most-popular-datasets"><ul class="odswidget-most-popular-datasets__datasets">   <li class="no-data" ng-hide="datasets" translate>No data available yet<\/li>   <li class="odswidget-most-popular-datasets__dataset" ng-repeat="dataset in datasets" ng-if="datasets">       <ods-theme-picto class="odswidget-most-popular-datasets__theme-picto" theme="{{dataset.metas.theme|firstValue}}"><\/ods-theme-picto>       <div class="odswidget-most-popular-datasets__dataset-details">           <div class="odswidget-most-popular-datasets__dataset-details-title"><a ng-href="{{context.domainUrl}}/explore/dataset/{{dataset.datasetid}}/" target="_self">{{ dataset.metas.title }}<\/a><\/div>           <div class="odswidget-most-popular-datasets__dataset-details-count"><i class="fa fa-download" aria-hidden="true"><\/i> <span translate translate-n="dataset.extra_metas.explore.download_count" translate-plural="{{$count}} downloads">{{$count}} download<\/span><\/div>       <\/div>   <\/li><\/ul><\/div>',scope:{context:"=",max:"@"},controller:["$scope",function(t){t.max=t.max||5;var i=function(){n.datasets.search(t.context,{rows:t.max,sort:"explore.download_count",extrametas:!0}).success(function(n){t.datasets=n.datasets})};t.$watch("context",function(){i()})}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsMostUsedThemes",["ODSAPI",function(n){return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-most-used-themes"><ul class="odswidget-most-used-themes__themes">   <li class="no-data" ng-hide="themes" translate>No data available yet<\/li>   <li class="odswidget-most-used-themes__theme" ng-repeat="theme in themes" ng-if="themes">       <div class="odswidget-most-used-themes__theme-details">           <div class="odswidget-most-used-themes__theme-details-name"><a ng-href="{{ context.domainUrl }}/explore/?refine.theme={{ theme.path }}" target="_self">{{ theme.name }}<\/a><\/div>           <div class="odswidget-most-used-themes__theme-details-count"><i class="fa fa-table" aria-hidden="true"><\/i> <span translate translate-n="theme.count" translate-plural="Used by {{$count}} datasets">Used by {{$count}} dataset<\/span><\/div>       <\/div>   <\/li><\/ul><\/div>',scope:{context:"="},controller:["$scope",function(t){var i=function(){n.datasets.facets(t.context,"theme").success(function(n){n.facet_groups&&(t.themes=n.facet_groups[0].facets.slice(0,5))})};t.$watch("context",function(){i()})}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsPaginationBlock",["$location",function(n){return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-pagination" ng-show="pages.length > 1">    <ul class="odswidget-pagination__page-list">        <li class="odswidget-pagination__page" ng-repeat="page in pages">            <a class="odswidget-pagination__page-link"                ng-class="{\'odswidget-pagination__page-link--active\': page.start == (context.parameters.start||0)}"                ng-attr-rel="{{nofollow?\'nofollow\':\'\'}}"               ng-click="click($event, page.start)"                href="?start={{ page.start }}"                rel="nofollow">{{ page.label }}<\/a>        <\/li>    <\/ul><\/div>',scope:{context:"=",perPage:"@",nofollow:"@",containerIdentifier:"@"},controller:["$scope","$anchorScroll",function(t,i){var u,r,f;t.location=n;t.pages=[];t.perPage=t.perPage||10;t.click=function(n,i){n.preventDefault();t.context.parameters.start=i};r=function(){var n,r,i,u;if(0===t.context.nhits)return void(t.pages=[]);if(r=Math.max(1,Math.floor((t.context.nhits-1)/t.perPage)+1),i=[],r<=8)for(n=1;n<=r;n++)i.push({label:n,start:(n-1)*t.perPage});else if((u=t.context.parameters.start?Math.floor(t.context.parameters.start/t.perPage)+1:1)<=5){for(n=1;n<=8;n++)i.push({label:n,start:(n-1)*t.perPage});i.push({label:">>",start:(r-1)*t.perPage})}else if(u>=r-4)for(i.push({label:"<<",start:0}),n=r-7;n<=r;n++)i.push({label:n,start:(n-1)*t.perPage});else{for(i.push({label:"<<",start:0}),n=u-3;n<=u+3;n++)i.push({label:n,start:(n-1)*t.perPage});i.push({label:">>",start:(r-1)*t.perPage})}t.pages=i};t.containerIdentifier&&(u=document.getElementById(t.containerIdentifier));f=t.$watch("context",function(n){n&&(t.$watch("context.nhits",function(){void 0!==t.context.nhits&&t.perPage&&r()}),t.$watch("perPage",function(){t.context.nhits&&t.perPage&&r()}),t.$watch("context.parameters.start",function(n,f){t.context.nhits&&t.perPage&&r();(angular.isDefined(n)||angular.isDefined(f))&&(u?u.scrollTop=0:i())}),f())})}]}}])}(),function(){"use strict";var n=angular.module("ods-widgets");n.directive("odsPicto",["SVGInliner","$http","$document",function(n){return{restrict:"E",replace:!0,scope:{url:"=",color:"=",classes:"="},template:'<div class="odswidget odswidget-picto {{ classes }}"><\/div>',link:function(t,i){var r;t.$watch("[url, color]",function(u){if(u[0]){if(Modernizr&&!Modernizr.svg)return;r&&i.empty();r=n.getElement(t.url,t.color);t.color||r.addClass("ods-svginliner__svg-container--colorless");i.append(r)}},!0)}}}]);n.directive("odsThemePicto",["ODSWidgetsConfig","$compile",function(n,t){return{restrict:"E",replace:!0,scope:{theme:"@"},template:"",link:function(i,r){i.originalClasses=r.attr("class").replace("ng-isolate-scope","").trim();var u=!1;n.themes[i.theme]&&n.themes[i.theme].url?i.themeConfig=n.themes[i.theme]:(i.themeConfig=n.themes.default,u=!0);i.getTheme=function(){return u?"default":i.theme};i.themeConfig&&r.replaceWith(angular.element(t('<ods-picto url="themeConfig.url" color="themeConfig.color" classes="originalClasses + \' odswidget-theme-picto theme-\' + (getTheme()|themeSlug) "><\/ods-picto>')(i)))}}}]);n.directive("odsMapPicto",["ODSWidgetsConfig","PictoHelper","$compile",function(n,t,i){return{restrict:"E",replace:!0,scope:{name:"@",color:"@"},template:"",link:function(n,r){n.originalClasses=r.attr("class").replace("ng-isolate-scope","").trim();n.$watch("[name, color]",function(){n.pictoUrl=t.mapPictoToURL(n.name);n.pictoUrl&&r.replaceWith(angular.element(i('<ods-picto url="pictoUrl" color="color" classes="originalClasses + \' odswidget-map-picto\'"><\/ods-picto>')(n)))},!0)}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsPlumeAirQuality",function(){return{restrict:"E",replace:!0,template:'<div class="odswidget"><\/div>',scope:{city:"@",lang:"@"},link:function(n,t,i){var r='<a id="plumelabs-wjs-cfg" data-w="320" data-h="200" data-city="'+i.city+'" data-lng="'+(i.lang||"en_us")+'" data-type="l">Air Quality<\/a><script>window.plmlbs=function(e,t,s){var l,m=e.getElementsByTagName(t)[0],n=window.plmlbs||{},a=/^http:/.test(e.location)?"http":"https";return e.getElementById(s)?n:(l=e.createElement(t),l.id=s,l.src=a+"://static.plumelabs.com/embed/embed.js",m.parentNode.insertBefore(l,m),n)}(document,"script","plumelabs-wjs");<\/script>';t.append(r)}}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsRangeInput",[function(){return{restrict:"E",replace:!0,scope:{min:"=",selectableMin:"=",max:"=",step:"=",editableValue:"=",ngModel:"=",iconMin:"@",iconMax:"@"},require:"ngModel",template:'<div class="ods-range-input">    <i class="ods-range-input__icon ods-range-input__icon--min" ng-if="iconMin" ng-class="iconMin"><\/i>    <input type="range"           min="{{ actualMin }}"           max="{{ max }}"           step="{{ step }}"           class="ods-range-input__range-input"           ng-change="onRangeChange()"           ng-model="values.internalRange">    <i class="ods-range-input__icon ods-range-input__icon--max" ng-if="iconMax" ng-class="iconMax"><\/i>   <input class="ods-range-input__value-input" ng-change="onValueChange()" ng-if="editableValue" type="number" ng-model="values.internalValue" min="{{ actualMin }}" max="{{ max }}" step="{{ step }}"><\/div>',link:function(n,t,i,r){var u=t.find(".ods-range-input__input");n.values={};n.actualMin=angular.isDefined(n.selectableMin)?n.selectableMin:n.min;n.onRangeChange=function(){var t=parseFloat(n.values.internalRange,10);n.values.internalValue=t;r.$setViewValue(t)};n.onValueChange=function(){n.values.internalRange=n.values.internalValue.toString();r.$setViewValue(n.values.internalValue)};r.$render=function(){n.values.internalValue=r.$modelValue;n.values.internalRange=r.$modelValue.toString()};n.$watch("selectableMin",function(t,i){t!=i&&(u.css({width:(n.max-t)/(n.max-n.min)*100+"%"}),n.actualMin=t,t>=n.ngModel&&(n.ngModel=t))})}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsRecordImage",function(){return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-record-image">   <img class="odswidget-record-image__image" ng-if="imageUrl" ng-src="{{ imageUrl }}">   <div class="odswidget-record-image__image odswidget-record-image__image--placeholder" ng-if="placeholder"><\/div>',scope:{record:"=",field:"@",domainUrl:"@?"},link:function(n){n.imageUrl=null;var t=function(){var t=n.record.fields[n.field];t.url?(n.imageUrl=t.url,n.placeholder=!1):t.placeholder?(n.imageUrl=null,n.placeholder=!0):(n.imageUrl=ODS.Record.getImageUrl(n.record,n.field,n.domainUrl),n.placeholder=!1)};n.$watch("[record, field]",function(){t()},!0)}}})}(),function(){"use strict";var n=angular.module("ods-widgets"),t=function(){return{restrict:"A",controller:function(n,t,i){var r=[],u;this.refineOnRecord=function(n){angular.forEach(r,function(t){t.context.toggleRefine(t.contextField,n.fields[t.recordField],t.replaceRefine)})};this.refineOnValue=function(n){angular.forEach(r,function(t){t.context.toggleRefine(t.contextField,n,t.replaceRefine)})};u=n.$watch(function(){return i.refineOnClickContext},function(t){var o=t.split(","),e=[],f=!0;angular.forEach(o,function(t){var i=n[t];f=f&&angular.isDefined(i);e.push(i)});f&&angular.forEach(e,function(n){var t="refineOnClick"+ODS.StringUtils.capitalize(n.name);r.push({context:n,recordField:i[t+"RecordField"]||i.refineOnClickRecordField,contextField:i[t+"ContextField"]||i.refineOnClickContextField,replaceRefine:"true"===i[t+"ReplaceRefine"]||"true"===i.refineOnClickReplaceRefine});u()})})}}};n.directive("refineOnClick",t);n.directive("refineOnClickContext",t)}(),function(){"use strict";angular.module("ods-widgets").directive("odsResultEnumerator",["ODSAPI",function(){return{restrict:"E",replace:!0,transclude:!0,scope:{context:"=",max:"@?",showHitsCounter:"@?",showPagination:"@?"},template:'<div class="odswidget odswidget-result-enumerator">    <div ods-results="items" ods-results-context="context" ods-results-max="{{maxHits}}" class="odswidget-result-enumerator__results">        <div ng-if="loading"><ods-spinner class="odswidget-spinner--large"><\/ods-spinner><\/div>        <div ng-if="!loading && !items.length" class="odswidget-result-enumerator__no-results-message" translate>No results<\/div>        <div ng-if="!loading && items.length && hitsCounter" class="odswidget-result-enumerator__results-count">{{context.nhits}} <span translate>results<\/span><\/div>        <div ng-repeat="item in items" inject class="odswidget-result-enumerator__item"><\/div>    <\/div>    <ods-pagination-block ng-if="pagination" context="context" per-page="{{maxHits}}" container-identifier="{{localId}}"><\/ods-pagination-block><\/div>',link:function(n,t){n.localId="odsResultEnumerator-"+ODS.StringUtils.getRandomUUID();t.children()[0].id=n.localId},controller:["$scope",function(n){n.maxHits=n.max||10;n.hitsCounter=angular.isString(n.showHitsCounter)&&"true"===n.showHitsCounter.toLowerCase();n.pagination=angular.isString(n.showPagination)&&"true"===n.showPagination.toLowerCase()}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsResults",["ODSAPI",function(n){return{restrict:"A",scope:!0,priority:1001,controller:["$scope","$attrs",function(t,i){var u=function(r){var u=angular.extend({},r.parameters,{rows:i.odsResultsMax}),f=i.odsResults||"results";t.loading=!0;"catalog"===r.type?(angular.extend(u,{extrametas:"true",interopmetas:"true"}),n.datasets.search(r,u).success(function(n){t[f]=n.datasets;r.nhits=n.nhits;t.loading=!1}).error(function(){t.loading=!1})):"dataset"===r.type&&r.dataset&&n.records.search(r,u).success(function(n){t[f]=n.records;r.nhits=n.nhits;t.loading=!1}).error(function(){t.loading=!1})},r=!0;t.$watch(i.odsResultsContext,function(n,t){("catalog"===n.type||"dataset"===n.type&&n.dataset)&&(!angular.equals(n.parameters,t.parameters)||r)&&(r=!1,u(n))},!0)}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsReuses",["ODSAPI",function(n){return{restrict:"E",replace:!0,transclude:!0,template:'<div class="odswidget odswidget-reuses">  <div infinite-scroll="loadMore()" infinite-scroll-distance="1">      <div class="odswidget-reuses__reuse" ng-repeat="reuse in reuses" ods-full-click inject>          <h2 class="odswidget-reuses__reuse-title">{{ reuse.title }}             <a href="/explore/dataset/{{ reuse.dataset.id }}/?tab=metas" class="odswidget-reuses__reuse-dataset-link" target="_self"><span translate>From dataset:<\/span> {{ reuse.dataset.title }}<\/a>          <\/h2>          <div class="odswidget-reuses__reuse-infos">              <div class="odswidget-reuses__reuse-thumbnail" ng-class="{\'odswidget-reuses__reuse-thumbnail--no-thumbnail\': !reuse.thumbnail}">                  <a ng-show="reuse.thumbnail" href="{{ reuse.url }}" ods-main-click title="{{ reuse.title }}" target="_blank"><img class="odswidget-reuses__reuse-thumbnail-image" ng-src="{{ reuse.thumbnail }}" /><\/a>                  <i ng-hide="reuse.thumbnail" class="fa fa-ban odswidget-reuses__reuse-thumbnail-image--no-thumbnail"><\/i>              <\/div>              <div class="odswidget-reuses__reuse-description" ng-bind-html="reuse.description|prettyText|safenewlines"><\/div>          <\/div>          <div class="odswidget-reuses__reuse-author">              <strong ng-if="reuse.user.first_name || reuse.user.last_name">{{ reuse.user.first_name }} {{ reuse.user.last_name }}<\/strong>              <strong ng-if="!reuse.user.first_name && !reuse.user.last_name">{{ reuse.user.username }}<\/strong>              <i class="fa fa-calendar odswidget-reuses__creation-icon" aria-hidden="true"><\/i> {{ reuse.created_at|moment:\'LLL\' }}          <\/div>      <\/div> <\/div><\/div>',scope:{context:"="},controller:["$scope",function(t){var u=!1,i=!1,e=0,f=1,r=20,o;t.reuses=[];t.loadMore=function(){if(t.reuses.length&&!u&&!i){i=!0;var o=f*r;n.reuses(t.context,{rows:r,start:o}).success(function(n){t.reuses=t.reuses.concat(n.reuses);u=(f+1)*r>=e;f++;i=!1}).error(function(){i=!1})}};o=function(){i=!0;n.reuses(t.context,{rows:r}).success(function(n){t.reuses=n.reuses;u=r>=n.nhits;e=n.nhits;i=!1}).error(function(){i=!1})};t.$watch("context",function(){o()})}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsSearchbox",function(){return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-searchbox"><form method="GET" action="{{ actionUrl }}" ng-show="actionUrl"><input class="odswidget-searchbox__box" name="q" type="text" placeholder="{{placeholder|translate}}"><\/form><\/div>',scope:{placeholder:"@",context:"="},link:function(n,t,i){"autofocus"in i&&$(t).find("input").focus()},controller:["$scope","$sce",function(n,t){n.actionUrl="/explore/";var i=n.$watch("context",function(r){r&&(n.actionUrl=t.trustAsResourceUrl(n.context.domainUrl+n.actionUrl),i())})}]}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsSlideshow",["ODSAPI","$timeout",function(n,t){return{restrict:"E",transclude:!0,replace:!0,scope:{context:"=",imageField:"@?",titleFields:"@",domainUrl:"@?"},template:'<div class="ods-slideshow"      ng-keydown="onKeyDown($event)"      tabindex="0"      aria-label="Slideshow"     translate="aria-label">    <div class="ods-slideshow__image-wrapper">        <button class="ods-slideshow__previous-button"                ng-click="loadPreviousImage()"                ng-disabled="currentIndex <= 1"                aria-label="View previous image"                translate="aria-label">            <i class="fa fa-angle-left ods-slideshow__previous-icon" aria-hidden="true"><\/i>        <\/button>        <ods-spinner ng-show="loading"><\/ods-spinner>        <img src="{{ imageUrl}}"              alt="{{ imageTitle }}"              class="ods-slideshow__image"             width="{{ imageWidth }}"             height="{{ imageHeight }}"             ng-show="imageThumbnail"  >        <div class="ods-slideshow__tooltip-wrapper"             ng-show="tooltip">            <div class="ods-slideshow__tooltip"                  inject>                <dl>                   <dt ng-repeat-start="field in context.dataset.fields"                           ng-show="record.fields[field.name]|isDefined">                       {{ field.label }}                   <\/dt>                   <dd ng-repeat-end ng-switch="field.type"                           ng-show="record.fields[field.name]|isDefined">                       <span ng-switch-when="geo_point_2d">                           <ods-geotooltip width="300" height="300"                                   coords="record.fields[field.name]">{{ record.fields|formatFieldValue:field }}<\/ods-geotooltip>                       <\/span>                       <span ng-switch-when="geo_shape">                            <ods-geotooltip width="300" height="300"                                   geojson="record.fields[field.name]">{{ record.fields|formatFieldValue:field }}<\/ods-geotooltip>                        <\/span>                        <span ng-switch-when="double">{{ record.fields|formatFieldValue:field }}<\/span>                        <span ng-switch-when="int">{{ record.fields|formatFieldValue:field }}<\/span>                        <span ng-switch-when="date">{{ record.fields|formatFieldValue:field }}<\/span>                        <span ng-switch-when="datetime">{{ record.fields|formatFieldValue:field }}<\/span>                        <span ng-switch-when="file">                            <div ng-bind-html="record.fields|formatFieldValue:field"><\/div>                        <\/span>                       <span ng-switch-default ng-bind-html="record.fields[field.name]|prettyText|nofollow|safenewlines"><\/span>                   <\/dd>                <\/dl>            <\/div>        <\/div>        <div class="ods-slideshow__cannot-display"              ng-hide="imageThumbnail">            <i class="fa fa-eye-slash ods-slideshow__cannot-display-icon"><\/i>            <div class="ods-slideshow__cannot-display-message" translate>Sorry, this file cannot be displayed<\/div>        <\/div>        <button class="ods-slideshow__next-button"                ng-click="loadNextImage()"                aria-label="View next image"                translate="aria-label"                ng-disabled="currentIndex >= lastIndex">            <i class="fa fa-angle-right ods-slideshow__next-icon" aria-hidden="true"><\/i>        <\/button>    <\/div>    <div class="ods-slideshow__image-legend">        <div class="ods-slideshow__image-index">{{ currentIndex|number:0 }}/{{ lastIndex|number:0 }}<\/div>        <div class="ods-slideshow__image-title" title="{{ imageTitle }}" ng-bind="imageTitle"><\/div>        <div class="ods-slideshow__toggles">            <button class="ods-slideshow__tooltip-toggle"                    aria-label="Toggle tooltip"                    translate="aria-label"                    ng-click="toggleTooltip()">                <i class="fa fa-question-circle" aria-hidden="true"><\/i>            <\/button>            <button class="ods-slideshow__fullscreen-toggle"                    aria-label="Toggle fullscreen"                    translate="aria-label"                    ng-click="toggleFullscreen()">                <i class="fa fa-arrows-alt" ng-hide="fullscreen" aria-hidden="true"><\/i>                <i class="fa fa-compress" ng-show="fullscreen" aria-hidden="true"><\/i>            <\/button>        <\/div>    <\/div><\/div>',link:function(i,r){var f,c;i.loading=!1;i.currentIndex=0;i.lastIndex=0;i.imageUrl="";i.imageTitle="";i.imageWidth=0;i.imageHeight=0;i.imageThumbnail=!0;i.fullscreen=!1;i.tooltip=!1;angular.isDefined(i.titleFields)&&(f=i.titleFields.split(","));var u,s=$(r).children(".ods-slideshow__image-wrapper"),o=$(r).find(".ods-slideshow__image-index"),l=$(r).find(".ods-slideshow__image"),h=function(){if(u){var n=Math.min(s.width()/u.width,s.height()/u.height,1);i.imageWidth=n*u.width;i.imageHeight=n*u.height;i.$apply()}},e=function(r){var e=angular.extend({},i.context.parameters,{rows:1,start:r-1,q:"NOT #null("+i.imageField+")"});i.loading=!0;n.records.search(i.context,e).success(function(n){if(i.lastIndex?(i.lastIndex=n.nhits,i.currentIndex=r):(i.currentIndex=n.nhits,i.lastIndex=n.nhits,t(function(){o.css({width:"auto"});t(function(){o.css({width:o.outerWidth()});i.lastIndex=n.nhits;i.currentIndex=r})})),n.records.length){var e=n.records[0];u=e.fields[i.imageField];i.imageThumbnail=u.thumbnail;i.imageUrl=u.thumbnail?ODS.Record.getImageUrl(e,i.imageField,i.context.domainUrl):"";f.length&&(i.imageTitle=f.filter(function(n){return e.fields[n]}).map(function(n){return e.fields[n]}).join(", "));i.record=e}i.loading=!1}).error(function(){i.loading=!1})};i.loadPreviousImage=function(){i.currentIndex>1&&e(i.currentIndex-1)};i.loadNextImage=function(){i.currentIndex<i.lastIndex&&e(i.currentIndex+1)};i.toggleFullscreen=function(){var n=r[0];document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement?document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen():n.requestFullscreen?n.requestFullscreen():n.mozRequestFullScreen?n.mozRequestFullScreen():n.webkitRequestFullscreen&&n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)};i.toggleTooltip=function(){i.tooltip=!i.tooltip};i.onKeyDown=function(n){if(!i.loading)return 39==n.keyCode?void i.loadNextImage():37==n.keyCode?void i.loadPreviousImage():void 0};$(document).on("webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange",function(n){n.target==r[0]&&(i.fullscreen=!i.fullscreen,t(h))});l.on("load",h);c=i.$watch("context.dataset",function(n){if(n){var t,r;if(!f)for(t=0;t<i.context.dataset.fields.length;t++)if(r=i.context.dataset.fields[t],"text"===r.type){f=[r.name];break}if(!i.imageField)for(t=0;t<i.context.dataset.fields.length;t++)if(r=i.context.dataset.fields[t],"file"===r.type){i.imageField=r.name;break}e(1);c();i.$watch("context.parameters",function(n,t){angular.equals(n,t)||(i.currentIndex=0,i.lastIndex=0,e(1))},!0)}},!0)}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsSocialButtons",[function(){return{restrict:"E",scope:{addthisPubid:"@",buttons:"@?"},replace:!0,template:'<div class="odswidget-social-buttons"      ng-init="displayButtons=false"     ng-mouseenter="displayButtons=true" ng-mouseleave="displayButtons=false">    <div class="odswidget-social-buttons__header">        <span translate>Share<\/span>        <i class="fa fa-angle-down" aria-hidden="true"><\/i>    <\/div>    <div class="odswidget-social-buttons__buttons"          ng-class="{\'odswidget-social-buttons__buttons--open\': displayButtons}">        <div class="addthis_toolbox addthis_counter_style">            <a ng-if="selectedButtons.indexOf(\'facebook\') > -1"                class="addthis_button_facebook_like" fb:like:layout="box_count"><\/a>            <a ng-if="selectedButtons.indexOf(\'twitter\') > -1"                class="addthis_button_tweet" tw:count="vertical"><\/a>            <a ng-if="selectedButtons.indexOf(\'google-plus\') > -1"                class="addthis_button_google_plusone" g:plusone:size="tall"><\/a>        <\/div>    <\/div>    <script type="text/javascript">        var addthis_config = addthis_config || {};        addthis_config.pubid = "{{ addthisPubid }}";    <\/script>    <script type="text/javascript" src=""><\/script><\/div>',link:function(n){var i=["google-plus","facebook","twitter"],r,t;(n.selectedButtons=i,angular.isDefined(n.buttons))&&(r=n.buttons.split(",").map(function(n){return n.trim()}),n.selectedButtons=[],angular.forEach(r,function(t){i.indexOf(t)>-1&&n.selectedButtons.push(t)}));t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="//s7.addthis.com/js/300/addthis_widget.js#domready=1";(document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(t)}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsSpinner",["ODSWidgetsConfig",function(n){return{restrict:"E",replace:!0,template:function(t,i){var r;return r=Modernizr&&Modernizr.cssanimations&&Modernizr.svg?'<img src="'+n.basePath+'src/img/spinner.gif"      class="odswidget-spinner odswidget-spinner--gif"/>':'<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" version="1.1"     class="odswidget-spinner odswidget-spinner--svg">    <rect x="0" y="0" width="30" height="30" class="odswidget-spinner__cell-11"><\/rect>    <rect x="35" y="0" width="30" height="30" class="odswidget-spinner__cell-12"><\/rect>    <rect x="70" y="0" width="30" height="30" class="odswidget-spinner__cell-13"><\/rect>    <rect x="0" y="35" width="30" height="30" class="odswidget-spinner__cell-21"><\/rect>    <rect x="35" y="35" width="30" height="30" class="odswidget-spinner__cell-22"><\/rect>    <rect x="70" y="35" width="30" height="30" class="odswidget-spinner__cell-23"><\/rect>    <rect x="0" y="70" width="30" height="30" class="odswidget-spinner__cell-31"><\/rect>    <rect x="35" y="70" width="30" height="30" class="odswidget-spinner__cell-32"><\/rect>    <rect x="70" y="70" width="30" height="30" class="odswidget-spinner__cell-33"><\/rect><\/svg>',"withBackdrop"in i&&(r='<div class="odswidget-spinner__backdrop">'+r+"<\/div>"),r}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsTable",["ODSWidgetsConfig","$sce",function(){return{restrict:"E",scope:{context:"=",displayedFields:"@",sort:"@",datasetFeedback:"@"},replace:!0,transclude:!0,require:["odsTable","?odsAutoResize","?autoResize"],template:'<div class="records records-table odswidget odswidget-table"> <div class="odswidget-table__header" ng-show="records.length">     <table class="odswidget-table__internal-table">         <thead class="odswidget-table__internal-header-table-header">         <tr>             <th class="odswidget-table__header-cell odswidget-table__header-cell--spinner"><div class="odswidget-table__cell-container"><ods-spinner ng-show="fetching" class="odswidget-spinner--large"><\/ods-spinner><\/div><\/th>             <th class="odswidget-table__header-cell" ng-repeat="field in context.dataset.fields|fieldsForVisualization:\'table\'|fieldsFilter:displayedFieldsArray"                 title="{{ field.description || field.label }}"                 ng-click="toggleSort(field)"                 >                 <div class="odswidget-table__header-cell-container">                     <div class="odswidget-table__label" ng-bind="field.label"><\/div>                     <div ng-class="{\'odswidget-table__sort-icons\': true, \'odswidget-table__sort-icons--active\': field.name == context.parameters.sort || \'-\'+field.name == context.parameters.sort}" ng-show="isFieldSortable(field)" title="sort" translate="title">                         <i class="fa fa-chevron-up odswidget-table__sort-icons__up" aria-hidden="true" ng-class="{\'odswidget-table__sort-icons__up--active\': isDescendingSorted(field)}"><\/i>                         <i class="fa fa-chevron-down odswidget-table__sort-icons__down" aria-hidden="true" ng-class="{\'odswidget-table__sort-icons__down--active\': isAscendingSorted(field)}"><\/i>                     <\/div>                 <\/div>             <\/th>         <\/tr>         <\/thead>     <\/table> <\/div> <div class="odswidget-table__records">     <table class="odswidget-table__internal-table" infinite-scroll="loadMore()" infinite-scroll-distance="1" infinite-scroll-disabled="fetching">         <thead class="odswidget-table__internal-table-header">             <tr>                 <th class="odswidget-table__header-cell odswidget-table__header-cell--spinner"><div class="odswidget-table__cell-container"><ods-spinner ng-show="fetching" class="odswidget-spinner--large"><\/ods-spinner><\/div><\/th>                 <th class="odswidget-table__header-cell" ng-repeat="field in context.dataset.fields|fieldsForVisualization:\'table\'|fieldsFilter:displayedFieldsArray"                     title="{{ field.name }}">                     <div class="odswidget-table__cell-container">                         <span ng-bind="field.label"><\/span>                         <div class="odswidget-table__sort-icons" ng-show="isFieldSortable(field)" title="sort" translate="title">                             <i class="fa fa-chevron-up odswidget-table__sort-icons__up" aria-hidden="true"><\/i>                             <i class="fa fa-chevron-down odswidget-table__sort-icons__down" aria-hidden="true"><\/i>                         <\/div>                     <\/div>                 <\/th>             <\/tr>         <\/thead>         <tbody class="odswidget-table__records-tbody">         <\/tbody>     <\/table> <\/div> <div ng-if="displayDatasetFeedback" class="table-feedback-new"><a ods-dataset-feedback ods-dataset-feedback-dataset="context.dataset"><i class="fa fa-comment" aria-hidden="true"><\/i> <span translate>Suggest a new record<\/span><\/a><\/div> <div class="odswidget-overlay" ng-hide="fetching || records"><span class="odswidget-overlay__message" translate>No results<\/span><\/div> <div class="odswidget-overlay" ng-hide="(!fetching || records) && !working"><ods-spinner><\/ods-spinner><\/div><\/div>',controller:["$scope","$element","$timeout","$document","$window","ODSAPI","DebugLogger","$filter","$http","$compile","$transclude","$q",function(n,t,i,r,u,f,e,o,s,h,c,l){var ht=this,et,st,kt;n.displayedFieldsArray=null;n.displayDatasetFeedback=!1;n.page=0;n.resultsPerPage=40;n.fetching=!1;n.records=[];n.working=!0;n.layout=[];n.done=!1;var g,nt,k=t.find(".odswidget-table__header"),p=t.find(".odswidget-table__records-tbody"),ct=k.offset().left,lt=0,tt=0,d=!1,it=0,rt=0,ut=100,a=0,v=0,at=Math.random().toString(36).substring(7),vt="table-"+at,yt="stylesheet-"+at,y=[],w=null,b={},ft=function(t){function o(r,f){r.records.length||(n.working=!1);n.records=t?r.records:n.records.concat(r.records);n.nhits=r.nhits;n.error="";n.fetching=!1;n.done=(n.page+1)*n.resultsPerPage>=r.nhits;y.splice(y.indexOf(u),1);w=f;i(function(){if(angular.isDefined(b[f+1])){var n=b[f+1];delete b[f+1];n.callback(n.data,f+1)}})}var e,r,s,u;n.fetching=!0;r={};(t?(n.done=!1,n.page=0,n.records=[],e=0,y.length&&(y.forEach(function(n){n.resolve()}),y.splice(0,y.length)),b={},w=null):(n.page++,e=n.page*n.resultsPerPage),jQuery.extend(r,n.staticSearchOptions,n.context.parameters,{start:e}),n.displayedFieldsArray&&n.context.dataset.fields.length>n.displayedFieldsArray.length&&jQuery.extend(r,{fields:n.displayedFieldsArray.join(",")}),r.sort)&&(s=r.sort.replace("-",""),n.context.dataset.getField(s)||delete r.sort);u=l.defer();y.push(u);f.records.search(n.context,r,u.promise).success(function(n){var t=n.parameters.start/n.parameters.rows;null===w&&0===t||angular.isNumber(w)&&t===w+1?o(n,t):b[t]={callback:o,data:n}}).error(function(t){t&&(n.error=t.error);y.splice(y.indexOf(u),1);n.fetching=!1})};n.loadMore=function(){n.fetching||n.done||!n.staticSearchOptions||ft(!1)};n.isFieldSortable=function(n){return ODS.DatasetUtils.isFieldSortable(n)};n.isAscendingSorted=function(t){return"text"===t.type?t.name===n.context.parameters.sort:"-"+t.name===n.context.parameters.sort};n.isDescendingSorted=function(t){return"text"===t.type?"-"+t.name===n.context.parameters.sort:t.name===n.context.parameters.sort};n.toggleSort=function(t){if(n.isFieldSortable(t)){if(n.context.parameters.sort==t.name)return void(n.context.parameters.sort="-"+t.name);if(n.context.parameters.sort=="-"+t.name)return void(n.context.parameters.sort=t.name);n.context.parameters.sort="text"===t.type?t.name:"-"+t.name}else delete n.context.parameters.sort};et=!1;c(function(n){n.contents().wrapAll("<div>");et=n.contents().length>0&&n.contents().html().trim().length>0});var ot=function(i,r,u){var y,v,p=r[i],d,nt,s,b,k,f,a,e,l,w;for((y=document.createElement("tr"),y.className="odswidget-table__internal-table-row record-"+i,"end"===u)?(d=t.find(".js-placeholder-bottom")[0],d.parentNode.insertBefore(y,d)):(nt=t.find(".js-placeholder-top")[0],nt.parentNode.insertBefore(y,nt.nextSibling)),v=document.createElement("td"),v.className="odswidget-table__cell",s=document.createElement("div"),(s.className="odswidget-table__cell-container",n.displayDatasetFeedback)&&(b=n.$new(!0),b.record=p,b.dataset=n.context.dataset,s.appendChild(h('<i class="fa fa-comment table-feedback-icon" aria-hidden="true" ods-dataset-feedback ods-dataset-feedback-record="record" ods-dataset-feedback-dataset="dataset" ods-tooltip="Suggest changes for this record" translate="ods-tooltip"><\/i>')(b)[0])),s.appendChild(document.createTextNode(i+1)),v.appendChild(s),y.appendChild(v),k=0;k<g.length;k++)f=g[k],a=o("formatFieldValue")(p.fields,f),v=document.createElement("td"),v.className="odswidget-table__cell",y.appendChild(v),s=document.createElement("div"),s.className="odswidget-table__cell-container","int"!==f.type&&"double"!==f.type||(s.className+=" odswidget-table__cell-container__right-aligned"),v.appendChild(s),et?(e=n.$new(!0),e.record=p,e.currentField=f.name,e.currentValue=p.fields[f.name],e.currentFormattedValue=a,l=h("<div inject><\/div>",c)(e)[0]):(e=n.$new(!1),e.recordFields=p.fields[f.name],f&&"geo_point_2d"===f.type)?(e.fieldValue=a,l=h('<ods-geotooltip width="300" height="300" coords="recordFields">'+a+"<\/ods-geotooltip>")(e)[0]):f&&"geo_shape"===f.type?(e.fieldValue=o("truncate")(a),l=h('<ods-geotooltip width="300" height="300" geojson="recordFields">'+a+"<\/ods-geotooltip>")(e)[0]):f&&"file"===f.type?(w=o("nofollow")(o("prettyText")(a)).toString(),w=w.replace(/<a /,"<a ods-resource-download-conditions "),w?(l=h(w)(e)[0],l.title=p.fields[f.name]?p.fields[f.name].filename:""):l=document.createElement("span")):(l=document.createElement("span"),l.title=a,l.innerHTML=o("nofollow")(o("prettyText")(a))),s.appendChild(l);return y},pt=function(n){var i=t[0].getElementsByClassName("record-"+n)[0];i&&i.parentNode.removeChild(i)},wt=function(n){var t;return angular.forEach(n.classList,function(n){n.startsWith("record-")&&(t=parseInt(n.substr(7),10))}),t},bt=function(){var g=t.find(".odswidget-table__records")[0].offsetHeight,y=t.find(".odswidget-table__records")[0].scrollTop,r=p.find("tr").eq(1).height(),h=t.find(".js-placeholder-top")[0],c=t.find(".js-placeholder-bottom")[0],w,f,o,s,e,i,u,b,k,l,d;if(r?(a=Math.max(Math.floor((y-ut*r)/r),0),v=Math.min(Math.ceil((y+g+ut*r)/r),n.records.length)):(a=0,v=n.records.length),a=a&&a%2?a+1:a,w=a-it>0||v-rt>0,a!==it||v!==rt){if(h||(f=document.createElement("tr"),f.className="js-placeholder-top",f.style.height="0px",p[0].appendChild(f),h=t.find(".js-placeholder-top")[0]),c||(f=document.createElement("tr"),f.className="js-placeholder-bottom",f.style.height="0px",p[0].appendChild(f),c=t.find(".js-placeholder-bottom")[0]),!n.layout.length&&n.records.length)for(b=Math.min(n.records.length,n.resultsPerPage),i=0;i<b;i++)ot(i,n.records,"end");else if(w){for(i=0;i<a;i++)pt(i);for(h.style.height=a*r+"px",o=t[0].getElementsByTagName("tbody")[0].getElementsByTagName("tr"),s=o.length>2,k=s?wt(o[o.length-2]):a,e=0,i=k+1;i<v;i++)ot(i,n.records,"end"),e++;u=s?$(c).height()-e*r:(n.records.length-v)*r;u=u>0?u:0;c.style.height=u+"px"}else{for(e=0,i=v+1;i<n.records.length;i++)pt(i),e++;for(l=n.records.length-(v+1),l=l>=0?l:0,c.style.height=l*r+"px",o=t[0].getElementsByTagName("tbody")[0].getElementsByTagName("tr"),s=o.length>2,d=s?wt(o[1]):v,e=0,i=d-1;i>=a;i--)ot(i,n.records,"begin"),e++;u=s?$(h).height()-e*r:a*r;u=u>0?u:0;h.style.height=u+"px"}it=a;rt=v}};n.$watchCollection("records",function(i,r){i!==r&&(bt(),n.computeLayout(),nt||(nt=t.find("[infinite-scroll]")),t.height()>nt.height()&&n.loadMore())});n.context.wait().then(function(){var i,r;(n.displayedFieldsArray=n.displayedFields?n.displayedFields.split(",").map(function(n){return n.trim()}):n.context.dataset.extra_metas&&n.context.dataset.extra_metas.visualization&&angular.isArray(n.context.dataset.extra_metas.visualization.table_fields)&&n.context.dataset.extra_metas.visualization.table_fields.length>0?n.context.dataset.extra_metas.visualization.table_fields:null,!n.context.parameters.sort&&n.context.dataset.extra_metas&&n.context.dataset.extra_metas.visualization&&n.context.dataset.extra_metas.visualization.table_default_sort_field)&&(i=n.context.dataset.extra_metas.visualization.table_default_sort_field,"-"===n.context.dataset.extra_metas.visualization.table_default_sort_direction&&(i="-"+i),n.context.parameters.sort=i);n.displayDatasetFeedback="true"===n.datasetFeedback&&n.context.dataset.getExtraMeta("explore","feedback_enabled");n.staticSearchOptions={rows:n.resultsPerPage};e.log("table -> dataset watch -> refresh records");r=o("fieldsForVisualization")(n.context.dataset.fields,"table");g=o("fieldsFilter")(r,n.displayedFieldsArray);ft(!0);n.$watch("context.parameters",function(){e.log("table -> searchOptions watch -> refresh records");n.layout=[];n.working=!0;tt=t.find(".odswidget-table__records")[0].scrollLeft;d=!0;p.empty();ft(!0)},!0)});ht.resetScroll=function(){t.find(".odswidget-table__records").scrollLeft(0);k.css({left:"auto"});ct=t.find(".odswidget-table__header").offset().left};st=0;t.find(".odswidget-table__records").on("scroll",function(){if(this.scrollLeft!==lt)k.offset({left:ct-this.scrollLeft}),lt=this.scrollLeft;else{d=!1;var n=Math.max(Math.floor(t.find(".odswidget-table__records")[0].scrollTop/p.find("tr").eq(1).height()),0);if(Math.abs(n-st)<ut&&n>a)return;st=n;bt()}});kt=function(t,i){for(var f,e,u="",r=0;r<n.layout.length;r++)f=r+1,e=i?"max-width: none; ":"",u+="#"+t+" .odswidget-table__header tr th:nth-child("+f+") > div, #"+t+" .odswidget-table__records tr td:nth-child("+f+") > div { width: "+n.layout[r]+"px; "+e+"} ";return u};n.computeLayout=function(){var f,h=t.find(".odswidget-table__internal-table-row"),e,u,s,r,o;!n.layout.length&&n.records.length&&(t.attr("id")||t.attr("id",vt),t.hasClass("odswidget-table--embedded")?(f=$(window).height()-t.offset().top,t.height(f)):f=t.height(),e=0,n.displayDatasetFeedback&&(e=t.find(".table-feedback-new").height()+5),t.find(".odswidget-table__records").height(f-25-e),u=(p.find("tr").eq(1).height(),h.length,document.getElementById(yt)),u&&u.parentNode&&u.parentNode.removeChild(u),t.find(".odswidget-table__internal-header-table-header").hide(),t.find(".odswidget-table__internal-table-header").show(),s=0,angular.forEach(t.find(".odswidget-table__internal-table-header .odswidget-table__cell-container"),function(t,i){n.layout[i]=$(t).width()+8;s+=n.layout[i]}),n.layout[0]=30,r=document.createElement("style"),o=kt(vt,!1),r.id=yt,r.type="text/css",r.styleSheet?r.styleSheet.cssText=o:r.appendChild(document.createTextNode(o)),t[0].appendChild(r),t.find(".odswidget-table__internal-table-header").hide(),t.find(".odswidget-table__internal-header-table-header").show(),d||i(function(){ht.resetScroll()},0));d&&(tt||k.css({left:"auto"}),t.find(".odswidget-table__records")[0].scrollLeft=tt);n.layout.length&&(n.working=!1)}}],link:function(n,t,i,r){var f=r[0],u=r[1]||r[2];angular.isDefined(u)&&null!==u&&(u.onResize=function(){f.resetScroll();n.layout=[];n.computeLayout()})}}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsTagCloud",["ODSAPI","$location",function(n){function t(n){var t=Math.floor(n.length/2);return n.length%2?n[t].count:(n[t-1].count+n[t].count)/2}function i(n,t){var r=$.grep(n,function(n){return n.count>=t}),u=$.grep(n,function(n){return n.count<=t}),i=[{count:r.length,min:r[r.length-1].count,max:r[0].count},{count:u.length,min:u[u.length-1].count,max:u[0].count}];return i[0].delta=i[0].max-i[0].min,i[1].delta=i[1].max-i[1].min,i}function r(n,t,i){var r,u=(n.count>=t?i[0].delta:i[1].delta)/2;return r=n.count>=2*u?1:n.count>=u&&n.count<2*u?2:3,r=n.count>=t?r:r+3,n={count:n.count,name:n.name,opacity:((11-r)/10+.05).toFixed(2),size:((7-r)/3).toFixed(1),weight:r},n.size=6!==r?n.size:parseFloat(n.size)+.3,n}function u(n,t,i){var r=n.parameters["refine."+t];return angular.isDefined(r)&&(angular.isArray(r)&&r.indexOf(i)>-1||r===i)}function f(n){for(var i,r,t=n.length-1;t>0;t--)i=Math.floor(Math.random()*(t+1)),r=n[t],n[t]=n[i],n[i]=r;return n}return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-tag-cloud">    <ul class="odswidget-tag-cloud__tag-list">        <li class="odswidget-tag-cloud__no-data-label" ng-hide="tags" translate>No data available yet<\/li>        <li ng-repeat="tag in tags"             class="odswidget-tag-cloud__tag"             ng-class="{\'odswidget-tag-cloud__tag--selected\': tag.selected}"            ng-style="{\'font-size\': tag.size + \'em\', \'opacity\': tag.opacity}">            <a ng-click="refine(tag.name)" href="">                {{ tag.name }}            <\/a>        <\/li>    <\/ul><\/div>',scope:{context:"=",facetName:"@",max:"@?",redirectTo:"@?",contextToRefine:"=?"},controller:["$scope",function(e){e.refine=function(n){if(e.redirectTo){var t="refine."+e.facetName+"="+n,i=e.redirectTo.indexOf("?")>-1?"&":"?";window.location=e.redirectTo+i+t}else e.contextToRefine?e.contextToRefine.toggleRefine(e.facetName,n):e.context.toggleRefine(e.facetName,n)};var o=function(){var s,o={rows:0,facet:e.facetName};"catalog"===e.context.type?s=n.datasets.search(e.context,o):(o=$.extend({},e.context.parameters,o),s=n.records.search(e.context,o));s.success(function(n){if(n.facet_groups){e.tags=n.facet_groups[0].facets;e.max&&(e.tags=e.tags.slice(0,e.max));for(var s=t(e.tags),o=0;o<e.tags.length;o++)e.tags[o]=r(e.tags[o],s,i(e.tags,s),e.context.domainUrl),e.tags[o].selected=u(e.contextToRefine?e.contextToRefine:e.context,e.facetName,e.tags[o].name);e.tags=f(e.tags)}})};e.$watch("context",function(){("catalog"===e.context.type||"dataset"===e.context.type&&e.context.dataset)&&o()},!0)}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsTextSearch",function(){return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-text-search">    <form ng-submit="applySearch()" class="odswidget-text-search__form">        <input class="odswidget-text-search__search-box" name="q" type="text" ng-model="searchExpression" placeholder="{{ translatedPlaceholder }}">        <button type="submit" class="odswidget-text-search__submit" title="{{ translatedPlaceholder}}"><i class="fa fa-search" aria-hidden="true"><\/i><\/button>    <\/form><\/div>',scope:{placeholder:"@?",button:"@?",context:"=",field:"@?"},link:function(n,t,i){"autofocus"in i&&$(t).find("input").focus()},controller:["$scope","$attrs","translate",function(n,t,i){var r=[],u={},f,e;angular.isArray(n.context)?r=n.context:r.push(n.context);f=n.$watch("context",function(i){var e=function(n,t){var r=n.parameters.q,f,i;if(r)return f=/([\w-_]+):"(.*)"/,i=r.match(f),i&&u[n.name]===i[1]?i[2]:t?r:void 0};i&&(angular.isArray(i)||(i=[i]),angular.forEach(i,function(i){u[i.name]=t[i.name+"Field"]||n.field}),angular.forEach(i,function(t){n.searchExpression=n.searchExpression||e(t)}),n.searchExpression||angular.forEach(i,function(t){n.searchExpression=n.searchExpression||t.parameters.q}),f(),n.$watch(function(){return r.map(function(n){return n.parameters.q})},function(t,i){if(!angular.equals(t,i)){for(var f=!0,o=e(r[0],!0),u=1;u<r.length;u++)if(o!=e(r[u],!0)){f=!1;break}f&&(n.searchExpression=o)}},!0))});e=n.$watch("placeholder",function(t){t&&(n.translatedPlaceholder=i(n.placeholder),e())});n.applySearch=function(){angular.forEach(r,function(t){t.parameters.q=u[t.name]&&n.searchExpression?u[t.name]+':"'+n.searchExpression+'"':n.searchExpression})}}]}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsThemeBoxes",function(){return{restrict:"E",replace:!1,template:'<div class="odswidget odswidget-theme-boxes">   <div ng-repeat="item in items" class="odswidget-theme-boxes__box" ods-facet-results="items" ods-facet-results-context="context" ods-facet-results-facet-name="theme">       <a ng-href="{{context.domainUrl}}/explore/?refine.theme={{encode(item.path)}}" target="_self" translate="ods-tooltip" translate-n="item.count" translate-plural="{{item.name}} ({{$count}} datasets)" ods-tooltip="{{item.name}} ({{$count}} dataset)" ods-tooltip-direction="bottom" style="display: block;">           <ods-theme-picto class="odswidget-theme-boxes__picto" theme="{{item.name}}"><\/ods-theme-picto>       <\/a>   <\/div><\/div>',scope:{context:"="},controller:["$scope",function(n){n.encode=encodeURIComponent}]}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsTimerange",["ModuleLazyLoader","translate","odsTimerangeParser",function(n,t,i){var f={styles:{container:"rd-container odswidgets-rd-container"},weekStart:1},e=function(n){return"yesterday"===n?moment().subtract("days",1):"now"===n?moment():angular.isString(n)?moment(n):null},r=function(n){return n?moment(n).milliseconds(0).toISOString().replace(".000Z","Z"):null},u=function(n,t,i,r){return"string"==typeof n&&(n=moment(n,t)),"false"!==i&&!1!==i||("from"===r&&(n.milliseconds(0),-1===t.indexOf("H")&&-1===t.indexOf("h")&&-1===t.indexOf("LLL")&&-1===t.indexOf("LT")&&n.hours(0),-1===t.indexOf("m")&&-1===t.indexOf("LLL")&&-1===t.indexOf("LT")&&n.minutes(0),-1===t.indexOf("s")&&-1===t.indexOf("LTS")&&n.seconds(0)),"to"===r&&(n.milliseconds(999),-1===t.indexOf("H")&&-1===t.indexOf("h")&&-1===t.indexOf("LLL")&&-1===t.indexOf("LT")&&n.hours(23),-1===t.indexOf("m")&&-1===t.indexOf("LLL")&&-1===t.indexOf("LT")&&n.minutes(59),-1===t.indexOf("s")&&-1===t.indexOf("LTS")&&n.seconds(59))),n};return{restrict:"E",replace:!0,scope:{context:"=",timeField:"@?",defaultFrom:"@?",defaultTo:"@?",displayTime:"@?",dateFormat:"@?",to:"=?",from:"=?",labelFrom:"@?",labelTo:"@?",placeholderFrom:"@?",placeholderTo:"@?"},template:'<div class="odswidget odswidget-timerange">    <div class="odswidget-timerange__from">        <span ng-bind="labelFrom"><\/span>         <input type="text" placeholder="{{ placeholderFrom }}">    <\/div>    <div class="odswidget-timerange__to">        <span ng-bind="labelTo"><\/span>         <input type="text" placeholder="{{ placeholderTo }}">    <\/div><\/div>',link:function(o,s,h){var c,v,y,l,a,p,w;o.labelFrom=angular.isDefined(o.labelFrom)?o.labelFrom:t("From");o.labelTo=angular.isDefined(o.labelTo)?o.labelTo:t("to");c=s.find("input");v="YYYY-MM-DD HH:mm";angular.isDefined(o.displayTime)&&"false"===o.displayTime&&(v="YYYY-MM-DD");o.dateFormat=o.dateFormat||v;l=function(n){var t=h[n.name+"ParameterName"]||"q";return["q","rq"].indexOf(t)>-1&&(t+=".timerange"),t};(y=angular.isArray(o.context)?o.context[0].parameters[l(o.context[0])]:o.context.parameters[l(o.context)],angular.isDefined(y))&&(a=i(y),a.field===o.timeField&&(o.defaultFrom=a.from,o.defaultTo=a.to));angular.isDefined(o.defaultFrom)&&(p=u(e(o.defaultFrom),o.dateFormat,o.displayTime,"from"),c[0].value=p.format(o.dateFormat),o.from=r(p));angular.isDefined(o.defaultTo)&&(w=u(e(o.defaultTo),o.dateFormat,o.displayTime,"to"),c[1].value=w.format(o.dateFormat),o.to=r(w));n("rome").then(function(){var n,t,i;o.displayTime=void 0===o.displayTime?!0:"true"===o.displayTime;n=rome(c[0],angular.extend({},f,{time:o.displayTime,dateValidator:rome.val.beforeEq(c[1]),initialValue:o.defaultFrom,inputFormat:o.dateFormat}));n.on("data",function(t){o.$apply(function(){var i=u(moment(t,o.dateFormat),o.dateFormat,o.displayTime,"from");$(c[0]).val(i.format(o.dateFormat));n.setValue(i);o.from=r(i)})});t=rome(c[1],angular.extend({},f,{time:o.displayTime,dateValidator:rome.val.afterEq(c[0]),initialValue:o.defaultTo,inputFormat:o.dateFormat}));t.on("data",function(n){o.$apply(function(){var i=u(moment(n,o.dateFormat),o.dateFormat,o.displayTime,"to");t.setValue(i);o.to=r(i)})});i=function(){return(angular.isArray(o.context)?o.context:[o.context]).reduce(function(n,t){return n&&!t.parameters[l(t)]},!0)};o.$watch(i,function(n,t){n&&!t&&c.val(null)},!0)})},controller:["$scope","$attrs","$q","$compile","$rootScope","$parse",function(n,t,i,r,u,f){var o=[],e={},h=function(n){if(n){var t=n.fields.filter(function(n){return"date"===n.type||"datetime"===n.type});return t.length>1&&console.log('Warning: the dataset "'+n.getUniqueId()+'" has more than one date or datetime field, the first date or datetime field will be used. You can specify the field to use using the "time-field" parameter.'),0===t.length&&console.log('Error: the dataset "'+n.getUniqueId()+"\" doesn't have any date or datetime field, which is required for the Timerange widget."),t[0].name}return null},s;angular.isArray(n.context)?o=n.context:(o.push(n.context),e[n.context.name]={},n.timeField&&(e[n.context.name].timeField=n.timeField));angular.forEach(o,function(i){e[i.name]={timefield:e[n.context.name]&&e[n.context.name].timeField?e[n.context.name].timeField:null,formatter:f("$field + ':[' + $from + ' TO ' + $to + ']'"),parameter:"q"};angular.isDefined(t[i.name+"ParameterFormatter"])&&(e[i.name].formatter=f(t[i.name+"ParameterFormatter"]));angular.isDefined(t[i.name+"ParameterName"])&&(e[i.name].parameter=t[i.name+"ParameterName"]);angular.isDefined(t[i.name+"TimeField"])&&(e[i.name].timefield=t[i.name+"TimeField"])});s=function(t,i){n.$watch("[from, to]",function(r){r[0]&&r[1]&&angular.forEach(t,function(t){var u=i[t.name].parameter,r={};r.$to=n.to;r.$from=n.from;r.$field=i[t.name].timefield;["q","rq"].indexOf(u)>-1&&(u+=".timerange");t.parameters[u]=i[t.name].formatter(r)})},!0)};1==o.length&&"catalog"==o[0].type?s(o,e):i.all(o.map(function(n){return n.wait().then(function(t){null===e[n.name].timefield&&(e[n.name].timefield=h(t))})})).then(function(){s(o,e)})}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsTimescale",function(){return{restrict:"E",replace:!0,scope:{context:"=",timeField:"@",defaultValue:"@"},template:'<div class="odswidget odswidget-timescale">   <ul class="odswidget-timescale__scale-list">       <li class="odswidget-timescale__scale" ng-class="{\'odswidget-timescale__scale--active\': scale == \'everything\' || !scale}"> <a class="odswidget-timescale__scale-link" href="#" ng-click="scale = \'everything\'; $event.preventDefault();" translate>Everything<\/a><\/li>       <li class="odswidget-timescale__scale" ng-class="{\'odswidget-timescale__scale--active\': scale == \'year\'}">                 <a class="odswidget-timescale__scale-link" href="#" ng-click="scale = \'year\'; $event.preventDefault();" translate>Last 12 months<\/a><\/li>       <li class="odswidget-timescale__scale" ng-class="{\'odswidget-timescale__scale--active\': scale == \'month\'}">                <a class="odswidget-timescale__scale-link" href="#" ng-click="scale = \'month\'; $event.preventDefault();" translate>Last 4 weeks<\/a><\/li>       <li class="odswidget-timescale__scale" ng-class="{\'odswidget-timescale__scale--active\': scale == \'week\'}">                 <a class="odswidget-timescale__scale-link" href="#" ng-click="scale = \'week\'; $event.preventDefault();" translate>Last 7 days<\/a><\/li>       <li class="odswidget-timescale__scale" ng-class="{\'odswidget-timescale__scale--active\': scale == \'day\'}">                  <a class="odswidget-timescale__scale-link" href="#" ng-click="scale = \'day\'; $event.preventDefault();" translate>Last 24 hours<\/a><\/li>   <\/ul><\/div>',controller:["$scope","$attrs","$q",function(n,t,i){var r=[],u={},f="q.timescale",o=function(n){if(n){var t=n.fields.filter(function(n){return"date"===n.type||"datetime"===n.type});t.length>1&&console.log('Warning: the dataset "'+n.getUniqueId()+'" has more than one date or datetime field, the first date or datetime field will be used. You can specify the field to use using the "time-field" parameter.');0===t.length&&console.log('Error: the dataset "'+n.getUniqueId()+"\" doesn't have any date or datetime field, which is required for the Timerange widget.");u[n.getUniqueId()]=t[0].name}},e;angular.isArray(n.context)?r=n.context:r.push(n.context);i.all(r.map(function(i){return i.wait().then(function(r){angular.isDefined(t[i.name+"TimeField"])?u[i.dataset.getUniqueId()]=t[i.name+"TimeField"]:n.timeField?u[i.dataset.getUniqueId()]=n.timeField:o(r)})})).then(function(){e(r,u);var t=function(){return r.reduce(function(n,t){return n&&!t.parameters[f]},!0)};n.$watch(t,function(t,i){t&&!i&&(n.scale="everything")},!0)});e=function(t,i){n.scale=n.defaultValue||"everything";n.$watch("scale",function(n){if("everything"===n)return void angular.forEach(t,function(n){delete n.parameters[f]});var r=null;"day"===n?r="#now(days=-1)":"week"===n?r="#now(weeks=-1)":"month"===n?r="#now(weeks=-4)":"year"===n&&(r="#now(years=-1)");angular.forEach(t,function(n){n.parameters[f]=i[n.dataset.getUniqueId()]+">="+r})},!0)}}]}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsToggleModel",function(){var i=function(n,t,i){n[t]?angular.isArray(n[t])?n[t].indexOf(i)<0&&n[t].push(i):angular.equals(n[t],i)||(n[t]=[n[t],i]):n[t]=i},r=function(n,t,i){n[t]&&(angular.isArray(n[t])?n[t].indexOf(i)>=0&&(1===n[t].length?delete n[t]:n[t].splice(n[t].indexOf(i),1)):angular.equals(n[t],i)&&delete n[t])},n=function(n,t){"string"==typeof n[t]&&(n[t]=n[t].split(","))},t=function(n,t,i){"csv"==i&&angular.isArray(n[t])&&(n[t]=n[t].join(","))};return{restrict:"A",scope:{odsToggleModel:"=",odsToggleKey:"@",odsToggleValue:"@",odsStoreAs:"@?"},link:function(u,f){angular.isDefined(u.odsStoreAs)&&-1!=["array","csv"].indexOf(u.odsStoreAs)||(u.odsStoreAs="array");f.on("change",function(f){f.currentTarget.checked?u.$apply(function(){n(u.odsToggleModel,u.odsToggleKey);i(u.odsToggleModel,u.odsToggleKey,u.odsToggleValue);t(u.odsToggleModel,u.odsToggleKey,u.odsStoreAs)}):u.$apply(function(){n(u.odsToggleModel,u.odsToggleKey);r(u.odsToggleModel,u.odsToggleKey,u.odsToggleValue);t(u.odsToggleModel,u.odsToggleKey,u.odsStoreAs)})});u.$watch("odsToggleModel[odsToggleKey]",function(n){n?angular.isArray(n)&&n.indexOf(u.odsToggleValue)>=0||!angular.isArray(n)&&n.split(",").indexOf(u.odsToggleValue)>=0?f.prop("checked",!0):angular.equals(n,u.odsToggleValue)?f.prop("checked",!0):f.prop("checked",!1):f.prop("checked",!1)},!0)}}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsTopPublishers",["ODSAPI",function(n){return{restrict:"E",replace:!0,template:'<div class="odswidget odswidget-top-publishers"><ul class="odswidget-top-publishers__publishers">   <li class="no-data" ng-hide="publishers" translate>No data available yet<\/li>   <li class="odswidget-top-publishers__publisher" ng-repeat="publisher in publishers" ng-if="publishers">       <div class="odswidget-top-publishers__publisher-details">           <div class="odswidget-top-publishers__publisher-details-name"><a ng-href="{{ context.domainUrl }}/explore/?refine.publisher={{ publisher.path }}" target="_self">{{ publisher.name }}<\/a><\/div>           <div class="odswidget-top-publishers__publisher-details-count"><i class="fa fa-table" aria-hidden="true"><\/i> <span translate translate-n="publisher.count" translate-plural="Used by {{$count}} datasets">Used by {{$count}} dataset<\/span><\/div>       <\/div>   <\/li><\/ul><\/div>',scope:{context:"="},controller:["$scope",function(t){var i=function(){n.datasets.facets(t.context,"publisher").success(function(n){t.publishers=n.facet_groups[0].facets.slice(0,5)})};t.$watch("context",function(){i()})}]}}])}(),function(){"use strict";angular.module("ods-widgets").directive("odsTwitterTimeline",function(){return{restrict:"E",replace:!0,template:'<div class="odswidget"><\/div>',scope:{widgetId:"@"},link:function(n,t,i){var r='<a class="twitter-timeline"    href="https://twitter.com/twitterapi"    data-widget-id="'+i.widgetId+'"';i.height&&(r+='   height="'+i.height+'"');i.width&&(r+='   width="'+i.width+'"');r+='   >Tweets<\/a><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");<\/script>';t.append(r)}}})}(),function(){"use strict";var n=angular.module("ods-widgets");n.directive("inject",function(){return{link:function(n,t,i,r,u){var f=n.$new();if(!u)return void console.warn("inject directive used on an element with no transcluded directives",t);u(f,function(n){var i=n.clone();i.contents().wrapAll("<div>");i.contents().length>0&&i.contents().html().trim().length>0&&(t.empty(),t.append(n),t.on("$destroy",function(){f.$destroy()}))})}}});n.directive("odsFullClick",function(){return{restrict:"A",link:function(n,t,i){i.odsFullClick&&t.find("[ods-main-click]").attr("href",i.odsFullClick);t.click(function(n){if(!$(n.target).is("a,button,[ng-click]")&&0===$(n.target).parents("a,button,[ng-click]").length&&t.find("[ods-main-click]").length)if(document.createEvent){var r=document.createEvent("MouseEvents"),i=n.originalEvent;r.initMouseEvent(i.type,i.bubbles,i.cancelable,window,i.detail,i.screenX,i.screenY,i.clientX,i.clientY,i.ctrlKey,i.altKey,i.shiftKey,i.metaKey,i.button,i.relatedTarget);t.find("[ods-main-click]")[0].dispatchEvent(r)}else document.createEventObject&&(window.location=t.find("[ods-main-click]")[0].href)})}}})}(),function(){"use strict";angular.module("ods-widgets").directive("odsWidgetTooltip",["$rootScope","$compile",function(n,t){return{restrict:"A",priority:100,transclude:!0,controller:["$scope","$element","$attrs","$transclude",function(i,r,u,f){var e,o,s,h=this;this.configure=function(n){e=n.defaultTemplate||"";o=n.displayedFields||[];s=n.fields||[]};this.render=function(i,r,u){var c=n.$new(!0);return c.record=angular.copy(i),c.displayedFields=angular.copy(o),c.fields=angular.copy(s),u&&(c.displayedFields=c.displayedFields.filter(function(n){return u!==n.name})),angular.merge(c,r||{}),e||f(n.$new(!0),function(n){e=n.length>0?n:h.defaultTemplate}),t(e)(c)}}]}}])}()