mirror of
https://github.com/moparisthebest/rcrdit
synced 2024-12-22 07:18:56 -05:00
Recordings can be scheduled for one showing or recurring, allows to select priority and profile for either, and more options to be able to be selected for the recurring option.
This commit is contained in:
parent
ccd29b6169
commit
e7716322bc
@ -435,7 +435,22 @@ public class RcrdIt extends ResourceConfig implements AutoCloseable {
|
|||||||
public String ping() {
|
public String ping() {
|
||||||
return "pong";
|
return "pong";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@Path("getRecordingProfiles")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
//List<Channel>
|
||||||
|
public Map<Integer, Profile> getRecordingProfiles() {
|
||||||
|
try (Connection conn = DriverManager.getConnection(databaseUrl);
|
||||||
|
QueryMapper qm = new QueryMapper(conn)) {
|
||||||
|
final Map<Integer, Profile> profileMap = qm.toMap("SELECT profile_id, name, folder, run_at_recording_start, run_at_recording_finish FROM profile", new HashMap<>(), Integer.class, Profile.class);
|
||||||
|
return profileMap;
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("Error in getSchedule",e);
|
||||||
|
}
|
||||||
|
return new HashMap<Integer, Profile>();
|
||||||
|
}
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("getSchedule")
|
@Path("getSchedule")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@ -469,12 +484,16 @@ public class RcrdIt extends ResourceConfig implements AutoCloseable {
|
|||||||
try (Connection conn = DriverManager.getConnection(databaseUrl);
|
try (Connection conn = DriverManager.getConnection(databaseUrl);
|
||||||
QueryMapper qm = new QueryMapper(conn)) {
|
QueryMapper qm = new QueryMapper(conn)) {
|
||||||
String sql = "INSERT INTO autorecs (autorec_id, profile_id, priority, title, channel_name, days_of_week, between_time_start, between_time_end, time_min, time_max) "
|
String sql = "INSERT INTO autorecs (autorec_id, profile_id, priority, title, channel_name, days_of_week, between_time_start, between_time_end, time_min, time_max) "
|
||||||
+ "VALUES (NULL, ?, ?, ?, ?, NULL, NULL,NULL, from_unixtime(?), from_unixtime(?))";
|
+ "VALUES (NULL, ?, ?, ?, ?, NULL, ?,?, from_unixtime(?), from_unixtime(?))";
|
||||||
Long startDate = null;
|
Long startDate = null;
|
||||||
Long endDate = null;
|
Long endDate = null;
|
||||||
//if(recordingRequest.getStartDateEpochSeconds() != null)startDate = recordingRequest.getStartDateEpochSeconds();
|
//if(recordingRequest.getStartDateEpochSeconds() != null)startDate = recordingRequest.getStartDateEpochSeconds();
|
||||||
//if(recordingRequest.getEndDateEpochSeconds() != null)endDate = recordingRequest.getEndDateEpochSeconds();
|
//if(recordingRequest.getEndDateEpochSeconds() != null)endDate = recordingRequest.getEndDateEpochSeconds();
|
||||||
qm.executeUpdate(sql, recordingRequest.getProfileNo(),recordingRequest.getPriority(),recordingRequest.getTitle(),recordingRequest.getChannelName(),startDate,endDate);
|
String startTime = null;
|
||||||
|
String endTime = null;
|
||||||
|
//if(recordingRequest.getStartTime() != null)startTime = recordingRequest.getStartTime().trim();
|
||||||
|
//if(recordingRequest.getStopTime()!= null)endTime = recordingRequest.getStopTime().trim();
|
||||||
|
qm.executeUpdate(sql, recordingRequest.getProfileNo(),recordingRequest.getPriority(),recordingRequest.getTitle(),recordingRequest.getChannelName(),startTime,endTime,startDate,endDate);
|
||||||
timer.schedule(new AutoRecTask(), 0);
|
timer.schedule(new AutoRecTask(), 0);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
log.error("Error in recordSingleInstanceOfProgram",e);
|
log.error("Error in recordSingleInstanceOfProgram",e);
|
||||||
|
@ -13,6 +13,8 @@ public class NewRecordingRequest {
|
|||||||
protected Long profileNo;
|
protected Long profileNo;
|
||||||
protected String title;
|
protected String title;
|
||||||
protected String channelName;
|
protected String channelName;
|
||||||
|
protected String startTime;
|
||||||
|
protected String stopTime;
|
||||||
protected Long startDateEpochSeconds;
|
protected Long startDateEpochSeconds;
|
||||||
protected Long endDateEpochSeconds;
|
protected Long endDateEpochSeconds;
|
||||||
protected Long priority;
|
protected Long priority;
|
||||||
@ -64,6 +66,22 @@ public class NewRecordingRequest {
|
|||||||
public void setPriority(Long priority) {
|
public void setPriority(Long priority) {
|
||||||
this.priority = priority;
|
this.priority = priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getStartTime() {
|
||||||
|
return startTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStartTime(String startTime) {
|
||||||
|
this.startTime = startTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStopTime() {
|
||||||
|
return stopTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStopTime(String stopTime) {
|
||||||
|
this.stopTime = stopTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -282,7 +282,7 @@ ul#channelGroups li ul li ul li.channel {
|
|||||||
height: 50px;
|
height: 50px;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
background-image: url("../images/recordSingle.png");
|
background-image: url("../images/recordSingle.png");
|
||||||
float: left;
|
display:inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.recordSingleDiv:hover{
|
.recordSingleDiv:hover{
|
||||||
@ -297,5 +297,32 @@ ul#channelGroups li ul li ul li.channel {
|
|||||||
height: 50px;
|
height: 50px;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
background-image: url("../images/recordMulti.png");
|
background-image: url("../images/recordMulti.png");
|
||||||
float: left;
|
display:inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.recordMultiDiv:hover{
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.recordMultiDiv:active{
|
||||||
|
background-color:gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
#recordOptionsDiv{
|
||||||
|
border: 1px solid black;
|
||||||
|
padding: 3px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#recordOptionsDiv input, #recordOptionsDiv select{
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-dialog{
|
||||||
|
position: fixed;
|
||||||
|
top: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entryError{
|
||||||
|
border: 3px solid red;
|
||||||
}
|
}
|
@ -25,7 +25,14 @@
|
|||||||
<script src="js/rcrdit.js"></script>
|
<script src="js/rcrdit.js"></script>
|
||||||
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
|
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
|
||||||
|
<script src="js/moment.min.js"></script>
|
||||||
<link rel="stylesheet" type="text/css" href="css/rcrdit.css">
|
<link rel="stylesheet" type="text/css" href="css/rcrdit.css">
|
||||||
|
<script src="js/timepicker/jquery-ui-timepicker-addon.min.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="js/timepicker/jquery-ui-timepicker-addon.min.css">
|
||||||
|
|
||||||
|
<script src="js/toastr/toastr.min.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="js/toastr/toastr.min.css">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id='rcrditHeader'>
|
<div id='rcrditHeader'>
|
||||||
|
551
src/main/webapp/js/moment.min.js
vendored
Normal file
551
src/main/webapp/js/moment.min.js
vendored
Normal file
@ -0,0 +1,551 @@
|
|||||||
|
//! moment.js
|
||||||
|
//! version : 2.17.1
|
||||||
|
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
|
||||||
|
//! license : MIT
|
||||||
|
//! momentjs.com
|
||||||
|
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return od.apply(null,arguments)}
|
||||||
|
// This is done to register the method called with moment()
|
||||||
|
// without creating circular dependencies.
|
||||||
|
function b(a){od=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){
|
||||||
|
// IE8 will treat undefined and null as object if it wasn't for
|
||||||
|
// input != null
|
||||||
|
return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){var b;for(b in a)
|
||||||
|
// even if its not own property I'd still call it non-empty
|
||||||
|
return!1;return!0}function f(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function g(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function h(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function i(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function j(a,b){for(var c in b)i(b,c)&&(a[c]=b[c]);return i(b,"toString")&&(a.toString=b.toString),i(b,"valueOf")&&(a.valueOf=b.valueOf),a}function k(a,b,c,d){return rb(a,b,c,d,!0).utc()}function l(){
|
||||||
|
// We need to deep clone this object.
|
||||||
|
return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null}}function m(a){return null==a._pf&&(a._pf=l()),a._pf}function n(a){if(null==a._isValid){var b=m(a),c=qd.call(b.parsedDateParts,function(a){return null!=a}),d=!isNaN(a._d.getTime())&&b.overflow<0&&!b.empty&&!b.invalidMonth&&!b.invalidWeekday&&!b.nullInput&&!b.invalidFormat&&!b.userInvalidated&&(!b.meridiem||b.meridiem&&c);if(a._strict&&(d=d&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour),null!=Object.isFrozen&&Object.isFrozen(a))return d;a._isValid=d}return a._isValid}function o(a){var b=k(NaN);return null!=a?j(m(b),a):m(b).userInvalidated=!0,b}function p(a){return void 0===a}function q(a,b){var c,d,e;if(p(b._isAMomentObject)||(a._isAMomentObject=b._isAMomentObject),p(b._i)||(a._i=b._i),p(b._f)||(a._f=b._f),p(b._l)||(a._l=b._l),p(b._strict)||(a._strict=b._strict),p(b._tzm)||(a._tzm=b._tzm),p(b._isUTC)||(a._isUTC=b._isUTC),p(b._offset)||(a._offset=b._offset),p(b._pf)||(a._pf=m(b)),p(b._locale)||(a._locale=b._locale),rd.length>0)for(c in rd)d=rd[c],e=b[d],p(e)||(a[d]=e);return a}
|
||||||
|
// Moment prototype object
|
||||||
|
function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),
|
||||||
|
// Prevent infinite loop in case updateOffset creates new moment
|
||||||
|
// objects.
|
||||||
|
sd===!1&&(sd=!0,a.updateOffset(this),sd=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return a<0?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c}
|
||||||
|
// compare two arrays, return the number of differences
|
||||||
|
function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;d<e;d++)(c&&a[d]!==b[d]||!c&&u(a[d])!==u(b[d]))&&g++;return g+f}function w(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function x(b,c){var d=!0;return j(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,b),d){for(var e,f=[],g=0;g<arguments.length;g++){if(e="","object"==typeof arguments[g]){e+="\n["+g+"] ";for(var h in arguments[0])e+=h+": "+arguments[0][h]+", ";e=e.slice(0,-2)}else e=arguments[g];f.push(e)}w(b+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),d=!1}return c.apply(this,arguments)},c)}function y(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),td[b]||(w(c),td[b]=!0)}function z(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function A(a){var b,c;for(c in a)b=a[c],z(b)?this[c]=b:this["_"+c]=b;this._config=a,
|
||||||
|
// 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)}function B(a,b){var c,e=j({},a);for(c in b)i(b,c)&&(d(a[c])&&d(b[c])?(e[c]={},j(e[c],a[c]),j(e[c],b[c])):null!=b[c]?e[c]=b[c]:delete e[c]);for(c in a)i(a,c)&&!i(b,c)&&d(a[c])&&(
|
||||||
|
// make sure changes to properties don't modify parent config
|
||||||
|
e[c]=j({},e[c]));return e}function C(a){null!=a&&this.set(a)}function D(a,b,c){var d=this._calendar[a]||this._calendar.sameElse;return z(d)?d.call(b,c):d}function E(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function F(){return this._invalidDate}function G(a){return this._ordinal.replace("%d",a)}function H(a,b,c,d){var e=this._relativeTime[c];return z(e)?e(a,b,c,d):e.replace(/%d/i,a)}function I(a,b){var c=this._relativeTime[a>0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Dd[c]=Dd[c+"s"]=Dd[b]=a}function K(a){return"string"==typeof a?Dd[a]||Dd[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)i(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){Ed[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:Ed[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(b,c){return function(d){return null!=d?(Q(this,b,d),a.updateOffset(this,c),this):P(this,b)}}function P(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function Q(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}
|
||||||
|
// MOMENTS
|
||||||
|
function R(a){return a=K(a),z(this[a])?this[a]():this}function S(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d<c.length;d++)this[c[d].unit](a[c[d].unit])}else if(a=K(a),z(this[a]))return this[a](b);return this}function T(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}
|
||||||
|
// token: 'M'
|
||||||
|
// padded: ['MM', 2]
|
||||||
|
// ordinal: 'Mo'
|
||||||
|
// callback: function () { this.month() + 1 }
|
||||||
|
function U(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Id[a]=e),b&&(Id[b[0]]=function(){return T(e.apply(this,arguments),b[1],b[2])}),c&&(Id[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function V(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function W(a){var b,c,d=a.match(Fd);for(b=0,c=d.length;b<c;b++)Id[d[b]]?d[b]=Id[d[b]]:d[b]=V(d[b]);return function(b){var e,f="";for(e=0;e<c;e++)f+=d[e]instanceof Function?d[e].call(b,a):d[e];return f}}
|
||||||
|
// format date using native date object
|
||||||
|
function X(a,b){return a.isValid()?(b=Y(b,a.localeData()),Hd[b]=Hd[b]||W(b),Hd[b](a)):a.localeData().invalidDate()}function Y(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Gd.lastIndex=0;d>=0&&Gd.test(a);)a=a.replace(Gd,c),Gd.lastIndex=0,d-=1;return a}function Z(a,b,c){$d[a]=z(b)?b:function(a,d){return a&&c?c:b}}function $(a,b){return i($d,a)?$d[a](b._strict,b._locale):new RegExp(_(a))}
|
||||||
|
// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
|
||||||
|
function _(a){return aa(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function aa(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ba(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),f(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c<a.length;c++)_d[a[c]]=d}function ca(a,b){ba(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function da(a,b,c){null!=b&&i(_d,a)&&_d[a](b,c._a,c,a)}function ea(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function fa(a,b){return a?c(this._months)?this._months[a.month()]:this._months[(this._months.isFormat||ke).test(b)?"format":"standalone"][a.month()]:this._months}function ga(a,b){return a?c(this._monthsShort)?this._monthsShort[a.month()]:this._monthsShort[ke.test(b)?"format":"standalone"][a.month()]:this._monthsShort}function ha(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._monthsParse)for(
|
||||||
|
// this is not used
|
||||||
|
this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;d<12;++d)f=k([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,"").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,"").toLocaleLowerCase();return c?"MMM"===b?(e=je.call(this._shortMonthsParse,g),e!==-1?e:null):(e=je.call(this._longMonthsParse,g),e!==-1?e:null):"MMM"===b?(e=je.call(this._shortMonthsParse,g),e!==-1?e:(e=je.call(this._longMonthsParse,g),e!==-1?e:null)):(e=je.call(this._longMonthsParse,g),e!==-1?e:(e=je.call(this._shortMonthsParse,g),e!==-1?e:null))}function ia(a,b,c){var d,e,f;if(this._monthsParseExact)return ha.call(this,a,b,c);
|
||||||
|
// TODO: add sorting
|
||||||
|
// Sorting makes sure if one month (or abbr) is a prefix of another
|
||||||
|
// see sorting in computeMonthsParse
|
||||||
|
for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;d<12;d++){
|
||||||
|
// test the regex
|
||||||
|
if(
|
||||||
|
// make the regex if we don't have it already
|
||||||
|
e=k([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}
|
||||||
|
// MOMENTS
|
||||||
|
function ja(a,b){var c;if(!a.isValid())
|
||||||
|
// No op
|
||||||
|
return a;if("string"==typeof b)if(/^\d+$/.test(b))b=u(b);else
|
||||||
|
// TODO: Another silent failure?
|
||||||
|
if(b=a.localeData().monthsParse(b),!f(b))return a;return c=Math.min(a.date(),ea(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ka(b){return null!=b?(ja(this,b),a.updateOffset(this,!0),this):P(this,"Month")}function la(){return ea(this.year(),this.month())}function ma(a){return this._monthsParseExact?(i(this,"_monthsRegex")||oa.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):(i(this,"_monthsShortRegex")||(this._monthsShortRegex=ne),this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex)}function na(a){return this._monthsParseExact?(i(this,"_monthsRegex")||oa.call(this),a?this._monthsStrictRegex:this._monthsRegex):(i(this,"_monthsRegex")||(this._monthsRegex=oe),this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex)}function oa(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;b<12;b++)
|
||||||
|
// make the regex if we don't have it already
|
||||||
|
c=k([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(
|
||||||
|
// Sorting makes sure if one month (or abbr) is a prefix of another it
|
||||||
|
// will match the longer piece.
|
||||||
|
d.sort(a),e.sort(a),f.sort(a),b=0;b<12;b++)d[b]=aa(d[b]),e[b]=aa(e[b]);for(b=0;b<24;b++)f[b]=aa(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")","i")}
|
||||||
|
// HELPERS
|
||||||
|
function pa(a){return qa(a)?366:365}function qa(a){return a%4===0&&a%100!==0||a%400===0}function ra(){return qa(this.year())}function sa(a,b,c,d,e,f,g){
|
||||||
|
//can't just apply() to create a date:
|
||||||
|
//http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
|
||||||
|
var h=new Date(a,b,c,d,e,f,g);
|
||||||
|
//the date constructor remaps years 0-99 to 1900-1999
|
||||||
|
return a<100&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ta(a){var b=new Date(Date.UTC.apply(null,arguments));
|
||||||
|
//the Date.UTC function remaps years 0-99 to 1900-1999
|
||||||
|
return a<100&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}
|
||||||
|
// start-of-first-week - start-of-year
|
||||||
|
function ua(a,b,c){var// first-week day -- which january is always in the first week (4 for iso, 1 for other)
|
||||||
|
d=7+b-c,
|
||||||
|
// first-week day local weekday -- which local weekday is fwd
|
||||||
|
e=(7+ta(a,0,d).getUTCDay()-b)%7;return-e+d-1}
|
||||||
|
//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
|
||||||
|
function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return j<=0?(f=a-1,g=pa(f)+j):j>pa(a)?(f=a+1,g=j-pa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return g<1?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(pa(a)-d+e)/7}
|
||||||
|
// HELPERS
|
||||||
|
// LOCALES
|
||||||
|
function ya(a){return wa(a,this._week.dow,this._week.doy).week}function za(){return this._week.dow}function Aa(){return this._week.doy}
|
||||||
|
// MOMENTS
|
||||||
|
function Ba(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Ca(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}
|
||||||
|
// HELPERS
|
||||||
|
function Da(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Ea(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Fa(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:this._weekdays}function Ga(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ha(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ia(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)f=k([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=je.call(this._weekdaysParse,g),e!==-1?e:null):"ddd"===b?(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:null):(e=je.call(this._minWeekdaysParse,g),e!==-1?e:null):"dddd"===b?(e=je.call(this._weekdaysParse,g),e!==-1?e:(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:(e=je.call(this._minWeekdaysParse,g),e!==-1?e:null))):"ddd"===b?(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:(e=je.call(this._weekdaysParse,g),e!==-1?e:(e=je.call(this._minWeekdaysParse,g),e!==-1?e:null))):(e=je.call(this._minWeekdaysParse,g),e!==-1?e:(e=je.call(this._weekdaysParse,g),e!==-1?e:(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:null)))}function Ja(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ia.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){
|
||||||
|
// test the regex
|
||||||
|
if(
|
||||||
|
// make the regex if we don't have it already
|
||||||
|
e=k([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}
|
||||||
|
// MOMENTS
|
||||||
|
function Ka(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Da(a,this.localeData()),this.add(a-b,"d")):b}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ma(a){if(!this.isValid())return null!=a?this:NaN;
|
||||||
|
// 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.
|
||||||
|
if(null!=a){var b=Ea(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Na(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=ue),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Oa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ve),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Pa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=we),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qa(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;b<7;b++)
|
||||||
|
// make the regex if we don't have it already
|
||||||
|
c=k([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for(
|
||||||
|
// Sorting makes sure if one weekday (or abbr) is a prefix of another it
|
||||||
|
// will match the longer piece.
|
||||||
|
g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;b<7;b++)h[b]=aa(h[b]),i[b]=aa(i[b]),j[b]=aa(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")}
|
||||||
|
// FORMATTING
|
||||||
|
function Ra(){return this.hours()%12||12}function Sa(){return this.hours()||24}function Ta(a,b){U(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}
|
||||||
|
// PARSING
|
||||||
|
function Ua(a,b){return b._meridiemParse}
|
||||||
|
// LOCALES
|
||||||
|
function Va(a){
|
||||||
|
// IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
|
||||||
|
// Using charAt should be more compatible.
|
||||||
|
return"p"===(a+"").toLowerCase().charAt(0)}function Wa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Xa(a){return a?a.toLowerCase().replace("_","-"):a}
|
||||||
|
// 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 Ya(a){for(var b,c,d,e,f=0;f<a.length;){for(e=Xa(a[f]).split("-"),b=e.length,c=Xa(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=Za(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)
|
||||||
|
//the next array item is better than a shallower substring of this one
|
||||||
|
break;b--}f++}return null}function Za(a){var b=null;
|
||||||
|
// TODO: Find a better way to register and load all the locales in Node
|
||||||
|
if(!Be[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=xe._abbr,require("./locale/"+a),
|
||||||
|
// because defineLocale currently also sets the global locale, we
|
||||||
|
// want to undo that for lazy loaded locales
|
||||||
|
$a(b)}catch(a){}return Be[a]}
|
||||||
|
// 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 $a(a,b){var c;
|
||||||
|
// moment.duration._locale = moment._locale = data;
|
||||||
|
return a&&(c=p(b)?bb(a):_a(a,b),c&&(xe=c)),xe._abbr}function _a(a,b){if(null!==b){var c=Ae;if(b.abbr=a,null!=Be[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=Be[a]._config;else if(null!=b.parentLocale){if(null==Be[b.parentLocale])return Ce[b.parentLocale]||(Ce[b.parentLocale]=[]),Ce[b.parentLocale].push({name:a,config:b}),null;c=Be[b.parentLocale]._config}
|
||||||
|
// backwards compat for now: also set the locale
|
||||||
|
// make sure we set the locale AFTER all child locales have been
|
||||||
|
// created, so we won't end up with the child locale set.
|
||||||
|
return Be[a]=new C(B(c,b)),Ce[a]&&Ce[a].forEach(function(a){_a(a.name,a.config)}),$a(a),Be[a]}
|
||||||
|
// useful for testing
|
||||||
|
return delete Be[a],null}function ab(a,b){if(null!=b){var c,d=Ae;
|
||||||
|
// MERGE
|
||||||
|
null!=Be[a]&&(d=Be[a]._config),b=B(d,b),c=new C(b),c.parentLocale=Be[a],Be[a]=c,
|
||||||
|
// backwards compat for now: also set the locale
|
||||||
|
$a(a)}else
|
||||||
|
// pass null for config to unupdate, useful for tests
|
||||||
|
null!=Be[a]&&(null!=Be[a].parentLocale?Be[a]=Be[a].parentLocale:null!=Be[a]&&delete Be[a]);return Be[a]}
|
||||||
|
// returns locale data
|
||||||
|
function bb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return xe;if(!c(a)){if(
|
||||||
|
//short-circuit everything else
|
||||||
|
b=Za(a))return b;a=[a]}return Ya(a)}function cb(){return wd(Be)}function db(a){var b,c=a._a;return c&&m(a).overflow===-2&&(b=c[be]<0||c[be]>11?be:c[ce]<1||c[ce]>ea(c[ae],c[be])?ce:c[de]<0||c[de]>24||24===c[de]&&(0!==c[ee]||0!==c[fe]||0!==c[ge])?de:c[ee]<0||c[ee]>59?ee:c[fe]<0||c[fe]>59?fe:c[ge]<0||c[ge]>999?ge:-1,m(a)._overflowDayOfYear&&(b<ae||b>ce)&&(b=ce),m(a)._overflowWeeks&&b===-1&&(b=he),m(a)._overflowWeekday&&b===-1&&(b=ie),m(a).overflow=b),a}
|
||||||
|
// date from iso format
|
||||||
|
function eb(a){var b,c,d,e,f,g,h=a._i,i=De.exec(h)||Ee.exec(h);if(i){for(m(a).iso=!0,b=0,c=Ge.length;b<c;b++)if(Ge[b][1].exec(i[1])){e=Ge[b][0],d=Ge[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=He.length;b<c;b++)if(He[b][1].exec(i[3])){
|
||||||
|
// match[2] should be 'T' or space
|
||||||
|
f=(i[2]||" ")+He[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Fe.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),kb(a)}else a._isValid=!1}
|
||||||
|
// date from iso format or fallback
|
||||||
|
function fb(b){var c=Ie.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(eb(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}
|
||||||
|
// Pick the first defined of two or three arguments.
|
||||||
|
function gb(a,b,c){return null!=a?a:null!=b?b:c}function hb(b){
|
||||||
|
// hooks is actually the exported moment object
|
||||||
|
var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.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 ib(a){var b,c,d,e,f=[];if(!a._d){
|
||||||
|
// 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(d=hb(a),
|
||||||
|
//compute day of the year from weeks and weekdays
|
||||||
|
a._w&&null==a._a[ce]&&null==a._a[be]&&jb(a),
|
||||||
|
//if the day of the year is set, figure out what it is
|
||||||
|
a._dayOfYear&&(e=gb(a._a[ae],d[ae]),a._dayOfYear>pa(e)&&(m(a)._overflowDayOfYear=!0),c=ta(e,0,a._dayOfYear),a._a[be]=c.getUTCMonth(),a._a[ce]=c.getUTCDate()),b=0;b<3&&null==a._a[b];++b)a._a[b]=f[b]=d[b];
|
||||||
|
// Zero out whatever was not defaulted, including time
|
||||||
|
for(;b<7;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];
|
||||||
|
// Check for 24:00:00.000
|
||||||
|
24===a._a[de]&&0===a._a[ee]&&0===a._a[fe]&&0===a._a[ge]&&(a._nextDay=!0,a._a[de]=0),a._d=(a._useUTC?ta:sa).apply(null,f),
|
||||||
|
// Apply timezone offset from input. The actual utcOffset can be changed
|
||||||
|
// with parseZone.
|
||||||
|
null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[de]=24)}}function jb(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=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).
|
||||||
|
c=gb(b.GG,a._a[ae],wa(sb(),1,4).year),d=gb(b.W,1),e=gb(b.E,1),(e<1||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=wa(sb(),f,g);c=gb(b.gg,a._a[ae],j.year),
|
||||||
|
// Default to current week.
|
||||||
|
d=gb(b.w,j.week),null!=b.d?(
|
||||||
|
// weekday -- low day numbers are considered next week
|
||||||
|
e=b.d,(e<0||e>6)&&(i=!0)):null!=b.e?(
|
||||||
|
// local weekday -- counting starts from begining of week
|
||||||
|
e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):
|
||||||
|
// default to begining of week
|
||||||
|
e=f}d<1||d>xa(c,f,g)?m(a)._overflowWeeks=!0:null!=i?m(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[ae]=h.year,a._dayOfYear=h.dayOfYear)}
|
||||||
|
// date from string and format string
|
||||||
|
function kb(b){
|
||||||
|
// TODO: Move this to another part of the creation flow to prevent circular deps
|
||||||
|
if(b._f===a.ISO_8601)return void eb(b);b._a=[],m(b).empty=!0;
|
||||||
|
// This array is used to make a Date, either with `new Date` or `Date.UTC`
|
||||||
|
var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Y(b._f,b._locale).match(Fd)||[],c=0;c<e.length;c++)f=e[c],d=(h.match($(f,b))||[])[0],
|
||||||
|
// console.log('token', token, 'parsedInput', parsedInput,
|
||||||
|
// 'regex', getParseRegexForToken(token, config));
|
||||||
|
d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&m(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),
|
||||||
|
// don't parse if it's not a known token
|
||||||
|
Id[f]?(d?m(b).empty=!1:m(b).unusedTokens.push(f),da(f,d,b)):b._strict&&!d&&m(b).unusedTokens.push(f);
|
||||||
|
// add remaining unparsed input length to the string
|
||||||
|
m(b).charsLeftOver=i-j,h.length>0&&m(b).unusedInput.push(h),
|
||||||
|
// clear _12h flag if hour is <= 12
|
||||||
|
b._a[de]<=12&&m(b).bigHour===!0&&b._a[de]>0&&(m(b).bigHour=void 0),m(b).parsedDateParts=b._a.slice(0),m(b).meridiem=b._meridiem,
|
||||||
|
// handle meridiem
|
||||||
|
b._a[de]=lb(b._locale,b._a[de],b._meridiem),ib(b),db(b)}function lb(a,b,c){var d;
|
||||||
|
// Fallback
|
||||||
|
return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&b<12&&(b+=12),d||12!==b||(b=0),b):b}
|
||||||
|
// date from string and array of format strings
|
||||||
|
function mb(a){var b,c,d,e,f;if(0===a._f.length)return m(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;e<a._f.length;e++)f=0,b=q({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],kb(b),n(b)&&(
|
||||||
|
// if there is any input that was not parsed add a penalty for that format
|
||||||
|
f+=m(b).charsLeftOver,
|
||||||
|
//or tokens
|
||||||
|
f+=10*m(b).unusedTokens.length,m(b).score=f,(null==d||f<d)&&(d=f,c=b));j(a,c||b)}function nb(a){if(!a._d){var b=L(a._i);a._a=h([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),ib(a)}}function ob(a){var b=new r(db(pb(a)));
|
||||||
|
// Adding is smart enough around DST
|
||||||
|
return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function pb(a){var b=a._i,d=a._f;return a._locale=a._locale||bb(a._l),null===b||void 0===d&&""===b?o({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),s(b)?new r(db(b)):(g(b)?a._d=b:c(d)?mb(a):d?kb(a):qb(a),n(a)||(a._d=null),a))}function qb(b){var d=b._i;void 0===d?b._d=new Date(a.now()):g(d)?b._d=new Date(d.valueOf()):"string"==typeof d?fb(b):c(d)?(b._a=h(d.slice(0),function(a){return parseInt(a,10)}),ib(b)):"object"==typeof d?nb(b):f(d)?
|
||||||
|
// from milliseconds
|
||||||
|
b._d=new Date(d):a.createFromInputFallback(b)}function rb(a,b,f,g,h){var i={};
|
||||||
|
// object construction must be done this way.
|
||||||
|
// https://github.com/moment/moment/issues/1423
|
||||||
|
return f!==!0&&f!==!1||(g=f,f=void 0),(d(a)&&e(a)||c(a)&&0===a.length)&&(a=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=h,i._l=f,i._i=a,i._f=b,i._strict=g,ob(i)}function sb(a,b,c,d){return rb(a,b,c,d,!1)}
|
||||||
|
// 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 tb(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return sb();for(d=b[0],e=1;e<b.length;++e)b[e].isValid()&&!b[e][a](d)||(d=b[e]);return d}
|
||||||
|
// TODO: Use [].sort instead?
|
||||||
|
function ub(){var a=[].slice.call(arguments,0);return tb("isBefore",a)}function vb(){var a=[].slice.call(arguments,0);return tb("isAfter",a)}function wb(a){var b=L(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;
|
||||||
|
// representation for dateAddRemove
|
||||||
|
this._milliseconds=+k+1e3*j+// 1000
|
||||||
|
6e4*i+// 1000 * 60
|
||||||
|
1e3*h*60*60,//using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
|
||||||
|
// Because of dateAddRemove treats 24 hours as different from a
|
||||||
|
// day when working around DST, we need to store them separately
|
||||||
|
this._days=+g+7*f,
|
||||||
|
// 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=+e+3*d+12*c,this._data={},this._locale=bb(),this._bubble()}function xb(a){return a instanceof wb}function yb(a){return a<0?Math.round(-1*a)*-1:Math.round(a)}
|
||||||
|
// FORMATTING
|
||||||
|
function zb(a,b){U(a,0,0,function(){var a=this.utcOffset(),c="+";return a<0&&(a=-a,c="-"),c+T(~~(a/60),2)+b+T(~~a%60,2)})}function Ab(a,b){var c=(b||"").match(a);if(null===c)return null;var d=c[c.length-1]||[],e=(d+"").match(Me)||["-",0,0],f=+(60*e[1])+u(e[2]);return 0===f?0:"+"===e[0]?f:-f}
|
||||||
|
// Return a moment from input, that is local/utc/zone equivalent to model.
|
||||||
|
function Bb(b,c){var d,e;
|
||||||
|
// Use low-level api, because this fn is low-level api.
|
||||||
|
return c._isUTC?(d=c.clone(),e=(s(b)||g(b)?b.valueOf():sb(b).valueOf())-d.valueOf(),d._d.setTime(d._d.valueOf()+e),a.updateOffset(d,!1),d):sb(b).local()}function Cb(a){
|
||||||
|
// On Firefox.24 Date#getTimezoneOffset returns a floating point.
|
||||||
|
// https://github.com/moment/moment/pull/1871
|
||||||
|
return 15*-Math.round(a._d.getTimezoneOffset()/15)}
|
||||||
|
// 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 Db(b,c){var d,e=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Ab(Xd,b),null===b)return this}else Math.abs(b)<16&&(b=60*b);return!this._isUTC&&c&&(d=Cb(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?Tb(this,Ob(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?e:Cb(this)}function Eb(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Fb(a){return this.utcOffset(0,a)}function Gb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Cb(this),"m")),this}function Hb(){if(null!=this._tzm)this.utcOffset(this._tzm);else if("string"==typeof this._i){var a=Ab(Wd,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Ib(a){return!!this.isValid()&&(a=a?sb(a).utcOffset():0,(this.utcOffset()-a)%60===0)}function Jb(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Kb(){if(!p(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=pb(a),a._a){var b=a._isUTC?k(a._a):sb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Lb(){return!!this.isValid()&&!this._isUTC}function Mb(){return!!this.isValid()&&this._isUTC}function Nb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ob(a,b){var c,d,e,g=a,
|
||||||
|
// matching against regexp is expensive, do it on demand
|
||||||
|
h=null;// checks for null or undefined
|
||||||
|
return xb(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:f(a)?(g={},b?g[b]=a:g.milliseconds=a):(h=Ne.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:u(h[ce])*c,h:u(h[de])*c,m:u(h[ee])*c,s:u(h[fe])*c,ms:u(yb(1e3*h[ge]))*c}):(h=Oe.exec(a))?(c="-"===h[1]?-1:1,g={y:Pb(h[2],c),M:Pb(h[3],c),w:Pb(h[4],c),d:Pb(h[5],c),h:Pb(h[6],c),m:Pb(h[7],c),s:Pb(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=Rb(sb(g.from),sb(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new wb(g),xb(a)&&i(a,"_locale")&&(d._locale=a._locale),d}function Pb(a,b){
|
||||||
|
// 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 c=a&&parseFloat(a.replace(",","."));
|
||||||
|
// apply sign while we're at it
|
||||||
|
return(isNaN(c)?0:c)*b}function Qb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Rb(a,b){var c;return a.isValid()&&b.isValid()?(b=Bb(b,a),a.isBefore(b)?c=Qb(a,b):(c=Qb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}
|
||||||
|
// TODO: remove 'name' arg after deprecation is removed
|
||||||
|
function Sb(a,b){return function(c,d){var e,f;
|
||||||
|
//invert the arguments, but complain about it
|
||||||
|
return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Ob(c,d),Tb(this,e,a),this}}function Tb(b,c,d,e){var f=c._milliseconds,g=yb(c._days),h=yb(c._months);b.isValid()&&(e=null==e||e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&Q(b,"Date",P(b,"Date")+g*d),h&&ja(b,P(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function Ub(a,b){var c=a.diff(b,"days",!0);return c<-6?"sameElse":c<-1?"lastWeek":c<0?"lastDay":c<1?"sameDay":c<2?"nextDay":c<7?"nextWeek":"sameElse"}function Vb(b,c){
|
||||||
|
// 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 d=b||sb(),e=Bb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,sb(d)))}function Wb(){return new r(this)}function Xb(a,b){var c=s(a)?a:sb(a);return!(!this.isValid()||!c.isValid())&&(b=K(p(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()<this.clone().startOf(b).valueOf())}function Yb(a,b){var c=s(a)?a:sb(a);return!(!this.isValid()||!c.isValid())&&(b=K(p(b)?"millisecond":b),"millisecond"===b?this.valueOf()<c.valueOf():this.clone().endOf(b).valueOf()<c.valueOf())}function Zb(a,b,c,d){return d=d||"()",("("===d[0]?this.isAfter(a,c):!this.isBefore(a,c))&&(")"===d[1]?this.isBefore(b,c):!this.isAfter(b,c))}function $b(a,b){var c,d=s(a)?a:sb(a);return!(!this.isValid()||!d.isValid())&&(b=K(b||"millisecond"),"millisecond"===b?this.valueOf()===d.valueOf():(c=d.valueOf(),this.clone().startOf(b).valueOf()<=c&&c<=this.clone().endOf(b).valueOf()))}function _b(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function ac(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function bc(a,b,c){var d,e,f,g;// 1000
|
||||||
|
// 1000 * 60
|
||||||
|
// 1000 * 60 * 60
|
||||||
|
// 1000 * 60 * 60 * 24, negate dst
|
||||||
|
// 1000 * 60 * 60 * 24 * 7, negate dst
|
||||||
|
return this.isValid()?(d=Bb(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=cc(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:t(g)):NaN):NaN}function cc(a,b){
|
||||||
|
// difference in months
|
||||||
|
var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),
|
||||||
|
// b is in (anchor - 1 month, anchor + 1 month)
|
||||||
|
f=a.clone().add(e,"months");
|
||||||
|
//check for negative zero, return zero if negative zero
|
||||||
|
// linear across the month
|
||||||
|
// linear across the month
|
||||||
|
return b-f<0?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)||0}function dc(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ec(){var a=this.clone().utc();return 0<a.year()&&a.year()<=9999?z(Date.prototype.toISOString)?this.toDate().toISOString():X(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):X(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}/**
|
||||||
|
* Return a human readable representation of a moment that can
|
||||||
|
* also be evaluated to get a new moment which is the same
|
||||||
|
*
|
||||||
|
* @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
|
||||||
|
*/
|
||||||
|
function fc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var a="moment",b="";this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",b="Z");var c="["+a+'("]',d=0<this.year()&&this.year()<=9999?"YYYY":"YYYYYY",e="-MM-DD[T]HH:mm:ss.SSS",f=b+'[")]';return this.format(c+d+e+f)}function gc(b){b||(b=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var c=X(this,b);return this.localeData().postformat(c)}function hc(a,b){return this.isValid()&&(s(a)&&a.isValid()||sb(a).isValid())?Ob({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function ic(a){return this.from(sb(),a)}function jc(a,b){return this.isValid()&&(s(a)&&a.isValid()||sb(a).isValid())?Ob({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function kc(a){return this.to(sb(),a)}
|
||||||
|
// If passed a locale key, it will set the locale for this
|
||||||
|
// instance. Otherwise, it will return the locale configuration
|
||||||
|
// variables for this instance.
|
||||||
|
function lc(a){var b;return void 0===a?this._locale._abbr:(b=bb(a),null!=b&&(this._locale=b),this)}function mc(){return this._locale}function nc(a){
|
||||||
|
// the following switch intentionally omits break keywords
|
||||||
|
// to utilize falling through the cases.
|
||||||
|
switch(a=K(a)){case"year":this.month(0);/* falls through */
|
||||||
|
case"quarter":case"month":this.date(1);/* falls through */
|
||||||
|
case"week":case"isoWeek":case"day":case"date":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
|
||||||
|
// quarters are also special
|
||||||
|
return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function oc(a){
|
||||||
|
// 'date' is an alias for 'day', so it should be considered as such.
|
||||||
|
return a=K(a),void 0===a||"millisecond"===a?this:("date"===a&&(a="day"),this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms"))}function pc(){return this._d.valueOf()-6e4*(this._offset||0)}function qc(){return Math.floor(this.valueOf()/1e3)}function rc(){return new Date(this.valueOf())}function sc(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function tc(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a.milliseconds()}}function uc(){
|
||||||
|
// new Date(NaN).toJSON() === null
|
||||||
|
return this.isValid()?this.toISOString():null}function vc(){return n(this)}function wc(){return j({},m(this))}function xc(){return m(this).overflow}function yc(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function zc(a,b){U(0,[a,a.length],0,b)}
|
||||||
|
// MOMENTS
|
||||||
|
function Ac(a){return Ec.call(this,a,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Bc(a){return Ec.call(this,a,this.isoWeek(),this.isoWeekday(),1,4)}function Cc(){return xa(this.year(),1,4)}function Dc(){var a=this.localeData()._week;return xa(this.year(),a.dow,a.doy)}function Ec(a,b,c,d,e){var f;return null==a?wa(this,d,e).year:(f=xa(a,d,e),b>f&&(b=f),Fc.call(this,a,b,c,d,e))}function Fc(a,b,c,d,e){var f=va(a,b,c,d,e),g=ta(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}
|
||||||
|
// MOMENTS
|
||||||
|
function Gc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}
|
||||||
|
// HELPERS
|
||||||
|
// MOMENTS
|
||||||
|
function Hc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Ic(a,b){b[ge]=u(1e3*("0."+a))}
|
||||||
|
// MOMENTS
|
||||||
|
function Jc(){return this._isUTC?"UTC":""}function Kc(){return this._isUTC?"Coordinated Universal Time":""}function Lc(a){return sb(1e3*a)}function Mc(){return sb.apply(null,arguments).parseZone()}function Nc(a){return a}function Oc(a,b,c,d){var e=bb(),f=k().set(d,b);return e[c](f,a)}function Pc(a,b,c){if(f(a)&&(b=a,a=void 0),a=a||"",null!=b)return Oc(a,b,c,"month");var d,e=[];for(d=0;d<12;d++)e[d]=Oc(a,d,c,"month");return e}
|
||||||
|
// ()
|
||||||
|
// (5)
|
||||||
|
// (fmt, 5)
|
||||||
|
// (fmt)
|
||||||
|
// (true)
|
||||||
|
// (true, 5)
|
||||||
|
// (true, fmt, 5)
|
||||||
|
// (true, fmt)
|
||||||
|
function Qc(a,b,c,d){"boolean"==typeof a?(f(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,f(b)&&(c=b,b=void 0),b=b||"");var e=bb(),g=a?e._week.dow:0;if(null!=c)return Oc(b,(c+g)%7,d,"day");var h,i=[];for(h=0;h<7;h++)i[h]=Oc(b,(h+g)%7,d,"day");return i}function Rc(a,b){return Pc(a,b,"months")}function Sc(a,b){return Pc(a,b,"monthsShort")}function Tc(a,b,c){return Qc(a,b,c,"weekdays")}function Uc(a,b,c){return Qc(a,b,c,"weekdaysShort")}function Vc(a,b,c){return Qc(a,b,c,"weekdaysMin")}function Wc(){var a=this._data;return this._milliseconds=Ze(this._milliseconds),this._days=Ze(this._days),this._months=Ze(this._months),a.milliseconds=Ze(a.milliseconds),a.seconds=Ze(a.seconds),a.minutes=Ze(a.minutes),a.hours=Ze(a.hours),a.months=Ze(a.months),a.years=Ze(a.years),this}function Xc(a,b,c,d){var e=Ob(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}
|
||||||
|
// supports only 2.0-style add(1, 's') or add(duration)
|
||||||
|
function Yc(a,b){return Xc(this,a,b,1)}
|
||||||
|
// supports only 2.0-style subtract(1, 's') or subtract(duration)
|
||||||
|
function Zc(a,b){return Xc(this,a,b,-1)}function $c(a){return a<0?Math.floor(a):Math.ceil(a)}function _c(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;
|
||||||
|
// if we have a mix of positive and negative values, bubble down first
|
||||||
|
// check: https://github.com/moment/moment/issues/2166
|
||||||
|
// The following code bubbles up values, see the tests for
|
||||||
|
// examples of what that means.
|
||||||
|
// convert days to months
|
||||||
|
// 12 months -> 1 year
|
||||||
|
return f>=0&&g>=0&&h>=0||f<=0&&g<=0&&h<=0||(f+=864e5*$c(bd(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(ad(g)),h+=e,g-=$c(bd(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function ad(a){
|
||||||
|
// 400 years have 146097 days (taking into account leap year rules)
|
||||||
|
// 400 years have 12 months === 4800
|
||||||
|
return 4800*a/146097}function bd(a){
|
||||||
|
// the reverse of daysToMonths
|
||||||
|
return 146097*a/4800}function cd(a){var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+ad(b),"month"===a?c:c/12;switch(
|
||||||
|
// handle milliseconds separately because of floating point math errors (issue #1867)
|
||||||
|
b=this._days+Math.round(bd(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;
|
||||||
|
// Math.floor prevents floating point math errors here
|
||||||
|
case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}
|
||||||
|
// TODO: Use this.as('ms')?
|
||||||
|
function dd(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12)}function ed(a){return function(){return this.as(a)}}function fd(a){return a=K(a),this[a+"s"]()}function gd(a){return function(){return this._data[a]}}function hd(){return t(this.days()/7)}
|
||||||
|
// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
|
||||||
|
function id(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function jd(a,b,c){var d=Ob(a).abs(),e=of(d.as("s")),f=of(d.as("m")),g=of(d.as("h")),h=of(d.as("d")),i=of(d.as("M")),j=of(d.as("y")),k=e<pf.s&&["s",e]||f<=1&&["m"]||f<pf.m&&["mm",f]||g<=1&&["h"]||g<pf.h&&["hh",g]||h<=1&&["d"]||h<pf.d&&["dd",h]||i<=1&&["M"]||i<pf.M&&["MM",i]||j<=1&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,id.apply(null,k)}
|
||||||
|
// This function allows you to set the rounding function for relative time strings
|
||||||
|
function kd(a){return void 0===a?of:"function"==typeof a&&(of=a,!0)}
|
||||||
|
// This function allows you to set a threshold for relative time strings
|
||||||
|
function ld(a,b){return void 0!==pf[a]&&(void 0===b?pf[a]:(pf[a]=b,!0))}function md(a){var b=this.localeData(),c=jd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function nd(){
|
||||||
|
// 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 a,b,c,d=qf(this._milliseconds)/1e3,e=qf(this._days),f=qf(this._months);
|
||||||
|
// 3600 seconds -> 60 minutes -> 1 hour
|
||||||
|
a=t(d/60),b=t(a/60),d%=60,a%=60,
|
||||||
|
// 12 months -> 1 year
|
||||||
|
c=t(f/12),f%=12;
|
||||||
|
// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
|
||||||
|
var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(m<0?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"}var od,pd;pd=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;d<c;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var qd=pd,rd=a.momentProperties=[],sd=!1,td={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var ud;ud=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)i(a,b)&&c.push(b);return c};var vd,wd=ud,xd={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},yd={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"},zd="Invalid date",Ad="%d",Bd=/\d{1,2}/,Cd={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"},Dd={},Ed={},Fd=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Gd=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Hd={},Id={},Jd=/\d/,Kd=/\d\d/,Ld=/\d{3}/,Md=/\d{4}/,Nd=/[+-]?\d{6}/,Od=/\d\d?/,Pd=/\d\d\d\d?/,Qd=/\d\d\d\d\d\d?/,Rd=/\d{1,3}/,Sd=/\d{1,4}/,Td=/[+-]?\d{1,6}/,Ud=/\d+/,Vd=/[+-]?\d+/,Wd=/Z|[+-]\d\d:?\d\d/gi,Xd=/Z|[+-]\d\d(?::?\d\d)?/gi,Yd=/[+-]?\d+(\.\d{1,3})?/,Zd=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,$d={},_d={},ae=0,be=1,ce=2,de=3,ee=4,fe=5,ge=6,he=7,ie=8;vd=Array.prototype.indexOf?Array.prototype.indexOf:function(a){
|
||||||
|
// I know
|
||||||
|
var b;for(b=0;b<this.length;++b)if(this[b]===a)return b;return-1};var je=vd;
|
||||||
|
// FORMATTING
|
||||||
|
U("M",["MM",2],"Mo",function(){return this.month()+1}),U("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),U("MMMM",0,0,function(a){return this.localeData().months(this,a)}),
|
||||||
|
// ALIASES
|
||||||
|
J("month","M"),
|
||||||
|
// PRIORITY
|
||||||
|
M("month",8),
|
||||||
|
// PARSING
|
||||||
|
Z("M",Od),Z("MM",Od,Kd),Z("MMM",function(a,b){return b.monthsShortRegex(a)}),Z("MMMM",function(a,b){return b.monthsRegex(a)}),ba(["M","MM"],function(a,b){b[be]=u(a)-1}),ba(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);
|
||||||
|
// if we didn't find a month name, mark the date as invalid.
|
||||||
|
null!=e?b[be]=e:m(c).invalidMonth=a});
|
||||||
|
// LOCALES
|
||||||
|
var ke=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,le="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),me="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ne=Zd,oe=Zd;
|
||||||
|
// FORMATTING
|
||||||
|
U("Y",0,0,function(){var a=this.year();return a<=9999?""+a:"+"+a}),U(0,["YY",2],0,function(){return this.year()%100}),U(0,["YYYY",4],0,"year"),U(0,["YYYYY",5],0,"year"),U(0,["YYYYYY",6,!0],0,"year"),
|
||||||
|
// ALIASES
|
||||||
|
J("year","y"),
|
||||||
|
// PRIORITIES
|
||||||
|
M("year",1),
|
||||||
|
// PARSING
|
||||||
|
Z("Y",Vd),Z("YY",Od,Kd),Z("YYYY",Sd,Md),Z("YYYYY",Td,Nd),Z("YYYYYY",Td,Nd),ba(["YYYYY","YYYYYY"],ae),ba("YYYY",function(b,c){c[ae]=2===b.length?a.parseTwoDigitYear(b):u(b)}),ba("YY",function(b,c){c[ae]=a.parseTwoDigitYear(b)}),ba("Y",function(a,b){b[ae]=parseInt(a,10)}),
|
||||||
|
// HOOKS
|
||||||
|
a.parseTwoDigitYear=function(a){return u(a)+(u(a)>68?1900:2e3)};
|
||||||
|
// MOMENTS
|
||||||
|
var pe=O("FullYear",!0);
|
||||||
|
// FORMATTING
|
||||||
|
U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"),
|
||||||
|
// ALIASES
|
||||||
|
J("week","w"),J("isoWeek","W"),
|
||||||
|
// PRIORITIES
|
||||||
|
M("week",5),M("isoWeek",5),
|
||||||
|
// PARSING
|
||||||
|
Z("w",Od),Z("ww",Od,Kd),Z("W",Od),Z("WW",Od,Kd),ca(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=u(a)});var qe={dow:0,// Sunday is the first day of the week.
|
||||||
|
doy:6};
|
||||||
|
// FORMATTING
|
||||||
|
U("d",0,"do","day"),U("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),U("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),U("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"),
|
||||||
|
// ALIASES
|
||||||
|
J("day","d"),J("weekday","e"),J("isoWeekday","E"),
|
||||||
|
// PRIORITY
|
||||||
|
M("day",11),M("weekday",11),M("isoWeekday",11),
|
||||||
|
// PARSING
|
||||||
|
Z("d",Od),Z("e",Od),Z("E",Od),Z("dd",function(a,b){return b.weekdaysMinRegex(a)}),Z("ddd",function(a,b){return b.weekdaysShortRegex(a)}),Z("dddd",function(a,b){return b.weekdaysRegex(a)}),ca(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);
|
||||||
|
// if we didn't get a weekday name, mark the date as invalid
|
||||||
|
null!=e?b.d=e:m(c).invalidWeekday=a}),ca(["d","e","E"],function(a,b,c,d){b[d]=u(a)});
|
||||||
|
// LOCALES
|
||||||
|
var re="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),se="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),te="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ue=Zd,ve=Zd,we=Zd;U("H",["HH",2],0,"hour"),U("h",["hh",2],0,Ra),U("k",["kk",2],0,Sa),U("hmm",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)}),U("hmmss",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ta("a",!0),Ta("A",!1),
|
||||||
|
// ALIASES
|
||||||
|
J("hour","h"),
|
||||||
|
// PRIORITY
|
||||||
|
M("hour",13),Z("a",Ua),Z("A",Ua),Z("H",Od),Z("h",Od),Z("HH",Od,Kd),Z("hh",Od,Kd),Z("hmm",Pd),Z("hmmss",Qd),Z("Hmm",Pd),Z("Hmmss",Qd),ba(["H","HH"],de),ba(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),ba(["h","hh"],function(a,b,c){b[de]=u(a),m(c).bigHour=!0}),ba("hmm",function(a,b,c){var d=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d)),m(c).bigHour=!0}),ba("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d,2)),b[fe]=u(a.substr(e)),m(c).bigHour=!0}),ba("Hmm",function(a,b,c){var d=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d))}),ba("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d,2)),b[fe]=u(a.substr(e))});var xe,ye=/[ap]\.?m?\.?/i,ze=O("Hours",!0),Ae={calendar:xd,longDateFormat:yd,invalidDate:zd,ordinal:Ad,ordinalParse:Bd,relativeTime:Cd,months:le,monthsShort:me,week:qe,weekdays:re,weekdaysMin:te,weekdaysShort:se,meridiemParse:ye},Be={},Ce={},De=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ee=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Fe=/Z|[+-]\d\d(?::?\d\d)?/,Ge=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],
|
||||||
|
// YYYYMM is NOT allowed by the standard
|
||||||
|
["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],He=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ie=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=x("value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),
|
||||||
|
// constant that refers to the ISO standard
|
||||||
|
a.ISO_8601=function(){};var Je=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=sb.apply(null,arguments);return this.isValid()&&a.isValid()?a<this?this:a:o()}),Ke=x("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=sb.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:o()}),Le=function(){return Date.now?Date.now():+new Date};zb("Z",":"),zb("ZZ",""),
|
||||||
|
// PARSING
|
||||||
|
Z("Z",Xd),Z("ZZ",Xd),ba(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ab(Xd,a)});
|
||||||
|
// HELPERS
|
||||||
|
// timezone chunker
|
||||||
|
// '+10:00' > ['10', '00']
|
||||||
|
// '-1530' > ['-15', '30']
|
||||||
|
var Me=/([\+\-]|\d\d)/gi;
|
||||||
|
// HOOKS
|
||||||
|
// This function will be called whenever a moment is mutated.
|
||||||
|
// It is intended to keep the offset in sync with the timezone.
|
||||||
|
a.updateOffset=function(){};
|
||||||
|
// ASP.NET json date format regex
|
||||||
|
var Ne=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Oe=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ob.fn=wb.prototype;var Pe=Sb(1,"add"),Qe=Sb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Re=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});
|
||||||
|
// FORMATTING
|
||||||
|
U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),zc("gggg","weekYear"),zc("ggggg","weekYear"),zc("GGGG","isoWeekYear"),zc("GGGGG","isoWeekYear"),
|
||||||
|
// ALIASES
|
||||||
|
J("weekYear","gg"),J("isoWeekYear","GG"),
|
||||||
|
// PRIORITY
|
||||||
|
M("weekYear",1),M("isoWeekYear",1),
|
||||||
|
// PARSING
|
||||||
|
Z("G",Vd),Z("g",Vd),Z("GG",Od,Kd),Z("gg",Od,Kd),Z("GGGG",Sd,Md),Z("gggg",Sd,Md),Z("GGGGG",Td,Nd),Z("ggggg",Td,Nd),ca(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=u(a)}),ca(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),
|
||||||
|
// FORMATTING
|
||||||
|
U("Q",0,"Qo","quarter"),
|
||||||
|
// ALIASES
|
||||||
|
J("quarter","Q"),
|
||||||
|
// PRIORITY
|
||||||
|
M("quarter",7),
|
||||||
|
// PARSING
|
||||||
|
Z("Q",Jd),ba("Q",function(a,b){b[be]=3*(u(a)-1)}),
|
||||||
|
// FORMATTING
|
||||||
|
U("D",["DD",2],"Do","date"),
|
||||||
|
// ALIASES
|
||||||
|
J("date","D"),
|
||||||
|
// PRIOROITY
|
||||||
|
M("date",9),
|
||||||
|
// PARSING
|
||||||
|
Z("D",Od),Z("DD",Od,Kd),Z("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),ba(["D","DD"],ce),ba("Do",function(a,b){b[ce]=u(a.match(Od)[0],10)});
|
||||||
|
// MOMENTS
|
||||||
|
var Se=O("Date",!0);
|
||||||
|
// FORMATTING
|
||||||
|
U("DDD",["DDDD",3],"DDDo","dayOfYear"),
|
||||||
|
// ALIASES
|
||||||
|
J("dayOfYear","DDD"),
|
||||||
|
// PRIORITY
|
||||||
|
M("dayOfYear",4),
|
||||||
|
// PARSING
|
||||||
|
Z("DDD",Rd),Z("DDDD",Ld),ba(["DDD","DDDD"],function(a,b,c){c._dayOfYear=u(a)}),
|
||||||
|
// FORMATTING
|
||||||
|
U("m",["mm",2],0,"minute"),
|
||||||
|
// ALIASES
|
||||||
|
J("minute","m"),
|
||||||
|
// PRIORITY
|
||||||
|
M("minute",14),
|
||||||
|
// PARSING
|
||||||
|
Z("m",Od),Z("mm",Od,Kd),ba(["m","mm"],ee);
|
||||||
|
// MOMENTS
|
||||||
|
var Te=O("Minutes",!1);
|
||||||
|
// FORMATTING
|
||||||
|
U("s",["ss",2],0,"second"),
|
||||||
|
// ALIASES
|
||||||
|
J("second","s"),
|
||||||
|
// PRIORITY
|
||||||
|
M("second",15),
|
||||||
|
// PARSING
|
||||||
|
Z("s",Od),Z("ss",Od,Kd),ba(["s","ss"],fe);
|
||||||
|
// MOMENTS
|
||||||
|
var Ue=O("Seconds",!1);
|
||||||
|
// FORMATTING
|
||||||
|
U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),
|
||||||
|
// ALIASES
|
||||||
|
J("millisecond","ms"),
|
||||||
|
// PRIORITY
|
||||||
|
M("millisecond",16),
|
||||||
|
// PARSING
|
||||||
|
Z("S",Rd,Jd),Z("SS",Rd,Kd),Z("SSS",Rd,Ld);var Ve;for(Ve="SSSS";Ve.length<=9;Ve+="S")Z(Ve,Ud);for(Ve="S";Ve.length<=9;Ve+="S")ba(Ve,Ic);
|
||||||
|
// MOMENTS
|
||||||
|
var We=O("Milliseconds",!1);
|
||||||
|
// FORMATTING
|
||||||
|
U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var Xe=r.prototype;Xe.add=Pe,Xe.calendar=Vb,Xe.clone=Wb,Xe.diff=bc,Xe.endOf=oc,Xe.format=gc,Xe.from=hc,Xe.fromNow=ic,Xe.to=jc,Xe.toNow=kc,Xe.get=R,Xe.invalidAt=xc,Xe.isAfter=Xb,Xe.isBefore=Yb,Xe.isBetween=Zb,Xe.isSame=$b,Xe.isSameOrAfter=_b,Xe.isSameOrBefore=ac,Xe.isValid=vc,Xe.lang=Re,Xe.locale=lc,Xe.localeData=mc,Xe.max=Ke,Xe.min=Je,Xe.parsingFlags=wc,Xe.set=S,Xe.startOf=nc,Xe.subtract=Qe,Xe.toArray=sc,Xe.toObject=tc,Xe.toDate=rc,Xe.toISOString=ec,Xe.inspect=fc,Xe.toJSON=uc,Xe.toString=dc,Xe.unix=qc,Xe.valueOf=pc,Xe.creationData=yc,
|
||||||
|
// Year
|
||||||
|
Xe.year=pe,Xe.isLeapYear=ra,
|
||||||
|
// Week Year
|
||||||
|
Xe.weekYear=Ac,Xe.isoWeekYear=Bc,
|
||||||
|
// Quarter
|
||||||
|
Xe.quarter=Xe.quarters=Gc,
|
||||||
|
// Month
|
||||||
|
Xe.month=ka,Xe.daysInMonth=la,
|
||||||
|
// Week
|
||||||
|
Xe.week=Xe.weeks=Ba,Xe.isoWeek=Xe.isoWeeks=Ca,Xe.weeksInYear=Dc,Xe.isoWeeksInYear=Cc,
|
||||||
|
// Day
|
||||||
|
Xe.date=Se,Xe.day=Xe.days=Ka,Xe.weekday=La,Xe.isoWeekday=Ma,Xe.dayOfYear=Hc,
|
||||||
|
// Hour
|
||||||
|
Xe.hour=Xe.hours=ze,
|
||||||
|
// Minute
|
||||||
|
Xe.minute=Xe.minutes=Te,
|
||||||
|
// Second
|
||||||
|
Xe.second=Xe.seconds=Ue,
|
||||||
|
// Millisecond
|
||||||
|
Xe.millisecond=Xe.milliseconds=We,
|
||||||
|
// Offset
|
||||||
|
Xe.utcOffset=Db,Xe.utc=Fb,Xe.local=Gb,Xe.parseZone=Hb,Xe.hasAlignedHourOffset=Ib,Xe.isDST=Jb,Xe.isLocal=Lb,Xe.isUtcOffset=Mb,Xe.isUtc=Nb,Xe.isUTC=Nb,
|
||||||
|
// Timezone
|
||||||
|
Xe.zoneAbbr=Jc,Xe.zoneName=Kc,
|
||||||
|
// Deprecations
|
||||||
|
Xe.dates=x("dates accessor is deprecated. Use date instead.",Se),Xe.months=x("months accessor is deprecated. Use month instead",ka),Xe.years=x("years accessor is deprecated. Use year instead",pe),Xe.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Eb),Xe.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Kb);var Ye=C.prototype;Ye.calendar=D,Ye.longDateFormat=E,Ye.invalidDate=F,Ye.ordinal=G,Ye.preparse=Nc,Ye.postformat=Nc,Ye.relativeTime=H,Ye.pastFuture=I,Ye.set=A,
|
||||||
|
// Month
|
||||||
|
Ye.months=fa,Ye.monthsShort=ga,Ye.monthsParse=ia,Ye.monthsRegex=na,Ye.monthsShortRegex=ma,
|
||||||
|
// Week
|
||||||
|
Ye.week=ya,Ye.firstDayOfYear=Aa,Ye.firstDayOfWeek=za,
|
||||||
|
// Day of Week
|
||||||
|
Ye.weekdays=Fa,Ye.weekdaysMin=Ha,Ye.weekdaysShort=Ga,Ye.weekdaysParse=Ja,Ye.weekdaysRegex=Na,Ye.weekdaysShortRegex=Oa,Ye.weekdaysMinRegex=Pa,
|
||||||
|
// Hours
|
||||||
|
Ye.isPM=Va,Ye.meridiem=Wa,$a("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===u(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),
|
||||||
|
// Side effect imports
|
||||||
|
a.lang=x("moment.lang is deprecated. Use moment.locale instead.",$a),a.langData=x("moment.langData is deprecated. Use moment.localeData instead.",bb);var Ze=Math.abs,$e=ed("ms"),_e=ed("s"),af=ed("m"),bf=ed("h"),cf=ed("d"),df=ed("w"),ef=ed("M"),ff=ed("y"),gf=gd("milliseconds"),hf=gd("seconds"),jf=gd("minutes"),kf=gd("hours"),lf=gd("days"),mf=gd("months"),nf=gd("years"),of=Math.round,pf={s:45,// seconds to minute
|
||||||
|
m:45,// minutes to hour
|
||||||
|
h:22,// hours to day
|
||||||
|
d:26,// days to month
|
||||||
|
M:11},qf=Math.abs,rf=wb.prototype;
|
||||||
|
// Deprecations
|
||||||
|
// Side effect imports
|
||||||
|
// FORMATTING
|
||||||
|
// PARSING
|
||||||
|
// Side effect imports
|
||||||
|
return rf.abs=Wc,rf.add=Yc,rf.subtract=Zc,rf.as=cd,rf.asMilliseconds=$e,rf.asSeconds=_e,rf.asMinutes=af,rf.asHours=bf,rf.asDays=cf,rf.asWeeks=df,rf.asMonths=ef,rf.asYears=ff,rf.valueOf=dd,rf._bubble=_c,rf.get=fd,rf.milliseconds=gf,rf.seconds=hf,rf.minutes=jf,rf.hours=kf,rf.days=lf,rf.weeks=hd,rf.months=mf,rf.years=nf,rf.humanize=md,rf.toISOString=nd,rf.toString=nd,rf.toJSON=nd,rf.locale=lc,rf.localeData=mc,rf.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",nd),rf.lang=Re,U("X",0,0,"unix"),U("x",0,0,"valueOf"),Z("x",Vd),Z("X",Yd),ba("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),ba("x",function(a,b,c){c._d=new Date(u(a))}),a.version="2.17.1",b(sb),a.fn=Xe,a.min=ub,a.max=vb,a.now=Le,a.utc=k,a.unix=Lc,a.months=Rc,a.isDate=g,a.locale=$a,a.invalid=o,a.duration=Ob,a.isMoment=s,a.weekdays=Tc,a.parseZone=Mc,a.localeData=bb,a.isDuration=xb,a.monthsShort=Sc,a.weekdaysMin=Vc,a.defineLocale=_a,a.updateLocale=ab,a.locales=cb,a.weekdaysShort=Uc,a.normalizeUnits=K,a.relativeTimeRounding=kd,a.relativeTimeThreshold=ld,a.calendarFormat=Ub,a.prototype=Xe,a});
|
@ -4,13 +4,36 @@
|
|||||||
* and open the template in the editor.
|
* and open the template in the editor.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
var recordingProfiles = null;
|
||||||
|
|
||||||
$( document ).ready(function() {
|
$( document ).ready(function() {
|
||||||
|
initializeToastr();
|
||||||
initializeProgramInfoPopup();
|
initializeProgramInfoPopup();
|
||||||
|
getRecordingProfiles();
|
||||||
getSchedule2(null);
|
getSchedule2(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function initializeToastr(){
|
||||||
|
|
||||||
|
toastr.options = {
|
||||||
|
"closeButton": false,
|
||||||
|
"debug": false,
|
||||||
|
"newestOnTop": false,
|
||||||
|
"progressBar": false,
|
||||||
|
"positionClass": "toast-top-center",
|
||||||
|
"preventDuplicates": false,
|
||||||
|
"onclick": null,
|
||||||
|
"showDuration": "300",
|
||||||
|
"hideDuration": "1000",
|
||||||
|
"timeOut": "5000",
|
||||||
|
"extendedTimeOut": "1000",
|
||||||
|
"showEasing": "swing",
|
||||||
|
"hideEasing": "linear",
|
||||||
|
"showMethod": "fadeIn",
|
||||||
|
"hideMethod": "fadeOut"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function padToTwoDigits(ss){
|
function padToTwoDigits(ss){
|
||||||
ss = ""+ss;
|
ss = ""+ss;
|
||||||
if(ss.length < 2){
|
if(ss.length < 2){
|
||||||
@ -256,6 +279,7 @@ function getProgramDiv(program, requestObject, startAtPercent){
|
|||||||
programDiv.click(function(){
|
programDiv.click(function(){
|
||||||
$("#programInfoTable tr").remove();
|
$("#programInfoTable tr").remove();
|
||||||
$(".recordSingleDiv, .recordMultiDiv").remove();
|
$(".recordSingleDiv, .recordMultiDiv").remove();
|
||||||
|
$("#recordOptionsDiv").remove();
|
||||||
var obj = $(this).data("programObj");
|
var obj = $(this).data("programObj");
|
||||||
$("#programInfoTable").data("programObj",obj);
|
$("#programInfoTable").data("programObj",obj);
|
||||||
$("#programInfoTable").append($("<tr></tr>").addClass("programTitle").append($("<td></td>").html(obj.title)));
|
$("#programInfoTable").append($("<tr></tr>").addClass("programTitle").append($("<td></td>").html(obj.title)));
|
||||||
@ -269,17 +293,146 @@ function getProgramDiv(program, requestObject, startAtPercent){
|
|||||||
|
|
||||||
$("#programInfo").dialog("open");
|
$("#programInfo").dialog("open");
|
||||||
var recordSingleDiv = $("<div></div>").attr("class","recordSingleDiv");
|
var recordSingleDiv = $("<div></div>").attr("class","recordSingleDiv");
|
||||||
|
$("#programInfo").append(recordSingleDiv);
|
||||||
recordSingleDiv.click(function(){
|
recordSingleDiv.click(function(){
|
||||||
var programToRecord = $("#programInfoTable").data("programObj");
|
var programToRecord = $("#programInfoTable").data("programObj");
|
||||||
var recordingScheduleObject = {"profileNo":"1","title": programToRecord.title,"channelName": programToRecord.channelName,"priority": "9999999","startDateEpochSeconds" : programToRecord.start.epochSecond , "endDateEpochSeconds" : programToRecord.stop.epochSecond};
|
var recordingScheduleObject = {"profileNo":"1","title": programToRecord.title,"channelName": programToRecord.channelName,"priority": "9999999","startDateEpochSeconds" : programToRecord.start.epochSecond , "endDateEpochSeconds" : programToRecord.stop.epochSecond};
|
||||||
scheduleRecording(recordingScheduleObject);
|
$(".recordMultiDiv").css("background-color","transparent");
|
||||||
|
$(this).css("background-color","#eaedf2");
|
||||||
|
$(".multiScheduleOption").hide();
|
||||||
|
$(".singleScheduleOption").show();
|
||||||
|
$("#recordOptionsDiv").slideDown();
|
||||||
});
|
});
|
||||||
$("#programInfo").append(recordSingleDiv);
|
var recordMultiDiv = $("<div></div>").addClass("recordMultiDiv");
|
||||||
$("#programInfo").append($("<div></div>").attr("class","recordMultiDiv"));
|
$("#programInfo").append(recordMultiDiv);
|
||||||
|
recordMultiDiv.click(function(){
|
||||||
|
var programToRecord = $("#programInfoTable").data("programObj");
|
||||||
|
$(".recordSingleDiv").css("background-color","transparent");
|
||||||
|
$(this).css("background-color","#eaedf2");
|
||||||
|
$(".singleScheduleOption").hide();
|
||||||
|
$(".multiScheduleOption").show();
|
||||||
|
$("#recordOptionsDiv").slideDown();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#programInfo").append(getRecordOptionsDiv(program));
|
||||||
});
|
});
|
||||||
return programDiv;
|
return programDiv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getRecordOptionsDiv(program){
|
||||||
|
var recordOptionsDiv = $("<div></div>").attr("id","recordOptionsDiv").css("display","none").css("width","100%");
|
||||||
|
var recordOptionsTable = $("<table width='100%'></table>");
|
||||||
|
var recordProfileSelectBox = $("<select id='profileSelectBox'></select>");
|
||||||
|
for(var idx in recordingProfiles){
|
||||||
|
var recordingProfile = recordingProfiles[idx];
|
||||||
|
recordProfileSelectBox.append($("<option value='"+recordingProfile.profileId+"'>"+recordingProfile.name+"</option>"));
|
||||||
|
}
|
||||||
|
recordOptionsTable.append($("<tr></tr>").append($("<td>Profile: </td>")).append($("<td></td>").append(recordProfileSelectBox)).addClass("multiScheduleOption").addClass("singleScheduleOption"));
|
||||||
|
recordOptionsTable.append($("<tr><td>Priority:</td><td><input type='text' id='recordingPriorityText' value='99999'/></td></tr>").addClass("multiScheduleOption").addClass("singleScheduleOption"));
|
||||||
|
recordOptionsTable.append($("<tr><td>Channel:</td><td><input type='text' id='recordingChannelText' value='"+program.channelName+"'/></td></tr>").addClass("multiScheduleOption"));
|
||||||
|
var startTimeTextBox = $("<input size=8 type='text' id='startTimeText'/>").addClass("multiScheduleOption");
|
||||||
|
var endTimeTextBox = $("<input size=8 type='text' id='endTimeText'/>").addClass("multiScheduleOption");
|
||||||
|
recordOptionsTable.append($("<tr><td>Between Hours:</td></tr>").append($("<td></td>").append(startTimeTextBox).append(" and ").append(endTimeTextBox)).addClass("multiScheduleOption"));
|
||||||
|
var effectiveBeginTextBox = $("<input size=20 type='text' id='effectiveBeginText'/>")
|
||||||
|
recordOptionsTable.append($("<tr><td>Effective Begin:</td></tr>").append($("<td></td>").append(effectiveBeginTextBox)).addClass("multiScheduleOption"));
|
||||||
|
var effectiveEndTextBox = $("<input size=20 type='text' id='effectiveEndText'/>")
|
||||||
|
recordOptionsTable.append($("<tr><td>Effective End:</td></tr>").append($("<td></td>").append(effectiveEndTextBox)).addClass("multiScheduleOption"));
|
||||||
|
|
||||||
|
var scheduleButton = $("<button id='scheduleRecordingButton' class='ui-button ui-widget ui-corner-all'>Schedule</button>");
|
||||||
|
recordOptionsTable.append($("<tr></tr>").append($("<td></td>").attr("colspan","2").attr("align","right").append(scheduleButton)));
|
||||||
|
scheduleButton.click(function(){
|
||||||
|
var advancedRecord = $("#effectiveBeginText").is(":visible");
|
||||||
|
var programToRecord = $("#programInfoTable").data("programObj");
|
||||||
|
|
||||||
|
//looking for a return of false.. meaning no errors
|
||||||
|
if(!validateProgramRecordDialog(advancedRecord)){
|
||||||
|
if(advancedRecord){
|
||||||
|
scheduleAdvancedRecord(programToRecord);
|
||||||
|
}else{
|
||||||
|
scheduleSimpleRecord(programToRecord);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
startTimeTextBox.timepicker();
|
||||||
|
endTimeTextBox.timepicker();
|
||||||
|
effectiveBeginTextBox.datetimepicker();
|
||||||
|
effectiveEndTextBox.datetimepicker();
|
||||||
|
recordOptionsDiv.append(recordOptionsTable);
|
||||||
|
return recordOptionsDiv;
|
||||||
|
}
|
||||||
|
|
||||||
|
function scheduleSimpleRecord(programToRecord){
|
||||||
|
var priority = $("#recordingPriorityText").val();
|
||||||
|
if(isEmpty(priority))priority = "5";
|
||||||
|
|
||||||
|
var profile = $("#profileSelectBox").val();
|
||||||
|
if(isEmpty(profile))profile = "1";
|
||||||
|
|
||||||
|
var recordingScheduleObject = {"profileNo":profile,"title": programToRecord.title,"channelName": programToRecord.channelName,"priority": priority,"startDateEpochSeconds" : programToRecord.start.epochSecond , "endDateEpochSeconds" : programToRecord.stop.epochSecond};
|
||||||
|
scheduleRecording(recordingScheduleObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
function scheduleAdvancedRecord(programToRecord){
|
||||||
|
var priority = $("#recordingPriorityText").val();
|
||||||
|
if(isEmpty(priority))priority = "5";
|
||||||
|
|
||||||
|
var profile = $("#profileSelectBox").val();
|
||||||
|
if(isEmpty(profile))profile = "1";
|
||||||
|
|
||||||
|
var channel = $("#recordingChannelText").val();
|
||||||
|
if(isEmpty(channel))channel = null;
|
||||||
|
|
||||||
|
var effectiveBeginText = $("#effectiveBeginText").val();
|
||||||
|
var effectiveBeginTimestamp = moment(effectiveBeginText,["MM/DD/YYYY hh:mm"]).unix();
|
||||||
|
if(isNaN(effectiveBeginTimestamp) || isEmpty(effectiveBeginText)){
|
||||||
|
effectiveBeginTimestamp = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var effectiveEndText = $("#effectiveEndText").val();
|
||||||
|
var effectiveEndTimestamp = moment(effectiveEndText,["MM/DD/YYYY hh:mm"]).unix();
|
||||||
|
if(isNaN(effectiveEndTimestamp) || isEmpty(effectiveEndText)){
|
||||||
|
effectiveEndTimestamp = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var startTime = $("#startTimeText").val();
|
||||||
|
if(isEmpty(startTime)){
|
||||||
|
startTime = null;
|
||||||
|
}
|
||||||
|
var stopTime = $("#endTimeText").val();
|
||||||
|
if(isEmpty(stopTime)){
|
||||||
|
stopTime = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var recordingScheduleObject = {"profileNo":profile,"title": programToRecord.title,"channelName": channel,"priority": priority,"startDateEpochSeconds" : effectiveBeginTimestamp , "endDateEpochSeconds" : effectiveEndTimestamp, "startTime":startTime,"stopTime":stopTime};
|
||||||
|
scheduleRecording(recordingScheduleObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateProgramRecordDialog(advancedRecordMode){
|
||||||
|
$("#recordOptionsDiv input").removeClass("entryError");
|
||||||
|
$("#recordOptionsDiv select").removeClass("entryError");
|
||||||
|
var error = false;
|
||||||
|
if(advancedRecordMode){
|
||||||
|
var effectiveBeginText = $("#effectiveBeginText").val();
|
||||||
|
var effectiveBeginTimestamp = moment(effectiveBeginText,["MM/DD/YYYY hh:mm"]).unix();
|
||||||
|
var effectiveEndText = $("#effectiveEndText").val();
|
||||||
|
var effectiveEndTimestamp = moment(effectiveEndText,["MM/DD/YYYY hh:mm"]).unix();
|
||||||
|
|
||||||
|
if(isNaN(effectiveBeginTimestamp) && !isNull(effectiveBeginText)){
|
||||||
|
toastr["error"]("Effective Begin entry is not valid!");
|
||||||
|
$("#effectiveBeginText").addClass("entryError");
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
if(isNaN(effectiveEndTimestamp) && !isNull(effectiveEndText)){
|
||||||
|
toastr["error"]("Effective End entry is not valid!");
|
||||||
|
$("#effectiveEndText").addClass("entryError");
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
function scheduleRecording(recordingDetails){
|
function scheduleRecording(recordingDetails){
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: 'rest/recordSingleInstanceOfProgram',
|
url: 'rest/recordSingleInstanceOfProgram',
|
||||||
@ -287,7 +440,23 @@ function scheduleRecording(recordingDetails){
|
|||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
data: JSON.stringify(recordingDetails),
|
data: JSON.stringify(recordingDetails),
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
alert("scheduled!");
|
$("#recordOptionsDiv").hide();
|
||||||
|
toastr["success"]("Recording Scheduled!");
|
||||||
|
},
|
||||||
|
error: function ( jqXHR, textStatus, errorThrown ){
|
||||||
|
toastr["error"]("An error occurred while scheduling the recording!");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRecordingProfiles(){
|
||||||
|
$.ajax({
|
||||||
|
url: 'rest/getRecordingProfiles',
|
||||||
|
type: 'post',
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (data) {
|
||||||
|
recordingProfiles = data;
|
||||||
},
|
},
|
||||||
error: function ( jqXHR, textStatus, errorThrown ){
|
error: function ( jqXHR, textStatus, errorThrown ){
|
||||||
alert(errorThrown);
|
alert(errorThrown);
|
||||||
@ -296,6 +465,12 @@ function scheduleRecording(recordingDetails){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isEmpty(item){
|
||||||
|
if(isNull(item))return true;
|
||||||
|
if("" === $.trim(item))return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function isNull(item){
|
function isNull(item){
|
||||||
if(item === null || typeof item === "undefined"){
|
if(item === null || typeof item === "undefined"){
|
||||||
return true;
|
return true;
|
||||||
@ -322,7 +497,8 @@ function initializeProgramInfoPopup(){
|
|||||||
|
|
||||||
$("#programInfo").dialog({
|
$("#programInfo").dialog({
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
dialogClass: 'noTitleStuff2',
|
dialogClass: 'noTitleStuff2 fixed-dialog',
|
||||||
width: "600"
|
width: "600",
|
||||||
|
position: {"my": "center center", "at": "center top+15%", "of": "body"}
|
||||||
});
|
});
|
||||||
}
|
}
|
5
src/main/webapp/js/timepicker/jquery-ui-timepicker-addon.min.css
vendored
Normal file
5
src/main/webapp/js/timepicker/jquery-ui-timepicker-addon.min.css
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
/*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20
|
||||||
|
* http://trentrichardson.com/examples/timepicker
|
||||||
|
* Copyright (c) 2016 Trent Richardson; Licensed MIT */
|
||||||
|
|
||||||
|
.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{float:left;clear:left;padding:0 0 0 5px}.ui-timepicker-div dl dd{margin:0 10px 10px 40%}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:0 0;border:0;margin:0;padding:0}.ui-timepicker-div .ui_tpicker_unit_hide{display:none}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input{background:0 0;color:inherit;border:0;outline:0;border-bottom:solid 1px #555;width:95%}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus{border-bottom-color:#aaa}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right;padding:0 5px 0 0}.ui-timepicker-rtl dl dt{float:right;clear:right}.ui-timepicker-rtl dl dd{margin:0 40% 10px 10px}.ui-timepicker-div.ui-timepicker-oneLine{padding-right:2px}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,.ui-timepicker-div.ui-timepicker-oneLine dt{display:none}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label{display:block;padding-top:2px}.ui-timepicker-div.ui-timepicker-oneLine dl{text-align:right}.ui-timepicker-div.ui-timepicker-oneLine dl dd,.ui-timepicker-div.ui-timepicker-oneLine dl dd>div{display:inline-block;margin:0}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before{content:':';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before{content:'.';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{display:none}
|
5
src/main/webapp/js/timepicker/jquery-ui-timepicker-addon.min.js
vendored
Normal file
5
src/main/webapp/js/timepicker/jquery-ui-timepicker-addon.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/main/webapp/js/toastr/toastr.min.css
vendored
Normal file
1
src/main/webapp/js/toastr/toastr.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
7
src/main/webapp/js/toastr/toastr.min.js
vendored
Normal file
7
src/main/webapp/js/toastr/toastr.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user