progress.min.js 14 KB

1234567891011
  1. /*
  2. * # Fomantic UI - 2.8.4
  3. * https://github.com/fomantic/Fomantic-UI
  4. * http://fomantic-ui.com/
  5. *
  6. * Copyright 2014 Contributors
  7. * Released under the MIT license
  8. * http://opensource.org/licenses/MIT
  9. *
  10. */
  11. !function(E,e,T,P){"use strict";E.isFunction=E.isFunction||function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},e=void 0!==e&&e.Math==Math?e:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),E.fn.progress=function(m){var b,e=E(this),h=e.selector||"",y=(new Date).getTime(),x=[],w=m,A="string"==typeof w,V=[].slice.call(arguments,1);return e.each(function(){var s=E.isPlainObject(m)?E.extend(!0,{},E.fn.progress.settings,m):E.extend({},E.fn.progress.settings),n=s.className,t=s.metadata,e=s.namespace,r=s.selector,l=s.error,a="."+e,o="module-"+e,u=E(this),c=E(this).find(r.bar),i=E(this).find(r.progress),p=E(this).find(r.label),d=this,g=u.data(o),v=!1,f={helper:{sum:function(e){return Array.isArray(e)?e.reduce(function(e,t){return e+Number(t)},0):0},derivePrecision:function(e,t){for(var n=0,r=1,a=e/t;n<10&&!(1<(a*=r));)r=Math.pow(10,n++);return r},forceArray:function(e){return Array.isArray(e)?e:isNaN(e)?"string"==typeof e?e.split(","):[]:[e]}},initialize:function(){f.set.duration(),f.set.transitionEvent(),f.debug(d),f.read.metadata(),f.read.settings(),f.instantiate()},instantiate:function(){f.verbose("Storing instance of progress",f),g=f,u.data(o,f)},destroy:function(){f.verbose("Destroying previous progress for",u),clearInterval(g.interval),f.remove.state(),u.removeData(o),g=P},reset:function(){f.remove.nextValue(),f.update.progress(0)},complete:function(e){(f.percent===P||f.percent<100)&&(f.remove.progressPoll(),!0!==e&&f.set.percent(100))},read:{metadata:function(){var e={percent:f.helper.forceArray(u.data(t.percent)),total:u.data(t.total),value:f.helper.forceArray(u.data(t.value))};e.total&&(f.debug("Total value set from metadata",e.total),f.set.total(e.total)),0<e.value.length&&(f.debug("Current value set from metadata",e.value),f.set.value(e.value),f.set.progress(e.value)),0<e.percent.length&&(f.debug("Current percent value set from metadata",e.percent),f.set.percent(e.percent))},settings:function(){!1!==s.total&&(f.debug("Current total set in settings",s.total),f.set.total(s.total)),!1!==s.value&&(f.debug("Current value set in settings",s.value),f.set.value(s.value),f.set.progress(f.value)),!1!==s.percent&&(f.debug("Current percent set in settings",s.percent),f.set.percent(s.percent))}},bind:{transitionEnd:function(t){var e=f.get.transitionEnd();c.one(e+a,function(e){clearTimeout(f.failSafeTimer),t.call(this,e)}),f.failSafeTimer=setTimeout(function(){c.triggerHandler(e)},s.duration+s.failSafeDelay),f.verbose("Adding fail safe timer",f.timer)}},increment:function(e){var t,n;e=f.has.total()?(t=f.get.value(),e||1):(t=f.get.percent(),e||f.get.randomValue()),n=t+e,f.debug("Incrementing percentage by",t,n,e),n=f.get.normalizedValue(n),f.set.progress(n)},decrement:function(e){var t,n;f.get.total()?(n=(t=f.get.value())-(e=e||1),f.debug("Decrementing value by",e,t)):(n=(t=f.get.percent())-(e=e||f.get.randomValue()),f.debug("Decrementing percentage by",e,t)),n=f.get.normalizedValue(n),f.set.progress(n)},has:{progressPoll:function(){return f.progressPoll},total:function(){return!1!==f.get.total()}},get:{text:function(e,t){var n=t||0,r=f.get.value(n),a=f.total||0,o=v?f.get.displayPercent(n):f.get.percent(n),i=0<f.total?a-r:100-o;return e=(e=e||"").replace("{value}",r).replace("{total}",a).replace("{left}",i).replace("{percent}",o).replace("{bar}",s.text.bars[n]||""),f.verbose("Adding variables to progress bar text",e),e},normalizedValue:function(e){if(e<0)return f.debug("Value cannot decrement below 0"),0;if(f.has.total()){if(e>f.total)return f.debug("Value cannot increment above total",f.total),f.total}else if(100<e)return f.debug("Value cannot increment above 100 percent"),100;return e},updateInterval:function(){return"auto"==s.updateInterval?s.duration:s.updateInterval},randomValue:function(){return f.debug("Generating random increment percentage"),Math.floor(Math.random()*s.random.max+s.random.min)},numericValue:function(e){return"string"==typeof e?""!==e.replace(/[^\d.]/g,"")&&+e.replace(/[^\d.]/g,""):e},transitionEnd:function(){var e,t=T.createElement("element"),n={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(e in n)if(t.style[e]!==P)return n[e]},displayPercent:function(e){var t=E(c[e]),n=t.width(),r=u.width(),a=parseInt(t.css("min-width"),10)<n?n/r*100:f.percent;return 0<s.precision?Math.round(a*(10*s.precision))/(10*s.precision):Math.round(a)},percent:function(e){return f.percent&&f.percent[e||0]||0},value:function(e){return f.nextValue||f.value&&f.value[e||0]||0},total:function(){return f.total||!1}},create:{progressPoll:function(){f.progressPoll=setTimeout(function(){f.update.toNextValue(),f.remove.progressPoll()},f.get.updateInterval())}},is:{complete:function(){return f.is.success()||f.is.warning()||f.is.error()},success:function(){return u.hasClass(n.success)},warning:function(){return u.hasClass(n.warning)},error:function(){return u.hasClass(n.error)},active:function(){return u.hasClass(n.active)},visible:function(){return u.is(":visible")}},remove:{progressPoll:function(){f.verbose("Removing progress poll timer"),f.progressPoll&&(clearTimeout(f.progressPoll),delete f.progressPoll)},nextValue:function(){f.verbose("Removing progress value stored for next update"),delete f.nextValue},state:function(){f.verbose("Removing stored state"),delete f.total,delete f.percent,delete f.value},active:function(){f.verbose("Removing active state"),u.removeClass(n.active)},success:function(){f.verbose("Removing success state"),u.removeClass(n.success)},warning:function(){f.verbose("Removing warning state"),u.removeClass(n.warning)},error:function(){f.verbose("Removing error state"),u.removeClass(n.error)}},set:{barWidth:function(e){f.debug("set bar width with ",e),e=f.helper.forceArray(e);var a=-1,o=-1,i=f.helper.sum(e),s=c.length,l=1<s,t=e.map(function(e,t){var n=t===s-1&&0===i,r=E(c[t]);return 0===e&&l&&!n?r.css("display","none"):(l&&n&&r.css("background","transparent"),-1==a&&(a=t),o=t,r.css({display:"block",width:e+"%"})),parseFloat(e)});e.forEach(function(e,t){E(c[t]).css({borderTopLeftRadius:t==a?"":0,borderBottomLeftRadius:t==a?"":0,borderTopRightRadius:t==o?"":0,borderBottomRightRadius:t==o?"":0})}),u.attr("data-percent",t)},duration:function(e){e="number"==typeof(e=e||s.duration)?e+"ms":e,f.verbose("Setting progress bar transition duration",e),c.css({"transition-duration":e})},percent:function(e){e=f.helper.forceArray(e).map(function(e){return"string"==typeof e?+e.replace("%",""):e});var t,n,r=f.has.total(),a=f.helper.sum(e),o=1<e.length&&r,i=f.helper.sum(f.helper.forceArray(f.value));o&&i>f.total?f.error(l.sumExceedsTotal,i,f.total):!o&&100<a?f.error(l.tooHigh,a):a<0?f.error(l.tooLow,a):(t=0<s.precision?s.precision:o?f.helper.derivePrecision(Math.min.apply(null,f.value),f.total):P,n=e.map(function(e){return 0<t?Math.round(e*(10*t))/(10*t):Math.round(e)}),f.percent=n,r||(f.value=n.map(function(e){return 0<t?Math.round(e/100*f.total*(10*t))/(10*t):Math.round(e/100*f.total*10)/10}),s.limitValues&&(f.value=f.value.map(function(e){return 100<e?100:f.value<0?0:f.value}))),f.set.barWidth(e),f.set.labelInterval(),f.set.labels()),s.onChange.call(d,e,f.value,f.total)},labelInterval:function(){clearInterval(f.interval),f.bind.transitionEnd(function(){f.verbose("Bar finished animating, removing continuous label updates"),clearInterval(f.interval),v=!1,f.set.labels()}),v=!0,f.interval=setInterval(function(){E.contains(T.documentElement,d)||(clearInterval(f.interval),v=!1),f.set.labels()},s.framerate)},labels:function(){f.verbose("Setting both bar progress and outer label text"),f.set.barLabel(),f.set.state()},label:function(e){(e=e||"")&&(e=f.get.text(e),f.verbose("Setting label to text",e),p.text(e))},state:function(e){100===(e=e!==P?e:f.helper.sum(f.percent))?s.autoSuccess&&1===c.length&&!(f.is.warning()||f.is.error()||f.is.success())?(f.set.success(),f.debug("Automatically triggering success at 100%")):(f.verbose("Reached 100% removing active state"),f.remove.active(),f.remove.progressPoll()):0<e?(f.verbose("Adjusting active progress bar label",e),f.set.active()):(f.remove.active(),f.set.label(s.text.active))},barLabel:function(r){i.map(function(e,t){var n=E(t);r!==P?n.text(f.get.text(r,e)):"ratio"==s.label&&f.total?(f.verbose("Adding ratio to bar label"),n.text(f.get.text(s.text.ratio,e))):"percent"==s.label&&(f.verbose("Adding percentage to bar label"),n.text(f.get.text(s.text.percent,e)))})},active:function(e){e=e||s.text.active,f.debug("Setting active state"),s.showActivity&&!f.is.active()&&u.addClass(n.active),f.remove.warning(),f.remove.error(),f.remove.success(),(e=s.onLabelUpdate("active",e,f.value,f.total))&&f.set.label(e),f.bind.transitionEnd(function(){s.onActive.call(d,f.value,f.total)})},success:function(e,t){e=e||s.text.success||s.text.active,f.debug("Setting success state"),u.addClass(n.success),f.remove.active(),f.remove.warning(),f.remove.error(),f.complete(t),e=s.text.success?s.onLabelUpdate("success",e,f.value,f.total):s.onLabelUpdate("active",e,f.value,f.total),f.set.label(e),f.bind.transitionEnd(function(){s.onSuccess.call(d,f.total)})},warning:function(e,t){e=e||s.text.warning,f.debug("Setting warning state"),u.addClass(n.warning),f.remove.active(),f.remove.success(),f.remove.error(),f.complete(t),(e=s.onLabelUpdate("warning",e,f.value,f.total))&&f.set.label(e),f.bind.transitionEnd(function(){s.onWarning.call(d,f.value,f.total)})},error:function(e,t){e=e||s.text.error,f.debug("Setting error state"),u.addClass(n.error),f.remove.active(),f.remove.success(),f.remove.warning(),f.complete(t),(e=s.onLabelUpdate("error",e,f.value,f.total))&&f.set.label(e),f.bind.transitionEnd(function(){s.onError.call(d,f.value,f.total)})},transitionEvent:function(){f.get.transitionEnd()},total:function(e){f.total=e},value:function(e){f.value=f.helper.forceArray(e)},progress:function(e){f.has.progressPoll()?(f.debug("Updated within interval, setting next update to use new value",e),f.set.nextValue(e)):(f.debug("First update in progress update interval, immediately updating",e),f.update.progress(e),f.create.progressPoll())},nextValue:function(e){f.nextValue=e}},update:{toNextValue:function(){var e=f.nextValue;e&&(f.debug("Update interval complete using last updated value",e),f.update.progress(e),f.remove.nextValue())},progress:function(e){var n=f.has.total();n&&f.set.value(e);var t=f.helper.forceArray(e).map(function(e){var t;return!1===(e=f.get.numericValue(e))&&f.error(l.nonNumeric,e),e=f.get.normalizedValue(e),n?(t=e/f.total*100,f.debug("Calculating percent complete from total",t)):(t=e,f.debug("Setting value to exact percentage value",t)),t});f.set.percent(t)}},setting:function(e,t){if(f.debug("Changing setting",e,t),E.isPlainObject(e))E.extend(!0,s,e);else{if(t===P)return s[e];E.isPlainObject(s[e])?E.extend(!0,s[e],t):s[e]=t}},internal:function(e,t){if(E.isPlainObject(e))E.extend(!0,f,e);else{if(t===P)return f[e];f[e]=t}},debug:function(){!s.silent&&s.debug&&(s.performance?f.performance.log(arguments):(f.debug=Function.prototype.bind.call(console.info,console,s.name+":"),f.debug.apply(console,arguments)))},verbose:function(){!s.silent&&s.verbose&&s.debug&&(s.performance?f.performance.log(arguments):(f.verbose=Function.prototype.bind.call(console.info,console,s.name+":"),f.verbose.apply(console,arguments)))},error:function(){s.silent||(f.error=Function.prototype.bind.call(console.error,console,s.name+":"),f.error.apply(console,arguments))},performance:{log:function(e){var t,n;s.performance&&(n=(t=(new Date).getTime())-(y||t),y=t,x.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:d,"Execution Time":n})),clearTimeout(f.performance.timer),f.performance.timer=setTimeout(f.performance.display,500)},display:function(){var e=s.name+":",n=0;y=!1,clearTimeout(f.performance.timer),E.each(x,function(e,t){n+=t["Execution Time"]}),e+=" "+n+"ms",h&&(e+=" '"+h+"'"),(console.group!==P||console.table!==P)&&0<x.length&&(console.groupCollapsed(e),console.table?console.table(x):E.each(x,function(e,t){console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.groupEnd()),x=[]}},invoke:function(r,e,t){var a,o,n,i=g;return e=e||V,t=d||t,"string"==typeof r&&i!==P&&(r=r.split(/[\. ]/),a=r.length-1,E.each(r,function(e,t){var n=e!=a?t+r[e+1].charAt(0).toUpperCase()+r[e+1].slice(1):r;if(E.isPlainObject(i[n])&&e!=a)i=i[n];else{if(i[n]!==P)return o=i[n],!1;if(!E.isPlainObject(i[t])||e==a)return i[t]!==P?o=i[t]:f.error(l.method,r),!1;i=i[t]}})),E.isFunction(o)?n=o.apply(t,e):o!==P&&(n=o),Array.isArray(b)?b.push(n):b!==P?b=[b,n]:n!==P&&(b=n),o}};A?(g===P&&f.initialize(),f.invoke(w)):(g!==P&&g.invoke("destroy"),f.initialize())}),b!==P?b:this},E.fn.progress.settings={name:"Progress",namespace:"progress",silent:!1,debug:!1,verbose:!1,performance:!0,random:{min:2,max:5},duration:300,updateInterval:"auto",autoSuccess:!0,showActivity:!0,limitValues:!0,label:"percent",precision:0,framerate:1e3/30,percent:!1,total:!1,value:!1,failSafeDelay:100,onLabelUpdate:function(e,t,n,r){return t},onChange:function(e,t,n){},onSuccess:function(e){},onActive:function(e,t){},onError:function(e,t){},onWarning:function(e,t){},error:{method:"The method you called is not defined.",nonNumeric:"Progress value is non numeric",tooHigh:"Value specified is above 100%",tooLow:"Value specified is below 0%",sumExceedsTotal:"Sum of multple values exceed total"},regExp:{variable:/\{\$*[A-z0-9]+\}/g},metadata:{percent:"percent",total:"total",value:"value"},selector:{bar:"> .bar",label:"> .label",progress:".bar > .progress"},text:{active:!1,error:!1,success:!1,warning:!1,percent:"{percent}%",ratio:"{value} of {total}",bars:[""]},className:{active:"active",error:"error",success:"success",warning:"warning"}}}(jQuery,window,document);