From 046bd24a0dc0b3d7f3a91afc444bca35a4679d97 Mon Sep 17 00:00:00 2001 From: Kevin Porras Date: Fri, 24 Jul 2020 13:07:00 -0600 Subject: [PATCH 1/2] refs #21232: Improve date handling using sugar library. --- .../redmine-timesheet-filter-autocomplete.js | 59 ++++++++++++++++++- lib/timesheet_filter_autocomplete/hooks.rb | 2 +- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/assets/javascripts/redmine-timesheet-filter-autocomplete.js b/assets/javascripts/redmine-timesheet-filter-autocomplete.js index d7529ce..d0475a6 100644 --- a/assets/javascripts/redmine-timesheet-filter-autocomplete.js +++ b/assets/javascripts/redmine-timesheet-filter-autocomplete.js @@ -8,7 +8,57 @@ $(document).ready(function() { $('#filters-table tbody').prepend($autocompleteFilter); // Autocomplete source. - var source = '/timesheet/filter/autocomplete'; + var source = function(request, response) { + var processed = false; + search = request.term; + const regex = /^(until|since)?\s?(.*)$/mi; + matches = regex.exec(search) + keyword = 'since'; + value = '' + if (matches[1]) { + keyword = matches[1]; + } + if (matches[2]) { + value = matches[2]; + } + if (value) { + parsedDate = Sugar.Date.create(value); + if (parsedDate != 'Invalid Date') { + operator = ''; + filter_id = 'spent_on'; + parsedValue = dateToYMD(parsedDate); + if (keyword.toLowerCase() === 'since') { + operator = '>='; + } + else if (keyword.toLowerCase() === 'until') { + operator = '<='; + } + id = 'spent_on/' + operator + '/' + parsedValue + data = [ + { + id: id, + label: search + } + ]; + response(data); + processed = true; + } + } + if (!processed) { + // If not returned, process as ajax. + var url = "/timesheet/filter/autocomplete?term=" + search; + $.ajax({ + url: url, + success: function(data) { + var parsed = JSON.parse(data); + response(parsed); + }, + error: function() { + response([]); + }, + }); + } + }; const regex = /^\/projects\/(.+)\//; var matches; if ((matches = regex.exec(window.location.pathname)) !== null) { @@ -16,6 +66,13 @@ $(document).ready(function() { source = '/timesheet/filter/' + matches[1] + '/autocomplete'; } } + + const dateToYMD = function(date) { + var d = date.getDate(); + var m = date.getMonth() + 1; //Month from 0 to 11 + var y = date.getFullYear(); + return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d); + }; $autocompleteInput.autocomplete({ autoFocus: true, diff --git a/lib/timesheet_filter_autocomplete/hooks.rb b/lib/timesheet_filter_autocomplete/hooks.rb index f686c50..6c51b18 100644 --- a/lib/timesheet_filter_autocomplete/hooks.rb +++ b/lib/timesheet_filter_autocomplete/hooks.rb @@ -3,7 +3,7 @@ class JSHooks < Redmine::Hook::ViewListener def view_layouts_base_html_head(context={}) p = context[:request].params if p[:controller] == "timelog" && (p[:action] == "report" || p[:action] == "index") - js_files = %w{redmine-timesheet-filter-autocomplete.js} + js_files = %w{sugar-custom.min.js redmine-timesheet-filter-autocomplete.js} js_files.map do |file| javascript_include_tag(file, :plugin=> 'redmine_timesheet_filter_autocomplete') end From c9115e8b4b969a2bfb1cd02a903d417f7dbe60d4 Mon Sep 17 00:00:00 2001 From: Kevin Porras Date: Fri, 24 Jul 2020 13:07:14 -0600 Subject: [PATCH 2/2] refs #21232: Add sugar library. --- assets/javascripts/sugar-custom.min.js | 74 ++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 assets/javascripts/sugar-custom.min.js diff --git a/assets/javascripts/sugar-custom.min.js b/assets/javascripts/sugar-custom.min.js new file mode 100644 index 0000000..545e090 --- /dev/null +++ b/assets/javascripts/sugar-custom.min.js @@ -0,0 +1,74 @@ +/* + * Sugar Custom 2020.07.23 + * + * Freely distributable and licensed under the MIT-style license. + * Copyright (c) Andrew Plummer + * https://sugarjs.com/ + * + * ---------------------------- */ +(function(){'use strict';function I(a,b){for(var c in a)if(J(a,c)&&!1===b.call(a,a[c],c,a))break}function $a(a){function b(e,f,k){E(d,e,function(m,g,h){m=La(m,g,h);Fb(d,m.methods,f,k,m.v);return d})}var c="Object"===a,d=ab(a,!0);b("defineStatic",1);b("defineInstance",2);b("defineInstanceAndStatic",3);b("defineStaticWithArguments",1,!0);b("defineInstanceWithArguments",2,!0);E(d,"defineStaticPolyfill",function(e,f,k){e=La(e,f,k);za(ka[a],e.methods,!0,e.v);return d});E(d,"defineInstancePolyfill",function(e,f,k){e= +La(e,f,k);za(ka[a].prototype,e.methods,!0,e.v);I(e.methods,function(m,g){Aa(d,g,m)});return d});E(d,"alias",function(e,f){var k=d,m="string"===typeof f?d[f]:f;k[e]=m;m.instance&&Aa(k,e,m.instance,!0);return d});E(d,"extend",function(e){function f(r,t){var y=e[r];if(y)for(var v=0,w;w=y[v];v++)if(w===t)return!0;return!1}function k(r,t){return e[r]&&!f(r,t)}function m(r,t,y){var v;if(v=!(c&&y===h&&(!bb||"get"===r||"set"===r))){a:if(t=t.flags,y[r]&&t){for(y=0;y>>0==f&&4294967295!=f&&(c||(d?f<=b:f>=b))&&e.push(+f);e.sort(function(k,m){var g=k>b;return g!==m>b?g?-1:1:k-m});return e}function N(a,b){for(var c=0,d=a.length;c>=1)e+=e;d=f+d;if(c||0>a)d=(0>a?"-":"+")+d;return d}function Tb(a){if(11<=a&&13>=a)return"th";switch(a%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}}function Ub(a,b,c){function d(l,n){var q=n[2],r=n[3],t=n[5];if(n[4]&&b){var y=t;var v=b}else if(q)y=q,v=a;else var w=r&&b?r:n[1]||n[0];if(v){k(c,q,t);var p=function(u,x){return v(u,y, +x)}}l.push(p||f(w))}function e(l,n,q,r){if(r>q){var t=n.slice(q,r);m(t,"{");m(t,"}");l.push(function(){return t})}}function f(l){return function(){return l}}function k(l,n,q){if(l&&!l(n,q))throw new TypeError("Invalid token "+(n||q)+" in format string");}function m(l,n){if(-1!==l.indexOf(n))throw new TypeError("Unmatched "+n+" in format string");}var g=Vb,h=Wb(function(l){var n=[],q=0,r;for(g.lastIndex=0;r=g.exec(l);)e(n,l,q,r.index),d(n,r),q=g.lastIndex;e(n,l,q,l.length);return n});return function(l, +n,q){l=h(l);for(var r="",t=0;t=c&&!1!==a(ca[b],b);b--);}function kb(a,b){for(;0<=a&&!1!==b(ca[a],a);)a=sa(a)}function sa(a){return 6===a?4:5===a?3:a-1}function Fa(a, +b,c,d){Sa(function(e,f){var k=e.name;var m=A(a,Ta(a,k));z(m)&&b(k,m,e,f);k=void 0;!1!==k&&4===f&&(k=A(a,Ta(a,"weekday")),z(k)&&b("weekday",k,e,f),k=void 0);return k},c,d)}function ac(a,b){Fa(a,b,7,4)}function ta(a,b,c,d){var e={};e[b]=c;return da(a,e,d,1)}function lb(a,b,c){b=jb(b,!0);return da(a,b[0],b[1],c)}function ua(a,b){ba(a,7*mb((H(a)-b)/7)+b);return a}function nb(a,b){var c=b-1;ba(a,7*Ua((H(a)-c)/7)+c);return a}function va(a,b,c){5===b&&ua(a,D.get(c).s());return Q(a,sa(b))}function Ga(a,b, +c,d){5===b&&nb(a,D.get(c).s());return Q(a,sa(b),d,!0)}function Q(a,b,c,d){kb(b,function(e,f){var k=d?e.end:e.start;Ha(k)&&(k=k(a));ma(a,e.method,k);return!z(c)||f>c});return a}function Ta(a,b){return Qa(a,b)||Qa(a,b+"s")||"day"===b&&Qa(a,"date")}function bc(a){var b={},c;b[a]=1;Fa(b,function(d,e,f,k){c=k;return!1});return c}function Ia(a,b,c){var d=b>a;if(!d){var e=b;b=a;a=e}e=b-a;1b)break;e+=1}return d?-e:e}function ob(a, +b){if(Z(b)){var c=aa(a),d=H(a);Q(c,6);Y(c,4);ua(c,1);Y(c,U(c)+7*(b-1));var e=X(c);ma(a,"FullYear",e);e=P(c);ma(a,"Month",e);Y(a,U(c));ba(a,d||7)}return a.getTime()}function oa(a,b,c,d){var e,f=0;W(c)&&(c=1);W(d)&&(d=4);var k=e=nb(aa(a),c),m=c,g=d;Q(k,6);Y(k,g);ua(k,m);b&&ab&&(b=new Date(b.getTime()-10)));return dc(a-b,function(c){return la(Ia(a,b,c))})}function rb(a,b,c){hb(a);b=sb[b]||b||"{long}";return Ja(b,a,c)}function Va(a, +b){var c=K(a,"Hours");return D.get(b).ampm[na(c/12)]||""}function tb(a,b,c){var d;if(!isNaN(a.getTime())){if(S(b))switch(b=b.trim().toLowerCase(),!0){case "future"===b:return a.getTime()>ha().getTime();case "past"===b:return a.getTime()H(a);case "weekend"===b:return 0===H(a)||6===H(a);case z(d=ia.weekdayMap[b]):return H(a)===d;case z(d=ia.monthMap[b]):return P(a)=== +d}return ub(a,b,c)}}function ub(a,b,c,d,e){var f=0,k=0;L(a)&&(e=e||{},e.fromUTC=!0,e.setUTC=!0);b=wa(null,b,e,!0);if(0=m-f&&c<=h+k}function Wa(a,b){var c=ha();b&&Y(c,U(c)+b);return X(a)===X(c)&&P(a)===P(c)&&U(a)===U(c)}function ja(a,b,c){return wa(null,a,b,c).date}function wa(a,b,c,d){function e(u,x){var B=A(v,"params")||{};N(x.to,function(F,pa){var G=u[pa+1];if(G){if("yy"===F||"y"===F){F="year";var R=A(v,"prefer");G=+G;G+=50>G?2E3:1900;if(R){var ea=G-X(w);ea/la(ea)!==R&&(G+=100*R)}}else(R=A(Xa,F))?(F= +R.g||F,ea=R.C?R.C:R.sign?"+"===G?1:-1:R.U?!!ea:+G.replace(/,/,"."),"month"===R.g&&--ea,G=ea):G=q.R(F,G);B[F]=G}});return B}function f(u,x){L(u)&&!z(A(v,"fromUTC"))&&(v.fromUTC=!0);L(u)&&!z(A(v,"setUTC"))&&(v.setUTC=!0);x&&(u=new Date(u.getTime()));return u}function k(){N(y,function(u){u.call()})}function m(u){u=u.toLowerCase();q=D.get(A(v,"locale"));for(var x=0,B,F;B=q.compiledFormats[x];x++)if(F=u.match(B.reg)){q.J(B,x);p=e(F,B);if(z(p.timestamp)){u=p.timestamp;p=null;break}z(p.ampm)&&(x=p.ampm, +1===x&&12>p.hour?p.hour+=12:0===x&&12===p.hour&&(p.hour=0));if(p.utc||z(p.tzHour))if(x=p.tzHour,B=p.tzMinute,F=p.tzSign,L(w,!0),x=(F||1)*(60*(x||0)+(B||0)))p.minute=(p.minute||0)-x;z(p.shift)&&W(p.unit)&&(z(p.month)?p.unit=7:z(p.weekday)&&(p.unit=5));z(p.num)&&W(p.unit)&&(x=p.num,z(p.weekday)?l(x):z(p.month)&&(p.date=p.num));p.midday&&g(p.midday);z(p.day)&&(Q(w,3),W(p.unit)&&(p.unit=4,p.num=p.day,delete p.day));z(p.unit)&&(x=p.unit,B=z(p.num)?p.num:1,z(p.weekday)&&(6===x?(l(B),B=1):(da(w,{weekday:p.weekday}, +!0),delete p.weekday)),p.half&&(B*=p.half),z(p.shift)?B*=p.shift:p.sign&&(B*=p.sign),z(p.day)&&(B+=p.day,delete p.day),n(x),p[ia.units[x]]=B,r=!0);p.edge&&h(p.edge,p);p.yearSign&&(p.year*=p.yearSign);break}p?r?da(w,p,!1,1):(L(w)&&Q(w,3),da(w,p,!0,0,A(v,"prefer"),t)):(w=new Date(u),A(v,"fromUTC")&&w.setTime(w.getTime()+6E4*w.getTimezoneOffset()));k();return w}function g(u){p.hour=u%24;23u)va(w,B,A(v,"locale"));else if(0=u)return w.setTime(NaN),!1;Gb.specificity|| +(b.specificity=q);if(t=l%1){if(q){var y=ca[sa(q)];t=ec(n.h/y.h*t);b[y.name]=t}l=na(l)}if("weekday"===h)d||ba(a,l,f);else if(h=6===q&&28l&&(l=l%12+12),n=l%12!==P(a);n&&Y(a,0)}}var g;if(Z(b)&&d)b={millisecond:b};else if(Z(b))return a.setTime(b),a;Fa(b,m);c&&b.specificity&&Q(a,sa(b.specificity));a:{if(g&&!(7ha();break a;case 1:c= +a=n[1]&&v<=(n[2]||n[1])})), +m=Ka(g);if(!m)return"";l?m=V(m):(d.push(q),m="("+m+")");r&&(m=fc(q,m,r));h&&(m+="?");return m}function f(m){m=m.replace(/ /g," ?");return m.replace(/\{([^,]+?)\}/g,function(g,h){var l=h.split("|");return 1 +a?Ua(a):mb(a):a},qa,yb,la=Math.abs,hc=Math.pow,lc=Math.min,mc=Math.max,Ua=Math.ceil,mb=Math.floor,ec=Math.round,Bb=String.fromCharCode,L=function(a){var b="_sugar_"+a;return function(c,d){return 1=b;b++)c=Bb(b+65296),a+=c,qa[c]=Bb(b+ +48);qa[","]="";qa["\uff0e"]=".";qa["."]=".";yb=a})();var gc="months weekdays units numerals placeholders articles tokens timeMarkers ampm timeSuffixes parse timeParse timeFrontParse modifiers".split(" "),nc=/(\w{3})[()\s\d]*$/,Xa={yyyy:{g:"year",src:"\\d{4}"},MM:{g:"month",src:"[01]?\\d"},dd:{g:"date",src:"[0123]?\\d"},hh:{g:"hour",src:"[0-2]?\\d"},mm:{g:"minute",src:"[0-5]\\d"},ss:{g:"second",src:"[0-5]\\d(?:[,.]\\d+)?"},yy:{g:"year",src:"\\d{2}"},y:{g:"year",src:"\\d"},yearSign:{src:"[+-]",sign:!0}, +tzHour:{src:"[0-1]\\d"},tzMinute:{src:"[0-5]\\d"},tzSign:{src:"[+\u2212-]",sign:!0},ihh:{g:"hour",src:"[0-2]?\\d(?:[,.]\\d+)?"},imm:{g:"minute",src:"[0-5]\\d(?:[,.]\\d+)?"},GMT:{g:"utc",src:"GMT",C:1},Z:{g:"utc",src:"Z",C:1},timestamp:{src:"\\d+"}},vb={year:{j:"yyyy",A:!0},month:{j:"MM",A:!0},date:{j:"dd",A:!0},hour:{j:"hh",I:":"},minute:{j:"mm"},second:{j:"ss"},num:{src:"\\d+",T:!0}},ic=[{src:"{MM}[-.\\/]{yyyy}"},{time:!0,src:"{dd}[-.\\/]{MM}(?:[-.\\/]{yyyy|yy|y})?",mdy:"{MM}[-.\\/]{dd}(?:[-.\\/]{yyyy|yy|y})?"}, +{time:!0,src:"{yyyy}[-.\\/]{MM}(?:[-.\\/]{dd})?"},{src:"\\\\/Date\\({timestamp}(?:[+-]\\d{4,4})?\\)\\\\/"},{src:"{yearSign?}{yyyy}(?:-?{MM}(?:-?{dd}(?:T{ihh}(?::?{imm}(?::?{ss})?)?)?)?)?{tzOffset?}"}],sb={ISO8601:"{yyyy}-{MM}-{dd}T{HH}:{mm}:{ss}.{SSS}{Z}",RFC1123:"{Dow}, {dd} {Mon} {yyyy} {HH}:{mm}:{ss} {ZZ}",RFC1036:"{Weekday}, {dd}-{Mon}-{yy} {HH}:{mm}:{ss} {ZZ}"},oc=[{b:"Dow",a:"a",i:"dow",get:function(a,b){return D.get(b).H(H(a),2)}},{b:"Weekday",a:"A",i:"weekday",D:!0,get:function(a,b,c){return D.get(b).H(H(a), +c)}},{b:"Mon",a:"b h",i:"mon",get:function(a,b){return D.get(b).G(P(a),2)}},{b:"Month",a:"B",i:"month",D:!0,get:function(a,b,c){return D.get(b).G(P(a),c)}},{a:"C",get:function(a){return X(a).toString().slice(0,2)}},{b:"d date day",a:"d",f:2,c:"dd",l:"do",get:function(a){return U(a)}},{a:"e",get:function(a){return Ea(U(a),2,!1,10," ")}},{b:"H 24hr",a:"H",f:2,c:"HH",get:function(a){return K(a,"Hours")}},{b:"h hours 12hr",a:"I",f:2,c:"hh",get:function(a){return K(a,"Hours")%12||12}},{b:"D",a:"j",f:3, +c:"DDD",get:function(a){var b=Q(aa(a),6);return Ia(a,b,ca[4])+1}},{b:"M",a:"m",f:2,l:"Mo",c:"MM",get:function(a){return P(a)+1}},{b:"m minutes",a:"M",f:2,c:"mm",get:function(a){return K(a,"Minutes")}},{b:"Q",get:function(a){return Ua((P(a)+1)/3)}},{b:"TT",a:"p",get:function(a,b){return Va(a,b)}},{b:"tt",a:"P",get:function(a,b){return Va(a,b).toLowerCase()}},{b:"T",i:"t",get:function(a,b){return Va(a,b).charAt(0)}},{b:"s seconds",a:"S",f:2,c:"ss",get:function(a){return K(a,"Seconds")}},{b:"S ms",f:3, +c:"SSS",get:function(a){return K(a,"Milliseconds")}},{b:"e",a:"u",l:"eo",get:function(a){return H(a)||7}},{a:"U",f:2,get:function(a){return oa(a,!1,0)}},{b:"W",a:"V",f:2,l:"Wo",c:"WW",get:function(a){return oa(a,!0)}},{a:"w",get:function(a){return H(a)}},{b:"w",l:"wo",c:"ww",get:function(a,b){var c=D.get(b),d=c.s(b);return oa(a,!0,d,c.F(b))}},{a:"W",f:2,get:function(a){return oa(a,!1)}},{c:"gggg",u:"gg",get:function(a,b){return pb(a,b)}},{a:"G",f:4,B:"g",c:"GGGG",u:"GG",get:function(a,b){return pb(a, +b,!0)}},{b:"year",c:"yyyy",u:"yy",a:"Y",f:4,B:"y",get:function(a){return X(a)}},{b:"ZZ",a:"z",get:function(a){return Ra(a)}},{b:"X",get:function(a){return na(a.getTime()/1E3)}},{b:"x",get:function(a){return a.getTime()}},{b:"Z",get:function(a){return Ra(a,!0)}},{b:"z",a:"Z",get:function(a){return(a=a.toString().match(nc))?a[1]:""}},{a:"D",alias:"%m/%d/%y"},{a:"F",alias:"%Y-%m-%d"},{a:"r",alias:"%I:%M:%S %p"},{a:"R",alias:"%H:%M"},{a:"T",alias:"%H:%M:%S"},{a:"x",alias:"{short}"},{a:"X",alias:"{time}"}, +{a:"c",alias:"{stamp}"}],ca=[{name:"millisecond",method:"Milliseconds",h:1,start:0,end:999},{name:"second",method:"Seconds",h:1E3,start:0,end:59},{name:"minute",method:"Minutes",h:6E4,start:0,end:59},{name:"hour",method:"Hours",h:36E5,start:0,end:23},{name:"day",alias:"date",method:"Date",m:!0,h:864E5,start:1,end:function(a){return ib(a)}},{name:"week",method:"ISOWeek",m:!0,h:6048E5},{name:"month",method:"Month",m:!0,h:26298E5,start:0,end:11},{name:"year",method:"FullYear",m:!0,h:315576E5,start:0}], +Zb=function(a,b){function c(e){return d[e]}var d=T({},b);E(a,"getOption",c);Qb(a,"setOption",function(e,f){if(1===arguments.length)var k=e;else k={},k[e]=f;I(k,function(m,g){null===m&&(m=b[g]);d[g]=m})});return c}(O,{newDateInternal:function(){return new Date}}),M,ya,Ja,ia,D;Ab(O,{create:function(a,b){return ja(a,b)},getLocale:function(a){return D.get(a,!a)},getAllLocales:function(){return D.getAll()},getAllLocaleCodes:function(){return Object.keys(D.getAll())},setLocale:function(a){return D.set(a)}, +addLocale:function(a,b){return D.add(a,b)},removeLocale:function(a){return D.remove(a)}});kc(O,{set:function(a,b){b=jb(b);return da(a,b[0],b[1])},advance:function(a,b){return lb(a,b,1)},rewind:function(a,b){return lb(a,b,-1)}});gb(O,{get:function(a,b,c){return wa(a,b,c,void 0).date},setWeekday:function(a,b){return ba(a,b)},setISOWeek:function(a,b){return ob(a,b)},getISOWeek:function(a){return oa(a,!0)},beginningOfISOWeek:function(a){var b=H(a);0===b?b=-6:1!==b&&(b=1);ba(a,b);return Q(a,3)},endOfISOWeek:function(a){0!== +H(a)&&ba(a,7);return Ga(a,4)},getUTCOffset:function(a,b){return Ra(a,b)},setUTC:function(a,b){return L(a,b)},isUTC:function(a){return!!L(a)||0===a.getTimezoneOffset()},isValid:function(a){return!isNaN(a.getTime())},isAfter:function(a,b,c){return a.getTime()>ja(b).getTime()-(c||0)},isBefore:function(a,b,c){return a.getTime()=a},isLeapYear:function(a){a= +X(a);return 0===a%4&&0!==a%100||0===a%400},daysInMonth:function(a){return ib(a)},format:function(a,b,c){return rb(a,b,c)},relative:function(a,b,c){return qb(a,null,b,c)},relativeTo:function(a,b,c){return qb(a,ja(b),c)},is:function(a,b,c){return tb(a,b,c)},reset:function(a,b,c){b=b?bc(b):4;va(a,b,c);return a},clone:function(a){return aa(a)},iso:function(a){return a.toISOString()},getWeekday:function(a){return H(a)},getUTCWeekday:function(a){return a.getUTCDay()}});var Za={code:"en",plural:!0,timeMarkers:"at", +ampm:"AM|A.M.|a,PM|P.M.|p",units:"millisecond:|s,second:|s,minute:|s,hour:|s,day:|s,week:|s,month:|s,year:|s",months:"Jan:uary|,Feb:ruary|,Mar:ch|,Apr:il|,May,Jun:e|,Jul:y|,Aug:ust|,Sep:tember|t|,Oct:ober|,Nov:ember|,Dec:ember|",weekdays:"Sun:day|,Mon:day|,Tue:sday|,Wed:nesday|,Thu:rsday|,Fri:day|,Sat:urday|+weekend",numerals:"zero,one|first,two|second,three|third,four:|th,five|fifth,six:|th,seven:|th,eight:|h,nin:e|th,ten:|th",articles:"a,an,the",tokens:"the,st|nd|rd|th,of|in,a|an,on",time:"{H}:{mm}", +past:"{num} {unit} {sign}",future:"{num} {unit} {sign}",duration:"{num} {unit}",modifiers:[{name:"half",src:"half",value:.5},{name:"midday",src:"noon",value:12},{name:"midday",src:"midnight",value:24},{name:"day",src:"yesterday",value:-1},{name:"day",src:"today|tonight",value:0},{name:"day",src:"tomorrow",value:1},{name:"sign",src:"ago|before",value:-1},{name:"sign",src:"from now|after|from|in|later",value:1},{name:"edge",src:"first day|first|beginning",value:-2},{name:"edge",src:"last day",value:1}, +{name:"edge",src:"end|last",value:2},{name:"shift",src:"last",value:-1},{name:"shift",src:"the|this",value:0},{name:"shift",src:"next",value:1}],parse:"(?:just)? now;{shift} {unit:5-7};{months?} (?:{year}|'{yy});{midday} {4?} {day|weekday};{months},?(?:[-.\\/\\s]{year})?;{edge} of (?:day)? {day|weekday};{0} {num}{1?} {weekday} {2} {months},? {year?};{shift?} {day?} {weekday?} {timeMarker?} {midday};{sign?} {3?} {half} {3?} {unit:3-4|unit:7} {sign?};{0?} {edge} {weekday?} {2} {shift?} {unit:4-7?} {months?},? {year?}".split(";"), +timeParse:"{day|weekday};{shift} {unit:5?} {weekday};{0?} {date}{1?} {2?} {months?};{weekday} {2?} {shift} {unit:5};{0?} {num} {2?} {months}\\.?,? {year?};{num?} {unit:4-5} {sign} {day|weekday};{year}[-.\\/\\s]{months}[-.\\/\\s]{date};{0|months} {date?}{1?} of {shift} {unit:6-7};{0?} {num}{1?} {weekday} of {shift} {unit:6};{date}[-.\\/\\s]{months}[-.\\/\\s](?:{year}|'?{yy});{weekday?}\\.?,? {months}\\.?,? {date}{1?},? (?:{year}|'{yy})?".split(";"),timeFrontParse:["{sign} {num} {unit}","{num} {unit} {sign}", +"{4?} {day|weekday}"]},Cb=T(T({},Za),{mdy:!0,firstDayOfWeek:0,firstDayOfWeekYear:1,"short":"{MM}/{dd}/{yyyy}",medium:"{Month} {d}, {yyyy}","long":"{Month} {d}, {yyyy} {time}",full:"{Weekday}, {Month} {d}, {yyyy} {time}",stamp:"{Dow} {Mon} {d} {yyyy} {time}",time:"{h}:{mm} {TT}"}),Db=T(T({},Za),{"short":"{dd}/{MM}/{yyyy}",medium:"{d} {Month} {yyyy}","long":"{d} {Month} {yyyy} {H}:{mm}",full:"{Weekday}, {d} {Month}, {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}"}),pc=T(T({},Za),{"short":"{yyyy}-{MM}-{dd}", +medium:"{d} {Month}, {yyyy}","long":"{d} {Month}, {yyyy} {H}:{mm}",full:"{Weekday}, {d} {Month}, {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}"}),Eb={"en-US":Cb,"en-GB":Db,"en-AU":Db,"en-CA":pc};(function(){function a(b){this.o={};this.add(b)}a.prototype={get:function(b,c){var d=this.o[b];!d&&Eb[b]?d=this.add(b,Eb[b]):!d&&b&&(d=this.o[b.slice(0,2)]);return d||!1===c?d:this.current},getAll:function(){return this.o},set:function(b){var c=this.get(b,!1);if(!c)throw new TypeError("Invalid Locale: "+ +b);return this.current=c},add:function(b,c){c?c.code=b:(c=b,b=c.code);var d=c.compiledFormats?c:xb(c);this.o[b]=d;this.current||(this.current=d);return d},remove:function(b){this.current.code===b&&(this.current=this.get("en"));return delete this.o[b]}};ia=xb(Cb);D=new a(ia)})();(function(){function a(g,h,l){h&&N(h.split(" "),function(n){g[n]=l})}function b(g){return function(h,l){return g(h,l).toLowerCase()}}function c(g){return function(h,l){var n=g(h,l);return n+D.get(l).O(n)}}function d(g,h){return function(l, +n){return Ea(g(l,n),h)}}function e(g){return function(h,l){return g(h,l)%100}}function f(g){return function(h,l){return Ja(g,h,l)}}function k(g,h){function l(n,q){return g.get(n,q,h)}a(M,g.b+h,l);g.i&&(M[g.i+h]=b(l))}function m(g){return function(h,l){var n=D.get(l);return Ja(n[g],h,l)}}M={};ya={};N(oc,function(g){var h=g.get,l;g.i&&(M[g.i]=b(h));g.l&&(M[g.l]=c(h,g));g.c&&(M[g.c]=d(h,g.c.length));g.u&&(M[g.u]=d(e(h),2));g.B&&(ya[g.B]=d(e(h),2));g.f&&(l=d(h,g.f));g.alias&&(h=f(g.alias));if(g.D)for(var n= +1;5>=n;n++)k(g,n);a(M,g.b,h);a(ya,g.a,l||h)});I(sb,function(g,h){a(M,h,f(g))});Pa(O,"short medium long full",function(g,h){var l=m(h);a(M,h,l);g[h]=l});a(M,"time",m("time"));a(M,"stamp",m("stamp"))})();(function(){Ja=Ub(function(a,b,c){return A(M,b)(a,c)},function(a,b,c){return A(ya,b)(a,c)},function(a,b){return J(M,a)||J(ya,b)})})();(function(){Pa(O,ca,function(a,b,c){var d=b.name,e=d.charAt(0).toUpperCase()+d.slice(1);4