From ad6e00ccd3d700a26c95bcc863b532e526a65e3a Mon Sep 17 00:00:00 2001 From: Cerem Cem ASLAN Date: Sun, 2 Aug 2020 03:44:52 +0300 Subject: [PATCH 1/2] improved build system as this project requires node v8 --- .naverc | 1 + README.md | 10 +++++++++- gen-dist => gen-dist.sh | 15 ++++++++------- gulpfile.ls | 19 ++++++++----------- 4 files changed, 26 insertions(+), 19 deletions(-) create mode 100644 .naverc rename gen-dist => gen-dist.sh (51%) diff --git a/.naverc b/.naverc new file mode 100644 index 0000000..a00f43e --- /dev/null +++ b/.naverc @@ -0,0 +1 @@ +v8 diff --git a/README.md b/README.md index 1c85863..8c12a23 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Building ### Install prerequisites ``` -sudo npm install -g gulp +sudo npm install -g gulp nave ``` ### Build @@ -37,12 +37,20 @@ sudo npm install -g gulp git clone https://github.com/loadingio/loading-bar cd loading-bar npm install +nave auto gulp ``` Built files will be written into `./build` directory +Releasing +============= + +``` +./gen-dist.sh +``` + LICENSE ============= diff --git a/gen-dist b/gen-dist.sh similarity index 51% rename from gen-dist rename to gen-dist.sh index 8c0ae6c..03d72ce 100755 --- a/gen-dist +++ b/gen-dist.sh @@ -1,23 +1,24 @@ #!/usr/bin/env bash +N="./node_modules/.bin" +rm -r dist 2> /dev/null mkdir -p dist echo "build src/loading-bar.ls ..." -./node_modules/.bin/lsc -cbp src/loading-bar.ls > dist/loading-bar-raw.js +$N/lsc -cbp src/loading-bar.ls > dist/loading-bar-raw.js echo "build src/presets.ls ..." -./node_modules/.bin/lsc -cbp src/presets.ls > dist/presets.js +$N/lsc -cbp src/presets.ls > dist/presets.js echo "build src/loading-bar.styl -> dist/loading-bar.css ..." -./node_modules/.bin/stylus -p src/loading-bar.styl > dist/loading-bar.css +$N/stylus -p src/loading-bar.styl > dist/loading-bar.css echo "bundle loading-bar ..." -./node_modules/.bin/browserify dist/loading-bar-raw.js > dist/loading-bar.js +$N/browserify dist/loading-bar-raw.js > dist/loading-bar.js rm -f dist/loading-bar-raw.js rm -f dist/presets.js echo "minifying loading-bar.js ..." -./node_modules/.bin/uglifyjs dist/loading-bar.js > dist/loading-bar.min.js +$N/uglifyjs dist/loading-bar.js > dist/loading-bar.min.js echo "minifying loading-bar.css ..." -./node_modules/.bin/uglifycss dist/loading-bar.css > dist/loading-bar.min.css +$N/uglifycss dist/loading-bar.css > dist/loading-bar.min.css echo "zip loading-bar.js and loading-bar.css ..." -rm -f dist/loading-bar.zip zip -r dist/loading-bar.zip dist/loading-bar.js dist/loading-bar.css dist/loading-bar.min.js dist/loading-bar.min.css echo "done." diff --git a/gulpfile.ls b/gulpfile.ls index be74190..6467c8c 100644 --- a/gulpfile.ls +++ b/gulpfile.ls @@ -1,5 +1,5 @@ argv = require 'yargs' .argv -only-compile = false +only-compile = argv.only-compile require! <[ watchify gulp browserify glob path fs globby touch gulp-livescript]> @@ -57,7 +57,7 @@ for-browserify = # Organize Tasks -gulp.task \default, -> +gulp.task \default, (done) -> do function run-all gulp.start do \lib @@ -67,8 +67,9 @@ gulp.task \default, -> \compressjs ... - watch for-browserify, -> - gulp.start \browserify + if argv.only-compile + return done! + watch ["#{src-path}/*.styl"], -> gulp.start \css watch ["#{src-path}/*.ls"], -> @@ -79,7 +80,6 @@ gulp.task \default, -> gulp.start \compressjs -browserify-cache = {} bundler = browserify do entries: ls-entry-file debug: true @@ -87,16 +87,14 @@ bundler = browserify do src-path ... extensions: <[ .ls ]> - cache: browserify-cache - package-cache: {} + cache: {} # required for watchify + package-cache: {} # required for watchify plugin: watchify unless only-compile ... bundler.transform browserify-livescript -first-browserify-done = no - function bundle bundler .bundle! @@ -115,9 +113,8 @@ function bundle #.pipe sourcemaps.write '.' .pipe gulp.dest out-dir .pipe tap (file) -> - log-info \browserify, "Browserify finished #{if out-dir isnt build-path then "out-dir: #{out-dir}"}" + log-info \browserify, "Browserify finished." console.log "------------------------------------------" - first-browserify-done := yes gulp.task \browserify, -> bundle! From f32fcb25371f43afdc0760936e4314bb65e96e39 Mon Sep 17 00:00:00 2001 From: Cerem Cem ASLAN Date: Sun, 2 Aug 2020 04:56:42 +0300 Subject: [PATCH 2/2] added img2 (custom background image) support --- dist/loading-bar.js | 83 ++++++++++++++++++++++++++++++++- dist/loading-bar.min.js | 2 +- dist/loading-bar.zip | Bin 12579 -> 12830 bytes lib/loading-bar.js | 99 +++++++++++++++++++++++++++++++++++++--- src/loading-bar.ls | 42 +++++++++++++++++ 5 files changed, 218 insertions(+), 8 deletions(-) diff --git a/dist/loading-bar.js b/dist/loading-bar.js index 044334c..061db14 100644 --- a/dist/loading-bar.js +++ b/dist/loading-bar.js @@ -120,7 +120,7 @@ wrap = function(content){ } }; window.ldBar = ldBar = function(selector, option){ - var xmlns, root, cls, idPrefix, id, domTree, newNode, x$, config, attr, that, isStroke, parseRes, dom, svg, text, group, length, path0, path1, patimg, img, ret, size, this$ = this; + var xmlns, root, cls, idPrefix, id, domTree, newNode, x$, config, attr, that, isStroke, parseRes, dom, svg, text, group, length, path0, path1, patimg, img, ret, size, img2, this$ = this; option == null && (option = {}); xmlns = { xlink: "http://www.w3.org/1999/xlink" @@ -579,7 +579,88 @@ wrap = function(content){ return this$.inited = true; }); img.src = config.img; + if (config.img2) { + if (config["img-size"]) { + ret = config["img-size"].split(','); + size = { + width: +ret[0], + height: +ret[1] + }; + } else { + size = { + width: 100, + height: 100 + }; + } + group[0] = domTree('g', { + rect: { + attr: { + x: 0, + y: 0, + width: 100, + height: 100, + mask: "url(#" + id.mask + ")", + fill: config["fill-background"] + } + } + }); + svg.querySelector('mask image').attrs({ + width: size.width, + height: size.height + }); + group[2] = domTree('g', { + image: { + attr: { + width: size.width, + height: size.height, + x: 0, + y: 0, + preserveAspectRatio: config["aspect-ratio"], + "xlink:href": config.img2, + 'class': 'solid' + } + } + }); + img2 = new Image(); + img2.addEventListener('load', function(){ + var ret, size, v; + if (config["img-size"]) { + ret = config["img-size"].split(','); + size = { + width: +ret[0], + height: +ret[1] + }; + } else if (img2.width && img2.height) { + size = { + width: img2.width, + height: img2.height + }; + } else { + size = { + width: 100, + height: 100 + }; + } + svg.querySelector('mask image').attrs({ + width: size.width, + height: size.height + }); + group[2].querySelector('image').attrs({ + width: size.width, + height: size.height + }); + this$.fit(); + v = this$.value; + this$.value = undefined; + this$.set(v, true); + return this$.inited = true; + }); + img2.src = config.img2; + } svg.appendChild(group[0]); + if (config.img2) { + svg.appendChild(group[2]); + } svg.appendChild(group[1]); } svg.attrs({ diff --git a/dist/loading-bar.min.js b/dist/loading-bar.min.js index 6f15c95..53b40c6 100644 --- a/dist/loading-bar.min.js +++ b/dist/loading-bar.min.js @@ -1 +1 @@ -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o\n '},gradient:function(dir,dur){var colors,ret,len,gx,gy,x,y,i$,i,idx;dir==null&&(dir=45);dur==null&&(dur=1);colors=slice$.call(arguments,2);ret=[this.head("0 0 100 100")];len=colors.length*4+1;dir=dir*Math.PI/180;gx=Math.pow(Math.cos(dir),2);gy=Math.sqrt(gx-Math.pow(gx,2));if(dir>Math.PI*.25){gy=Math.pow(Math.sin(dir),2);gx=Math.sqrt(gy-Math.pow(gy,2))}x=gx*100;y=gy*100;ret.push('');for(i$=0;i$')}ret.push('\n\n');return wrap(ret.join(""))},stripe:function(c1,c2,dur){var ret,i;c1==null&&(c1="#b4b4b4");c2==null&&(c2="#e6e6e6");dur==null&&(dur=1);ret=[this.head("0 0 100 100")];ret=ret.concat(['',"",function(){var i$,results$=[];for(i$=0;i$<13;++i$){i=i$;results$.push(''))}return results$}().join(""),''].join(""));return wrap(ret)},bubble:function(c1,c2,count,dur,size,sw){var ret,i$,i,idx,x,r,d;c1==null&&(c1="#39d");c2==null&&(c2="#9cf");count==null&&(count=15);dur==null&&(dur=1);size==null&&(size=6);sw==null&&(sw=1);ret=[this.head("0 0 200 200"),''];for(i$=0;i$','',"",'','',""].join(""))}return wrap(ret.join("")+"")}};handler={queue:{},running:false,main:function(timestamp){var keepon,removed,k,ref$,func,ret,this$=this;keepon=false;removed=[];for(k in ref$=this.queue){func=ref$[k];ret=func(timestamp);if(!ret){removed.push(func)}keepon=keepon||ret}for(k in ref$=this.queue){func=ref$[k];if(removed.indexOf(func)>=0){delete this.queue[k]}}if(keepon){return requestAnimationFrame(function(it){return this$.main(it)})}else{return this.running=false}},add:function(key,f){var this$=this;if(!this.queue[key]){this.queue[key]=f}if(!this.running){this.running=true;return requestAnimationFrame(function(it){return this$.main(it)})}}};window.ldBar=ldBar=function(selector,option){var xmlns,root,cls,idPrefix,id,domTree,newNode,x$,config,attr,that,isStroke,parseRes,dom,svg,text,group,length,path0,path1,patimg,img,ret,size,this$=this;option==null&&(option={});xmlns={xlink:"http://www.w3.org/1999/xlink"};root=toString$.call(selector).slice(8,-1)==="String"?document.querySelector(selector):selector;if(!root.ldBar){root.ldBar=this}else{return root.ldBar}cls=root.getAttribute("class")||"";if(!~cls.indexOf("ldBar")){root.setAttribute("class",cls+" ldBar")}idPrefix="ldBar-"+Math.random().toString(16).substring(2);id={key:idPrefix,clip:idPrefix+"-clip",filter:idPrefix+"-filter",pattern:idPrefix+"-pattern",mask:idPrefix+"-mask",maskPath:idPrefix+"-mask-path"};domTree=function(n,o){var k,v;n=newNode(n);for(k in o){v=o[k];if(k!=="attr"){n.appendChild(domTree(k,v||{}))}}n.attrs(o.attr||{});return n};newNode=function(n){return document.createElementNS("http://www.w3.org/2000/svg",n)};x$=document.body.__proto__.__proto__.__proto__;x$.text=function(t){return this.appendChild(document.createTextNode(t))};x$.attrs=function(o){var k,v,ret,results$=[];for(k in o){v=o[k];ret=/([^:]+):([^:]+)/.exec(k);if(!ret||!xmlns[ret[1]]){results$.push(this.setAttribute(k,v))}else{results$.push(this.setAttributeNS(xmlns[ret[1]],k,v))}}return results$};x$.styles=function(o){var k,v,results$=[];for(k in o){v=o[k];results$.push(this.style[k]=v)}return results$};x$.append=function(n){var r;return this.appendChild(r=document.createElementNS("http://www.w3.og/2000/svg",n))};x$.attr=function(n,v){if(v!=null){return this.setAttribute(n,v)}else{return this.getAttribute(n)}};config={type:"stroke",img:"",path:"M10 10L90 10M90 8M90 12","fill-dir":"btt",fill:"#25b","fill-background":"#ddd","fill-background-extrude":3,"pattern-size":null,"stroke-dir":"normal",stroke:"#25b","stroke-width":"3","stroke-trail":"#ddd","stroke-trail-width":.5,duration:1,easing:"linear",value:0,"img-size":null,bbox:null,"set-dim":true,"aspect-ratio":"xMidYMid","transition-in":false,min:0,max:100,precision:0,padding:undefined};config["preset"]=root.attr("data-preset")||option["preset"];if(config.preset!=null){import$(config,presets[config.preset])}for(attr in config){if(that=that=root.attr("data-"+attr)){config[attr]=that}}import$(config,option);if(config.img){config.path=null}isStroke=config.type==="stroke";parseRes=function(v){var parser,ret;parser=/data:ldbar\/res,([^()]+)\(([^)]+)\)/;ret=parser.exec(v);if(!ret){return v}return ret=make[ret[1]].apply(make,ret[2].split(","))};config.fill=parseRes(config.fill);config.stroke=parseRes(config.stroke);if(config["set-dim"]==="false"){config["set-dim"]=false}dom={attr:{"xmlns:xlink":"http://www.w3.org/1999/xlink",preserveAspectRatio:config["aspect-ratio"],width:"100%",height:"100%"},defs:{filter:{attr:{id:id.filter,x:-1,y:-1,width:3,height:3},feMorphology:{attr:{operator:+config["fill-background-extrude"]>=0?"dilate":"erode",radius:Math.abs(+config["fill-background-extrude"])}},feColorMatrix:{attr:{values:"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0",result:"cm"}}},mask:{attr:{id:id.mask},image:{attr:{"xlink:href":config.img,filter:"url(#"+id.filter+")",x:0,y:0,width:100,height:100,preserveAspectRatio:config["aspect-ratio"]}}},g:{mask:{attr:{id:id.maskPath},path:{attr:{d:config.path||"",fill:"#fff",stroke:"#fff",filter:"url(#"+id.filter+")"}}}},clipPath:{attr:{id:id.clip},rect:{attr:{class:"mask",fill:"#000"}}},pattern:{attr:{id:id.pattern,patternUnits:"userSpaceOnUse",x:0,y:0,width:300,height:300},image:{attr:{x:0,y:0,width:300,height:300}}}}};svg=domTree("svg",dom);text=document.createElement("div");text.setAttribute("class","ldBar-label");root.appendChild(svg);root.appendChild(text);group=[0,0];length=0;this.fit=function(){var that,box,d,rect;if(that=config["bbox"]){box=that.split(" ").map(function(it){return+it.trim()});box={x:box[0],y:box[1],width:box[2],height:box[3]}}else{box=group[1].getBBox()}if(!box||box.width===0||box.height===0){box={x:0,y:0,width:100,height:100}}d=Math.max.apply(null,["stroke-width","stroke-trail-width","fill-background-extrude"].map(function(it){return config[it]}))*1.5;if(config["padding"]!=null){d=+config["padding"]}svg.attrs({viewBox:[box.x-d,box.y-d,box.width+d*2,box.height+d*2].join(" ")});if(config["set-dim"]){["width","height"].map(function(it){if(!root.style[it]||this$.fit[it]){root.style[it]=box[it]+d*2+"px";return this$.fit[it]=true}})}rect=group[0].querySelector("rect");if(rect){return rect.attrs({x:box.x-d,y:box.y-d,width:box.width+d*2,height:box.height+d*2})}};if(config.path){if(isStroke){group[0]=domTree("g",{path:{attr:{d:config.path,fill:"none",class:"baseline"}}})}else{group[0]=domTree("g",{rect:{attr:{x:0,y:0,width:100,height:100,mask:"url(#"+id.maskPath+")",fill:config["fill-background"],class:"frame"}}})}svg.appendChild(group[0]);group[1]=domTree("g",{path:{attr:{d:config.path,class:isStroke?"mainline":"solid","clip-path":config.type==="fill"?"url(#"+id.clip+")":""}}});svg.appendChild(group[1]);path0=group[0].querySelector(isStroke?"path":"rect");path1=group[1].querySelector("path");if(isStroke){path1.attrs({fill:"none"})}patimg=svg.querySelector("pattern image");img=new Image;img.addEventListener("load",function(){var box,that;box=(that=config["pattern-size"])?{width:+that,height:+that}:img.width&&img.height?{width:img.width,height:img.height}:{width:300,height:300};svg.querySelector("pattern").attrs({width:box.width,height:box.height});return patimg.attrs({width:box.width,height:box.height})});if(/.+\..+|^data:/.exec(!isStroke?config.fill:config.stroke)){img.src=!isStroke?config.fill:config.stroke;patimg.attrs({"xlink:href":img.src})}if(isStroke){path0.attrs({stroke:config["stroke-trail"],"stroke-width":config["stroke-trail-width"]});path1.attrs({"stroke-width":config["stroke-width"],stroke:/.+\..+|^data:/.exec(config.stroke)?"url(#"+id.pattern+")":config.stroke})}if(config.fill&&!isStroke){path1.attrs({fill:/.+\..+|^data:/.exec(config.fill)?"url(#"+id.pattern+")":config.fill})}length=path1.getTotalLength();this.fit();this.inited=true}else if(config.img){if(config["img-size"]){ret=config["img-size"].split(",");size={width:+ret[0],height:+ret[1]}}else{size={width:100,height:100}}group[0]=domTree("g",{rect:{attr:{x:0,y:0,width:100,height:100,mask:"url(#"+id.mask+")",fill:config["fill-background"]}}});svg.querySelector("mask image").attrs({width:size.width,height:size.height});group[1]=domTree("g",{image:{attr:{width:size.width,height:size.height,x:0,y:0,preserveAspectRatio:config["aspect-ratio"],"clip-path":config.type==="fill"?"url(#"+id.clip+")":"","xlink:href":config.img,class:"solid"}}});img=new Image;img.addEventListener("load",function(){var ret,size,v;if(config["img-size"]){ret=config["img-size"].split(",");size={width:+ret[0],height:+ret[1]}}else if(img.width&&img.height){size={width:img.width,height:img.height}}else{size={width:100,height:100}}svg.querySelector("mask image").attrs({width:size.width,height:size.height});group[1].querySelector("image").attrs({width:size.width,height:size.height});this$.fit();v=this$.value;this$.value=undefined;this$.set(v,true);return this$.inited=true});img.src=config.img;svg.appendChild(group[0]);svg.appendChild(group[1])}svg.attrs({width:"100%",height:"100%"});this.transition={value:{src:0,des:0},time:{},ease:function(t,b,c,d){t=t/(d*.5);if(t<1){return c*.5*t*t+b}t=t-1;return-c*.5*(t*(t-2)-1)+b},handler:function(time,doTransition){var ref$,min,max,prec,dv,dt,dur,v,p,node,style,box,dir;doTransition==null&&(doTransition=true);if(this.time.src==null){this.time.src=time}ref$=[config["min"],config["max"],1/config["precision"]],min=ref$[0],max=ref$[1],prec=ref$[2];ref$=[this.value.des-this.value.src,(time-this.time.src)*.001,+config["duration"]||1],dv=ref$[0],dt=ref$[1],dur=ref$[2];v=doTransition?this.ease(dt,this.value.src,dv,dur):this.value.des;if(config.precision){v=Math.round(v*prec)/prec}else if(doTransition){v=Math.round(v)}v>=min||(v=min);v<=max||(v=max);text.textContent=v;p=100*(v-min)/(max-min);if(isStroke){node=path1;style={"stroke-dasharray":config["stroke-dir"]==="reverse"?"0 "+length*(100-p)*.01+" "+length*p*.01+" 0":p*.01*length+" "+((100-p)*.01*length+1)}}else{box=group[1].getBBox();dir=config["fill-dir"];style=dir==="btt"||!dir?{y:box.y+box.height*(100-p)*.01,height:box.height*p*.01,x:box.x,width:box.width}:dir==="ttb"?{y:box.y,height:box.height*p*.01,x:box.x,width:box.width}:dir==="ltr"?{y:box.y,height:box.height,x:box.x,width:box.width*p*.01}:dir==="rtl"?{y:box.y,height:box.height,x:box.x+box.width*(100-p)*.01,width:box.width*p*.01}:void 8;node=svg.querySelector("rect")}node.attrs(style);if(dt>=dur){delete this.time.src;return false}return true},start:function(src,des,doTransition){var ref$,this$=this;ref$=this.value;ref$.src=src;ref$.des=des;!!(root.offsetWidth||root.offsetHeight||root.getClientRects().length);if(!doTransition||!(root.offsetWidth||root.offsetHeight||root.getClientRects().length)){this.time.src=0;this.handler(1e3,false);return}return handler.add(id.key,function(time){return this$.handler(time)})}};this.set=function(v,doTransition){var src,des;doTransition==null&&(doTransition=true);src=this.value||0;if(v!=null){this.value=v}else{v=this.value}des=this.value;return this.transition.start(src,des,doTransition)};this.set(+config.value||0,config["transition-in"])||false;return this};return window.addEventListener("load",function(){var i$,ref$,len$,node,results$=[];for(i$=0,len$=(ref$=document.querySelectorAll(".ldBar")).length;i$LOADING',"fill-background-extrude":1.3,"pattern-size":100,"fill-dir":"ltr","img-size":"70,20",bbox:"0 0 70 20"},line:{type:"stroke",path:"M10 10L90 10",stroke:"#25b","stroke-width":3,"stroke-trail":"#ddd","stroke-trail-width":1,bbox:"10 10 80 10"},fan:{type:"stroke",path:"M10 90A40 40 0 0 1 90 90","fill-dir":"btt",fill:"#25b","fill-background":"#ddd","fill-background-extrude":3,"stroke-dir":"normal",stroke:"#25b","stroke-width":"3","stroke-trail":"#ddd","stroke-trail-width":.5,bbox:"10 50 80 40"},circle:{type:"stroke",path:"M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10","fill-dir":"btt",fill:"#25b","fill-background":"#ddd","fill-background-extrude":3,"stroke-dir":"normal",stroke:"#25b","stroke-width":"3","stroke-trail":"#ddd","stroke-trail-width":.5,bbox:"10 10 80 80"},bubble:{type:"fill",path:"M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10","fill-dir":"btt",fill:"data:ldbar/res,bubble(#39d,#cef)","pattern-size":"150","fill-background":"#ddd","fill-background-extrude":2,"stroke-dir":"normal",stroke:"#25b","stroke-width":"3","stroke-trail":"#ddd","stroke-trail-width":.5,bbox:"10 10 80 80"}}},{}]},{},[1]); +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o\n '},gradient:function(dir,dur){var colors,ret,len,gx,gy,x,y,i$,i,idx;dir==null&&(dir=45);dur==null&&(dur=1);colors=slice$.call(arguments,2);ret=[this.head("0 0 100 100")];len=colors.length*4+1;dir=dir*Math.PI/180;gx=Math.pow(Math.cos(dir),2);gy=Math.sqrt(gx-Math.pow(gx,2));if(dir>Math.PI*.25){gy=Math.pow(Math.sin(dir),2);gx=Math.sqrt(gy-Math.pow(gy,2))}x=gx*100;y=gy*100;ret.push('');for(i$=0;i$')}ret.push('\n\n');return wrap(ret.join(""))},stripe:function(c1,c2,dur){var ret,i;c1==null&&(c1="#b4b4b4");c2==null&&(c2="#e6e6e6");dur==null&&(dur=1);ret=[this.head("0 0 100 100")];ret=ret.concat(['',"",function(){var i$,results$=[];for(i$=0;i$<13;++i$){i=i$;results$.push(''))}return results$}().join(""),''].join(""));return wrap(ret)},bubble:function(c1,c2,count,dur,size,sw){var ret,i$,i,idx,x,r,d;c1==null&&(c1="#39d");c2==null&&(c2="#9cf");count==null&&(count=15);dur==null&&(dur=1);size==null&&(size=6);sw==null&&(sw=1);ret=[this.head("0 0 200 200"),''];for(i$=0;i$','',"",'','',""].join(""))}return wrap(ret.join("")+"")}};handler={queue:{},running:false,main:function(timestamp){var keepon,removed,k,ref$,func,ret,this$=this;keepon=false;removed=[];for(k in ref$=this.queue){func=ref$[k];ret=func(timestamp);if(!ret){removed.push(func)}keepon=keepon||ret}for(k in ref$=this.queue){func=ref$[k];if(removed.indexOf(func)>=0){delete this.queue[k]}}if(keepon){return requestAnimationFrame(function(it){return this$.main(it)})}else{return this.running=false}},add:function(key,f){var this$=this;if(!this.queue[key]){this.queue[key]=f}if(!this.running){this.running=true;return requestAnimationFrame(function(it){return this$.main(it)})}}};window.ldBar=ldBar=function(selector,option){var xmlns,root,cls,idPrefix,id,domTree,newNode,x$,config,attr,that,isStroke,parseRes,dom,svg,text,group,length,path0,path1,patimg,img,ret,size,img2,this$=this;option==null&&(option={});xmlns={xlink:"http://www.w3.org/1999/xlink"};root=toString$.call(selector).slice(8,-1)==="String"?document.querySelector(selector):selector;if(!root.ldBar){root.ldBar=this}else{return root.ldBar}cls=root.getAttribute("class")||"";if(!~cls.indexOf("ldBar")){root.setAttribute("class",cls+" ldBar")}idPrefix="ldBar-"+Math.random().toString(16).substring(2);id={key:idPrefix,clip:idPrefix+"-clip",filter:idPrefix+"-filter",pattern:idPrefix+"-pattern",mask:idPrefix+"-mask",maskPath:idPrefix+"-mask-path"};domTree=function(n,o){var k,v;n=newNode(n);for(k in o){v=o[k];if(k!=="attr"){n.appendChild(domTree(k,v||{}))}}n.attrs(o.attr||{});return n};newNode=function(n){return document.createElementNS("http://www.w3.org/2000/svg",n)};x$=document.body.__proto__.__proto__.__proto__;x$.text=function(t){return this.appendChild(document.createTextNode(t))};x$.attrs=function(o){var k,v,ret,results$=[];for(k in o){v=o[k];ret=/([^:]+):([^:]+)/.exec(k);if(!ret||!xmlns[ret[1]]){results$.push(this.setAttribute(k,v))}else{results$.push(this.setAttributeNS(xmlns[ret[1]],k,v))}}return results$};x$.styles=function(o){var k,v,results$=[];for(k in o){v=o[k];results$.push(this.style[k]=v)}return results$};x$.append=function(n){var r;return this.appendChild(r=document.createElementNS("http://www.w3.og/2000/svg",n))};x$.attr=function(n,v){if(v!=null){return this.setAttribute(n,v)}else{return this.getAttribute(n)}};config={type:"stroke",img:"",path:"M10 10L90 10M90 8M90 12","fill-dir":"btt",fill:"#25b","fill-background":"#ddd","fill-background-extrude":3,"pattern-size":null,"stroke-dir":"normal",stroke:"#25b","stroke-width":"3","stroke-trail":"#ddd","stroke-trail-width":.5,duration:1,easing:"linear",value:0,"img-size":null,bbox:null,"set-dim":true,"aspect-ratio":"xMidYMid","transition-in":false,min:0,max:100,precision:0,padding:undefined};config["preset"]=root.attr("data-preset")||option["preset"];if(config.preset!=null){import$(config,presets[config.preset])}for(attr in config){if(that=that=root.attr("data-"+attr)){config[attr]=that}}import$(config,option);if(config.img){config.path=null}isStroke=config.type==="stroke";parseRes=function(v){var parser,ret;parser=/data:ldbar\/res,([^()]+)\(([^)]+)\)/;ret=parser.exec(v);if(!ret){return v}return ret=make[ret[1]].apply(make,ret[2].split(","))};config.fill=parseRes(config.fill);config.stroke=parseRes(config.stroke);if(config["set-dim"]==="false"){config["set-dim"]=false}dom={attr:{"xmlns:xlink":"http://www.w3.org/1999/xlink",preserveAspectRatio:config["aspect-ratio"],width:"100%",height:"100%"},defs:{filter:{attr:{id:id.filter,x:-1,y:-1,width:3,height:3},feMorphology:{attr:{operator:+config["fill-background-extrude"]>=0?"dilate":"erode",radius:Math.abs(+config["fill-background-extrude"])}},feColorMatrix:{attr:{values:"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0",result:"cm"}}},mask:{attr:{id:id.mask},image:{attr:{"xlink:href":config.img,filter:"url(#"+id.filter+")",x:0,y:0,width:100,height:100,preserveAspectRatio:config["aspect-ratio"]}}},g:{mask:{attr:{id:id.maskPath},path:{attr:{d:config.path||"",fill:"#fff",stroke:"#fff",filter:"url(#"+id.filter+")"}}}},clipPath:{attr:{id:id.clip},rect:{attr:{class:"mask",fill:"#000"}}},pattern:{attr:{id:id.pattern,patternUnits:"userSpaceOnUse",x:0,y:0,width:300,height:300},image:{attr:{x:0,y:0,width:300,height:300}}}}};svg=domTree("svg",dom);text=document.createElement("div");text.setAttribute("class","ldBar-label");root.appendChild(svg);root.appendChild(text);group=[0,0];length=0;this.fit=function(){var that,box,d,rect;if(that=config["bbox"]){box=that.split(" ").map(function(it){return+it.trim()});box={x:box[0],y:box[1],width:box[2],height:box[3]}}else{box=group[1].getBBox()}if(!box||box.width===0||box.height===0){box={x:0,y:0,width:100,height:100}}d=Math.max.apply(null,["stroke-width","stroke-trail-width","fill-background-extrude"].map(function(it){return config[it]}))*1.5;if(config["padding"]!=null){d=+config["padding"]}svg.attrs({viewBox:[box.x-d,box.y-d,box.width+d*2,box.height+d*2].join(" ")});if(config["set-dim"]){["width","height"].map(function(it){if(!root.style[it]||this$.fit[it]){root.style[it]=box[it]+d*2+"px";return this$.fit[it]=true}})}rect=group[0].querySelector("rect");if(rect){return rect.attrs({x:box.x-d,y:box.y-d,width:box.width+d*2,height:box.height+d*2})}};if(config.path){if(isStroke){group[0]=domTree("g",{path:{attr:{d:config.path,fill:"none",class:"baseline"}}})}else{group[0]=domTree("g",{rect:{attr:{x:0,y:0,width:100,height:100,mask:"url(#"+id.maskPath+")",fill:config["fill-background"],class:"frame"}}})}svg.appendChild(group[0]);group[1]=domTree("g",{path:{attr:{d:config.path,class:isStroke?"mainline":"solid","clip-path":config.type==="fill"?"url(#"+id.clip+")":""}}});svg.appendChild(group[1]);path0=group[0].querySelector(isStroke?"path":"rect");path1=group[1].querySelector("path");if(isStroke){path1.attrs({fill:"none"})}patimg=svg.querySelector("pattern image");img=new Image;img.addEventListener("load",function(){var box,that;box=(that=config["pattern-size"])?{width:+that,height:+that}:img.width&&img.height?{width:img.width,height:img.height}:{width:300,height:300};svg.querySelector("pattern").attrs({width:box.width,height:box.height});return patimg.attrs({width:box.width,height:box.height})});if(/.+\..+|^data:/.exec(!isStroke?config.fill:config.stroke)){img.src=!isStroke?config.fill:config.stroke;patimg.attrs({"xlink:href":img.src})}if(isStroke){path0.attrs({stroke:config["stroke-trail"],"stroke-width":config["stroke-trail-width"]});path1.attrs({"stroke-width":config["stroke-width"],stroke:/.+\..+|^data:/.exec(config.stroke)?"url(#"+id.pattern+")":config.stroke})}if(config.fill&&!isStroke){path1.attrs({fill:/.+\..+|^data:/.exec(config.fill)?"url(#"+id.pattern+")":config.fill})}length=path1.getTotalLength();this.fit();this.inited=true}else if(config.img){if(config["img-size"]){ret=config["img-size"].split(",");size={width:+ret[0],height:+ret[1]}}else{size={width:100,height:100}}group[0]=domTree("g",{rect:{attr:{x:0,y:0,width:100,height:100,mask:"url(#"+id.mask+")",fill:config["fill-background"]}}});svg.querySelector("mask image").attrs({width:size.width,height:size.height});group[1]=domTree("g",{image:{attr:{width:size.width,height:size.height,x:0,y:0,preserveAspectRatio:config["aspect-ratio"],"clip-path":config.type==="fill"?"url(#"+id.clip+")":"","xlink:href":config.img,class:"solid"}}});img=new Image;img.addEventListener("load",function(){var ret,size,v;if(config["img-size"]){ret=config["img-size"].split(",");size={width:+ret[0],height:+ret[1]}}else if(img.width&&img.height){size={width:img.width,height:img.height}}else{size={width:100,height:100}}svg.querySelector("mask image").attrs({width:size.width,height:size.height});group[1].querySelector("image").attrs({width:size.width,height:size.height});this$.fit();v=this$.value;this$.value=undefined;this$.set(v,true);return this$.inited=true});img.src=config.img;if(config.img2){if(config["img-size"]){ret=config["img-size"].split(",");size={width:+ret[0],height:+ret[1]}}else{size={width:100,height:100}}group[0]=domTree("g",{rect:{attr:{x:0,y:0,width:100,height:100,mask:"url(#"+id.mask+")",fill:config["fill-background"]}}});svg.querySelector("mask image").attrs({width:size.width,height:size.height});group[2]=domTree("g",{image:{attr:{width:size.width,height:size.height,x:0,y:0,preserveAspectRatio:config["aspect-ratio"],"xlink:href":config.img2,class:"solid"}}});img2=new Image;img2.addEventListener("load",function(){var ret,size,v;if(config["img-size"]){ret=config["img-size"].split(",");size={width:+ret[0],height:+ret[1]}}else if(img2.width&&img2.height){size={width:img2.width,height:img2.height}}else{size={width:100,height:100}}svg.querySelector("mask image").attrs({width:size.width,height:size.height});group[2].querySelector("image").attrs({width:size.width,height:size.height});this$.fit();v=this$.value;this$.value=undefined;this$.set(v,true);return this$.inited=true});img2.src=config.img2}svg.appendChild(group[0]);if(config.img2){svg.appendChild(group[2])}svg.appendChild(group[1])}svg.attrs({width:"100%",height:"100%"});this.transition={value:{src:0,des:0},time:{},ease:function(t,b,c,d){t=t/(d*.5);if(t<1){return c*.5*t*t+b}t=t-1;return-c*.5*(t*(t-2)-1)+b},handler:function(time,doTransition){var ref$,min,max,prec,dv,dt,dur,v,p,node,style,box,dir;doTransition==null&&(doTransition=true);if(this.time.src==null){this.time.src=time}ref$=[config["min"],config["max"],1/config["precision"]],min=ref$[0],max=ref$[1],prec=ref$[2];ref$=[this.value.des-this.value.src,(time-this.time.src)*.001,+config["duration"]||1],dv=ref$[0],dt=ref$[1],dur=ref$[2];v=doTransition?this.ease(dt,this.value.src,dv,dur):this.value.des;if(config.precision){v=Math.round(v*prec)/prec}else if(doTransition){v=Math.round(v)}v>=min||(v=min);v<=max||(v=max);text.textContent=v;p=100*(v-min)/(max-min);if(isStroke){node=path1;style={"stroke-dasharray":config["stroke-dir"]==="reverse"?"0 "+length*(100-p)*.01+" "+length*p*.01+" 0":p*.01*length+" "+((100-p)*.01*length+1)}}else{box=group[1].getBBox();dir=config["fill-dir"];style=dir==="btt"||!dir?{y:box.y+box.height*(100-p)*.01,height:box.height*p*.01,x:box.x,width:box.width}:dir==="ttb"?{y:box.y,height:box.height*p*.01,x:box.x,width:box.width}:dir==="ltr"?{y:box.y,height:box.height,x:box.x,width:box.width*p*.01}:dir==="rtl"?{y:box.y,height:box.height,x:box.x+box.width*(100-p)*.01,width:box.width*p*.01}:void 8;node=svg.querySelector("rect")}node.attrs(style);if(dt>=dur){delete this.time.src;return false}return true},start:function(src,des,doTransition){var ref$,this$=this;ref$=this.value;ref$.src=src;ref$.des=des;!!(root.offsetWidth||root.offsetHeight||root.getClientRects().length);if(!doTransition||!(root.offsetWidth||root.offsetHeight||root.getClientRects().length)){this.time.src=0;this.handler(1e3,false);return}return handler.add(id.key,function(time){return this$.handler(time)})}};this.set=function(v,doTransition){var src,des;doTransition==null&&(doTransition=true);src=this.value||0;if(v!=null){this.value=v}else{v=this.value}des=this.value;return this.transition.start(src,des,doTransition)};this.set(+config.value||0,config["transition-in"])||false;return this};return window.addEventListener("load",function(){var i$,ref$,len$,node,results$=[];for(i$=0,len$=(ref$=document.querySelectorAll(".ldBar")).length;i$LOADING',"fill-background-extrude":1.3,"pattern-size":100,"fill-dir":"ltr","img-size":"70,20",bbox:"0 0 70 20"},line:{type:"stroke",path:"M10 10L90 10",stroke:"#25b","stroke-width":3,"stroke-trail":"#ddd","stroke-trail-width":1,bbox:"10 10 80 10"},fan:{type:"stroke",path:"M10 90A40 40 0 0 1 90 90","fill-dir":"btt",fill:"#25b","fill-background":"#ddd","fill-background-extrude":3,"stroke-dir":"normal",stroke:"#25b","stroke-width":"3","stroke-trail":"#ddd","stroke-trail-width":.5,bbox:"10 50 80 40"},circle:{type:"stroke",path:"M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10","fill-dir":"btt",fill:"#25b","fill-background":"#ddd","fill-background-extrude":3,"stroke-dir":"normal",stroke:"#25b","stroke-width":"3","stroke-trail":"#ddd","stroke-trail-width":.5,bbox:"10 10 80 80"},bubble:{type:"fill",path:"M50 10A40 40 0 0 1 50 90A40 40 0 0 1 50 10","fill-dir":"btt",fill:"data:ldbar/res,bubble(#39d,#cef)","pattern-size":"150","fill-background":"#ddd","fill-background-extrude":2,"stroke-dir":"normal",stroke:"#25b","stroke-width":"3","stroke-trail":"#ddd","stroke-trail-width":.5,bbox:"10 10 80 80"}}},{}]},{},[1]); diff --git a/dist/loading-bar.zip b/dist/loading-bar.zip index 44b58b0bab5fedacb881d4adda43755bcf2d6bc7..2b369a52623b34e9f7fc980385576868bd6bb03f 100644 GIT binary patch delta 12345 zcmZvib8z5I)2?INwr$(C&5dpTVmlk#wl=mlHg@A|Y;Sm;=c_t(&iB?^Q$5vFHPhXH zPTluaVwP`#uObf)fdK*n0t13b4W{Z%Q?)6K3j)Gr4FZCmdW(aR%nS|45>gre8y?>9 zAfON@;2Vg2P>G7E^A~-NwkD#c_G=K}DQLm6wAr%`6`Mea0$A zLsqVxY31XxBbFJAgl1B9(=SiHfD%pzq&s$N)C}~>ts>T5jnYTTtmBTY;UqAHvMk3h z_Nv0-Oz3C*9V*~geX_*HAmgoDcjO{ODf#|JM!P>HFU{eRFR&LbZr|d4M{$AW(niCE zCRULc!jw*3%&=#D9|2zorHzN!BK%?0Rx$Jm*>FQ%Ilu3Hl?-J`?# zo64fNwS26ZKd>E-8@xdYd68JZzmQa-*R^qfA#hdSyIi9`Ms%>1ExwmjoMM)IF;YW2 zA23&U z@5!6c_Nj;5`hAs}cAO=gyQ54rPIh zO(|j+==>UZGf3(J1qS~f5+ccYnHT7sFZ`B-`gsk8LOstwU-VgCeRLcd>E-41xs_ai zy#_>vlE5T!okS+WnaB`)K`PHeA7`dKiYOf=STRNW-FFGr~o)FA7aA^?;Cq zya(U$+)q3TzSjwW8Q)}G3=_XIcM;!d%_Da9P;8JXPNq_il=V;E%4&l#Ab`9pzBcD0 z!b&R4W=chjKAJ(jfYE`&!pan3XmQJ)k^^6c)Fhy%&<}H`2@nLkh|aaf^&*F~yij8g zoVBON>UVs#j_<~SRFS0s9!$`=Uu6a7{rhYga%zvnSr?t$8a=4ir;!Fz>)A?Ol1FHL zm|}Sx|J-4evg|IhQkTSZ&}IQayF&9=BVC~VZW`B(9KQEVe-mu0U(5xX2M-a)D)2LC z?$cj&`^T&#hVqmZwoS^Y=`DH&X=XqY52-3i#B;z)yla5)Zn5`FSyHXUikwzmSdiTN zz!569s6HBk=+Fe@>~0bP0mU1g6B>xjlO0wNiW%%M;kUU_pKIEbGF3ILzqyA?wCltP zunaueKL1VB8_T_oJoIn^4HM}%NEPpSWVk|D-zDcN%f_4^xB zbTz)W5Yo+>Vy?lC#@#W8ta>ZDbBs-dxNyK<8T_F0b znYBhV-U&1|vFdj*`irg!E0tyO5L$YH*9qzqajid5g^@Zzi>|YUuVMkP;eez-;_#Ve z-vo-GPNBI@8T!R5ij0)n9y~+Z5Q8K3LQ3}pi|r1f^aNdp7G)A^BBnm)shf83Xctsnb*5fld9C)U^bg?*c6n z2Y5Y~7};x=#C!pXA5m*>AOQ6hN^K5`{#7~Nlo-)tP^vkZeq97MuhI3Xs(x(mJ3e8y z#TE^nTyT7PhDRWkmMv5d_O6cc_mp zrjg4*pV{ZB3AgG;$EZOCDa*OOdFfdeMmC2Wd}>_n&f{Znn`x`c2;lp-XB)y39#|(T zMNBmeizxJH>ycxMkoE(#y5}JSXF4XhX)D%&YzN{gm^k4I6I;Lu* zTBI_ZhuW1vBn^O00;XsRI$`F8C819>booIiIE%o(_=Diy$=`z&YWK+9E3r;gI%O1F z{zN;N_PH`q$+89;Zb`f}4S8k4Fu~=~ctctlq+78XcE`SRaWT@+Uq-_Y@MWrB`Rw|; z2s&0?TZAWgWHOm?XnwSqz#PG>aAYl{n5-Y`)zZ|ctho5+0Tx|;O^TtkY>{!$7vufx z!U;jd1F8LS#8`Ii?fRUsQK2V}(Cs=0A{L4Km8I0h_GXV-*mU?I7bNpJVP{XP%{}_&dDx6f{)e?No`*HuLF$3DD{q_BE}Q z*ebH%z{>$L!Ax!)^9V62#z|q%@BTctxC!>gM7~Yc+%b}gM-V+_J8;&EEYtcYvH-A? z!dfGht)RbO(x7sxeg?8DD}N>N7owk3ol!(^JF!gBfMIv;$PyYiT8?nDI;Kt2QYd0a z^Yv>*&gfQH{5*>^`di!5MSBfWup@?5LuUs3OS_92GgRa+x`;F1Kxnd*oxdEe;F(cQ zyb7>rY*nt#T6eryH=@Zd99Lj?Imd;~sjU)gN7yLiheQPf-IG?=u{gO!41Ip7(l^fi ziG6BZfMUI%t$^y1_(R-JujM0O3nDDbcRPc{)m)m$OtpoqSS#$UlC{5g+-Gs4})Hmsr+AArKY-`UDgwPgpi3}!B~qg?$$tF zeXyF%Y4lIjdN~D@70qawQ!otzJ;jdQ?0bsg8pkjF-D@+0W@9pf?-D=#Lyq#-$msn~ z0FJD+vM4#^SOQgKBneDxC(Des5>3d|N~aLeL# z5^!QiN{fPiG&3aZ<8O*ZmgOutAvs;l0?kEoeAMFPTL?_@4%ryHilf5ite?L3vs)+} zP}g$K5sB`JQWBn=vn6R?w+B5FHSY(~zf!ILlt8NA)+oH6_!hD&ioXcDiyT*07>Ur7w#jWJ8g|z-0S>kRfQpkv zOt)|YV#EL)a|v^O6H=j(OX!g+BWGj|Z@1FNP^*SxJ9xu*?3hZChXDliqIss%Njyt7 z&5+;P+U$oU2E67;$7y1bkd`TD+_GA6Xh;i0jTp9NZ0rUG>ZU)nwyJ&y+Y-K+aF$(h zEeaA;S+3inss2y`%M8*Brj7wNpc0Be+3<$5;_ner(6D!pA^aMOhr(UhOGAs|ZJ_B3 zi6umo8;5w~!qX}FOdU%jf+1N4BFKUo9QO2 zZH{%7zD2E|t%jy#W~rk4ir$96jWPwuMO;+}{AhqKP9$aR{yIKCW93^3(Cu&`mWM}Q zbl?)WLn2fkbcc&k0?iaV?2442nMelaG5c{&@yh&?D$gFPMiphnEUJ-a$g(_ZtsB3{ zFp~TxYRJaCFRRAJmZr8|!@`GcUqCFac-!N;KH12Q#)NzJU0&JEuP27jV!Ehq(C#_T zV?;SK=QVx$hQogcGoMcwi0)g=j^|j5!{e_0WwL{lyGV=>9Vp}>e3}u>_3HA{QbQ+5 zjXfpZW8;RrG?MP5j<+0Qu-pr;CSnImZtTYK*E1|XPEDj0d|LcCJt#PKE5>#qJ=>!U zCA`A%UKf?A>;Xh5e$4cC4<++#Fy+kCRPkeX2tDA0=*(1eHJz~&XxnQEr}%NH-(HWk zPDr#A+lJ~8*yXwrEtHNZ709cc`t#D8a5%}WzVH%N1{B+%>_-h~dPp7>O^vm}YTEKN z>H*(MLjo^=mx%|a17D!i^oK_J7%r6H3^%vM5ML)6Ws@yQqqLB`e7Y_}fvxhI_QJ}9?4U_kNQojg%I7(`DLGHYe;%F9Q6>NV@8Kpb^erhEC&6U63t z#7ztQISQ{FG@@#-W*03y3;6UwuF88BUyF5XX;&V9ak$2t4u-1v3kH$=ota_TcdoZO z4hKv1jO=U*EO2$*Lst|C<3R%fl^Xo@*1e^l9$U$Pg%S8RWe-L&M+dktKL^6h7CO;L zlT)~%PDVN*WHV*Yq*+lf2f=t1h}Cvu^Fc)Nuj)oSBWdt`95WaJH0SI5o!wzK=LlHG zfQo1=e>NmxmQN&o^1|g3xkA3Q--g&&NsdLWBuE&}YX&bdrAv@@oI9RME=d|fELKN) zb2JjbxUDz}DoqcZ)Y)`{j;S&Ip;!nec%9e;%qqbOmj4!>h>4Dh)G!W?_{-C1 zg7Wtm(`SAveJ(~%2%hTgv-Tr-j-Ws`AP1Gt=hvf<+d7O!CEK(>;zdn&rA;`gxOy&i zRCUb900)C0k!1!QP`IgMVkFK!z#JV*mYA3e=6fgH?-k+8{)mw5wZ)USJY7kN!&?QE z{)8Yuc&H9tA&l47F%wkG*NC4)mkOHGA4a;7ZOsNV*Sgdi%skfOTbt2=vrZ$rMG=L# z{K;k&+cmvQR+3`vc5o3}el^tgLh8L#wpX&ugkbbCp1G-1FXvb4fj#8;-1wH+G;Y&}e-!);noSGfH2m4j{GxAMer%`4Kb+%gVg5vgoAQ0ad)@89 zCp8WZ!EsQU`XNT7n^mn! zOhqo)vGC*)Yz3TU8rPvbi#=y`$%tW0VPzh%dEkm`SDskJ86EWDDXXT=L~IYZooOs+ z8q%cq*I@z-LZ)8nXzBe|CNE2UU|OtiQL++cdc`^4>3Xo1gqLS=TMK`>iC_FUB2sx? z>S`#|)RHA(QI>&bKT*z~C$7y}P30{o(ByJ#!DA#m`?XZQ@ftTHJG1aK2^rZ%%YQV~ z?jzdLweDYLx<|P{c18`8fzc?+Cvf6mXo)B*qiN1|-iE)C^kc`qoRQw7G$e^fBDf z8MJh?f8q(Q+S~kzBwE}rah(69ctq0pz+6nb=%<0a*lIZ@5ZKbTn?`=V+@V{_NO;dA z2*0?xv2r}EqT~RH;#rG}$#!G|-@g(H+lY`z~AK-2K1_mIYCKhPt6*(wTH5JbdxD7Nk@p+XTIP`@e-)j;`nI~m`Nes$j~-A zjw7$bYRsf*akuoo&21n$dFkaa)yzctis01kCARZbGdfn!NN(*H3Jv73VUh5WcroI^ z4bu+MvaUgkV$?0AM?M1J1Um9B^J5=~-mSZLHzX%kgs*%3%w7@kpPqbLRUIVLqC2W! zef4XVzlRK0q0G8_eF{gL@WK_fDz>hyKQqm^^>Y;oPZf1qd2;c$W~k`86WS-oS`iv2 z;kT?I+AEE_N#{S3+dozc1Zol7t5i=Y`zd>`ms<4Ev$4RUdWryZuUL*t$kLHGgkPM>^?-1Jua5(@0?gFK!j940&&0OCMi*Bi=ZGJpsOy86 z>j4qMzeuf(hoGr;BQ*UpWJj4Ur+91p)?@l?6nADG1lC_#b;4($tW#kZ?ZY~UkXtDO zO$-k@Of|e(NSgtU#)x!=C_#(EneuPLD%FUAjhHV4$NGc@IgX}?p3k6tXE$2LCZXJo zp~8(DreSN2pEbBR6*#V!~ z^nfz`IVC#Y0k6+bP@e4t=K9pqsg(GT6AhPf*XJrZu5VBlIc+pNSzO1+q6)@sW9*Eq^?YUlwAy1bj6h*9%ss`fi7p4?RgMHW-hb%h(e8!J>#|Y!Q znrJR9kJ(hIc56l}fM?BEWv=OFym#yt0T$Dbe~S%VX-b^FGsAJN`zX2J+57n#yQ&xT zl_?Yle^zxv#Gp3A-v{li8g@{%;QO`o+4hgX5A);=2xIFHw6srk|0rFeuNn69u!`dT zadSW^9~8-KM7!tq0z38-S%o@-rC^;~59XrLDsI^mL8MYDTBf1>T#V4J_VG?JudxR< zmdpU)Jh*>BL+)oW9?6uM;|VCgwM~DQF86g~RaQxy?!;I;q~jYgsDqv6&pGz^P+yR8 z-{a!b7J039cGxC#?2ZWk(n;rYke1jmHD{O__L?*rD0ZS1iA=+qWa;#Ua zOGL(_;cM`Nrsqg-Qsd223F1jgN}BfpOppe0kmbL^9tI)6M5hFzmkDGR^L3w4U+dt~ zMAswuqc!*uhhfiuvuD#)2|7gUNHONOrDI5Vp=Tb~MeIN*|D!aA zs)_cy19-XN2YLgUozrJq6bxKc64?T^(!lKEOvWSi2{4jIF!%XJrqs zLU@yIL!X(U)3SfHghMrZE2~;hS(%E~+vV$dJNc_`P4RCyG#wE?EZPPg-<&*iLk}hy z4QrHxfTsJVp5=zpJo83x>X@2tL0~GD!-KzXB9e?vYf7U2?b{fiqgs_+!9^ml+!-jL zSdn}_I!&Z9e4|1VP(J!Cy|L}59B0-**XoD|b{B}Wk1FXlu6r=Dh;!4NF!#SgaWse40Y?CkDE$%AyzG%JHs85C~bho z5rHk}N^fu5^JFq^Ti*Sk?;#@47l?G@uc~@Ki9wH z`-tvZ1Cwf>yAur)DTo@(c^*_*W4zU1%wFz<8$12Oard!zd~Z@#INLX|VnJ3oZrAU1 z>%l!}=V0kN;g+AM0Mc-Q9*Es80#8wYcYk_0ix#Lc{`gL_q<#f8M12SxuF(4T1POo6 zlD}UR^qd`3sKq2HW)mrc%T`U~&PyHNMngjoj$3UXES+Wwd91Vx{0#>0D=)#qx4}+G zOyqyEr92hupR7O+RU|XN?uX66;bS`Tx*;ma9W(lJ%T%ZKd0{)+&G#d>(>X$vzw&i@ zHn<^cIq;GyS7lTbXnq9v74%*QeLO{XK86-c(DR$WQ+9>z8)YgwTC-i~q6I?-SJ~X_ zriAORpm&_Ja#P5dp_XTcutjFu@W`uOP&1%01U#Kx#u5hx-Y<=kKGEJSJ04d88nJQN z2jWC9t%}7dRNybWh+yNH1hW0P_@#$6I24o_Q9cJZGR*Cks7=5zO4Eeau!!RD1?Wow zBy$3|E5r7L&@fu;HyT|7dtL(}V|@gzb+*=vG4-sxKYIpgS-Ko~W&VQoe}A$iUH#ld z&qa@KqelEzP#JRnmA#=5rEK>tmSVY^f!H`_Wo&U!#f4S5?b#bmxf>3wn$`7{dJvnL zD71eRVed;BjxQhk95vAULgoSh{oh_q>LCs-=705OQps?KQUA4b7{7=V2LEw)oJB!E zu>ZAlQsMC60l9y?oPXm#{G3aEJGWm_DLdEND&~@4VWcuDYGj}x1_`NKifP1EBULr@ z+2>%fg_FNsB*wPS3TU$$WSrM#;6scr#sR=A_`8U(Q zH8?wy@4`Ey%g0376r}I!3OfMHBoDBDojFOqON;$A$?vc`R=za+d}?V#3AzM?kl(0c zB-7o&G9L<^%mPZ!$uuKdls+VWd-csVbFiv&W}2x@APf>bNIlrRiN{W*NDp zmObZH3CfD^wRBwfzx|ncF4*qM^Ju8qgLrc#&UiR$jN=WBaWijAkMz?IGVP z>m!jv4q4}{wgHvbk0W{&KOd z*09RjEyVPf0e%QZrBW2GBrY;mp_ouqWu0*9pKb{SH+`zjp&XQ$hiu4%U^ojStF2ca8} z)DR?=Zz&mBNbzwpA8L31zE)J#lz&or8W3#{M0=$>-ngDrZ?XGj5nV9@x3>IsL~_y(bnfgz*Nmv%4G zRZ1h2hH5bues=?LWU?L1=J98%l!UjWyQ5N~q`moR6gPK6tn+=c&@rekkhE_Muy1e< zkn(QCH3fIzgoQKrX5bcI#P#$FvM*~NwsC~UGKu8v&NdwWio2%aRRJq>$973BIdi-% zblU_hM7QKyCI#Zx*c;CTEv^=JiFN|QCS6NY&dB42O65B8L0X6!u21LQ2JO`) zLu)EN#@buLW3?ugH;L_gtdgwOu1AGh7%_e(k-rFJ3a`!v>ro#o2L(V21M0;;mM3j5MMOXc~F4Ku_6e6_j!DGHL2^4b<~lSws==CJ>T`_eWn4v z31xTg-aeUPx2AK6WOfi7skjtN9SrD%xjIr~aSG3@*sY4~cBd5!gm+pJS8FvB|gP`rCKR z*ZCjGvDD-vSM~S`r>Psg1-PNd=nNdKhMG#~4xx0a{3$B&LN@6m`v%hWK?#5}ReqdT z-p$!mi{nSfwUz0@k*KsRX#FCU)lL_H!JmDu)48wu9ShY&+h{*Pvx;JVrSY=Vd{&;W z67Ucr*^aV(Ee+#+K}3_a{R>0<<*oxS8(fxJGW*s&!7>^?99%$tDMWdnVEHq#QE&my zi07mlISYkgXwwU&>TZQpCmyiCo8gHeXfyz6C;Q5R_&yiPfGr$NAnjt}V-%$c3M$@} z>2?Y#ma$*1+>i7r<;9)=O!QfV7P45gHAA$p!BqdCRa72h$-#U{?6}HT8SCunxlpC2 z7aW;s5R<@Fv{uVx3*lhm@$M2DX>Z2%!!1XL<95bxd7P{E6P#UfQUkb5U}fFbbIBuZMmlPE`9g_XcPyP{&bzYfJwyk80 z1gYI_8C7kv;oJwM#xT~&AX*ESJPMV$R)=GTCVgLR(ZrNKI3Bw%W-;TdJM0{}m&K8z zfeEgdvBQPm$Y2LR+yI{X&c6}uOZUgKi_r7w{!C;T?b8c!qP47gtPd)uwRZ{z5lU@a z9#J)g{xzW3JI|p(LgZ`%MR({JFeQ(d3TyUhTS6U!+=@)v%1*eNBt`BftkgS89fya^SVN%u6 zyVO}#pUUlbo_Aa)VJS+@;e2ip>Xz5!3+mU7jQpsJ8~5}RG2;(=E@HNOGXyImDdSSGT{-K^ z{>jEoxi?<%uMV)daC{f!Zk@xgS2~uDd}%7rNqI6P^KtFOlIxQ7FoQ$qn2|iP^W&l} zwCFHL{yhM`AN%D1fdovPy8&Mc*KOkmjf~d_lOHP&@%fkwOQ&RNa@hQ_Bu)e}e%C3>Nv=&@HLSIhEUQGq6vjsJD++tT?&j1A8{?ZP zXj~2$o;>*(T%fU^;-3Ky5eVD!V6HpTK|R~+5p70{@K8jRxO1C|GOVmJKJT#z1doD? z)W3p!+wsFLNdXt22?P(hrXj^|)&uyxnSzU9u0enXFqM9-kkVF*DY!nAOQ{>nOUJXg9}m~&$&d^=8T9gZ1a-5244bSE0;&C7{#wC<~?5O6gf2h zf%^yTRYY>TM_J?}F0=xhOglzH)Epqj<@JcixJ~Sm!h)S>(`RNNbzQCDDuCzC{c}gf zSppz^forclpzk=p;ryJiQF=tEpe%^#u;J>LJ#cSd4PELC@>rT~AG>45d6kWScB!#SbpfvxTn=E9e9uUq619V{gHliy<IrWJm=k`p`LaZOacV}h#BqRH zW$$&OXGmZ~{Pg!@&D3I-2M$^em#AM+bR&)u88JI}%T*ioq7(vMHeLDyWMNI7#?$c; zwdp=dFEb_CYBr2~s(A|0(4-LxM52yF;{#kJ zEs>*aRMZlluOxVdJABlkTXKe*-F~lyx0qC>_(;mwp>D}y#yH$nf?ZT$a|U8yDW#kel&#C`8D^>Mi@|10P@j;{B`GqslV;U_rCi6VZj8}X-6dv$Xos(G9p9eL& z94QMo7q!c@>nF0#SPCN9*9Y3gNDd9N1eu9KF4SJAzJSKB%2e6O_7zWhJp3$X?i4!) zwdWY8N|ml3ByB{5do}jU;MG!sl~-zAIlWv9egu|{xG`G%cP}bf=jcST6U;a?Y5H^R zLYwVvAN-K;XE29_o3B7b%T;@xYg~0vAx^OKWZT2mieL%0&57P_Zk z&a_nWV`$?&aXpAz{A!NrpZ5z5?!g#xcA?cBE$E$G2<9G+BGiCIoBPURe51;Cv90KE zWs`9yS9%sIVPG=SnBg4BdEA&5;Ym2||#Vp}ah382qwJ2B_o_J`ot3jqwql zYC=Wzi4i`L>BB_D$q|UuVMC$$Om8aa!Uy{!)o?DX!w1omm+ObtcidQf8SvcPg|@J)kD|A( z`Fr?C7O_q2TepVL_L}v08LGosr{o&CA96H&WK$2y@r$MnZ5a|Jj4jH4K{W>uQZ|j{ z=w{6YwGZgzo5V)zex}O3UD&(T^y@M;1d#mlv;!D!VZnU=fS+3M>QoJ@z56h_J%5yO zKL-yh$5~=SKOme)IbGrq>Pn755wXS@k4l*)?Lg>a)e?_Ldz;H*vt|u^4+K>rr>dw% z@C4VooOK~4h+SE6(_FA(>dl|TLp<(W7kr_HE}VXme4nPU|ldr_rJgwJf%@NF{Yg||iL@r4SK zD9bNP%Jg`MTxi3*`*2SsdPZ(z5oy8+DaNkgZYYP=RZpd@DM{ON)3vY(WCqhBo|#)_ zna0?zfyn;QbVb*H(a|*PA( zR1UIt%sdkZ^)cTJgY&*DV7aVs)?7pX$%B)?^GAZi!HM%$1NxyJ!C9UbvC&4xbMf}U ze^~;$o9|b#%VbaFi7kJ=gX)BlhF|m6Q}4H8>8*X{vL0sqUise*s}ZZb#BHPP(Wb!D zy=;71-&5^wWt=9zpQ(jo2OnjdUR~|tisj}$yP(c%3Wzs`=aY)wp8#Skl@=$I=PTu7 zKg@Bc77w+&Piw_MbhpZsL0PfM7|F=*=q@5+RjD6(w4xsHoktH+X>YE{7#(R;)`ovC zb3U(>jvRbf*5dg7k`jJ}mM~J`l|BQRaIhEY{r$>;(>HA0I@&vXpc!V{kWWxaMGbO( zVZC8gOJP+Owsgz$vD+}#H1d5m{`AL4KT(PO_n`ewi+Prbk*blPg=%sQJl#ue|1c&* zemrvf^aVOLlgN#o_I9T_KCsMH_QBP+aL~w#185cxox{cu$Hz)Mf0)bnI?;i!o7_P5 zUYuPw|JxZ{q0yISWKwF%a~8cqH&OVYSh)A7NpLhQzLhEx-s{}{&Y%MAn~JNWqLbWy zmzxgNSizj<)sMbD(?Eoq7B?i6{Al^leKWpt?v_0Ha4kot&*gupD)qnWO7TZN;bpG~ zr^aDr1~UV-44?b&V$R2%KmOr)xb2x8PsZC=hez5DB6l3_jst0``s7~9AM0cf-ef7p zxnG*#y8DJ!ZspUK++H=p`+fvfJ0>YO-VAqk(?ARl@|nV2StMZ?2ACeVz_N&8jnuM3 zGPm+0UKQhfgK362tKaDX9=DLMKYdq*Hy*G>m6OK;lXxNrAH=KIVC{h*5@-SpMY~eD zgqwh9@2i=9{*ROkeyav&rO-nc7N)m`+1EVwJWjW0PC$llzn|=}@yKrI6QL=?xKuza z$c;iZ7UURN#+AwIbSIA@g_J3Y;;f`2!1v-A-9kEcvJK&#C80kviuSCrJ&5(V=PQSX z=Vgf|%1DHFh*&A(*B8od|9=Rn?M#fA|5X%CePL=r`rll9Y9}+p{}A#2p`NP9gMtx( z|38xchm(bK$3I-X7AOb^1_;hS83@QfDM)E>+&_H1g^im#v%Qn4g^i;XqnW8IlewFl zrUoPk_i)0N$#|)OEJWo0Mcn<*BB}i>cwi;W|6Ipr{lC5c>oZ8G Se1Wsf`kCkIf*3PZ0jp8I9%p!>t3YMarhK;8i!*C;E~&;@ z7@!yJvE`BF*Z}>)GfiF#{kuM_;r4z$L9E(hMsy!>f;NZmp;Jqfwjthi{m z!1woYslv@R;Pdh2rMLHE&Zz{ailIkz6Tl!4TIrdA_V#u%Wgf<=>q+9iKT?m^Njwq1 zxZ5gLzYO3M|j% zsQJXb4%a5sGBk1D6p3Fw>)5wzE5!zu6!XjVKfPiiA0nOD1e7QlyK`^tZJW1+o}S(& zvQiBc%}!|g8@!&(P4+?~JRD8+1FX>zMtt#o-7hsS{h}imHHOOMb(X}J2r10J@!~u# zD1>l9Q1*8r1#pD%OGvtJ$5-u6Ay3GtCn&pqi1b`N&BLdMWcvK*25BM7CTuEiyjIYE zp&)ARVvy2CSlv9Xd%f**8}09a6He!8CWw67DNW8GAl%&CY<-Y$O#Oz31mv6$*(t_a zqV>gb-htaMH$M$vBU9sq;&Y@Ehzd4^I3WT%_7kgcl3XRS%CjJX^bt@ZpoDH!?b=^4 zdi2>hApmXxb=VQgig2A>renl0YmF9@CH8JU^J+kmFhIVIJ>w^G!pNyCHSxY~jcLF= ze&d2dAj*`%Lv~4>qkxTjK-$PV{+HHPd=O|CaLft~Y8aozNMBlyKie0-h5gt5^4AlF z+vs~~4p^I(5dYESf_J7qxmC=ft83ElWn|hP5*k~|B^nu`3kW@M962s`{WA1imKnS( zm-I{EZvG`(e6nV9*H4c@o5H>3xm$7GdZ;Atn9BsuReV(TdB2%!fKU9+`mz|J`~wDt zV^Wasb7LIQ>7O`GDkZ{@N`9Y0-C77?RQn**hUQ7_%Bp5m#bAO}UULacnJywp%+5Z1 z+=jqFOM??RFrYc#F%U#y*}XQAo3+&&KDh>1>3ibrMi*}I4-&@yd%y7=AfCy~_`Wb+ zdR`5rk4!2Fl9g^B?@in#-~Rlk)7d$KnQ4^oV{ZH zTqHf48w$fgQGde!TwK~VyETj9!b=4kS?psxCnL*8$^@PoCUp2K;!q*|Q6WA>F`e;m z;9%GVcvQj~0`3VsaX&0aAH;MIeO~dcfn19(2$o!Hq;5F1y0q!<2=5_RR%TyLH z7B%%e>Z`dPUE?EVJKc}-;RBxGyXc__m}4#WGSew4D1~||g-4?jy&zUrYUKOP6-t9m zl@nA0>@I(6NKxK@BBp&eONVAtpvG3BTdnOzE?tVB1JVS&RhP;$=F>aa^`k}{6Kmw^ zgp|1+p?`363qE^<-jYNF=|MVBHBX+0z{X2@0Gz~&h9Jzy?wu1yHPA%GMNcajlb z%)h_j*Wq(8za7_Bt=Aw+@DW@lYARty&&vL&k`B1zVR*ZNnGmC$1+W82NJAa*_~}BN zO^W+{1E{zqOV?MS1>MlboqHiEXZQvXOpT!l@fRM zJcJm=D9ROL6?+W!%o@vS6<5RzW>PY3MTWAb0phq0d3OnZraw7Be1R0c%|0#b%rng^ zOMvQ;7Owh`aeUC6x!J-$OpxgN9{-@1FzS#(PmcGYzdPdJH>DGhWjK;n`~t9Z(C+DB zPA`B#ZfJGDf`)GGeW1#cprbZYvEr9ay(Tr?25^=Rq088aEMbbUYX$P4ld0C14U>Vm z0CfDW;(M94dOL8i-pS3Uv7s}@{L05raIvHE4R-s{&?c#*E(^om5QmANoYwr57D@szmnWH4Y?SzcRpT&fB{}kbescVklkhcE zUF3X~h|VoBz#)N~Qe=?KiCo;fxrDVO0Y+++?C*J3kY2ZY^g(aii*cjmMuqar?Z`C} z+*8T4qIv6)W@sQ2+Hc4o#5zHP05lOfzFtTqsT;kBO(637@{BPdVRA8;X=&~eusKTR zn0@-ZdMg-eo^WRuJ6~|eDD_u}Z8`3bwBTJ>vc0cPR=?CG{&(py)(*!}kAjj9z$w-d z!RRr!?X`vHt4^AVl|x|)kX8_lU;EhnP!%Fg|dZHRisJ*(y0pd^4mxJ6LaG8g2^jg9{UN|v;CruZlOH+XSZK6wHmZfqOW`2muO6L^_s zl3b$wpq;Y6TIUbmtvl27TPiG=nE!HaUgJq|o%9V?%&{4D!Tcbp%yHlaKru)QJb;24 zGfw1HmRgWlO=#-#vj!wUO8mQ4P!|+-+0`a2W0qOZ!pK8zN@&GMru>KURG8@MZxqd3 zTH?8zHFTeqolCokf}*KXAkVQ!Lff|wK6(Ge1|__$e@66FVV<8a8*Jn~v|0YZru-Sz zF3m%OX;~uuD5GR;NOCeeK#uvga3FUdv3L7VU29Nee{Dh*5?%FdSXsreRh^r_p9~AD zc;ENMM{=2V%TAZi2x?ze!nboY3EGFci;vf%ZY!FF{eKXg+#R5``75MWLc$;30B?lW-ijSQXA z1tGAMx1X7E-i~1bfSrLGs_#cgGD3MiZ=ocj+cwHcSXm!#PArYSk?%uzyj)U3KSC&N zU@t?;1~ETLg0s=R(FGBEDCW3MY6V$maB-=Osn0f*vFgHNg&3xnvJ^E_U(}VkC1*9q z89pT-MhbEPjD!zrrblPYp?dZndBtUk2iq#)n+$Q`kpmYs00}>>-#r#-;Z1eImk)f5 zS}dYJugw!X%=fSF#o5V&M5O(-NJKTe?_cdK(lkmLZ>vr_G%CkhoZ(LLB`GkCsPZQP zGq;0z^f?;n1}H7!^JF5~4OV!q6b++92k>^#`W+Ts#Puz@E3K9x7rP%Vk8?xVkI725 zrfue?o06^lfF4KAYJN*(J|8E6GbJ&cFV4@)b7_Xrp~rYi?cDCgdNh}Em?v#SKu zS?%F54qQ1VqRh48zk`{^sCxVD?pQEJe7I8h09tR(kv2L7exly)<0N=?}q@AKgLrjg}B)^ zunnUuoF|R!b+jAiuH)N`HLz>UK4R?q9IQwuFnEIwQRBjCia^y7Ojq~K~p{Y_|MU5xX-&sG%kU1awx>FTz_PN3YeeU2Yr4t|1KW@peW&goU_o+roF!r)FfxA#M_#$r<-^P zKaMdD?6Z4ZpwHhrZSkl(L_e-hSwvv%SF0#ed^qyLe?l*aY}~3*qpO>TkbSe?iX#uw z#Bn(ipc;kKidDQGaqW*D%lC?Hx>LG9ivmxp&N!W+Qdg|bYuB!$KN%*3`VLS#U~^Rf zMDcIBa92ZtKzqN_5E2uX3 zXTlog{VO$P9^22`ICjR+MS+OK2adlu(?@3`k%CZA#sZOv1l87RymBC zA%uQDdNzV$7bAyCf#F3rC$)8w>Q2O#&d{gS_t(uAc3tH&J&qYpP7Zx@VL;efJCGBsG=P2umL z%^r&>0lhuW=LmAvi>6g+x&)id#$=)I7|A;B?C&U-3dAHzW;oOxJYPU zO$V*b_r;P^+Ai#gGlykaI%+LJCU#z2eX>J8^N$cqmIs}W?zVZ>661iz#(d?yGu63G}fdLmfPh@VLbRuL-+jzge1uD(4RadqpqXiV$ydy zEUlvtJf1~pbK$AsI!*meWnABnGaq`T@`qq?@{^I)KXCcqPf~p0E6dk_8mm`95KA zRD$Svp?XodN!@fdx#w;EFII*!rFvsKTxLp%B)RAR{q< zed!9Agh!&nXL8ccPQqSM4me*5UA5s>>+d3MWmx5FvWAB41boAhZ%;1M&pR2r@mW;FEZ`zB1}x5GGz1wKds(>QN@jL-A;>d-O?vKW66I;3QPy70ue zh!)7WK2b|fp0b^qg{~BeD0y4(XkGsX2#-V(R95FVlh&3V_6*OY;)0_Bco0K(T|~=& zFw*(qxGcy$px zaVH(v6i2KNYSu+APFj6a-Y(uJv07Ims%^ExQa4oh2UrsiA@7%-XxMYMZtC0Pgt>2R zg(shIYdbRcyCwnj6Qk6Z+DF)u1{gJfE8kI(Uq!F6JGdsY3SoG1QAh3vy7$#{F1|p@ zupQ@0e9h0!c?^4tZ!73YEHG0#en$f;6Uad@30P}Oe)$D8l*3QowexDq>N{Ewl$#s% z0H7aga0ocZcr`1_5@Q@Zxg=JhW|Y~wVGXAO2)*KwJW3i%_U9F4!Xj1U_qaF!e}*8T zWxBY(FN1%B1>AOb`*uDH)C3eod{d(_r%{%-&&R}P)&dmxP zA2oF!X8;~Jy?}r9$H3J|n%M?eG22`hB?AI9miN7mC>Xe?bbQrieU&MQPs&sXzqA;hK%%L3HKnm`1scXwpsDcZ~Pzt)?7b|Tss>n zqrY{^isCKF3C~FK_(!^8zEIT5(PZgfTece-Z0OLEbpG`eMWw+|{g&gAl$mE_QHQQw zuUBLgWBK8_#0N=tZEoCIRn|aF&IOH;=w$RZRlAq-h`2?u@1(to^?pgDJVx)RvVH*- z!ac&v;#JXoohtsbIQW&!Epv+gJdRstkjUIfaAaS>O*5ilY54~czcBVXwa z?~{W3d;g**H=O*tFVM`{%fbRM|48W$!2t_yuBV<>CFhR0Qs5;jpqh`#i+E;S1PjJ2 zLSO}v--yCqe(wbBGkgK+c1^%@VZ?wAjp%}vFWW0Z*|VfRdinqb5{essCabh`fvMZ| zsbOEU0KBK9m_h>pFN#k<;GWUgd=U4=ohwgmo6vgtm01^FXmT(nb89QkWKIl5eeVjr8y_YIZw z<IxZ80I?Od4PXh=B*kL<@>H4e6qo<#M1}k;{cJPc7`j~dyZ3dn2AYxm1OVA&=;S+ z>C)5s=3*acy9B$qsDSVPlm2qPYBF+PwTM;1Y8m3z({bkVlxiarj3#GM>V8np&GF?? zQ^B$jGL39t5G&JjuhZ{lb_M+$-oKuR-KgNw{|1<{rT<$>)_61&*9l9old+VXA6RI7 zuoXYOAjNrQ4Rty^dYVjd&_Z-D$^@V{h-0z6Bqy*2=qTK(*A#|ktH4*=L7bHog0l& z%n@?AFk~~HdZ`7KL@758wTB8*WgQLdD^xOJ<`vfRxFp)_zaLi{TR^XIX0a6Qm&<0x z@s?d3IA36bCLNOGVoBt9MyR}d>Fwo&?eX`)?cpWELd>!f_tlA#IPid0u_Wjniw+td zZe>A)589X*5EhgnVi|5=Sg%jWD9fqwu_eRW0K@HS#X-`~=ZX-i7+9AP$&gw$}F$%K)vYpS+Gy>jin zq>hBTu$-Yvs@bS&mEN0TjdZ+7Q}s=caJ1*UGN_R=~Syi0&J4HV4DYbrz*yQgC{ zk`FXtA&7#a72b)<|I7xXc?!O~erslt6j6e3tC^7^*l!n%Nl^xa>8d5Y%jiH|AMfFG zHv0Lzb44$4wy>fH`Zlyra>)TrQ(pL91ZD)G?_+VWd>uA@@%`@)mtqUv9xv!bmlWcO z{AG)nEepJOKY%Lm8@~?f!ZodACsS zj>M#v#MD8fiA=Zl$mM(6VIwUR31PlCRTMKmJ+ss>Y4if^i60&$@NOeoZuMJ4t*6T< z34SmQLdJ)0L)bwf$>n)&b|$_{tIH2uA7Ioxk|&M(1T=vRpt&jfkB2jB z_AcCT{&_b!9t|A(!xe=5H<4u`zkToK&`xo4mB9C$3*(P{%Y8Yg!VR2PdJz|~`95u9 zbJZkZ0>-4}T%FFp&R;47C_}&UPX4mLy?yRa1@Hr9IixNdq%H@9?t$OYcy6`4AB6qY z%<>~h5Mcd5%-00hAlNv=z+gy;IN-9@8joA)l%<=ps?o^@g18QQcYMlWj@t%WTV^(6 zd5+XI8eT}FaFAv<&O&RB2vbUc`_VA@6YAs|OL4(y^FX?;=G;3;fW0WhXUPA+Carc}D~K}q}D#|`4wW;@c{ zWr3wrc>$<$#A$n0r57+Lo|J9lSOtcv$`~ z*o93!njU zhyV{iZK9oIH6b2jLV_kM;KD3WCub#^<-dE0Le<)3D)AhS)N=kB&&EC>KYfL=5U${~ zPrvTyzD>N7FMf>&E`{M}R!S*i4w|%MCd|}zfTGegx+pKx8kJK%J{=%N|>G<@jsVDgqo3gH0wlb3lLk20$lI^`EOxO=mfbhT^ax z2tCvp&9xyG&~}y`pgC9kOu+K8)bW)}RItsP^>Ixx!ahle-6ms;lj245E#Z39TgEFgqZ(JrG+0(+_7$8%w>nG^5ruRi!X| z83k~U@8i~BO{lOF&lXAKu%%5a#1lkdNG0V;s(f8Acjxl7R^dsNu*D(04ge}qZ*c1w zQMzVCtD+eEpU)>#ncU$=Rc|{7dmbe1rgB?r6k=xkdnE3zL8<;B zb@TF)#MmqJjO3XtXz`^3qEwBWQm0XyUi;s|NWU~UJ6IkmWlo7HDu`X8u7RgCNMZY0 zdrb+!U48J>?zrGwElCoQv;i5#KoD#+cFnj6u4ZF_bx1xt5p22R&6bRr$P*AT#&BH6 z@O`-{YAkHQ)`b+b4Z*kHoI->qFMVT=+apC@K%{LIW&7=~Fh14k+;Sn8o1@r@5 zef{UMlw|ybBaO9uSyEOE*>qlP4BP-+f_d$=h;G;gXfy1#fVFpwrLOCfbB=O!#$Z#9 zDw!vF)h4j28XEr@egK+9fk$z4YCpMSoQQSD7PC0X4?|NWYM_z^Bb!r#kAi}(K%}ec zpmJ>yL#Ht6#=VeQjxFa72+hC4QwZh!i;O{?F4P+s!wWst8ZX<_*>6w4wkDcR#YV8X+Sr=y^V4JoAg8Z?CKrPd8sQ92Onpvp$*fc;>rAcV!(oJ`T z{>Ik#&376^mCoDcq!qVvKUPj3uVg*~P9?gi zWivG9wPRHu0LiS*9Hu))bY77;OrN1V4YC@1-YuHp;f^|Q(O1uYi*8UiA{MN|x|u}$ z`J2dAXUiHr^sz$==`ZjMpy!M z7a^xcG0HUW@pNWNy+_>8V7)ZM45pGKOqgEIC2yrEE|Mjg&PM_QI~tAGj>! zP7^hQ0I@ie+u=ichyzsDjz80WRB~Oz2QI}-sNi|-Bf5{TS>SKDyi%#+LFpRyg}1$X z2(FX0X+Gh(IK`z5)ZadQ<=PhN28n`fpZXHJUJ zu>%%?cI4lpTXpYa(i6fF<(tx+OPL<SSlawc!l|7GH1oz#T9hrP(pE@45&G? z`BmsA%o2GZ;(KAMv?qlm$Ie6ts?}rnk8#54({wIkV~!5_sT--MwI@ycw)h!a0ks~H zB@&JrTKN|AOvGHy93OXocWaY=i!KHK7Aa+-T$VTC&StOTPR$++- zQSMFvp{u7hP+gn|C`mSUzyAvf44}DYIcA#pRUSBwv~NgjY)N_LOv3JO^(^SfyHJQb zL-6dGE3Z$u@bG~TjrnQZWn9 zOuw<@;M!i1Uh>zt(;j$r(O8m_u=Dm@I+j*}Te40dZ_$=g#+l^i=Jt@*%E?HbFJqXD zurriLI~=_uQh!ZD7y1nG3(*qee@~u{5k9knR;RkmDqYAPK$9Kjx?VmB?8~qBS!wFsXnWW%l{hJE5;Krvd{%cr>_h8P@Oe-mn}ih_8V%Xf=Jr5FW6j; zk5B2aV-p?UE8@ER!X9@Y)vk}Hg}sFWktnsY;9DWR8l2&2{PF=`d(YDi zm?De}pc*h^bJkQvIrxI&yP3ClIwFIMiToXO4_Fp5@iKiUX4zs-xY{z6V#BW*J&<&P z8omd!k?qRmDX$uvW^P^2Ji1?pY_V${M$XN1(crI>PYFz3zv#^n`VzSTSCFEOlNqO{t6 zD=Gi{N|L^jtXUmJSMAqDr>pznQrPI(4iKZMa07B0(enm%0Wxe4sB%2XP>uerec2os zZG-ysg>x2JC;Kct4GE4pB7w)p$!Liprhom#gWR>nP6!~0p+bb(y1=ww|Azg098zBM zIu063u1;w4137q&t<&6DmKC@crXnx9z^}@pz}9Cu=C>P3f6IzDHZ6wDhp#r*^UuxF z+GQbK8FgsKSa_q}V=QIZw*IO0l-F5#l_|fO5WhfPscg=BinqI}w?j_*a#B_)R-mKi zrM6h&_rXoysP2(fpHf%HkUI)4v=A?Hfy6XLRex6WI{Kp#P`=I~>GiTR?1?r4(fE{& z`PClYHRW4Yd#PU2C zuj~<-w@5vE&Bgu0bVt}dk||60`|ac7P$a}cX{h5p0HO#rR<52c57us}noLusj9Cs- zTAvyes{1t9FQVZvb6A7^IuG}*U&Gfrkv>A?Yb@5AA|Vn_vdnJ2NpPg5BKjtpz5&4 zX21XWBlw89Z*hXl$cvKt2^bo3k+nDfpa%15?_MF8o}SL>_}*PK&CyV;K!Ey|QypJ} z?NaSG$TEPs=1py3(7jrf!5Mb68^7HiyBlPvd36?WRDKEXwb??p_jwDte1)$~Z@i$% z!n;Y!%~>FG?x2Co`yD6y`!+GPlM-yCpW6s#&omBIuY2dZ5gJMu9q_k`C77~_2kyE6 zQyi)R%5cSgyZ3#s)E&@$zGwMP|D#e>Pq69T5B5g1a`8bSNC=6Is$f$f9rOAp+UvTT z-}#*_)gr5VoC_{tWUlS9m;1tf`Z527O!zx#L-Z#mQ>0lJ<;g;_yG!O93UoSNj1D48 zz;LWxxA^CVHXg*$Uw~FAxAL;l1dv6UzS|`Us4\n "; }, gradient: function(dir, dur){ - var colors, ret, len, gx, gy, x, y, i$, i, idx; + var colors, res$, i$, to$, ret, len, gx, gy, x, y, i, idx; dir == null && (dir = 45); dur == null && (dur = 1); - colors = slice$.call(arguments, 2); + res$ = []; + for (i$ = 2, to$ = arguments.length; i$ < to$; ++i$) { + res$.push(arguments[i$]); + } + colors = res$; ret = [this.head("0 0 100 100")]; len = colors.length * 4 + 1; dir = dir * Math.PI / 180; @@ -118,7 +122,7 @@ wrap = function(content){ } }; window.ldBar = ldBar = function(selector, option){ - var xmlns, root, cls, idPrefix, id, domTree, newNode, x$, config, attr, that, isStroke, parseRes, dom, svg, text, group, length, path0, path1, patimg, img, ret, size, this$ = this; + var xmlns, root, cls, idPrefix, id, domTree, newNode, x$, config, attr, that, isStroke, parseRes, dom, svg, text, group, length, path0, path1, patimg, img, ret, size, img2, this$ = this; option == null && (option = {}); xmlns = { xlink: "http://www.w3.org/1999/xlink" @@ -544,7 +548,7 @@ wrap = function(content){ }); img = new Image(); img.addEventListener('load', function(){ - var ret, size; + var ret, size, v; if (config["img-size"]) { ret = config["img-size"].split(','); size = { @@ -571,11 +575,94 @@ wrap = function(content){ height: size.height }); this$.fit(); - this$.set(undefined, false); + v = this$.value; + this$.value = undefined; + this$.set(v, true); return this$.inited = true; }); img.src = config.img; + if (config.img2) { + if (config["img-size"]) { + ret = config["img-size"].split(','); + size = { + width: +ret[0], + height: +ret[1] + }; + } else { + size = { + width: 100, + height: 100 + }; + } + group[0] = domTree('g', { + rect: { + attr: { + x: 0, + y: 0, + width: 100, + height: 100, + mask: "url(#" + id.mask + ")", + fill: config["fill-background"] + } + } + }); + svg.querySelector('mask image').attrs({ + width: size.width, + height: size.height + }); + group[2] = domTree('g', { + image: { + attr: { + width: size.width, + height: size.height, + x: 0, + y: 0, + preserveAspectRatio: config["aspect-ratio"], + "xlink:href": config.img2, + 'class': 'solid' + } + } + }); + img2 = new Image(); + img2.addEventListener('load', function(){ + var ret, size, v; + if (config["img-size"]) { + ret = config["img-size"].split(','); + size = { + width: +ret[0], + height: +ret[1] + }; + } else if (img2.width && img2.height) { + size = { + width: img2.width, + height: img2.height + }; + } else { + size = { + width: 100, + height: 100 + }; + } + svg.querySelector('mask image').attrs({ + width: size.width, + height: size.height + }); + group[2].querySelector('image').attrs({ + width: size.width, + height: size.height + }); + this$.fit(); + v = this$.value; + this$.value = undefined; + this$.set(v, true); + return this$.inited = true; + }); + img2.src = config.img2; + } svg.appendChild(group[0]); + if (config.img2) { + svg.appendChild(group[2]); + } svg.appendChild(group[1]); } svg.attrs({ diff --git a/src/loading-bar.ls b/src/loading-bar.ls index 339171a..dd4b7b1 100644 --- a/src/loading-bar.ls +++ b/src/loading-bar.ls @@ -318,8 +318,50 @@ do -> @set v, true @inited = true img.src = config.img + + # add custom background image support + if config.img2 + if config["img-size"] => + ret = config["img-size"].split(\,) + size = {width: +ret.0, height: +ret.1} + else size = {width: 100, height: 100} + + group.0 = domTree \g, rect: attr: + x: 0, y: 0, width: 100, height: 100, mask: "url(\##{id.mask})", fill: config["fill-background"] + svg.querySelector 'mask image' .attrs do + width: size.width, height: size.height + group.2 = domTree \g, image: attr: + width: size.width, height: size.height, x: 0, y: 0, preserveAspectRatio: config["aspect-ratio"] + #width: 100, height: 100, x: 0, y: 0, preserveAspectRatio: "xMidYMid" + #"clip-path": if config.type == \fill => "url(\##{id.clip})" else '' + "xlink:href": config.img2, class: \solid + img2 = new Image! + img2.addEventListener \load, ~> + if config["img-size"] => + ret = config["img-size"].split(\,) + size = {width: +ret.0, height: +ret.1} + else if img2.width and img2.height => size = {width: img2.width, height: img2.height} + else size = {width: 100, height: 100} + svg.querySelector 'mask image' .attrs do + width: size.width, height: size.height + group.2.querySelector 'image' .attrs do + width: size.width, height: size.height + + @fit! + + # image is load, so we set value again. + # if we need transition - we have to clean value so it will be treated as 0. + v = @value + @value = undefined + @set v, true + @inited = true + img2.src = config.img2 svg.appendChild group.0 + if config.img2 + # needs to be right after group.0 + svg.appendChild group.2 svg.appendChild group.1 + svg.attrs width: \100%, height: \100% #, viewBox: '0 0 100 100' @transition =