Update 3rd Party Libraries
Json.NET, jQuery, jQuery UI, modernizr, moment.js, Highcharts, TinyMCE, normalize.css, T4MVC, RazorGenerator, Reactive Extensions
This commit is contained in:
1 parent
7af6a2220c
commit
be25569245
168 files changed
+49266
-39369
No files matched your search
File renamed without changes.
+3914
-3553
File diff suppressed because it is too large.
Load diff
+6914
-6877
File diff suppressed because it is too large.
Load diff
+242
-229
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Modernizr v2.6.2
|
||||
* Modernizr v2.7.2
|
||||
* www.modernizr.com
|
||||
*
|
||||
* Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
window.Modernizr = (function( window, document, undefined ) {
|
||||
|
||||
var version = '2.6.2',
|
||||
var version = '2.7.2',
|
||||
|
||||
Modernizr = {},
|
||||
|
||||
@@ -605,7 +605,7 @@ window.Modernizr = (function( window, document, undefined ) {
|
||||
|
||||
// Note, Android < 4 will pass this test, but can only animate
|
||||
// a single property at a time
|
||||
// daneden.me/2011/12/putting-up-with-androids-bullshit/
|
||||
// goo.gl/v3V4Gp
|
||||
tests['cssanimations'] = function() {
|
||||
return testPropsAll('animationName');
|
||||
};
|
||||
@@ -1004,35 +1004,40 @@ window.Modernizr = (function( window, document, undefined ) {
|
||||
modElem = inputElem = null;
|
||||
|
||||
/*>>shiv*/
|
||||
/*! HTML5 Shiv v3.6.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */
|
||||
/**
|
||||
* @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
*/
|
||||
;(function(window, document) {
|
||||
/*jshint evil:true */
|
||||
/** Preset options */
|
||||
var options = window.html5 || {};
|
||||
/*jshint evil:true */
|
||||
/** version */
|
||||
var version = '3.7.0';
|
||||
|
||||
/** Used to skip problem elements */
|
||||
var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
|
||||
/** Preset options */
|
||||
var options = window.html5 || {};
|
||||
|
||||
/** Not all elements can be cloned in IE **/
|
||||
var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
|
||||
/** Used to skip problem elements */
|
||||
var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
|
||||
|
||||
/** Detect whether the browser supports default html5 styles */
|
||||
var supportsHtml5Styles;
|
||||
/** Not all elements can be cloned in IE **/
|
||||
var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
|
||||
|
||||
/** Name of the expando, to work with multiple documents or to re-shiv one document */
|
||||
var expando = '_html5shiv';
|
||||
/** Detect whether the browser supports default html5 styles */
|
||||
var supportsHtml5Styles;
|
||||
|
||||
/** The id for the the documents expando */
|
||||
var expanID = 0;
|
||||
/** Name of the expando, to work with multiple documents or to re-shiv one document */
|
||||
var expando = '_html5shiv';
|
||||
|
||||
/** Cached data for each document */
|
||||
var expandoData = {};
|
||||
/** The id for the the documents expando */
|
||||
var expanID = 0;
|
||||
|
||||
/** Detect whether the browser supports unknown elements */
|
||||
var supportsUnknownElements;
|
||||
/** Cached data for each document */
|
||||
var expandoData = {};
|
||||
|
||||
(function() {
|
||||
try {
|
||||
/** Detect whether the browser supports unknown elements */
|
||||
var supportsUnknownElements;
|
||||
|
||||
(function() {
|
||||
try {
|
||||
var a = document.createElement('a');
|
||||
a.innerHTML = '<xyz></xyz>';
|
||||
//if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
|
||||
@@ -1048,248 +1053,256 @@ window.Modernizr = (function( window, document, undefined ) {
|
||||
typeof frag.createElement == 'undefined'
|
||||
);
|
||||
}());
|
||||
} catch(e) {
|
||||
supportsHtml5Styles = true;
|
||||
supportsUnknownElements = true;
|
||||
}
|
||||
} catch(e) {
|
||||
// assign a false positive if detection fails => unable to shiv
|
||||
supportsHtml5Styles = true;
|
||||
supportsUnknownElements = true;
|
||||
}
|
||||
|
||||
}());
|
||||
}());
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* Creates a style sheet with the given CSS text and adds it to the document.
|
||||
* @private
|
||||
* @param {Document} ownerDocument The document.
|
||||
* @param {String} cssText The CSS text.
|
||||
* @returns {StyleSheet} The style element.
|
||||
*/
|
||||
function addStyleSheet(ownerDocument, cssText) {
|
||||
var p = ownerDocument.createElement('p'),
|
||||
parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
|
||||
|
||||
p.innerHTML = 'x<style>' + cssText + '</style>';
|
||||
return parent.insertBefore(p.lastChild, parent.firstChild);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of `html5.elements` as an array.
|
||||
* @private
|
||||
* @returns {Array} An array of shived element node names.
|
||||
*/
|
||||
function getElements() {
|
||||
var elements = html5.elements;
|
||||
return typeof elements == 'string' ? elements.split(' ') : elements;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* Returns the data associated to the given document
|
||||
* @private
|
||||
* @param {Document} ownerDocument The document.
|
||||
* @returns {Object} An object of data.
|
||||
*/
|
||||
function getExpandoData(ownerDocument) {
|
||||
var data = expandoData[ownerDocument[expando]];
|
||||
if (!data) {
|
||||
* Creates a style sheet with the given CSS text and adds it to the document.
|
||||
* @private
|
||||
* @param {Document} ownerDocument The document.
|
||||
* @param {String} cssText The CSS text.
|
||||
* @returns {StyleSheet} The style element.
|
||||
*/
|
||||
function addStyleSheet(ownerDocument, cssText) {
|
||||
var p = ownerDocument.createElement('p'),
|
||||
parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
|
||||
|
||||
p.innerHTML = 'x<style>' + cssText + '</style>';
|
||||
return parent.insertBefore(p.lastChild, parent.firstChild);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of `html5.elements` as an array.
|
||||
* @private
|
||||
* @returns {Array} An array of shived element node names.
|
||||
*/
|
||||
function getElements() {
|
||||
var elements = html5.elements;
|
||||
return typeof elements == 'string' ? elements.split(' ') : elements;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data associated to the given document
|
||||
* @private
|
||||
* @param {Document} ownerDocument The document.
|
||||
* @returns {Object} An object of data.
|
||||
*/
|
||||
function getExpandoData(ownerDocument) {
|
||||
var data = expandoData[ownerDocument[expando]];
|
||||
if (!data) {
|
||||
data = {};
|
||||
expanID++;
|
||||
ownerDocument[expando] = expanID;
|
||||
expandoData[expanID] = data;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a shived element for the given nodeName and document
|
||||
* @memberOf html5
|
||||
* @param {String} nodeName name of the element
|
||||
* @param {Document} ownerDocument The context document.
|
||||
* @returns {Object} The shived element.
|
||||
*/
|
||||
function createElement(nodeName, ownerDocument, data){
|
||||
if (!ownerDocument) {
|
||||
/**
|
||||
* returns a shived element for the given nodeName and document
|
||||
* @memberOf html5
|
||||
* @param {String} nodeName name of the element
|
||||
* @param {Document} ownerDocument The context document.
|
||||
* @returns {Object} The shived element.
|
||||
*/
|
||||
function createElement(nodeName, ownerDocument, data){
|
||||
if (!ownerDocument) {
|
||||
ownerDocument = document;
|
||||
}
|
||||
if(supportsUnknownElements){
|
||||
}
|
||||
if(supportsUnknownElements){
|
||||
return ownerDocument.createElement(nodeName);
|
||||
}
|
||||
if (!data) {
|
||||
}
|
||||
if (!data) {
|
||||
data = getExpandoData(ownerDocument);
|
||||
}
|
||||
var node;
|
||||
}
|
||||
var node;
|
||||
|
||||
if (data.cache[nodeName]) {
|
||||
if (data.cache[nodeName]) {
|
||||
node = data.cache[nodeName].cloneNode();
|
||||
} else if (saveClones.test(nodeName)) {
|
||||
} else if (saveClones.test(nodeName)) {
|
||||
node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
|
||||
} else {
|
||||
} else {
|
||||
node = data.createElem(nodeName);
|
||||
}
|
||||
|
||||
// Avoid adding some elements to fragments in IE < 9 because
|
||||
// * Attributes like `name` or `type` cannot be set/changed once an element
|
||||
// is inserted into a document/fragment
|
||||
// * Link elements with `src` attributes that are inaccessible, as with
|
||||
// a 403 response, will cause the tab/window to crash
|
||||
// * Script elements appended to fragments will execute when their `src`
|
||||
// or `text` property is set
|
||||
return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
|
||||
}
|
||||
|
||||
// Avoid adding some elements to fragments in IE < 9 because
|
||||
// * Attributes like `name` or `type` cannot be set/changed once an element
|
||||
// is inserted into a document/fragment
|
||||
// * Link elements with `src` attributes that are inaccessible, as with
|
||||
// a 403 response, will cause the tab/window to crash
|
||||
// * Script elements appended to fragments will execute when their `src`
|
||||
// or `text` property is set
|
||||
return node.canHaveChildren && !reSkip.test(nodeName) ? data.frag.appendChild(node) : node;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a shived DocumentFragment for the given document
|
||||
* @memberOf html5
|
||||
* @param {Document} ownerDocument The context document.
|
||||
* @returns {Object} The shived DocumentFragment.
|
||||
*/
|
||||
function createDocumentFragment(ownerDocument, data){
|
||||
if (!ownerDocument) {
|
||||
/**
|
||||
* returns a shived DocumentFragment for the given document
|
||||
* @memberOf html5
|
||||
* @param {Document} ownerDocument The context document.
|
||||
* @returns {Object} The shived DocumentFragment.
|
||||
*/
|
||||
function createDocumentFragment(ownerDocument, data){
|
||||
if (!ownerDocument) {
|
||||
ownerDocument = document;
|
||||
}
|
||||
if(supportsUnknownElements){
|
||||
}
|
||||
if(supportsUnknownElements){
|
||||
return ownerDocument.createDocumentFragment();
|
||||
}
|
||||
data = data || getExpandoData(ownerDocument);
|
||||
var clone = data.frag.cloneNode(),
|
||||
i = 0,
|
||||
elems = getElements(),
|
||||
l = elems.length;
|
||||
for(;i<l;i++){
|
||||
}
|
||||
data = data || getExpandoData(ownerDocument);
|
||||
var clone = data.frag.cloneNode(),
|
||||
i = 0,
|
||||
elems = getElements(),
|
||||
l = elems.length;
|
||||
for(;i<l;i++){
|
||||
clone.createElement(elems[i]);
|
||||
}
|
||||
return clone;
|
||||
}
|
||||
return clone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shivs the `createElement` and `createDocumentFragment` methods of the document.
|
||||
* @private
|
||||
* @param {Document|DocumentFragment} ownerDocument The document.
|
||||
* @param {Object} data of the document.
|
||||
*/
|
||||
function shivMethods(ownerDocument, data) {
|
||||
if (!data.cache) {
|
||||
/**
|
||||
* Shivs the `createElement` and `createDocumentFragment` methods of the document.
|
||||
* @private
|
||||
* @param {Document|DocumentFragment} ownerDocument The document.
|
||||
* @param {Object} data of the document.
|
||||
*/
|
||||
function shivMethods(ownerDocument, data) {
|
||||
if (!data.cache) {
|
||||
data.cache = {};
|
||||
data.createElem = ownerDocument.createElement;
|
||||
data.createFrag = ownerDocument.createDocumentFragment;
|
||||
data.frag = data.createFrag();
|
||||
}
|
||||
|
||||
|
||||
ownerDocument.createElement = function(nodeName) {
|
||||
//abort shiv
|
||||
if (!html5.shivMethods) {
|
||||
return data.createElem(nodeName);
|
||||
}
|
||||
return createElement(nodeName, ownerDocument, data);
|
||||
};
|
||||
|
||||
ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
|
||||
'var n=f.cloneNode(),c=n.createElement;' +
|
||||
'h.shivMethods&&(' +
|
||||
// unroll the `createElement` calls
|
||||
getElements().join().replace(/[\w\-]+/g, function(nodeName) {
|
||||
data.createElem(nodeName);
|
||||
data.frag.createElement(nodeName);
|
||||
return 'c("' + nodeName + '")';
|
||||
}) +
|
||||
');return n}'
|
||||
)(html5, data.frag);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
ownerDocument.createElement = function(nodeName) {
|
||||
//abort shiv
|
||||
if (!html5.shivMethods) {
|
||||
return data.createElem(nodeName);
|
||||
/**
|
||||
* Shivs the given document.
|
||||
* @memberOf html5
|
||||
* @param {Document} ownerDocument The document to shiv.
|
||||
* @returns {Document} The shived document.
|
||||
*/
|
||||
function shivDocument(ownerDocument) {
|
||||
if (!ownerDocument) {
|
||||
ownerDocument = document;
|
||||
}
|
||||
return createElement(nodeName, ownerDocument, data);
|
||||
var data = getExpandoData(ownerDocument);
|
||||
|
||||
if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
|
||||
data.hasCSS = !!addStyleSheet(ownerDocument,
|
||||
// corrects block display not defined in IE6/7/8/9
|
||||
'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
|
||||
// adds styling not present in IE6/7/8/9
|
||||
'mark{background:#FF0;color:#000}' +
|
||||
// hides non-rendered elements
|
||||
'template{display:none}'
|
||||
);
|
||||
}
|
||||
if (!supportsUnknownElements) {
|
||||
shivMethods(ownerDocument, data);
|
||||
}
|
||||
return ownerDocument;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* The `html5` object is exposed so that more elements can be shived and
|
||||
* existing shiving can be detected on iframes.
|
||||
* @type Object
|
||||
* @example
|
||||
*
|
||||
* // options can be changed before the script is included
|
||||
* html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
|
||||
*/
|
||||
var html5 = {
|
||||
|
||||
/**
|
||||
* An array or space separated string of node names of the elements to shiv.
|
||||
* @memberOf html5
|
||||
* @type Array|String
|
||||
*/
|
||||
'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
|
||||
|
||||
/**
|
||||
* current version of html5shiv
|
||||
*/
|
||||
'version': version,
|
||||
|
||||
/**
|
||||
* A flag to indicate that the HTML5 style sheet should be inserted.
|
||||
* @memberOf html5
|
||||
* @type Boolean
|
||||
*/
|
||||
'shivCSS': (options.shivCSS !== false),
|
||||
|
||||
/**
|
||||
* Is equal to true if a browser supports creating unknown/HTML5 elements
|
||||
* @memberOf html5
|
||||
* @type boolean
|
||||
*/
|
||||
'supportsUnknownElements': supportsUnknownElements,
|
||||
|
||||
/**
|
||||
* A flag to indicate that the document's `createElement` and `createDocumentFragment`
|
||||
* methods should be overwritten.
|
||||
* @memberOf html5
|
||||
* @type Boolean
|
||||
*/
|
||||
'shivMethods': (options.shivMethods !== false),
|
||||
|
||||
/**
|
||||
* A string to describe the type of `html5` object ("default" or "default print").
|
||||
* @memberOf html5
|
||||
* @type String
|
||||
*/
|
||||
'type': 'default',
|
||||
|
||||
// shivs the document according to the specified `html5` object options
|
||||
'shivDocument': shivDocument,
|
||||
|
||||
//creates a shived element
|
||||
createElement: createElement,
|
||||
|
||||
//creates a shived documentFragment
|
||||
createDocumentFragment: createDocumentFragment
|
||||
};
|
||||
|
||||
ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
|
||||
'var n=f.cloneNode(),c=n.createElement;' +
|
||||
'h.shivMethods&&(' +
|
||||
// unroll the `createElement` calls
|
||||
getElements().join().replace(/\w+/g, function(nodeName) {
|
||||
data.createElem(nodeName);
|
||||
data.frag.createElement(nodeName);
|
||||
return 'c("' + nodeName + '")';
|
||||
}) +
|
||||
');return n}'
|
||||
)(html5, data.frag);
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
// expose html5
|
||||
window.html5 = html5;
|
||||
|
||||
/**
|
||||
* Shivs the given document.
|
||||
* @memberOf html5
|
||||
* @param {Document} ownerDocument The document to shiv.
|
||||
* @returns {Document} The shived document.
|
||||
*/
|
||||
function shivDocument(ownerDocument) {
|
||||
if (!ownerDocument) {
|
||||
ownerDocument = document;
|
||||
}
|
||||
var data = getExpandoData(ownerDocument);
|
||||
|
||||
if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
|
||||
data.hasCSS = !!addStyleSheet(ownerDocument,
|
||||
// corrects block display not defined in IE6/7/8/9
|
||||
'article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}' +
|
||||
// adds styling not present in IE6/7/8/9
|
||||
'mark{background:#FF0;color:#000}'
|
||||
);
|
||||
}
|
||||
if (!supportsUnknownElements) {
|
||||
shivMethods(ownerDocument, data);
|
||||
}
|
||||
return ownerDocument;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* The `html5` object is exposed so that more elements can be shived and
|
||||
* existing shiving can be detected on iframes.
|
||||
* @type Object
|
||||
* @example
|
||||
*
|
||||
* // options can be changed before the script is included
|
||||
* html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
|
||||
*/
|
||||
var html5 = {
|
||||
|
||||
/**
|
||||
* An array or space separated string of node names of the elements to shiv.
|
||||
* @memberOf html5
|
||||
* @type Array|String
|
||||
*/
|
||||
'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video',
|
||||
|
||||
/**
|
||||
* A flag to indicate that the HTML5 style sheet should be inserted.
|
||||
* @memberOf html5
|
||||
* @type Boolean
|
||||
*/
|
||||
'shivCSS': (options.shivCSS !== false),
|
||||
|
||||
/**
|
||||
* Is equal to true if a browser supports creating unknown/HTML5 elements
|
||||
* @memberOf html5
|
||||
* @type boolean
|
||||
*/
|
||||
'supportsUnknownElements': supportsUnknownElements,
|
||||
|
||||
/**
|
||||
* A flag to indicate that the document's `createElement` and `createDocumentFragment`
|
||||
* methods should be overwritten.
|
||||
* @memberOf html5
|
||||
* @type Boolean
|
||||
*/
|
||||
'shivMethods': (options.shivMethods !== false),
|
||||
|
||||
/**
|
||||
* A string to describe the type of `html5` object ("default" or "default print").
|
||||
* @memberOf html5
|
||||
* @type String
|
||||
*/
|
||||
'type': 'default',
|
||||
|
||||
// shivs the document according to the specified `html5` object options
|
||||
'shivDocument': shivDocument,
|
||||
|
||||
//creates a shived element
|
||||
createElement: createElement,
|
||||
|
||||
//creates a shived documentFragment
|
||||
createDocumentFragment: createDocumentFragment
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
// expose html5
|
||||
window.html5 = html5;
|
||||
|
||||
// shiv the document
|
||||
shivDocument(document);
|
||||
// shiv the document
|
||||
shivDocument(document);
|
||||
|
||||
}(this, document));
|
||||
/*>>shiv*/
|
||||
@@ -11,52 +11,52 @@
|
||||
}
|
||||
}(function (moment) {
|
||||
return moment.lang('en-au', {
|
||||
months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
|
||||
monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
|
||||
weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
|
||||
weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
|
||||
weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
|
||||
longDateFormat : {
|
||||
LT : "h:mm A",
|
||||
L : "DD/MM/YYYY",
|
||||
LL : "D MMMM YYYY",
|
||||
LLL : "D MMMM YYYY LT",
|
||||
LLLL : "dddd, D MMMM YYYY LT"
|
||||
months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
|
||||
monthsShort: "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
|
||||
weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
|
||||
weekdaysShort: "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
|
||||
weekdaysMin: "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
|
||||
longDateFormat: {
|
||||
LT: "h:mm A",
|
||||
L: "DD/MM/YYYY",
|
||||
LL: "D MMMM YYYY",
|
||||
LLL: "D MMMM YYYY LT",
|
||||
LLLL: "dddd, D MMMM YYYY LT"
|
||||
},
|
||||
calendar : {
|
||||
sameDay : '[Today at] LT',
|
||||
nextDay : '[Tomorrow at] LT',
|
||||
nextWeek : 'dddd [at] LT',
|
||||
lastDay : '[Yesterday at] LT',
|
||||
lastWeek : '[Last] dddd [at] LT',
|
||||
sameElse : 'L'
|
||||
calendar: {
|
||||
sameDay: '[Today at] LT',
|
||||
nextDay: '[Tomorrow at] LT',
|
||||
nextWeek: 'dddd [at] LT',
|
||||
lastDay: '[Yesterday at] LT',
|
||||
lastWeek: '[Last] dddd [at] LT',
|
||||
sameElse: 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
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"
|
||||
relativeTime: {
|
||||
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"
|
||||
},
|
||||
ordinal : function (number) {
|
||||
ordinal: function (number) {
|
||||
var b = number % 10,
|
||||
output = (~~ (number % 100 / 10) === 1) ? 'th' :
|
||||
output = (~~(number % 100 / 10) === 1) ? 'th' :
|
||||
(b === 1) ? 'st' :
|
||||
(b === 2) ? 'nd' :
|
||||
(b === 3) ? 'rd' : 'th';
|
||||
return number + output;
|
||||
},
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
week: {
|
||||
dow: 1, // Monday is the first day of the week.
|
||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
}));
|
||||
@@ -1,5 +1,5 @@
|
||||
//! moment.js
|
||||
//! version : 2.4.0
|
||||
//! version : 2.6.0
|
||||
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
|
||||
//! license : MIT
|
||||
//! momentjs.com
|
||||
@@ -11,7 +11,10 @@
|
||||
************************************/
|
||||
|
||||
var moment,
|
||||
VERSION = "2.4.0",
|
||||
VERSION = "2.6.0",
|
||||
// the global-scope this is NOT the global object in Node.js
|
||||
globalScope = typeof global !== 'undefined' ? global : this,
|
||||
oldGlobalMoment,
|
||||
round = Math.round,
|
||||
i,
|
||||
|
||||
@@ -26,6 +29,19 @@
|
||||
// internal storage for language config files
|
||||
languages = {},
|
||||
|
||||
// moment internal properties
|
||||
momentProperties = {
|
||||
_isAMomentObject: null,
|
||||
_i : null,
|
||||
_f : null,
|
||||
_l : null,
|
||||
_strict : null,
|
||||
_isUTC : null,
|
||||
_offset : null, // optional. Combine with _isUTC
|
||||
_pf : null,
|
||||
_lang : null // optional
|
||||
},
|
||||
|
||||
// check for nodeJS
|
||||
hasModule = (typeof module !== 'undefined' && module.exports),
|
||||
|
||||
@@ -38,37 +54,46 @@
|
||||
isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,
|
||||
|
||||
// format tokens
|
||||
formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,
|
||||
formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,
|
||||
localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,
|
||||
|
||||
// parsing token regexes
|
||||
parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99
|
||||
parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999
|
||||
parseTokenThreeDigits = /\d{3}/, // 000 - 999
|
||||
parseTokenFourDigits = /\d{1,4}/, // 0 - 9999
|
||||
parseTokenSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999
|
||||
parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999
|
||||
parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999
|
||||
parseTokenDigits = /\d+/, // nonzero number of digits
|
||||
parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic.
|
||||
parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/i, // +00:00 -00:00 +0000 -0000 or Z
|
||||
parseTokenT = /T/i, // T (ISO seperator)
|
||||
parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
|
||||
parseTokenT = /T/i, // T (ISO separator)
|
||||
parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
|
||||
parseTokenOrdinal = /\d{1,2}/,
|
||||
|
||||
// preliminary iso regex
|
||||
// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000)
|
||||
isoRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d:?\d\d|Z)?)?$/,
|
||||
//strict parsing regexes
|
||||
parseTokenOneDigit = /\d/, // 0 - 9
|
||||
parseTokenTwoDigits = /\d\d/, // 00 - 99
|
||||
parseTokenThreeDigits = /\d{3}/, // 000 - 999
|
||||
parseTokenFourDigits = /\d{4}/, // 0000 - 9999
|
||||
parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999
|
||||
parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf
|
||||
|
||||
// iso 8601 regex
|
||||
// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
|
||||
isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
|
||||
|
||||
isoFormat = 'YYYY-MM-DDTHH:mm:ssZ',
|
||||
|
||||
isoDates = [
|
||||
'YYYY-MM-DD',
|
||||
'GGGG-[W]WW',
|
||||
'GGGG-[W]WW-E',
|
||||
'YYYY-DDD'
|
||||
['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/],
|
||||
['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/],
|
||||
['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/],
|
||||
['GGGG-[W]WW', /\d{4}-W\d{2}/],
|
||||
['YYYY-DDD', /\d{4}-\d{3}/]
|
||||
],
|
||||
|
||||
// iso time formats and regexes
|
||||
isoTimes = [
|
||||
['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d{1,3}/],
|
||||
['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/],
|
||||
['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/],
|
||||
['HH:mm', /(T| )\d\d:\d\d/],
|
||||
['HH', /(T| )\d\d/]
|
||||
@@ -99,6 +124,7 @@
|
||||
w : 'week',
|
||||
W : 'isoWeek',
|
||||
M : 'month',
|
||||
Q : 'quarter',
|
||||
y : 'year',
|
||||
DDD : 'dayOfYear',
|
||||
e : 'weekday',
|
||||
@@ -165,11 +191,15 @@
|
||||
YYYYY : function () {
|
||||
return leftZeroFill(this.year(), 5);
|
||||
},
|
||||
YYYYYY : function () {
|
||||
var y = this.year(), sign = y >= 0 ? '+' : '-';
|
||||
return sign + leftZeroFill(Math.abs(y), 6);
|
||||
},
|
||||
gg : function () {
|
||||
return leftZeroFill(this.weekYear() % 100, 2);
|
||||
},
|
||||
gggg : function () {
|
||||
return this.weekYear();
|
||||
return leftZeroFill(this.weekYear(), 4);
|
||||
},
|
||||
ggggg : function () {
|
||||
return leftZeroFill(this.weekYear(), 5);
|
||||
@@ -178,7 +208,7 @@
|
||||
return leftZeroFill(this.isoWeekYear() % 100, 2);
|
||||
},
|
||||
GGGG : function () {
|
||||
return this.isoWeekYear();
|
||||
return leftZeroFill(this.isoWeekYear(), 4);
|
||||
},
|
||||
GGGGG : function () {
|
||||
return leftZeroFill(this.isoWeekYear(), 5);
|
||||
@@ -235,7 +265,7 @@
|
||||
a = -a;
|
||||
b = "-";
|
||||
}
|
||||
return b + leftZeroFill(toInt(10 * a / 6), 4);
|
||||
return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2);
|
||||
},
|
||||
z : function () {
|
||||
return this.zoneAbbr();
|
||||
@@ -245,11 +275,48 @@
|
||||
},
|
||||
X : function () {
|
||||
return this.unix();
|
||||
},
|
||||
Q : function () {
|
||||
return this.quarter();
|
||||
}
|
||||
},
|
||||
|
||||
lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin'];
|
||||
|
||||
function defaultParsingFlags() {
|
||||
// We need to deep clone this object, and es5 standard is not very
|
||||
// helpful.
|
||||
return {
|
||||
empty : false,
|
||||
unusedTokens : [],
|
||||
unusedInput : [],
|
||||
overflow : -2,
|
||||
charsLeftOver : 0,
|
||||
nullInput : false,
|
||||
invalidMonth : null,
|
||||
invalidFormat : false,
|
||||
userInvalidated : false,
|
||||
iso: false
|
||||
};
|
||||
}
|
||||
|
||||
function deprecate(msg, fn) {
|
||||
var firstTime = true;
|
||||
function printMsg() {
|
||||
if (moment.suppressDeprecationWarnings === false &&
|
||||
typeof console !== 'undefined' && console.warn) {
|
||||
console.warn("Deprecation warning: " + msg);
|
||||
}
|
||||
}
|
||||
return extend(function () {
|
||||
if (firstTime) {
|
||||
printMsg();
|
||||
firstTime = false;
|
||||
}
|
||||
return fn.apply(this, arguments);
|
||||
}, fn);
|
||||
}
|
||||
|
||||
function padToken(func, count) {
|
||||
return function (a) {
|
||||
return leftZeroFill(func.call(this, a), count);
|
||||
@@ -290,6 +357,7 @@
|
||||
function Duration(duration) {
|
||||
var normalizedInput = normalizeObjectUnits(duration),
|
||||
years = normalizedInput.year || 0,
|
||||
quarters = normalizedInput.quarter || 0,
|
||||
months = normalizedInput.month || 0,
|
||||
weeks = normalizedInput.week || 0,
|
||||
days = normalizedInput.day || 0,
|
||||
@@ -298,9 +366,6 @@
|
||||
seconds = normalizedInput.second || 0,
|
||||
milliseconds = normalizedInput.millisecond || 0;
|
||||
|
||||
// store reference to input for deterministic cloning
|
||||
this._input = duration;
|
||||
|
||||
// representation for dateAddRemove
|
||||
this._milliseconds = +milliseconds +
|
||||
seconds * 1e3 + // 1000
|
||||
@@ -314,6 +379,7 @@
|
||||
// which months you are are talking about, so we have to store
|
||||
// it separately.
|
||||
this._months = +months +
|
||||
quarters * 3 +
|
||||
years * 12;
|
||||
|
||||
this._data = {};
|
||||
@@ -344,6 +410,17 @@
|
||||
return a;
|
||||
}
|
||||
|
||||
function cloneMoment(m) {
|
||||
var result = {}, i;
|
||||
for (i in m) {
|
||||
if (m.hasOwnProperty(i) && momentProperties.hasOwnProperty(i)) {
|
||||
result[i] = m[i];
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function absRound(number) {
|
||||
if (number < 0) {
|
||||
return Math.ceil(number);
|
||||
@@ -354,43 +431,34 @@
|
||||
|
||||
// left zero fill a number
|
||||
// see http://jsperf.com/left-zero-filling for performance comparison
|
||||
function leftZeroFill(number, targetLength) {
|
||||
var output = number + '';
|
||||
function leftZeroFill(number, targetLength, forceSign) {
|
||||
var output = '' + Math.abs(number),
|
||||
sign = number >= 0;
|
||||
|
||||
while (output.length < targetLength) {
|
||||
output = '0' + output;
|
||||
}
|
||||
return output;
|
||||
return (sign ? (forceSign ? '+' : '') : '-') + output;
|
||||
}
|
||||
|
||||
// helper function for _.addTime and _.subtractTime
|
||||
function addOrSubtractDurationFromMoment(mom, duration, isAdding, ignoreUpdateOffset) {
|
||||
function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) {
|
||||
var milliseconds = duration._milliseconds,
|
||||
days = duration._days,
|
||||
months = duration._months,
|
||||
minutes,
|
||||
hours;
|
||||
months = duration._months;
|
||||
updateOffset = updateOffset == null ? true : updateOffset;
|
||||
|
||||
if (milliseconds) {
|
||||
mom._d.setTime(+mom._d + milliseconds * isAdding);
|
||||
}
|
||||
// store the minutes and hours so we can restore them
|
||||
if (days || months) {
|
||||
minutes = mom.minute();
|
||||
hours = mom.hour();
|
||||
}
|
||||
if (days) {
|
||||
mom.date(mom.date() + days * isAdding);
|
||||
rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding);
|
||||
}
|
||||
if (months) {
|
||||
mom.month(mom.month() + months * isAdding);
|
||||
rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding);
|
||||
}
|
||||
if (milliseconds && !ignoreUpdateOffset) {
|
||||
moment.updateOffset(mom);
|
||||
}
|
||||
// restore the minutes and hours after possibly changing dst
|
||||
if (days || months) {
|
||||
mom.minute(minutes);
|
||||
mom.hour(hours);
|
||||
if (updateOffset) {
|
||||
moment.updateOffset(mom, days || months);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,8 +498,7 @@
|
||||
function normalizeObjectUnits(inputObject) {
|
||||
var normalizedInput = {},
|
||||
normalizedProp,
|
||||
prop,
|
||||
index;
|
||||
prop;
|
||||
|
||||
for (prop in inputObject) {
|
||||
if (inputObject.hasOwnProperty(prop)) {
|
||||
@@ -506,6 +573,10 @@
|
||||
return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
|
||||
}
|
||||
|
||||
function weeksInYear(year, dow, doy) {
|
||||
return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week;
|
||||
}
|
||||
|
||||
function daysInYear(year) {
|
||||
return isLeapYear(year) ? 366 : 365;
|
||||
}
|
||||
@@ -534,21 +605,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
function initializeParsingFlags(config) {
|
||||
config._pf = {
|
||||
empty : false,
|
||||
unusedTokens : [],
|
||||
unusedInput : [],
|
||||
overflow : -2,
|
||||
charsLeftOver : 0,
|
||||
nullInput : false,
|
||||
invalidMonth : null,
|
||||
invalidFormat : false,
|
||||
userInvalidated : false,
|
||||
iso: false
|
||||
};
|
||||
}
|
||||
|
||||
function isValid(m) {
|
||||
if (m._isValid == null) {
|
||||
m._isValid = !isNaN(m._d.getTime()) &&
|
||||
@@ -572,6 +628,12 @@
|
||||
return key ? key.toLowerCase().replace('_', '-') : key;
|
||||
}
|
||||
|
||||
// Return a moment from input, that is local/utc/zone equivalent to model.
|
||||
function makeAs(input, model) {
|
||||
return model._isUTC ? moment(input).zone(model._offset || 0) :
|
||||
moment(input).local();
|
||||
}
|
||||
|
||||
/************************************
|
||||
Languages
|
||||
************************************/
|
||||
@@ -903,21 +965,34 @@
|
||||
|
||||
// get the regex to find the next token
|
||||
function getParseRegexForToken(token, config) {
|
||||
var a;
|
||||
var a, strict = config._strict;
|
||||
switch (token) {
|
||||
case 'Q':
|
||||
return parseTokenOneDigit;
|
||||
case 'DDDD':
|
||||
return parseTokenThreeDigits;
|
||||
case 'YYYY':
|
||||
case 'GGGG':
|
||||
case 'gggg':
|
||||
return parseTokenFourDigits;
|
||||
return strict ? parseTokenFourDigits : parseTokenOneToFourDigits;
|
||||
case 'Y':
|
||||
case 'G':
|
||||
case 'g':
|
||||
return parseTokenSignedNumber;
|
||||
case 'YYYYYY':
|
||||
case 'YYYYY':
|
||||
case 'GGGGG':
|
||||
case 'ggggg':
|
||||
return parseTokenSixDigits;
|
||||
return strict ? parseTokenSixDigits : parseTokenOneToSixDigits;
|
||||
case 'S':
|
||||
if (strict) { return parseTokenOneDigit; }
|
||||
/* falls through */
|
||||
case 'SS':
|
||||
if (strict) { return parseTokenTwoDigits; }
|
||||
/* falls through */
|
||||
case 'SSS':
|
||||
if (strict) { return parseTokenThreeDigits; }
|
||||
/* falls through */
|
||||
case 'DDD':
|
||||
return parseTokenOneToThreeDigits;
|
||||
case 'MMM':
|
||||
@@ -947,6 +1022,9 @@
|
||||
case 'hh':
|
||||
case 'mm':
|
||||
case 'ss':
|
||||
case 'ww':
|
||||
case 'WW':
|
||||
return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits;
|
||||
case 'M':
|
||||
case 'D':
|
||||
case 'd':
|
||||
@@ -955,12 +1033,12 @@
|
||||
case 'm':
|
||||
case 's':
|
||||
case 'w':
|
||||
case 'ww':
|
||||
case 'W':
|
||||
case 'WW':
|
||||
case 'e':
|
||||
case 'E':
|
||||
return parseTokenOneOrTwoDigits;
|
||||
case 'Do':
|
||||
return parseTokenOrdinal;
|
||||
default :
|
||||
a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), "i"));
|
||||
return a;
|
||||
@@ -968,8 +1046,10 @@
|
||||
}
|
||||
|
||||
function timezoneMinutesFromString(string) {
|
||||
var tzchunk = (parseTokenTimezone.exec(string) || [])[0],
|
||||
parts = (tzchunk + '').match(parseTimezoneChunker) || ['-', 0, 0],
|
||||
string = string || "";
|
||||
var possibleTzMatches = (string.match(parseTokenTimezone) || []),
|
||||
tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [],
|
||||
parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0],
|
||||
minutes = +(parts[1] * 60) + toInt(parts[2]);
|
||||
|
||||
return parts[0] === '+' ? -minutes : minutes;
|
||||
@@ -980,6 +1060,12 @@
|
||||
var a, datePartArray = config._a;
|
||||
|
||||
switch (token) {
|
||||
// QUARTER
|
||||
case 'Q':
|
||||
if (input != null) {
|
||||
datePartArray[MONTH] = (toInt(input) - 1) * 3;
|
||||
}
|
||||
break;
|
||||
// MONTH
|
||||
case 'M' : // fall through to MM
|
||||
case 'MM' :
|
||||
@@ -1004,6 +1090,11 @@
|
||||
datePartArray[DATE] = toInt(input);
|
||||
}
|
||||
break;
|
||||
case 'Do' :
|
||||
if (input != null) {
|
||||
datePartArray[DATE] = toInt(parseInt(input, 10));
|
||||
}
|
||||
break;
|
||||
// DAY OF YEAR
|
||||
case 'DDD' : // fall through to DDDD
|
||||
case 'DDDD' :
|
||||
@@ -1014,10 +1105,11 @@
|
||||
break;
|
||||
// YEAR
|
||||
case 'YY' :
|
||||
datePartArray[YEAR] = toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
|
||||
datePartArray[YEAR] = moment.parseTwoDigitYear(input);
|
||||
break;
|
||||
case 'YYYY' :
|
||||
case 'YYYYY' :
|
||||
case 'YYYYYY' :
|
||||
datePartArray[YEAR] = toInt(input);
|
||||
break;
|
||||
// AM / PM
|
||||
@@ -1102,8 +1194,9 @@
|
||||
//compute day of the year from weeks and weekdays
|
||||
if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
|
||||
fixYear = function (val) {
|
||||
var intVal = parseInt(val, 10);
|
||||
return val ?
|
||||
(val.length < 3 ? (parseInt(val, 10) > 68 ? '19' + val : '20' + val) : val) :
|
||||
(val.length < 3 ? (intVal > 68 ? 1900 + intVal : 2000 + intVal) : intVal) :
|
||||
(config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]);
|
||||
};
|
||||
|
||||
@@ -1215,7 +1308,7 @@
|
||||
|
||||
for (i = 0; i < tokens.length; i++) {
|
||||
token = tokens[i];
|
||||
parsedInput = (getParseRegexForToken(token, config).exec(string) || [])[0];
|
||||
parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
|
||||
if (parsedInput) {
|
||||
skipped = string.substr(0, string.indexOf(parsedInput));
|
||||
if (skipped.length > 0) {
|
||||
@@ -1287,7 +1380,7 @@
|
||||
for (i = 0; i < config._f.length; i++) {
|
||||
currentScore = 0;
|
||||
tempConfig = extend({}, config);
|
||||
initializeParsingFlags(tempConfig);
|
||||
tempConfig._pf = defaultParsingFlags();
|
||||
tempConfig._f = config._f[i];
|
||||
makeDateFromStringAndFormat(tempConfig);
|
||||
|
||||
@@ -1314,32 +1407,32 @@
|
||||
|
||||
// date from iso format
|
||||
function makeDateFromString(config) {
|
||||
var i,
|
||||
var i, l,
|
||||
string = config._i,
|
||||
match = isoRegex.exec(string);
|
||||
|
||||
if (match) {
|
||||
config._pf.iso = true;
|
||||
for (i = 4; i > 0; i--) {
|
||||
if (match[i]) {
|
||||
for (i = 0, l = isoDates.length; i < l; i++) {
|
||||
if (isoDates[i][1].exec(string)) {
|
||||
// match[5] should be "T" or undefined
|
||||
config._f = isoDates[i - 1] + (match[6] || " ");
|
||||
config._f = isoDates[i][0] + (match[6] || " ");
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (i = 0, l = isoTimes.length; i < l; i++) {
|
||||
if (isoTimes[i][1].exec(string)) {
|
||||
config._f += isoTimes[i][0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (parseTokenTimezone.exec(string)) {
|
||||
if (string.match(parseTokenTimezone)) {
|
||||
config._f += "Z";
|
||||
}
|
||||
makeDateFromStringAndFormat(config);
|
||||
}
|
||||
else {
|
||||
config._d = new Date(string);
|
||||
moment.createFromInputFallback(config);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1360,8 +1453,11 @@
|
||||
config._d = new Date(+input);
|
||||
} else if (typeof(input) === 'object') {
|
||||
dateFromObject(config);
|
||||
} else {
|
||||
} else if (typeof(input) === 'number') {
|
||||
// from milliseconds
|
||||
config._d = new Date(input);
|
||||
} else {
|
||||
moment.createFromInputFallback(config);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1468,11 +1564,10 @@
|
||||
|
||||
//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
|
||||
function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
|
||||
var d = new Date(Date.UTC(year, 0)).getUTCDay(),
|
||||
daysToAdd, dayOfYear;
|
||||
var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear;
|
||||
|
||||
weekday = weekday != null ? weekday : firstDayOfWeek;
|
||||
daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0);
|
||||
daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
|
||||
dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
|
||||
|
||||
return {
|
||||
@@ -1489,11 +1584,7 @@
|
||||
var input = config._i,
|
||||
format = config._f;
|
||||
|
||||
if (typeof config._pf === 'undefined') {
|
||||
initializeParsingFlags(config);
|
||||
}
|
||||
|
||||
if (input === null) {
|
||||
if (input === null || (format === undefined && input === '')) {
|
||||
return moment.invalid({nullInput: true});
|
||||
}
|
||||
|
||||
@@ -1502,7 +1593,7 @@
|
||||
}
|
||||
|
||||
if (moment.isMoment(input)) {
|
||||
config = extend({}, input);
|
||||
config = cloneMoment(input);
|
||||
|
||||
config._d = new Date(+input._d);
|
||||
} else if (format) {
|
||||
@@ -1519,37 +1610,58 @@
|
||||
}
|
||||
|
||||
moment = function (input, format, lang, strict) {
|
||||
var c;
|
||||
|
||||
if (typeof(lang) === "boolean") {
|
||||
strict = lang;
|
||||
lang = undefined;
|
||||
}
|
||||
return makeMoment({
|
||||
_i : input,
|
||||
_f : format,
|
||||
_l : lang,
|
||||
_strict : strict,
|
||||
_isUTC : false
|
||||
});
|
||||
// object construction must be done this way.
|
||||
// https://github.com/moment/moment/issues/1423
|
||||
c = {};
|
||||
c._isAMomentObject = true;
|
||||
c._i = input;
|
||||
c._f = format;
|
||||
c._l = lang;
|
||||
c._strict = strict;
|
||||
c._isUTC = false;
|
||||
c._pf = defaultParsingFlags();
|
||||
|
||||
return makeMoment(c);
|
||||
};
|
||||
|
||||
moment.suppressDeprecationWarnings = false;
|
||||
|
||||
moment.createFromInputFallback = deprecate(
|
||||
"moment construction falls back to js Date. This is " +
|
||||
"discouraged and will be removed in upcoming major " +
|
||||
"release. Please refer to " +
|
||||
"https://github.com/moment/moment/issues/1407 for more info.",
|
||||
function (config) {
|
||||
config._d = new Date(config._i);
|
||||
});
|
||||
|
||||
// creating with utc
|
||||
moment.utc = function (input, format, lang, strict) {
|
||||
var m;
|
||||
var c;
|
||||
|
||||
if (typeof(lang) === "boolean") {
|
||||
strict = lang;
|
||||
lang = undefined;
|
||||
}
|
||||
m = makeMoment({
|
||||
_useUTC : true,
|
||||
_isUTC : true,
|
||||
_l : lang,
|
||||
_i : input,
|
||||
_f : format,
|
||||
_strict : strict
|
||||
}).utc();
|
||||
// object construction must be done this way.
|
||||
// https://github.com/moment/moment/issues/1423
|
||||
c = {};
|
||||
c._isAMomentObject = true;
|
||||
c._useUTC = true;
|
||||
c._isUTC = true;
|
||||
c._l = lang;
|
||||
c._i = input;
|
||||
c._f = format;
|
||||
c._strict = strict;
|
||||
c._pf = defaultParsingFlags();
|
||||
|
||||
return m;
|
||||
return makeMoment(c).utc();
|
||||
};
|
||||
|
||||
// creating with unix timestamp (in seconds)
|
||||
@@ -1559,18 +1671,21 @@
|
||||
|
||||
// duration
|
||||
moment.duration = function (input, key) {
|
||||
var isDuration = moment.isDuration(input),
|
||||
isNumber = (typeof input === 'number'),
|
||||
duration = (isDuration ? input._input : (isNumber ? {} : input)),
|
||||
var duration = input,
|
||||
// matching against regexp is expensive, do it on demand
|
||||
match = null,
|
||||
sign,
|
||||
ret,
|
||||
parseIso,
|
||||
timeEmpty,
|
||||
dateTimeEmpty;
|
||||
parseIso;
|
||||
|
||||
if (isNumber) {
|
||||
if (moment.isDuration(input)) {
|
||||
duration = {
|
||||
ms: input._milliseconds,
|
||||
d: input._days,
|
||||
M: input._months
|
||||
};
|
||||
} else if (typeof input === 'number') {
|
||||
duration = {};
|
||||
if (key) {
|
||||
duration[key] = input;
|
||||
} else {
|
||||
@@ -1609,7 +1724,7 @@
|
||||
|
||||
ret = new Duration(duration);
|
||||
|
||||
if (isDuration && input.hasOwnProperty('_lang')) {
|
||||
if (moment.isDuration(input) && input.hasOwnProperty('_lang')) {
|
||||
ret._lang = input._lang;
|
||||
}
|
||||
|
||||
@@ -1622,6 +1737,10 @@
|
||||
// default format
|
||||
moment.defaultFormat = isoFormat;
|
||||
|
||||
// Plugins that add properties should also add the key here (null value),
|
||||
// so we can properly clone ourselves.
|
||||
moment.momentProperties = momentProperties;
|
||||
|
||||
// This function will be called whenever a moment is mutated.
|
||||
// It is intended to keep the offset in sync with the timezone.
|
||||
moment.updateOffset = function () {};
|
||||
@@ -1656,7 +1775,8 @@
|
||||
|
||||
// compare moment object
|
||||
moment.isMoment = function (obj) {
|
||||
return obj instanceof Moment;
|
||||
return obj instanceof Moment ||
|
||||
(obj != null && obj.hasOwnProperty('_isAMomentObject'));
|
||||
};
|
||||
|
||||
// for typechecking Duration objects
|
||||
@@ -1684,8 +1804,12 @@
|
||||
return m;
|
||||
};
|
||||
|
||||
moment.parseZone = function (input) {
|
||||
return moment(input).parseZone();
|
||||
moment.parseZone = function () {
|
||||
return moment.apply(null, arguments).parseZone();
|
||||
};
|
||||
|
||||
moment.parseTwoDigitYear = function (input) {
|
||||
return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
|
||||
};
|
||||
|
||||
/************************************
|
||||
@@ -1716,7 +1840,12 @@
|
||||
},
|
||||
|
||||
toISOString : function () {
|
||||
return formatMoment(moment(this).utc(), 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
|
||||
var m = moment(this).utc();
|
||||
if (0 < m.year() && m.year() <= 9999) {
|
||||
return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
|
||||
} else {
|
||||
return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
|
||||
}
|
||||
},
|
||||
|
||||
toArray : function () {
|
||||
@@ -1793,7 +1922,7 @@
|
||||
},
|
||||
|
||||
diff : function (input, units, asFloat) {
|
||||
var that = this._isUTC ? moment(input).zone(this._offset || 0) : moment(input).local(),
|
||||
var that = makeAs(input, this),
|
||||
zoneDiff = (this.zone() - that.zone()) * 6e4,
|
||||
diff, output;
|
||||
|
||||
@@ -1835,13 +1964,16 @@
|
||||
},
|
||||
|
||||
calendar : function () {
|
||||
var diff = this.diff(moment().zone(this.zone()).startOf('day'), 'days', true),
|
||||
// We want to compare the start of today, vs this.
|
||||
// Getting start-of-today depends on whether we're zone'd or not.
|
||||
var sod = makeAs(moment(), this).startOf('day'),
|
||||
diff = this.diff(sod, 'days', true),
|
||||
format = diff < -6 ? 'sameElse' :
|
||||
diff < -1 ? 'lastWeek' :
|
||||
diff < 0 ? 'lastDay' :
|
||||
diff < 1 ? 'sameDay' :
|
||||
diff < 2 ? 'nextDay' :
|
||||
diff < 7 ? 'nextWeek' : 'sameElse';
|
||||
diff < -1 ? 'lastWeek' :
|
||||
diff < 0 ? 'lastDay' :
|
||||
diff < 1 ? 'sameDay' :
|
||||
diff < 2 ? 'nextDay' :
|
||||
diff < 7 ? 'nextWeek' : 'sameElse';
|
||||
return this.format(this.lang().calendar(format, this));
|
||||
},
|
||||
|
||||
@@ -1864,29 +1996,7 @@
|
||||
}
|
||||
},
|
||||
|
||||
month : function (input) {
|
||||
var utc = this._isUTC ? 'UTC' : '',
|
||||
dayOfMonth;
|
||||
|
||||
if (input != null) {
|
||||
if (typeof input === 'string') {
|
||||
input = this.lang().monthsParse(input);
|
||||
if (typeof input !== 'number') {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
dayOfMonth = this.date();
|
||||
this.date(1);
|
||||
this._d['set' + utc + 'Month'](input);
|
||||
this.date(Math.min(dayOfMonth, this.daysInMonth()));
|
||||
|
||||
moment.updateOffset(this);
|
||||
return this;
|
||||
} else {
|
||||
return this._d['get' + utc + 'Month']();
|
||||
}
|
||||
},
|
||||
month : makeAccessor('Month', true),
|
||||
|
||||
startOf: function (units) {
|
||||
units = normalizeUnits(units);
|
||||
@@ -1896,6 +2006,7 @@
|
||||
case 'year':
|
||||
this.month(0);
|
||||
/* falls through */
|
||||
case 'quarter':
|
||||
case 'month':
|
||||
this.date(1);
|
||||
/* falls through */
|
||||
@@ -1922,6 +2033,11 @@
|
||||
this.isoWeekday(1);
|
||||
}
|
||||
|
||||
// quarters are also special
|
||||
if (units === 'quarter') {
|
||||
this.month(Math.floor(this.month() / 3) * 3);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
@@ -1941,8 +2057,8 @@
|
||||
},
|
||||
|
||||
isSame: function (input, units) {
|
||||
units = typeof units !== 'undefined' ? units : 'millisecond';
|
||||
return +this.clone().startOf(units) === +moment(input).startOf(units);
|
||||
units = units || 'ms';
|
||||
return +this.clone().startOf(units) === +makeAs(input, this).startOf(units);
|
||||
},
|
||||
|
||||
min: function (other) {
|
||||
@@ -1955,7 +2071,17 @@
|
||||
return other > this ? this : other;
|
||||
},
|
||||
|
||||
zone : function (input) {
|
||||
// keepTime = true means only change the timezone, without affecting
|
||||
// the local hour. So 5:31:26 +0300 --[zone(2, true)]--> 5:31:26 +0200
|
||||
// It is possible that 5:31:26 doesn't exist int zone +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.
|
||||
zone : function (input, keepTime) {
|
||||
var offset = this._offset || 0;
|
||||
if (input != null) {
|
||||
if (typeof input === "string") {
|
||||
@@ -1967,7 +2093,14 @@
|
||||
this._offset = input;
|
||||
this._isUTC = true;
|
||||
if (offset !== input) {
|
||||
addOrSubtractDurationFromMoment(this, moment.duration(offset - input, 'm'), 1, true);
|
||||
if (!keepTime || this._changeInProgress) {
|
||||
addOrSubtractDurationFromMoment(this,
|
||||
moment.duration(offset - input, 'm'), 1, false);
|
||||
} else if (!this._changeInProgress) {
|
||||
this._changeInProgress = true;
|
||||
moment.updateOffset(this, true);
|
||||
this._changeInProgress = null;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return this._isUTC ? offset : this._d.getTimezoneOffset();
|
||||
@@ -1984,7 +2117,9 @@
|
||||
},
|
||||
|
||||
parseZone : function () {
|
||||
if (typeof this._i === 'string') {
|
||||
if (this._tzm) {
|
||||
this.zone(this._tzm);
|
||||
} else if (typeof this._i === 'string') {
|
||||
this.zone(this._i);
|
||||
}
|
||||
return this;
|
||||
@@ -2010,6 +2145,10 @@
|
||||
return input == null ? dayOfYear : this.add("d", (input - dayOfYear));
|
||||
},
|
||||
|
||||
quarter : function (input) {
|
||||
return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
|
||||
},
|
||||
|
||||
weekYear : function (input) {
|
||||
var year = weekOfYear(this, this.lang()._week.dow, this.lang()._week.doy).year;
|
||||
return input == null ? year : this.add("y", (input - year));
|
||||
@@ -2042,6 +2181,15 @@
|
||||
return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
|
||||
},
|
||||
|
||||
isoWeeksInYear : function () {
|
||||
return weeksInYear(this.year(), 1, 4);
|
||||
},
|
||||
|
||||
weeksInYear : function () {
|
||||
var weekInfo = this._lang._week;
|
||||
return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
|
||||
},
|
||||
|
||||
get : function (units) {
|
||||
units = normalizeUnits(units);
|
||||
return this[units]();
|
||||
@@ -2068,33 +2216,68 @@
|
||||
}
|
||||
});
|
||||
|
||||
// helper for adding shortcuts
|
||||
function makeGetterAndSetter(name, key) {
|
||||
moment.fn[name] = moment.fn[name + 's'] = function (input) {
|
||||
var utc = this._isUTC ? 'UTC' : '';
|
||||
if (input != null) {
|
||||
this._d['set' + utc + key](input);
|
||||
moment.updateOffset(this);
|
||||
function rawMonthSetter(mom, value) {
|
||||
var dayOfMonth;
|
||||
|
||||
// TODO: Move this out of here!
|
||||
if (typeof value === 'string') {
|
||||
value = mom.lang().monthsParse(value);
|
||||
// TODO: Another silent failure?
|
||||
if (typeof value !== 'number') {
|
||||
return mom;
|
||||
}
|
||||
}
|
||||
|
||||
dayOfMonth = Math.min(mom.date(),
|
||||
daysInMonth(mom.year(), value));
|
||||
mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
|
||||
return mom;
|
||||
}
|
||||
|
||||
function rawGetter(mom, unit) {
|
||||
return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]();
|
||||
}
|
||||
|
||||
function rawSetter(mom, unit, value) {
|
||||
if (unit === 'Month') {
|
||||
return rawMonthSetter(mom, value);
|
||||
} else {
|
||||
return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
|
||||
}
|
||||
}
|
||||
|
||||
function makeAccessor(unit, keepTime) {
|
||||
return function (value) {
|
||||
if (value != null) {
|
||||
rawSetter(this, unit, value);
|
||||
moment.updateOffset(this, keepTime);
|
||||
return this;
|
||||
} else {
|
||||
return this._d['get' + utc + key]();
|
||||
return rawGetter(this, unit);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// loop through and add shortcuts (Month, Date, Hours, Minutes, Seconds, Milliseconds)
|
||||
for (i = 0; i < proxyGettersAndSetters.length; i ++) {
|
||||
makeGetterAndSetter(proxyGettersAndSetters[i].toLowerCase().replace(/s$/, ''), proxyGettersAndSetters[i]);
|
||||
}
|
||||
|
||||
// add shortcut for year (uses different syntax than the getter/setter 'year' == 'FullYear')
|
||||
makeGetterAndSetter('year', 'FullYear');
|
||||
moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false);
|
||||
moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false);
|
||||
moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false);
|
||||
// Setting the hour should keep the time, because the user explicitly
|
||||
// specified which hour he wants. So trying to maintain the same hour (in
|
||||
// a new timezone) makes sense. Adding/subtracting hours does not follow
|
||||
// this rule.
|
||||
moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true);
|
||||
// moment.fn.month is defined separately
|
||||
moment.fn.date = makeAccessor('Date', true);
|
||||
moment.fn.dates = deprecate("dates accessor is deprecated. Use date instead.", makeAccessor('Date', true));
|
||||
moment.fn.year = makeAccessor('FullYear', true);
|
||||
moment.fn.years = deprecate("years accessor is deprecated. Use year instead.", makeAccessor('FullYear', true));
|
||||
|
||||
// add plural methods
|
||||
moment.fn.days = moment.fn.day;
|
||||
moment.fn.months = moment.fn.month;
|
||||
moment.fn.weeks = moment.fn.week;
|
||||
moment.fn.isoWeeks = moment.fn.isoWeek;
|
||||
moment.fn.quarters = moment.fn.quarter;
|
||||
|
||||
// add aliased format methods
|
||||
moment.fn.toJSON = moment.fn.toISOString;
|
||||
@@ -2270,44 +2453,36 @@
|
||||
Exposing Moment
|
||||
************************************/
|
||||
|
||||
function makeGlobal(deprecate) {
|
||||
var warned = false, local_moment = moment;
|
||||
function makeGlobal(shouldDeprecate) {
|
||||
/*global ender:false */
|
||||
if (typeof ender !== 'undefined') {
|
||||
return;
|
||||
}
|
||||
// here, `this` means `window` in the browser, or `global` on the server
|
||||
// add `moment` as a global object via a string identifier,
|
||||
// for Closure Compiler "advanced" mode
|
||||
if (deprecate) {
|
||||
this.moment = function () {
|
||||
if (!warned && console && console.warn) {
|
||||
warned = true;
|
||||
console.warn(
|
||||
"Accessing Moment through the global scope is " +
|
||||
"deprecated, and will be removed in an upcoming " +
|
||||
"release.");
|
||||
}
|
||||
return local_moment.apply(null, arguments);
|
||||
};
|
||||
oldGlobalMoment = globalScope.moment;
|
||||
if (shouldDeprecate) {
|
||||
globalScope.moment = deprecate(
|
||||
"Accessing Moment through the global scope is " +
|
||||
"deprecated, and will be removed in an upcoming " +
|
||||
"release.",
|
||||
moment);
|
||||
} else {
|
||||
this['moment'] = moment;
|
||||
globalScope.moment = moment;
|
||||
}
|
||||
}
|
||||
|
||||
// CommonJS module is defined
|
||||
if (hasModule) {
|
||||
module.exports = moment;
|
||||
makeGlobal(true);
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define("moment", function (require, exports, module) {
|
||||
if (module.config().noGlobal !== true) {
|
||||
// If user provided noGlobal, he is aware of global
|
||||
makeGlobal(module.config().noGlobal === undefined);
|
||||
if (module.config && module.config() && module.config().noGlobal === true) {
|
||||
// release the global variable
|
||||
globalScope.moment = oldGlobalMoment;
|
||||
}
|
||||
|
||||
return moment;
|
||||
});
|
||||
makeGlobal(true);
|
||||
} else {
|
||||
makeGlobal();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user