Skip to content
Snippets Groups Projects
Commit 48e67187 authored by Rolf Niepraschk's avatar Rolf Niepraschk
Browse files

"moment-weekday-calc"

parent 989725bc
No related branches found
No related tags found
No related merge requests found
/*! moment-weekday-calc 1.1.1 andruhon <andrew@kondratev.pro> 2016-11-05 */
"undefined"!=typeof require&&(moment=require("moment")),function(a){function b(b,d,e,g,h,i){if(this.rangeStart=a(b),this.rangeEnd=a(d),this.exclusions=g,this.inclusions=h,this.useIsoWeekday=1==i,this.rangeStart.isAfter(this.rangeEnd))throw new c("rangeStart is after rangeEnd");this.weekdays=f(e,this.useIsoWeekday)}function c(a){this.message=a,this.name="WeekDayCalcException"}function d(b,c,d,e,g){this.rangeStart=a(b),this.useIsoWeekday=1==g,this.exclusions=d,this.inclusions=e,this.weekdays=f(c,this.useIsoWeekday)}function e(a){this.message=a,this.name="DaysSetConverterException"}b.prototype.calculate=function(){var a=0,b=this.rangeStart.clone().endOf("week"),c=this.rangeEnd.clone().startOf("week");if(c.diff(b,"days")<30||this.exclusions||this.inclusions)a=this.calculateIterative(this.rangeStart,this.rangeEnd,this.weekdays,this.exclusions,this.inclusions);else{var d=Math.round(c.diff(b,"weeks",!0));a+=d*this.weekdays.length,a+=this.calculateIterative(this.rangeStart,b,this.weekdays),a+=this.calculateIterative(c,this.rangeEnd,this.weekdays)}return a},b.prototype.calculateIterative=function(a,b,c,d,e){for(var f=0,h=a.clone(),i=g(d),j=g(e);h.valueOf()<=b.valueOf();){var k=this.useIsoWeekday?"isoWeekday":"weekday",l=h.format("YYYY-MM-DD"),m=0!=j.length&&j.indexOf(l)>=0;(m||c.indexOf(h[k]())>=0&&(0==i.length||i.indexOf(l)<0))&&f++,h.add(1,"day")}return f},Function.prototype.construct=function(a){var b=this,c=function(){b.apply(this,a)};return c.prototype=b.prototype,new c},c.prototype=new Error,b.prototype.WeekDayCalcException=c,d.prototype.calculate=function(a){var b=a,c=this.rangeStart.clone(),d=g(this.exclusions),e=g(this.inclusions),f=this.useIsoWeekday?"isoWeekday":"weekday";if(b>=0)for(;b>0;){c.add(1,"day");var h=0!=e.length&&e.indexOf(c.format("YYYY-MM-DD"))>=0;(h||this.weekdays.indexOf(c[f]())>=0&&(0==d.length||d.indexOf(c.format("YYYY-MM-DD"))<0))&&b--}else for(;b<0;){c.subtract(1,"day");var h=0!=e.length&&e.indexOf(c.format("YYYY-MM-DD"))>=0;(h||this.weekdays.indexOf(c[f]())>=0&&(0==d.length||d.indexOf(c.format("YYYY-MM-DD"))<0))&&b++}return c},e.prototype=new Error,d.prototype.DaysSetConverterException=e;var f=function(b,d){var e=[];if(!b)throw new c("weekdays must be defined");if(b.length>7)throw new c("Weekdays array exceeding week length of 7 days");for(var f=0;f<b.length;f++){var g=b[f];if(d){if(isNaN(g))throw new c("isoWeekDayCalc accepts weekdays as numbers only, try using weekdayCalc if you need a locale aware behaviour");if(g<1||g>7)throw new c("The weekday is out of 1 to 7 range")}else if(isNaN(g))g=a().day(g).weekday();else if(g<0||g>6)throw new c("The weekday is out of 0 to 6 range");if(e.indexOf(g)>=0)throw new c("Weekdays set contains duplicate weekday");e.push(g)}return e},g=function(b){var c=[];if(b)for(var d=0,e=b.length;d<e;d++)c.push(a(b[d]).format("YYYY-MM-DD"));return c};b.calculateWeekdays=function(d,e,f){var g,h,i,j,k;switch(f=!!f,e.length){case 5:j=e[3],k=e[4];case 4:j=e[3];case 3:g=a(e[0]).startOf("day"),h=a(e[1]).endOf("day"),i=e[2];break;case 2:g=d,h=e[0],i=e[1];break;case 1:var l=e[0];l&&l.rangeEnd&&l.weekdays?(g=l.rangeStart?a(l.rangeStart).startOf("day"):d,h=a(l.rangeEnd).endOf("day"),i=l.weekdays,j=l.exclusions,k=l.inclusions):(g=d.clone().startOf("year"),h=d.clone().endOf("year"),i=l);break;default:new c("unexpected arguments length "+e.length+". Expecting 1 to 4 args")}if(g.isAfter(h)){var m=g.clone();g=h.clone(),h=m}var n=b.construct([g,h,i,j,k,f]);return n.calculate()},d.calculateDate=function(a,b,c){var f,g,h,i;c=!!c;switch(b.length){case 4:g=b[2],h=b[3];case 3:g=b[2];case 2:f=b[0],i=b[1];break;case 1:var j=b[0];if(!j||void 0==j.days&&void 0==j.workdays)f=j;else{if(void 0!=j.days&&void 0!=j.workdays)throw new e("days and weekdays args should not be used together, because weekdays is an alias of days");f=j.days?j.days:j.workdays,i=j.weekdays?j.weekdays:[1,2,3,4,5],g=j.exclusions,h=j.inclusions}break;default:new e("unexpected arguments length "+b.length+". Expecting 1 to 3 args")}var k=d.construct([a,i,g,h,c]);return k.calculate(f)},a.fn.weekdayCalc=function(){return b.calculateWeekdays(this,arguments)},a.fn.isoWeekdayCalc=function(){return b.calculateWeekdays(this,arguments,!0)},a.fn.addWorkdays=function(a,b,c){return d.calculateDate(this,[a,[1,2,3,4,5],b,c])},a.fn.workdaysToCalendarDays=function(a,b,c){var e=d.calculateDate(this,[a,[1,2,3,4,5],b,c]);return e.diff(this,"days")},a.fn.addWeekdaysFromSet=function(){return d.calculateDate(this,arguments)},a.fn.weekdaysFromSetToCalendarDays=function(){var a=d.calculateDate(this,arguments);return a.diff(this,"days")},a.fn.isoAddWeekdaysFromSet=function(){return d.calculateDate(this,arguments,!0)},a.fn.isoWeekdaysFromSetToCalendarDays=function(){var a=d.calculateDate(this,arguments,!0);return a.diff(this,"days")},"object"==typeof exports&&"undefined"!=typeof module?module.exports=b:"function"==typeof define&&define.amd?define(b):this.WeekDayCalc=b}(moment);
//# sourceMappingURL=moment-weekday-calc.min.js.map
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment