diff --git a/src/main/java/cc/niushuai/gasweb/entity/ChartResp.java b/src/main/java/cc/niushuai/gasweb/entity/ChartResp.java new file mode 100644 index 0000000..6ad2b96 --- /dev/null +++ b/src/main/java/cc/niushuai/gasweb/entity/ChartResp.java @@ -0,0 +1,35 @@ +package cc.niushuai.gasweb.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * data + * + * @author niushuai233 + * @date: 2022/12/16 21:36 + */ +@Data +public class ChartResp { + + private String title; + private List data = new ArrayList<>(); + + public ChartResp(String title) { + this.title = title; + } + + @lombok.Data + @AllArgsConstructor + public static class Data { + private String x; + private String y; + + public String getY() { + return y.replace("ppm", "").replace("°C", ""); + } + } +} diff --git a/src/main/resources/static/chart/options.js b/src/main/resources/static/chart/options.js new file mode 100644 index 0000000..099001c --- /dev/null +++ b/src/main/resources/static/chart/options.js @@ -0,0 +1,42 @@ +// 包装options +function getOption(title, xData, yData, unit) { + return { + title: { + text: title + }, + tooltip: { + show: true, + trigger: 'item', + formatter: '时间点: {b0}
当前值: {c0}' + unit, + }, + dataZoom: [{ + id: "slider", + type: 'slider' + }], + xAxis: { + type: 'category', + data: xData + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: yData, + type: 'line', + smooth: true + } + ] + }; +} + + +function rebuildChart(instance, data, unit) { + + var xData = data.data.map(item => item.x); + var yData = data.data.map(item => item.y); + + // coChart.setOption(getOption('CO浓度', ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], [820, 932, 901, 934, 1290, 1330, 1320])); + instance.setOption(getOption(data.title, xData, yData, unit)); + console.log('rebuild chart', instance, data.title); +} \ No newline at end of file diff --git a/src/main/resources/static/datepicker/datepicker.all.min.js b/src/main/resources/static/datepicker/datepicker.all.min.js new file mode 100644 index 0000000..02a9b5d --- /dev/null +++ b/src/main/resources/static/datepicker/datepicker.all.min.js @@ -0,0 +1 @@ +(function(g){var z={min:false,max:false,format:"YYYY-MM-DD HH:mm:ss",isRange:false,hasShortcut:false,shortcutOptions:[],between:false,language:"zh-CN",hide:function(){},show:function(){}};var t={onlytimeReg:function(o){return/^HH:mm(:ss)?$/.test(o)},getFormatTime:function(o){return o.onlyTime?o.config.format:o.config.format.split(" ")[1]},timeReg:function(B){var A=t.getFormatTime(B);var o=A.replace(/HH/,"([0-9]{1,2})").replace(/:/g,"(:?)").replace(/(mm|ss)/g,"([0-9]{1,2})");return new RegExp("^"+o+"$")},dayReg:function(C){var B=C.config.format.split(" ")[0];var A=new RegExp(C.splitStr,"g");var o=B.replace(/YYYY/,"([1-9]{1}[0-9]{3})").replace(A,"("+C.splitStr+"?)").replace(/(MM|DD)/g,"([0-9]{1,2})");return new RegExp("^"+o+"$")},fixedFill:function(o){if(o[3]==0){o[3]=o[5];o[5]="01"}if(o[3].length==1&&o[5]==0){o[3]=o[3]+"0";o[5]="01"}if(o[3].length==2&&o[5]==0){o[5]="01"}return o},getMonthDay:function(A,o){var B=A-1<0?11:A-1;return A===2&&o%4===0?"29":f[B]},getFormat:function(C){var A=["YYYY","MM","DD","HH","mm","ss"];var o=[];for(var B=0;B12){A=1;o=o+1}}return{month:A,year:o}},getTimeFormat:function(o){return{year:o.year(),month:o.month()+1,day:o.date()}},getOnlyTimeFormat:function(o){return[o.hour(),o.minute(),o.second()]},getConcatTime:function(o,B,A){return t.fillTime(o)+":"+t.fillTime(B)+":"+t.fillTime(A)},newDateFixed:function(F,A){var D=!!window.ActiveXObject||"ActiveXObject" in window;var B=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);var E=D||(B&&F.config.format!=="YYYY-MM")?"/":"-";var C=new RegExp(F.splitStr,"g");var o=!A?new Date():F.splitStr?new Date(A.replace(C,E)):new Date(A);return o},getRangeTimeFormat:function(D,C){var A;var B=C.val();A=B;var o=A?moment(t.newDateFixed(D,A)):moment();return t.getTimeFormat(o)},minMaxFill:function(D,I,E,F){var o;if(F==="month"){o=I.year+D.splitStr+t.fillTime(I.month)}else{if(F==="year"){o=I.year+""}else{o=I.year+D.splitStr+t.fillTime(I.month)+D.splitStr+t.fillTime(I.day)}}if(D.hasTime){o+=" "+D.$container.find(".c-datePicker__input-time").eq(E).val()}if(!D.config.min&&!D.config.max){o=o.split(" ")[0];return{val:o,result:I}}var B=moment(t.newDateFixed(D,o));var A=moment(t.newDateFixed(D,D.config.min));var G=moment(t.newDateFixed(D,D.config.max));var C=B.isBefore(A);var H=B.isAfter(G);if(C&&D.config.min){o=A.format(D.config.format).split(" ")[0];I=t.getTimeFormat(A)}if(H&&D.config.max){o=G.format(D.config.format).split(" ")[0];I=t.getTimeFormat(G)}o=o.split(" ")[0];return{val:o,result:I}},timeCheck:function(C){var o=C.split(":");var B=[23,59,59];for(var A=0;AB[A]){o[A]=B[A]}}return o.join(":")},maxMonth:function(o){return o>12},minMonth:function(o){return o<1},judgeTimeRange:function(F,C,o,G){G=G||0;var H=C.val();var B=o.val();if(!H){return}var A=H+" "+B;var E=moment(t.newDateFixed(F,A));var D=F.config.min?E.isBefore((t.newDateFixed(F,F.config.min))):false;var I=F.config.max?E.isAfter((t.newDateFixed(F,F.config.max))):false;if(!D&&!I){return}if(D&&F.config.min){A=F.config.min;o.val(A.split(" ")[1])}else{if(I&&F.config.max){A=F.config.max;o.val(A.split(" ")[1])}}if(!F.config.isRange){F.$input.eq(G).val(A)}},timeVal:function(B,o){var A=B.onlyTime?B.config.format:B.config.format.split(" ")[1];return o==="min"?A.replace(/HH/,"00").replace(/mm/,"00").replace(/ss/,"00"):A.replace(/HH/,"23").replace(/mm/,"59").replace(/ss/,"59")},getScrollBarWidth:function(){var B=document.createElement("p");B.style.width="100%";B.style.height="200px";var C=document.createElement("div");C.style.position="absolute";C.style.top="0px";C.style.left="0px";C.style.visibility="hidden";C.style.width="200px";C.style.height="150px";C.style.overflow="hidden";C.appendChild(B);document.body.appendChild(C);var A=B.offsetWidth;C.style.overflow="scroll";var o=B.offsetWidth;if(A==o){o=C.clientWidth}document.body.removeChild(C);var D=A-o;if(D===0){D=15}return D},getOnlyTimeMinMax:function(F){var C=F.config.min;var H=F.config.max;var L=void (0);var o={hour:L,minute:L,second:L};var I={hour:L,minute:L,second:L};var J=C&&C.match(t.timeReg(F));var B=H&&H.match(t.timeReg(F));var E=B&&J?true:B?"max":J?"min":false;if(J){var G=C.split(":");o.hour=Number(G[0]);o.minute=Number(G[1]);o.second=Number(G[2])}if(B){var K=H.split(":");I.hour=Number(K[0]);I.minute=Number(K[1]);I.second=Number(K[2])}var D=J?t.countSecond(C.split(":")):void (0);var A=B?t.countSecond(H.split(":")):void (0);return{min:o,max:I,hasMin:J,hasMax:B,hasMinMax:E,minSecond:D,maxSecond:A,minVal:C,maxVal:H}},countSecond:function(o){return o.length===2?o=Number(o[0])*60+Number(o[1]):o.length===3?o=Number(o[0])*3600+Number(o[1])*60+Number(o[2]):false}};var y=t.getScrollBarWidth();var k={tableTpl:function(A,B){var o=''+B+"
";return o},tdTpl:function(o,B){var A='
'+B+"
";return A},dayHeader:function(A){var E=A.days;var D="";for(var C=0,o=E.length;C"+E[C]+""}var B=""+D+"";return B},timeLiTpl:function(A,B){var o='
  • '+B+"
  • ";return o},timeTpl:function(B,o){var A='
      '+o+"
    ";return A},timeMainTpl:function(o,B){var A='
    '+B+'
    ";return A},sideBarButton:function(o,C,A){var B='";return B},sideBarTpl:function(A){var o='
    '+A+"
    ";return o},pickerFooterTpl:function(o,B,C){var A='";return A},pickerArrowTpl:function(){return'
    '},pickerHeaderTpl:function(o,D,E,C,B,F){var A='
    '+E+''+B+" "+o.headerYearLink+''+F+" "+o.units[1]+""+C+"
    ";return A},pickerHeaderPrevTpl:function(o,B){var A='';return A},pickerHeaderNextTpl:function(o,B){var A='';return A},pickerHeaderNextSingleTpl:function(o,B){var A='';return A},pickerTimeHeaderTpl:function(o,B){var A='
    ';return A},pickerOnlyTimeHeaderTpl:function(B,o){var A='
    '+o+"
    ";return A},rangePickerMainTpl:function(G,K,H,M,D,o,N){var F="c-datepicker-date-range-picker";var O=k.pickerTimeHeaderTpl(G,F);var A=k.pickerHeaderPrevTpl(G,F);var C=k.pickerHeaderNextTpl(G,F);var L=k.pickerHeaderTpl(G,F,A,"","{{year}}","{{month}}");var E=k.pickerHeaderTpl(G,F,"",C,M,D);var J=k.pickerFooterTpl(G,"c-datepicker-picker__btn-clear",G.clear);var I=k.pickerArrowTpl();var B='
    '+o+'
    '+O+'
    '+O+'
    '+L+'
    '+N+'
    '+E+'
    '+N+"
    "+J+I+"
    ";return B},pickerFooterOnlyTimeTpl:function(o){var A='";return A},rangePickerMainOnlyTimeTpl:function(B,A){var D="c-datepicker-date-range-picker";var o=k.pickerOnlyTimeHeaderTpl(D,B.begin);var F=k.pickerOnlyTimeHeaderTpl(D,B.end);var G=k.pickerFooterOnlyTimeTpl(B);var E=k.pickerArrowTpl();var C='
    '+o+'
    '+F+"
    "+G+E+"
    ";return C},pickerFooterNowButton:function(o){var A=k.pickerFooterTpl(o,"c-datepicker-picker__btn-now",o.now);return A},pickerFooterClearButton:function(o){var A=k.pickerFooterTpl(o,"c-datepicker-picker__btn-clear",o.clear);return A},datePickerMainTpl:function(A){var D="c-datepicker-date-picker";var o=k.pickerTimeHeaderTpl(A,D);var E=k.pickerHeaderPrevTpl(A,D);var C=k.pickerHeaderNextSingleTpl(A,D);var G=k.pickerHeaderTpl(A,D,E,C,"{{year}}","{{month}}");var F=k.pickerArrowTpl();var B='
    {{sidebar}}
    '+o+"
    "+G+'
    {{table}}
    {{footerButton}}'+F+"
    ";return B},datePickerMainOnlyTimeTpl:function(o){var C=k.pickerOnlyTimeHeaderTpl("c-datepicker-date-picker","");var B=k.pickerArrowTpl();var A='
    '+C+"
    "+B+"
    ";return A},monthWords:function(o){return o.months}};var f=[31,28,31,30,31,30,31,31,30,31,30,31];var s=g({});g.sub=function(){s.on.apply(s,arguments)};g.unsub=function(){s.off.apply(s,arguments)};g.pub=function(){s.trigger.apply(s,arguments)};function v(o){this.picker=o;this.init()}g.extend(v.prototype,{init:function(){},event:function(){if(!this.picker.config.isRange){this.picker.$container.on("click",".c-datepicker-year-table td.available",function(){if(g(this).hasClass("disabled")){return}var A=t.getPicker(g(this),"year");var o=g(this).text();A.picker.$container.find(".c-datepicker-date-picker__header-year span").text(o);if(A.picker.params.isYear){A.picker.$input.val(o);A.picker.$container.find(".c-datepicker-year-table td.current").removeClass("current");g(this).addClass("current");A.picker.datePickerObject.hide("choose")}else{A.picker.monthObject.render();A.hide()}})}},show:function(){this.picker.$container.find(".c-datepicker-date-table,.c-datepicker-month-table,.c-datepicker-date-picker__header-month").hide();this.picker.$container.find(".c-datepicker-year-table").show()},hide:function(){this.picker.$container.find(".c-datepicker-year-table").hide();this.picker.$container.find(".c-datepicker-date-picker__prev-btn.year,.c-datepicker-date-picker__next-btn.year").removeClass("is-year")},render:function(B){var A=this.renderHtml(B);var o=this.picker.$container.find(".c-datepicker-year-table");if(!o.length){this.picker.$container.find(".c-datepicker-picker__content").append(A);this.picker.$container.data("year",this);this.show();this.event()}else{o.replaceWith(A);this.show()}this.picker.$container.find(".c-datepicker-date-picker__prev-btn.month,.c-datepicker-date-picker__next-btn.month").hide();this.picker.$container.find(".c-datepicker-date-picker__prev-btn.year,.c-datepicker-date-picker__next-btn.year").addClass("is-year")},renderHtml:function(G){G=G||moment().year();var B=Number(parseInt(G/10)+"0");var I="";var D="";var A=this.picker.$input.val();var o=A?t.getTimeFormat(moment(t.newDateFixed(this.picker,A))).year:false;var H=g.fn.datePicker.dates[this.picker.language];this.picker.$container.find(".c-datepicker-date-picker__header-year span").text(B+H.headerYearLink+"-"+(B+9));for(var E=0;E<10;E++){var C=B+E;var F=C==o?"current available":"available";if(Cthis.picker.maxJson.year){F+=" disabled"}I+=k.tdTpl(F,C);if((E+1)%4===0){D+=""+I+"";I=""}}if(I){D+=""+I+""}D=k.tableTpl("c-datepicker-year-table",D);return D}});function e(o){this.picker=o;this.init()}g.extend(e.prototype,{init:function(){},event:function(){if(!this.picker.config.isRange){this.picker.$container.on("click",".c-datepicker-month-table td.available",function(){if(g(this).hasClass("disabled")){return}var C=t.getPicker(g(this),"month");var o=C.picker.$container.find(".c-datepicker-date-picker__header-year span").text();var A=C.picker.$container.find(".c-datepicker-month-table td").index(g(this))+1;C.picker.$container.find(".c-datepicker-date-picker__header-month span").text(A);if(C.picker.params.isMonth){var B=o+C.picker.splitStr+t.fillTime(A);C.picker.$input.val(B);C.picker.$container.find(".c-datepicker-month-table td.current").removeClass("current");g(this).addClass("current");C.picker.datePickerObject.hide("choose")}else{C.picker.dayObject.renderSingle(o,A,false,true);C.hide()}})}},show:function(){this.picker.$container.find(".c-datepicker-month-table").show();this.picker.$container.find(".c-datepicker-date-table,.c-datepicker-year-table").hide()},hide:function(){this.picker.$container.find(".c-datepicker-date-picker__prev-btn.month,.c-datepicker-date-picker__next-btn.month").show();this.picker.$container.find(".c-datepicker-date-picker__header-month").show();this.picker.$container.find(".c-datepicker-month-table").hide();this.picker.$container.find(".c-datepicker-date-picker__prev-btn.year,.c-datepicker-date-picker__next-btn.year").removeClass("is-month")},render:function(){var o=this.renderHtml();var A=this.picker.$container.find(".c-datepicker-month-table");if(!A.length){this.picker.$container.find(".c-datepicker-picker__content").append(o);this.picker.$container.data("month",this);this.show();this.event()}else{A.replaceWith(o);this.show()}this.picker.$container.find(".c-datepicker-date-picker__prev-btn.year,.c-datepicker-date-picker__next-btn.year").addClass("is-month")},renderHtml:function(){var I=1;var N="";var G="";var D=this.picker.$container.find(".c-datepicker-date-picker__header-year span").text();var O=this.picker.minJson.year;var o=this.picker.maxJson.year;var M="";var K=false;if(Do){M=" disabled"}else{if(D==O||D==o){K=true;var L,A;if(o==O){L=this.picker.minJson.month;A=this.picker.maxJson.month}else{if(D==O){L=this.picker.minJson.month;A=13}else{if(D==o){L=0;A=this.picker.maxJson.month}}}}}var Q=this.picker.$input.val();var J=t.getTimeFormat(moment(t.newDateFixed(this.picker,Q)));var F=Q&&(J.year==D)?J.month:false;var P=g.fn.datePicker.dates[this.picker.language];var H=k.monthWords(P);for(var E=0;E<12;E++){var C=I+E;var B=C===F?"current available":"available";B+=M;if(K&&(CA)){B+=" disabled"}N+=k.tdTpl(B,H[E]);if((E+1)%4===0){G+=""+N+"";N=""}}G=k.tableTpl("c-datepicker-month-table",G);return G}});function b(o){this.picker=o;this.init()}g.extend(b.prototype,{init:function(){this.current=0},eventSingle:function(){this.picker.$container.on("click",".c-datepicker-date-table td.available",function(D){D.stopPropagation();var E=g(this);var F=t.getPicker(E,"day");if(E.hasClass("disabled")){return}if(F.picker.isBlur){var B=E.parents(".c-datepicker-picker__content");var C=B.find(".c-datepicker-date-table td").index(E);g.sub("datapickerClick",function(G){E=B.find(".c-datepicker-date-table td").eq(C);o(F,E);g.unsub("datapickerClick")});g.pub("datapickerRenderPicker")}else{o(F,E)}});function o(G,B){var F=B.text();G.picker.$container.find(".c-datepicker-date-table td.current").removeClass("current");B.addClass("current");var E=G.picker.$container.find(".c-datePicker__input-day").val();if(!E){var D=moment().format(G.picker.config.format).split(" ")[1];G.picker.$container.find(".c-datePicker__input-time").val(D);A.call(G,F,moment(),moment())}else{var C=G.picker.$input.val();A.call(G,F,moment(t.newDateFixed(G.picker,E)),moment(t.newDateFixed(G.picker,C)))}if(!G.picker.hasTime){G.picker.datePickerObject.hide("choose")}else{t.judgeTimeRange(G.picker,G.picker.$container.find(".c-datePicker__input-day"),G.picker.$container.find(".c-datePicker__input-time"))}}function A(G,B,F){var D=this.picker.$container.find(".c-datepicker-date-picker__header-year span").text();var E=this.picker.$container.find(".c-datepicker-date-picker__header-month span").text()-1;val=B.set({year:D,month:E,date:G}).format(this.picker.config.format.split(" ")[0]);this.picker.$container.find(".c-datePicker__input-day").val(val);var C=F.set({year:D,month:E,date:G}).format(this.picker.config.format);this.picker.$input.val(C)}},eventRange:function(){this.picker.$container.on("click",".c-datepicker-date-table td.available",function(C){C.stopPropagation();var D=g(this);if(D.hasClass("disabled")){return}var E=t.getPicker(D,"day");if(E.picker.isBlur){var A=D.parents(".c-datepicker-date-range-picker-panel__wrap");var B=A.find("td").index(D);g.sub("datapickerClick",function(F){D=A.find("td").eq(B);o(E,D);g.unsub("datapickerClick")});g.pub("datapickerRenderPicker")}else{o(E,D)}});function o(I,D){var P=I.picker.$container.find(".c-datepicker-date-range-picker-panel__wrap");P.find("td.current.hover").removeClass("current hover");var B=P.find("td.current");var E=D.parents(".c-datepicker-date-range-picker-panel__wrap");var F=D.find(".cell").text();var G=I.picker.$container.find(".c-datePicker__input-day");var C=I.picker.$container.find(".c-datePicker__input-time");var K=E.find(".c-datepicker-date-range-picker__header-year span").text();var J=E.find(".c-datepicker-date-range-picker__header-month span").text()-1;if(I.current>=2){B.removeClass("current");P.find("td.in-range").removeClass("in-range");B=P.find("td.current");I.current=0}if(!I.current){D.addClass("current");var A=moment().set({year:K,month:J,date:F}).format(I.picker.config.format.split(" ")[0]);G.val(A);C.eq(0).val(I.picker.timeMin);C.eq(1).val(I.picker.timeMax);I.current=1}else{if(I.current==1){D.addClass("current");var O=G.eq(0).val();var A=moment().set({year:K,month:J,date:F}).format(I.picker.config.format.split(" ")[0]);var M=moment(t.newDateFixed(I.picker,O));var L=moment(t.newDateFixed(I.picker,A));if(!I.picker.hasTime){if(L.diff(M)<0){var N=A;A=O;O=N}I.current=2;I.picker.$inputBegin.val(O);I.picker.$inputEnd.val(A);I.picker.datePickerObject.hide("choose")}else{if(L.diff(M)<0){G.eq(0).val(A);G.eq(1).val(O)}else{G.eq(1).val(A)}I.current=2;I.addRangeClass()}}}if(I.current){var H=I.current-1;t.judgeTimeRange(I.picker,I.picker.$container.find(".c-datePicker__input-day").eq(H),I.picker.$container.find(".c-datePicker__input-time").eq(H),H)}}this.picker.$container.on("mouseenter",".c-datepicker-date-table td.available",function(){var E=t.getPicker(g(this),"day");if(E.current!=1){return}E.picker.$container.find("td.current.hover").removeClass("current hover");g(this).addClass("current hover");var I=g(this).parents(".c-datepicker-date-range-picker-panel__wrap");var A=E.picker.$container.find(".c-datePicker__input-day").eq(0);var G=I.find(".c-datepicker-date-range-picker__header-year span").text();var F=I.find(".c-datepicker-date-range-picker__header-month span").text();var C=g(this).find(".cell").text();var B=A.val();var D=G+E.picker.splitStr+F+E.picker.splitStr+C;if(moment(t.newDateFixed(E.picker,B)).isAfter(t.newDateFixed(E.picker,D))){var H=B;B=D;D=H}E.addRangeClass(moment(t.newDateFixed(E.picker,B)),moment(t.newDateFixed(E.picker,D)),true)})},show:function(){this.picker.$container.find(".c-datepicker-year-table,.c-datepicker-month-table").hide();this.picker.$container.find(".c-datepicker-date-table").show()},hide:function(){this.picker.$container.find(".c-datepicker-date-table").hide()},render:function(C,D,o,B,A){if(this.picker.config.isRange){this.renderRange(C,D,o,B,A)}else{this.renderSingle(C,D,o,A)}},renderSingle:function(F,G,A,D){var C=this.renderHtml(F,G,A);var o=this.picker.$container.find(".c-datepicker-date-table");if(o.length&&!D){this.addCurrentSingle();this.show()}else{var B=this.picker.$container.find(".c-datepicker-picker__content");var o=this.picker.$container.find(".c-datepicker-date-picker__header-year span");var E=this.picker.$container.find(".c-datepicker-date-picker__header-month span");o.text(F);E.text(G);if(!B.find(".c-datepicker-date-table").length){B.append(C)}else{B.find(".c-datepicker-date-table").replaceWith(C)}if(!this.picker.$container.data("day")){this.picker.$container.data("day",this)}this.addCurrentSingle();this.show();if(!D){this.eventSingle()}}},addCurrentSingle:function(){var D=this.picker.$input.val();if(!D){return}if(!t.dayReg(this.picker).test(D.split(" ")[0])){return}var o=t.getTimeFormat(moment(t.newDateFixed(this.picker,D)));var B=this.picker.$container.find(".c-datepicker-date-picker__header-year span").text();var C=this.picker.$container.find(".c-datepicker-date-picker__header-month span").text();if(o.year==B&&o.month==C){var A=this.picker.$container.find(".c-datepicker-date-table td.available");A.removeClass("current");A.eq(o.day-1).addClass("current")}},renderRange:function(I,G,J,M,H){var A=this.picker.$container.find(".c-datepicker-date-table");if(A.length&&!H){this.show()}else{var F=0,o=1,N=t.maxMonth,D=1;var C=this.renderHtml(I[F],G[F],false);var B=G[F]+o;var L=I[F];if(N(B)){B=D;L=L+o}var K=this.renderHtml(L,B,false);var A=this.picker.$container.find(".c-datepicker-date-range-picker__header-year");var E=this.picker.$container.find(".c-datepicker-date-range-picker__header-month");A.eq(F).find("span").text(I[F]);E.eq(F).find("span").text(G[F]);A.eq(1-F).find("span").text(L);E.eq(1-F).find("span").text(B);this.picker.$container.find(".c-datepicker-picker__content").eq(F).html(C);this.picker.$container.find(".c-datepicker-picker__content").eq(1-F).html(K);if(!this.picker.$container.data("day")){this.picker.$container.data("day",this)}this.addRangeClass();if(!H){this.eventRange()}}},prevNextSingle:function(M,H){var F=this.picker.$container.find(".c-datepicker-date-picker__header-year");var E=this.picker.$container.find(".c-datepicker-date-picker__header-month");var I=Number(F.find("span").text());var G=Number(E.find("span").text());var J=this.picker.$container.find(".c-datePicker__input-day").val();var B=t.getTimeFormat(moment(t.newDateFixed(this.picker,J)));var D=1;if(M==="prev"){D=-1}if(H==="year"){I=I+D}else{if(H==="month"){G=G+D;var L=t.fillMonth(G,I);G=L.month;I=L.year}}var A=false;if(B.year==I&&B.month==G){A=B.day}var C=this.renderHtml(I,G,A);F.find("span").text(I);E.find("span").text(G);var o=this.picker.$container.find(".c-datepicker-picker__content");var K=o.find(".c-datepicker-date-table");this.picker.$container.find(".c-datepicker-month-table,.c-datepicker-year-table").hide();if(K.length){K.replaceWith(C)}else{o.append(C)}},prevNextRender:function(L,G){var E=this.picker.$container.find(".c-datepicker-date-range-picker__header-year");var D=this.picker.$container.find(".c-datepicker-date-range-picker__header-month");var H=Number(E.eq(0).find("span").text());var F=Number(D.eq(0).find("span").text());var C=1;var J,B;if(L==="prev"){C=-1}if(G==="year"){H=H+C}else{if(G==="month"){F=F+C}}var K=t.fillMonth(F,H);F=K.month;H=K.year;B=F+1;var o=t.fillMonth(B,H);B=o.month;J=o.year;var A=this.renderHtml(H,F,false);var I=this.renderHtml(J,B,false);E.eq(0).find("span").text(H);D.eq(0).find("span").text(F);E.eq(1).find("span").text(J);D.eq(1).find("span").text(B);this.picker.$container.find(".c-datepicker-picker__content").eq(0).html(A);this.picker.$container.find(".c-datepicker-picker__content").eq(1).html(I);this.addRangeClass(false,false,true)},renderHtml:function(K,ac,X){var I=moment();ac=ac||I.month()+1;K=K||I.year();var Z=(I.month()+1===ac)&&(I.year()===K)?I.date():"";var L=t.getMonthDay(ac-1,K);var T=t.getMonthDay(ac,K);var E=moment().set({year:K,month:ac-1,date:1}).weekday();var F=moment().set({year:K,month:ac-1,date:T}).weekday();var ab=g.fn.datePicker.dates[this.picker.language];var J=k.dayHeader(ab);var R=1;var Y="";var H=0;if(E!=0){for(var O=E-1;O>=0;O--){var A="prev-month";Y+=k.tdTpl(A,L-O);if((E-O)%7===0){J+=""+Y+"";Y="";H+=1}}}var aa=E%7;var Q=this.picker.minJson?true:false;var S=this.picker.maxJson?true:false;var V=Q?moment(t.newDateFixed(this.picker,this.picker.minJson.year+this.picker.splitStr+this.picker.minJson.month+this.picker.splitStr+1)):false;var o=S?moment(t.newDateFixed(this.picker,this.picker.maxJson.year+this.picker.splitStr+this.picker.maxJson.month+this.picker.splitStr+1)):false;var W="";var U=false;var N=moment(t.newDateFixed(this.picker,K+this.picker.splitStr+ac+this.picker.splitStr+1));if((Q&&N.isBefore(V))||(S&&N.isAfter(o))){W=" disabled"}else{if((Q&&N.isSame(V))||(S&&N.isSame(o))){U=true;var M,D;if(Q&&S&&o.isSame(V)){M=this.picker.minJson.day;D=this.picker.maxJson.day}else{if(Q&&N.isSame(V)){M=this.picker.minJson.day;D=32}else{if(S&&N.isSame(o)){M=0;D=this.picker.maxJson.day}}}}}for(var G=0;GD)){A+=" disabled"}Y+=k.tdTpl(A,C);if((aa+G+1)%7===0){J+=""+Y+"";Y="";if(G!=(T-1)){H+=1}}}aa=(E+T)%7;var B=(6-H-1)*7+(6-F);for(var P=0;P"+Y+"";Y=""}}J=k.tableTpl("c-datepicker-date-table",J);return J},addRangeClass:function(G,Z,o){var S=this.picker.$container.find(".c-datepicker-date-range-picker-panel__wrap");S.find("td.available").removeClass("in-range start-date end-date");var O=this.picker.$container.find(".c-datePicker__input-day");var J=this.picker.$container.find(".c-datepicker-date-range-picker__header-year");var Q=this.picker.$container.find(".c-datepicker-date-range-picker__header-month");var F=G||O.eq(0).val();var D=Z||O.eq(1).val();if(!F||!D){return}if(!o){this.current=2}var M=G||moment(t.newDateFixed(this.picker,O.eq(0).val()));var aa=Z||moment(t.newDateFixed(this.picker,O.eq(1).val()));var T=J.eq(0).find("span").text();var K=J.eq(1).find("span").text();var X=Q.eq(0).find("span").text();var U=Q.eq(1).find("span").text();var B=T+this.picker.splitStr+X+this.picker.splitStr+1;var E=K+this.picker.splitStr+U+this.picker.splitStr+t.getMonthDay(U,K);var Y=!(M.isBefore(t.newDateFixed(this.picker,B))||M.isAfter(t.newDateFixed(this.picker,E)));var L=!(aa.isBefore(t.newDateFixed(this.picker,B))||aa.isAfter(t.newDateFixed(this.picker,E)));var I;var ab=M.isBefore(t.newDateFixed(this.picker,B))&&M.isBefore(t.newDateFixed(this.picker,E))&&aa.isBefore(t.newDateFixed(this.picker,B))&&aa.isBefore(t.newDateFixed(this.picker,E));var H=M.isAfter(t.newDateFixed(this.picker,B))&&M.isAfter(t.newDateFixed(this.picker,E))&&aa.isAfter(t.newDateFixed(this.picker,B))&&aa.isAfter(t.newDateFixed(this.picker,E));if(H||ab){return}if(Y){I=(M.month()+1)==X?0:1;S.eq(I).find("td.available").eq(M.date()-1).addClass("current start-date")}if(L){I=(aa.month()+1)==X?0:1;S.eq(I).find("td.available").eq(aa.date()-1).addClass("current end-date")}var C=S.find("td.current");var W=S.find(".start-date");var R=S.find(".end-date");C.addClass("in-range");if(W.is(R)){W.addClass("in-range");return}else{if(C.length===2){var N=W.parents("tr");var V=R.parents("tr");if(W.parents(".c-datepicker-date-range-picker-panel__wrap").is(R.parents(".c-datepicker-date-range-picker-panel__wrap"))){if(N.is(V)){var A=W.nextAll("td.available");A.each(function(ad,ac){g(ac).addClass("in-range");if(g(ac).is(R)){return false}});return}W.nextAll("td.available").addClass("in-range");R.prevAll("td.available").addClass("in-range");var P=N.nextAll("tr");var V=V.prev("tr");if(N.is(V)){return}P.each(function(ac,ad){g(ad).find("td.available").addClass("in-range");if(g(ad).is(V)){return false}});return}W.nextAll("td.available").addClass("in-range");R.prevAll("td.available").addClass("in-range");N.nextAll("tr").find("td.available").addClass("in-range");V.prevAll("tr").find("td.available").addClass("in-range")}else{if(W.length){var N=W.parents("tr");W.nextAll("td.available").addClass("in-range");N.nextAll("tr").find("td.available").addClass("in-range");if(I===0){S.eq(1).find("td.available").addClass("in-range")}}else{if(R.length){var V=R.parents("tr");R.prevAll("td.available").addClass("in-range");V.prevAll("tr").find("td.available").addClass("in-range");if(I===1){S.eq(0).find("td.available").addClass("in-range")}}else{S.find("td.available").addClass("in-range")}}}}}});function m(o){this.picker=o;this.init()}g.extend(m.prototype,{init:function(){},event:function(){this.picker.$container.on("click",".c-datepicker-time-panel__btn.cancel",function(){var D=t.getPicker(g(this),"time");var C=D.picker.activeTimeWrap.find(".c-datePicker__input-time");var B=D.picker.$container.find(".c-datePicker__input-time").index(C);if(!D.picker.config.isRange){var A=D.picker.$container.find(".c-datePicker__input-day").eq(B).val();D.picker.$input.val(A+" "+D.prevValue)}D.picker.$container.find(".c-datePicker__input-time").eq(B).val(D.prevValue);D.hide()});this.picker.$container.on("click",".c-datepicker-time-panel__btn.confirm",function(){var A=t.getPicker(g(this),"time");A.hide()});this.picker.$container.on("click",".c-datepicker-time-panel__btn.min",function(){var A=t.getPicker(g(this),"time");A.updateTimeInput(A.picker.timeMin)});this.picker.$container.on("click",".c-datepicker-time-panel__btn.max",function(){var A=t.getPicker(g(this),"time");A.updateTimeInput(A.picker.timeMax)});this.picker.$container.on("click",function(){var A=g(this).data("time");A.hide()});var o={timer0:"",timer1:"",timer2:""};this.picker.$container.find(".c-datepicker-scrollbar__wrap").scroll(function(){var B=t.getPicker(g(this),"time");var A=B.picker.$container.find(".c-datepicker-scrollbar__wrap").index(g(this));clearTimeout(o["timer"+A]);o["timer"+A]=setTimeout(function(){var H=g(this).scrollTop();var F=Math.round(H/32);var C=g(this).find("li").length-1;if(F>=C){F=C}H=F*32;g(this).scrollTop(H);var E=B.picker.activeTimeWrap.find(".c-datepicker-scrollbar__wrap").index(g(this));var G=B.picker.activeTimeWrap.find(".c-datePicker__input-time");var D=B.picker.activeTimeWrap.find(".c-datePicker__input-day").val();var I=G.val();I=I.split(":");I[E]=t.fillTime(F);I=I.join(":");G.val(I);if(!B.picker.config.isRange){B.picker.$input.val(D+" "+I)}}.bind(this),100)})},updateTimeInput:function(A){this.picker.activeTimeWrap.find(".c-datePicker__input-time").val(A);if(!this.picker.config.isRange){var o=this.picker.$input.val().split(" ")[0];this.picker.$input.val(o+" "+A)}},updateTimePanel:function(B){var A=this.picker.activeTimeWrap.find(".c-datepicker-scrollbar__wrap");var F=this.picker.activeTimeWrap.find(".c-datePicker__input-time").val();var E=this.picker.config.format.split(" ")[1];var o=E.replace(/HH/,"[0-9]{2}").replace(/(mm|ss)/g,"[0-9]{2}");var D=new RegExp("^"+o+"$");var C=D.test(F);if(C){if(B){this.prevValue=F}F=F.split(":");g.each(A,function(G,H){g(H).scrollTop(Number(F[G])*32).addClass("active")})}return C},show:function(){this.picker.activeTimeWrap.find(".c-datepicker-time-panel").show();this.updateTimePanel(true)},hide:function(){this.picker.$container.find(".c-datepicker-time-panel").hide()},render:function(B,o,C,A){if(this.picker.config.isRange){this.renderRange(B,o,C,A)}else{this.renderSingle(B,o,C,A)}},renderSingle:function(D,o,E,A){var C=this.renderHtml(D,o,E,A);var B=this.picker.activeTimeWrap.find(".c-datepicker-time-panel");if(!B.length){this.picker.activeTimeWrap.find(".c-datepicker-date-picker__editor-wrap").eq(1).append(C);this.picker.$container.data("time",this);this.event();this.show()}else{this.show()}},renderRange:function(E,o,F,B){var D=this.renderHtml(E,o,F,B);var C=this.picker.activeTimeWrap.find(".c-datepicker-time-panel");if(!C.length){var A=this.picker.$container.find(".c-datepicker-date-range-picker__time-content");A.eq(0).find(".c-datepicker-date-range-picker__editor-wrap").eq(1).append(D);A.eq(1).find(".c-datepicker-date-range-picker__editor-wrap").eq(1).append(D);this.picker.$container.find(".c-datepicker-time-panel").hide();this.picker.$container.data("time",this);this.event();this.show()}else{this.show()}},renderHtml:function(I,C,A,o){C=C||moment().hour();A=A||moment().minute();o=o||moment().second();var J="";var F="";if(I[0]){for(var E=0;E<24;E++){var G=C===E?"active":"";J+=k.timeLiTpl(G,t.fillTime(E))}F+=k.timeTpl("hour",J);J=""}if(I[1]){for(var D=0;D<60;D++){var G=A===D?"active":"";J+=k.timeLiTpl(G,t.fillTime(D))}F+=k.timeTpl("minute",J);J=""}if(I[2]){for(var B=0;B<60;B++){var G=o===B?"active":"";J+=k.timeLiTpl(G,t.fillTime(B))}F+=k.timeTpl("second",J)}var H=g.fn.datePicker.dates[this.picker.language];F=k.timeMainTpl(H,F);return F}});var x={getPanelVal:function(C,A){var o=C.find(".c-datepicker-time-spinner__wrapper");var B=new Array(3);o.each(function(D,E){if(D!==A){var F=g(E).find(".c-datepicker-scrollbar__wrap").scrollTop();B[D]=t.fillTime(Math.round(F/32))}});return B},getType:function(o){return o===0?"configBegin":o===1?"configEnd":"configMinMax"},checkMinMaxGetVal:function(G,D,E){var B=D.join(":");var C=x.getType(E);var A=t.countSecond(D);var o=G[C].minSecond;var F=G[C].maxSecond;if(AF){val=G[C].maxVal}else{val=B}}return val}};function h(o){this.picker=o}g.extend(h.prototype,{event:function(){this.picker.$container.on("click",".c-datepicker-time-panel__btn.cancel",function(){var A=t.getPicker(g(this),"time");A.picker.$input.val(A.prevValue);A.picker.datePickerObject.hide("confirm")});this.picker.$container.on("click",".c-datepicker-time-panel__btn.confirm",function(){var A=t.getPicker(g(this),"time");A.picker.datePickerObject.hide("confirm")});this.picker.$container.on("click",".c-datepicker-time-panel__btn.min",function(){var A=t.getPicker(g(this),"time");A.updateTimeInput(A.picker.timeMin,g(this))});this.picker.$container.on("click",".c-datepicker-time-panel__btn.max",function(){var A=t.getPicker(g(this),"time");A.updateTimeInput(A.picker.timeMax,g(this))});var o={timer0:"",timer1:"",timer2:""};this.picker.$container.find(".c-datepicker-scrollbar__wrap").scroll(function(){var F=t.getPicker(g(this),"time");var B=F.picker.config;var E=g(this).parents(".c-datepicker-date-picker__onlyTime-content");var D=F.picker.$container.find(".c-datepicker-date-picker__onlyTime-content").index(E);var A=E.find(".c-datepicker-scrollbar__wrap").index(g(this));var C=x.getPanelVal(E,A);clearTimeout(o["timer"+A]);o["timer"+A]=setTimeout(function(){var M=g(this).scrollTop();var H=Math.round(M/32);var G=g(this).find("li").length-1;if(H>=G){H=G}M=H*32;g(this).scrollTop(M);var K=F.picker.$input.eq(D);C[A]=t.fillTime(H);var J=C.join(":");var N=x.checkMinMaxGetVal(F.picker,C,D);K.val(N);F.setMinMaxHour(D);F.setMinMaxDisabled(J,D);if(B.isRange){var I=F.picker.$container.find(".c-datepicker-date-picker__onlyTime-content").eq(1-D);var L=x.getPanelVal(I).join(":");F.updateRange(D,C);F.setMinMaxHour(1-D);F.setMinMaxDisabled(L,1-D)}}.bind(this),100)})},updateRange:function(C,B){var E=this.picker;var A=E.configMinMax;var o=t.countSecond(B);var D=function(F){return{hour:F[0],minute:F[1],second:F[2]}};if(C===0&&o>A.minSecond){E.configEnd.min=D(B);E.configEnd.minVal=B.join(":");E.configEnd.minSecond=t.countSecond(B)}else{if(C===1&&o=0){D=D.eq(C)}var A=x.getType(C);var o=E[A].max.hour;var B=E[A].min.hour;D.find(".c-datepicker-time-spinner__item").removeClass("disabled");D.each(function(G,H){var F=g(H).find(".c-datepicker-scrollbar__wrap").eq(0);F.find(".c-datepicker-time-spinner__item").each(function(I,J){if((B&&Io)){g(J).addClass("disabled")}})})},setMinMaxDisabled:function(H,M){var G=this.picker;var D=G.configMinMax.hasMinMax;if(!H||!D){return}var C=function(O){O.addClass("disabled")};var L=G.$container.find(".c-datepicker-time-panel").eq(M);var N=L.find(".c-datepicker-scrollbar__wrap");var J=N.eq(1);var F=N.eq(2);var E=J.find(".c-datepicker-time-spinner__item");var I=M===0?"configBegin":"configEnd";var o=G[I].min;var K=G[I].max;var B=H.split(":");B=[Number(B[0]),Number(B[1]),Number(B[2])];N.each(function(P,O){if(P!==0){g(O).find(".c-datepicker-time-spinner__item").removeClass("disabled")}});if((!o.hour||B[0]>o.hour)&&(!K.hour||B[0]K.hour)){N.each(function(P,O){if(P!==0){C(g(O).find(".c-datepicker-time-spinner__item"))}})}else{if(B[0]===o.hour){E.each(function(O,P){if(Oo.minute){return}if(B[1]===o.minute){A.each(function(O,P){if(OK.minute){C(g(P))}});var A=F.find(".c-datepicker-time-spinner__item");if(B[1]>K.minute){C(A);return}if(B[1]K.second){C(g(P))}});return}}}}}});g("body").on("click.datePicker",function(){g(".c-datepicker-picker").each(function(A,o){var B=g(o).data("picker");if(g(o).css("display")==="block"){if(B.config.isRange&&(!B.$inputBegin.val()&&!B.$inputEnd.val())){g(o).find("td.available").removeClass("current in-range")}if(B.hasTime){g(o).find(".c-datepicker-time-panel").hide()}if(B.onlyTime){B.datePickerObject.fixedInputValOnlyTime()}else{B.datePickerObject.fixedInputVal()}B.$container.data("isShow",false);B.config.hide.call(B,"clickBody");B.datePickerObject.betweenHandle()}});g(".c-datepicker-picker").hide()});g(".c-datepicker-box").scroll(d);function d(){g(".c-datepicker-picker").each(function(A,o){var B=g(o).data("picker");if(g(o).css("display")==="block"){i(B.datePickerObject)}})}var p={initShowObject:function(G,F){var C,D,A,E,o;if(G.config.isRange){G.fillDefault();A=[F[0].year,F[1].year];E=[F[0].month,F[1].month];o=[F[0].day,F[1].day];C=F[0].year;D=F[0].month}else{var B=G.$input.val();C=F.year;D=F.month;A=C;E=D;o=B?F.day:false;if(G.params.format[0]){G.yearObject=new v(G);if(!G.params.format[2]&&!G.params.format[1]){G.yearObject.render(C)}}if(G.params.format[1]){G.monthObject=new e(G);if(!G.params.format[2]){G.$container.find(".c-datepicker-date-picker__prev-btn.month,.c-datepicker-date-picker__next-btn.month").hide();G.monthObject.render(D)}}}if(G.params.format[2]){G.dayObject=new b(G);G.dayObject.render(A,E,o)}if(G.params.format[3]||G.params.format[4]||G.params.format[5]){G.timeObject=new m(G)}},initParams:function(o){o.splitStr=o.config.format.replace(/[YMDhms:\s]/g,"").split("")[0];o.params.format=t.getFormat(o.config.format);o.minJson=o.config.min?t.getTimeFormat(moment(t.newDateFixed(o,o.config.min))):false;o.maxJson=o.config.max?t.getTimeFormat(moment(t.newDateFixed(o,o.config.max))):false},renderPicker:function(o,B){var A=t.getPicker(g(o));if(A.config.isRange){p.renderPickerRange(o,B)}else{p.renderPickerSingle(o,B)}},renderPickerRange:function(R,M){var K=t.getPicker(g(R));var U=R.value;var L=K.config.format.split(" ")[0];var N=L.replace(/YYYY/,"[0-9]{4}").replace(/(MM|DD)/g,"[0-9]{2}");var C=new RegExp("^"+N+"$");if(C.test(U)){var I=K.$container.find(".c-datePicker__input-day");var o=K.$container.find(".c-datePicker__input-time");var D=I.index(g(R));var T=D===1;var G=I.eq(1-D).val();var E=moment(t.newDateFixed(K,U));var B=moment(t.newDateFixed(K,G));var J=D===0?E.isAfter(B):E.isBefore(B);if(J){var O=U;U=G;G=O;E=moment(t.newDateFixed(K,U));B=moment(t.newDateFixed(K,G));I.eq(D).val(U);I.eq(1-D).val(G)}if(K.hasTime&&!M){o.eq(0).val(K.timeMin);o.eq(1).val(K.timeMax)}var P=t.getTimeFormat(B);var H=t.getTimeFormat(E);var S=t.minMaxFill(K,H,D);H=S.result;R.value=S.val;var F=[],A=[],Q=[];F[D]=H.year;A[D]=H.month;Q[D]=H.day;F[1-D]=P.year;A[1-D]=P.month;Q[1-D]=P.day;K.dayObject.renderRange(F,A,Q,T,true)}},renderPickerSingle:function(F){var E=t.getPicker(g(F));var C=F.value;var H=E.config.format.split(" ")[0];var A=H.replace(/YYYY/,"[0-9]{4}").replace(/(MM|DD)/g,"[0-9]{2}");var B=new RegExp("^"+A+"$");if(B.test(C)){var o=E.$container.find(".c-datePicker__input-time");var D=moment(t.newDateFixed(E,C));var I=t.getTimeFormat(D);var G=t.minMaxFill(E,I,0);I=G.result;C=G.val;F.value=C;if(E.hasTime){C+=" "+o.val()}E.$input.val(C);E.dayObject.renderSingle(I.year,I.month,I.day,true)}},cancelBlur:function(o){g.unsub("datapickerRenderPicker");o.isBlur=false},renderTimePanelHtml:function(G,J,C,A,o){C=C||moment().hour();A=A||moment().minute();o=o||moment().second();var K="";var F="";if(J[0]){for(var E=0;E<24;E++){var H=C===E?"active":"";K+=k.timeLiTpl(H,t.fillTime(E))}F+=k.timeTpl("hour",K);K=""}if(J[1]){for(var D=0;D<60;D++){var H=A===D?"active":"";K+=k.timeLiTpl(H,t.fillTime(D))}F+=k.timeTpl("minute",K);K=""}if(J[2]){for(var B=0;B<60;B++){var H=o===B?"active":"";K+=k.timeLiTpl(H,t.fillTime(B))}F+=k.timeTpl("second",K)}var I=g.fn.datePicker.dates[G.language];F=k.timeMainTpl(I,F);return F},setInitVal:function(o){o.params.initBeginVal=o.$inputBegin.val();o.params.initEndVal=o.$inputEnd.val()}};function q(o){this.datePickerObject=o;this.datePickerObject.pickerObject=null;this.$input=o.$target.find("input");this.config=o.config;this.params={};this.language=this.config.language||"zh-CN";this.hasTime=this.config.format.split(" ").length>1;if(this.hasTime){this.timeMin=t.timeVal(this,"min");this.timeMax=t.timeVal(this,"max")}this.init()}g.extend(q.prototype,{init:function(){this.initShow();this.event()},initShow:function(){p.initParams(this);this.params.isYear=this.params.format[0]&&!this.params.format[1];this.params.isMonth=this.params.format[0]&&this.params.format[1]&&!this.params.format[2];var I="";var A=this.$input.val();var J=A?moment(t.newDateFixed(this,A)):moment();var G=t.getTimeFormat(J);var o="";var F="";var H="";if(this.params.format[3]||this.params.format[4]||this.params.format[5]){H="has-time"}if(this.config.hasShortcut){F="has-sidebar";o=l(this)}var E=g.fn.datePicker.dates[this.language];var C=k.datePickerMainTpl(E);if(this.params.isYear||this.params.isMonth){C=C.replace(/{{footerButton}}/g,k.pickerFooterClearButton(E))}else{C=C.replace(/{{footerButton}}/g,k.pickerFooterNowButton(E))}var D=g(C.replace(/{{table}}/g,I).replace(/{{year}}/g,G.year).replace(/{{month}}/g,G.month).replace("{{sidebar}}",o).replace("{{hasTime}}",H).replace("{{hasSidebar}}",F));g("body").append(D);this.$container=D;this.$container.data("picker",this);this.$container.addClass("is-"+this.language);if(!this.hasTime){this.$container.find(".c-datepicker-date-picker__time-header").hide()}p.initShowObject(this,G);var B=this.$input.val().split(" ");this.$container.find(".c-datePicker__input-day").val(B[0]);this.$container.find(".c-datePicker__input-time").val(B[1]);if(r(this).type!=="active"){this.$container.find(".c-datepicker-picker__btn-now").remove()}},event:function(){if(this.hasTime){this.eventHasTime()}this.datePickerObject.$target.on("click",function(A){A.stopPropagation()});this.$container.on("click",function(A){A.stopPropagation()});this.$container.on("click",".c-datepicker-date-picker__header-year",function(A){A.stopPropagation();var C=t.getPicker(g(this));if(C.isBlur){p.cancelBlur(C)}if(g(this).hasClass("disabled")){return}var B=C.$input.val();if(!B){B=moment()}else{B=moment(t.newDateFixed(C,B))}C.yearObject.render(B.year())});this.$container.on("click",".c-datepicker-date-picker__header-month",function(A){A.stopPropagation();var C=t.getPicker(g(this));if(C.isBlur){p.cancelBlur(C)}if(g(this).hasClass("disabled")){return}var B=C.$input.val();if(!B){B=moment()}else{B=moment(t.newDateFixed(C,B))}C.monthObject.render(B.month()+1)});this.$container.on("click",".c-datepicker-date-picker__next-btn.month",function(A){A.stopPropagation();var B=t.getPicker(g(this));o(B,"next","month")});this.$container.on("click",".c-datepicker-date-picker__prev-btn.month",function(A){A.stopPropagation();var B=t.getPicker(g(this));o(B,"prev","month")});this.$container.on("click",".c-datepicker-date-picker__next-btn.year",function(C){C.stopPropagation();var D=t.getPicker(g(this));if(g(this).hasClass("is-year")){var B=Number(D.$container.find(".c-datepicker-year-table td.available").first().find(".cell").text())+10;D.yearObject.render(B)}else{if(g(this).hasClass("is-month")){var A=D.$container.find(".c-datepicker-date-picker__header-year span");A.text(Number(A.text())+1);D.monthObject.render()}else{o(D,"next","year")}}});this.$container.on("click",".c-datepicker-date-picker__prev-btn.year",function(C){C.stopPropagation();var D=t.getPicker(g(this));if(g(this).hasClass("is-year")){var B=Number(D.$container.find(".c-datepicker-year-table td.available").first().find(".cell").text())-10;D.yearObject.render(B)}else{if(g(this).hasClass("is-month")){var A=D.$container.find(".c-datepicker-date-picker__header-year span");A.text(Number(A.text())-1);D.monthObject.render()}else{o(D,"prev","year")}}});function o(C,A,B){if(C.isBlur){C.dayObject.prevNextSingle(A,B);g.unsub("datapickerRenderPicker");C.isBlur=false}else{C.dayObject.prevNextSingle(A,B)}}this.$container.on("click",".c-datepicker-picker__btn-now",function(){var A=t.getPicker(g(this));c(A,moment().format(A.config.format));A.datePickerObject.hide("shortcut")});this.$container.on("click",".c-datepicker-picker__btn-clear",function(){var A=t.getPicker(g(this));A.clear()});this.$container.on("click",".c-datepicker-picker__shortcut",function(){var D=t.getPicker(g(this));var B=g(this).data("value");var A=moment().add(B,"day").format(D.config.format);if(D.hasTime){var C=g(this).data("time");if(C){A=A.split(" ")[0]+" "+C}}c(D,A);D.datePickerObject.hide("shortcut")});this.$container.on("click",".c-datepicker-picker__link-btn.confirm",function(){var B=t.getPicker(g(this));if(!B.$input.val()){var A=r(B).value;c(B,A)}B.datePickerObject.hide("confirm")})},eventHasTime:function(){this.$container.on("keyup",".c-datePicker__input-time",function(){var C=t.getPicker(g(this));var A=C.timeObject.updateTimePanel();if(A){var B=this.value;var o=C.$container.find(".c-datePicker__input-day").val();C.$input.val(o+" "+B)}});this.$container.on("click",".c-datePicker__input-time",function(o){o.stopPropagation()});this.$container.on("keyup",".c-datePicker__input-day",function(){p.renderPickerSingle(this)});this.$container.on("blur",".c-datePicker__input-day",function(o){var A=t.getPicker(g(this));a(A,g(this));t.judgeTimeRange(A,g(this),A.$container.find(".c-datePicker__input-time"))});this.$container.on("blur",".c-datePicker__input-time",function(o){var A=t.getPicker(g(this));n(A,g(this));t.judgeTimeRange(A,A.$container.find(".c-datePicker__input-day"),g(this))});this.$container.on("focus",".c-datePicker__input-time",function(A){A.stopPropagation();var C=t.getPicker(g(this));if(!C.$input.val()&&!this.value){var o=moment().format(C.config.format);C.$input.val(o);o=o.split(" ");C.$container.find(".c-datePicker__input-day").val(o[0]);g(this).val(o[1])}C.activeTimeWrap=g(this).parents(".c-datepicker-date-picker__time-header");var B=this.value.split(":");C.showTimeSelect(B[0],B[1],B[2])});this.$container.on("focus",".c-datePicker__input-day",function(){var A=t.getPicker(g(this));if(!A.$input.val()){var o=moment().format(A.config.format).split(" ");g(this).val(o[0]);if(o.length>1){A.$container.find(".c-datePicker__input-time").val(o[1])}}})},clear:function(){this.$input.val("");this.$container.find("td.available").removeClass("current")},show:function(){if(this.params.format[2]){var o=t.getRangeTimeFormat(this,this.$input);this.dayObject.render(o.year,o.month,o.day,true)}this.$container.show()},reRenderDay:function(){if(this.params.format[2]){var o=t.getRangeTimeFormat(this,this.$input);var A=this.$input.val()?o.day:false;this.dayObject.render(o.year,o.month,A,true)}},renderYear:function(){this.yearObject.render()},renderMonth:function(){this.monthObject.render()},showTimeSelect:function(A,B,o){if(this.params.format[3]||this.params.format[4]||this.params.format[5]){this.timeObject.render(this.params.format.slice(3),A,B,o)}}});function j(o){this.datePickerObject=o;this.datePickerObject.pickerObject=null;this.$input=o.$target.find("input");this.$inputBegin=this.$input.eq(0);this.$inputEnd=this.$input.eq(1);this.config=o.config;this.params={};this.language=this.config.language||"zh-CN";this.hasTime=this.config.format.split(" ").length>1;if(this.hasTime){this.timeMin=t.timeVal(this,"min");this.timeMax=t.timeVal(this,"max")}this.init()}g.extend(j.prototype,{init:function(){this.initShow();this.event()},initShow:function(){p.initParams(this);var D="";var F=[];F[0]=t.getRangeTimeFormat(this,this.$input.eq(0));F[1]=t.getRangeTimeFormat(this,this.$input.eq(1));var E="";var A="";var C="";if(this.params.format[3]||this.params.format[4]||this.params.format[5]){C="has-time"}if(this.config.hasShortcut){A="has-sidebar";E=l(this)}var B=g.fn.datePicker.dates[this.language];var o=g(k.rangePickerMainTpl(B,C,A,F[1].year,F[1].month,E,D));g("body").append(o);this.$container=o;this.$container.data("picker",this);this.$container.addClass("is-"+this.language);if(!this.hasTime){this.$container.find(".c-datepicker-date-range-picker__time-header").hide()}p.initShowObject(this,F)},fillDefault:function(){var o=this.$inputBegin.val().split(" ");var C=this.$inputEnd.val().split(" ");var B=this.$container.find(".c-datePicker__input-day");var A=this.$container.find(".c-datePicker__input-time");if(o){B.eq(0).val(o[0]);A.eq(0).val(o[1])}if(C){B.eq(1).val(C[0]);A.eq(1).val(C[1])}},event:function(){if(this.hasTime){this.eventHasTime()}this.$container.on("click",function(A){A.stopPropagation()});this.datePickerObject.$target.on("click",function(A){A.stopPropagation()});this.$container.on("click",".c-datepicker-date-range-picker__next-btn.month",function(){var A=t.getPicker(g(this));o(A,"next","month")});this.$container.on("click",".c-datepicker-date-range-picker__prev-btn.month",function(){var A=t.getPicker(g(this));o(A,"prev","month")});this.$container.on("click",".c-datepicker-date-range-picker__next-btn.year",function(){var A=t.getPicker(g(this));o(A,"next","year")});this.$container.on("click",".c-datepicker-date-range-picker__prev-btn.year",function(){var A=t.getPicker(g(this));o(A,"prev","year")});function o(C,A,B){if(C.isBlur){g.sub("datapickerClick",function(D){C.dayObject.prevNextRender(A,B);g.unsub("datapickerClick")});g.pub("datapickerRenderPicker")}else{C.dayObject.prevNextRender(A,B)}}this.$container.on("click",".c-datepicker-picker__btn-clear",function(){var A=t.getPicker(g(this));A.clear()});this.$container.on("click",".c-datepicker-picker__shortcut",function(){var E=t.getPicker(g(this));var D=g(this).data("value").split(",");var B=moment().add(D[0],"day").format(E.config.format);var A=moment().add(D[1],"day").format(E.config.format);if(E.hasTime){var C=g(this).data("time").split(",");if(C[0]){B=B.split(" ")[0]+" "+C[0]}if(C[1]){A=A.split(" ")[0]+" "+C[1]}}E.$inputBegin.val(B);E.$inputEnd.val(A);E.datePickerObject.hide("shortcut")});this.$container.on("click",".c-datepicker-picker__link-btn.confirm",function(){var E=t.getPicker(g(this));var C=E.$container.find(".c-datePicker__input-day");var B=E.$container.find(".c-datePicker__input-time");var D=C.eq(0).val();var A=C.eq(1).val();if(!D||!A){E.datePickerObject.hide("confirm");return}if(E.hasTime){D+=" "+B.eq(0).val();A+=" "+B.eq(1).val()}E.$inputBegin.val(D);E.$inputEnd.val(A);E.datePickerObject.hide("confirm")})},eventHasTime:function(){this.$container.on("keyup",".c-datePicker__input-time",function(){var o=t.getPicker(g(this));o.timeObject.updateTimePanel()});this.$container.on("keyup",".c-datePicker__input-day",function(){p.renderPicker(this)});this.$container.on("click",".c-datePicker__input-time",function(o){o.stopPropagation()});this.$container.on("focus",".c-datePicker__input-time",function(A){A.stopPropagation();var B=t.getPicker(g(this));if(!B.$input.val()&&!this.value){var o=moment().format(B.config.format);o=o.split(" ");B.$container.find(".c-datePicker__input-day").val(o[0]);B.$container.find(".c-datePicker__input-time").val(o[1])}B.activeTimeWrap=g(this).parents(".c-datepicker-date-range-picker__time-content");B.showTimeSelect();g(this).trigger("keyup")});this.$container.on("focus",".c-datePicker__input-day,.c-datePicker__input-time",function(){var B=t.getPicker(g(this));var A=B.$container.find(".c-datePicker__input-day");if(!g(this).val()){var o=moment().format(B.config.format).split(" ");A.val(o[0]);if(o.length>1){B.$container.find(".c-datePicker__input-time").val(o[1])}}});this.$container.on("blur",".c-datePicker__input-day",function(A){var B=t.getPicker(g(this));var o=B.$container.find(".c-datePicker__input-day").index(g(this));a(B,g(this));t.judgeTimeRange(B,g(this),B.$container.find(".c-datePicker__input-time").eq(o),o)});this.$container.on("blur",".c-datePicker__input-time",function(A){var B=t.getPicker(g(this));var o=B.$container.find(".c-datePicker__input-time").index(g(this));n(B,g(this));t.judgeTimeRange(B,B.$container.find(".c-datePicker__input-day").eq(o),g(this),o)})},show:function(){this.fillDefault();var C=[];C[0]=t.getRangeTimeFormat(this,this.$input.eq(0));C[1]=t.getRangeTimeFormat(this,this.$input.eq(1));var A=[C[0].year,C[1].year];var o=[C[0].month,C[1].month];var B=[C[0].day,C[1].day];if(this.params.format[2]){this.dayObject.render(A,o,B,false,true)}p.setInitVal(this);this.$container.show()},clear:function(){this.$inputBegin.val("");this.$inputEnd.val("");this.$container.find(".c-datePicker__input-day,.c-datePicker__input-time").val("");this.$container.find("td.available").removeClass("current in-range")},renderYear:function(){this.yearObject.render()},renderMonth:function(){this.monthObject.render()},showTimeSelect:function(){if(this.params.format[3]||this.params.format[4]||this.params.format[5]){this.timeObject.render(this.params.format.slice(3))}}});function w(o){this.datePickerObject=o;this.datePickerObject.pickerObject=null;this.$input=o.$target.find("input");this.$inputBegin=this.$input.eq(0);this.$inputEnd=this.$input.eq(1);this.config=o.config;this.hasTime=true;this.onlyTime=true;this.params={};this.language=this.config.language||"zh-CN";this.timeMin=t.timeVal(this,"min");this.timeMax=t.timeVal(this,"max");this.configMinMax=t.getOnlyTimeMinMax(this);this.configBegin=g.extend({},this.configMinMax);this.configEnd=g.extend({},this.configMinMax);this.init()}g.extend(w.prototype,{init:function(){this.initShow();this.event()},initShow:function(){p.initParams(this);var C="has-time only-time";var B=g.fn.datePicker.dates[this.language];var o=this.config.isRange?k.rangePickerMainOnlyTimeTpl(B,C):k.datePickerMainOnlyTimeTpl(C);var A=g(o.replace(/{{table}}/g,""));g("body").append(A);this.$container=A;this.$container.data("picker",this);this.$container.addClass("is-"+this.language);this.timeObject=new h(this)},event:function(){this.$container.on("click",function(o){o.stopPropagation()});this.datePickerObject.$target.on("click",function(o){o.stopPropagation()});this.$container.on("click",".c-datepicker-picker__btn-clear",function(){var o=t.getPicker(g(this));o.clear();o.datePickerObject.hide("confirm")});this.$container.on("click",".c-datepicker-picker__btn-cancel",function(){var A=t.getPicker(g(this));if(A.config.isRange){var o=A.timeObject.prevValue.split(",");A.$inputBegin.val(o[0]);A.$inputEnd.val(o[1])}A.datePickerObject.hide("confirm")});this.$container.on("click",".c-datepicker-picker__link-btn.confirm",function(){var o=t.getPicker(g(this));o.datePickerObject.hide("confirm")})},show:function(){this.$container.show();p.setInitVal(this);this.timeObject.render(this.params.format.slice(3))},clear:function(){this.$inputBegin.val("");this.$inputEnd.val("")}});function u(o,A){this.$target=A;this.config=g.extend({},z,o);this.params={};this.onlyTime=t.onlytimeReg(this.config.format);this.init()}g.extend(u.prototype,{init:function(){if(!this.config.isRange){this.pickerObject=this.onlyTime?new w(this):new q(this)}else{this.pickerObject=this.onlyTime?new w(this):new j(this)}this.pickerObject.$input.data("datepicker",this);this.event()},event:function(){this.pickerObject.$input.on("click",function(){var o=g(this).data("datepicker");if(!o.pickerObject.$container.data("isShow")){g(".c-datepicker-picker").data("isShow",false);o.pickerObject.$container.data("isShow",true);o.show()}});this.pickerObject.$input.on("focus",function(){var o=g(this).data("datepicker");o.initInputVal=this.value});this.pickerObject.$container.on("click",function(){var o=g(this).data("picker");if(o.isBlur){g.unsub("datapickerClick");g.pub("datapickerRenderPicker");o.isBlur=false}});this.pickerObject.$input.on("blur",function(){if(!this.value){return}var F=g(this).data("datepicker");var G=F.pickerObject.$input.index(g(this));var o=this.value.split(" ");var J=o[0];var L=F.pickerObject.$container;if(F.pickerObject.hasTime){var B=F.onlyTime?t.timeCheck(o[0]):o[1]?t.timeCheck(o[1]):false;var A=L.find(".c-datePicker__input-time");var E=B&&B.match(t.timeReg(F));if(F.onlyTime){if(!B||!E){B=F.initInputVal;this.value=F.initInputVal}else{if(E){B=E[5]?E[1]+":"+t.fillTime(E[3])+":"+t.fillTime(E[5]):E[1]+":"+t.fillTime(E[3])}this.value=B}}else{var K=t.dayReg(F.pickerObject);var C=L.find(".c-datePicker__input-day");var H=J.match(K);if(!B||!E||!H){J=F.initInputVal.split(" ")[0];B=F.initInputVal.split(" ")[1];this.value=F.initInputVal}else{if(H){H=t.fixedFill(H);J=H[1]+F.pickerObject.splitStr+t.fillTime(H[3])+F.pickerObject.splitStr+t.fillTime(H[5])}if(E){B=E[5]?E[1]+":"+t.fillTime(E[3])+":"+t.fillTime(E[5]):E[1]+":"+t.fillTime(E[3])}this.value=J+" "+B}A.eq(G).val(B);C.eq(G).val(J);F.pickerObject.isBlur=true;g.sub("datapickerRenderPicker",function(){if(!F.onlyTime){p.renderPicker(C.eq(G)[0],true)}F.pickerObject.isBlur=false;g.pub("datapickerClick");g.unsub("datapickerRenderPicker")})}}else{if(F.pickerObject.params.isMonth){var D=moment(t.newDateFixed(F.pickerObject,J+F.pickerObject.splitStr+"01"));var M=t.getTimeFormat(D);var I=t.minMaxFill(F.pickerObject,M,0,"month");val=I.val;g(this).val(val)}else{if(F.pickerObject.params.isYear){if(F.config.min&&JF.config.max){J=F.config.max}g(this).val(J)}else{var K=t.dayReg(F.pickerObject);var H=J.match(K);if(!H){this.value=F.initInputVal}else{H=t.fixedFill(H);J=H[1]+F.pickerObject.splitStr+t.fillTime(H[3])+F.pickerObject.splitStr+t.fillTime(H[5]);this.value=J}}}}})},show:function(){i(this);g(".c-datepicker-picker").hide();this.pickerObject.show();this.config.show.call(this.pickerObject)},hide:function(o){this.pickerObject.$container.find(".td.available").removeClass("current in-range");this.pickerObject.$container.find(".c-datepicker-time-panel").hide();this.pickerObject.$container.hide();this.betweenHandle();if(this.onlyTime){this.fixedInputValOnlyTime()}else{this.fixedInputVal()}this.pickerObject.$container.data("isShow",false);this.config.hide.call(this.pickerObject,o)},fixedInputVal:function(){var G=this.config;var D=this.pickerObject;var I=D.minJson?true:false;var B=D.maxJson?true:false;var E=function(M,L){return moment(t.newDateFixed(M,L))};var C=I?E(D,G.min):false;var K=B?E(D,G.max):false;if(G.isRange){var F=D.$inputBegin.val();var J=D.$inputEnd.val();if(!F&&!J){return}var A=F?E(D,F):false;var H=J?E(D,J):false;if(F&&J&&A.isAfter(H)){D.$inputBegin.val(D.params.initBeginVal);D.$inputEnd.val(D.params.initEndVal);return}if(I&&F&&A.isBefore(C)){D.$inputBegin.val(G.min)}if(B&&J&&H.isAfter(K)){D.$inputEnd.val(G.max)}}else{var o=D.$input.val();if(!o){return}var A=o?E(D,o):false;if(I&&A.isBefore(C)){D.$input.val(G.min)}if(B&&A.isAfter(K)){D.$input.val(G.max)}}},fixedInputValOnlyTime:function(){var I=this.config;var E=this.pickerObject;if(I.isRange){var F=E.$inputBegin.val();var J=E.$inputEnd.val();if((!F&&!J)){return}var K=F.split(":");var C=J.split(":");var H=t.countSecond(K);var G=t.countSecond(C);if(H>G){E.$inputBegin.val(E.params.initBeginVal);E.$inputEnd.val(E.params.initEndVal);return}var D=E.configMinMax.minSecond;var A=E.configMinMax.maxSecond;if(HA){E.$inputEnd.val(E.configMinMax.maxVal)}}else{var B=E.$input.val();if(!E.configMinMax||!B){return}var o=B.split(":");B=x.checkMinMaxGetVal(E,o);E.$input.val(B)}},betweenHandle:function(){var H=this.config;if(!H.isRange||!H.between){return false}var o=this.pickerObject.$inputBegin.val();var F=this.pickerObject.$inputEnd.val();if(!o||!F){return false}var D=moment(t.newDateFixed(this.pickerObject,o));var E=moment(t.newDateFixed(this.pickerObject,F));var A=t.getTimeFormat(D);var B=t.getTimeFormat(E);if(H.between==="month"){if(A.year!==B.year||A.month!==B.month){var C=D.set({year:B.year,month:B.month-1,date:1}).format(H.format);this.pickerObject.$inputBegin.val(C)}return}if(H.between==="year"){if(A.year!==B.year){var C=D.set({year:B.year,month:0,date:1}).format(H.format);this.pickerObject.$inputBegin.val(C)}return}if(Number.isInteger(Number(H.between))){var G=E.add(-Number(H.between),"day");if(G.isAfter(D)){var C=G.format(H.format);this.pickerObject.$inputBegin.val(C)}}}});function i(B){var A=B.$target.offset();var o=B.$target.outerHeight();B.pickerObject.$container.css({top:A.top+o,left:A.left})}function n(C,A){var B=A.val();var o=B&&B.match(t.timeReg(C));if(!B||!o){return}else{if(o){B=C.config.format.split(" ")[1].replace(/HH/,o[1]).replace(/mm/,t.fillTime(o[3])).replace(/ss/,t.fillTime(o[5]));A.val(B);if(!C.config.isRange){A.trigger("keyup")}}}}function a(D,B){var o=B.val();var C=t.dayReg(D);var A=o.match(C);if(!o||!A){return}else{if(A){A=t.fixedFill(A);o=A[1]+D.splitStr+t.fillTime(A[3])+D.splitStr+t.fillTime(A[5]);B.val(o);if(!D.config.isRange){B.trigger("keyup")}}}}function l(D){var B="";var o=D.config.shortcutOptions;for(var A=0;A1){B.$container.find(".c-datePicker__input-time").val(o[1])}}function r(D){var o,B;var C=moment(D.config.min,D.config.format);var A=moment(D.config.max,D.config.format);if(D.config.min&&moment().isBefore(C)){o=C.format(D.config.format);B="min"}else{if(D.config.max&&moment().isAfter(A)){o=A.format(D.config.format);B="max"}else{o=moment().format(D.config.format);B="active"}}return{value:o,type:B}}g.fn.datePicker=function(o){return this.each(function(){new u(o,g(this))})};g.fn.datePicker.dates={};g.fn.datePicker.dates={"zh-CN":{days:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],now:"此刻",clear:"清空",headerYearLink:"年",units:["年","月"],confirm:"确定",cancel:"取消",chooseDay:"选择日期",chooseTime:"选择时间",begin:"开始时间",end:"结束时间",prevYear:"前一年",prevMonth:"上个月",nextYear:"后一年",nextMonth:"下个月",zero:"0点"}}}(jQuery)); \ No newline at end of file diff --git a/src/main/resources/static/datepicker/datepicker.css b/src/main/resources/static/datepicker/datepicker.css new file mode 100644 index 0000000..8f7e549 --- /dev/null +++ b/src/main/resources/static/datepicker/datepicker.css @@ -0,0 +1 @@ +@font-face{font-family:"kxiconfont";src:url("iconfont.eot?t=1534989522363");src:url("iconfont.eot?t=1534989522363#iefix") format("embedded-opentype"),url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAVIAAsAAAAACDAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8j0g/Y21hcAAAAYAAAABsAAABuLPUtGhnbHlmAAAB7AAAAUwAAAG8Fx4wJ2hlYWQAAAM4AAAALwAAADYSZ6+haGhlYQAAA2gAAAAcAAAAJAfeA4dobXR4AAADhAAAAA4AAAAYGAAAAGxvY2EAAAOUAAAADgAAAA4BYADIbWF4cAAAA6QAAAAfAAAAIAETAEFuYW1lAAADxAAAAUUAAAJtPlT+fXBvc3QAAAUMAAAAOwAAAE2wPds5eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeST7zZW7438AQw9zA0AAUZgTJAQDk6QxJeJztkdENgCAMRA8BYwwL+IMM4ATOIGv45dxdA9urY3jkNddL048CIAOIyqEkIDwIMN2aBuYRK/OEU/tF3wTIJk36GHTVHRU4Uegm3R65dcavwnp9XbbLOXZnqQ5vuzucaY79kXQH6QUQEheSeJxdjj9Lw1AUxd9JmsSQVKtNG4ekSrXp1kATG0HtEKij+AWEIhgUXJxcHdx0dqj45yOog6OFqoOD4OLQb+BQN3Hz6nuW0uobHvf33jnnHgbGj9STnpnCmI5AxxwsNPfoDDv72EWTLulCSIRO3pZ6bIxNCqWmw0YtLA0GaZpufCzRvY91E4t0PYRzrPn0QB0O6dn0KAxz33nulMiNdJShWspgsPEmHI9Y8enKpKcRMLApdi6jzokn/4F+5+8PqSubTGUaYzzut6vU9ajlIRHXMQ48bJWoRa0SjkQV7rmTO3LMDDbPQu4ah1aAXUdUQVbV1GK5grIXRvyhVrX5T97SVB8LoVdUXU5BNap5EmtTKkXtNikKrQZx46QRJ67juMlwbN7mZ/KvhpE1dUWOFSHuW77qgeO6TvLftXH4ksnlMp+n2kS6wKv+ANtFbjx4nGNgZGBgAOJlq92M4/ltvjJwszCAwPUlppcQ9P99LAzMTkAuBwMTSBQALeQKjwB4nGNgZGBgbvjfwBDDwgACQJKRARWwAQBHDAJveJxjYWBgYMGCAQFoABkAAAAAAAAAFABAAG4AiADeAAB4nGNgZGBgYGMwZWBmAAEmIOYCQgaG/2A+AwAOXgFVAHicZY9NTsMwEIVf+gekEqqoYIfkBWIBKP0Rq25YVGr3XXTfpk6bKokjx63UA3AejsAJOALcgDvwSCebNpbH37x5Y08A3OAHHo7fLfeRPVwyO3INF7gXrlN/EG6QX4SbaONVuEX9TdjHM6bCbXRheYPXuGL2hHdhDx18CNdwjU/hOvUv4Qb5W7iJO/wKt9Dx6sI+5l5XuI1HL/bHVi+cXqnlQcWhySKTOb+CmV7vkoWt0uqca1vEJlODoF9JU51pW91T7NdD5yIVWZOqCas6SYzKrdnq0AUb5/JRrxeJHoQm5Vhj/rbGAo5xBYUlDowxQhhkiMro6DtVZvSvsUPCXntWPc3ndFsU1P9zhQEC9M9cU7qy0nk6T4E9XxtSdXQrbsuelDSRXs1JErJCXta2VELqATZlV44RelzRiT8oZ0j/AAlabsgAAAB4nGNgYoAALgbsgI2RiZGZkYWRlZGNkZ2BJSc1rYQlJ7G4hDUtswhIFmWmZ5SwJufkJ2czMAAApPgJ/AA=") format("woff"),url("iconfont.ttf?t=1534989522363") format("truetype"),url("iconfont.svg?t=1534989522363#iconfont") format("svg")}.kxiconfont{font-family:"kxiconfont" !important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-left:before{content:"\e619"}.icon-last:before{content:"\e61e"}.icon-first:before{content:"\e620"}.icon-right:before{content:"\e64d"}.icon-clock:before{content:"\e61f"}a{color:#20A0FF}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.c-datepicker-picker{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:296px;position:absolute;z-index:2001}.c-datepicker-picker *:before,.c-datepicker-picker *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.c-datepicker-picker{color:#333;border:1px solid #e4e7ed;box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0;display:none}.c-datepicker-picker a{color:#333}.c-datepicker-picker.only-time{width:150px}.c-datepicker-picker.only-time .c-datepicker-time-panel{position:relative;box-shadow:none;margin:0}.c-datepicker-picker.only-time .c-datepicker-date-picker__time-header,.c-datepicker-picker.only-time .c-datepicker-date-picker__editor-wrap{padding:0}.c-datepicker-date-picker.has-time .c-datepicker-picker__body-wrapper{position:relative}.c-datepicker-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.c-datepicker-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.c-datepicker-input{position:relative;font-size:14px;display:inline-block;width:100%}.c-datepicker-input--small{font-size:13px}.c-datepicker-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;color:#333;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:none;width:100%;padding:0 10px}.c-datepicker-input--small .c-datepicker-input__inner{height:32px;line-height:32px}.c-datepicker-time-panel{margin:5px 0;border:1px solid #e4e7ed;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,0.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;user-select:none}.c-datepicker-time-panel__content{font-size:0;position:relative;overflow:hidden}.c-datepicker-time-panel__content:before,.c-datepicker-time-panel__content:after{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.c-datepicker-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.c-datepicker-time-panel__content.has-seconds:after{left:66.66667%}.c-datepicker-time-spinner{width:100%;white-space:nowrap}.c-datepicker-time-spinner.has-seconds .c-datepicker-time-spinner__wrapper{width:33.3%}.c-datepicker-time-spinner__wrapper{height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.c-datepicker-scrollbar{overflow:hidden;position:relative}.c-datepicker-scrollbar::-webkit-scrollbar{display:none}.c-datepicker-scrollbar__wrap{overflow:scroll;height:100%}.c-datepicker-time-spinner__wrapper .c-datepicker-scrollbar__wrap:not(.c-datepicker-scrollbar__wrap--hidden-default){padding-bottom:15px}.c-datepicker-time-spinner__list{margin:0;list-style:none}.c-datepicker-time-spinner__input.c-datepicker-input .c-datepicker-input__inner,.c-datepicker-time-spinner__list{padding:0;text-align:center}.c-datepicker-time-spinner__list:after,.c-datepicker-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.c-datepicker-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#333}.c-datepicker-time-spinner__item.disabled{color:#999}.c-datepicker-time-spinner__item.disabled:hover{cursor:no-drop}.c-datepicker-scrollbar__bar.is-horizontal{height:6px;left:2px}.c-datepicker-scrollbar__bar.is-horizontal>div{height:100%}.c-datepicker-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,146,152,0.3);transition:background-color .3s}.c-datepicker-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px 0;height:36px;line-height:25px;text-align:right;box-sizing:border-box}.c-datepicker-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:none;font-size:12px;color:#303133}.c-datepicker-time-panel__btn.confirm{font-weight:800;color:#409eff}.c-datepicker-time-panel__btn.cancel{font-weight:800;color:#999;padding-left:0px}.c-datepicker-time-panel__btn.min,.c-datepicker-time-panel__btn.max{float:left;padding-right:0}.c-datepicker-date-picker__header{margin:10px 12px;text-align:center}.c-datepicker-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#333}.c-datepicker-picker__content{position:relative;margin:10px 15px}.c-datepicker-date-picker table{table-layout:fixed;width:100%}.c-datepicker-date-table{font-size:12px;user-select:none;border-spacing:0;width:100%}.c-datepicker-date-table td.next-month .cell,.c-datepicker-date-table td.prev-month .cell{color:#c0c4cc}.c-datepicker-date-table td.disabled .cell,.c-datepicker-month-table td.disabled .cell,.c-datepicker-year-table td.disabled .cell{text-decoration:line-through;color:#999}.c-datepicker-year-table td.current .cell{color:#409eff}.c-datepicker-date-table td{width:34px;height:30px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.c-datepicker-date-table td div{height:30px;padding:3px 0;box-sizing:border-box}.c-datepicker-date-table td .cell{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;transform:translateX(-50%);border-radius:50%}.c-datepicker-date-table td.in-range div,.c-datepicker-date-table td.in-range div:hover{background-color:#f2f6fc}.c-datepicker-date-table td.start-date div{margin-left:1px;border-top-left-radius:15px;border-bottom-left-radius:15px}.c-datepicker-date-table td.end-date div{margin-right:1px;border-top-right-radius:15px;border-bottom-right-radius:15px}.c-datepicker-date-table th{padding:5px;color:#333;font-weight:400;border-bottom:1px solid #ebeef5}.c-datepicker-year-table,.c-datepicker-month-table{font-size:14px;margin:-1px;border-collapse:collapse;margin-bottom:5px}.c-datepicker-month-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#333;margin:0 auto}.c-datepicker-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#333;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:none;margin:0;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.c-datepicker-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.c-datepicker-button--text{border-color:transparent;color:#409eff;background:transparent;padding-left:0;padding-right:0}.c-datepicker-picker__btn-cancel{color:#999}.popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5;position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popper__arrow{border-width:6px;filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03))}.c-datepicker-date-table td.available:hover{color:#409eff}.c-datepicker-picker__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.c-datepicker-button+.c-datepicker-button{margin-left:10px}.c-datepicker-date-picker__prev-btn{float:left}.c-datepicker-date-picker__next-btn{float:right}.c-datepicker-picker__icon-btn{cursor:pointer;padding:2px 7px}.c-datepicker-picker__icon-btn:hover{color:#409eff}.c-datepicker-date-table td.in-range div,.c-datepicker-date-table td.in-range div:hover{background-color:#f2f6fc}.c-datepicker-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,146,152,0.3);transition:background-color .3s}.c-datepicker-scrollbar__bar.is-vertical>div{width:100%}.c-datepicker-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity .12s ease-out}.c-datepicker-date-table td.today .cell{color:#409eff;font-weight:700}.c-datepicker-date-table td.cell{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;border-radius:50%}.c-datepicker-date-table td.current:not(.disabled) .cell{color:#fff;background-color:#409eff}.c-datepicker-month-table td .cell:hover,.c-datepicker-month-table td.current:not(.disabled) .cell{color:#409eff}.c-datepicker-scrollbar__bar.is-vertical{width:6px;top:2px}.c-datepicker-scrollbar__bar.is-horizontal{height:6px;left:2px}.c-datepicker-scrollbar__bar.is-horizontal>div{height:100%}.c-datepicker-month-table td,.c-datepicker-year-table td{text-align:center;padding:16px 3px;cursor:pointer}.c-datepicker-picker [slot=sidebar]+.c-datepicker-picker__body,.c-datepicker-picker__sidebar+.c-datepicker-picker__body{margin-left:102px}.c-datepicker-picker [slot=sidebar],.c-datepicker-picker__sidebar{position:absolute;top:0;bottom:0;width:102px;border-right:1px solid #e4e4e4;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.c-datepicker-picker__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#333;padding-left:8px;text-align:left;outline:none;cursor:pointer}.c-datepicker-picker__shortcut:hover{color:#409eff}.c-datepicker-date-range-picker.has-sidebar{width:636px}.c-datepicker-date-picker.has-sidebar{width:390px}.c-datepicker-picker__body-wrapper:after,.c-datepicker-picker__body:after,.c-datepicker-picker__body-content:after{content:"";display:table;clear:both}.c-datepicker-date-range-picker{width:532px}.c-datepicker-only-time-title{text-align:center}.c-datepicker-date-range-picker.only-time{width:400px}.c-datepicker-date-range-picker.only-time .c-datepicker-time-panel{position:relative}.c-datepicker-date-range-picker.only-time .c-datepicker-time-panel{box-shadow:none}.c-datepicker-date-range-picker-panel__wrap{float:left;width:50%;box-sizing:border-box;margin:0;padding:10px}.c-datepicker-date-range-picker-panel__wrap.is-left{border-right:1px solid #e4e4e4}.c-datepicker-picker__content{margin:0;width:100%;margin:0 auto}.c-datepicker-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.c-datepicker-date-range-picker__time-content{box-sizing:border-box;display:table-cell}.c-datepicker-date-range-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.is-right .c-datepicker-date-range-picker__header-year{margin-left:66px;margin-right:10px}.is-right .c-datepicker-date-range-picker__header-month{margin-right:10px}.is-left .c-datepicker-date-range-picker__header-year{margin-left:12px}.is-left .c-datepicker-date-range-picker__header-month{margin-left:10px}.c-datepicker-date-range-picker__header{user-select:none;font-size:16px}.c-datepicker-data-input{border:none;outline:none;display:inline-block;height:100%;margin:0;padding:0;text-align:center;font-size:14px;color:#333;line-height:1;vertical-align:top;background-color:#fff}div.c-datepicker-data-input{line-height:34px}.c-datepicker-data-input.only-date{width:86px}.c-datepicker-data-input.only-time{width:60px}.c-datepicker-single-editor .c-datepicker-data-input{text-align:left}.c-datepicker-range-separator{padding:0 3px;display:inline-block;text-align:center}.c-datepicker-date-editor{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;box-sizing:border-box;color:#333;display:inline-block;font-size:inherit;height:34px;line-height:34px;outline:none;padding:0 15px;white-space:nowrap}.c-datepicker-range__icon{display:inline-block;text-align:center}.is-en.c-datepicker-date-range-picker .is-right .c-datepicker-date-range-picker__header-year{margin-left:93px}.is-en.c-datepicker-date-range-picker .is-right .c-datepicker-date-range-picker__header-month{margin-right:22px}.is-en.c-datepicker-date-range-picker .is-left .c-datepicker-date-range-picker__header-year{margin-left:35px}.is-en .c-datepicker-time-panel__btn{margin:0} diff --git a/src/main/resources/static/datepicker/datepicker.en.js b/src/main/resources/static/datepicker/datepicker.en.js new file mode 100644 index 0000000..13dc5fe --- /dev/null +++ b/src/main/resources/static/datepicker/datepicker.en.js @@ -0,0 +1,26 @@ +/** + * Simplified Chinese translation for bootstrap-datetimepicker + * Yuan Cheung + */ +;(function ($) { + $.fn.datePicker.dates['en'] = { + days: ["Sun", 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + months: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + now: "now", + clear: 'clear', + headerYearLink: '', + units: ['-', ''], + button: ["confirm", "cancel"], + confirm: 'confirm', + cancel: 'cancel', + chooseDay: 'Choose Day', + chooseTime: 'Choose Time', + begin: 'Start Time', + end: 'End Time', + prevYear: 'prevYear', + prevMonth: 'prevMonth', + nextYear: 'nextYear', + nextMonth: 'nextMonth', + zero: '0:00' + }; +}(jQuery)); diff --git a/src/main/resources/static/datepicker/moment.min.js b/src/main/resources/static/datepicker/moment.min.js new file mode 100644 index 0000000..10c448b --- /dev/null +++ b/src/main/resources/static/datepicker/moment.min.js @@ -0,0 +1,3196 @@ +//! moment.js +//! version : 2.10.6 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() +}(this, function () { + 'use strict'; + + var hookCallback; + + function utils_hooks__hooks() { + return hookCallback.apply(null, arguments); + } + + // This is done to register the method called with moment() + // without creating circular dependencies. + function setHookCallback(callback) { + hookCallback = callback; + } + + function isArray(input) { + return Object.prototype.toString.call(input) === '[object Array]'; + } + + function isDate(input) { + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; + } + + function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } + + function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); + } + + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; + } + + function create_utc__createUTC(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); + } + + function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty: false, + unusedTokens: [], + unusedInput: [], + overflow: -2, + charsLeftOver: 0, + nullInput: false, + invalidMonth: null, + invalidFormat: false, + userInvalidated: false, + iso: false + }; + } + + function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; + } + + function valid__isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m); + m._isValid = !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated; + + if (m._strict) { + m._isValid = m._isValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + } + return m._isValid; + } + + function valid__createInvalid(flags) { + var m = create_utc__createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } + else { + getParsingFlags(m).userInvalidated = true; + } + + return m; + } + + var momentProperties = utils_hooks__hooks.momentProperties = []; + + function copyConfig(to, from) { + var i, prop, val; + + if (typeof from._isAMomentObject !== 'undefined') { + to._isAMomentObject = from._isAMomentObject; + } + if (typeof from._i !== 'undefined') { + to._i = from._i; + } + if (typeof from._f !== 'undefined') { + to._f = from._f; + } + if (typeof from._l !== 'undefined') { + to._l = from._l; + } + if (typeof from._strict !== 'undefined') { + to._strict = from._strict; + } + if (typeof from._tzm !== 'undefined') { + to._tzm = from._tzm; + } + if (typeof from._isUTC !== 'undefined') { + to._isUTC = from._isUTC; + } + if (typeof from._offset !== 'undefined') { + to._offset = from._offset; + } + if (typeof from._pf !== 'undefined') { + to._pf = getParsingFlags(from); + } + if (typeof from._locale !== 'undefined') { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (typeof val !== 'undefined') { + to[prop] = val; + } + } + } + + return to; + } + + var updateInProgress = false; + + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + utils_hooks__hooks.updateOffset(this); + updateInProgress = false; + } + } + + function isMoment(obj) { + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); + } + + function absFloor(number) { + if (number < 0) { + return Math.ceil(number); + } else { + return Math.floor(number); + } + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; + } + + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; + } + + function Locale() { + } + + var locales = {}; + var globalLocale; + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; + } + + function loadLocale(name) { + var oldLocale = null; + // TODO: Find a better way to register and load all the locales in Node + if (!locales[name] && typeof module !== 'undefined' && + module && module.exports) { + try { + oldLocale = globalLocale._abbr; + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we + // want to undo that for lazy loaded locales + locale_locales__getSetGlobalLocale(oldLocale); + } catch (e) { } + } + return locales[name]; + } + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function locale_locales__getSetGlobalLocale(key, values) { + var data; + if (key) { + if (typeof values === 'undefined') { + data = locale_locales__getLocale(key); + } + else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } + } + + return globalLocale._abbr; + } + + function defineLocale(name, values) { + if (values !== null) { + values.abbr = name; + locales[name] = locales[name] || new Locale(); + locales[name].set(values); + + // backwards compat for now: also set the locale + locale_locales__getSetGlobalLocale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } + + // returns locale data + function locale_locales__getLocale(key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + } + + var aliases = {}; + + function addUnitAlias(unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + } + + function normalizeUnits(units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + function makeGetSet(unit, keepTime) { + return function (value) { + if (value != null) { + get_set__set(this, unit, value); + utils_hooks__hooks.updateOffset(this, keepTime); + return this; + } else { + return get_set__get(this, unit); + } + }; + } + + function get_set__get(mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } + + function get_set__set(mom, unit, value) { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + + // MOMENTS + + function getSet(units, value) { + var unit; + if (typeof units === 'object') { + for (unit in units) { + this.set(unit, units[unit]); + } + } else { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + return this[units](value); + } + } + return this; + } + + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; + } + + var formattingTokens = /(\[[^\[]*\])|(\\)?(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,9}|x|X|zz?|ZZ?|.)/g; + + var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + + var formatFunctions = {}; + + var formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken(token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal(func.apply(this, arguments), token); + }; + } + } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = ''; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + var match1 = /\d/; // 0 - 9 + var match2 = /\d\d/; // 00 - 99 + var match3 = /\d{3}/; // 000 - 999 + var match4 = /\d{4}/; // 0000 - 9999 + var match6 = /[+-]?\d{6}/; // -999999 - 999999 + var match1to2 = /\d\d?/; // 0 - 99 + var match1to3 = /\d{1,3}/; // 0 - 999 + var match1to4 = /\d{1,4}/; // 0 - 9999 + var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 + + var matchUnsigned = /\d+/; // 0 - inf + var matchSigned = /[+-]?\d+/; // -inf - inf + + var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z + + var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + + // any word (or two) characters or numbers including two/three word month in arabic. + var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + + var regexes = {}; + + function isFunction(sth) { + // https://github.com/moment/moment/issues/2325 + return typeof sth === 'function' && + Object.prototype.toString.call(sth) === '[object Function]'; + } + + + function addRegexToken(token, regex, strictRegex) { + regexes[token] = isFunction(regex) ? regex : function (isStrict) { + return (isStrict && strictRegex) ? strictRegex : regex; + }; + } + + function getParseRegexForToken(token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + var tokens = {}; + + function addParseToken(token, callback) { + var i, func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (typeof callback === 'number') { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } + } + + function addWeekParseToken(token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); + } + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } + } + + var YEAR = 0; + var MONTH = 1; + var DATE = 2; + var HOUR = 3; + var MINUTE = 4; + var SECOND = 5; + var MILLISECOND = 6; + + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } + + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // ALIASES + + addUnitAlias('month', 'M'); + + // PARSING + + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', matchWord); + addRegexToken('MMMM', matchWord); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } + }); + + // LOCALES + + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); + function localeMonths(m) { + return this._months[m.month()]; + } + + var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); + function localeMonthsShort(m) { + return this._monthsShort[m.month()]; + } + + function localeMonthsParse(monthName, format, strict) { + var i, mom, regex; + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = create_utc__createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } + + // MOMENTS + + function setMonth(mom, value) { + var dayOfMonth; + + // TODO: Move this out of here! + if (typeof value === 'string') { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (typeof value !== 'number') { + return mom; + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function getSetMonth(value) { + if (value != null) { + setMonth(this, value); + utils_hooks__hooks.updateOffset(this, true); + return this; + } else { + return get_set__get(this, 'Month'); + } + } + + function getDaysInMonth() { + return daysInMonth(this.year(), this.month()); + } + + function checkOverflow(m) { + var overflow; + var a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : + a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : + a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : + a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : + a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : + a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; + } + + function warn(msg) { + if (utils_hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (firstTime) { + warn(msg + '\n' + (new Error()).stack); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + utils_hooks__hooks.suppressDeprecationWarnings = false; + + var from_string__isoRegex = /^\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)?)?$/; + + var isoDates = [ + ['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}/] + ]; + + // iso time formats and regexes + var isoTimes = [ + ['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/] + ]; + + var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + + // date from iso format + function configFromISO(config) { + var i, l, + string = config._i, + match = from_string__isoRegex.exec(string); + + if (match) { + getParsingFlags(config).iso = true; + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(string)) { + config._f = isoDates[i][0]; + break; + } + } + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(string)) { + // match[6] should be 'T' or space + config._f += (match[6] || ' ') + isoTimes[i][0]; + break; + } + } + if (string.match(matchOffset)) { + config._f += 'Z'; + } + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + // date from iso format or fallback + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + utils_hooks__hooks.createFromInputFallback(config); + } + } + + utils_hooks__hooks.createFromInputFallback = deprecate( + '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 (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + function createDate(y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; + } + + function createUTCDate(y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; + } + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // ALIASES + + addUnitAlias('year', 'y'); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + // HOOKS + + utils_hooks__hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', false); + + function getIsLeapYear() { + return isLeapYear(this.year()); + } + + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + + // ALIASES + + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); + + // PARSING + + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); + }); + + // HELPERS + + // firstDayOfWeek 0 = sun, 6 = sat + // the day of the week that starts the week + // (usually sunday or monday) + // firstDayOfWeekOfYear 0 = sun, 6 = sat + // the first week is the week that contains the first + // of this day of the week + // (eg. ISO weeks use thursday (4)) + function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { + var end = firstDayOfWeekOfYear - firstDayOfWeek, + daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), + adjustedMoment; + + + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; + } + + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; + } + + adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } + + // LOCALES + + function localeWeek(mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } + + var defaultLocaleWeek = { + dow: 0, // Sunday is the first day of the week. + doy: 6 // The week that contains Jan 1st is the first week of the year. + }; + + function localeFirstDayOfWeek() { + return this._week.dow; + } + + function localeFirstDayOfYear() { + return this._week.doy; + } + + // MOMENTS + + function getSetWeek(input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + function getSetISOWeek(input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + + // ALIASES + + addUnitAlias('dayOfYear', 'DDD'); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { + var week1Jan = 6 + firstDayOfWeek - firstDayOfWeekOfYear, janX = createUTCDate(year, 0, 1 + week1Jan), d = janX.getUTCDay(), dayOfYear; + if (d < firstDayOfWeek) { + d += 7; + } + + weekday = weekday != null ? 1 * weekday : firstDayOfWeek; + + dayOfYear = 1 + week1Jan + 7 * (week - 1) - d + weekday; + + return { + year: dayOfYear > 0 ? year : year - 1, + dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; + } + + // MOMENTS + + function getSetDayOfYear(input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + } + + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } + + function currentDateArray(config) { + var now = new Date(); + if (config._useUTC) { + return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()]; + } + return [now.getFullYear(), now.getMonth(), now.getDate()]; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray(config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse)) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); + week = defaults(w.w, 1); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < dow) { + ++week; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + } else { + // default to begining of week + weekday = dow; + } + } + temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); + + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + + utils_hooks__hooks.ISO_8601 = function () { }; + + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === utils_hooks__hooks.ISO_8601) { + configFromISO(config); + return; + } + + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } + else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if (getParsingFlags(config).bigHour === true && + config._a[HOUR] <= 12 && + config._a[HOUR] > 0) { + getParsingFlags(config).bigHour = undefined; + } + // handle meridiem + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); + + configFromArray(config); + checkOverflow(config); + } + + + function meridiemFixWrap(locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } + } + + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (!valid__isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); + } + + function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i); + config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond]; + + configFromArray(config); + } + + function createFromConfig(config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + function prepareConfig(config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || locale_locales__getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return valid__createInvalid({ nullInput: true }); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else if (isDate(input)) { + config._d = input; + } else { + configFromInput(config); + } + + return config; + } + + function configFromInput(config) { + var input = config._i; + if (input === undefined) { + config._d = new Date(); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (typeof (input) === 'object') { + configFromObject(config); + } else if (typeof (input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + utils_hooks__hooks.createFromInputFallback(config); + } + } + + function createLocalOrUTC(input, format, locale, strict, isUTC) { + var c = {}; + + if (typeof (locale) === 'boolean') { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); + } + + function local__createLocal(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } + + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + function () { + var other = local__createLocal.apply(null, arguments); + return other < this ? this : other; + } + ); + + var prototypeMax = deprecate( + 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + function () { + var other = local__createLocal.apply(null, arguments); + return other > this ? this : other; + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return local__createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + // TODO: Use [].sort instead? + function min() { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + } + + function max() { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + } + + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 36e5; // 1000 * 60 * 60 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = locale_locales__getLocale(); + + this._bubble(); + } + + function isDuration(obj) { + return obj instanceof Duration; + } + + function offset(token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(); + var sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); + }); + } + + offset('Z', ':'); + offset('ZZ', ''); + + // PARSING + + addRegexToken('Z', matchOffset); + addRegexToken('ZZ', matchOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(input); + }); + + // HELPERS + + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; + + function offsetFromString(string) { + var matches = ((string || '').match(matchOffset) || []); + var chunk = matches[matches.length - 1] || []; + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + var minutes = +(parts[1] * 60) + toInt(parts[2]); + + return parts[0] === '+' ? minutes : -minutes; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res); + // Use low-level api, because this fn is low-level api. + res._d.setTime(+res._d + diff); + utils_hooks__hooks.updateOffset(res, false); + return res; + } else { + return local__createLocal(input).local(); + } + } + + function getDateOffset(m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset() / 15) * 15; + } + + // HOOKS + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + utils_hooks__hooks.updateOffset = function () { }; + + // MOMENTS + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset(input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(input); + } + if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + utils_hooks__hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } + + function getSetZone(input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } + } + + function setOffsetToUTC(keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } + + function setOffsetToLocal(keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + + function setOffsetToParsedOffset() { + if (this._tzm) { + this.utcOffset(this._tzm); + } else if (typeof this._i === 'string') { + this.utcOffset(offsetFromString(this._i)); + } + return this; + } + + function hasAlignedHourOffset(input) { + input = input ? local__createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; + } + + function isDaylightSavingTime() { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } + + function isDaylightSavingTimeShifted() { + if (typeof this._isDSTShifted !== 'undefined') { + return this._isDSTShifted; + } + + var c = {}; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); + this._isDSTShifted = this.isValid() && + compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; + } + + function isLocal() { + return !this._isUTC; + } + + function isUtcOffset() { + return this._isUTC; + } + + function isUtc() { + return this._isUTC && this._offset === 0; + } + + var aspNetRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/; + + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + var create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/; + + function create__createDuration(input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months + }; + } else if (typeof input === 'number') { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(match[MILLISECOND]) * sign + }; + } else if (!!(match = create__isoRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y: parseIso(match[2], sign), + M: parseIso(match[3], sign), + d: parseIso(match[4], sign), + h: parseIso(match[5], sign), + m: parseIso(match[6], sign), + s: parseIso(match[7], sign), + w: parseIso(match[8], sign) + }; + } else if (duration == null) {// checks for null or undefined + duration = {}; + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; + } + + create__createDuration.fn = Duration.prototype; + + function parseIso(inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + } + + function positiveMomentsDifference(base, other) { + var res = { milliseconds: 0, months: 0 }; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; + } + + function momentsDifference(base, other) { + var res; + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = create__createDuration(val, period); + add_subtract__addSubtract(this, dur, direction); + return this; + }; + } + + function add_subtract__addSubtract(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = duration._days, + months = duration._months; + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(+mom._d + milliseconds * isAdding); + } + if (days) { + get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); + } + if (months) { + setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + utils_hooks__hooks.updateOffset(mom, days || months); + } + } + + var add_subtract__add = createAdder(1, 'add'); + var add_subtract__subtract = createAdder(-1, 'subtract'); + + function moment_calendar__calendar(time, formats) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || local__createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + diff = this.diff(sod, 'days', true), + format = diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; + return this.format(formats && formats[format] || this.localeData().calendar(format, this, local__createLocal(now))); + } + + function clone() { + return new Moment(this); + } + + function isAfter(input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = isMoment(input) ? input : local__createLocal(input); + return +this > +input; + } else { + inputMs = isMoment(input) ? +input : +local__createLocal(input); + return inputMs < +this.clone().startOf(units); + } + } + + function isBefore(input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = isMoment(input) ? input : local__createLocal(input); + return +this < +input; + } else { + inputMs = isMoment(input) ? +input : +local__createLocal(input); + return +this.clone().endOf(units) < inputMs; + } + } + + function isBetween(from, to, units) { + return this.isAfter(from, units) && this.isBefore(to, units); + } + + function isSame(input, units) { + var inputMs; + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + input = isMoment(input) ? input : local__createLocal(input); + return +this === +input; + } else { + inputMs = +local__createLocal(input); + return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); + } + } + + function diff(input, units, asFloat) { + var that = cloneWithOffset(input, this), + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4, + delta, output; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that); + if (units === 'quarter') { + output = output / 3; + } else if (units === 'year') { + output = output / 12; + } + } else { + delta = this - that; + output = units === 'second' ? delta / 1e3 : // 1000 + units === 'minute' ? delta / 6e4 : // 1000 * 60 + units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + delta; + } + return asFloat ? output : absFloor(output); + } + + function monthDiff(a, b) { + // difference in months + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + return -(wholeMonthDiff + adjust); + } + + utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + + function toString() { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } + + function moment_format__toISOString() { + var m = this.clone().utc(); + if (0 < m.year() && m.year() <= 9999) { + if ('function' === typeof Date.prototype.toISOString) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } else { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } + + function format(inputString) { + var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat); + return this.localeData().postformat(output); + } + + function from(time, withoutSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + return create__createDuration({ to: this, from: time }).locale(this.locale()).humanize(!withoutSuffix); + } + + function fromNow(withoutSuffix) { + return this.from(local__createLocal(), withoutSuffix); + } + + function to(time, withoutSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + return create__createDuration({ from: this, to: time }).locale(this.locale()).humanize(!withoutSuffix); + } + + function toNow(withoutSuffix) { + return this.to(local__createLocal(), withoutSuffix); + } + + function locale(key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = locale_locales__getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + } + + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); + + function localeData() { + return this._locale; + } + + function startOf(units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } + if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; + } + + function endOf(units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + } + + function to_type__valueOf() { + return +this._d - ((this._offset || 0) * 60000); + } + + function unix() { + return Math.floor(+this / 1000); + } + + function toDate() { + return this._offset ? new Date(+this) : this._d; + } + + function toArray() { + var m = this; + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; + } + + function toObject() { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds() + }; + } + + function moment_valid__isValid() { + return valid__isValid(this); + } + + function parsingFlags() { + return extend({}, getParsingFlags(this)); + } + + function invalidAt() { + return getParsingFlags(this).overflow; + } + + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); + + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); + + function addWeekYearFormatToken(token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } + + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + + // ALIASES + + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); + + // PARSING + + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); + + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); + }); + + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = utils_hooks__hooks.parseTwoDigitYear(input); + }); + + // HELPERS + + function weeksInYear(year, dow, doy) { + return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week; + } + + // MOMENTS + + function getSetWeekYear(input) { + var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; + return input == null ? year : this.add((input - year), 'y'); + } + + function getSetISOWeekYear(input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + } + + function getISOWeeksInYear() { + return weeksInYear(this.year(), 1, 4); + } + + function getWeeksInYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } + + addFormatToken('Q', 0, 0, 'quarter'); + + // ALIASES + + addUnitAlias('quarter', 'Q'); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); + + // MOMENTS + + function getSetQuarter(input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + } + + addFormatToken('D', ['DD', 2], 'Do', 'date'); + + // ALIASES + + addUnitAlias('date', 'D'); + + // PARSING + + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; + }); + + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10); + }); + + // MOMENTS + + var getSetDayOfMonth = makeGetSet('Date', true); + + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); + }); + + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // ALIASES + + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', matchWord); + addRegexToken('ddd', matchWord); + addRegexToken('dddd', matchWord); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) { + var weekday = config._locale.weekdaysParse(input); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } + }); + + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; + } + + // LOCALES + + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); + function localeWeekdays(m) { + return this._weekdays[m.day()]; + } + + var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); + function localeWeekdaysShort(m) { + return this._weekdaysShort[m.day()]; + } + + var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); + function localeWeekdaysMin(m) { + return this._weekdaysMin[m.day()]; + } + + function localeWeekdaysParse(weekdayName) { + var i, mom, regex; + + this._weekdaysParse = this._weekdaysParse || []; + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + if (!this._weekdaysParse[i]) { + mom = local__createLocal([2000, 1]).day(i); + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + } + + // MOMENTS + + function getSetDayOfWeek(input) { + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + } + + function getSetLocaleDayOfWeek(input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + } + + function getSetISODayOfWeek(input) { + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); + } + + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, function () { + return this.hours() % 12 || 12; + }); + + function meridiem(token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); + }); + } + + meridiem('a', true); + meridiem('A', false); + + // ALIASES + + addUnitAlias('hour', 'h'); + + // PARSING + + function matchMeridiem(isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; + }); + + // LOCALES + + function localeIsPM(input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; + function localeMeridiem(hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } + + + // MOMENTS + + // Setting the hour should keep the time, because the user explicitly + // specified which hour he wants. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + var getSetHour = makeGetSet('Hours', true); + + addFormatToken('m', ['mm', 2], 0, 'minute'); + + // ALIASES + + addUnitAlias('minute', 'm'); + + // PARSING + + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); + + // MOMENTS + + var getSetMinute = makeGetSet('Minutes', false); + + addFormatToken('s', ['ss', 2], 0, 'second'); + + // ALIASES + + addUnitAlias('second', 's'); + + // PARSING + + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); + + // MOMENTS + + var getSetSecond = makeGetSet('Seconds', false); + + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); + + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; + }); + + + // ALIASES + + addUnitAlias('millisecond', 'ms'); + + // PARSING + + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); + + var token; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } + + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + } + + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); + } + // MOMENTS + + var getSetMillisecond = makeGetSet('Milliseconds', false); + + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); + + // MOMENTS + + function getZoneAbbr() { + return this._isUTC ? 'UTC' : ''; + } + + function getZoneName() { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + + var momentPrototype__proto = Moment.prototype; + + momentPrototype__proto.add = add_subtract__add; + momentPrototype__proto.calendar = moment_calendar__calendar; + momentPrototype__proto.clone = clone; + momentPrototype__proto.diff = diff; + momentPrototype__proto.endOf = endOf; + momentPrototype__proto.format = format; + momentPrototype__proto.from = from; + momentPrototype__proto.fromNow = fromNow; + momentPrototype__proto.to = to; + momentPrototype__proto.toNow = toNow; + momentPrototype__proto.get = getSet; + momentPrototype__proto.invalidAt = invalidAt; + momentPrototype__proto.isAfter = isAfter; + momentPrototype__proto.isBefore = isBefore; + momentPrototype__proto.isBetween = isBetween; + momentPrototype__proto.isSame = isSame; + momentPrototype__proto.isValid = moment_valid__isValid; + momentPrototype__proto.lang = lang; + momentPrototype__proto.locale = locale; + momentPrototype__proto.localeData = localeData; + momentPrototype__proto.max = prototypeMax; + momentPrototype__proto.min = prototypeMin; + momentPrototype__proto.parsingFlags = parsingFlags; + momentPrototype__proto.set = getSet; + momentPrototype__proto.startOf = startOf; + momentPrototype__proto.subtract = add_subtract__subtract; + momentPrototype__proto.toArray = toArray; + momentPrototype__proto.toObject = toObject; + momentPrototype__proto.toDate = toDate; + momentPrototype__proto.toISOString = moment_format__toISOString; + momentPrototype__proto.toJSON = moment_format__toISOString; + momentPrototype__proto.toString = toString; + momentPrototype__proto.unix = unix; + momentPrototype__proto.valueOf = to_type__valueOf; + + // Year + momentPrototype__proto.year = getSetYear; + momentPrototype__proto.isLeapYear = getIsLeapYear; + + // Week Year + momentPrototype__proto.weekYear = getSetWeekYear; + momentPrototype__proto.isoWeekYear = getSetISOWeekYear; + + // Quarter + momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; + + // Month + momentPrototype__proto.month = getSetMonth; + momentPrototype__proto.daysInMonth = getDaysInMonth; + + // Week + momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; + momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; + momentPrototype__proto.weeksInYear = getWeeksInYear; + momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; + + // Day + momentPrototype__proto.date = getSetDayOfMonth; + momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; + momentPrototype__proto.weekday = getSetLocaleDayOfWeek; + momentPrototype__proto.isoWeekday = getSetISODayOfWeek; + momentPrototype__proto.dayOfYear = getSetDayOfYear; + + // Hour + momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; + + // Minute + momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; + + // Second + momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; + + // Millisecond + momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; + + // Offset + momentPrototype__proto.utcOffset = getSetOffset; + momentPrototype__proto.utc = setOffsetToUTC; + momentPrototype__proto.local = setOffsetToLocal; + momentPrototype__proto.parseZone = setOffsetToParsedOffset; + momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; + momentPrototype__proto.isDST = isDaylightSavingTime; + momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted; + momentPrototype__proto.isLocal = isLocal; + momentPrototype__proto.isUtcOffset = isUtcOffset; + momentPrototype__proto.isUtc = isUtc; + momentPrototype__proto.isUTC = isUtc; + + // Timezone + momentPrototype__proto.zoneAbbr = getZoneAbbr; + momentPrototype__proto.zoneName = getZoneName; + + // Deprecations + momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); + momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); + momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); + momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone); + + var momentPrototype = momentPrototype__proto; + + function moment__createUnix(input) { + return local__createLocal(input * 1000); + } + + function moment__createInZone() { + return local__createLocal.apply(null, arguments).parseZone(); + } + + var defaultCalendar = { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L' + }; + + function locale_calendar__calendar(key, mom, now) { + var output = this._calendar[key]; + return typeof output === 'function' ? output.call(mom, now) : output; + } + + var defaultLongDateFormat = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A' + }; + + function longDateFormat(key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + + return this._longDateFormat[key]; + } + + var defaultInvalidDate = 'Invalid date'; + + function invalidDate() { + return this._invalidDate; + } + + var defaultOrdinal = '%d'; + var defaultOrdinalParse = /\d{1,2}/; + + function ordinal(number) { + return this._ordinal.replace('%d', number); + } + + function preParsePostFormat(string) { + return string; + } + + var defaultRelativeTime = { + 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' + }; + + function relative__relativeTime(number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (typeof output === 'function') ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); + } + + function pastFuture(diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + } + + function locale_set__set(config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (typeof prop === 'function') { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _ordinalParseLenient. + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); + } + + var prototype__proto = Locale.prototype; + + prototype__proto._calendar = defaultCalendar; + prototype__proto.calendar = locale_calendar__calendar; + prototype__proto._longDateFormat = defaultLongDateFormat; + prototype__proto.longDateFormat = longDateFormat; + prototype__proto._invalidDate = defaultInvalidDate; + prototype__proto.invalidDate = invalidDate; + prototype__proto._ordinal = defaultOrdinal; + prototype__proto.ordinal = ordinal; + prototype__proto._ordinalParse = defaultOrdinalParse; + prototype__proto.preparse = preParsePostFormat; + prototype__proto.postformat = preParsePostFormat; + prototype__proto._relativeTime = defaultRelativeTime; + prototype__proto.relativeTime = relative__relativeTime; + prototype__proto.pastFuture = pastFuture; + prototype__proto.set = locale_set__set; + + // Month + prototype__proto.months = localeMonths; + prototype__proto._months = defaultLocaleMonths; + prototype__proto.monthsShort = localeMonthsShort; + prototype__proto._monthsShort = defaultLocaleMonthsShort; + prototype__proto.monthsParse = localeMonthsParse; + + // Week + prototype__proto.week = localeWeek; + prototype__proto._week = defaultLocaleWeek; + prototype__proto.firstDayOfYear = localeFirstDayOfYear; + prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; + + // Day of Week + prototype__proto.weekdays = localeWeekdays; + prototype__proto._weekdays = defaultLocaleWeekdays; + prototype__proto.weekdaysMin = localeWeekdaysMin; + prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin; + prototype__proto.weekdaysShort = localeWeekdaysShort; + prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort; + prototype__proto.weekdaysParse = localeWeekdaysParse; + + // Hours + prototype__proto.isPM = localeIsPM; + prototype__proto._meridiemParse = defaultLocaleMeridiemParse; + prototype__proto.meridiem = localeMeridiem; + + function lists__get(format, index, field, setter) { + var locale = locale_locales__getLocale(); + var utc = create_utc__createUTC().set(setter, index); + return locale[field](utc, format); + } + + function list(format, index, field, count, setter) { + if (typeof format === 'number') { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return lists__get(format, index, field, setter); + } + + var i; + var out = []; + for (i = 0; i < count; i++) { + out[i] = lists__get(format, i, field, setter); + } + return out; + } + + function lists__listMonths(format, index) { + return list(format, index, 'months', 12, 'month'); + } + + function lists__listMonthsShort(format, index) { + return list(format, index, 'monthsShort', 12, 'month'); + } + + function lists__listWeekdays(format, index) { + return list(format, index, 'weekdays', 7, 'day'); + } + + function lists__listWeekdaysShort(format, index) { + return list(format, index, 'weekdaysShort', 7, 'day'); + } + + function lists__listWeekdaysMin(format, index) { + return list(format, index, 'weekdaysMin', 7, 'day'); + } + + locale_locales__getSetGlobalLocale('en', { + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); + + // Side effect imports + utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); + utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); + + var mathAbs = Math.abs; + + function duration_abs__abs() { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; + } + + function duration_add_subtract__addSubtract(duration, input, value, direction) { + var other = create__createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); + } + + // supports only 2.0-style add(1, 's') or add(duration) + function duration_add_subtract__add(input, value) { + return duration_add_subtract__addSubtract(this, input, value, 1); + } + + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function duration_add_subtract__subtract(input, value) { + return duration_add_subtract__addSubtract(this, input, value, -1); + } + + function absCeil(number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } + } + + function bubble() { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years, monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0))) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; + } + + function daysToMonths(days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return days * 4800 / 146097; + } + + function monthsToDays(months) { + // the reverse of daysToMonths + return months * 146097 / 4800; + } + + function as(units) { + var days; + var months; + var milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week': return days / 7 + milliseconds / 6048e5; + case 'day': return days + milliseconds / 864e5; + case 'hour': return days * 24 + milliseconds / 36e5; + case 'minute': return days * 1440 + milliseconds / 6e4; + case 'second': return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 864e5) + milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } + } + + // TODO: Use this.as('ms')? + function duration_as__valueOf() { + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); + } + + function makeAs(alias) { + return function () { + return this.as(alias); + }; + } + + var asMilliseconds = makeAs('ms'); + var asSeconds = makeAs('s'); + var asMinutes = makeAs('m'); + var asHours = makeAs('h'); + var asDays = makeAs('d'); + var asWeeks = makeAs('w'); + var asMonths = makeAs('M'); + var asYears = makeAs('y'); + + function duration_get__get(units) { + units = normalizeUnits(units); + return this[units + 's'](); + } + + function makeGetter(name) { + return function () { + return this._data[name]; + }; + } + + var milliseconds = makeGetter('milliseconds'); + var seconds = makeGetter('seconds'); + var minutes = makeGetter('minutes'); + var hours = makeGetter('hours'); + var days = makeGetter('days'); + var months = makeGetter('months'); + var years = makeGetter('years'); + + function weeks() { + return absFloor(this.days() / 7); + } + + var round = Math.round; + var thresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + }; + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function duration_humanize__relativeTime(posNegDuration, withoutSuffix, locale) { + var duration = create__createDuration(posNegDuration).abs(); + var seconds = round(duration.as('s')); + var minutes = round(duration.as('m')); + var hours = round(duration.as('h')); + var days = round(duration.as('d')); + var months = round(duration.as('M')); + var years = round(duration.as('y')); + + var a = seconds < thresholds.s && ['s', seconds] || + minutes === 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours === 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days === 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months === 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years === 1 && ['y'] || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set a threshold for relative time strings + function duration_humanize__getSetRelativeTimeThreshold(threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + return true; + } + + function humanize(withSuffix) { + var locale = this.localeData(); + var output = duration_humanize__relativeTime(this, !withSuffix, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); + } + + var iso_string__abs = Math.abs; + + function iso_string__toISOString() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + var seconds = iso_string__abs(this._milliseconds) / 1000; + var days = iso_string__abs(this._days); + var months = iso_string__abs(this._months); + var minutes, hours, years; + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = years; + var M = months; + var D = days; + var h = hours; + var m = minutes; + var s = seconds; + var total = this.asSeconds(); + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); + } + + var duration_prototype__proto = Duration.prototype; + + duration_prototype__proto.abs = duration_abs__abs; + duration_prototype__proto.add = duration_add_subtract__add; + duration_prototype__proto.subtract = duration_add_subtract__subtract; + duration_prototype__proto.as = as; + duration_prototype__proto.asMilliseconds = asMilliseconds; + duration_prototype__proto.asSeconds = asSeconds; + duration_prototype__proto.asMinutes = asMinutes; + duration_prototype__proto.asHours = asHours; + duration_prototype__proto.asDays = asDays; + duration_prototype__proto.asWeeks = asWeeks; + duration_prototype__proto.asMonths = asMonths; + duration_prototype__proto.asYears = asYears; + duration_prototype__proto.valueOf = duration_as__valueOf; + duration_prototype__proto._bubble = bubble; + duration_prototype__proto.get = duration_get__get; + duration_prototype__proto.milliseconds = milliseconds; + duration_prototype__proto.seconds = seconds; + duration_prototype__proto.minutes = minutes; + duration_prototype__proto.hours = hours; + duration_prototype__proto.days = days; + duration_prototype__proto.weeks = weeks; + duration_prototype__proto.months = months; + duration_prototype__proto.years = years; + duration_prototype__proto.humanize = humanize; + duration_prototype__proto.toISOString = iso_string__toISOString; + duration_prototype__proto.toString = iso_string__toISOString; + duration_prototype__proto.toJSON = iso_string__toISOString; + duration_prototype__proto.locale = locale; + duration_prototype__proto.localeData = localeData; + + // Deprecations + duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); + duration_prototype__proto.lang = lang; + + // Side effect imports + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); + + // Side effect imports + + + utils_hooks__hooks.version = '2.10.6'; + + setHookCallback(local__createLocal); + + utils_hooks__hooks.fn = momentPrototype; + utils_hooks__hooks.min = min; + utils_hooks__hooks.max = max; + utils_hooks__hooks.utc = create_utc__createUTC; + utils_hooks__hooks.unix = moment__createUnix; + utils_hooks__hooks.months = lists__listMonths; + utils_hooks__hooks.isDate = isDate; + utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; + utils_hooks__hooks.invalid = valid__createInvalid; + utils_hooks__hooks.duration = create__createDuration; + utils_hooks__hooks.isMoment = isMoment; + utils_hooks__hooks.weekdays = lists__listWeekdays; + utils_hooks__hooks.parseZone = moment__createInZone; + utils_hooks__hooks.localeData = locale_locales__getLocale; + utils_hooks__hooks.isDuration = isDuration; + utils_hooks__hooks.monthsShort = lists__listMonthsShort; + utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; + utils_hooks__hooks.defineLocale = defineLocale; + utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; + utils_hooks__hooks.normalizeUnits = normalizeUnits; + utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; + + var _moment = utils_hooks__hooks; + + return _moment; + +})); \ No newline at end of file