{"version":3,"file":"app/js/vendor.js","mappings":"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","sources":["webpack://providerportal/./node_modules/rustig/script/rustig-exposed.js","webpack://providerportal/./node_modules/expose-loader/dist/runtime/getGlobalThis.js","webpack://providerportal/./node_modules/humanize-plus/dist/humanize.js","webpack://providerportal/./node_modules/moment/locale/af.js","webpack://providerportal/./node_modules/moment/locale/ar-ma.js","webpack://providerportal/./node_modules/moment/locale/ar-sa.js","webpack://providerportal/./node_modules/moment/locale/ar-tn.js","webpack://providerportal/./node_modules/moment/locale/ar.js","webpack://providerportal/./node_modules/moment/locale/az.js","webpack://providerportal/./node_modules/moment/locale/be.js","webpack://providerportal/./node_modules/moment/locale/bg.js","webpack://providerportal/./node_modules/moment/locale/bn.js","webpack://providerportal/./node_modules/moment/locale/bo.js","webpack://providerportal/./node_modules/moment/locale/br.js","webpack://providerportal/./node_modules/moment/locale/bs.js","webpack://providerportal/./node_modules/moment/locale/ca.js","webpack://providerportal/./node_modules/moment/locale/cs.js","webpack://providerportal/./node_modules/moment/locale/cv.js","webpack://providerportal/./node_modules/moment/locale/cy.js","webpack://providerportal/./node_modules/moment/locale/da.js","webpack://providerportal/./node_modules/moment/locale/de-at.js","webpack://providerportal/./node_modules/moment/locale/de.js","webpack://providerportal/./node_modules/moment/locale/el.js","webpack://providerportal/./node_modules/moment/locale/en-au.js","webpack://providerportal/./node_modules/moment/locale/en-ca.js","webpack://providerportal/./node_modules/moment/locale/en-gb.js","webpack://providerportal/./node_modules/moment/locale/eo.js","webpack://providerportal/./node_modules/moment/locale/es.js","webpack://providerportal/./node_modules/moment/locale/et.js","webpack://providerportal/./node_modules/moment/locale/eu.js","webpack://providerportal/./node_modules/moment/locale/fa.js","webpack://providerportal/./node_modules/moment/locale/fi.js","webpack://providerportal/./node_modules/moment/locale/fo.js","webpack://providerportal/./node_modules/moment/locale/fr-ca.js","webpack://providerportal/./node_modules/moment/locale/fr.js","webpack://providerportal/./node_modules/moment/locale/fy.js","webpack://providerportal/./node_modules/moment/locale/gl.js","webpack://providerportal/./node_modules/moment/locale/he.js","webpack://providerportal/./node_modules/moment/locale/hi.js","webpack://providerportal/./node_modules/moment/locale/hr.js","webpack://providerportal/./node_modules/moment/locale/hu.js","webpack://providerportal/./node_modules/moment/locale/hy-am.js","webpack://providerportal/./node_modules/moment/locale/id.js","webpack://providerportal/./node_modules/moment/locale/is.js","webpack://providerportal/./node_modules/moment/locale/it.js","webpack://providerportal/./node_modules/moment/locale/ja.js","webpack://providerportal/./node_modules/moment/locale/jv.js","webpack://providerportal/./node_modules/moment/locale/ka.js","webpack://providerportal/./node_modules/moment/locale/km.js","webpack://providerportal/./node_modules/moment/locale/ko.js","webpack://providerportal/./node_modules/moment/locale/lb.js","webpack://providerportal/./node_modules/moment/locale/lt.js","webpack://providerportal/./node_modules/moment/locale/lv.js","webpack://providerportal/./node_modules/moment/locale/me.js","webpack://providerportal/./node_modules/moment/locale/mk.js","webpack://providerportal/./node_modules/moment/locale/ml.js","webpack://providerportal/./node_modules/moment/locale/mr.js","webpack://providerportal/./node_modules/moment/locale/ms-my.js","webpack://providerportal/./node_modules/moment/locale/ms.js","webpack://providerportal/./node_modules/moment/locale/my.js","webpack://providerportal/./node_modules/moment/locale/nb.js","webpack://providerportal/./node_modules/moment/locale/ne.js","webpack://providerportal/./node_modules/moment/locale/nl.js","webpack://providerportal/./node_modules/moment/locale/nn.js","webpack://providerportal/./node_modules/moment/locale/pl.js","webpack://providerportal/./node_modules/moment/locale/pt-br.js","webpack://providerportal/./node_modules/moment/locale/pt.js","webpack://providerportal/./node_modules/moment/locale/ro.js","webpack://providerportal/./node_modules/moment/locale/ru.js","webpack://providerportal/./node_modules/moment/locale/si.js","webpack://providerportal/./node_modules/moment/locale/sk.js","webpack://providerportal/./node_modules/moment/locale/sl.js","webpack://providerportal/./node_modules/moment/locale/sq.js","webpack://providerportal/./node_modules/moment/locale/sr-cyrl.js","webpack://providerportal/./node_modules/moment/locale/sr.js","webpack://providerportal/./node_modules/moment/locale/sv.js","webpack://providerportal/./node_modules/moment/locale/ta.js","webpack://providerportal/./node_modules/moment/locale/th.js","webpack://providerportal/./node_modules/moment/locale/tl-ph.js","webpack://providerportal/./node_modules/moment/locale/tr.js","webpack://providerportal/./node_modules/moment/locale/tzl.js","webpack://providerportal/./node_modules/moment/locale/tzm-latn.js","webpack://providerportal/./node_modules/moment/locale/tzm.js","webpack://providerportal/./node_modules/moment/locale/uk.js","webpack://providerportal/./node_modules/moment/locale/uz.js","webpack://providerportal/./node_modules/moment/locale/vi.js","webpack://providerportal/./node_modules/moment/locale/zh-cn.js","webpack://providerportal/./node_modules/moment/locale/zh-tw.js","webpack://providerportal/./node_modules/moment/moment.js","webpack://providerportal/./node_modules/node_modules/underscore/underscore.js","webpack://providerportal/./node_modules/src/app/ts/modules/datefield.ts","webpack://providerportal/./node_modules/node_modules/jquery-highlight/jquery.highlight.js","webpack://providerportal/./node_modules/src/app/ts/utilities/keycode.ts","webpack://providerportal/./node_modules/src/app/ts/modules/multiselectdropdown.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/suppressesevent.ts","webpack://providerportal/./node_modules/node_modules/moment/moment.js","webpack://providerportal/./node_modules/src/app/ts/utilities/extensions.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/display.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/readonly.ts","webpack://providerportal/./node_modules/src/app/ts/modules/dropdown.ts","webpack://providerportal/./node_modules/src/app/ts/modules/daterangefield.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/scrollto.ts","webpack://providerportal/./node_modules/src/app/ts/modules/duallistbox.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/element.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/keyboardscrollable.ts","webpack://providerportal/./node_modules/node_modules/jstorage/jstorage.js","webpack://providerportal/./node_modules/src/app/ts/utilities/storage.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/elementposition.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/focusfield.ts","webpack://providerportal/./node_modules/src/app/ts/modules/modal.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/requestverificationtoken.ts","webpack://providerportal/./node_modules/src/app/ts/modules/confirmation.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/ajax.ts","webpack://providerportal/./node_modules/src/app/ts/modules/popover.ts","webpack://providerportal/./node_modules/src/app/ts/modules/suggestsearch.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/utility.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/ibinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/templaterow.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/clonerow.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/templaterowfactory.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/observables/nullabletextobservable.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/dateinputbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/selectbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/observables/nullablenumericobservable.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/numericinputbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/observables/nullablemoneyobservable.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/moneyinputbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/textinputbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/hiddeninputbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/checkboxinputbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/columntotalbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/rowcountbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/expressionbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/enterkeybinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/removerowbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/remoteonchangebinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/autogrowbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/addrowbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/checkallbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/foreachbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/tojsonbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/jsonbuilder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/externaljsonbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/externaltrackchangeshidebinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/binders/externalnavigationwarningbinder.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/editortable.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/formvalidation.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/errorpopover.ts","webpack://providerportal/./node_modules/src/app/ts/modules/editortable/validation.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/remotetriggerhandler.ts","webpack://providerportal/./node_modules/src/app/ts/modules/fileinput.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/filedropremotehandler.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/fileuploadformremotehandler.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/switchremotehandler.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/disable.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/editortablefieldchangeremotehandler.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/singleinputremotehandler.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/forminputremotehandler.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/selectremotehandler.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/nestedanchorremotehandler.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/defaultremotehandler.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/handlerFactory.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remote/remote.ts","webpack://providerportal/./node_modules/src/app/ts/modules/treefield/treeconfig.ts","webpack://providerportal/./node_modules/src/app/ts/modules/treefield/treeinput.ts","webpack://providerportal/./node_modules/src/app/ts/modules/alert.ts","webpack://providerportal/./node_modules/src/app/ts/modules/addressloader.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/age.ts","webpack://providerportal/./node_modules/src/app/ts/modules/agefield.ts","webpack://providerportal/./node_modules/src/app/js/utilities/dropzone.js","webpack://providerportal/./node_modules/src/app/ts/modules/thumbnailupload.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/url.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/filesize.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/filename.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/buildsextensionicon.ts","webpack://providerportal/./node_modules/src/app/ts/modules/browserhistory.ts","webpack://providerportal/./node_modules/src/app/ts/modules/drawer.ts","webpack://providerportal/./node_modules/src/app/ts/modules/filedragout.ts","webpack://providerportal/./node_modules/src/app/ts/modules/fillwindow.ts","webpack://providerportal/./node_modules/src/app/ts/modules/itemlist.ts","webpack://providerportal/./node_modules/src/app/ts/modules/listview.ts","webpack://providerportal/./node_modules/src/app/js/paceoptions.js","webpack://providerportal/./node_modules/node_modules/pace-js/pace.js","webpack://providerportal/./node_modules/src/app/ts/modules/loading.ts","webpack://providerportal/./node_modules/node_modules/humanize-plus/dist/humanize.js","webpack://providerportal/./node_modules/src/app/ts/modules/multiselectcontextmenuitem.ts","webpack://providerportal/./node_modules/src/app/ts/modules/multiselecttable.ts","webpack://providerportal/./node_modules/src/app/ts/modules/photoviewer.ts","webpack://providerportal/./node_modules/src/app/ts/modules/realtimevalidation.ts","webpack://providerportal/./node_modules/src/app/ts/modules/richtext.ts","webpack://providerportal/./node_modules/src/app/ts/modules/searchfield.ts","webpack://providerportal/./node_modules/src/app/ts/modules/tabs.ts","webpack://providerportal/./node_modules/src/app/ts/modules/thumbnaildownloader.ts","webpack://providerportal/./node_modules/src/app/ts/modules/togglestate.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/actionresult.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/autorequest.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/autosave.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/pdfurlbuilder.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/documentdatapoll.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/documentviewer.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/errormessage.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/eventlistener.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/eventnotifier.ts","webpack://providerportal/./node_modules/src/app/ts/modules/filteritems.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/listbinding.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/handleswindownavigation.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/navigate.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/optional.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/readonlyif.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/removeelement.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/required.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/showif.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/showpassword.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/transformtexttolink.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/valuebinding.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/visibility.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/togglevalue.ts","webpack://providerportal/./node_modules/src/app/ts/application.ts","webpack://providerportal/./node_modules/src/app/ts/patches.ts","webpack://providerportal/./node_modules/src/app/ts/polyfills.ts","webpack://providerportal/./node_modules/src/app/ts/modules/remotepopover.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/autoheighttable.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/checkboxvalidationhandler.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/dateexpression.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/fieldvalidationhandler.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/haschanges.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/mathexpressions.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/multiselectdropdownvalidationhandler.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/namevalidationhandler.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/personname.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/phonevalidationhandler.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/printpreview.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/radiovalidationhandler.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/keyboardfocusbounds.ts","webpack://providerportal/./node_modules/src/app/ts/modules/draganddropupload.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/dropdownvalidationhandler.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/daterangevalidationhandler.ts","webpack://providerportal/./node_modules/src/app/ts/utilities/formvalidation/asyncfilevalidationhandler.ts","webpack://providerportal/./node_modules/src/app/ts/wireup.ts","webpack://providerportal/./node_modules/src/app/ts/modules/asyncfilefield.ts","webpack://providerportal/./node_modules/sysend/sysend.js"],"sourcesContent":["var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../../source-map-loader/dist/cjs.js!./rustig.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"Rustig\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"Rustig\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","\"use strict\";\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n if (typeof globalThis === \"object\") {\n return globalThis;\n }\n var g;\n try {\n // This works if eval is allowed (see CSP)\n // eslint-disable-next-line no-new-func\n g = this || new Function(\"return this\")();\n } catch (e) {\n // This works if the window reference is available\n if (typeof window === \"object\") {\n return window;\n }\n\n // This works if the self reference is available\n if (typeof self === \"object\") {\n return self;\n }\n\n // This works if the global reference is available\n if (typeof global !== \"undefined\") {\n return global;\n }\n }\n return g;\n}();","/* humanize.js - v1.8.2 */\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\n/**\n * Copyright 2013-2016 HubSpotDev\n * MIT Licensed\n *\n * @module humanize.js\n */\n\n(function (root, factory) {\n if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n define([], function () {\n return root.Humanize = factory();\n });\n } else {\n root.Humanize = factory();\n }\n})(this, function () {\n //------------------------------------------------------------------------------\n // Constants\n //------------------------------------------------------------------------------\n\n var TIME_FORMATS = [{\n name: 'second',\n value: 1e3\n }, {\n name: 'minute',\n value: 6e4\n }, {\n name: 'hour',\n value: 36e5\n }, {\n name: 'day',\n value: 864e5\n }, {\n name: 'week',\n value: 6048e5\n }];\n\n var LABELS_FOR_POWERS_OF_KILO = {\n P: Math.pow(2, 50),\n T: Math.pow(2, 40),\n G: Math.pow(2, 30),\n M: Math.pow(2, 20)\n };\n\n //------------------------------------------------------------------------------\n // Helpers\n //------------------------------------------------------------------------------\n\n var exists = function exists(maybe) {\n return typeof maybe !== 'undefined' && maybe !== null;\n };\n\n var isNaN = function isNaN(value) {\n return value !== value;\n }; // eslint-disable-line\n\n var isFiniteNumber = function isFiniteNumber(value) {\n return isFinite(value) && !isNaN(parseFloat(value));\n };\n\n var isArray = function isArray(value) {\n var type = Object.prototype.toString.call(value);\n return type === '[object Array]';\n };\n\n //------------------------------------------------------------------------------\n // Humanize\n //------------------------------------------------------------------------------\n\n var Humanize = {\n\n // Converts a large integer to a friendly text representation.\n\n intword: function intword(number, charWidth) {\n var decimals = arguments.length <= 2 || arguments[2] === undefined ? 2 : arguments[2];\n\n /*\n * This method is deprecated. Please use compactInteger instead.\n * intword will be going away in the next major version.\n */\n return Humanize.compactInteger(number, decimals);\n },\n\n\n // Converts an integer into its most compact representation\n compactInteger: function compactInteger(input) {\n var decimals = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n decimals = Math.max(decimals, 0);\n var number = parseInt(input, 10);\n var signString = number < 0 ? '-' : '';\n var unsignedNumber = Math.abs(number);\n var unsignedNumberString = String(unsignedNumber);\n var numberLength = unsignedNumberString.length;\n var numberLengths = [13, 10, 7, 4];\n var bigNumPrefixes = ['T', 'B', 'M', 'k'];\n\n // small numbers\n if (unsignedNumber < 1000) {\n return '' + signString + unsignedNumberString;\n }\n\n // really big numbers\n if (numberLength > numberLengths[0] + 3) {\n return number.toExponential(decimals).replace('e+', 'x10^');\n }\n\n // 999 < unsignedNumber < 999,999,999,999,999\n var length = void 0;\n for (var i = 0; i < numberLengths.length; i++) {\n var _length = numberLengths[i];\n if (numberLength >= _length) {\n length = _length;\n break;\n }\n }\n\n var decimalIndex = numberLength - length + 1;\n var unsignedNumberCharacterArray = unsignedNumberString.split('');\n\n var wholePartArray = unsignedNumberCharacterArray.slice(0, decimalIndex);\n var decimalPartArray = unsignedNumberCharacterArray.slice(decimalIndex, decimalIndex + decimals + 1);\n\n var wholePart = wholePartArray.join('');\n\n // pad decimalPart if necessary\n var decimalPart = decimalPartArray.join('');\n if (decimalPart.length < decimals) {\n decimalPart += '' + Array(decimals - decimalPart.length + 1).join('0');\n }\n\n var output = void 0;\n if (decimals === 0) {\n output = '' + signString + wholePart + bigNumPrefixes[numberLengths.indexOf(length)];\n } else {\n var outputNumber = Number(wholePart + '.' + decimalPart).toFixed(decimals);\n output = '' + signString + outputNumber + bigNumPrefixes[numberLengths.indexOf(length)];\n }\n\n return output;\n },\n\n\n // Converts an integer to a string containing commas every three digits.\n intComma: function intComma(number) {\n var decimals = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n return Humanize.formatNumber(number, decimals);\n },\n intcomma: function intcomma() {\n return Humanize.intComma.apply(Humanize, arguments);\n },\n\n\n // Formats the value like a 'human-readable' file size (i.e. '13 KB', '4.1 MB', '102 bytes', etc).\n fileSize: function fileSize(filesize) {\n var precision = arguments.length <= 1 || arguments[1] === undefined ? 2 : arguments[1];\n\n for (var label in LABELS_FOR_POWERS_OF_KILO) {\n if (LABELS_FOR_POWERS_OF_KILO.hasOwnProperty(label)) {\n var minnum = LABELS_FOR_POWERS_OF_KILO[label];\n if (filesize >= minnum) {\n return Humanize.formatNumber(filesize / minnum, precision, '') + ' ' + label + 'B';\n }\n }\n }\n if (filesize >= 1024) {\n return Humanize.formatNumber(filesize / 1024, 0) + ' KB';\n }\n\n return Humanize.formatNumber(filesize, 0) + Humanize.pluralize(filesize, ' byte');\n },\n filesize: function filesize() {\n return Humanize.fileSize.apply(Humanize, arguments);\n },\n\n\n // Formats a number to a human-readable string.\n // Localize by overriding the precision, thousand and decimal arguments.\n formatNumber: function formatNumber(number) {\n var precision = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n var thousand = arguments.length <= 2 || arguments[2] === undefined ? ',' : arguments[2];\n var decimal = arguments.length <= 3 || arguments[3] === undefined ? '.' : arguments[3];\n\n // Create some private utility functions to make the computational\n // code that follows much easier to read.\n var firstComma = function firstComma(_number, _thousand, _position) {\n return _position ? _number.substr(0, _position) + _thousand : '';\n };\n\n var commas = function commas(_number, _thousand, _position) {\n return _number.substr(_position).replace(/(\\d{3})(?=\\d)/g, '$1' + _thousand);\n };\n\n var decimals = function decimals(_number, _decimal, usePrecision) {\n return usePrecision ? _decimal + Humanize.toFixed(Math.abs(_number), usePrecision).split('.')[1] : '';\n };\n\n var usePrecision = Humanize.normalizePrecision(precision);\n\n // Do some calc\n var negative = number < 0 && '-' || '';\n var base = String(parseInt(Humanize.toFixed(Math.abs(number || 0), usePrecision), 10));\n var mod = base.length > 3 ? base.length % 3 : 0;\n\n // Format the number\n return negative + firstComma(base, thousand, mod) + commas(base, thousand, mod) + decimals(number, decimal, usePrecision);\n },\n\n\n // Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61')\n toFixed: function toFixed(value, precision) {\n precision = exists(precision) ? precision : Humanize.normalizePrecision(precision, 0);\n var power = Math.pow(10, precision);\n\n // Multiply up by precision, round accurately, then divide and use native toFixed()\n return (Math.round(value * power) / power).toFixed(precision);\n },\n\n\n // Ensures precision value is a positive integer\n normalizePrecision: function normalizePrecision(value, base) {\n value = Math.round(Math.abs(value));\n return isNaN(value) ? base : value;\n },\n\n\n // Converts an integer to its ordinal as a string.\n ordinal: function ordinal(value) {\n var number = parseInt(value, 10);\n\n if (number === 0) {\n return value;\n }\n\n var specialCase = number % 100;\n if ([11, 12, 13].indexOf(specialCase) >= 0) {\n return number + 'th';\n }\n\n var leastSignificant = number % 10;\n\n var end = void 0;\n switch (leastSignificant) {\n case 1:\n end = 'st';\n break;\n case 2:\n end = 'nd';\n break;\n case 3:\n end = 'rd';\n break;\n default:\n end = 'th';\n }\n\n return '' + number + end;\n },\n\n\n // Interprets numbers as occurences. Also accepts an optional array/map of overrides.\n times: function times(value) {\n var overrides = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n if (isFiniteNumber(value) && value >= 0) {\n var number = parseFloat(value);\n var smallTimes = ['never', 'once', 'twice'];\n if (exists(overrides[number])) {\n return String(overrides[number]);\n }\n\n var numberString = exists(smallTimes[number]) && smallTimes[number].toString();\n return numberString || number.toString() + ' times';\n }\n return null;\n },\n\n\n // Returns the plural version of a given word if the value is not 1. The default suffix is 's'.\n pluralize: function pluralize(number, singular, plural) {\n if (!(exists(number) && exists(singular))) {\n return null;\n }\n\n plural = exists(plural) ? plural : singular + 's';\n\n return parseInt(number, 10) === 1 ? singular : plural;\n },\n\n\n // Truncates a string if it is longer than the specified number of characters (inclusive).\n // Truncated strings will end with a translatable ellipsis sequence (\"…\").\n truncate: function truncate(str) {\n var length = arguments.length <= 1 || arguments[1] === undefined ? 100 : arguments[1];\n var ending = arguments.length <= 2 || arguments[2] === undefined ? '...' : arguments[2];\n\n if (str.length > length) {\n return str.substring(0, length - ending.length) + ending;\n }\n return str;\n },\n\n\n // Truncates a string after a certain number of words.\n truncateWords: function truncateWords(string, length) {\n var array = string.split(' ');\n var result = '';\n var i = 0;\n\n while (i < length) {\n if (exists(array[i])) {\n result += array[i] + ' ';\n }\n i++;\n }\n\n if (array.length > length) {\n return result + '...';\n }\n\n return null;\n },\n truncatewords: function truncatewords() {\n return Humanize.truncateWords.apply(Humanize, arguments);\n },\n\n\n // Truncates a number to an upper bound.\n boundedNumber: function boundedNumber(num) {\n var bound = arguments.length <= 1 || arguments[1] === undefined ? 100 : arguments[1];\n var ending = arguments.length <= 2 || arguments[2] === undefined ? '+' : arguments[2];\n\n var result = void 0;\n\n if (isFiniteNumber(num) && isFiniteNumber(bound)) {\n if (num > bound) {\n result = bound + ending;\n }\n }\n\n return (result || num).toString();\n },\n truncatenumber: function truncatenumber() {\n return Humanize.boundedNumber.apply(Humanize, arguments);\n },\n\n\n // Converts a list of items to a human readable string with an optional limit.\n oxford: function oxford(items, limit, limitStr) {\n var numItems = items.length;\n\n var limitIndex = void 0;\n if (numItems < 2) {\n return String(items);\n } else if (numItems === 2) {\n return items.join(' and ');\n } else if (exists(limit) && numItems > limit) {\n var extra = numItems - limit;\n limitIndex = limit;\n limitStr = exists(limitStr) ? limitStr : ', and ' + extra + ' ' + Humanize.pluralize(extra, 'other');\n } else {\n limitIndex = -1;\n limitStr = ', and ' + items[numItems - 1];\n }\n\n return items.slice(0, limitIndex).join(', ') + limitStr;\n },\n\n\n // Converts an object to a definition-like string\n dictionary: function dictionary(object) {\n var joiner = arguments.length <= 1 || arguments[1] === undefined ? ' is ' : arguments[1];\n var separator = arguments.length <= 2 || arguments[2] === undefined ? ', ' : arguments[2];\n\n var result = '';\n\n if (exists(object) && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && !isArray(object)) {\n var defs = [];\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n var val = object[key];\n defs.push('' + key + joiner + val);\n }\n }\n\n return defs.join(separator);\n }\n\n return result;\n },\n\n\n // Describes how many times an item appears in a list\n frequency: function frequency(list, verb) {\n if (!isArray(list)) {\n return null;\n }\n\n var len = list.length;\n var times = Humanize.times(len);\n\n if (len === 0) {\n return times + ' ' + verb;\n }\n\n return verb + ' ' + times;\n },\n pace: function pace(value, intervalMs) {\n var unit = arguments.length <= 2 || arguments[2] === undefined ? 'time' : arguments[2];\n\n if (value === 0 || intervalMs === 0) {\n // Needs a better string than this...\n return 'No ' + Humanize.pluralize(0, unit);\n }\n\n // Expose these as overridables?\n var prefix = 'Approximately';\n var timeUnit = void 0;\n var relativePace = void 0;\n\n var rate = value / intervalMs;\n for (var i = 0; i < TIME_FORMATS.length; ++i) {\n // assumes sorted list\n var f = TIME_FORMATS[i];\n relativePace = rate * f.value;\n if (relativePace > 1) {\n timeUnit = f.name;\n break;\n }\n }\n\n // Use the last time unit if there is nothing smaller\n if (!timeUnit) {\n prefix = 'Less than';\n relativePace = 1;\n timeUnit = TIME_FORMATS[TIME_FORMATS.length - 1].name;\n }\n\n var roundedPace = Math.round(relativePace);\n unit = Humanize.pluralize(roundedPace, unit);\n\n return prefix + ' ' + roundedPace + ' ' + unit + ' per ' + timeUnit;\n },\n\n\n // Converts newlines to
tags\n nl2br: function nl2br(string) {\n var replacement = arguments.length <= 1 || arguments[1] === undefined ? '
' : arguments[1];\n\n return string.replace(/\\n/g, replacement);\n },\n\n\n // Converts
tags to newlines\n br2nl: function br2nl(string) {\n var replacement = arguments.length <= 1 || arguments[1] === undefined ? '\\r\\n' : arguments[1];\n\n return string.replace(/\\/g, replacement);\n },\n\n\n // Capitalizes first letter in a string\n capitalize: function capitalize(string) {\n var downCaseTail = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n return '' + string.charAt(0).toUpperCase() + (downCaseTail ? string.slice(1).toLowerCase() : string.slice(1));\n },\n\n\n // Capitalizes the first letter of each word in a string\n capitalizeAll: function capitalizeAll(string) {\n return string.replace(/(?:^|\\s)\\S/g, function (a) {\n return a.toUpperCase();\n });\n },\n\n\n // Titlecase words in a string.\n titleCase: function titleCase(string) {\n var smallWords = /\\b(a|an|and|at|but|by|de|en|for|if|in|of|on|or|the|to|via|vs?\\.?)\\b/i;\n var internalCaps = /\\S+[A-Z]+\\S*/;\n var splitOnWhiteSpaceRegex = /\\s+/;\n var splitOnHyphensRegex = /-/;\n\n var _doTitleCase = void 0;\n _doTitleCase = function doTitleCase(_string) {\n var hyphenated = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n var firstOrLast = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];\n\n var titleCasedArray = [];\n var stringArray = _string.split(hyphenated ? splitOnHyphensRegex : splitOnWhiteSpaceRegex);\n\n for (var index = 0; index < stringArray.length; ++index) {\n var word = stringArray[index];\n if (word.indexOf('-') !== -1) {\n titleCasedArray.push(_doTitleCase(word, true, index === 0 || index === stringArray.length - 1));\n continue;\n }\n\n if (firstOrLast && (index === 0 || index === stringArray.length - 1)) {\n titleCasedArray.push(internalCaps.test(word) ? word : Humanize.capitalize(word));\n continue;\n }\n\n if (internalCaps.test(word)) {\n titleCasedArray.push(word);\n } else if (smallWords.test(word)) {\n titleCasedArray.push(word.toLowerCase());\n } else {\n titleCasedArray.push(Humanize.capitalize(word));\n }\n }\n\n return titleCasedArray.join(hyphenated ? '-' : ' ');\n };\n\n return _doTitleCase(string);\n },\n titlecase: function titlecase() {\n return Humanize.titleCase.apply(Humanize, arguments);\n }\n };\n\n return Humanize;\n});","//! moment.js locale configuration\n//! locale : afrikaans (af)\n//! author : Werner Mollentze : https://github.com/wernerm\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var af = moment.defineLocale('af', {\n months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n meridiemParse: /vm|nm/i,\n isPM : function (input) {\n return /^nm$/i.test(input);\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'vm' : 'VM';\n } else {\n return isLower ? 'nm' : 'NM';\n }\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Vandag om] LT',\n nextDay : '[Môre om] LT',\n nextWeek : 'dddd [om] LT',\n lastDay : '[Gister om] LT',\n lastWeek : '[Laas] dddd [om] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'oor %s',\n past : '%s gelede',\n s : '\\'n paar sekondes',\n m : '\\'n minuut',\n mm : '%d minute',\n h : '\\'n uur',\n hh : '%d ure',\n d : '\\'n dag',\n dd : '%d dae',\n M : '\\'n maand',\n MM : '%d maande',\n y : '\\'n jaar',\n yy : '%d jaar'\n },\n ordinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n },\n week : {\n dow : 1, // Maandag is die eerste dag van die week.\n doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n }\n });\n\n return af;\n\n}));","//! moment.js locale configuration\n//! locale : Moroccan Arabic (ar-ma)\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var ar_ma = moment.defineLocale('ar-ma', {\n months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ar_ma;\n\n}));","//! moment.js locale configuration\n//! locale : Arabic Saudi Arabia (ar-sa)\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '١',\n '2': '٢',\n '3': '٣',\n '4': '٤',\n '5': '٥',\n '6': '٦',\n '7': '٧',\n '8': '٨',\n '9': '٩',\n '0': '٠'\n }, numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0'\n };\n\n var ar_sa = moment.defineLocale('ar-sa', {\n months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ص|م/,\n isPM : function (input) {\n return 'م' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar : {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'في %s',\n past : 'منذ %s',\n s : 'ثوان',\n m : 'دقيقة',\n mm : '%d دقائق',\n h : 'ساعة',\n hh : '%d ساعات',\n d : 'يوم',\n dd : '%d أيام',\n M : 'شهر',\n MM : '%d أشهر',\n y : 'سنة',\n yy : '%d سنوات'\n },\n preparse: function (string) {\n return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ar_sa;\n\n}));","//! moment.js locale configuration\n//! locale : Tunisian Arabic (ar-tn)\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var ar_tn = moment.defineLocale('ar-tn', {\n months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات'\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ar_tn;\n\n}));","//! moment.js locale configuration\n//! Locale: Arabic (ar)\n//! Author: Abdel Said: https://github.com/abdelsaid\n//! Changes in months, weekdays: Ahmed Elkhatib\n//! Native plural forms: forabi https://github.com/forabi\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '١',\n '2': '٢',\n '3': '٣',\n '4': '٤',\n '5': '٥',\n '6': '٦',\n '7': '٧',\n '8': '٨',\n '9': '٩',\n '0': '٠'\n }, numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0'\n }, pluralForm = function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n }, plurals = {\n s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n }, pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n }, months = [\n 'كانون الثاني يناير',\n 'شباط فبراير',\n 'آذار مارس',\n 'نيسان أبريل',\n 'أيار مايو',\n 'حزيران يونيو',\n 'تموز يوليو',\n 'آب أغسطس',\n 'أيلول سبتمبر',\n 'تشرين الأول أكتوبر',\n 'تشرين الثاني نوفمبر',\n 'كانون الأول ديسمبر'\n ];\n\n var ar = moment.defineLocale('ar', {\n months : months,\n monthsShort : months,\n weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'D/\\u200FM/\\u200FYYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ص|م/,\n isPM : function (input) {\n return 'م' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar : {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'بعد %s',\n past : 'منذ %s',\n s : pluralize('s'),\n m : pluralize('m'),\n mm : pluralize('m'),\n h : pluralize('h'),\n hh : pluralize('h'),\n d : pluralize('d'),\n dd : pluralize('d'),\n M : pluralize('M'),\n MM : pluralize('M'),\n y : pluralize('y'),\n yy : pluralize('y')\n },\n preparse: function (string) {\n return string.replace(/\\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ar;\n\n}));","//! moment.js locale configuration\n//! locale : azerbaijani (az)\n//! author : topchiyev : https://github.com/topchiyev\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var suffixes = {\n 1: '-inci',\n 5: '-inci',\n 8: '-inci',\n 70: '-inci',\n 80: '-inci',\n 2: '-nci',\n 7: '-nci',\n 20: '-nci',\n 50: '-nci',\n 3: '-üncü',\n 4: '-üncü',\n 100: '-üncü',\n 6: '-ncı',\n 9: '-uncu',\n 10: '-uncu',\n 30: '-uncu',\n 60: '-ıncı',\n 90: '-ıncı'\n };\n\n var az = moment.defineLocale('az', {\n months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[bugün saat] LT',\n nextDay : '[sabah saat] LT',\n nextWeek : '[gələn həftə] dddd [saat] LT',\n lastDay : '[dünən] LT',\n lastWeek : '[keçən həftə] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s sonra',\n past : '%s əvvəl',\n s : 'birneçə saniyyə',\n m : 'bir dəqiqə',\n mm : '%d dəqiqə',\n h : 'bir saat',\n hh : '%d saat',\n d : 'bir gün',\n dd : '%d gün',\n M : 'bir ay',\n MM : '%d ay',\n y : 'bir il',\n yy : '%d il'\n },\n meridiemParse: /gecə|səhər|gündüz|axşam/,\n isPM : function (input) {\n return /^(gündüz|axşam)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'gecə';\n } else if (hour < 12) {\n return 'səhər';\n } else if (hour < 17) {\n return 'gündüz';\n } else {\n return 'axşam';\n }\n },\n ordinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n ordinal : function (number) {\n if (number === 0) { // special case for zero\n return number + '-ıncı';\n }\n var a = number % 10,\n b = number % 100 - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return az;\n\n}));","//! moment.js locale configuration\n//! locale : belarusian (be)\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n 'dd': 'дзень_дні_дзён',\n 'MM': 'месяц_месяцы_месяцаў',\n 'yy': 'год_гады_гадоў'\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвіліна' : 'хвіліну';\n }\n else if (key === 'h') {\n return withoutSuffix ? 'гадзіна' : 'гадзіну';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n function monthsCaseReplace(m, format) {\n var months = {\n 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'),\n 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_')\n },\n nounCase = (/D[oD]?(\\[[^\\[\\]]*\\]|\\s+)+MMMM?/).test(format) ?\n 'accusative' :\n 'nominative';\n return months[nounCase][m.month()];\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n 'nominative': 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n 'accusative': 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_')\n },\n nounCase = (/\\[ ?[Вв] ?(?:мінулую|наступную)? ?\\] ?dddd/).test(format) ?\n 'accusative' :\n 'nominative';\n return weekdays[nounCase][m.day()];\n }\n\n var be = moment.defineLocale('be', {\n months : monthsCaseReplace,\n monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n weekdays : weekdaysCaseReplace,\n weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY г.',\n LLL : 'D MMMM YYYY г., HH:mm',\n LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n },\n calendar : {\n sameDay: '[Сёння ў] LT',\n nextDay: '[Заўтра ў] LT',\n lastDay: '[Учора ў] LT',\n nextWeek: function () {\n return '[У] dddd [ў] LT';\n },\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return '[У мінулую] dddd [ў] LT';\n case 1:\n case 2:\n case 4:\n return '[У мінулы] dddd [ў] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'праз %s',\n past : '%s таму',\n s : 'некалькі секунд',\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : relativeTimeWithPlural,\n hh : relativeTimeWithPlural,\n d : 'дзень',\n dd : relativeTimeWithPlural,\n M : 'месяц',\n MM : relativeTimeWithPlural,\n y : 'год',\n yy : relativeTimeWithPlural\n },\n meridiemParse: /ночы|раніцы|дня|вечара/,\n isPM : function (input) {\n return /^(дня|вечара)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночы';\n } else if (hour < 12) {\n return 'раніцы';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечара';\n }\n },\n ordinalParse: /\\d{1,2}-(і|ы|га)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n case 'D':\n return number + '-га';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return be;\n\n}));","//! moment.js locale configuration\n//! locale : bulgarian (bg)\n//! author : Krasen Borisov : https://github.com/kraz\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var bg = moment.defineLocale('bg', {\n months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'D.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Днес в] LT',\n nextDay : '[Утре в] LT',\n nextWeek : 'dddd [в] LT',\n lastDay : '[Вчера в] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[В изминалата] dddd [в] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[В изминалия] dddd [в] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'след %s',\n past : 'преди %s',\n s : 'няколко секунди',\n m : 'минута',\n mm : '%d минути',\n h : 'час',\n hh : '%d часа',\n d : 'ден',\n dd : '%d дни',\n M : 'месец',\n MM : '%d месеца',\n y : 'година',\n yy : '%d години'\n },\n ordinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal : function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return bg;\n\n}));","//! moment.js locale configuration\n//! locale : Bengali (bn)\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '১',\n '2': '২',\n '3': '৩',\n '4': '৪',\n '5': '৫',\n '6': '৬',\n '7': '৭',\n '8': '৮',\n '9': '৯',\n '0': '০'\n },\n numberMap = {\n '১': '1',\n '২': '2',\n '৩': '3',\n '৪': '4',\n '৫': '5',\n '৬': '6',\n '৭': '7',\n '৮': '8',\n '৯': '9',\n '০': '0'\n };\n\n var bn = moment.defineLocale('bn', {\n months : 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n monthsShort : 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split('_'),\n weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার'.split('_'),\n weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি'.split('_'),\n weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split('_'),\n longDateFormat : {\n LT : 'A h:mm সময়',\n LTS : 'A h:mm:ss সময়',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm সময়',\n LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n },\n calendar : {\n sameDay : '[আজ] LT',\n nextDay : '[আগামীকাল] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[গতকাল] LT',\n lastWeek : '[গত] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s পরে',\n past : '%s আগে',\n s : 'কএক সেকেন্ড',\n m : 'এক মিনিট',\n mm : '%d মিনিট',\n h : 'এক ঘন্টা',\n hh : '%d ঘন্টা',\n d : 'এক দিন',\n dd : '%d দিন',\n M : 'এক মাস',\n MM : '%d মাস',\n y : 'এক বছর',\n yy : '%d বছর'\n },\n preparse: function (string) {\n return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /রাত|সকাল|দুপুর|বিকেল|রাত/,\n isPM: function (input) {\n return /^(দুপুর|বিকেল|রাত)$/.test(input);\n },\n //Bengali is a vast language its spoken\n //in different forms in various parts of the world.\n //I have just generalized with most common one used\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'রাত';\n } else if (hour < 10) {\n return 'সকাল';\n } else if (hour < 17) {\n return 'দুপুর';\n } else if (hour < 20) {\n return 'বিকেল';\n } else {\n return 'রাত';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return bn;\n\n}));","//! moment.js locale configuration\n//! locale : tibetan (bo)\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '༡',\n '2': '༢',\n '3': '༣',\n '4': '༤',\n '5': '༥',\n '6': '༦',\n '7': '༧',\n '8': '༨',\n '9': '༩',\n '0': '༠'\n },\n numberMap = {\n '༡': '1',\n '༢': '2',\n '༣': '3',\n '༤': '4',\n '༥': '5',\n '༦': '6',\n '༧': '7',\n '༨': '8',\n '༩': '9',\n '༠': '0'\n };\n\n var bo = moment.defineLocale('bo', {\n months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n longDateFormat : {\n LT : 'A h:mm',\n LTS : 'A h:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm',\n LLLL : 'dddd, D MMMM YYYY, A h:mm'\n },\n calendar : {\n sameDay : '[དི་རིང] LT',\n nextDay : '[སང་ཉིན] LT',\n nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n lastDay : '[ཁ་སང] LT',\n lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s ལ་',\n past : '%s སྔན་ལ',\n s : 'ལམ་སང',\n m : 'སྐར་མ་གཅིག',\n mm : '%d སྐར་མ',\n h : 'ཆུ་ཚོད་གཅིག',\n hh : '%d ཆུ་ཚོད',\n d : 'ཉིན་གཅིག',\n dd : '%d ཉིན་',\n M : 'ཟླ་བ་གཅིག',\n MM : '%d ཟླ་བ',\n y : 'ལོ་གཅིག',\n yy : '%d ལོ'\n },\n preparse: function (string) {\n return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n isPM: function (input) {\n return /^(ཉིན་གུང|དགོང་དག|མཚན་མོ)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'མཚན་མོ';\n } else if (hour < 10) {\n return 'ཞོགས་ཀས';\n } else if (hour < 17) {\n return 'ཉིན་གུང';\n } else if (hour < 20) {\n return 'དགོང་དག';\n } else {\n return 'མཚན་མོ';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return bo;\n\n}));","//! moment.js locale configuration\n//! locale : breton (br)\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function relativeTimeWithMutation(number, withoutSuffix, key) {\n var format = {\n 'mm': 'munutenn',\n 'MM': 'miz',\n 'dd': 'devezh'\n };\n return number + ' ' + mutation(format[key], number);\n }\n function specialMutationForYears(number) {\n switch (lastNumber(number)) {\n case 1:\n case 3:\n case 4:\n case 5:\n case 9:\n return number + ' bloaz';\n default:\n return number + ' vloaz';\n }\n }\n function lastNumber(number) {\n if (number > 9) {\n return lastNumber(number % 10);\n }\n return number;\n }\n function mutation(text, number) {\n if (number === 2) {\n return softMutation(text);\n }\n return text;\n }\n function softMutation(text) {\n var mutationTable = {\n 'm': 'v',\n 'b': 'v',\n 'd': 'z'\n };\n if (mutationTable[text.charAt(0)] === undefined) {\n return text;\n }\n return mutationTable[text.charAt(0)] + text.substring(1);\n }\n\n var br = moment.defineLocale('br', {\n months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n longDateFormat : {\n LT : 'h[e]mm A',\n LTS : 'h[e]mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D [a viz] MMMM YYYY',\n LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n },\n calendar : {\n sameDay : '[Hiziv da] LT',\n nextDay : '[Warc\\'hoazh da] LT',\n nextWeek : 'dddd [da] LT',\n lastDay : '[Dec\\'h da] LT',\n lastWeek : 'dddd [paset da] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'a-benn %s',\n past : '%s \\'zo',\n s : 'un nebeud segondennoù',\n m : 'ur vunutenn',\n mm : relativeTimeWithMutation,\n h : 'un eur',\n hh : '%d eur',\n d : 'un devezh',\n dd : relativeTimeWithMutation,\n M : 'ur miz',\n MM : relativeTimeWithMutation,\n y : 'ur bloaz',\n yy : specialMutationForYears\n },\n ordinalParse: /\\d{1,2}(añ|vet)/,\n ordinal : function (number) {\n var output = (number === 1) ? 'añ' : 'vet';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return br;\n\n}));","//! moment.js locale configuration\n//! locale : bosnian (bs)\n//! author : Nedim Cholich : https://github.com/frontyard\n//! based on (hr) translation by Bojan Marković\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var bs = moment.defineLocale('bs', {\n months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD. MM. YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danas u] LT',\n nextDay : '[sutra u] LT',\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[jučer u] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n return '[prošlu] dddd [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'par sekundi',\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : 'dan',\n dd : translate,\n M : 'mjesec',\n MM : translate,\n y : 'godinu',\n yy : translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return bs;\n\n}));","//! moment.js locale configuration\n//! locale : catalan (ca)\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var ca = moment.defineLocale('ca', {\n months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),\n weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'LT:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : function () {\n return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n nextDay : function () {\n return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n lastDay : function () {\n return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'en %s',\n past : 'fa %s',\n s : 'uns segons',\n m : 'un minut',\n mm : '%d minuts',\n h : 'una hora',\n hh : '%d hores',\n d : 'un dia',\n dd : '%d dies',\n M : 'un mes',\n MM : '%d mesos',\n y : 'un any',\n yy : '%d anys'\n },\n ordinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal : function (number, period) {\n var output = (number === 1) ? 'r' :\n (number === 2) ? 'n' :\n (number === 3) ? 'r' :\n (number === 4) ? 't' : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return ca;\n\n}));","//! moment.js locale configuration\n//! locale : czech (cs)\n//! author : petrbela : https://github.com/petrbela\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n function plural(n) {\n return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minuty' : 'minut');\n } else {\n return result + 'minutami';\n }\n break;\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodin');\n } else {\n return result + 'hodinami';\n }\n break;\n case 'd': // a day / in a day / a day ago\n return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dny' : 'dní');\n } else {\n return result + 'dny';\n }\n break;\n case 'M': // a month / in a month / a month ago\n return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'měsíce' : 'měsíců');\n } else {\n return result + 'měsíci';\n }\n break;\n case 'y': // a year / in a year / a year ago\n return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'let');\n } else {\n return result + 'lety';\n }\n break;\n }\n }\n\n var cs = moment.defineLocale('cs', {\n months : months,\n monthsShort : monthsShort,\n monthsParse : (function (months, monthsShort) {\n var i, _monthsParse = [];\n for (i = 0; i < 12; i++) {\n // use custom parser to solve problem with July (červenec)\n _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');\n }\n return _monthsParse;\n }(months, monthsShort)),\n weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n longDateFormat : {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay: '[dnes v] LT',\n nextDay: '[zítra v] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v neděli v] LT';\n case 1:\n case 2:\n return '[v] dddd [v] LT';\n case 3:\n return '[ve středu v] LT';\n case 4:\n return '[ve čtvrtek v] LT';\n case 5:\n return '[v pátek v] LT';\n case 6:\n return '[v sobotu v] LT';\n }\n },\n lastDay: '[včera v] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulou neděli v] LT';\n case 1:\n case 2:\n return '[minulé] dddd [v] LT';\n case 3:\n return '[minulou středu v] LT';\n case 4:\n case 5:\n return '[minulý] dddd [v] LT';\n case 6:\n return '[minulou sobotu v] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'před %s',\n s : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n ordinalParse : /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return cs;\n\n}));","//! moment.js locale configuration\n//! locale : chuvash (cv)\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var cv = moment.defineLocale('cv', {\n months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n },\n calendar : {\n sameDay: '[Паян] LT [сехетре]',\n nextDay: '[Ыран] LT [сехетре]',\n lastDay: '[Ӗнер] LT [сехетре]',\n nextWeek: '[Ҫитес] dddd LT [сехетре]',\n lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n sameElse: 'L'\n },\n relativeTime : {\n future : function (output) {\n var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n return output + affix;\n },\n past : '%s каялла',\n s : 'пӗр-ик ҫеккунт',\n m : 'пӗр минут',\n mm : '%d минут',\n h : 'пӗр сехет',\n hh : '%d сехет',\n d : 'пӗр кун',\n dd : '%d кун',\n M : 'пӗр уйӑх',\n MM : '%d уйӑх',\n y : 'пӗр ҫул',\n yy : '%d ҫул'\n },\n ordinalParse: /\\d{1,2}-мӗш/,\n ordinal : '%d-мӗш',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return cv;\n\n}));","//! moment.js locale configuration\n//! locale : Welsh (cy)\n//! author : Robert Allen\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var cy = moment.defineLocale('cy', {\n months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n // time formats are the same as en-gb\n longDateFormat: {\n LT: 'HH:mm',\n LTS : 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[Heddiw am] LT',\n nextDay: '[Yfory am] LT',\n nextWeek: 'dddd [am] LT',\n lastDay: '[Ddoe am] LT',\n lastWeek: 'dddd [diwethaf am] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'mewn %s',\n past: '%s yn ôl',\n s: 'ychydig eiliadau',\n m: 'munud',\n mm: '%d munud',\n h: 'awr',\n hh: '%d awr',\n d: 'diwrnod',\n dd: '%d diwrnod',\n M: 'mis',\n MM: '%d mis',\n y: 'blwyddyn',\n yy: '%d flynedd'\n },\n ordinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n ordinal: function (number) {\n var b = number,\n output = '',\n lookup = [\n '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n ];\n if (b > 20) {\n if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n output = 'fed'; // not 30ain, 70ain or 90ain\n } else {\n output = 'ain';\n }\n } else if (b > 0) {\n output = lookup[b];\n }\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return cy;\n\n}));","//! moment.js locale configuration\n//! locale : danish (da)\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var da = moment.defineLocale('da', {\n months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd [d.] D. MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[I dag kl.] LT',\n nextDay : '[I morgen kl.] LT',\n nextWeek : 'dddd [kl.] LT',\n lastDay : '[I går kl.] LT',\n lastWeek : '[sidste] dddd [kl] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : '%s siden',\n s : 'få sekunder',\n m : 'et minut',\n mm : '%d minutter',\n h : 'en time',\n hh : '%d timer',\n d : 'en dag',\n dd : '%d dage',\n M : 'en måned',\n MM : '%d måneder',\n y : 'et år',\n yy : '%d år'\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return da;\n\n}));","//! moment.js locale configuration\n//! locale : austrian german (de-at)\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eine Minute', 'einer Minute'],\n 'h': ['eine Stunde', 'einer Stunde'],\n 'd': ['ein Tag', 'einem Tag'],\n 'dd': [number + ' Tage', number + ' Tagen'],\n 'M': ['ein Monat', 'einem Monat'],\n 'MM': [number + ' Monate', number + ' Monaten'],\n 'y': ['ein Jahr', 'einem Jahr'],\n 'yy': [number + ' Jahre', number + ' Jahren']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var de_at = moment.defineLocale('de-at', {\n months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n longDateFormat : {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd, D. MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[Morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[Gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]'\n },\n relativeTime : {\n future : 'in %s',\n past : 'vor %s',\n s : 'ein paar Sekunden',\n m : processRelativeTime,\n mm : '%d Minuten',\n h : processRelativeTime,\n hh : '%d Stunden',\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return de_at;\n\n}));","//! moment.js locale configuration\n//! locale : german (de)\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eine Minute', 'einer Minute'],\n 'h': ['eine Stunde', 'einer Stunde'],\n 'd': ['ein Tag', 'einem Tag'],\n 'dd': [number + ' Tage', number + ' Tagen'],\n 'M': ['ein Monat', 'einem Monat'],\n 'MM': [number + ' Monate', number + ' Monaten'],\n 'y': ['ein Jahr', 'einem Jahr'],\n 'yy': [number + ' Jahre', number + ' Jahren']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var de = moment.defineLocale('de', {\n months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n longDateFormat : {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY HH:mm',\n LLLL : 'dddd, D. MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[Morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[Gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]'\n },\n relativeTime : {\n future : 'in %s',\n past : 'vor %s',\n s : 'ein paar Sekunden',\n m : processRelativeTime,\n mm : '%d Minuten',\n h : processRelativeTime,\n hh : '%d Stunden',\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return de;\n\n}));","//! moment.js locale configuration\n//! locale : modern greek (el)\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var el = moment.defineLocale('el', {\n monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n months : function (momentToFormat, format) {\n if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n return this._monthsGenitiveEl[momentToFormat.month()];\n } else {\n return this._monthsNominativeEl[momentToFormat.month()];\n }\n },\n monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'μμ' : 'ΜΜ';\n } else {\n return isLower ? 'πμ' : 'ΠΜ';\n }\n },\n isPM : function (input) {\n return ((input + '').toLowerCase()[0] === 'μ');\n },\n meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendarEl : {\n sameDay : '[Σήμερα {}] LT',\n nextDay : '[Αύριο {}] LT',\n nextWeek : 'dddd [{}] LT',\n lastDay : '[Χθες {}] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 6:\n return '[το προηγούμενο] dddd [{}] LT';\n default:\n return '[την προηγούμενη] dddd [{}] LT';\n }\n },\n sameElse : 'L'\n },\n calendar : function (key, mom) {\n var output = this._calendarEl[key],\n hours = mom && mom.hours();\n if (typeof output === 'function') {\n output = output.apply(mom);\n }\n return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n },\n relativeTime : {\n future : 'σε %s',\n past : '%s πριν',\n s : 'λίγα δευτερόλεπτα',\n m : 'ένα λεπτό',\n mm : '%d λεπτά',\n h : 'μία ώρα',\n hh : '%d ώρες',\n d : 'μία μέρα',\n dd : '%d μέρες',\n M : 'ένας μήνας',\n MM : '%d μήνες',\n y : 'ένας χρόνος',\n yy : '%d χρόνια'\n },\n ordinalParse: /\\d{1,2}η/,\n ordinal: '%dη',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4st is the first week of the year.\n }\n });\n\n return el;\n\n}));","//! moment.js locale configuration\n//! locale : australian english (en-au)\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var en_au = moment.defineLocale('en-au', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n ordinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return en_au;\n\n}));","//! moment.js locale configuration\n//! locale : canadian english (en-ca)\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var en_ca = moment.defineLocale('en-ca', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'YYYY-MM-DD',\n LL : 'D MMMM, YYYY',\n LLL : 'D MMMM, YYYY h:mm A',\n LLLL : 'dddd, D MMMM, YYYY h:mm A'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n ordinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n return en_ca;\n\n}));","//! moment.js locale configuration\n//! locale : great britain english (en-gb)\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var en_gb = moment.defineLocale('en-gb', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n ordinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return en_gb;\n\n}));","//! moment.js locale configuration\n//! locale : esperanto (eo)\n//! author : Colin Dean : https://github.com/colindean\n//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.\n//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var eo = moment.defineLocale('eo', {\n months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'),\n weekdaysShort : 'Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab'.split('_'),\n weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D[-an de] MMMM, YYYY',\n LLL : 'D[-an de] MMMM, YYYY HH:mm',\n LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm'\n },\n meridiemParse: /[ap]\\.t\\.m/i,\n isPM: function (input) {\n return input.charAt(0).toLowerCase() === 'p';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'p.t.m.' : 'P.T.M.';\n } else {\n return isLower ? 'a.t.m.' : 'A.T.M.';\n }\n },\n calendar : {\n sameDay : '[Hodiaŭ je] LT',\n nextDay : '[Morgaŭ je] LT',\n nextWeek : 'dddd [je] LT',\n lastDay : '[Hieraŭ je] LT',\n lastWeek : '[pasinta] dddd [je] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'je %s',\n past : 'antaŭ %s',\n s : 'sekundoj',\n m : 'minuto',\n mm : '%d minutoj',\n h : 'horo',\n hh : '%d horoj',\n d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n dd : '%d tagoj',\n M : 'monato',\n MM : '%d monatoj',\n y : 'jaro',\n yy : '%d jaroj'\n },\n ordinalParse: /\\d{1,2}a/,\n ordinal : '%da',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return eo;\n\n}));","//! moment.js locale configuration\n//! locale : spanish (es)\n//! author : Julio Napurí : https://github.com/julionc\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var monthsShortDot = 'Ene._Feb._Mar._Abr._May._Jun._Jul._Ago._Sep._Oct._Nov._Dic.'.split('_'),\n monthsShort = 'Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Sep_Oct_Nov_Dic'.split('_');\n\n var es = moment.defineLocale('es', {\n months : 'Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre'.split('_'),\n monthsShort : function (m, format) {\n if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n weekdays : 'Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado'.split('_'),\n weekdaysShort : 'Dom._Lun._Mar._Mié._Jue._Vie._Sáb.'.split('_'),\n weekdaysMin : 'Do_Lu_Ma_Mi_Ju_Vi_Sá'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY H:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n },\n calendar : {\n sameDay : function () {\n return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextDay : function () {\n return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastDay : function () {\n return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n lastWeek : function () {\n return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'en %s',\n past : 'hace %s',\n s : 'unos segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'una hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un año',\n yy : '%d años'\n },\n ordinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return es;\n\n}));","//! moment.js locale configuration\n//! locale : estonian (et)\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n 'm' : ['ühe minuti', 'üks minut'],\n 'mm': [number + ' minuti', number + ' minutit'],\n 'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n 'hh': [number + ' tunni', number + ' tundi'],\n 'd' : ['ühe päeva', 'üks päev'],\n 'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n 'MM': [number + ' kuu', number + ' kuud'],\n 'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n 'yy': [number + ' aasta', number + ' aastat']\n };\n if (withoutSuffix) {\n return format[key][2] ? format[key][2] : format[key][1];\n }\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var et = moment.defineLocale('et', {\n months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Täna,] LT',\n nextDay : '[Homme,] LT',\n nextWeek : '[Järgmine] dddd LT',\n lastDay : '[Eile,] LT',\n lastWeek : '[Eelmine] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s pärast',\n past : '%s tagasi',\n s : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : '%d päeva',\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return et;\n\n}));","//! moment.js locale configuration\n//! locale : euskara (eu)\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var eu = moment.defineLocale('eu', {\n months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY[ko] MMMM[ren] D[a]',\n LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n l : 'YYYY-M-D',\n ll : 'YYYY[ko] MMM D[a]',\n lll : 'YYYY[ko] MMM D[a] HH:mm',\n llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n },\n calendar : {\n sameDay : '[gaur] LT[etan]',\n nextDay : '[bihar] LT[etan]',\n nextWeek : 'dddd LT[etan]',\n lastDay : '[atzo] LT[etan]',\n lastWeek : '[aurreko] dddd LT[etan]',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s barru',\n past : 'duela %s',\n s : 'segundo batzuk',\n m : 'minutu bat',\n mm : '%d minutu',\n h : 'ordu bat',\n hh : '%d ordu',\n d : 'egun bat',\n dd : '%d egun',\n M : 'hilabete bat',\n MM : '%d hilabete',\n y : 'urte bat',\n yy : '%d urte'\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return eu;\n\n}));","//! moment.js locale configuration\n//! locale : Persian (fa)\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '۱',\n '2': '۲',\n '3': '۳',\n '4': '۴',\n '5': '۵',\n '6': '۶',\n '7': '۷',\n '8': '۸',\n '9': '۹',\n '0': '۰'\n }, numberMap = {\n '۱': '1',\n '۲': '2',\n '۳': '3',\n '۴': '4',\n '۵': '5',\n '۶': '6',\n '۷': '7',\n '۸': '8',\n '۹': '9',\n '۰': '0'\n };\n\n var fa = moment.defineLocale('fa', {\n months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n meridiemParse: /قبل از ظهر|بعد از ظهر/,\n isPM: function (input) {\n return /بعد از ظهر/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'قبل از ظهر';\n } else {\n return 'بعد از ظهر';\n }\n },\n calendar : {\n sameDay : '[امروز ساعت] LT',\n nextDay : '[فردا ساعت] LT',\n nextWeek : 'dddd [ساعت] LT',\n lastDay : '[دیروز ساعت] LT',\n lastWeek : 'dddd [پیش] [ساعت] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'در %s',\n past : '%s پیش',\n s : 'چندین ثانیه',\n m : 'یک دقیقه',\n mm : '%d دقیقه',\n h : 'یک ساعت',\n hh : '%d ساعت',\n d : 'یک روز',\n dd : '%d روز',\n M : 'یک ماه',\n MM : '%d ماه',\n y : 'یک سال',\n yy : '%d سال'\n },\n preparse: function (string) {\n return string.replace(/[۰-۹]/g, function (match) {\n return numberMap[match];\n }).replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, '،');\n },\n ordinalParse: /\\d{1,2}م/,\n ordinal : '%dم',\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return fa;\n\n}));","//! moment.js locale configuration\n//! locale : finnish (fi)\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n numbersFuture = [\n 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n numbersPast[7], numbersPast[8], numbersPast[9]\n ];\n function translate(number, withoutSuffix, key, isFuture) {\n var result = '';\n switch (key) {\n case 's':\n return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n case 'm':\n return isFuture ? 'minuutin' : 'minuutti';\n case 'mm':\n result = isFuture ? 'minuutin' : 'minuuttia';\n break;\n case 'h':\n return isFuture ? 'tunnin' : 'tunti';\n case 'hh':\n result = isFuture ? 'tunnin' : 'tuntia';\n break;\n case 'd':\n return isFuture ? 'päivän' : 'päivä';\n case 'dd':\n result = isFuture ? 'päivän' : 'päivää';\n break;\n case 'M':\n return isFuture ? 'kuukauden' : 'kuukausi';\n case 'MM':\n result = isFuture ? 'kuukauden' : 'kuukautta';\n break;\n case 'y':\n return isFuture ? 'vuoden' : 'vuosi';\n case 'yy':\n result = isFuture ? 'vuoden' : 'vuotta';\n break;\n }\n result = verbalNumber(number, isFuture) + ' ' + result;\n return result;\n }\n function verbalNumber(number, isFuture) {\n return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n }\n\n var fi = moment.defineLocale('fi', {\n months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD.MM.YYYY',\n LL : 'Do MMMM[ta] YYYY',\n LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n l : 'D.M.YYYY',\n ll : 'Do MMM YYYY',\n lll : 'Do MMM YYYY, [klo] HH.mm',\n llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n },\n calendar : {\n sameDay : '[tänään] [klo] LT',\n nextDay : '[huomenna] [klo] LT',\n nextWeek : 'dddd [klo] LT',\n lastDay : '[eilen] [klo] LT',\n lastWeek : '[viime] dddd[na] [klo] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s päästä',\n past : '%s sitten',\n s : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fi;\n\n}));","//! moment.js locale configuration\n//! locale : faroese (fo)\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var fo = moment.defineLocale('fo', {\n months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D. MMMM, YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Í dag kl.] LT',\n nextDay : '[Í morgin kl.] LT',\n nextWeek : 'dddd [kl.] LT',\n lastDay : '[Í gjár kl.] LT',\n lastWeek : '[síðstu] dddd [kl] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'um %s',\n past : '%s síðani',\n s : 'fá sekund',\n m : 'ein minutt',\n mm : '%d minuttir',\n h : 'ein tími',\n hh : '%d tímar',\n d : 'ein dagur',\n dd : '%d dagar',\n M : 'ein mánaði',\n MM : '%d mánaðir',\n y : 'eitt ár',\n yy : '%d ár'\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fo;\n\n}));","//! moment.js locale configuration\n//! locale : canadian french (fr-ca)\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var fr_ca = moment.defineLocale('fr-ca', {\n months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Aujourd\\'hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'dans %s',\n past : 'il y a %s',\n s : 'quelques secondes',\n m : 'une minute',\n mm : '%d minutes',\n h : 'une heure',\n hh : '%d heures',\n d : 'un jour',\n dd : '%d jours',\n M : 'un mois',\n MM : '%d mois',\n y : 'un an',\n yy : '%d ans'\n },\n ordinalParse: /\\d{1,2}(er|e)/,\n ordinal : function (number) {\n return number + (number === 1 ? 'er' : 'e');\n }\n });\n\n return fr_ca;\n\n}));","//! moment.js locale configuration\n//! locale : french (fr)\n//! author : John Fischer : https://github.com/jfroffice\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var fr = moment.defineLocale('fr', {\n months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Aujourd\\'hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'dans %s',\n past : 'il y a %s',\n s : 'quelques secondes',\n m : 'une minute',\n mm : '%d minutes',\n h : 'une heure',\n hh : '%d heures',\n d : 'un jour',\n dd : '%d jours',\n M : 'un mois',\n MM : '%d mois',\n y : 'un an',\n yy : '%d ans'\n },\n ordinalParse: /\\d{1,2}(er|)/,\n ordinal : function (number) {\n return number + (number === 1 ? 'er' : '');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fr;\n\n}));","//! moment.js locale configuration\n//! locale : frisian (fy)\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n var fy = moment.defineLocale('fy', {\n months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n monthsShort : function (m, format) {\n if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[hjoed om] LT',\n nextDay: '[moarn om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[juster om] LT',\n lastWeek: '[ôfrûne] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'oer %s',\n past : '%s lyn',\n s : 'in pear sekonden',\n m : 'ien minút',\n mm : '%d minuten',\n h : 'ien oere',\n hh : '%d oeren',\n d : 'ien dei',\n dd : '%d dagen',\n M : 'ien moanne',\n MM : '%d moannen',\n y : 'ien jier',\n yy : '%d jierren'\n },\n ordinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return fy;\n\n}));","//! moment.js locale configuration\n//! locale : galician (gl)\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var gl = moment.defineLocale('gl', {\n months : 'Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro'.split('_'),\n monthsShort : 'Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.'.split('_'),\n weekdays : 'Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado'.split('_'),\n weekdaysShort : 'Dom._Lun._Mar._Mér._Xov._Ven._Sáb.'.split('_'),\n weekdaysMin : 'Do_Lu_Ma_Mé_Xo_Ve_Sá'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : function () {\n return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n },\n nextDay : function () {\n return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n },\n nextWeek : function () {\n return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n },\n lastDay : function () {\n return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n },\n lastWeek : function () {\n return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : function (str) {\n if (str === 'uns segundos') {\n return 'nuns segundos';\n }\n return 'en ' + str;\n },\n past : 'hai %s',\n s : 'uns segundos',\n m : 'un minuto',\n mm : '%d minutos',\n h : 'unha hora',\n hh : '%d horas',\n d : 'un día',\n dd : '%d días',\n M : 'un mes',\n MM : '%d meses',\n y : 'un ano',\n yy : '%d anos'\n },\n ordinalParse : /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return gl;\n\n}));","//! moment.js locale configuration\n//! locale : Hebrew (he)\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var he = moment.defineLocale('he', {\n months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [ב]MMMM YYYY',\n LLL : 'D [ב]MMMM YYYY HH:mm',\n LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n l : 'D/M/YYYY',\n ll : 'D MMM YYYY',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd, D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[היום ב־]LT',\n nextDay : '[מחר ב־]LT',\n nextWeek : 'dddd [בשעה] LT',\n lastDay : '[אתמול ב־]LT',\n lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'בעוד %s',\n past : 'לפני %s',\n s : 'מספר שניות',\n m : 'דקה',\n mm : '%d דקות',\n h : 'שעה',\n hh : function (number) {\n if (number === 2) {\n return 'שעתיים';\n }\n return number + ' שעות';\n },\n d : 'יום',\n dd : function (number) {\n if (number === 2) {\n return 'יומיים';\n }\n return number + ' ימים';\n },\n M : 'חודש',\n MM : function (number) {\n if (number === 2) {\n return 'חודשיים';\n }\n return number + ' חודשים';\n },\n y : 'שנה',\n yy : function (number) {\n if (number === 2) {\n return 'שנתיים';\n } else if (number % 10 === 0 && number !== 10) {\n return number + ' שנה';\n }\n return number + ' שנים';\n }\n }\n });\n\n return he;\n\n}));","//! moment.js locale configuration\n//! locale : hindi (hi)\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n var hi = moment.defineLocale('hi', {\n months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat : {\n LT : 'A h:mm बजे',\n LTS : 'A h:mm:ss बजे',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm बजे',\n LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[कल] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[कल] LT',\n lastWeek : '[पिछले] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s में',\n past : '%s पहले',\n s : 'कुछ ही क्षण',\n m : 'एक मिनट',\n mm : '%d मिनट',\n h : 'एक घंटा',\n hh : '%d घंटे',\n d : 'एक दिन',\n dd : '%d दिन',\n M : 'एक महीने',\n MM : '%d महीने',\n y : 'एक वर्ष',\n yy : '%d वर्ष'\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n meridiemParse: /रात|सुबह|दोपहर|शाम/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सुबह') {\n return hour;\n } else if (meridiem === 'दोपहर') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'शाम') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात';\n } else if (hour < 10) {\n return 'सुबह';\n } else if (hour < 17) {\n return 'दोपहर';\n } else if (hour < 20) {\n return 'शाम';\n } else {\n return 'रात';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return hi;\n\n}));","//! moment.js locale configuration\n//! locale : hrvatski (hr)\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var hr = moment.defineLocale('hr', {\n months : 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_'),\n monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD. MM. YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danas u] LT',\n nextDay : '[sutra u] LT',\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[jučer u] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n return '[prošlu] dddd [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'par sekundi',\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : 'dan',\n dd : translate,\n M : 'mjesec',\n MM : translate,\n y : 'godinu',\n yy : translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return hr;\n\n}));","//! moment.js locale configuration\n//! locale : hungarian (hu)\n//! author : Adam Brunner : https://github.com/adambrunner\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n function translate(number, withoutSuffix, key, isFuture) {\n var num = number,\n suffix;\n switch (key) {\n case 's':\n return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n case 'm':\n return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'mm':\n return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'h':\n return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'hh':\n return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'd':\n return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'dd':\n return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'M':\n return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'MM':\n return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'y':\n return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n case 'yy':\n return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n }\n return '';\n }\n function week(isFuture) {\n return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n }\n\n var hu = moment.defineLocale('hu', {\n months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'YYYY.MM.DD.',\n LL : 'YYYY. MMMM D.',\n LLL : 'YYYY. MMMM D. H:mm',\n LLLL : 'YYYY. MMMM D., dddd H:mm'\n },\n meridiemParse: /de|du/i,\n isPM: function (input) {\n return input.charAt(1).toLowerCase() === 'u';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower === true ? 'de' : 'DE';\n } else {\n return isLower === true ? 'du' : 'DU';\n }\n },\n calendar : {\n sameDay : '[ma] LT[-kor]',\n nextDay : '[holnap] LT[-kor]',\n nextWeek : function () {\n return week.call(this, true);\n },\n lastDay : '[tegnap] LT[-kor]',\n lastWeek : function () {\n return week.call(this, false);\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s múlva',\n past : '%s',\n s : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return hu;\n\n}));","//! moment.js locale configuration\n//! locale : Armenian (hy-am)\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function monthsCaseReplace(m, format) {\n var months = {\n 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'),\n 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_')\n },\n nounCase = (/D[oD]?(\\[[^\\[\\]]*\\]|\\s+)+MMMM?/).test(format) ?\n 'accusative' :\n 'nominative';\n return months[nounCase][m.month()];\n }\n function monthsShortCaseReplace(m, format) {\n var monthsShort = 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_');\n return monthsShort[m.month()];\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_');\n return weekdays[m.day()];\n }\n\n var hy_am = moment.defineLocale('hy-am', {\n months : monthsCaseReplace,\n monthsShort : monthsShortCaseReplace,\n weekdays : weekdaysCaseReplace,\n weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY թ.',\n LLL : 'D MMMM YYYY թ., HH:mm',\n LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n },\n calendar : {\n sameDay: '[այսօր] LT',\n nextDay: '[վաղը] LT',\n lastDay: '[երեկ] LT',\n nextWeek: function () {\n return 'dddd [օրը ժամը] LT';\n },\n lastWeek: function () {\n return '[անցած] dddd [օրը ժամը] LT';\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s հետո',\n past : '%s առաջ',\n s : 'մի քանի վայրկյան',\n m : 'րոպե',\n mm : '%d րոպե',\n h : 'ժամ',\n hh : '%d ժամ',\n d : 'օր',\n dd : '%d օր',\n M : 'ամիս',\n MM : '%d ամիս',\n y : 'տարի',\n yy : '%d տարի'\n },\n meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n isPM: function (input) {\n return /^(ցերեկվա|երեկոյան)$/.test(input);\n },\n meridiem : function (hour) {\n if (hour < 4) {\n return 'գիշերվա';\n } else if (hour < 12) {\n return 'առավոտվա';\n } else if (hour < 17) {\n return 'ցերեկվա';\n } else {\n return 'երեկոյան';\n }\n },\n ordinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'DDD':\n case 'w':\n case 'W':\n case 'DDDo':\n if (number === 1) {\n return number + '-ին';\n }\n return number + '-րդ';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return hy_am;\n\n}));","//! moment.js locale configuration\n//! locale : Bahasa Indonesia (id)\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var id = moment.defineLocale('id', {\n months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),\n weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|siang|sore|malam/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'siang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sore' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'siang';\n } else if (hours < 19) {\n return 'sore';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Besok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kemarin pukul] LT',\n lastWeek : 'dddd [lalu pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lalu',\n s : 'beberapa detik',\n m : 'semenit',\n mm : '%d menit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return id;\n\n}));","//! moment.js locale configuration\n//! locale : icelandic (is)\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function plural(n) {\n if (n % 100 === 11) {\n return true;\n } else if (n % 10 === 1) {\n return false;\n }\n return true;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n case 'm':\n return withoutSuffix ? 'mínúta' : 'mínútu';\n case 'mm':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n } else if (withoutSuffix) {\n return result + 'mínúta';\n }\n return result + 'mínútu';\n case 'hh':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n }\n return result + 'klukkustund';\n case 'd':\n if (withoutSuffix) {\n return 'dagur';\n }\n return isFuture ? 'dag' : 'degi';\n case 'dd':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'dagar';\n }\n return result + (isFuture ? 'daga' : 'dögum');\n } else if (withoutSuffix) {\n return result + 'dagur';\n }\n return result + (isFuture ? 'dag' : 'degi');\n case 'M':\n if (withoutSuffix) {\n return 'mánuður';\n }\n return isFuture ? 'mánuð' : 'mánuði';\n case 'MM':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'mánuðir';\n }\n return result + (isFuture ? 'mánuði' : 'mánuðum');\n } else if (withoutSuffix) {\n return result + 'mánuður';\n }\n return result + (isFuture ? 'mánuð' : 'mánuði');\n case 'y':\n return withoutSuffix || isFuture ? 'ár' : 'ári';\n case 'yy':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n }\n return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n }\n }\n\n var is = moment.defineLocale('is', {\n months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] H:mm',\n LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n },\n calendar : {\n sameDay : '[í dag kl.] LT',\n nextDay : '[á morgun kl.] LT',\n nextWeek : 'dddd [kl.] LT',\n lastDay : '[í gær kl.] LT',\n lastWeek : '[síðasta] dddd [kl.] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'eftir %s',\n past : 'fyrir %s síðan',\n s : translate,\n m : translate,\n mm : translate,\n h : 'klukkustund',\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return is;\n\n}));","//! moment.js locale configuration\n//! locale : italian (it)\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var it = moment.defineLocale('it', {\n months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),\n weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),\n weekdaysMin : 'D_L_Ma_Me_G_V_S'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Oggi alle] LT',\n nextDay: '[Domani alle] LT',\n nextWeek: 'dddd [alle] LT',\n lastDay: '[Ieri alle] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[la scorsa] dddd [alle] LT';\n default:\n return '[lo scorso] dddd [alle] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : function (s) {\n return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n },\n past : '%s fa',\n s : 'alcuni secondi',\n m : 'un minuto',\n mm : '%d minuti',\n h : 'un\\'ora',\n hh : '%d ore',\n d : 'un giorno',\n dd : '%d giorni',\n M : 'un mese',\n MM : '%d mesi',\n y : 'un anno',\n yy : '%d anni'\n },\n ordinalParse : /\\d{1,2}º/,\n ordinal: '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return it;\n\n}));","//! moment.js locale configuration\n//! locale : japanese (ja)\n//! author : LI Long : https://github.com/baryon\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var ja = moment.defineLocale('ja', {\n months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n longDateFormat : {\n LT : 'Ah時m分',\n LTS : 'Ah時m分s秒',\n L : 'YYYY/MM/DD',\n LL : 'YYYY年M月D日',\n LLL : 'YYYY年M月D日Ah時m分',\n LLLL : 'YYYY年M月D日Ah時m分 dddd'\n },\n meridiemParse: /午前|午後/i,\n isPM : function (input) {\n return input === '午後';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return '午前';\n } else {\n return '午後';\n }\n },\n calendar : {\n sameDay : '[今日] LT',\n nextDay : '[明日] LT',\n nextWeek : '[来週]dddd LT',\n lastDay : '[昨日] LT',\n lastWeek : '[前週]dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s後',\n past : '%s前',\n s : '数秒',\n m : '1分',\n mm : '%d分',\n h : '1時間',\n hh : '%d時間',\n d : '1日',\n dd : '%d日',\n M : '1ヶ月',\n MM : '%dヶ月',\n y : '1年',\n yy : '%d年'\n }\n });\n\n return ja;\n\n}));","//! moment.js locale configuration\n//! locale : Boso Jowo (jv)\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var jv = moment.defineLocale('jv', {\n months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /enjing|siyang|sonten|ndalu/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'enjing') {\n return hour;\n } else if (meridiem === 'siyang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'enjing';\n } else if (hours < 15) {\n return 'siyang';\n } else if (hours < 19) {\n return 'sonten';\n } else {\n return 'ndalu';\n }\n },\n calendar : {\n sameDay : '[Dinten puniko pukul] LT',\n nextDay : '[Mbenjang pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kala wingi pukul] LT',\n lastWeek : 'dddd [kepengker pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'wonten ing %s',\n past : '%s ingkang kepengker',\n s : 'sawetawis detik',\n m : 'setunggal menit',\n mm : '%d menit',\n h : 'setunggal jam',\n hh : '%d jam',\n d : 'sedinten',\n dd : '%d dinten',\n M : 'sewulan',\n MM : '%d wulan',\n y : 'setaun',\n yy : '%d taun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return jv;\n\n}));","//! moment.js locale configuration\n//! locale : Georgian (ka)\n//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function monthsCaseReplace(m, format) {\n var months = {\n 'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n 'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n },\n nounCase = (/D[oD] *MMMM?/).test(format) ?\n 'accusative' :\n 'nominative';\n return months[nounCase][m.month()];\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n 'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n 'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_')\n },\n nounCase = (/(წინა|შემდეგ)/).test(format) ?\n 'accusative' :\n 'nominative';\n return weekdays[nounCase][m.day()];\n }\n\n var ka = moment.defineLocale('ka', {\n months : monthsCaseReplace,\n monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n weekdays : weekdaysCaseReplace,\n weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n longDateFormat : {\n LT : 'h:mm A',\n LTS : 'h:mm:ss A',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY h:mm A',\n LLLL : 'dddd, D MMMM YYYY h:mm A'\n },\n calendar : {\n sameDay : '[დღეს] LT[-ზე]',\n nextDay : '[ხვალ] LT[-ზე]',\n lastDay : '[გუშინ] LT[-ზე]',\n nextWeek : '[შემდეგ] dddd LT[-ზე]',\n lastWeek : '[წინა] dddd LT-ზე',\n sameElse : 'L'\n },\n relativeTime : {\n future : function (s) {\n return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n s.replace(/ი$/, 'ში') :\n s + 'ში';\n },\n past : function (s) {\n if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n return s.replace(/(ი|ე)$/, 'ის წინ');\n }\n if ((/წელი/).test(s)) {\n return s.replace(/წელი$/, 'წლის წინ');\n }\n },\n s : 'რამდენიმე წამი',\n m : 'წუთი',\n mm : '%d წუთი',\n h : 'საათი',\n hh : '%d საათი',\n d : 'დღე',\n dd : '%d დღე',\n M : 'თვე',\n MM : '%d თვე',\n y : 'წელი',\n yy : '%d წელი'\n },\n ordinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n ordinal : function (number) {\n if (number === 0) {\n return number;\n }\n if (number === 1) {\n return number + '-ლი';\n }\n if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n return 'მე-' + number;\n }\n return number + '-ე';\n },\n week : {\n dow : 1,\n doy : 7\n }\n });\n\n return ka;\n\n}));","//! moment.js locale configuration\n//! locale : khmer (km)\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var km = moment.defineLocale('km', {\n months: 'មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n monthsShort: 'មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS : 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[ថ្ងៃនៈ ម៉ោង] LT',\n nextDay: '[ស្អែក ម៉ោង] LT',\n nextWeek: 'dddd [ម៉ោង] LT',\n lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n sameElse: 'L'\n },\n relativeTime: {\n future: '%sទៀត',\n past: '%sមុន',\n s: 'ប៉ុន្មានវិនាទី',\n m: 'មួយនាទី',\n mm: '%d នាទី',\n h: 'មួយម៉ោង',\n hh: '%d ម៉ោង',\n d: 'មួយថ្ងៃ',\n dd: '%d ថ្ងៃ',\n M: 'មួយខែ',\n MM: '%d ខែ',\n y: 'មួយឆ្នាំ',\n yy: '%d ឆ្នាំ'\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return km;\n\n}));","//! moment.js locale configuration\n//! locale : korean (ko)\n//!\n//! authors\n//!\n//! - Kyungwook, Park : https://github.com/kyungw00k\n//! - Jeeeyul Lee \n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var ko = moment.defineLocale('ko', {\n months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n longDateFormat : {\n LT : 'A h시 m분',\n LTS : 'A h시 m분 s초',\n L : 'YYYY.MM.DD',\n LL : 'YYYY년 MMMM D일',\n LLL : 'YYYY년 MMMM D일 A h시 m분',\n LLLL : 'YYYY년 MMMM D일 dddd A h시 m분'\n },\n calendar : {\n sameDay : '오늘 LT',\n nextDay : '내일 LT',\n nextWeek : 'dddd LT',\n lastDay : '어제 LT',\n lastWeek : '지난주 dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s 후',\n past : '%s 전',\n s : '몇초',\n ss : '%d초',\n m : '일분',\n mm : '%d분',\n h : '한시간',\n hh : '%d시간',\n d : '하루',\n dd : '%d일',\n M : '한달',\n MM : '%d달',\n y : '일년',\n yy : '%d년'\n },\n ordinalParse : /\\d{1,2}일/,\n ordinal : '%d일',\n meridiemParse : /오전|오후/,\n isPM : function (token) {\n return token === '오후';\n },\n meridiem : function (hour, minute, isUpper) {\n return hour < 12 ? '오전' : '오후';\n }\n });\n\n return ko;\n\n}));","//! moment.js locale configuration\n//! locale : Luxembourgish (lb)\n//! author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 'm': ['eng Minutt', 'enger Minutt'],\n 'h': ['eng Stonn', 'enger Stonn'],\n 'd': ['een Dag', 'engem Dag'],\n 'M': ['ee Mount', 'engem Mount'],\n 'y': ['ee Joer', 'engem Joer']\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n function processFutureTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'a ' + string;\n }\n return 'an ' + string;\n }\n function processPastTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'viru ' + string;\n }\n return 'virun ' + string;\n }\n /**\n * Returns true if the word before the given number loses the '-n' ending.\n * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n *\n * @param number {integer}\n * @returns {boolean}\n */\n function eifelerRegelAppliesToNumber(number) {\n number = parseInt(number, 10);\n if (isNaN(number)) {\n return false;\n }\n if (number < 0) {\n // Negative Number --> always true\n return true;\n } else if (number < 10) {\n // Only 1 digit\n if (4 <= number && number <= 7) {\n return true;\n }\n return false;\n } else if (number < 100) {\n // 2 digits\n var lastDigit = number % 10, firstDigit = number / 10;\n if (lastDigit === 0) {\n return eifelerRegelAppliesToNumber(firstDigit);\n }\n return eifelerRegelAppliesToNumber(lastDigit);\n } else if (number < 10000) {\n // 3 or 4 digits --> recursively check first digit\n while (number >= 10) {\n number = number / 10;\n }\n return eifelerRegelAppliesToNumber(number);\n } else {\n // Anything larger than 4 digits: recursively check first n-3 digits\n number = number / 1000;\n return eifelerRegelAppliesToNumber(number);\n }\n }\n\n var lb = moment.defineLocale('lb', {\n months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'H:mm [Auer]',\n LTS: 'H:mm:ss [Auer]',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm [Auer]',\n LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n },\n calendar: {\n sameDay: '[Haut um] LT',\n sameElse: 'L',\n nextDay: '[Muer um] LT',\n nextWeek: 'dddd [um] LT',\n lastDay: '[Gëschter um] LT',\n lastWeek: function () {\n // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n switch (this.day()) {\n case 2:\n case 4:\n return '[Leschten] dddd [um] LT';\n default:\n return '[Leschte] dddd [um] LT';\n }\n }\n },\n relativeTime : {\n future : processFutureTime,\n past : processPastTime,\n s : 'e puer Sekonnen',\n m : processRelativeTime,\n mm : '%d Minutten',\n h : processRelativeTime,\n hh : '%d Stonnen',\n d : processRelativeTime,\n dd : '%d Deeg',\n M : processRelativeTime,\n MM : '%d Méint',\n y : processRelativeTime,\n yy : '%d Joer'\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lb;\n\n}));","//! moment.js locale configuration\n//! locale : Lithuanian (lt)\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var units = {\n 'm' : 'minutė_minutės_minutę',\n 'mm': 'minutės_minučių_minutes',\n 'h' : 'valanda_valandos_valandą',\n 'hh': 'valandos_valandų_valandas',\n 'd' : 'diena_dienos_dieną',\n 'dd': 'dienos_dienų_dienas',\n 'M' : 'mėnuo_mėnesio_mėnesį',\n 'MM': 'mėnesiai_mėnesių_mėnesius',\n 'y' : 'metai_metų_metus',\n 'yy': 'metai_metų_metus'\n },\n weekDays = 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_');\n function translateSeconds(number, withoutSuffix, key, isFuture) {\n if (withoutSuffix) {\n return 'kelios sekundės';\n } else {\n return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n }\n }\n function monthsCaseReplace(m, format) {\n var months = {\n 'nominative': 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n 'accusative': 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_')\n },\n nounCase = (/D[oD]?(\\[[^\\[\\]]*\\]|\\s+)+MMMM?/).test(format) ?\n 'accusative' :\n 'nominative';\n return months[nounCase][m.month()];\n }\n function translateSingular(number, withoutSuffix, key, isFuture) {\n return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n }\n function special(number) {\n return number % 10 === 0 || (number > 10 && number < 20);\n }\n function forms(key) {\n return units[key].split('_');\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n if (number === 1) {\n return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n } else if (withoutSuffix) {\n return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n } else {\n if (isFuture) {\n return result + forms(key)[1];\n } else {\n return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n }\n }\n }\n function relativeWeekDay(moment, format) {\n var nominative = format.indexOf('dddd HH:mm') === -1,\n weekDay = weekDays[moment.day()];\n return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + 'į';\n }\n\n var lt = moment.defineLocale('lt', {\n months : monthsCaseReplace,\n monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n weekdays : relativeWeekDay,\n weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'YYYY [m.] MMMM D [d.]',\n LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n l : 'YYYY-MM-DD',\n ll : 'YYYY [m.] MMMM D [d.]',\n lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n },\n calendar : {\n sameDay : '[Šiandien] LT',\n nextDay : '[Rytoj] LT',\n nextWeek : 'dddd LT',\n lastDay : '[Vakar] LT',\n lastWeek : '[Praėjusį] dddd LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'po %s',\n past : 'prieš %s',\n s : translateSeconds,\n m : translateSingular,\n mm : translate,\n h : translateSingular,\n hh : translate,\n d : translateSingular,\n dd : translate,\n M : translateSingular,\n MM : translate,\n y : translateSingular,\n yy : translate\n },\n ordinalParse: /\\d{1,2}-oji/,\n ordinal : function (number) {\n return number + '-oji';\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lt;\n\n}));","//! moment.js locale configuration\n//! locale : latvian (lv)\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var units = {\n 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n 'h': 'stundas_stundām_stunda_stundas'.split('_'),\n 'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n 'd': 'dienas_dienām_diena_dienas'.split('_'),\n 'dd': 'dienas_dienām_diena_dienas'.split('_'),\n 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n 'y': 'gada_gadiem_gads_gadi'.split('_'),\n 'yy': 'gada_gadiem_gads_gadi'.split('_')\n };\n /**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\n function format(forms, number, withoutSuffix) {\n if (withoutSuffix) {\n // E.g. \"21 minūte\", \"3 minūtes\".\n return number % 10 === 1 && number !== 11 ? forms[2] : forms[3];\n } else {\n // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n return number % 10 === 1 && number !== 11 ? forms[0] : forms[1];\n }\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n return number + ' ' + format(units[key], number, withoutSuffix);\n }\n function relativeTimeWithSingular(number, withoutSuffix, key) {\n return format(units[key], number, withoutSuffix);\n }\n function relativeSeconds(number, withoutSuffix) {\n return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n }\n\n var lv = moment.defineLocale('lv', {\n months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY.',\n LL : 'YYYY. [gada] D. MMMM',\n LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n },\n calendar : {\n sameDay : '[Šodien pulksten] LT',\n nextDay : '[Rīt pulksten] LT',\n nextWeek : 'dddd [pulksten] LT',\n lastDay : '[Vakar pulksten] LT',\n lastWeek : '[Pagājušā] dddd [pulksten] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'pēc %s',\n past : 'pirms %s',\n s : relativeSeconds,\n m : relativeTimeWithSingular,\n mm : relativeTimeWithPlural,\n h : relativeTimeWithSingular,\n hh : relativeTimeWithPlural,\n d : relativeTimeWithSingular,\n dd : relativeTimeWithPlural,\n M : relativeTimeWithSingular,\n MM : relativeTimeWithPlural,\n y : relativeTimeWithSingular,\n yy : relativeTimeWithPlural\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return lv;\n\n}));","//! moment.js locale configuration\n//! locale : Montenegrin (me)\n//! author : Miodrag Nikač : https://github.com/miodragnikac\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mjesec', 'mjeseca', 'mjeseci'],\n yy: ['godina', 'godine', 'godina']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var me = moment.defineLocale('me', {\n months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],\n monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],\n weekdays: ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],\n weekdaysShort: ['ned.', 'pon.', 'uto.', 'sri.', 'čet.', 'pet.', 'sub.'],\n weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD. MM. YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sjutra u] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[juče u] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[prošle] [nedjelje] [u] LT',\n '[prošlog] [ponedjeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srijede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'prije %s',\n s : 'nekoliko sekundi',\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'dan',\n dd : translator.translate,\n M : 'mjesec',\n MM : translator.translate,\n y : 'godinu',\n yy : translator.translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return me;\n\n}));","//! moment.js locale configuration\n//! locale : macedonian (mk)\n//! author : Borislav Mickov : https://github.com/B0k0\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var mk = moment.defineLocale('mk', {\n months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'D.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[Денес во] LT',\n nextDay : '[Утре во] LT',\n nextWeek : 'dddd [во] LT',\n lastDay : '[Вчера во] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Во изминатата] dddd [во] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Во изминатиот] dddd [во] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'после %s',\n past : 'пред %s',\n s : 'неколку секунди',\n m : 'минута',\n mm : '%d минути',\n h : 'час',\n hh : '%d часа',\n d : 'ден',\n dd : '%d дена',\n M : 'месец',\n MM : '%d месеци',\n y : 'година',\n yy : '%d години'\n },\n ordinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal : function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return mk;\n\n}));","//! moment.js locale configuration\n//! locale : malayalam (ml)\n//! author : Floyd Pink : https://github.com/floydpink\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var ml = moment.defineLocale('ml', {\n months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n longDateFormat : {\n LT : 'A h:mm -നു',\n LTS : 'A h:mm:ss -നു',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm -നു',\n LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n },\n calendar : {\n sameDay : '[ഇന്ന്] LT',\n nextDay : '[നാളെ] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[ഇന്നലെ] LT',\n lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s കഴിഞ്ഞ്',\n past : '%s മുൻപ്',\n s : 'അൽപ നിമിഷങ്ങൾ',\n m : 'ഒരു മിനിറ്റ്',\n mm : '%d മിനിറ്റ്',\n h : 'ഒരു മണിക്കൂർ',\n hh : '%d മണിക്കൂർ',\n d : 'ഒരു ദിവസം',\n dd : '%d ദിവസം',\n M : 'ഒരു മാസം',\n MM : '%d മാസം',\n y : 'ഒരു വർഷം',\n yy : '%d വർഷം'\n },\n meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n isPM : function (input) {\n return /^(ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'രാത്രി';\n } else if (hour < 12) {\n return 'രാവിലെ';\n } else if (hour < 17) {\n return 'ഉച്ച കഴിഞ്ഞ്';\n } else if (hour < 20) {\n return 'വൈകുന്നേരം';\n } else {\n return 'രാത്രി';\n }\n }\n });\n\n return ml;\n\n}));","//! moment.js locale configuration\n//! locale : Marathi (mr)\n//! author : Harshad Kale : https://github.com/kalehv\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n var mr = moment.defineLocale('mr', {\n months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat : {\n LT : 'A h:mm वाजता',\n LTS : 'A h:mm:ss वाजता',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, A h:mm वाजता',\n LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[उद्या] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[काल] LT',\n lastWeek: '[मागील] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s नंतर',\n past : '%s पूर्वी',\n s : 'सेकंद',\n m: 'एक मिनिट',\n mm: '%d मिनिटे',\n h : 'एक तास',\n hh : '%d तास',\n d : 'एक दिवस',\n dd : '%d दिवस',\n M : 'एक महिना',\n MM : '%d महिने',\n y : 'एक वर्ष',\n yy : '%d वर्षे'\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात्री') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सकाळी') {\n return hour;\n } else if (meridiem === 'दुपारी') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'सायंकाळी') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात्री';\n } else if (hour < 10) {\n return 'सकाळी';\n } else if (hour < 17) {\n return 'दुपारी';\n } else if (hour < 20) {\n return 'सायंकाळी';\n } else {\n return 'रात्री';\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return mr;\n\n}));","//! moment.js locale configuration\n//! locale : Bahasa Malaysia (ms-MY)\n//! author : Weldan Jamili : https://github.com/weldan\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var ms_my = moment.defineLocale('ms-my', {\n months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Esok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kelmarin pukul] LT',\n lastWeek : 'dddd [lepas pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lepas',\n s : 'beberapa saat',\n m : 'seminit',\n mm : '%d minit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ms_my;\n\n}));","//! moment.js locale configuration\n//! locale : Bahasa Malaysia (ms-MY)\n//! author : Weldan Jamili : https://github.com/weldan\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var ms = moment.defineLocale('ms', {\n months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'HH.mm.ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY [pukul] HH.mm',\n LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar : {\n sameDay : '[Hari ini pukul] LT',\n nextDay : '[Esok pukul] LT',\n nextWeek : 'dddd [pukul] LT',\n lastDay : '[Kelmarin pukul] LT',\n lastWeek : 'dddd [lepas pukul] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'dalam %s',\n past : '%s yang lepas',\n s : 'beberapa saat',\n m : 'seminit',\n mm : '%d minit',\n h : 'sejam',\n hh : '%d jam',\n d : 'sehari',\n dd : '%d hari',\n M : 'sebulan',\n MM : '%d bulan',\n y : 'setahun',\n yy : '%d tahun'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ms;\n\n}));","//! moment.js locale configuration\n//! locale : Burmese (my)\n//! author : Squar team, mysquar.com\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '၁',\n '2': '၂',\n '3': '၃',\n '4': '၄',\n '5': '၅',\n '6': '၆',\n '7': '၇',\n '8': '၈',\n '9': '၉',\n '0': '၀'\n }, numberMap = {\n '၁': '1',\n '၂': '2',\n '၃': '3',\n '၄': '4',\n '၅': '5',\n '၆': '6',\n '၇': '7',\n '၈': '8',\n '၉': '9',\n '၀': '0'\n };\n\n var my = moment.defineLocale('my', {\n months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm'\n },\n calendar: {\n sameDay: '[ယနေ.] LT [မှာ]',\n nextDay: '[မနက်ဖြန်] LT [မှာ]',\n nextWeek: 'dddd LT [မှာ]',\n lastDay: '[မနေ.က] LT [မှာ]',\n lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n sameElse: 'L'\n },\n relativeTime: {\n future: 'လာမည့် %s မှာ',\n past: 'လွန်ခဲ့သော %s က',\n s: 'စက္ကန်.အနည်းငယ်',\n m: 'တစ်မိနစ်',\n mm: '%d မိနစ်',\n h: 'တစ်နာရီ',\n hh: '%d နာရီ',\n d: 'တစ်ရက်',\n dd: '%d ရက်',\n M: 'တစ်လ',\n MM: '%d လ',\n y: 'တစ်နှစ်',\n yy: '%d နှစ်'\n },\n preparse: function (string) {\n return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return my;\n\n}));","//! moment.js locale configuration\n//! locale : norwegian bokmål (nb)\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//! Sigurd Gartmann : https://github.com/sigurdga\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var nb = moment.defineLocale('nb', {\n months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort : 'søn_man_tirs_ons_tors_fre_lør'.split('_'),\n weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n longDateFormat : {\n LT : 'H.mm',\n LTS : 'H.mm.ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY [kl.] H.mm',\n LLLL : 'dddd D. MMMM YYYY [kl.] H.mm'\n },\n calendar : {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[forrige] dddd [kl.] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : 'for %s siden',\n s : 'noen sekunder',\n m : 'ett minutt',\n mm : '%d minutter',\n h : 'en time',\n hh : '%d timer',\n d : 'en dag',\n dd : '%d dager',\n M : 'en måned',\n MM : '%d måneder',\n y : 'ett år',\n yy : '%d år'\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nb;\n\n}));","//! moment.js locale configuration\n//! locale : nepali/nepalese\n//! author : suvash : https://github.com/suvash\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': '१',\n '2': '२',\n '3': '३',\n '4': '४',\n '5': '५',\n '6': '६',\n '7': '७',\n '8': '८',\n '9': '९',\n '0': '०'\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0'\n };\n\n var ne = moment.defineLocale('ne', {\n months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split('_'),\n longDateFormat : {\n LT : 'Aको h:mm बजे',\n LTS : 'Aको h:mm:ss बजे',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, Aको h:mm बजे',\n LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /राती|बिहान|दिउँसो|बेलुका|साँझ|राती/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राती') {\n return hour < 3 ? hour : hour + 12;\n } else if (meridiem === 'बिहान') {\n return hour;\n } else if (meridiem === 'दिउँसो') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'बेलुका' || meridiem === 'साँझ') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 3) {\n return 'राती';\n } else if (hour < 10) {\n return 'बिहान';\n } else if (hour < 15) {\n return 'दिउँसो';\n } else if (hour < 18) {\n return 'बेलुका';\n } else if (hour < 20) {\n return 'साँझ';\n } else {\n return 'राती';\n }\n },\n calendar : {\n sameDay : '[आज] LT',\n nextDay : '[भोली] LT',\n nextWeek : '[आउँदो] dddd[,] LT',\n lastDay : '[हिजो] LT',\n lastWeek : '[गएको] dddd[,] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%sमा',\n past : '%s अगाडी',\n s : 'केही समय',\n m : 'एक मिनेट',\n mm : '%d मिनेट',\n h : 'एक घण्टा',\n hh : '%d घण्टा',\n d : 'एक दिन',\n dd : '%d दिन',\n M : 'एक महिना',\n MM : '%d महिना',\n y : 'एक बर्ष',\n yy : '%d बर्ष'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ne;\n\n}));","//! moment.js locale configuration\n//! locale : dutch (nl)\n//! author : Joris Röling : https://github.com/jjupiter\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n var nl = moment.defineLocale('nl', {\n months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n monthsShort : function (m, format) {\n if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD-MM-YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'over %s',\n past : '%s geleden',\n s : 'een paar seconden',\n m : 'één minuut',\n mm : '%d minuten',\n h : 'één uur',\n hh : '%d uur',\n d : 'één dag',\n dd : '%d dagen',\n M : 'één maand',\n MM : '%d maanden',\n y : 'één jaar',\n yy : '%d jaar'\n },\n ordinalParse: /\\d{1,2}(ste|de)/,\n ordinal : function (number) {\n return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nl;\n\n}));","//! moment.js locale configuration\n//! locale : norwegian nynorsk (nn)\n//! author : https://github.com/mechuwind\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var nn = moment.defineLocale('nn', {\n months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[I dag klokka] LT',\n nextDay: '[I morgon klokka] LT',\n nextWeek: 'dddd [klokka] LT',\n lastDay: '[I går klokka] LT',\n lastWeek: '[Føregåande] dddd [klokka] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : 'for %s sidan',\n s : 'nokre sekund',\n m : 'eit minutt',\n mm : '%d minutt',\n h : 'ein time',\n hh : '%d timar',\n d : 'ein dag',\n dd : '%d dagar',\n M : 'ein månad',\n MM : '%d månader',\n y : 'eit år',\n yy : '%d år'\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return nn;\n\n}));","//! moment.js locale configuration\n//! locale : polish (pl)\n//! author : Rafal Hirsz : https://github.com/evoL\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n function plural(n) {\n return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n }\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'm':\n return withoutSuffix ? 'minuta' : 'minutę';\n case 'mm':\n return result + (plural(number) ? 'minuty' : 'minut');\n case 'h':\n return withoutSuffix ? 'godzina' : 'godzinę';\n case 'hh':\n return result + (plural(number) ? 'godziny' : 'godzin');\n case 'MM':\n return result + (plural(number) ? 'miesiące' : 'miesięcy');\n case 'yy':\n return result + (plural(number) ? 'lata' : 'lat');\n }\n }\n\n var pl = moment.defineLocale('pl', {\n months : function (momentToFormat, format) {\n if (format === '') {\n // Hack: if format empty we know this is used to generate\n // RegExp by moment. Give then back both valid forms of months\n // in RegExp ready format.\n return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n } else if (/D MMMM/.test(format)) {\n return monthsSubjective[momentToFormat.month()];\n } else {\n return monthsNominative[momentToFormat.month()];\n }\n },\n monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n weekdaysShort : 'nie_pon_wt_śr_czw_pt_sb'.split('_'),\n weekdaysMin : 'N_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Dziś o] LT',\n nextDay: '[Jutro o] LT',\n nextWeek: '[W] dddd [o] LT',\n lastDay: '[Wczoraj o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W zeszłą niedzielę o] LT';\n case 3:\n return '[W zeszłą środę o] LT';\n case 6:\n return '[W zeszłą sobotę o] LT';\n default:\n return '[W zeszły] dddd [o] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : '%s temu',\n s : 'kilka sekund',\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : '1 dzień',\n dd : '%d dni',\n M : 'miesiąc',\n MM : translate,\n y : 'rok',\n yy : translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return pl;\n\n}));","//! moment.js locale configuration\n//! locale : brazilian portuguese (pt-br)\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var pt_br = moment.defineLocale('pt-br', {\n months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),\n weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n },\n calendar : {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return (this.day() === 0 || this.day() === 6) ?\n '[Último] dddd [às] LT' : // Saturday + Sunday\n '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'em %s',\n past : '%s atrás',\n s : 'poucos segundos',\n m : 'um minuto',\n mm : '%d minutos',\n h : 'uma hora',\n hh : '%d horas',\n d : 'um dia',\n dd : '%d dias',\n M : 'um mês',\n MM : '%d meses',\n y : 'um ano',\n yy : '%d anos'\n },\n ordinalParse: /\\d{1,2}º/,\n ordinal : '%dº'\n });\n\n return pt_br;\n\n}));","//! moment.js locale configuration\n//! locale : portuguese (pt)\n//! author : Jefferson : https://github.com/jalex79\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var pt = moment.defineLocale('pt', {\n months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),\n weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D [de] MMMM [de] YYYY',\n LLL : 'D [de] MMMM [de] YYYY HH:mm',\n LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return (this.day() === 0 || this.day() === 6) ?\n '[Último] dddd [às] LT' : // Saturday + Sunday\n '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'em %s',\n past : 'há %s',\n s : 'segundos',\n m : 'um minuto',\n mm : '%d minutos',\n h : 'uma hora',\n hh : '%d horas',\n d : 'um dia',\n dd : '%d dias',\n M : 'um mês',\n MM : '%d meses',\n y : 'um ano',\n yy : '%d anos'\n },\n ordinalParse: /\\d{1,2}º/,\n ordinal : '%dº',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return pt;\n\n}));","//! moment.js locale configuration\n//! locale : romanian (ro)\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'mm': 'minute',\n 'hh': 'ore',\n 'dd': 'zile',\n 'MM': 'luni',\n 'yy': 'ani'\n },\n separator = ' ';\n if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n separator = ' de ';\n }\n return number + separator + format[key];\n }\n\n var ro = moment.defineLocale('ro', {\n months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY H:mm',\n LLLL : 'dddd, D MMMM YYYY H:mm'\n },\n calendar : {\n sameDay: '[azi la] LT',\n nextDay: '[mâine la] LT',\n nextWeek: 'dddd [la] LT',\n lastDay: '[ieri la] LT',\n lastWeek: '[fosta] dddd [la] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'peste %s',\n past : '%s în urmă',\n s : 'câteva secunde',\n m : 'un minut',\n mm : relativeTimeWithPlural,\n h : 'o oră',\n hh : relativeTimeWithPlural,\n d : 'o zi',\n dd : relativeTimeWithPlural,\n M : 'o lună',\n MM : relativeTimeWithPlural,\n y : 'un an',\n yy : relativeTimeWithPlural\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ro;\n\n}));","//! moment.js locale configuration\n//! locale : russian (ru)\n//! author : Viktorminator : https://github.com/Viktorminator\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n 'hh': 'час_часа_часов',\n 'dd': 'день_дня_дней',\n 'MM': 'месяц_месяца_месяцев',\n 'yy': 'год_года_лет'\n };\n if (key === 'm') {\n return withoutSuffix ? 'минута' : 'минуту';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n function monthsCaseReplace(m, format) {\n var months = {\n 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')\n },\n nounCase = (/D[oD]?(\\[[^\\[\\]]*\\]|\\s+)+MMMM?/).test(format) ?\n 'accusative' :\n 'nominative';\n return months[nounCase][m.month()];\n }\n function monthsShortCaseReplace(m, format) {\n var monthsShort = {\n 'nominative': 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_')\n },\n nounCase = (/D[oD]?(\\[[^\\[\\]]*\\]|\\s+)+MMMM?/).test(format) ?\n 'accusative' :\n 'nominative';\n return monthsShort[nounCase][m.month()];\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n 'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n 'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_')\n },\n nounCase = (/\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/).test(format) ?\n 'accusative' :\n 'nominative';\n return weekdays[nounCase][m.day()];\n }\n\n var ru = moment.defineLocale('ru', {\n months : monthsCaseReplace,\n monthsShort : monthsShortCaseReplace,\n weekdays : weekdaysCaseReplace,\n weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i],\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY г.',\n LLL : 'D MMMM YYYY г., HH:mm',\n LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n },\n calendar : {\n sameDay: '[Сегодня в] LT',\n nextDay: '[Завтра в] LT',\n lastDay: '[Вчера в] LT',\n nextWeek: function () {\n return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';\n },\n lastWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В прошлое] dddd [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В прошлый] dddd [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В прошлую] dddd [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd [в] LT';\n } else {\n return '[В] dddd [в] LT';\n }\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'через %s',\n past : '%s назад',\n s : 'несколько секунд',\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : 'час',\n hh : relativeTimeWithPlural,\n d : 'день',\n dd : relativeTimeWithPlural,\n M : 'месяц',\n MM : relativeTimeWithPlural,\n y : 'год',\n yy : relativeTimeWithPlural\n },\n meridiemParse: /ночи|утра|дня|вечера/i,\n isPM : function (input) {\n return /^(дня|вечера)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночи';\n } else if (hour < 12) {\n return 'утра';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечера';\n }\n },\n ordinalParse: /\\d{1,2}-(й|го|я)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n return number + '-й';\n case 'D':\n return number + '-го';\n case 'w':\n case 'W':\n return number + '-я';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ru;\n\n}));","//! moment.js locale configuration\n//! locale : Sinhalese (si)\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var si = moment.defineLocale('si', {\n months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n longDateFormat : {\n LT : 'a h:mm',\n LTS : 'a h:mm:ss',\n L : 'YYYY/MM/DD',\n LL : 'YYYY MMMM D',\n LLL : 'YYYY MMMM D, a h:mm',\n LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n },\n calendar : {\n sameDay : '[අද] LT[ට]',\n nextDay : '[හෙට] LT[ට]',\n nextWeek : 'dddd LT[ට]',\n lastDay : '[ඊයේ] LT[ට]',\n lastWeek : '[පසුගිය] dddd LT[ට]',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%sකින්',\n past : '%sකට පෙර',\n s : 'තත්පර කිහිපය',\n m : 'මිනිත්තුව',\n mm : 'මිනිත්තු %d',\n h : 'පැය',\n hh : 'පැය %d',\n d : 'දිනය',\n dd : 'දින %d',\n M : 'මාසය',\n MM : 'මාස %d',\n y : 'වසර',\n yy : 'වසර %d'\n },\n ordinalParse: /\\d{1,2} වැනි/,\n ordinal : function (number) {\n return number + ' වැනි';\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'ප.ව.' : 'පස් වරු';\n } else {\n return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n }\n }\n });\n\n return si;\n\n}));","//! moment.js locale configuration\n//! locale : slovak (sk)\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n function plural(n) {\n return (n > 1) && (n < 5);\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minúty' : 'minút');\n } else {\n return result + 'minútami';\n }\n break;\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodín');\n } else {\n return result + 'hodinami';\n }\n break;\n case 'd': // a day / in a day / a day ago\n return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dni' : 'dní');\n } else {\n return result + 'dňami';\n }\n break;\n case 'M': // a month / in a month / a month ago\n return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'mesiace' : 'mesiacov');\n } else {\n return result + 'mesiacmi';\n }\n break;\n case 'y': // a year / in a year / a year ago\n return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'rokov');\n } else {\n return result + 'rokmi';\n }\n break;\n }\n }\n\n var sk = moment.defineLocale('sk', {\n months : months,\n monthsShort : monthsShort,\n monthsParse : (function (months, monthsShort) {\n var i, _monthsParse = [];\n for (i = 0; i < 12; i++) {\n // use custom parser to solve problem with July (červenec)\n _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');\n }\n return _monthsParse;\n }(months, monthsShort)),\n weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n longDateFormat : {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay: '[dnes o] LT',\n nextDay: '[zajtra o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v nedeľu o] LT';\n case 1:\n case 2:\n return '[v] dddd [o] LT';\n case 3:\n return '[v stredu o] LT';\n case 4:\n return '[vo štvrtok o] LT';\n case 5:\n return '[v piatok o] LT';\n case 6:\n return '[v sobotu o] LT';\n }\n },\n lastDay: '[včera o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulú nedeľu o] LT';\n case 1:\n case 2:\n return '[minulý] dddd [o] LT';\n case 3:\n return '[minulú stredu o] LT';\n case 4:\n case 5:\n return '[minulý] dddd [o] LT';\n case 6:\n return '[minulú sobotu o] LT';\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'pred %s',\n s : translate,\n m : translate,\n mm : translate,\n h : translate,\n hh : translate,\n d : translate,\n dd : translate,\n M : translate,\n MM : translate,\n y : translate,\n yy : translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sk;\n\n}));","//! moment.js locale configuration\n//! locale : slovenian (sl)\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n case 'm':\n return withoutSuffix ? 'ena minuta' : 'eno minuto';\n case 'mm':\n if (number === 1) {\n result += withoutSuffix ? 'minuta' : 'minuto';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n } else {\n result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'ena ura' : 'eno uro';\n case 'hh':\n if (number === 1) {\n result += withoutSuffix ? 'ura' : 'uro';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'uri' : 'urama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'ure' : 'urami';\n } else {\n result += withoutSuffix || isFuture ? 'ur' : 'urami';\n }\n return result;\n case 'd':\n return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n case 'dd':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n } else {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n }\n return result;\n case 'M':\n return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n case 'MM':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n } else {\n result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n }\n return result;\n case 'y':\n return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n case 'yy':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'leto' : 'letom';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'leta' : 'leti';\n } else {\n result += withoutSuffix || isFuture ? 'let' : 'leti';\n }\n return result;\n }\n }\n\n var sl = moment.defineLocale('sl', {\n months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n longDateFormat : {\n LT : 'H:mm',\n LTS : 'H:mm:ss',\n L : 'DD. MM. YYYY',\n LL : 'D. MMMM YYYY',\n LLL : 'D. MMMM YYYY H:mm',\n LLLL : 'dddd, D. MMMM YYYY H:mm'\n },\n calendar : {\n sameDay : '[danes ob] LT',\n nextDay : '[jutri ob] LT',\n\n nextWeek : function () {\n switch (this.day()) {\n case 0:\n return '[v] [nedeljo] [ob] LT';\n case 3:\n return '[v] [sredo] [ob] LT';\n case 6:\n return '[v] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[v] dddd [ob] LT';\n }\n },\n lastDay : '[včeraj ob] LT',\n lastWeek : function () {\n switch (this.day()) {\n case 0:\n return '[prejšnjo] [nedeljo] [ob] LT';\n case 3:\n return '[prejšnjo] [sredo] [ob] LT';\n case 6:\n return '[prejšnjo] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prejšnji] dddd [ob] LT';\n }\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'čez %s',\n past : 'pred %s',\n s : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return sl;\n\n}));","//! moment.js locale configuration\n//! locale : Albanian (sq)\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author: Menelion Elensúle: https://github.com/Oire (tests)\n//! author : Oerd Cukalla : https://github.com/oerd (fixes)\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var sq = moment.defineLocale('sq', {\n months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n meridiemParse: /PD|MD/,\n isPM: function (input) {\n return input.charAt(0) === 'M';\n },\n meridiem : function (hours, minutes, isLower) {\n return hours < 12 ? 'PD' : 'MD';\n },\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Sot në] LT',\n nextDay : '[Nesër në] LT',\n nextWeek : 'dddd [në] LT',\n lastDay : '[Dje në] LT',\n lastWeek : 'dddd [e kaluar në] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'në %s',\n past : '%s më parë',\n s : 'disa sekonda',\n m : 'një minutë',\n mm : '%d minuta',\n h : 'një orë',\n hh : '%d orë',\n d : 'një ditë',\n dd : '%d ditë',\n M : 'një muaj',\n MM : '%d muaj',\n y : 'një vit',\n yy : '%d vite'\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sq;\n\n}));","//! moment.js locale configuration\n//! locale : Serbian-cyrillic (sr-cyrl)\n//! author : Milan Janačković : https://github.com/milan-j\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n m: ['један минут', 'једне минуте'],\n mm: ['минут', 'минуте', 'минута'],\n h: ['један сат', 'једног сата'],\n hh: ['сат', 'сата', 'сати'],\n dd: ['дан', 'дана', 'дана'],\n MM: ['месец', 'месеца', 'месеци'],\n yy: ['година', 'године', 'година']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var sr_cyrl = moment.defineLocale('sr-cyrl', {\n months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],\n monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],\n weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],\n weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],\n weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD. MM. YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[данас у] LT',\n nextDay: '[сутра у] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[у] [недељу] [у] LT';\n case 3:\n return '[у] [среду] [у] LT';\n case 6:\n return '[у] [суботу] [у] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[у] dddd [у] LT';\n }\n },\n lastDay : '[јуче у] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[прошле] [недеље] [у] LT',\n '[прошлог] [понедељка] [у] LT',\n '[прошлог] [уторка] [у] LT',\n '[прошле] [среде] [у] LT',\n '[прошлог] [четвртка] [у] LT',\n '[прошлог] [петка] [у] LT',\n '[прошле] [суботе] [у] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'за %s',\n past : 'пре %s',\n s : 'неколико секунди',\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'дан',\n dd : translator.translate,\n M : 'месец',\n MM : translator.translate,\n y : 'годину',\n yy : translator.translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return sr_cyrl;\n\n}));","//! moment.js locale configuration\n//! locale : Serbian-latin (sr)\n//! author : Milan Janačković : https://github.com/milan-j\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var translator = {\n words: { //Different grammatical cases\n m: ['jedan minut', 'jedne minute'],\n mm: ['minut', 'minute', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mesec', 'meseca', 'meseci'],\n yy: ['godina', 'godine', 'godina']\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n }\n }\n };\n\n var sr = moment.defineLocale('sr', {\n months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],\n monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],\n weekdays: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'],\n weekdaysShort: ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'],\n weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],\n longDateFormat: {\n LT: 'H:mm',\n LTS : 'H:mm:ss',\n L: 'DD. MM. YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm'\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedelju] [u] LT';\n case 3:\n return '[u] [sredu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay : '[juče u] LT',\n lastWeek : function () {\n var lastWeekDays = [\n '[prošle] [nedelje] [u] LT',\n '[prošlog] [ponedeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT'\n ];\n return lastWeekDays[this.day()];\n },\n sameElse : 'L'\n },\n relativeTime : {\n future : 'za %s',\n past : 'pre %s',\n s : 'nekoliko sekundi',\n m : translator.translate,\n mm : translator.translate,\n h : translator.translate,\n hh : translator.translate,\n d : 'dan',\n dd : translator.translate,\n M : 'mesec',\n MM : translator.translate,\n y : 'godinu',\n yy : translator.translate\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return sr;\n\n}));","//! moment.js locale configuration\n//! locale : swedish (sv)\n//! author : Jens Alm : https://github.com/ulmus\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var sv = moment.defineLocale('sv', {\n months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'YYYY-MM-DD',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Idag] LT',\n nextDay: '[Imorgon] LT',\n lastDay: '[Igår] LT',\n nextWeek: '[På] dddd LT',\n lastWeek: '[I] dddd[s] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'om %s',\n past : 'för %s sedan',\n s : 'några sekunder',\n m : 'en minut',\n mm : '%d minuter',\n h : 'en timme',\n hh : '%d timmar',\n d : 'en dag',\n dd : '%d dagar',\n M : 'en månad',\n MM : '%d månader',\n y : 'ett år',\n yy : '%d år'\n },\n ordinalParse: /\\d{1,2}(e|a)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'e' :\n (b === 1) ? 'a' :\n (b === 2) ? 'a' :\n (b === 3) ? 'e' : 'e';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return sv;\n\n}));","//! moment.js locale configuration\n//! locale : tamil (ta)\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var ta = moment.defineLocale('ta', {\n months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY, HH:mm',\n LLLL : 'dddd, D MMMM YYYY, HH:mm'\n },\n calendar : {\n sameDay : '[இன்று] LT',\n nextDay : '[நாளை] LT',\n nextWeek : 'dddd, LT',\n lastDay : '[நேற்று] LT',\n lastWeek : '[கடந்த வாரம்] dddd, LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s இல்',\n past : '%s முன்',\n s : 'ஒரு சில விநாடிகள்',\n m : 'ஒரு நிமிடம்',\n mm : '%d நிமிடங்கள்',\n h : 'ஒரு மணி நேரம்',\n hh : '%d மணி நேரம்',\n d : 'ஒரு நாள்',\n dd : '%d நாட்கள்',\n M : 'ஒரு மாதம்',\n MM : '%d மாதங்கள்',\n y : 'ஒரு வருடம்',\n yy : '%d ஆண்டுகள்'\n },\n ordinalParse: /\\d{1,2}வது/,\n ordinal : function (number) {\n return number + 'வது';\n },\n // refer http://ta.wikipedia.org/s/1er1\n meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n meridiem : function (hour, minute, isLower) {\n if (hour < 2) {\n return ' யாமம்';\n } else if (hour < 6) {\n return ' வைகறை'; // வைகறை\n } else if (hour < 10) {\n return ' காலை'; // காலை\n } else if (hour < 14) {\n return ' நண்பகல்'; // நண்பகல்\n } else if (hour < 18) {\n return ' எற்பாடு'; // எற்பாடு\n } else if (hour < 22) {\n return ' மாலை'; // மாலை\n } else {\n return ' யாமம்';\n }\n },\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'யாமம்') {\n return hour < 2 ? hour : hour + 12;\n } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n return hour;\n } else if (meridiem === 'நண்பகல்') {\n return hour >= 10 ? hour : hour + 12;\n } else {\n return hour + 12;\n }\n },\n week : {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return ta;\n\n}));","//! moment.js locale configuration\n//! locale : thai (th)\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var th = moment.defineLocale('th', {\n months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n monthsShort : 'มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา'.split('_'),\n weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n longDateFormat : {\n LT : 'H นาฬิกา m นาที',\n LTS : 'H นาฬิกา m นาที s วินาที',\n L : 'YYYY/MM/DD',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY เวลา H นาฬิกา m นาที',\n LLLL : 'วันddddที่ D MMMM YYYY เวลา H นาฬิกา m นาที'\n },\n meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n isPM: function (input) {\n return input === 'หลังเที่ยง';\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ก่อนเที่ยง';\n } else {\n return 'หลังเที่ยง';\n }\n },\n calendar : {\n sameDay : '[วันนี้ เวลา] LT',\n nextDay : '[พรุ่งนี้ เวลา] LT',\n nextWeek : 'dddd[หน้า เวลา] LT',\n lastDay : '[เมื่อวานนี้ เวลา] LT',\n lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'อีก %s',\n past : '%sที่แล้ว',\n s : 'ไม่กี่วินาที',\n m : '1 นาที',\n mm : '%d นาที',\n h : '1 ชั่วโมง',\n hh : '%d ชั่วโมง',\n d : '1 วัน',\n dd : '%d วัน',\n M : '1 เดือน',\n MM : '%d เดือน',\n y : '1 ปี',\n yy : '%d ปี'\n }\n });\n\n return th;\n\n}));","//! moment.js locale configuration\n//! locale : Tagalog/Filipino (tl-ph)\n//! author : Dan Hagman\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var tl_ph = moment.defineLocale('tl-ph', {\n months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'MM/D/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY HH:mm',\n LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Ngayon sa] LT',\n nextDay: '[Bukas sa] LT',\n nextWeek: 'dddd [sa] LT',\n lastDay: '[Kahapon sa] LT',\n lastWeek: 'dddd [huling linggo] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'sa loob ng %s',\n past : '%s ang nakalipas',\n s : 'ilang segundo',\n m : 'isang minuto',\n mm : '%d minuto',\n h : 'isang oras',\n hh : '%d oras',\n d : 'isang araw',\n dd : '%d araw',\n M : 'isang buwan',\n MM : '%d buwan',\n y : 'isang taon',\n yy : '%d taon'\n },\n ordinalParse: /\\d{1,2}/,\n ordinal : function (number) {\n return number;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return tl_ph;\n\n}));","//! moment.js locale configuration\n//! locale : turkish (tr)\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//! Burak Yiğit Kaya: https://github.com/BYK\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var suffixes = {\n 1: '\\'inci',\n 5: '\\'inci',\n 8: '\\'inci',\n 70: '\\'inci',\n 80: '\\'inci',\n 2: '\\'nci',\n 7: '\\'nci',\n 20: '\\'nci',\n 50: '\\'nci',\n 3: '\\'üncü',\n 4: '\\'üncü',\n 100: '\\'üncü',\n 6: '\\'ncı',\n 9: '\\'uncu',\n 10: '\\'uncu',\n 30: '\\'uncu',\n 60: '\\'ıncı',\n 90: '\\'ıncı'\n };\n\n var tr = moment.defineLocale('tr', {\n months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[bugün saat] LT',\n nextDay : '[yarın saat] LT',\n nextWeek : '[haftaya] dddd [saat] LT',\n lastDay : '[dün] LT',\n lastWeek : '[geçen hafta] dddd [saat] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : '%s sonra',\n past : '%s önce',\n s : 'birkaç saniye',\n m : 'bir dakika',\n mm : '%d dakika',\n h : 'bir saat',\n hh : '%d saat',\n d : 'bir gün',\n dd : '%d gün',\n M : 'bir ay',\n MM : '%d ay',\n y : 'bir yıl',\n yy : '%d yıl'\n },\n ordinalParse: /\\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,\n ordinal : function (number) {\n if (number === 0) { // special case for zero\n return number + '\\'ıncı';\n }\n var a = number % 10,\n b = number % 100 - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return tr;\n\n}));","//! moment.js locale configuration\n//! locale : talossan (tzl)\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v with the help of Iustì Canun\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n\n var tzl = moment.defineLocale('tzl', {\n months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n longDateFormat : {\n LT : 'HH.mm',\n LTS : 'LT.ss',\n L : 'DD.MM.YYYY',\n LL : 'D. MMMM [dallas] YYYY',\n LLL : 'D. MMMM [dallas] YYYY LT',\n LLLL : 'dddd, [li] D. MMMM [dallas] YYYY LT'\n },\n meridiem : function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'd\\'o' : 'D\\'O';\n } else {\n return isLower ? 'd\\'a' : 'D\\'A';\n }\n },\n calendar : {\n sameDay : '[oxhi à] LT',\n nextDay : '[demà à] LT',\n nextWeek : 'dddd [à] LT',\n lastDay : '[ieiri à] LT',\n lastWeek : '[sür el] dddd [lasteu à] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'osprei %s',\n past : 'ja%s',\n s : processRelativeTime,\n m : processRelativeTime,\n mm : processRelativeTime,\n h : processRelativeTime,\n hh : processRelativeTime,\n d : processRelativeTime,\n dd : processRelativeTime,\n M : processRelativeTime,\n MM : processRelativeTime,\n y : processRelativeTime,\n yy : processRelativeTime\n },\n ordinalParse: /\\d{1,2}\\./,\n ordinal : '%d.',\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n 's': ['viensas secunds', '\\'iensas secunds'],\n 'm': ['\\'n míut', '\\'iens míut'],\n 'mm': [number + ' míuts', ' ' + number + ' míuts'],\n 'h': ['\\'n þora', '\\'iensa þora'],\n 'hh': [number + ' þoras', ' ' + number + ' þoras'],\n 'd': ['\\'n ziua', '\\'iensa ziua'],\n 'dd': [number + ' ziuas', ' ' + number + ' ziuas'],\n 'M': ['\\'n mes', '\\'iens mes'],\n 'MM': [number + ' mesen', ' ' + number + ' mesen'],\n 'y': ['\\'n ar', '\\'iens ar'],\n 'yy': [number + ' ars', ' ' + number + ' ars']\n };\n return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1].trim());\n }\n\n return tzl;\n\n}));","//! moment.js locale configuration\n//! locale : Morocco Central Atlas Tamaziɣt in Latin (tzm-latn)\n//! author : Abdel Said : https://github.com/abdelsaid\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var tzm_latn = moment.defineLocale('tzm-latn', {\n months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[asdkh g] LT',\n nextDay: '[aska g] LT',\n nextWeek: 'dddd [g] LT',\n lastDay: '[assant g] LT',\n lastWeek: 'dddd [g] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'dadkh s yan %s',\n past : 'yan %s',\n s : 'imik',\n m : 'minuḍ',\n mm : '%d minuḍ',\n h : 'saɛa',\n hh : '%d tassaɛin',\n d : 'ass',\n dd : '%d ossan',\n M : 'ayowr',\n MM : '%d iyyirn',\n y : 'asgas',\n yy : '%d isgasn'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return tzm_latn;\n\n}));","//! moment.js locale configuration\n//! locale : Morocco Central Atlas Tamaziɣt (tzm)\n//! author : Abdel Said : https://github.com/abdelsaid\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var tzm = moment.defineLocale('tzm', {\n months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS: 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n nextWeek: 'dddd [ⴴ] LT',\n lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n lastWeek: 'dddd [ⴴ] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n past : 'ⵢⴰⵏ %s',\n s : 'ⵉⵎⵉⴽ',\n m : 'ⵎⵉⵏⵓⴺ',\n mm : '%d ⵎⵉⵏⵓⴺ',\n h : 'ⵙⴰⵄⴰ',\n hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n d : 'ⴰⵙⵙ',\n dd : '%d oⵙⵙⴰⵏ',\n M : 'ⴰⵢoⵓⵔ',\n MM : '%d ⵉⵢⵢⵉⵔⵏ',\n y : 'ⴰⵙⴳⴰⵙ',\n yy : '%d ⵉⵙⴳⴰⵙⵏ'\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return tzm;\n\n}));","//! moment.js locale configuration\n//! locale : ukrainian (uk)\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n 'mm': 'хвилина_хвилини_хвилин',\n 'hh': 'година_години_годин',\n 'dd': 'день_дні_днів',\n 'MM': 'місяць_місяці_місяців',\n 'yy': 'рік_роки_років'\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвилина' : 'хвилину';\n }\n else if (key === 'h') {\n return withoutSuffix ? 'година' : 'годину';\n }\n else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n function monthsCaseReplace(m, format) {\n var months = {\n 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'),\n 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_')\n },\n nounCase = (/D[oD]? *MMMM?/).test(format) ?\n 'accusative' :\n 'nominative';\n return months[nounCase][m.month()];\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n },\n nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n 'accusative' :\n ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n 'genitive' :\n 'nominative');\n return weekdays[nounCase][m.day()];\n }\n function processHoursFunction(str) {\n return function () {\n return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n };\n }\n\n var uk = moment.defineLocale('uk', {\n months : monthsCaseReplace,\n monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n weekdays : weekdaysCaseReplace,\n weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD.MM.YYYY',\n LL : 'D MMMM YYYY р.',\n LLL : 'D MMMM YYYY р., HH:mm',\n LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n },\n calendar : {\n sameDay: processHoursFunction('[Сьогодні '),\n nextDay: processHoursFunction('[Завтра '),\n lastDay: processHoursFunction('[Вчора '),\n nextWeek: processHoursFunction('[У] dddd ['),\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return processHoursFunction('[Минулої] dddd [').call(this);\n case 1:\n case 2:\n case 4:\n return processHoursFunction('[Минулого] dddd [').call(this);\n }\n },\n sameElse: 'L'\n },\n relativeTime : {\n future : 'за %s',\n past : '%s тому',\n s : 'декілька секунд',\n m : relativeTimeWithPlural,\n mm : relativeTimeWithPlural,\n h : 'годину',\n hh : relativeTimeWithPlural,\n d : 'день',\n dd : relativeTimeWithPlural,\n M : 'місяць',\n MM : relativeTimeWithPlural,\n y : 'рік',\n yy : relativeTimeWithPlural\n },\n // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n meridiemParse: /ночі|ранку|дня|вечора/,\n isPM: function (input) {\n return /^(дня|вечора)$/.test(input);\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночі';\n } else if (hour < 12) {\n return 'ранку';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечора';\n }\n },\n ordinalParse: /\\d{1,2}-(й|го)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return number + '-й';\n case 'D':\n return number + '-го';\n default:\n return number;\n }\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 1st is the first week of the year.\n }\n });\n\n return uk;\n\n}));","//! moment.js locale configuration\n//! locale : uzbek (uz)\n//! author : Sardor Muminov : https://github.com/muminoff\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var uz = moment.defineLocale('uz', {\n months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'D MMMM YYYY, dddd HH:mm'\n },\n calendar : {\n sameDay : '[Бугун соат] LT [да]',\n nextDay : '[Эртага] LT [да]',\n nextWeek : 'dddd [куни соат] LT [да]',\n lastDay : '[Кеча соат] LT [да]',\n lastWeek : '[Утган] dddd [куни соат] LT [да]',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'Якин %s ичида',\n past : 'Бир неча %s олдин',\n s : 'фурсат',\n m : 'бир дакика',\n mm : '%d дакика',\n h : 'бир соат',\n hh : '%d соат',\n d : 'бир кун',\n dd : '%d кун',\n M : 'бир ой',\n MM : '%d ой',\n y : 'бир йил',\n yy : '%d йил'\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 7 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return uz;\n\n}));","//! moment.js locale configuration\n//! locale : vietnamese (vi)\n//! author : Bang Nguyen : https://github.com/bangnk\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var vi = moment.defineLocale('vi', {\n months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM [năm] YYYY',\n LLL : 'D MMMM [năm] YYYY HH:mm',\n LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n l : 'DD/M/YYYY',\n ll : 'D MMM YYYY',\n lll : 'D MMM YYYY HH:mm',\n llll : 'ddd, D MMM YYYY HH:mm'\n },\n calendar : {\n sameDay: '[Hôm nay lúc] LT',\n nextDay: '[Ngày mai lúc] LT',\n nextWeek: 'dddd [tuần tới lúc] LT',\n lastDay: '[Hôm qua lúc] LT',\n lastWeek: 'dddd [tuần rồi lúc] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : '%s tới',\n past : '%s trước',\n s : 'vài giây',\n m : 'một phút',\n mm : '%d phút',\n h : 'một giờ',\n hh : '%d giờ',\n d : 'một ngày',\n dd : '%d ngày',\n M : 'một tháng',\n MM : '%d tháng',\n y : 'một năm',\n yy : '%d năm'\n },\n ordinalParse: /\\d{1,2}/,\n ordinal : function (number) {\n return number;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return vi;\n\n}));","//! moment.js locale configuration\n//! locale : chinese (zh-cn)\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var zh_cn = moment.defineLocale('zh-cn', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'Ah点mm分',\n LTS : 'Ah点m分s秒',\n L : 'YYYY-MM-DD',\n LL : 'YYYY年MMMD日',\n LLL : 'YYYY年MMMD日Ah点mm分',\n LLLL : 'YYYY年MMMD日ddddAh点mm分',\n l : 'YYYY-MM-DD',\n ll : 'YYYY年MMMD日',\n lll : 'YYYY年MMMD日Ah点mm分',\n llll : 'YYYY年MMMD日ddddAh点mm分'\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' ||\n meridiem === '上午') {\n return hour;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n } else {\n // '中午'\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : function () {\n return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';\n },\n nextDay : function () {\n return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';\n },\n lastDay : function () {\n return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';\n },\n nextWeek : function () {\n var startOfWeek, prefix;\n startOfWeek = moment().startOf('week');\n prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';\n return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';\n },\n lastWeek : function () {\n var startOfWeek, prefix;\n startOfWeek = moment().startOf('week');\n prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';\n return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';\n },\n sameElse : 'LL'\n },\n ordinalParse: /\\d{1,2}(日|月|周)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '周';\n default:\n return number;\n }\n },\n relativeTime : {\n future : '%s内',\n past : '%s前',\n s : '几秒',\n m : '1 分钟',\n mm : '%d 分钟',\n h : '1 小时',\n hh : '%d 小时',\n d : '1 天',\n dd : '%d 天',\n M : '1 个月',\n MM : '%d 个月',\n y : '1 年',\n yy : '%d 年'\n },\n week : {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return zh_cn;\n\n}));","//! moment.js locale configuration\n//! locale : traditional chinese (zh-tw)\n//! author : Ben : https://github.com/ben-lin\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['moment'], factory) :\n factory(global.moment)\n}(this, function (moment) { 'use strict';\n\n\n var zh_tw = moment.defineLocale('zh-tw', {\n months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n longDateFormat : {\n LT : 'Ah點mm分',\n LTS : 'Ah點m分s秒',\n L : 'YYYY年MMMD日',\n LL : 'YYYY年MMMD日',\n LLL : 'YYYY年MMMD日Ah點mm分',\n LLLL : 'YYYY年MMMD日ddddAh點mm分',\n l : 'YYYY年MMMD日',\n ll : 'YYYY年MMMD日',\n lll : 'YYYY年MMMD日Ah點mm分',\n llll : 'YYYY年MMMD日ddddAh點mm分'\n },\n meridiemParse: /早上|上午|中午|下午|晚上/,\n meridiemHour : function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem : function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar : {\n sameDay : '[今天]LT',\n nextDay : '[明天]LT',\n nextWeek : '[下]ddddLT',\n lastDay : '[昨天]LT',\n lastWeek : '[上]ddddLT',\n sameElse : 'L'\n },\n ordinalParse: /\\d{1,2}(日|月|週)/,\n ordinal : function (number, period) {\n switch (period) {\n case 'd' :\n case 'D' :\n case 'DDD' :\n return number + '日';\n case 'M' :\n return number + '月';\n case 'w' :\n case 'W' :\n return number + '週';\n default :\n return number;\n }\n },\n relativeTime : {\n future : '%s內',\n past : '%s前',\n s : '幾秒',\n m : '一分鐘',\n mm : '%d分鐘',\n h : '一小時',\n hh : '%d小時',\n d : '一天',\n dd : '%d天',\n M : '一個月',\n MM : '%d個月',\n y : '一年',\n yy : '%d年'\n }\n });\n\n return zh_tw;\n\n}));","//! moment.js\n//! version : 2.10.6\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, function () { 'use strict';\n\n var hookCallback;\n\n function utils_hooks__hooks () {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback (callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [], i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function create_utc__createUTC (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty : false,\n unusedTokens : [],\n unusedInput : [],\n overflow : -2,\n charsLeftOver : 0,\n nullInput : false,\n invalidMonth : null,\n invalidFormat : false,\n userInvalidated : false,\n iso : false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n function valid__isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m);\n m._isValid = !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated;\n\n if (m._strict) {\n m._isValid = m._isValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n return m._isValid;\n }\n\n function valid__createInvalid (flags) {\n var m = create_utc__createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n }\n else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n var momentProperties = utils_hooks__hooks.momentProperties = [];\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (typeof from._isAMomentObject !== 'undefined') {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (typeof from._i !== 'undefined') {\n to._i = from._i;\n }\n if (typeof from._f !== 'undefined') {\n to._f = from._f;\n }\n if (typeof from._l !== 'undefined') {\n to._l = from._l;\n }\n if (typeof from._strict !== 'undefined') {\n to._strict = from._strict;\n }\n if (typeof from._tzm !== 'undefined') {\n to._tzm = from._tzm;\n }\n if (typeof from._isUTC !== 'undefined') {\n to._isUTC = from._isUTC;\n }\n if (typeof from._offset !== 'undefined') {\n to._offset = from._offset;\n }\n if (typeof from._pf !== 'undefined') {\n to._pf = getParsingFlags(from);\n }\n if (typeof from._locale !== 'undefined') {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i in momentProperties) {\n prop = momentProperties[i];\n val = from[prop];\n if (typeof val !== 'undefined') {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n var updateInProgress = false;\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n utils_hooks__hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment (obj) {\n return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n }\n\n function absFloor (number) {\n if (number < 0) {\n return Math.ceil(number);\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if ((dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n function Locale() {\n }\n\n var locales = {};\n var globalLocale;\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0, j, next, locale, split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return null;\n }\n\n function loadLocale(name) {\n var oldLocale = null;\n // TODO: Find a better way to register and load all the locales in Node\n if (!locales[name] && typeof module !== 'undefined' &&\n module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n require('./locale/' + name);\n // because defineLocale currently also sets the global locale, we\n // want to undo that for lazy loaded locales\n locale_locales__getSetGlobalLocale(oldLocale);\n } catch (e) { }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function locale_locales__getSetGlobalLocale (key, values) {\n var data;\n if (key) {\n if (typeof values === 'undefined') {\n data = locale_locales__getLocale(key);\n }\n else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale (name, values) {\n if (values !== null) {\n values.abbr = name;\n locales[name] = locales[name] || new Locale();\n locales[name].set(values);\n\n // backwards compat for now: also set the locale\n locale_locales__getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n // returns locale data\n function locale_locales__getLocale (key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n var aliases = {};\n\n function addUnitAlias (unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n function makeGetSet (unit, keepTime) {\n return function (value) {\n if (value != null) {\n get_set__set(this, unit, value);\n utils_hooks__hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get_set__get(this, unit);\n }\n };\n }\n\n function get_set__get (mom, unit) {\n return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]();\n }\n\n function get_set__set (mom, unit, value) {\n return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n\n // MOMENTS\n\n function getSet (units, value) {\n var unit;\n if (typeof units === 'object') {\n for (unit in units) {\n this.set(unit, units[unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (typeof this[units] === 'function') {\n return this[units](value);\n }\n }\n return this;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n var formatFunctions = {};\n\n var formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken (token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens), i, length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '';\n for (i = 0; i < length; i++) {\n output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n var match2 = /\\d\\d/; // 00 - 99\n var match3 = /\\d{3}/; // 000 - 999\n var match4 = /\\d{4}/; // 0000 - 9999\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n var match1to2 = /\\d\\d?/; // 0 - 99\n var match1to3 = /\\d{1,3}/; // 0 - 999\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n // any word (or two) characters or numbers including two/three word month in arabic.\n var matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\n var regexes = {};\n\n function isFunction (sth) {\n // https://github.com/moment/moment/issues/2325\n return typeof sth === 'function' &&\n Object.prototype.toString.call(sth) === '[object Function]';\n }\n\n\n function addRegexToken (token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict) {\n return (isStrict && strictRegex) ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken (token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }).replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken (token, callback) {\n var i, func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (typeof callback === 'number') {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken (token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0;\n var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n\n function daysInMonth(year, month) {\n return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', matchWord);\n addRegexToken('MMMM', matchWord);\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n function localeMonths (m) {\n return this._months[m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n function localeMonthsShort (m) {\n return this._monthsShort[m.month()];\n }\n\n function localeMonthsParse (monthName, format, strict) {\n var i, mom, regex;\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = create_utc__createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth (mom, value) {\n var dayOfMonth;\n\n // TODO: Move this out of here!\n if (typeof value === 'string') {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (typeof value !== 'number') {\n return mom;\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth (value) {\n if (value != null) {\n setMonth(this, value);\n utils_hooks__hooks.updateOffset(this, true);\n return this;\n } else {\n return get_set__get(this, 'Month');\n }\n }\n\n function getDaysInMonth () {\n return daysInMonth(this.year(), this.month());\n }\n\n function checkOverflow (m) {\n var overflow;\n var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n function warn(msg) {\n if (utils_hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (firstTime) {\n warn(msg + '\\n' + (new Error()).stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n utils_hooks__hooks.suppressDeprecationWarnings = false;\n\n var from_string__isoRegex = /^\\s*(?:[+-]\\d{6}|\\d{4})-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n var isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d{2}-\\d{2}/],\n ['YYYY-MM-DD', /\\d{4}-\\d{2}-\\d{2}/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d{2}-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d{2}/],\n ['YYYY-DDD', /\\d{4}-\\d{3}/]\n ];\n\n // iso time formats and regexes\n var isoTimes = [\n ['HH:mm:ss.SSSS', /(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss', /(T| )\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /(T| )\\d\\d:\\d\\d/],\n ['HH', /(T| )\\d\\d/]\n ];\n\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n // date from iso format\n function configFromISO(config) {\n var i, l,\n string = config._i,\n match = from_string__isoRegex.exec(string);\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(string)) {\n config._f = isoDates[i][0];\n break;\n }\n }\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(string)) {\n // match[6] should be 'T' or space\n config._f += (match[6] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (string.match(matchOffset)) {\n config._f += 'Z';\n }\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n // date from iso format or fallback\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n utils_hooks__hooks.createFromInputFallback(config);\n }\n }\n\n utils_hooks__hooks.createFromInputFallback = deprecate(\n 'moment construction falls back to js Date. This is ' +\n 'discouraged and will be removed in upcoming major ' +\n 'release. Please refer to ' +\n 'https://github.com/moment/moment/issues/1407 for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n function createDate (y, m, d, h, M, s, ms) {\n //can't just apply() to create a date:\n //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply\n var date = new Date(y, m, d, h, M, s, ms);\n\n //the date constructor doesn't accept years < 1970\n if (y < 1970) {\n date.setFullYear(y);\n }\n return date;\n }\n\n function createUTCDate (y) {\n var date = new Date(Date.UTC.apply(null, arguments));\n if (y < 1970) {\n date.setUTCFullYear(y);\n }\n return date;\n }\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n // HOOKS\n\n utils_hooks__hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', false);\n\n function getIsLeapYear () {\n return isLeapYear(this.year());\n }\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // firstDayOfWeek 0 = sun, 6 = sat\n // the day of the week that starts the week\n // (usually sunday or monday)\n // firstDayOfWeekOfYear 0 = sun, 6 = sat\n // the first week is the week that contains the first\n // of this day of the week\n // (eg. ISO weeks use thursday (4))\n function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {\n var end = firstDayOfWeekOfYear - firstDayOfWeek,\n daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),\n adjustedMoment;\n\n\n if (daysToDayOfWeek > end) {\n daysToDayOfWeek -= 7;\n }\n\n if (daysToDayOfWeek < end - 7) {\n daysToDayOfWeek += 7;\n }\n\n adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd');\n return {\n week: Math.ceil(adjustedMoment.dayOfYear() / 7),\n year: adjustedMoment.year()\n };\n }\n\n // LOCALES\n\n function localeWeek (mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 1st is the first week of the year.\n };\n\n function localeFirstDayOfWeek () {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear () {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek (input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek (input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {\n var week1Jan = 6 + firstDayOfWeek - firstDayOfWeekOfYear, janX = createUTCDate(year, 0, 1 + week1Jan), d = janX.getUTCDay(), dayOfYear;\n if (d < firstDayOfWeek) {\n d += 7;\n }\n\n weekday = weekday != null ? 1 * weekday : firstDayOfWeek;\n\n dayOfYear = 1 + week1Jan + 7 * (week - 1) - d + weekday;\n\n return {\n year: dayOfYear > 0 ? year : year - 1,\n dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear\n };\n }\n\n // MOMENTS\n\n function getSetDayOfYear (input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n }\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n var now = new Date();\n if (config._useUTC) {\n return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()];\n }\n return [now.getFullYear(), now.getMonth(), now.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray (config) {\n var i, date, input = [], currentDate, yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse)) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year);\n week = defaults(w.w, 1);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < dow) {\n ++week;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from begining of week\n weekday = w.e + dow;\n } else {\n // default to begining of week\n weekday = dow;\n }\n }\n temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);\n\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n\n utils_hooks__hooks.ISO_8601 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === utils_hooks__hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i, parsedInput, tokens, token, skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n }\n else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n }\n else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (getParsingFlags(config).bigHour === true &&\n config._a[HOUR] <= 12 &&\n config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n\n function meridiemFixWrap (locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n\n scoreToBeat,\n i,\n currentScore;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (!valid__isValid(tempConfig)) {\n continue;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i);\n config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond];\n\n configFromArray(config);\n }\n\n function createFromConfig (config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig (config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || locale_locales__getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return valid__createInvalid({nullInput: true});\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else if (isDate(input)) {\n config._d = input;\n } else {\n configFromInput(config);\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (input === undefined) {\n config._d = new Date();\n } else if (isDate(input)) {\n config._d = new Date(+input);\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (typeof(input) === 'object') {\n configFromObject(config);\n } else if (typeof(input) === 'number') {\n // from milliseconds\n config._d = new Date(input);\n } else {\n utils_hooks__hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC (input, format, locale, strict, isUTC) {\n var c = {};\n\n if (typeof(locale) === 'boolean') {\n strict = locale;\n locale = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function local__createLocal (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548',\n function () {\n var other = local__createLocal.apply(null, arguments);\n return other < this ? this : other;\n }\n );\n\n var prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548',\n function () {\n var other = local__createLocal.apply(null, arguments);\n return other > this ? this : other;\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return local__createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n function Duration (duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 36e5; // 1000 * 60 * 60\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days +\n weeks * 7;\n // It is impossible translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months +\n quarters * 3 +\n years * 12;\n\n this._data = {};\n\n this._locale = locale_locales__getLocale();\n\n this._bubble();\n }\n\n function isDuration (obj) {\n return obj instanceof Duration;\n }\n\n function offset (token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchOffset);\n addRegexToken('ZZ', matchOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(string) {\n var matches = ((string || '').match(matchOffset) || []);\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res);\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(+res._d + diff);\n utils_hooks__hooks.updateOffset(res, false);\n return res;\n } else {\n return local__createLocal(input).local();\n }\n }\n\n function getDateOffset (m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n utils_hooks__hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset (input, keepLocalTime) {\n var offset = this._offset || 0,\n localAdjust;\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(input);\n }\n if (Math.abs(input) < 16) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n utils_hooks__hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone (input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC (keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal (keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset () {\n if (this._tzm) {\n this.utcOffset(this._tzm);\n } else if (typeof this._i === 'string') {\n this.utcOffset(offsetFromString(this._i));\n }\n return this;\n }\n\n function hasAlignedHourOffset (input) {\n input = input ? local__createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime () {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted () {\n if (typeof this._isDSTShifted !== 'undefined') {\n return this._isDSTShifted;\n }\n\n var c = {};\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a);\n this._isDSTShifted = this.isValid() &&\n compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal () {\n return !this._isUTC;\n }\n\n function isUtcOffset () {\n return this._isUTC;\n }\n\n function isUtc () {\n return this._isUTC && this._offset === 0;\n }\n\n var aspNetRegex = /(\\-)?(?:(\\d*)\\.)?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?)?/;\n\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n var create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;\n\n function create__createDuration (input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms : input._milliseconds,\n d : input._days,\n M : input._months\n };\n } else if (typeof input === 'number') {\n duration = {};\n if (key) {\n duration[key] = input;\n } else {\n duration.milliseconds = input;\n }\n } else if (!!(match = aspNetRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : 0,\n d : toInt(match[DATE]) * sign,\n h : toInt(match[HOUR]) * sign,\n m : toInt(match[MINUTE]) * sign,\n s : toInt(match[SECOND]) * sign,\n ms : toInt(match[MILLISECOND]) * sign\n };\n } else if (!!(match = create__isoRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : parseIso(match[2], sign),\n M : parseIso(match[3], sign),\n d : parseIso(match[4], sign),\n h : parseIso(match[5], sign),\n m : parseIso(match[6], sign),\n s : parseIso(match[7], sign),\n w : parseIso(match[8], sign)\n };\n } else if (duration == null) {// checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to));\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n return ret;\n }\n\n create__createDuration.fn = Duration.prototype;\n\n function parseIso (inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {milliseconds: 0, months: 0};\n\n res.months = other.month() - base.month() +\n (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).');\n tmp = val; val = period; period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\n dur = create__createDuration(val, period);\n add_subtract__addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = duration._days,\n months = duration._months;\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (milliseconds) {\n mom._d.setTime(+mom._d + milliseconds * isAdding);\n }\n if (days) {\n get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);\n }\n if (months) {\n setMonth(mom, get_set__get(mom, 'Month') + months * isAdding);\n }\n if (updateOffset) {\n utils_hooks__hooks.updateOffset(mom, days || months);\n }\n }\n\n var add_subtract__add = createAdder(1, 'add');\n var add_subtract__subtract = createAdder(-1, 'subtract');\n\n function moment_calendar__calendar (time, formats) {\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || local__createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n diff = this.diff(sod, 'days', true),\n format = diff < -6 ? 'sameElse' :\n diff < -1 ? 'lastWeek' :\n diff < 0 ? 'lastDay' :\n diff < 1 ? 'sameDay' :\n diff < 2 ? 'nextDay' :\n diff < 7 ? 'nextWeek' : 'sameElse';\n return this.format(formats && formats[format] || this.localeData().calendar(format, this, local__createLocal(now)));\n }\n\n function clone () {\n return new Moment(this);\n }\n\n function isAfter (input, units) {\n var inputMs;\n units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');\n if (units === 'millisecond') {\n input = isMoment(input) ? input : local__createLocal(input);\n return +this > +input;\n } else {\n inputMs = isMoment(input) ? +input : +local__createLocal(input);\n return inputMs < +this.clone().startOf(units);\n }\n }\n\n function isBefore (input, units) {\n var inputMs;\n units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');\n if (units === 'millisecond') {\n input = isMoment(input) ? input : local__createLocal(input);\n return +this < +input;\n } else {\n inputMs = isMoment(input) ? +input : +local__createLocal(input);\n return +this.clone().endOf(units) < inputMs;\n }\n }\n\n function isBetween (from, to, units) {\n return this.isAfter(from, units) && this.isBefore(to, units);\n }\n\n function isSame (input, units) {\n var inputMs;\n units = normalizeUnits(units || 'millisecond');\n if (units === 'millisecond') {\n input = isMoment(input) ? input : local__createLocal(input);\n return +this === +input;\n } else {\n inputMs = +local__createLocal(input);\n return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units));\n }\n }\n\n function diff (input, units, asFloat) {\n var that = cloneWithOffset(input, this),\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4,\n delta, output;\n\n units = normalizeUnits(units);\n\n if (units === 'year' || units === 'month' || units === 'quarter') {\n output = monthDiff(this, that);\n if (units === 'quarter') {\n output = output / 3;\n } else if (units === 'year') {\n output = output / 12;\n }\n } else {\n delta = this - that;\n output = units === 'second' ? delta / 1e3 : // 1000\n units === 'minute' ? delta / 6e4 : // 1000 * 60\n units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n delta;\n }\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff (a, b) {\n // difference in months\n var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2, adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n return -(wholeMonthDiff + adjust);\n }\n\n utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n\n function toString () {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function moment_format__toISOString () {\n var m = this.clone().utc();\n if (0 < m.year() && m.year() <= 9999) {\n if ('function' === typeof Date.prototype.toISOString) {\n // native implementation is ~50x faster, use it when we can\n return this.toDate().toISOString();\n } else {\n return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n }\n } else {\n return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n }\n }\n\n function format (inputString) {\n var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat);\n return this.localeData().postformat(output);\n }\n\n function from (time, withoutSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n }\n\n function fromNow (withoutSuffix) {\n return this.from(local__createLocal(), withoutSuffix);\n }\n\n function to (time, withoutSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n }\n\n function toNow (withoutSuffix) {\n return this.to(local__createLocal(), withoutSuffix);\n }\n\n function locale (key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = locale_locales__getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData () {\n return this._locale;\n }\n\n function startOf (units) {\n units = normalizeUnits(units);\n // the following switch intentionally omits break keywords\n // to utilize falling through the cases.\n switch (units) {\n case 'year':\n this.month(0);\n /* falls through */\n case 'quarter':\n case 'month':\n this.date(1);\n /* falls through */\n case 'week':\n case 'isoWeek':\n case 'day':\n this.hours(0);\n /* falls through */\n case 'hour':\n this.minutes(0);\n /* falls through */\n case 'minute':\n this.seconds(0);\n /* falls through */\n case 'second':\n this.milliseconds(0);\n }\n\n // weeks are a special case\n if (units === 'week') {\n this.weekday(0);\n }\n if (units === 'isoWeek') {\n this.isoWeekday(1);\n }\n\n // quarters are also special\n if (units === 'quarter') {\n this.month(Math.floor(this.month() / 3) * 3);\n }\n\n return this;\n }\n\n function endOf (units) {\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond') {\n return this;\n }\n return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n }\n\n function to_type__valueOf () {\n return +this._d - ((this._offset || 0) * 60000);\n }\n\n function unix () {\n return Math.floor(+this / 1000);\n }\n\n function toDate () {\n return this._offset ? new Date(+this) : this._d;\n }\n\n function toArray () {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject () {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function moment_valid__isValid () {\n return valid__isValid(this);\n }\n\n function parsingFlags () {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt () {\n return getParsingFlags(this).overflow;\n }\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken (token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = utils_hooks__hooks.parseTwoDigitYear(input);\n });\n\n // HELPERS\n\n function weeksInYear(year, dow, doy) {\n return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week;\n }\n\n // MOMENTS\n\n function getSetWeekYear (input) {\n var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;\n return input == null ? year : this.add((input - year), 'y');\n }\n\n function getSetISOWeekYear (input) {\n var year = weekOfYear(this, 1, 4).year;\n return input == null ? year : this.add((input - year), 'y');\n }\n\n function getISOWeeksInYear () {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getWeeksInYear () {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n addFormatToken('Q', 0, 0, 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter (input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0], 10);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', matchWord);\n addRegexToken('ddd', matchWord);\n addRegexToken('dddd', matchWord);\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) {\n var weekday = config._locale.weekdaysParse(input);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n // LOCALES\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n function localeWeekdays (m) {\n return this._weekdays[m.day()];\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n function localeWeekdaysShort (m) {\n return this._weekdaysShort[m.day()];\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n function localeWeekdaysMin (m) {\n return this._weekdaysMin[m.day()];\n }\n\n function localeWeekdaysParse (weekdayName) {\n var i, mom, regex;\n\n this._weekdaysParse = this._weekdaysParse || [];\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n if (!this._weekdaysParse[i]) {\n mom = local__createLocal([2000, 1]).day(i);\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek (input) {\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek (input) {\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek (input) {\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, function () {\n return this.hours() % 12 || 12;\n });\n\n function meridiem (token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PARSING\n\n function matchMeridiem (isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n\n // LOCALES\n\n function localeIsPM (input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return ((input + '').toLowerCase().charAt(0) === 'p');\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n function localeMeridiem (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n\n // MOMENTS\n\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour he wants. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n var getSetHour = makeGetSet('Hours', true);\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n // MOMENTS\n\n var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr () {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName () {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var momentPrototype__proto = Moment.prototype;\n\n momentPrototype__proto.add = add_subtract__add;\n momentPrototype__proto.calendar = moment_calendar__calendar;\n momentPrototype__proto.clone = clone;\n momentPrototype__proto.diff = diff;\n momentPrototype__proto.endOf = endOf;\n momentPrototype__proto.format = format;\n momentPrototype__proto.from = from;\n momentPrototype__proto.fromNow = fromNow;\n momentPrototype__proto.to = to;\n momentPrototype__proto.toNow = toNow;\n momentPrototype__proto.get = getSet;\n momentPrototype__proto.invalidAt = invalidAt;\n momentPrototype__proto.isAfter = isAfter;\n momentPrototype__proto.isBefore = isBefore;\n momentPrototype__proto.isBetween = isBetween;\n momentPrototype__proto.isSame = isSame;\n momentPrototype__proto.isValid = moment_valid__isValid;\n momentPrototype__proto.lang = lang;\n momentPrototype__proto.locale = locale;\n momentPrototype__proto.localeData = localeData;\n momentPrototype__proto.max = prototypeMax;\n momentPrototype__proto.min = prototypeMin;\n momentPrototype__proto.parsingFlags = parsingFlags;\n momentPrototype__proto.set = getSet;\n momentPrototype__proto.startOf = startOf;\n momentPrototype__proto.subtract = add_subtract__subtract;\n momentPrototype__proto.toArray = toArray;\n momentPrototype__proto.toObject = toObject;\n momentPrototype__proto.toDate = toDate;\n momentPrototype__proto.toISOString = moment_format__toISOString;\n momentPrototype__proto.toJSON = moment_format__toISOString;\n momentPrototype__proto.toString = toString;\n momentPrototype__proto.unix = unix;\n momentPrototype__proto.valueOf = to_type__valueOf;\n\n // Year\n momentPrototype__proto.year = getSetYear;\n momentPrototype__proto.isLeapYear = getIsLeapYear;\n\n // Week Year\n momentPrototype__proto.weekYear = getSetWeekYear;\n momentPrototype__proto.isoWeekYear = getSetISOWeekYear;\n\n // Quarter\n momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter;\n\n // Month\n momentPrototype__proto.month = getSetMonth;\n momentPrototype__proto.daysInMonth = getDaysInMonth;\n\n // Week\n momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek;\n momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek;\n momentPrototype__proto.weeksInYear = getWeeksInYear;\n momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear;\n\n // Day\n momentPrototype__proto.date = getSetDayOfMonth;\n momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek;\n momentPrototype__proto.weekday = getSetLocaleDayOfWeek;\n momentPrototype__proto.isoWeekday = getSetISODayOfWeek;\n momentPrototype__proto.dayOfYear = getSetDayOfYear;\n\n // Hour\n momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour;\n\n // Minute\n momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute;\n\n // Second\n momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond;\n\n // Millisecond\n momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond;\n\n // Offset\n momentPrototype__proto.utcOffset = getSetOffset;\n momentPrototype__proto.utc = setOffsetToUTC;\n momentPrototype__proto.local = setOffsetToLocal;\n momentPrototype__proto.parseZone = setOffsetToParsedOffset;\n momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;\n momentPrototype__proto.isDST = isDaylightSavingTime;\n momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted;\n momentPrototype__proto.isLocal = isLocal;\n momentPrototype__proto.isUtcOffset = isUtcOffset;\n momentPrototype__proto.isUtc = isUtc;\n momentPrototype__proto.isUTC = isUtc;\n\n // Timezone\n momentPrototype__proto.zoneAbbr = getZoneAbbr;\n momentPrototype__proto.zoneName = getZoneName;\n\n // Deprecations\n momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone);\n\n var momentPrototype = momentPrototype__proto;\n\n function moment__createUnix (input) {\n return local__createLocal(input * 1000);\n }\n\n function moment__createInZone () {\n return local__createLocal.apply(null, arguments).parseZone();\n }\n\n var defaultCalendar = {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n };\n\n function locale_calendar__calendar (key, mom, now) {\n var output = this._calendar[key];\n return typeof output === 'function' ? output.call(mom, now) : output;\n }\n\n var defaultLongDateFormat = {\n LTS : 'h:mm:ss A',\n LT : 'h:mm A',\n L : 'MM/DD/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat (key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate () {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d';\n var defaultOrdinalParse = /\\d{1,2}/;\n\n function ordinal (number) {\n return this._ordinal.replace('%d', number);\n }\n\n function preParsePostFormat (string) {\n return string;\n }\n\n var defaultRelativeTime = {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n };\n\n function relative__relativeTime (number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return (typeof output === 'function') ?\n output(number, withoutSuffix, string, isFuture) :\n output.replace(/%d/i, number);\n }\n\n function pastFuture (diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);\n }\n\n function locale_set__set (config) {\n var prop, i;\n for (i in config) {\n prop = config[i];\n if (typeof prop === 'function') {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _ordinalParseLenient.\n this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\\d{1,2}/).source);\n }\n\n var prototype__proto = Locale.prototype;\n\n prototype__proto._calendar = defaultCalendar;\n prototype__proto.calendar = locale_calendar__calendar;\n prototype__proto._longDateFormat = defaultLongDateFormat;\n prototype__proto.longDateFormat = longDateFormat;\n prototype__proto._invalidDate = defaultInvalidDate;\n prototype__proto.invalidDate = invalidDate;\n prototype__proto._ordinal = defaultOrdinal;\n prototype__proto.ordinal = ordinal;\n prototype__proto._ordinalParse = defaultOrdinalParse;\n prototype__proto.preparse = preParsePostFormat;\n prototype__proto.postformat = preParsePostFormat;\n prototype__proto._relativeTime = defaultRelativeTime;\n prototype__proto.relativeTime = relative__relativeTime;\n prototype__proto.pastFuture = pastFuture;\n prototype__proto.set = locale_set__set;\n\n // Month\n prototype__proto.months = localeMonths;\n prototype__proto._months = defaultLocaleMonths;\n prototype__proto.monthsShort = localeMonthsShort;\n prototype__proto._monthsShort = defaultLocaleMonthsShort;\n prototype__proto.monthsParse = localeMonthsParse;\n\n // Week\n prototype__proto.week = localeWeek;\n prototype__proto._week = defaultLocaleWeek;\n prototype__proto.firstDayOfYear = localeFirstDayOfYear;\n prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;\n\n // Day of Week\n prototype__proto.weekdays = localeWeekdays;\n prototype__proto._weekdays = defaultLocaleWeekdays;\n prototype__proto.weekdaysMin = localeWeekdaysMin;\n prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin;\n prototype__proto.weekdaysShort = localeWeekdaysShort;\n prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort;\n prototype__proto.weekdaysParse = localeWeekdaysParse;\n\n // Hours\n prototype__proto.isPM = localeIsPM;\n prototype__proto._meridiemParse = defaultLocaleMeridiemParse;\n prototype__proto.meridiem = localeMeridiem;\n\n function lists__get (format, index, field, setter) {\n var locale = locale_locales__getLocale();\n var utc = create_utc__createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function list (format, index, field, count, setter) {\n if (typeof format === 'number') {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return lists__get(format, index, field, setter);\n }\n\n var i;\n var out = [];\n for (i = 0; i < count; i++) {\n out[i] = lists__get(format, i, field, setter);\n }\n return out;\n }\n\n function lists__listMonths (format, index) {\n return list(format, index, 'months', 12, 'month');\n }\n\n function lists__listMonthsShort (format, index) {\n return list(format, index, 'monthsShort', 12, 'month');\n }\n\n function lists__listWeekdays (format, index) {\n return list(format, index, 'weekdays', 7, 'day');\n }\n\n function lists__listWeekdaysShort (format, index) {\n return list(format, index, 'weekdaysShort', 7, 'day');\n }\n\n function lists__listWeekdaysMin (format, index) {\n return list(format, index, 'weekdaysMin', 7, 'day');\n }\n\n locale_locales__getSetGlobalLocale('en', {\n ordinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (toInt(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale);\n utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale);\n\n var mathAbs = Math.abs;\n\n function duration_abs__abs () {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function duration_add_subtract__addSubtract (duration, input, value, direction) {\n var other = create__createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function duration_add_subtract__add (input, value) {\n return duration_add_subtract__addSubtract(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function duration_add_subtract__subtract (input, value) {\n return duration_add_subtract__addSubtract(this, input, value, -1);\n }\n\n function absCeil (number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble () {\n var milliseconds = this._milliseconds;\n var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0))) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths (days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays (months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as (units) {\n var days;\n var months;\n var milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n return units === 'month' ? months : months / 12;\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week' : return days / 7 + milliseconds / 6048e5;\n case 'day' : return days + milliseconds / 864e5;\n case 'hour' : return days * 24 + milliseconds / 36e5;\n case 'minute' : return days * 1440 + milliseconds / 6e4;\n case 'second' : return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n default: throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function duration_as__valueOf () {\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs (alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms');\n var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asYears = makeAs('y');\n\n function duration_get__get (units) {\n units = normalizeUnits(units);\n return this[units + 's']();\n }\n\n function makeGetter(name) {\n return function () {\n return this._data[name];\n };\n }\n\n var milliseconds = makeGetter('milliseconds');\n var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks () {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var thresholds = {\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month\n M: 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) {\n var duration = create__createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n\n var a = seconds < thresholds.s && ['s', seconds] ||\n minutes === 1 && ['m'] ||\n minutes < thresholds.m && ['mm', minutes] ||\n hours === 1 && ['h'] ||\n hours < thresholds.h && ['hh', hours] ||\n days === 1 && ['d'] ||\n days < thresholds.d && ['dd', days] ||\n months === 1 && ['M'] ||\n months < thresholds.M && ['MM', months] ||\n years === 1 && ['y'] || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set a threshold for relative time strings\n function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n return true;\n }\n\n function humanize (withSuffix) {\n var locale = this.localeData();\n var output = duration_humanize__relativeTime(this, !withSuffix, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var iso_string__abs = Math.abs;\n\n function iso_string__toISOString() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n var seconds = iso_string__abs(this._milliseconds) / 1000;\n var days = iso_string__abs(this._days);\n var months = iso_string__abs(this._months);\n var minutes, hours, years;\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds;\n var total = this.asSeconds();\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n return (total < 0 ? '-' : '') +\n 'P' +\n (Y ? Y + 'Y' : '') +\n (M ? M + 'M' : '') +\n (D ? D + 'D' : '') +\n ((h || m || s) ? 'T' : '') +\n (h ? h + 'H' : '') +\n (m ? m + 'M' : '') +\n (s ? s + 'S' : '');\n }\n\n var duration_prototype__proto = Duration.prototype;\n\n duration_prototype__proto.abs = duration_abs__abs;\n duration_prototype__proto.add = duration_add_subtract__add;\n duration_prototype__proto.subtract = duration_add_subtract__subtract;\n duration_prototype__proto.as = as;\n duration_prototype__proto.asMilliseconds = asMilliseconds;\n duration_prototype__proto.asSeconds = asSeconds;\n duration_prototype__proto.asMinutes = asMinutes;\n duration_prototype__proto.asHours = asHours;\n duration_prototype__proto.asDays = asDays;\n duration_prototype__proto.asWeeks = asWeeks;\n duration_prototype__proto.asMonths = asMonths;\n duration_prototype__proto.asYears = asYears;\n duration_prototype__proto.valueOf = duration_as__valueOf;\n duration_prototype__proto._bubble = bubble;\n duration_prototype__proto.get = duration_get__get;\n duration_prototype__proto.milliseconds = milliseconds;\n duration_prototype__proto.seconds = seconds;\n duration_prototype__proto.minutes = minutes;\n duration_prototype__proto.hours = hours;\n duration_prototype__proto.days = days;\n duration_prototype__proto.weeks = weeks;\n duration_prototype__proto.months = months;\n duration_prototype__proto.years = years;\n duration_prototype__proto.humanize = humanize;\n duration_prototype__proto.toISOString = iso_string__toISOString;\n duration_prototype__proto.toString = iso_string__toISOString;\n duration_prototype__proto.toJSON = iso_string__toISOString;\n duration_prototype__proto.locale = locale;\n duration_prototype__proto.localeData = localeData;\n\n // Deprecations\n duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString);\n duration_prototype__proto.lang = lang;\n\n // Side effect imports\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n // Side effect imports\n\n\n utils_hooks__hooks.version = '2.10.6';\n\n setHookCallback(local__createLocal);\n\n utils_hooks__hooks.fn = momentPrototype;\n utils_hooks__hooks.min = min;\n utils_hooks__hooks.max = max;\n utils_hooks__hooks.utc = create_utc__createUTC;\n utils_hooks__hooks.unix = moment__createUnix;\n utils_hooks__hooks.months = lists__listMonths;\n utils_hooks__hooks.isDate = isDate;\n utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale;\n utils_hooks__hooks.invalid = valid__createInvalid;\n utils_hooks__hooks.duration = create__createDuration;\n utils_hooks__hooks.isMoment = isMoment;\n utils_hooks__hooks.weekdays = lists__listWeekdays;\n utils_hooks__hooks.parseZone = moment__createInZone;\n utils_hooks__hooks.localeData = locale_locales__getLocale;\n utils_hooks__hooks.isDuration = isDuration;\n utils_hooks__hooks.monthsShort = lists__listMonthsShort;\n utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin;\n utils_hooks__hooks.defineLocale = defineLocale;\n utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort;\n utils_hooks__hooks.normalizeUnits = normalizeUnits;\n utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;\n\n var _moment = utils_hooks__hooks;\n\n return _moment;\n\n}));","// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define === 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}.call(this));\n","import Element from '../utilities/element';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery'\r\n\r\ndeclare global {\r\n interface JQuery {\r\n datetimepicker(options?: any, args?: any): JQuery;\r\n inputmask(options?: any): JQuery;\r\n datefield(): JQuery;\r\n }\r\n}\r\n\r\nexport class DateField {\r\n public static get pickerButtonSelector() {\r\n return '.datefield-button';\r\n }\r\n public static get wireup() {\r\n return '[data-datefield]';\r\n }\r\n public get dateFormat() {\r\n return this.config.dateFormat;\r\n }\r\n\r\n private dateFormatId: string;\r\n private hasPicker: boolean;\r\n private $button: JQuery;\r\n private config: Configuration;\r\n\r\n public constructor(private $element: JQuery) {\r\n if (!this.$element || this.$element.length == 0)\r\n throw Error('Rustig.DateField requires an element');\r\n\r\n try {\r\n this.$element.data('r-is-constructing', true);\r\n this.dateFormatId = this.$element.data('datefield');\r\n this.config = new Configuration(this.dateFormatId);\r\n this.hasPicker = this.$element.data('picker') == 'on';\r\n\r\n this.validate();\r\n this.wireupEvents();\r\n this.applyInputMask();\r\n this.applyPicker();\r\n\r\n if (!this.hasPicker)\r\n this.$button.hide();\r\n }\r\n finally {\r\n this.$element.data('r-is-constructing', false);\r\n }\r\n }\r\n\r\n private wireupEvents(): void {\r\n this.$element.change((e) => this.$element.trigger('change.rustig', e))\r\n .on('dp.change', (e) => this.$element.trigger('change.rustig', e));\r\n }\r\n\r\n private applyInputMask(): void {\r\n this.$element.inputmask(this.config.inputMaskOptions);\r\n }\r\n\r\n private applyPicker(): void {\r\n this.$element.on('focus.rustig.datefield', (e: JQueryEventObject) => this.onInputFocus(e));\r\n this.$element.datetimepicker(this.config.datePickerOptions);\r\n this.$button = this.$element.closest('.datefield').find(DateField.pickerButtonSelector);\r\n this.$button.on('click.rustig.datefield', (e: JQueryEventObject) => this.onPickerButtonClicked(e));\r\n }\r\n\r\n private onPickerButtonClicked(e: JQueryEventObject): void {\r\n e.preventDefault();\r\n this.$element.data('DateTimePicker').show();\r\n }\r\n\r\n private onInputFocus(e: JQueryEventObject): void {\r\n e.stopPropagation();\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n\r\n this.$element.trigger('onfocus.rustig');\r\n }\r\n\r\n private validate(): void {\r\n if (!this.config.hasSupportedFormat)\r\n throw Error('The format provided is not supported: ' + this.dateFormatId || '(null)');\r\n }\r\n}\r\n\r\ninterface DateFormat {\r\n id: string;\r\n inputMaskFormat: string;\r\n pickerDateFormat: string;\r\n}\r\n\r\nclass Configuration {\r\n public hasSupportedFormat: boolean;\r\n public get datePickerOptions(): any {\r\n return {\r\n useCurrent: false,\r\n viewMode: 'days',\r\n format: this._dateFormat.pickerDateFormat,\r\n keyBinds: {\r\n enter: function () {\r\n this.hide();\r\n },\r\n escape: function () {\r\n this.hide();\r\n },\r\n }\r\n };\r\n }\r\n public get inputMaskOptions(): any {\r\n return {\r\n alias: this._dateFormat.inputMaskFormat,\r\n showMaskOnHover: false,\r\n clearIncomplete: false,\r\n yearrange: { minyear: 0, maxyear: 2099 }\r\n };\r\n }\r\n public get dateFormat() {\r\n return this._dateFormat;\r\n }\r\n\r\n private _dateFormat: DateFormat;\r\n private static supportedFormats: Array = [\r\n { id: 'date', inputMaskFormat: 'mm/dd/yyyy', pickerDateFormat: 'MM/DD/YYYY' },\r\n { id: 'datetime', inputMaskFormat: 'mm/dd/yyyy hh:mm xm', pickerDateFormat: 'MM/DD/YYYY HH:mm a' },\r\n { id: 'time', inputMaskFormat: 'hh:mm t', pickerDateFormat: 'HH:mm a' }\r\n ];\r\n\r\n public constructor(private dateFormatId) {\r\n this._dateFormat = this.findDateFormat();\r\n this.hasSupportedFormat = this._dateFormat != null;\r\n }\r\n\r\n private findDateFormat(): DateFormat {\r\n return _.find(Configuration.supportedFormats, (f) => f.id == this.dateFormatId);\r\n }\r\n}\r\n\r\nfunction Plugin() {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.datefield');\r\n\r\n if (!data) {\r\n data = new DateField($this);\r\n $this.data('rustig.datefield', data);\r\n }\r\n });\r\n}\r\n\r\n($.fn).datefield = Plugin;\r\n\r\n","/*\n * jQuery Highlight plugin\n *\n * Based on highlight v3 by Johann Burkard\n * http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html\n *\n * Code a little bit refactored and cleaned (in my humble opinion).\n * Most important changes:\n * - has an option to highlight only entire words (wordsOnly - false by default),\n * - has an option to be case sensitive (caseSensitive - false by default)\n * - highlight element tag and class names can be specified in options\n *\n * Usage:\n * // wrap every occurrence of text 'lorem' in content\n * // with (default options)\n * $('#content').highlight('lorem');\n *\n * // search for and highlight more terms at once\n * // so you can save some time on traversing DOM\n * $('#content').highlight(['lorem', 'ipsum']);\n * $('#content').highlight('lorem ipsum');\n *\n * // search only for entire word 'lorem'\n * $('#content').highlight('lorem', { wordsOnly: true });\n *\n * // search only for the entire word 'C#'\n * // and make sure that the word boundary can also\n * // be a 'non-word' character, as well as a regex latin1 only boundary:\n * $('#content').highlight('C#', { wordsOnly: true , wordsBoundary: '[\\\\b\\\\W]' });\n *\n * // don't ignore case during search of term 'lorem'\n * $('#content').highlight('lorem', { caseSensitive: true });\n *\n * // wrap every occurrence of term 'ipsum' in content\n * // with \n * $('#content').highlight('ipsum', { element: 'em', className: 'important' });\n *\n * // remove default highlight\n * $('#content').unhighlight();\n *\n * // remove custom highlight\n * $('#content').unhighlight({ element: 'em', className: 'important' });\n *\n *\n * Copyright (c) 2009 Bartek Szopka\n *\n * Licensed under MIT license.\n *\n */\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n // Node/CommonJS\n factory(require('jquery'));\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function (jQuery) {\n jQuery.extend({\n highlight: function (node, re, nodeName, className, callback) {\n if (node.nodeType === 3) {\n var match = node.data.match(re);\n if (match) {\n // The new highlight Element Node\n var highlight = document.createElement(nodeName || 'span');\n highlight.className = className || 'highlight';\n // Note that we use the captured value to find the real index\n // of the match. This is because we do not want to include the matching word boundaries\n var capturePos = node.data.indexOf( match[1] , match.index );\n\n // Split the node and replace the matching wordnode\n // with the highlighted node\n var wordNode = node.splitText(capturePos);\n wordNode.splitText(match[1].length);\n\n var wordClone = wordNode.cloneNode(true);\n highlight.appendChild(wordClone);\n wordNode.parentNode.replaceChild(highlight, wordNode);\n if (typeof callback == 'function') {\n callback(highlight) \n }\n return 1; //skip added node in parent\n }\n } else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children\n !/(script|style)/i.test(node.tagName) && // ignore script and style nodes\n !(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted\n for (var i = 0; i < node.childNodes.length; i++) {\n i += jQuery.highlight(node.childNodes[i], re, nodeName, className, callback);\n }\n }\n return 0;\n }\n });\n\n jQuery.fn.unhighlight = function (options) {\n var settings = {\n className: 'highlight',\n element: 'span'\n };\n\n jQuery.extend(settings, options);\n\n return this.find(settings.element + '.' + settings.className).each(function () {\n var parent = this.parentNode;\n parent.replaceChild(this.firstChild, this);\n parent.normalize();\n }).end();\n };\n\n jQuery.fn.highlight = function (words, options, callback) {\n var settings = {\n className: 'highlight',\n element: 'span',\n caseSensitive: false,\n wordsOnly: false,\n wordsBoundary: '\\\\b'\n };\n\n jQuery.extend(settings, options);\n\n if (typeof words === 'string') {\n words = [words];\n }\n words = jQuery.grep(words, function(word, i){\n return word != '';\n });\n words = jQuery.map(words, function(word, i) {\n return word.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n });\n\n if (words.length === 0) {\n return this;\n };\n\n var flag = settings.caseSensitive ? '' : 'i';\n // The capture parenthesis will make sure we can match\n // only the matching word\n var pattern = '(' + words.join('|') + ')';\n if (settings.wordsOnly) {\n pattern =\n (settings.wordsBoundaryStart || settings.wordsBoundary) +\n pattern +\n (settings.wordsBoundaryEnd || settings.wordsBoundary);\n }\n var re = new RegExp(pattern, flag);\n\n return this.each(function () {\n jQuery.highlight(this, re, settings.element, settings.className, callback);\n });\n };\n}));\n","export class KeyCode {\r\n public static get Escape(): number { return 27; }\r\n public static get Enter(): number { return 13; }\r\n public static get Up(): number { return 38; }\r\n public static get Down(): number { return 40; }\r\n public static get Tab(): number { return 9; }\r\n\r\n public static get A(): number { return 65; }\r\n}\r\n\r\nexport default KeyCode;","import $ from 'jquery';\r\nimport Element from '../utilities/element';\r\nimport KeyCode from \"../utilities/keycode\";\r\nimport _ from 'underscore';\r\nimport { OnFilteredEventObject } from \"./filteritems\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n multiselectdropdown: (option, args) => any;\r\n }\r\n}\r\n\r\nexport class MultiSelectDropdown {\r\n public static get wireup() {\r\n return '[data-multiselect]';\r\n }\r\n\r\n private static wireupDocument: Function = _.once(() => {\r\n $(document).on('change.rustig.multiselect', '[data-ms-item] [data-ms-checkbox]', function () {\r\n MultiSelectDropdown.findFromCheckbox($(this)).onItemChecked();\r\n });\r\n });\r\n\r\n public static findFromCheckbox($checkbox: JQuery): MultiSelectDropdown {\r\n let popoverId = $checkbox.closest('[data-ms-popover').data('ms-popover');\r\n let $multiSelect = $('[data-popover=\"' + popoverId + '\"]').closest('[data-multiselect]');\r\n let multiSelect = $multiSelect.data('rustig.multiselectdropdown');\r\n\r\n return multiSelect;\r\n }\r\n\r\n private $element: JQuery;\r\n private $realInput: JQuery;\r\n private $popover: JQuery;\r\n private $popoverTrigger: JQuery;\r\n private $userFacingInput: JQuery;\r\n private $inputDisplay: JQuery;\r\n private $filterInput: JQuery;\r\n private $filterButton: JQuery;\r\n private $filterButtonIcon: JQuery;\r\n private $clearFilters: JQuery;\r\n private $itemsContainer: JQuery;\r\n private filters: Filter;\r\n private popoverId: string;\r\n private emptyText: string;\r\n\r\n private get emptyFilter(): Filter {\r\n return {\r\n showSelectedOnly: false,\r\n keywordSearch: null\r\n };\r\n }\r\n\r\n private get isButtonRendered(): boolean {\r\n return this.$userFacingInput.is('[data-ms-as-button]');\r\n }\r\n\r\n private get errorPopover(): any {\r\n if (!this.$userFacingInput.is('.input-validation-error'))\r\n return null;\r\n return this.$popoverTrigger.data('rustig.popover.error');\r\n }\r\n\r\n public get $userFacingElement(): JQuery {\r\n return this.$userFacingInput;\r\n }\r\n\r\n public get $valueElement(): JQuery {\r\n return this.$realInput;\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined && value) {\r\n this.$realInput.val(value);\r\n this.onValueSet();\r\n }\r\n else\r\n return this.$realInput.val();\r\n }\r\n\r\n public text(text?: any): any | void {\r\n if (text !== undefined) {\r\n this.$inputDisplay.text(text);\r\n }\r\n else\r\n return this.$inputDisplay.text();\r\n }\r\n\r\n public name(): string {\r\n return this.$realInput.attr('name');\r\n }\r\n\r\n public constructor($element: JQuery, options: any) {\r\n MultiSelectDropdown.wireupDocument();\r\n\r\n if (!$element || $element.length != 1)\r\n throw new Error('You must provide an element to Rustig.MultiSelectDropdown');\r\n\r\n $element.data('mappable', 'on');\r\n this.$element = $element;\r\n this.filters = this.emptyFilter;\r\n this.cacheElements();\r\n this.handleReadonly();\r\n this.onSelectionChanged();\r\n this.wireupEvents();\r\n }\r\n\r\n private cacheElements(): void {\r\n this.$realInput = this.$element.find('[data-ms-real-input]');\r\n this.$userFacingInput = this.$element.find('[data-ms-user-facing-input]');\r\n this.$inputDisplay = this.$element.find('[data-ms-input-display]');\r\n this.$popoverTrigger = this.$element.find('[data-popover]');\r\n\r\n // force the popover to be shown so we can cache it\r\n this.$popoverTrigger.popover('open').popover('close');\r\n\r\n this.popoverId = this.$popoverTrigger.data('popover');\r\n this.$popover = $('[data-ms-popover=\"' + this.popoverId + '\"]');\r\n this.$filterInput = this.$popover.find('[data-ms-filter-input]');\r\n this.$filterButton = this.$popover.find('[data-ms-filter-button]');\r\n this.$filterButtonIcon = this.$popover.find('[data-ms-filter-button-icon]');\r\n this.$clearFilters = this.$popover.find('[data-ms-clear-filters]');\r\n this.$itemsContainer = this.$popover.find('[data-ms-items]');\r\n this.emptyText = this.$userFacingInput.data(\"ms-empty-text\");\r\n }\r\n\r\n private handleReadonly(): void {\r\n if (this.$popoverTrigger.isReadonly())\r\n this.$popoverTrigger.popover('disable');\r\n }\r\n\r\n private wireupEvents(): void {\r\n this.$userFacingInput.on('focus', (e: JQueryEventObject) => {\r\n this.openErrorPopover(e);\r\n });\r\n\r\n this.$userFacingInput.on('blur', (e: JQueryEventObject) => {\r\n this.closeErrorPopover(e);\r\n });\r\n\r\n this.$popoverTrigger.on('shown.rustig.popover', (e: any, data: any) => {\r\n if (data.channel.toString() !== this.popoverId)\r\n return;\r\n\r\n this.focusKeywordFilter();\r\n this.openErrorPopover(e as JQueryEventObject);\r\n });\r\n\r\n this.$popoverTrigger.on('hide.rustig.popover', (e) => {\r\n this.$filterInput.val(null).trigger('input');\r\n this.$filterButton.removeClass('active');\r\n\r\n this.filters.showSelectedOnly = false;\r\n this.filters.keywordSearch = null;\r\n this.onFilterChanged();\r\n });\r\n\r\n this.$filterButton.on('click.rustig.multiselect', () => {\r\n this.filters.showSelectedOnly = !this.filters.showSelectedOnly;\r\n\r\n this.focusKeywordFilter();\r\n this.onFilterChanged();\r\n });\r\n\r\n this.$filterInput.on('onfiltered.rustig.filteritems', (e: any, data: OnFilteredEventObject) => {\r\n this.showOrHideItems(data.$filtered, false);\r\n this.showOrHideItems(data.$matched, true);\r\n });\r\n\r\n this.$filterInput.on('input.rustig.multiselect', () => {\r\n this.filters.keywordSearch = new Element($(this.$filterInput)).value();\r\n this.filters.showSelectedOnly = false;\r\n this.onFilterChanged();\r\n });\r\n\r\n this.$clearFilters.on('click.rustig.multiselect', () => {\r\n this.filters = this.emptyFilter;\r\n new Element(this.$filterInput).value(null);\r\n this.$filterInput.trigger('input');\r\n\r\n this.deselectAllItems();\r\n this.focusKeywordFilter();\r\n this.onFilterChanged();\r\n });\r\n\r\n this.$popover.on('keypress.rustig.multiselect', (e: JQueryEventObject) => {\r\n if (e.keyCode != KeyCode.Enter)\r\n return true;\r\n\r\n this.$popoverTrigger.popover('close');\r\n // todo: up\\down arrow support\r\n // todo: open flyout on keypress\r\n });\r\n }\r\n\r\n private onSelectionChanged(): void {\r\n let $selectedItems = this.$popover.find(':checked').closest('[data-ms-item]');\r\n\r\n let selections = _.map($.makeArray($selectedItems), function (el: HTMLElement) {\r\n let $el: JQuery = $(el);\r\n return {\r\n value: $el.data('value'),\r\n text: $el.data('text')\r\n }\r\n });\r\n\r\n this.setRealInput(selections);\r\n this.formatDisplay(selections);\r\n }\r\n\r\n private onFilterChanged(): void {\r\n let $checkboxes = this.$itemsContainer.find('[data-ms-checkbox]');\r\n let $uncheckedMatchedItems = $checkboxes.filter(':not(:checked)').closest('[data-ms-item][data-fi-matched]');\r\n let shouldShowUnchecked = !this.filters.showSelectedOnly;\r\n\r\n this.showOrHideItems($uncheckedMatchedItems, shouldShowUnchecked);\r\n this.styleFilterButton();\r\n }\r\n\r\n private deselectAllItems(): void {\r\n let $checkboxes = this.$itemsContainer.find('[data-ms-checkbox]');\r\n let $checkedCheckboxes = $checkboxes.filter(':checked').closest('[data-ms-item]').find('[data-ms-checkbox]');\r\n\r\n let elements = Element.fromElements($checkedCheckboxes);\r\n elements.forEach(x => x.suppressValueChange(false));\r\n\r\n this.onSelectionChanged();\r\n }\r\n\r\n private showOrHideItems($items: JQuery, shouldShow: boolean): void {\r\n if (shouldShow) {\r\n $items.removeClass('display-none').removeAttr('data-ms-hidden');\r\n }\r\n else {\r\n $items.addClass('display-none').attr('data-ms-hidden', 'on');\r\n }\r\n }\r\n\r\n private focusKeywordFilter(): void {\r\n this.$filterInput.focus();\r\n }\r\n\r\n private styleFilterButton(): void {\r\n let isActive = this.filters.showSelectedOnly;\r\n\r\n if (isActive) {\r\n this.$filterButton.addClass(\"color-primary\");\r\n this.$filterButtonIcon.addClass(\"icon-filter-active\");\r\n\r\n this.$filterButtonIcon.removeClass(\"icon-filter\");\r\n }\r\n else {\r\n this.$filterButtonIcon.addClass(\"icon-filter\");\r\n\r\n this.$filterButton.removeClass(\"color-primary\");\r\n this.$filterButtonIcon.removeClass(\"icon-filter-active\");\r\n }\r\n }\r\n\r\n private openErrorPopover(e: JQueryEventObject) {\r\n let errorPopover = this.errorPopover;\r\n if (errorPopover)\r\n errorPopover.open(e);\r\n }\r\n\r\n private closeErrorPopover(e: JQueryEventObject) {\r\n let errorPopover = this.errorPopover;\r\n if (errorPopover)\r\n errorPopover.close(e);\r\n }\r\n\r\n private onValueSet(): void {\r\n let selectedValues = (this.value()).split(',');\r\n let $items = this.$popover.find('[data-ms-item]');\r\n let $currentlySelected = $items.find('[data-ms-checkbox]:checked');\r\n let unselectAll = () => {\r\n Element.fromElements($currentlySelected).forEach(x => x.value(false));\r\n }\r\n let checkSelectedItems = () => {\r\n selectedValues.forEach(x => {\r\n let $selectedItem = $items.filter(`[data-value=\"${x}\"]`);\r\n if ($selectedItem.length > 0)\r\n new Element($selectedItem.find('[data-ms-checkbox]')).value(true);\r\n });\r\n }\r\n\r\n unselectAll();\r\n checkSelectedItems();\r\n this.onSelectionChanged();\r\n }\r\n\r\n private setRealInput(selections: any): void {\r\n let values = selections.map(function (x) {\r\n return x.value\r\n }).join(',');\r\n\r\n new Element(this.$realInput).value(values);\r\n }\r\n\r\n private formatDisplay(selections: any): void {\r\n let selectedCount = selections.length;\r\n let display = this.emptyText;\r\n\r\n if (selectedCount >= 2) {\r\n var firstItem = selections[0].text;\r\n var remainder = selectedCount - 1;\r\n display = `${firstItem} (+${remainder})`;\r\n }\r\n else if (selectedCount == 1) {\r\n display = selections[0].text;\r\n }\r\n\r\n this.$inputDisplay.text(display)\r\n .toggleClass('color-placeholder', selectedCount == 0);\r\n }\r\n\r\n public onItemChecked() {\r\n this.onSelectionChanged();\r\n }\r\n}\r\n\r\ninterface Filter {\r\n showSelectedOnly: boolean,\r\n keywordSearch: string\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.multiselectdropdown');\r\n let options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new MultiSelectDropdown($this, options);\r\n $this.data('rustig.multiselectdropdown', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.multiselectdropdown = Plugin;\r\n","import $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQueryStatic {\r\n _data: (element: HTMLElement, event: string) => Array; \r\n }\r\n}\r\n\r\nexport class SuppressesEvent {\r\n\r\n\r\n public execute(event: string, element: HTMLElement | JQuery, action: () => void): void {\r\n if (!event) {\r\n throw new Error('event is required');\r\n }\r\n\r\n if (element instanceof HTMLElement)\r\n element = $(element);\r\n\r\n let preventEvent = function (e) {\r\n e.stopImmediatePropagation();\r\n return false;\r\n };\r\n\r\n element.on(event, preventEvent);\r\n let events = $._data(element[0], \"events\")[event.split('.')[0]];\r\n events.unshift(events.pop());\r\n let addedEvent = events[0];\r\n\r\n try {\r\n action();\r\n }\r\n finally {\r\n let index = events.indexOf(addedEvent);\r\n events.splice(index, 1);\r\n }\r\n }\r\n}\r\n\r\nexport default SuppressesEvent;\r\n","//! moment.js\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks () {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback (callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return (Object.getOwnPropertyNames(obj).length === 0);\n } else {\n var k;\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [], i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty : false,\n unusedTokens : [],\n unusedInput : [],\n overflow : -2,\n charsLeftOver : 0,\n nullInput : false,\n invalidMonth : null,\n invalidFormat : false,\n userInvalidated : false,\n iso : false,\n parsedDateParts : [],\n meridiem : null,\n rfc2822 : false,\n weekdayMismatch : false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this);\n var len = t.length >>> 0;\n\n for (var i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m);\n var parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n var isNowValid = !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid = isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n }\n else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid (flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n }\n else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = hooks.momentProperties = [];\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n var updateInProgress = false;\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment (obj) {\n return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n }\n\n function absFloor (number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if ((dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false &&\n (typeof console !== 'undefined') && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [];\n var arg;\n for (var i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (var key in arguments[0]) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set (config) {\n var prop, i;\n for (i in config) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' + (/\\d{1,2}/).source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig), prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i, res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n };\n\n function calendar (key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n var defaultLongDateFormat = {\n LTS : 'h:mm:ss A',\n LT : 'h:mm A',\n L : 'MM/DD/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat (key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate () {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d';\n var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal (number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n };\n\n function relativeTime (number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return (isFunction(output)) ?\n output(number, withoutSuffix, string, isFuture) :\n output.replace(/%d/i, number);\n }\n\n function pastFuture (diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias (unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [];\n for (var u in unitsObj) {\n units.push({unit: u, priority: priorities[u]});\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([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;\n\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n var formatFunctions = {};\n\n var formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken (token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens), i, length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '', i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n var match2 = /\\d\\d/; // 00 - 99\n var match3 = /\\d{3}/; // 000 - 999\n var match4 = /\\d{4}/; // 0000 - 9999\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n var match1to2 = /\\d\\d?/; // 0 - 99\n var match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n var match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n var match1to3 = /\\d{1,3}/; // 0 - 999\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n var regexes = {};\n\n function addRegexToken (token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return (isStrict && strictRegex) ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken (token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken (token, callback) {\n var i, func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken (token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0;\n var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n var WEEK = 7;\n var WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? '' + y : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear () {\n return isLeapYear(this.year());\n }\n\n function makeGetSet (unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get (mom, unit) {\n return mom.isValid() ?\n mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1 (mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n }\n else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet (units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n\n function stringSet (units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units);\n for (var i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n function localeMonths (m, format) {\n if (!m) {\n return isArray(this._months) ? this._months :\n this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] :\n this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n function localeMonthsShort (m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort :\n this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i, ii, mom, llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse (monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth (mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth (value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth () {\n return daysInMonth(this.year(), this.month());\n }\n\n var defaultMonthsShortRegex = matchWord;\n function monthsShortRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict ?\n this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n\n var defaultMonthsRegex = matchWord;\n function monthsRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict ?\n this._monthsStrictRegex : this._monthsRegex;\n }\n }\n\n function computeMonthsParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n\n function createDate (y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date = new Date(y, m, d, h, M, s, ms);\n\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n return date;\n }\n\n function createUTCDate (y) {\n var date = new Date(Date.UTC.apply(null, arguments));\n\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear, resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek, resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek (mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 1st is the first week of the year.\n };\n\n function localeFirstDayOfWeek () {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear () {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek (input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek (input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n function localeWeekdays (m, format) {\n if (!m) {\n return isArray(this._weekdays) ? this._weekdays :\n this._weekdays['standalone'];\n }\n return isArray(this._weekdays) ? this._weekdays[m.day()] :\n this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n function localeWeekdaysShort (m) {\n return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n function localeWeekdaysMin (m) {\n return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse (weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n var defaultWeekdaysRegex = matchWord;\n function weekdaysRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict ?\n this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n\n var defaultWeekdaysShortRegex = matchWord;\n function weekdaysShortRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict ?\n this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n\n var defaultWeekdaysMinRegex = matchWord;\n function weekdaysMinRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict ?\n this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n\n\n function computeWeekdaysParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom, minp, shortp, longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = this.weekdaysMin(mom, '');\n shortp = this.weekdaysShort(mom, '');\n longp = this.weekdays(mom, '');\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 7; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n function meridiem (token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem (isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM (input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return ((input + '').toLowerCase().charAt(0) === 'p');\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n function localeMeridiem (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n\n // MOMENTS\n\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n var getSetHour = makeGetSet('Hours', true);\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {};\n var localeFamilies = {};\n var globalLocale;\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0, j, next, locale, split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null;\n // TODO: Find a better way to register and load all the locales in Node\n if (!locales[name] && (typeof module !== 'undefined') &&\n module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n var aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {}\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale (key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n }\n else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n }\n else {\n if ((typeof console !== 'undefined') && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale (name, config) {\n if (config !== null) {\n var locale, parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale, tmpLocale, parentConfig = baseConfig;\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale (key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow (m) {\n var overflow;\n var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray (config) {\n var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n var curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from begining of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to begining of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // iso 8601 regex\n // 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)\n var extendedIsoRegex = /^\\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)?)?$/;\n var basicIsoRegex = /^\\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)?)?$/;\n\n var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n var isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n // YYYYMM is NOT allowed by the standard\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/]\n ];\n\n // iso time formats and regexes\n var isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/]\n ];\n\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n // date from iso format\n function configFromISO(config) {\n var i, l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime, dateFormat, timeFormat, tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10)\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n var obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10);\n var m = hm % 100, h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i));\n if (match) {\n var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from iso format or fallback\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i, parsedInput, tokens, token, skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n // console.log('token', token, 'parsedInput', parsedInput,\n // 'regex', getParseRegexForToken(token, config));\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n }\n else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n }\n else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n\n function meridiemFixWrap (locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n\n scoreToBeat,\n i,\n currentScore;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (!isValid(tempConfig)) {\n continue;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i);\n config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n\n configFromArray(config);\n }\n\n function createFromConfig (config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig (config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({nullInput: true});\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC (input, format, locale, strict, isUTC) {\n var c = {};\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if ((isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n var prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +(new Date());\n };\n\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n for (var key in m) {\n if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n var unitHasDecimal = false;\n for (var i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration (duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days +\n weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months +\n quarters * 3 +\n years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration (obj) {\n return obj instanceof Duration;\n }\n\n function absRound (number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // FORMATTING\n\n function offset (token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher);\n\n if (matches === null) {\n return null;\n }\n\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ?\n 0 :\n parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset (m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset (input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone (input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC (keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal (keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset () {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n }\n else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset (input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime () {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted () {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {};\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() &&\n compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal () {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset () {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc () {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration (input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms : input._milliseconds,\n d : input._days,\n M : input._months\n };\n } else if (isNumber(input)) {\n duration = {};\n if (key) {\n duration[key] = input;\n } else {\n duration.milliseconds = input;\n }\n } else if (!!(match = aspNetRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : 0,\n d : toInt(match[DATE]) * sign,\n h : toInt(match[HOUR]) * sign,\n m : toInt(match[MINUTE]) * sign,\n s : toInt(match[SECOND]) * sign,\n ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n };\n } else if (!!(match = isoRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;\n duration = {\n y : parseIso(match[2], sign),\n M : parseIso(match[3], sign),\n w : parseIso(match[4], sign),\n d : parseIso(match[5], sign),\n h : parseIso(match[6], sign),\n m : parseIso(match[7], sign),\n s : parseIso(match[8], sign)\n };\n } else if (duration == null) {// checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso (inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {milliseconds: 0, months: 0};\n\n res.months = other.month() - base.month() +\n (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {milliseconds: 0, months: 0};\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val; val = period; period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract (mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add');\n var subtract = createAdder(-1, 'subtract');\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' :\n diff < -1 ? 'lastWeek' :\n diff < 0 ? 'lastDay' :\n diff < 1 ? 'sameDay' :\n diff < 2 ? 'nextDay' :\n diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1 (time, formats) {\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n\n function clone () {\n return new Moment(this);\n }\n\n function isAfter (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween (from, to, units, inclusivity) {\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n }\n\n function isSame (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units || 'millisecond');\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n\n function isSameOrAfter (input, units) {\n return this.isSame(input, units) || this.isAfter(input,units);\n }\n\n function isSameOrBefore (input, units) {\n return this.isSame(input, units) || this.isBefore(input,units);\n }\n\n function diff (input, units, asFloat) {\n var that,\n zoneDelta,\n output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year': output = monthDiff(this, that) / 12; break;\n case 'month': output = monthDiff(this, that); break;\n case 'quarter': output = monthDiff(this, that) / 3; break;\n case 'second': output = (this - that) / 1e3; break; // 1000\n case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default: output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff (a, b) {\n // difference in months\n var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2, adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString () {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true;\n var m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect () {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment';\n var zone = '';\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n var prefix = '[' + func + '(\"]';\n var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n var suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format (inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow (withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow (withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale (key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData () {\n return this._locale;\n }\n\n function startOf (units) {\n units = normalizeUnits(units);\n // the following switch intentionally omits break keywords\n // to utilize falling through the cases.\n switch (units) {\n case 'year':\n this.month(0);\n /* falls through */\n case 'quarter':\n case 'month':\n this.date(1);\n /* falls through */\n case 'week':\n case 'isoWeek':\n case 'day':\n case 'date':\n this.hours(0);\n /* falls through */\n case 'hour':\n this.minutes(0);\n /* falls through */\n case 'minute':\n this.seconds(0);\n /* falls through */\n case 'second':\n this.milliseconds(0);\n }\n\n // weeks are a special case\n if (units === 'week') {\n this.weekday(0);\n }\n if (units === 'isoWeek') {\n this.isoWeekday(1);\n }\n\n // quarters are also special\n if (units === 'quarter') {\n this.month(Math.floor(this.month() / 3) * 3);\n }\n\n return this;\n }\n\n function endOf (units) {\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond') {\n return this;\n }\n\n // 'date' is an alias for 'day', so it should be considered as such.\n if (units === 'date') {\n units = 'day';\n }\n\n return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n }\n\n function valueOf () {\n return this._d.valueOf() - ((this._offset || 0) * 60000);\n }\n\n function unix () {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate () {\n return new Date(this.valueOf());\n }\n\n function toArray () {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject () {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function toJSON () {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2 () {\n return isValid(this);\n }\n\n function parsingFlags () {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt () {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken (token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear () {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getWeeksInYear () {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter (input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ?\n (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear (input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n // MOMENTS\n\n var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr () {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName () {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n function createUnix (input) {\n return createLocal(input * 1000);\n }\n\n function createInZone () {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat (string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1 (format, index, field, setter) {\n var locale = getLocale();\n var utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl (format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl (localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0;\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths (format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort (format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (toInt(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n var mathAbs = Math.abs;\n\n function abs () {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1 (duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1 (input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1 (input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil (number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble () {\n var milliseconds = this._milliseconds;\n var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0))) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths (days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays (months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as (units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days;\n var months;\n var milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n return units === 'month' ? months : months / 12;\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week' : return days / 7 + milliseconds / 6048e5;\n case 'day' : return days + milliseconds / 864e5;\n case 'hour' : return days * 24 + milliseconds / 36e5;\n case 'minute' : return days * 1440 + milliseconds / 6e4;\n case 'second' : return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n default: throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1 () {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs (alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms');\n var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asYears = makeAs('y');\n\n function clone$1 () {\n return createDuration(this);\n }\n\n function get$2 (units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds');\n var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks () {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var thresholds = {\n ss: 44, // a few seconds to seconds\n s : 45, // seconds to minute\n m : 45, // minutes to hour\n h : 22, // hours to day\n d : 26, // days to month\n M : 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n var duration = createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n\n var a = seconds <= thresholds.ss && ['s', seconds] ||\n seconds < thresholds.s && ['ss', seconds] ||\n minutes <= 1 && ['m'] ||\n minutes < thresholds.m && ['mm', minutes] ||\n hours <= 1 && ['h'] ||\n hours < thresholds.h && ['hh', hours] ||\n days <= 1 && ['d'] ||\n days < thresholds.d && ['dd', days] ||\n months <= 1 && ['M'] ||\n months < thresholds.M && ['MM', months] ||\n years <= 1 && ['y'] || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding (roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof(roundingFunction) === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold (threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize (withSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var locale = this.localeData();\n var output = relativeTime$1(this, !withSuffix, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return ((x > 0) - (x < 0)) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000;\n var days = abs$1(this._days);\n var months = abs$1(this._months);\n var minutes, hours, years;\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n var total = this.asSeconds();\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n var totalSign = total < 0 ? '-' : '';\n var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return totalSign + 'P' +\n (Y ? ymSign + Y + 'Y' : '') +\n (M ? ymSign + M + 'M' : '') +\n (D ? daysSign + D + 'D' : '') +\n ((h || m || s) ? 'T' : '') +\n (h ? hmsSign + h + 'H' : '') +\n (m ? hmsSign + m + 'M' : '') +\n (s ? hmsSign + s + 'S' : '');\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // Side effect imports\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n // Side effect imports\n\n\n hooks.version = '2.22.2';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'YYYY-[W]WW', // \n MONTH: 'YYYY-MM' // \n };\n\n return hooks;\n\n})));\n","import $ from 'jquery';\r\nimport moment from 'moment';\r\n\r\nexport class StringExtensions {\r\n static isNullOrWhitespace(value: string) {\r\n return value == null || value.trim() == \"\";\r\n }\r\n\r\n static toBoolean(value: string): boolean {\r\n if (StringExtensions.isNullOrWhitespace(value))\r\n return false;\r\n\r\n return value.trim().toLowerCase() === 'true' ? true : false;\r\n }\r\n}\r\n\r\nexport class DateExtensions {\r\n static equals(date1: Date, date2: Date): boolean {\r\n return moment(date1).isSame(date2, 'day');\r\n }\r\n\r\n static addDays(value: Date, days: number): Date {\r\n return moment(value).add(days, 'day').toDate();\r\n }\r\n\r\n static addMonths(value: Date, months: number): Date {\r\n return moment(value).add(months, 'month').toDate();\r\n }\r\n\r\n static toFieldDateString(value: Date) {\r\n if (!value.isValid())\r\n return \"\";\r\n return moment(value).format('MM/DD/YYYY');\r\n }\r\n\r\n static isValid(value: Date): boolean {\r\n return !isNaN(value.getTime());\r\n }\r\n}\r\n\r\nexport interface IRustigEvent extends Event {\r\n data: T;\r\n}\r\n\r\nexport class NodeExtensions {\r\n static trigger(node: Node, eventName: string, data?: T, bubbles: boolean = true, cancelable: boolean = true): boolean {\r\n let event = document.createEvent('Event') as IRustigEvent;\r\n event.data = data || {} as any;\r\n event.initEvent(eventName, bubbles, cancelable);\r\n return node.dispatchEvent(event);\r\n }\r\n}\r\n\r\nexport class HTMLElementExtensions {\r\n // https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js\r\n static isVisible(element: HTMLElement): boolean {\r\n return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);\r\n }\r\n}\r\n\r\ndeclare global {\r\n\r\n interface Window {\r\n isWindowUnloading: boolean;\r\n }\r\n\r\n /* JQuery */\r\n interface JQuery {\r\n copyFieldBooleanAttributes($target: JQuery);\r\n }\r\n\r\n interface String {\r\n capitalize(): string;\r\n sentenceCase(): string;\r\n\r\n /**\r\n * Encloses the string in brackets\r\n * @param {string | number} value - If provided, will prepend =\"value\" to the closing bracket\r\n */\r\n asAttrSelector(value?: string | number): string;\r\n\r\n /**\r\n * Prepends \"data-\" to the string\r\n */\r\n asData(): string;\r\n\r\n /**\r\n * Prepending the string with \"data-\" and then encloses that value with brackets\r\n * @param {string | number} value? - If provided, will prepend =\"value\" to the closing bracket\r\n */\r\n asJsSelector(): string;\r\n asDataSelector(value?: string | number): string;\r\n isNullOrWhitespace(): boolean;\r\n toBoolean(): boolean;\r\n endsWith(value: string, length?: number): boolean;\r\n }\r\n\r\n interface Date {\r\n equals(date: Date): boolean;\r\n addDays(days: number): Date;\r\n addMonths(months: number): Date;\r\n toFieldDateString(): string;\r\n isValid(): boolean;\r\n }\r\n\r\n interface Node {\r\n trigger(eventName: string, data?: T, bubbles?: boolean, cancelable?: boolean): boolean;\r\n }\r\n\r\n interface HTMLElement {\r\n isVisible(): boolean;\r\n }\r\n}\r\n\r\n/* String */\r\n\r\nString.prototype.isNullOrWhitespace = function () {\r\n return StringExtensions.isNullOrWhitespace(this);\r\n}\r\n\r\nString.prototype.toBoolean = function () {\r\n return StringExtensions.toBoolean(this);\r\n}\r\n\r\nString.prototype.asJsSelector = function () {\r\n if (this === undefined)\r\n return undefined;\r\n\r\n return \"js\".asDataSelector(this.toString());\r\n}\r\n\r\nString.prototype.capitalize = function () {\r\n return this.charAt(0).toUpperCase() + this.slice(1);\r\n}\r\n\r\nString.prototype.sentenceCase = function () {\r\n return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();\r\n}\r\n\r\nString.prototype.asAttrSelector = function (value?: string | number) {\r\n if (arguments.length === 0)\r\n return '[' + this + ']';\r\n else if (arguments.length === 1 && (typeof (arguments[0]) === 'string' || typeof (arguments[0]) === 'number'))\r\n return '[' + this + '=\"' + value + '\"]';\r\n else\r\n return this;\r\n}\r\n\r\nString.prototype.asData = function () {\r\n return 'data-' + this;\r\n}\r\n\r\nString.prototype.asDataSelector = function (value?: string | number) {\r\n if (arguments.length === 0)\r\n return this.asData().asAttrSelector();\r\n else if (arguments.length === 1 && (typeof (arguments[0]) === 'string' || typeof (arguments[0]) === 'number'))\r\n return this.asData().asAttrSelector(arguments[0]);\r\n else\r\n return this;\r\n}\r\n\r\n/* Window */\r\n\r\n$.fn.copyFieldBooleanAttributes = function ($target) {\r\n let $this = $(this);\r\n let attributes = ['readonly', 'disabled', 'data-required'];\r\n\r\n for (var i = 0; i < attributes.length; i++) {\r\n if ($this.attr(attributes[i]))\r\n $target.attr(attributes[i], $this.attr(attributes[i]));\r\n }\r\n}\r\n\r\n/* Date */\r\n\r\nDate.prototype.equals = function (date) {\r\n return DateExtensions.equals(this, date);\r\n}\r\n\r\nDate.prototype.addDays = function (days) {\r\n return DateExtensions.addDays(this, days);\r\n}\r\n\r\nDate.prototype.addMonths = function (months) {\r\n return DateExtensions.addMonths(this, months);\r\n}\r\n\r\nDate.prototype.toFieldDateString = function () {\r\n return DateExtensions.toFieldDateString(this);\r\n}\r\n\r\nDate.prototype.isValid = function () {\r\n return DateExtensions.isValid(this);\r\n}\r\n\r\n/* HTMLElement */\r\n\r\nHTMLElement.prototype.isVisible = function () {\r\n return HTMLElementExtensions.isVisible(this);\r\n}\r\n\r\n/* Node */\r\n\r\nNode.prototype.trigger = function (eventName: string, data?: any, bubbles?: boolean, cancelable?: boolean) {\r\n return NodeExtensions.trigger(this, eventName, data, bubbles, cancelable);\r\n}","import $ from 'jquery'\r\n\r\ndeclare global {\r\n interface JQuery {\r\n toggleShow(condition: boolean): JQuery;\r\n }\r\n}\r\n\r\n(function ($) {\r\n $.fn.toggleShow = function (condition) {\r\n return $(this).each(function () {\r\n ToggleShow.execute(this, condition);\r\n });\r\n }\r\n})($);\r\n\r\ninterface IToggleShowElement extends HTMLElement{\r\n originalDisplayValue: string;\r\n}\r\n\r\nexport class ToggleShow {\r\n\r\n public static execute(element: HTMLElement, condition: boolean): void {\r\n if (condition)\r\n this.show(element as IToggleShowElement);\r\n else\r\n this.hide(element as IToggleShowElement);\r\n }\r\n\r\n private static show(element: IToggleShowElement): void {\r\n if (element.style.display === 'none') {\r\n element.style.display = element.originalDisplayValue || '';\r\n element.originalDisplayValue = undefined;\r\n }\r\n }\r\n\r\n private static hide(element: IToggleShowElement): void {\r\n if (element.style.display !== 'none') {\r\n element.originalDisplayValue = element.style.display;\r\n element.style.display = 'none';\r\n }\r\n }\r\n}\r\n\r\nexport default ToggleShow;","import $ from 'jquery';\r\nimport Element from \"./element\";\r\n\r\ndeclare global {\r\n\r\n interface JQuery {\r\n readonly(shouldClearValue?: boolean): JQuery;\r\n editable(): JQuery;\r\n isReadonly(): boolean;\r\n isEditable(): boolean;\r\n toggleReadonly(condition: boolean, shouldClearValueOnReadonly?: boolean): JQuery;\r\n }\r\n}\r\n\r\n(function ($) {\r\n $.fn.readonly = function (shouldClearValue: boolean = false) {\r\n $(this).each(function () {\r\n EditState.readonly(this, shouldClearValue);\r\n });\r\n return $(this);\r\n };\r\n $.fn.editable = function () {\r\n $(this).each(function () {\r\n EditState.editable(this)\r\n });\r\n\r\n return $(this);\r\n };\r\n $.fn.isReadonly = function () {\r\n return EditState.isReadonly($(this).first()[0]);\r\n }\r\n $.fn.isEditable = function () {\r\n return EditState.isEditable($(this).first()[0]);\r\n }\r\n $.fn.toggleReadonly = function (condition, shouldClearValueOnReadonly: boolean = false) {\r\n $(this).each(function () {\r\n EditState.toggleReadonly(this, condition, shouldClearValueOnReadonly);\r\n });\r\n return $(this);\r\n }\r\n})($);\r\n\r\nexport class EditState {\r\n\r\n public static readonly(htmlElement: HTMLElement, shouldClearValue: boolean = false): void {\r\n let element = Element.from(htmlElement);\r\n element.userFacingElement.setAttribute('readonly', 'readonly');\r\n if (shouldClearValue)\r\n element.value(null);\r\n }\r\n\r\n public static editable(htmlElement: HTMLElement): void {\r\n let element = Element.from(htmlElement);\r\n element.userFacingElement.removeAttribute('readonly');\r\n }\r\n\r\n public static isReadonly(htmlElement: HTMLElement): boolean {\r\n let element = Element.from(htmlElement);\r\n return element.userFacingElement.hasAttribute('readonly');\r\n }\r\n\r\n public static isEditable(element: HTMLElement): boolean {\r\n return !this.isReadonly(element);\r\n }\r\n\r\n public static toggleReadonly(htmlElement: HTMLElement, condition: boolean, shouldClearValueOnReadonly: boolean = false): void {\r\n if (condition)\r\n this.readonly(htmlElement, shouldClearValueOnReadonly);\r\n else\r\n return this.editable(htmlElement);\r\n }\r\n}\r\n\r\n\r\nexport default EditState;\r\n\r\n\r\n$(document).on('click.rustig.readonly', '.input-radio-group[readonly] input', function (e) {\r\n return false;\r\n});\r\n","\r\nexport class DropDown {\r\n\r\n private element: HTMLElement;\r\n \r\n public get flyout(): HTMLElement {\r\n let flyoutId = this.element.getAttribute('data-dropdown-flyout-id');\r\n return document.querySelector('dropdown-flyout'.asDataSelector(flyoutId))\r\n };\r\n\r\n public constructor(element: HTMLElement) {\r\n if (!element)\r\n throw new Error(\"You must provide an element to DropDown\");\r\n\r\n this.element = element;\r\n $(element).dropDown();\r\n }\r\n}\r\n\r\nexport interface IOption {\r\n text: string;\r\n value: string;\r\n}\r\n\r\nexport default DropDown;","// replace jquery event handlers with commented lines above when jquery events are removed completely from rustig\r\n// Native events do not support namespacing, ensure all module/utility specific events still have the correct name when doing so\r\n\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { Element } from \"../utilities/element\";\r\nimport { SuppressesEvent } from \"../utilities/suppressesevent\";\r\nimport { StringExtensions, IRustigEvent } from \"../utilities/extensions\";\r\nimport { ToggleShow } from '../utilities/display';\r\nimport EditState from '../utilities/readonly';\r\nimport DropDown from './dropdown';\r\nimport { IPopOverHTMLElement } from './popover';\r\n\r\nexport class DateRangeField {\r\n public static get wireup(): string { return '[data-daterange-input]'; }\r\n\r\n private DEFAULTS: IDateRangeFieldOptions = {\r\n daterangeKey: null,\r\n allowsEmpty: true\r\n }\r\n\r\n private options: IDateRangeFieldOptions;\r\n private _valueElement: HTMLInputElement;\r\n private _userFacingElement: IPopOverHTMLElement;\r\n private popover: Popover;\r\n private start: HTMLInputElement;\r\n private end: HTMLInputElement;\r\n\r\n public get element(): HTMLElement { return this._valueElement; }\r\n public get userFacingElement(): IPopOverHTMLElement { return this._userFacingElement; }\r\n public get valueElement(): HTMLInputElement { return this._valueElement; }\r\n\r\n public constructor(element: HTMLInputElement, options?: IDateRangeFieldOptions) {\r\n if (!element)\r\n throw new Error('You must provide an element to DateRangeField');\r\n\r\n try {\r\n $(element).data('r-is-constructing', true);\r\n this._valueElement = element;\r\n this.options = _.extend({}, this.DEFAULTS, this.getOptionsFromElement(), options);\r\n\r\n let root = this.valueElement.closest('[data-daterange]');\r\n this._userFacingElement = root.querySelector('[data-daterange-display]');\r\n this.start = root.querySelector('[data-start=\"hidden\"]');\r\n this.end = root.querySelector('[data-end=\"hidden\"]');\r\n\r\n this.setUpPopover();\r\n this.setUpUserFacingElement();\r\n\r\n new SuppressesEvent().execute('change', this.valueElement, () => {\r\n this.setValue(new NullableDate(this.start.value), new NullableDate(this.end.value));\r\n });\r\n }\r\n finally {\r\n $(element).data('r-is-constructing', false);\r\n }\r\n }\r\n\r\n public static load(element: HTMLElement, options?: IDateRangeFieldOptions): DateRangeField {\r\n let dateRangeElement = element as IDateRangeElement;\r\n if (!dateRangeElement.dateRangeField)\r\n dateRangeElement.dateRangeField = new DateRangeField(dateRangeElement, options);\r\n\r\n return dateRangeElement.dateRangeField;\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value === undefined)\r\n return this.valueElement.value;\r\n\r\n let start = null;\r\n let end = null;\r\n\r\n if (value.indexOf('thru') !== -1) {\r\n let parts = value.split('thru');\r\n start = parts[0];\r\n end = parts[1];\r\n }\r\n\r\n if (this.options.allowsEmpty || (start || end)) {\r\n let newValue = start + 'thru' + end;\r\n let oldValue = this.valueElement.value;\r\n if (newValue !== oldValue) {\r\n this.valueElement.value = newValue;\r\n this.start.value = start;\r\n this.end.value = end;\r\n this.valueElement.trigger('change');\r\n this.valueElement.trigger('ondaterangechanged');\r\n }\r\n\r\n this.reset();\r\n }\r\n }\r\n\r\n public text(value?: string): string | void {\r\n let text = this.userFacingElement.querySelector('[data-daterange-text]') as HTMLElement;\r\n if (text === undefined)\r\n return text.textContent;\r\n\r\n text.textContent = value;\r\n }\r\n\r\n public name(): string {\r\n return this.valueElement.getAttribute('name');\r\n }\r\n\r\n private getOptionsFromElement(): IDateRangeFieldOptions {\r\n return {\r\n daterangeKey: this.valueElement.getAttribute('data-daterange-key'),\r\n allowsEmpty: StringExtensions.toBoolean(this.valueElement.getAttribute('data-allows-empty'))\r\n };\r\n }\r\n\r\n private setUpPopover(): void {\r\n this.popover = new Popover(this.options.daterangeKey, this.options.allowsEmpty);\r\n\r\n this.popover.onApply((event: IRustigEvent) => {\r\n let data = event.data;\r\n this.setValue(data.start, data.end);\r\n this.popover.close();\r\n this.userFacingElement.focus();\r\n });\r\n }\r\n\r\n private setUpUserFacingElement(): void {\r\n let togglePopover = () => {\r\n if (!this.popover.isOpen() && !EditState.isReadonly(this.userFacingElement))\r\n this.popover.open();\r\n else\r\n this.popover.close();\r\n };\r\n\r\n let tryShowErrorPopover = (channel: any) => {\r\n if (channel.toString() !== this.options.daterangeKey)\r\n return;\r\n\r\n let popover = this.userFacingElement.popovers['error'];\r\n if (popover)\r\n popover.open();\r\n };\r\n //this.userFacingElement.addEventListener('show.rustig.popover', (event: IRustigEvent) => this.reset(event.data.channel));\r\n $(this.userFacingElement).on('show.rustig.popover', (event: JQueryEventObject, data?: any) => this.reset(data.channel));\r\n\r\n this.userFacingElement.addEventListener('click', (event: MouseEvent) => {\r\n event.stopPropagation();\r\n togglePopover();\r\n });\r\n\r\n //this.userFacingElement.addEventListener('shown.rustig.popover', (event: IRustigEvent) => tryShowErrorPopover(event.data.channel));\r\n $(this.userFacingElement).on('shown.rustig.popover', (event: JQueryEventObject, data?: any) => tryShowErrorPopover(data.channel));\r\n }\r\n\r\n private reset(channel?: any) {\r\n if (channel !== undefined && channel.toString() !== this.options.daterangeKey)\r\n return;\r\n\r\n let text = this.popover.reset(new NullableDate(this.start.value), new NullableDate(this.end.value));\r\n this.text(text);\r\n }\r\n\r\n private setValue(start: NullableDate, end: NullableDate): void {\r\n this.value(start.toFieldDateString() + 'thru' + end.toFieldDateString());\r\n }\r\n}\r\n\r\n\r\nclass Popover {\r\n\r\n private key: string;\r\n private element: HTMLElement;\r\n private start: Element;\r\n private end: Element;\r\n private dropdown: Element;\r\n private text: string;\r\n private popover: IPopOverHTMLElement;\r\n\r\n private types: Type[] = [\r\n Type.All,\r\n Type.Today,\r\n Type.Last30Days,\r\n Type.Last6Months,\r\n Type.ThisYear,\r\n Type.LastYear,\r\n Type.Is,\r\n Type.Before,\r\n Type.After,\r\n Type.Between\r\n ];\r\n\r\n public constructor(key: string, allowsEmpty: boolean) {\r\n if (!allowsEmpty)\r\n this.types.splice(0, 1);\r\n\r\n this.key = key;\r\n this.element = document.querySelector('daterange-popover-content'.asDataSelector(key));\r\n this.start = Element.from(this.element.querySelector('[data-start]'));\r\n this.end = Element.from(this.element.querySelector('[data-end]'));\r\n this.dropdown = Element.from(this.buildTypeDropdown());\r\n this.popover = document.querySelector('popover'.asDataSelector(this.key));\r\n\r\n this.wireupEventListeners();\r\n }\r\n\r\n public close(): void {\r\n this.popover.popovers[this.key].close();\r\n }\r\n\r\n public open(): void {\r\n this.popover.popovers[this.key].open();\r\n }\r\n\r\n public isOpen(): boolean {\r\n return this.element.isVisible();\r\n }\r\n\r\n public onApply(callback: (event: IRustigEvent) => void): void {\r\n this.element.addEventListener('applied', callback);\r\n }\r\n\r\n public reset(start: NullableDate, end: NullableDate): string {\r\n this.start.suppressValueChange(start.value);\r\n this.end.suppressValueChange(end.value);\r\n this.dropdown.suppressValueChange('between');\r\n this.onDateFieldChanged(true);\r\n return this.text;\r\n }\r\n\r\n private buildTypeDropdown(): HTMLElement {\r\n let gridUnit = document.createElement('div');\r\n gridUnit.classList.add('gu-1');\r\n this.element.insertBefore(gridUnit, this.element.firstChild);\r\n\r\n let select = document.createElement('select');\r\n select.classList.add('input-field');\r\n gridUnit.appendChild(select);\r\n (this.types).forEach((type) => {\r\n let option = document.createElement('option');\r\n option.setAttribute('value', type.value);\r\n option.textContent = type.value;\r\n select.appendChild(option);\r\n });\r\n\r\n let dropDown = new DropDown(select);\r\n dropDown.flyout.setAttribute('data-noclickoff', this.key);\r\n\r\n return select;\r\n }\r\n\r\n private wireupEventListeners(): void {\r\n //this.start.element.addEventListener('change', () => this.onDateFieldChanged());\r\n this.start.$element.on('change.rustig', () => this.onDateFieldChanged());\r\n //this.end.element.addEventListener('change', () => this.onDateFieldChanged());\r\n this.end.$element.on('change.rustig', () => this.onDateFieldChanged());\r\n //this.dropdown.element.addEventListener('change', () => this.onSelectChanged());\r\n this.dropdown.$element.on('change.rustig', () => this.onSelectChanged());\r\n\r\n let applyButton = this.element.querySelector('[data-daterange-apply]');\r\n applyButton.addEventListener('click', () => {\r\n this.reset(new NullableDate(this.start.value()), new NullableDate(this.end.value()));\r\n\r\n let data = {\r\n start: new NullableDate(this.start.value()),\r\n end: new NullableDate(this.end.value()),\r\n text: this.text\r\n };\r\n this.element.trigger('applied', data);\r\n });\r\n\r\n //this.popover.addEventListener('shown.rustig.popover', () => this.dropdown.userFacingElement.focus());\r\n $(this.popover).on('shown.rustig.popover', () => this.dropdown.userFacingElement.focus());\r\n }\r\n\r\n private onDateFieldChanged(canSwichTypeFromBetween: boolean = false): void {\r\n let typeValue = this.dropdown.value();\r\n let start = new NullableDate(this.start.value());\r\n let end = new NullableDate(this.end.value());\r\n\r\n let type;\r\n if (canSwichTypeFromBetween || typeValue !== 'between')\r\n type = _.find(this.types, x => x.predicate(typeValue, start, end));\r\n else\r\n type = _.find(this.types, x => x.value === 'between');\r\n\r\n this.dropdown.suppressValueChange(type.value);\r\n this.update(type.build(start, end));\r\n }\r\n\r\n private onSelectChanged(): void {\r\n let typeValue = this.dropdown.value();\r\n let type = _.find(this.types, x => x.value == typeValue);\r\n this.update(type.build(new NullableDate(this.start.value()), new NullableDate(this.end.value())));\r\n }\r\n\r\n private update(dateRange: IDateRange): void {\r\n this.start.suppressValueChange(dateRange.start.value);\r\n ToggleShow.execute(this.start.element.closest('.gu-1') as HTMLElement, dateRange.shouldShowStart);\r\n\r\n this.end.suppressValueChange(dateRange.end.value);\r\n ToggleShow.execute(this.end.element.closest('.gu-1') as HTMLElement, dateRange.shouldShowEnd);\r\n\r\n this.text = dateRange.text;\r\n }\r\n}\r\n\r\ninterface IApplied {\r\n start: NullableDate;\r\n end: NullableDate;\r\n text: string;\r\n}\r\n\r\ninterface IDateRange {\r\n start: NullableDate;\r\n end: NullableDate;\r\n text: string;\r\n shouldShowStart: boolean;\r\n shouldShowEnd: boolean;\r\n}\r\n\r\nclass Type {\r\n value: string;\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => boolean;\r\n build: (start: NullableDate, end: NullableDate) => IDateRange;\r\n\r\n static get Today(): Type {\r\n let today = new NullableDate(new Date());\r\n return {\r\n value: 'today',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => start.equals(today) && start.equals(end),\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: today,\r\n end: today,\r\n text: 'today',\r\n shouldShowStart: true,\r\n shouldShowEnd: false\r\n };\r\n }\r\n };\r\n }\r\n\r\n static get Is(): Type {\r\n let today = new Date();\r\n return {\r\n value: 'is',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => {\r\n let typeWasTodayAndDateChanged = type === 'today' && (!start.equals(today) || !end.equals(today));\r\n return typeWasTodayAndDateChanged || type === 'is' || start.equals(end) || (!start.hasValue && !end.hasValue);\r\n },\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: start.hasValue ? start : end,\r\n end: start.hasValue ? start : end,\r\n text: start.toFieldDateString(),\r\n shouldShowStart: true,\r\n shouldShowEnd: false\r\n };\r\n }\r\n };\r\n }\r\n\r\n static get Last30Days(): Type {\r\n let today = new Date();\r\n return {\r\n value: 'last 30 days',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => end.equals(today) && start.equals(today.addDays(-30)),\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: new NullableDate(today.addDays(-30)),\r\n end: new NullableDate(today),\r\n text: 'last 30 days',\r\n shouldShowStart: true,\r\n shouldShowEnd: true\r\n };\r\n }\r\n };\r\n }\r\n\r\n static get Last6Months(): Type {\r\n let today = new Date();\r\n return {\r\n value: 'last 6 months',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => end.equals(today) && start.equals(today.addMonths(-6)),\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: new NullableDate(today.addMonths(-6)),\r\n end: new NullableDate(today),\r\n text: 'last 6 months',\r\n shouldShowStart: true,\r\n shouldShowEnd: true\r\n };\r\n }\r\n };\r\n }\r\n\r\n static get ThisYear(): Type {\r\n let januaryFirst = new NullableDate(new Date(new Date().getFullYear(), 0, 1));\r\n let decemberThirtyFirst = new NullableDate(new Date(new Date().getFullYear(), 11, 31));\r\n return {\r\n value: 'this year',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => start.equals(januaryFirst) && end.equals(decemberThirtyFirst),\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: januaryFirst,\r\n end: decemberThirtyFirst,\r\n text: 'this year',\r\n shouldShowStart: true,\r\n shouldShowEnd: true\r\n };\r\n }\r\n }\r\n }\r\n\r\n static get LastYear(): Type {\r\n let januaryFirst = new NullableDate(new Date(new Date().getFullYear() - 1, 0, 1));\r\n let decemberThirtyFirst = new NullableDate(new Date(new Date().getFullYear() - 1, 11, 31));\r\n return {\r\n value: 'last year',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => start.equals(januaryFirst) && end.equals(decemberThirtyFirst),\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: januaryFirst,\r\n end: decemberThirtyFirst,\r\n text: 'last year',\r\n shouldShowStart: true,\r\n shouldShowEnd: true\r\n };\r\n }\r\n };\r\n }\r\n\r\n static get Between(): Type {\r\n return {\r\n value: 'between',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => true,\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: start,\r\n end: end,\r\n text: (start.hasValue ? start.toFieldDateString() : '?') + ' - ' + (end.hasValue ? end.toFieldDateString() : '?'),\r\n shouldShowStart: true,\r\n shouldShowEnd: true\r\n };\r\n }\r\n };\r\n }\r\n\r\n static get All(): Type {\r\n return {\r\n value: '',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => false,\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: NullableDate.empty(),\r\n end: NullableDate.empty(),\r\n text: '',\r\n shouldShowStart: false,\r\n shouldShowEnd: false\r\n };\r\n }\r\n };\r\n }\r\n\r\n static get Before(): Type {\r\n return {\r\n value: 'before',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => !start.hasValue && end.hasValue,\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: NullableDate.empty(),\r\n end: end,\r\n text: 'before ' + end.toFieldDateString(),\r\n shouldShowStart: false,\r\n shouldShowEnd: true\r\n };\r\n }\r\n };\r\n }\r\n\r\n static get After(): Type {\r\n return {\r\n value: 'after',\r\n predicate: (type: string, start: NullableDate, end: NullableDate) => start.hasValue && !end.hasValue,\r\n build: (start: NullableDate, end: NullableDate) => {\r\n return {\r\n start: start,\r\n end: NullableDate.empty(),\r\n text: 'after ' + start.toFieldDateString(),\r\n shouldShowStart: true,\r\n shouldShowEnd: false\r\n };\r\n }\r\n };\r\n }\r\n}\r\n\r\nclass NullableDate {\r\n private _value: Date;\r\n\r\n public get hasValue(): boolean { return this._value !== null; }\r\n public get value(): Date { return this._value; }\r\n\r\n public constructor(date: Date | string) {\r\n if (!date)\r\n this._value = null;\r\n else if (typeof date === 'string')\r\n this._value = new Date(date);\r\n else\r\n this._value = date;\r\n }\r\n\r\n public toFieldDateString(): string {\r\n return this.hasValue ? this.value.toFieldDateString() : '';\r\n }\r\n\r\n public equals(date: Date | NullableDate): boolean {\r\n if (!this.hasValue)\r\n return false;\r\n\r\n if (date instanceof Date)\r\n return this.value.equals(date);\r\n else\r\n return date.hasValue ? this.value.equals(date.value) : false;\r\n }\r\n\r\n public static empty(): NullableDate {\r\n return new NullableDate(null);\r\n }\r\n}\r\n\r\nexport interface IDateRangeElement extends HTMLInputElement {\r\n dateRangeField: DateRangeField;\r\n}\r\n\r\nexport interface IDateRangeFieldOptions {\r\n daterangeKey: string;\r\n allowsEmpty?: boolean;\r\n}\r\n\r\nexport default DateRangeField;\r\n\r\n","import $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n scrollto(option, args): any;\r\n }\r\n}\r\n\r\nexport class ScrollTo {\r\n public static get attribute(): string { return 'scroll-to'; }\r\n public static get wireup(): string { return ScrollTo.attribute.asDataSelector() }\r\n\r\n public static execute($element: JQuery) {\r\n let $container = $element.closest('scroll-to-container'.asDataSelector($element.data(ScrollTo.attribute)));\r\n if ($container.length == 0)\r\n $container = $element.parent();\r\n\r\n if ($container.is('body'))\r\n throw new Error('body cannot be a container');\r\n\r\n var shouldScroll = !ScrollTo.isInView($element[0], $container[0]);\r\n\r\n if (shouldScroll) {\r\n $container.scrollTop($element.offset().top - $container.offset().top + $container.scrollTop());\r\n $element.data('rustig.scrollto.scrolled', true);\r\n }\r\n }\r\n\r\n private static isInView(element, container) : boolean {\r\n let elementRect = element.getBoundingClientRect();\r\n let elementTop = elementRect.top;\r\n let elementHeight = elementRect.height;\r\n let elementBottom = elementTop + elementHeight;\r\n\r\n let parent = container;\r\n let parentRect = parent.getBoundingClientRect();\r\n let isElementTopBelowParentBottom = parentRect.bottom < elementTop === true;\r\n let isElementBottomAboveParentTop = elementBottom <= parentRect.top;\r\n let isOutOfParentView = isElementTopBelowParentBottom || isElementBottomAboveParentTop;\r\n\r\n return !isOutOfParentView;\r\n }\r\n\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n ScrollTo.execute($(this));\r\n });\r\n}\r\n\r\n$.fn.scrollto = Plugin;\r\n","import $ from 'jquery';\r\nimport { ScrollTo } from '../utilities/scrollto';\r\n\r\nexport class DualListBox {\r\n\r\n public static get wireup(): string { return 'dual-listbox'.asDataSelector(); }\r\n\r\n $element: JQuery;\r\n $searchResults: JQuery;\r\n $selectedResults: JQuery;\r\n $selectedValuesCsv: JQuery;\r\n\r\n $searchCount: JQuery;\r\n $selectedCount: JQuery;\r\n\r\n selectedItemHiddenInputNameValue: string;\r\n hasGroupItems: boolean;\r\n\r\n constructor($element: JQuery, options: any) {\r\n this.$element = $element;\r\n this.$searchResults = $element.find('[data-search-results]');\r\n this.$selectedResults = $element.find('[data-selected-results]');\r\n this.$selectedValuesCsv = $element.find('[data-selected-values-csv]');\r\n\r\n this.$searchCount = $('[data-search-results-count]');\r\n this.$selectedCount = $('[data-selected-count]');\r\n\r\n this.selectedItemHiddenInputNameValue = $element.data('dlb-expression-path') || 'values';\r\n this.hasGroupItems = $element.data('has-group-items') || false;\r\n\r\n this.$element.on('refresh-selections.duallistbox', this.refreshSelections.bind(this));\r\n this.$element.on('click.duallistbox', '[data-select-button]', this.onSelectRow.bind(this));\r\n this.$element.on('click.duallistbox', '[data-remove-button]', this.onRemoveRow.bind(this));\r\n this.$element.on('click.duallistbox', '[data-select-all]', this.onSelectAll.bind(this));\r\n this.$element.on('click.duallistbox', '[data-remove-all]', this.onRemoveAll.bind(this));\r\n\r\n this.refreshSelections();\r\n }\r\n\r\n onSelectAll(e: Event): void {\r\n let $rows = this.$searchResults.find('[data-row]:not(.is-selected, [data-is-group-item])');\r\n let self = this;\r\n $rows.each(function (i) { self.selectRow($(this)); });\r\n\r\n this.onValueChanged();\r\n }\r\n\r\n onSelectRow(e: Event): void {\r\n let $row = $(e.target).closest('[data-row]');\r\n\r\n let $selectedRow = this.selectRow($row);\r\n\r\n ScrollTo.execute($selectedRow);\r\n this.onValueChanged();\r\n }\r\n\r\n onRemoveAll(e: Event): void {\r\n let $rows = this.$selectedResults.find('[data-row]:not([data-is-group-item])');\r\n let self = this;\r\n $rows.each(function (i) { self.removeRow($(this)); });\r\n\r\n this.onValueChanged();\r\n }\r\n\r\n onRemoveRow(e: Event): void {\r\n let $row = $(e.target).closest('[data-row]');\r\n this.removeRow($row);\r\n\r\n this.onValueChanged();\r\n }\r\n\r\n selectRow($row: JQuery): JQuery {\r\n $row.addClass('is-selected');\r\n\r\n let value = $row.data('value');\r\n if (this.isValueSelected(value))\r\n return;\r\n\r\n let $selectedRow = this.findAndCloneResultRow(value);\r\n\r\n this.insertRowIntoSelectedItems($selectedRow);\r\n\r\n if (this.hasGroupItems)\r\n this.handleGroupItemSelectionIfNeeded($selectedRow);\r\n\r\n return $selectedRow;\r\n }\r\n\r\n handleGroupItemSelectionIfNeeded($selectedRow: JQuery): void {\r\n let group = $selectedRow.data('group');\r\n\r\n let $searchResultsGrouping = this.findSearchResultsGrouping(group);\r\n let $searchResultsGroupItem = $searchResultsGrouping.filter('[data-is-group-item]');\r\n let $selectedResultsGrouping = this.findSelectedResultsGrouping(group);\r\n let $selectedResultsGroupItem = $selectedResultsGrouping.filter('[data-is-group-item]');\r\n\r\n if ($selectedResultsGroupItem.length == 0) {\r\n $selectedResultsGroupItem = $searchResultsGroupItem.clone();\r\n this.insertRowIntoSelectedItems($selectedResultsGroupItem);\r\n }\r\n\r\n // check to see if there are any additional items left to select in the group, select the group item if user has selected them all\r\n let $remainingUnselectedItemsForGroup = $searchResultsGrouping.filter('[data-value]:not(.is-selected)');\r\n\r\n if ($remainingUnselectedItemsForGroup.length == 0)\r\n $searchResultsGroupItem.addClass('is-selected');\r\n }\r\n\r\n removeRow($row: JQuery): void {\r\n let value = $row.find('[value]').val() as string;\r\n $row.remove();\r\n this.$searchResults.find('value'.asDataSelector(value || \"\")).removeClass('is-selected');\r\n\r\n if (this.hasGroupItems)\r\n this.handleGroupItemRemovalIfNeeded($row);\r\n }\r\n\r\n handleGroupItemRemovalIfNeeded($removedRow: JQuery): void {\r\n let group = $removedRow.data('group');\r\n\r\n let $searchResultsGrouping = this.findSearchResultsGrouping(group);\r\n let $searchResultsGroupItem = $searchResultsGrouping.filter('[data-is-group-item]');\r\n let $selectedResultsGrouping = this.findSelectedResultsGrouping(group);\r\n let $selectedResultsGroupItem = $selectedResultsGrouping.filter('[data-is-group-item]');\r\n\r\n // unselect search result grouping no matter what\r\n $searchResultsGroupItem.removeClass('is-selected');\r\n\r\n //remove the selected result group item if no selected items exist.\r\n let $remainingSelectedItemsForGroup = $selectedResultsGrouping.filter('[data-value]');\r\n if ($remainingSelectedItemsForGroup.length == 0)\r\n $selectedResultsGroupItem.remove();\r\n }\r\n\r\n refreshSelections(): void {\r\n let $searchResultRows = this.$searchResults.find('[data-row]');\r\n let self = this;\r\n $searchResultRows.each(function () {\r\n let $row = $(this);\r\n let rowIsSelected = self.isValueSelected($row.data('value'));\r\n $row.toggleClass('is-selected', rowIsSelected);\r\n });\r\n\r\n if (this.hasGroupItems) {\r\n let $groupItems = $searchResultRows.filter('[data-is-group-item]');\r\n $groupItems.each(function () {\r\n let $groupItem = $(this);\r\n let group = $groupItem.data('group');\r\n let $itemsForGroup = $searchResultRows.filter(`[data-group=\"${group}\"][data-value]`);\r\n\r\n let $unselectedItems = $itemsForGroup.filter(':not(.is-selected)');\r\n if ($unselectedItems.length == 0)\r\n $groupItem.addClass('is-selected');\r\n });\r\n }\r\n }\r\n\r\n isValueSelected(value: any): boolean {\r\n if (value) {\r\n return this.$selectedResults.find('value'.asAttrSelector(value)).length != 0;\r\n }\r\n return this.$selectedResults.find('[name=\"' + this.selectedItemHiddenInputNameValue + '\"]:not([value])').length != 0;\r\n }\r\n\r\n onValueChanged(): void {\r\n let $selectedValueInputs = this.$selectedResults.find('[name=\"' + this.selectedItemHiddenInputNameValue + '\"][value!=\"\"]');\r\n let selectedValuesCsv = $selectedValueInputs.map((i, el) => $(el).val())\r\n .toArray()\r\n .join(',');\r\n this.$selectedValuesCsv.val(selectedValuesCsv);\r\n\r\n this.$element.trigger('change.rustig');\r\n }\r\n\r\n findAndCloneResultRow(value: any): JQuery {\r\n let $selectedRow = this.findSearchResultRow(value)\r\n .clone()\r\n .removeClass('is-selected');\r\n\r\n $selectedRow.find('[data-select-button]')\r\n .removeAttr('data-select-button')\r\n .attr('data-remove-button', 'on');\r\n\r\n $selectedRow.find('[data-icon]')\r\n .removeClass('icon-arrow-right')\r\n .addClass('icon-close');\r\n\r\n let $input = $('').attr('name', this.selectedItemHiddenInputNameValue).attr('type', 'hidden').attr('data-input', 'on').val(value);\r\n\r\n $input.appendTo($selectedRow);\r\n\r\n return $selectedRow;\r\n }\r\n\r\n findSearchResultRow(value: any): JQuery {\r\n return this.$searchResults.find('[data-row]')\r\n .filter('value'.asDataSelector(value))\r\n }\r\n\r\n findSearchResultsGrouping(groupValue: any): JQuery {\r\n return this.$searchResults.find('group'.asDataSelector(groupValue));\r\n }\r\n\r\n findSelectedResultsGrouping(groupValue: any): JQuery {\r\n return this.$selectedResults.find('group'.asDataSelector(groupValue));\r\n }\r\n\r\n insertRowIntoSelectedItems($row: JQuery): void {\r\n let selectedRowText = $row.data('sort').toLowerCase();\r\n let rows = this.$selectedResults.find('[data-row]').toArray();\r\n if (rows.length == 0)\r\n this.$selectedResults.append($row);\r\n else {\r\n let i = 0;\r\n while (!$row.parent().length) {\r\n let currentRowText = rows[i].getAttribute('data-sort').trim().toLowerCase();\r\n if (selectedRowText >= currentRowText && i == rows.length - 1)\r\n $row.insertAfter(rows[i]);\r\n else if (selectedRowText < currentRowText)\r\n $row.insertBefore(rows[i]);\r\n i++;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.duallistbox');\r\n let options = typeof option === 'object' && option;\r\n\r\n if (!data) {\r\n data = new DualListBox($this, options);\r\n $this.data('rustig.duallistbox', data);\r\n }\r\n if (typeof (option) == 'string')\r\n data[option](args);\r\n })\r\n}\r\n\r\ndeclare global {\r\n interface JQuery {\r\n duallistbox: (option, args) => any;\r\n }\r\n}\r\n\r\n$.fn.duallistbox = Plugin;\r\n\r\nexport default DualListBox;","import { MultiSelectDropdown as msdropdown } from \"../modules/multiselectdropdown\";\r\nimport SuppressesEvent from \"./suppressesevent\";\r\nimport AsyncFileField from \"../modules/asyncfilefield\"\r\nimport DateRangeField, { IDateRangeElement } from \"../modules/daterangefield\";\r\nimport { DualListBox as duallistbox } from \"../modules/duallistbox\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n autoNumeric(option, args): any;\r\n }\r\n}\r\n\r\nexport class Element {\r\n private _$element: JQuery;\r\n public get $element(): JQuery { return this._$element; }\r\n public get element(): HTMLElement { return this.$element[0]; }\r\n\r\n public get $userFacingElement(): JQuery { return this.type.$userFacingElement; }\r\n public get userFacingElement(): HTMLElement { return this.type.$userFacingElement[0]; }\r\n public get $valueElement(): JQuery { return this.type.$valueElement; }\r\n public get valueElement(): HTMLElement { return this.type.$valueElement[0]; }\r\n\r\n private type: IElement;\r\n\r\n public get $(): JQuery { return this._$element; }\r\n\r\n public get isInput(): boolean {\r\n return this.type instanceof Input;\r\n }\r\n\r\n public get isSelect(): boolean {\r\n return this.type instanceof Select;\r\n }\r\n\r\n public get isDisplay(): boolean {\r\n return this.type instanceof DisplayField;\r\n }\r\n\r\n public get isRadio(): boolean {\r\n return this.type instanceof RadioGroup;\r\n }\r\n\r\n public get isCheckbox(): boolean {\r\n return this.type instanceof Checkbox;\r\n }\r\n\r\n public get isFile(): boolean {\r\n return this.type instanceof File;\r\n }\r\n\r\n public get isMultiSelectDropdown(): boolean {\r\n return this.type instanceof MultiSelectDropdown;\r\n }\r\n\r\n public get isDateField(): boolean {\r\n return this.type instanceof DateField;\r\n }\r\n\r\n public get isDateRangeDateField(): boolean {\r\n return this.type instanceof DateRangeDateField;\r\n }\r\n\r\n public get isDateRange(): boolean {\r\n return this.type instanceof DateRange;\r\n }\r\n\r\n public get isMoneyField(): boolean {\r\n return this.type instanceof MoneyField;\r\n }\r\n\r\n public get isGeneric(): boolean {\r\n return this.type instanceof GenericElement;\r\n }\r\n\r\n private static map: any[] = [\r\n { selector: 'select, .dropdown-input, input.real-input', constructor: function ($element) { return new Select($element) } },\r\n { selector: '.display-field', constructor: function ($element) { return new DisplayField($element) } },\r\n { selector: '.input-radio-fields, [type=\"radio\"]', constructor: function ($element) { return new RadioGroup($element) } },\r\n { selector: '[type=\"checkbox\"]', constructor: function ($element) { return new Checkbox($element) } },\r\n { selector: '[type=\"file\"]', constructor: function ($element) { return new File($element) } },\r\n { selector: '.select-suggest-search > div:not(.suggest-search) > input', constructor: function ($element) { return new SelectSuggestSearch($element) } },\r\n { selector: '.phone-field, .phone-full-input', constructor: function ($element) { return new PhoneField($element) } },\r\n { selector: '.name-field, .name-full-input', constructor: function ($element) { return new NameField($element) } },\r\n { selector: '[data-file-field]', constructor: function ($element) { return new AsyncField($element) } },\r\n { selector: msdropdown.wireup, constructor: function ($element) { return new MultiSelectDropdown($element); } },\r\n { selector: '.datefield input', constructor: function ($element) { return new DateField($element); } },\r\n { selector: '[data-start=\"hidden\"], [data-end=\"hidden\"]', constructor: function ($element) { return new DateRangeDateField($element) } },\r\n { selector: '[data-daterange-input], [data-daterange-display]', constructor: function ($element) { return new DateRange($element[0]); } },\r\n { selector: '.money-field', constructor: function ($element) { return new MoneyField($element[0]); } },\r\n { selector: 'input, textarea', constructor: function ($element) { return new Input($element) } },\r\n { selector: duallistbox.wireup, constructor: function ($element) { return new DualListBoxElement($element); } },\r\n ];\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this._$element = $element.first();\r\n this.type = this.getType();\r\n }\r\n\r\n public static from(element: HTMLElement): Element {\r\n return new Element($(element));\r\n }\r\n\r\n public static addType(selector: string, constructor: (element: JQuery) => IElement): void {\r\n Element.map.unshift({ selector, constructor });\r\n }\r\n\r\n public static fromElements($elements: JQuery): Array {\r\n if (!$elements)\r\n throw new Error('$elements cannot be null');\r\n\r\n let result = new Array();\r\n $elements.each(function () {\r\n result.push(new Element($(this)));\r\n })\r\n\r\n return result;\r\n }\r\n\r\n private getType(): IElement {\r\n for (let i = 0; i < Element.map.length; i++) {\r\n if (this._$element.is(Element.map[i].selector))\r\n return Element.map[i].constructor(this._$element);\r\n }\r\n return new GenericElement(this._$element);\r\n }\r\n\r\n public value(value?: any): any | void {\r\n let currentValue = this.type.value();\r\n if (value === undefined)\r\n return currentValue;\r\n\r\n this.type.value(value);\r\n\r\n let newValue = this.type.value();\r\n if (currentValue != newValue)\r\n this.$valueElement.change();\r\n }\r\n\r\n public text(text?: string): string | void {\r\n return this.type.text(text);\r\n }\r\n\r\n public name(): string {\r\n return this.type.name();\r\n }\r\n\r\n public suppressValueChange(value: IAction | Object): Element {\r\n new SuppressesEvent().execute('change.rustig.element', this.$element, function () {\r\n if (typeof value === 'function') {\r\n (value)();\r\n }\r\n else {\r\n this.value(value);\r\n }\r\n }.bind(this));\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport interface IElement {\r\n value(value?: any): any | void;\r\n text(text?: any): any | void;\r\n name(): string;\r\n $userFacingElement: JQuery;\r\n $valueElement: JQuery;\r\n}\r\n\r\nclass Select {\r\n private $element: JQuery;\r\n private _$userFacingElement: JQuery;\r\n private _$valueElement: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this._$userFacingElement; }\r\n public get $valueElement(): JQuery { return this._$valueElement; }\r\n private get allowsCustomInput(): boolean { return this.$element.is('[data-allow-custom-input]') };\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n let $root = $element.closest('.dropdown-field');\r\n this.$element = $root.find('select');\r\n this._$userFacingElement = $root.find('.dropdown-input');\r\n this._$valueElement = this.allowsCustomInput ? $root.find('.real-input') : this.$element;\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n new SuppressesEvent().execute('change', this.$element, function () {\r\n if (this.allowsCustomInput) {\r\n this.$valueElement.val(value);\r\n this.$userFacingElement.val(value);\r\n }\r\n else\r\n this.$element.val(value).trigger('dropdown:reload');\r\n }.bind(this));\r\n return;\r\n }\r\n return this.$valueElement.val();\r\n }\r\n\r\n public text(text?: string): string | number | string[] {\r\n if (text !== undefined) {\r\n if (this.allowsCustomInput) {\r\n this.value(text);\r\n }\r\n else {\r\n let $option = this.$element.find('option:contains(' + text + ')');\r\n this.value($option.val());\r\n }\r\n return;\r\n }\r\n return this.$userFacingElement.val();\r\n }\r\n\r\n public name(): string {\r\n return this.$element.attr('name');\r\n }\r\n}\r\n\r\nclass Input {\r\n protected $element: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this.$element; }\r\n public get $valueElement(): JQuery { return this.$element; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element;\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n this.$element.val(value);\r\n return;\r\n }\r\n return this.$element.val();\r\n }\r\n\r\n public text(text?: string): string | number | string[] {\r\n if (text !== undefined) {\r\n this.$element.val(text);\r\n return;\r\n }\r\n return this.$element.val();\r\n }\r\n\r\n public name(): string {\r\n return this.$element.attr('name');\r\n }\r\n}\r\n\r\nclass DisplayField {\r\n private $element: JQuery;\r\n private $childElement: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this.$element; }\r\n public get $valueElement(): JQuery { return this.$element; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element;\r\n this.$childElement = this.$element.children(':first');\r\n }\r\n\r\n public value(value?: any): any | void {\r\n return this.text(value);\r\n }\r\n\r\n public text(text?: string): string | void {\r\n let $text = this.$childElement.length > 0 ? this.$childElement : this.$element;\r\n\r\n if (text !== undefined)\r\n $text.text(text);\r\n else\r\n return $text.text();\r\n }\r\n\r\n public name(): string {\r\n return null;\r\n }\r\n}\r\n\r\nclass RadioGroup {\r\n private $element: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this.$element; }\r\n public get $valueElement(): JQuery { return this.$element; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element.closest('.input-radio-fields');\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n this.$element.find('input[type=\"radio\"]:checked').removeAttr('checked');\r\n this.$element.find('input[type=\"radio\"][value=\"' + value + '\"]').prop('checked', true);\r\n return;\r\n }\r\n return this.$element.find('input[type=\"radio\"]:checked').attr('value');\r\n }\r\n\r\n public text(text?: string): string | void {\r\n let $button = this.$element.find('input[type=\"radio\"]:checked');\r\n let $label = $button.closest('label');\r\n\r\n if (text !== undefined) {\r\n $label.text(text);\r\n $label.prepend($button);\r\n return;\r\n }\r\n\r\n return $label.text();\r\n }\r\n\r\n public name(): string {\r\n return this.$element.find('[name]:first').attr('name');\r\n }\r\n}\r\n\r\nclass Checkbox {\r\n private $element: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this.$element; }\r\n public get $valueElement(): JQuery { return this.$element; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element;\r\n }\r\n\r\n public value(value?: any): any | void {\r\n let $checkbox = this.$element.is('input[type=\"checkbox\"]') ? this.$element\r\n : this.$element.find('input[type=\"checkbox\"]');\r\n\r\n if (value !== undefined) {\r\n $checkbox.prop('checked', value);\r\n return;\r\n }\r\n return $checkbox.is(':checked');\r\n }\r\n\r\n public text(text?: string): string | void {\r\n let $text = this.$element.closest('.input-checkbox').find('.input-checkbox-text');\r\n\r\n if (text !== undefined) {\r\n $text.text(text);\r\n return;\r\n }\r\n\r\n return $text.text();\r\n }\r\n\r\n public name(): string {\r\n return this.$element.attr('name');\r\n }\r\n}\r\n\r\nclass File {\r\n private $element: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this.$element; }\r\n public get $valueElement(): JQuery { return this.$element; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element;\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n this.resetFileInput();\r\n return;\r\n }\r\n return this.$element.val();\r\n }\r\n\r\n private resetFileInput(): void {\r\n try {\r\n this.$element.val('');\r\n if (this.$element.val()) {\r\n this.$element.attr('type', 'file');\r\n }\r\n } catch (e) { }\r\n }\r\n\r\n public text(text?: string): string | void {\r\n if (text !== undefined) {\r\n this.$element.text(text);\r\n return;\r\n }\r\n\r\n return this.$element.text();\r\n }\r\n\r\n public name(): string {\r\n return this.$element.siblings('input').attr('name');\r\n }\r\n}\r\n\r\nclass GenericElement {\r\n private $element: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this.$element; }\r\n public get $valueElement(): JQuery { return this.$element; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element;\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n this.$element.data('rustig.value', null);\r\n return;\r\n }\r\n\r\n return this.$element.data('rustig.value');\r\n }\r\n\r\n public text(text?: string): string | void {\r\n if (text !== undefined) {\r\n this.$element.text(text);\r\n return;\r\n }\r\n\r\n return this.$element.text();\r\n }\r\n\r\n public name(): string {\r\n return null;\r\n }\r\n}\r\n\r\nclass SelectSuggestSearch {\r\n private $root: JQuery;\r\n private $valueInput: JQuery;\r\n private $textInput: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this.$textInput; }\r\n public get $valueElement(): JQuery { return this.$valueInput; }\r\n\r\n public constructor($element: JQuery) {\r\n this.$root = $element.closest('.select-suggest-search');\r\n this.$valueInput = $element;\r\n this.$textInput = this.$root.find('.suggest-search input');\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n let $value = $('ss-key'.asDataSelector('Value') + 'value'.asAttrSelector(value));\r\n\r\n if ($value.length <= 0) {\r\n if (!value) {\r\n this.$valueInput.val(value);\r\n this.$textInput.val(value);\r\n }\r\n return;\r\n }\r\n\r\n let text = $value.closest('.ss-suggestion').find('ss-key'.asDataSelector('Text')).val();\r\n this.$textInput.val(text);\r\n return;\r\n }\r\n return this.$valueInput.val();\r\n }\r\n\r\n public text(text?: string): string | number | string[] {\r\n if (text !== undefined) {\r\n this.$textInput.val(text);\r\n return;\r\n }\r\n return this.$textInput.val();\r\n }\r\n\r\n public name(): string {\r\n return this.$valueInput.attr('name');\r\n }\r\n}\r\n\r\nclass PhoneField {\r\n private $element: JQuery;\r\n private _$userFacingElement: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this._$userFacingElement; }\r\n public get $valueElement(): JQuery { return this._$userFacingElement; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element.closest('.phone-field');\r\n this._$userFacingElement = this.$element.find('.phone-full-input');\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n this._$userFacingElement.val(value).change();\r\n return;\r\n }\r\n return this._$userFacingElement.val();\r\n }\r\n\r\n public text(text?: string): string | number | string[] {\r\n return this._$userFacingElement.val();\r\n }\r\n\r\n public name(): string {\r\n return this.$userFacingElement.attr('name');\r\n }\r\n}\r\n\r\nclass NameField {\r\n private $element: JQuery;\r\n private _$userFacingElement: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this._$userFacingElement; }\r\n public get $valueElement(): JQuery { return this._$userFacingElement; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element.closest('.name-field');\r\n this._$userFacingElement = this.$element.find('.name-full-input');\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n this._$userFacingElement.val(value).change();\r\n return;\r\n }\r\n return this._$userFacingElement.val();\r\n }\r\n\r\n public text(text?: string): string | number | string[] {\r\n return this._$userFacingElement.val();\r\n }\r\n\r\n public name(): string {\r\n return this.$userFacingElement.attr('name');\r\n }\r\n}\r\n\r\nclass AsyncField {\r\n private $element: JQuery;\r\n private field: () => AsyncFileField;\r\n\r\n public get $userFacingElement(): JQuery { return this.$element; }\r\n public get $valueElement(): JQuery { return this.field().$valueElement; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element;\r\n this.field = () => this.$element.data('rustig.asyncfilefield')\r\n }\r\n\r\n public value(value?: any): any | void {\r\n return this.field().value(value);\r\n }\r\n\r\n public text(text?: any): string | void {\r\n return this.field().text(text);\r\n }\r\n\r\n public name(): string {\r\n return this.field().name();\r\n }\r\n}\r\n\r\nclass MultiSelectDropdown {\r\n private $element: JQuery;\r\n private field: () => msdropdown;\r\n\r\n public get $userFacingElement(): JQuery { return this.field().$userFacingElement; }\r\n public get $valueElement(): JQuery { return this.field().$valueElement; }\r\n\r\n public constructor($element: JQuery) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element;\r\n this.field = () => this.$element.data('rustig.multiselectdropdown')\r\n }\r\n\r\n public value(value?: any): any | void {\r\n return this.field().value(value);\r\n }\r\n\r\n public text(text?: any): string | void {\r\n return this.field().text(text);\r\n }\r\n\r\n public name(): string {\r\n return this.field().name();\r\n }\r\n}\r\n\r\nclass DateField extends Input {\r\n\r\n public constructor($element: JQuery) {\r\n super($element);\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n let datePicker: any = this.$element.datefield().data('DateTimePicker');\r\n\r\n if (datePicker)\r\n datePicker.date(value);\r\n else\r\n this.$element.val(value);\r\n\r\n return;\r\n }\r\n return new Date(this.$element.val() as string).isValid() ? this.$element.val() : '';\r\n }\r\n}\r\n\r\nclass DateRangeDateField extends Input {\r\n\r\n public get $userFacingElement(): JQuery {\r\n let element = this.$element[0];\r\n let root = element.closest('[data-daterange]');\r\n let input = root.querySelector('[data-daterange-input]');\r\n let key = input.getAttribute('data-daterange-key');\r\n let popoverContent = document.querySelector('daterange-popover-content'.asDataSelector(key));\r\n let selector = element.hasAttribute('data-start') ? '[data-start]' : '[data-end]';\r\n let userFacingElement = popoverContent.querySelector(selector);\r\n \r\n return $(userFacingElement);\r\n }\r\n\r\n public constructor($element: JQuery) {\r\n super($element);\r\n }\r\n}\r\n\r\nclass DateRange {\r\n private dateRangeField: DateRangeField;\r\n\r\n protected $element(): JQuery { return $(this.dateRangeField.element); }\r\n public get $userFacingElement(): JQuery { return $(this.dateRangeField.userFacingElement); }\r\n public get $valueElement(): JQuery { return $(this.dateRangeField.valueElement); }\r\n\r\n public constructor(element: HTMLElement) {\r\n if (!element)\r\n throw new Error('element cannot be null');\r\n\r\n let root = element.closest('[data-daterange]');\r\n let input = root.querySelector('[data-daterange-input]');\r\n this.dateRangeField = DateRangeField.load(input);\r\n }\r\n\r\n public value(value?: any): any | void {\r\n return this.dateRangeField.value(value);\r\n }\r\n\r\n public text(text?: string): string | void {\r\n return this.dateRangeField.text(text);\r\n }\r\n\r\n public name(): string {\r\n return this.dateRangeField.name();\r\n }\r\n}\r\n\r\nclass MoneyField {\r\n protected element: HTMLInputElement;\r\n\r\n public get $userFacingElement(): JQuery { return $(this.element); }\r\n public get $valueElement(): JQuery { return $(this.element); }\r\n\r\n public constructor(element: HTMLInputElement) {\r\n if (!element)\r\n throw new Error('element cannot be null');\r\n\r\n this.element = element;\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n if (!value && value !== 0)\r\n value = '';\r\n $(this.element).autoNumeric('set', value);\r\n return;\r\n }\r\n return $(this.element).autoNumeric('get', value);\r\n }\r\n\r\n public text(text?: string): string | number | string[] {\r\n if (text !== undefined) {\r\n $(this.element).autoNumeric('set', text);\r\n return;\r\n }\r\n return this.element.value;\r\n }\r\n\r\n public name(): string {\r\n return this.element.getAttribute('name');\r\n }\r\n}\r\n\r\nclass DualListBoxElement {\r\n private $element: JQuery;\r\n\r\n public get $userFacingElement(): JQuery { return this.$element; }\r\n public get $valueElement(): JQuery { return this.$element.find('[data-selected-values-csv]'); }\r\n\r\n public constructor($element: JQuery) {\r\n if (!$element)\r\n throw new Error('element cannot be null');\r\n if ($element.length > 1)\r\n throw new Error('element must be a single element');\r\n this.$element = $element;\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined) {\r\n console.log('Setting value on DualListBoxElement not implemented');\r\n return;\r\n }\r\n return this.$valueElement.val();\r\n }\r\n\r\n public text(text?: string): string | number | string[] {\r\n console.log('Get\\Set text for DualListBoxElement not implemented');\r\n return null;\r\n }\r\n\r\n public name(): string {\r\n return this.$element.find('[data-selected-results] input[value=\"\"]').attr('name');\r\n }\r\n}\r\n\r\nexport interface IAction {\r\n (): void;\r\n}\r\nexport default Element;\r\n","import $ from 'jquery';\r\nimport KeyCode from \"./keycode\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n keyboardscrollable(options: IKeyboardScrollableOptions);\r\n }\r\n}\r\n\r\n\r\nexport interface IKeyboardScrollableOptions {\r\n scrollIndex?: number;\r\n scrollableContainer?: IScrollableContainer | JQuery;\r\n}\r\n\r\nexport class KeyboardScrollable {\r\n static get wireup(): string { return '[data-keyboardscrollable]'; }\r\n\r\n private $element: JQuery;\r\n private scrollableContainer: IScrollableContainer;\r\n private options: IKeyboardScrollableOptions;\r\n\r\n private DEFAULTS: IKeyboardScrollableOptions = {\r\n scrollIndex: -1,\r\n scrollableContainer: null\r\n };\r\n\r\n constructor($element: JQuery, options: IKeyboardScrollableOptions) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n this.$element = $element;\r\n\r\n this.options = $.extend({}, this.DEFAULTS, options);\r\n this.setScrollableContainer();\r\n this.$element.on('keydown.rustig.keyboardscrollable', this.onKeyDown.bind(this));\r\n }\r\n\r\n public updateScrollableContainer(options: IKeyboardScrollableOptions) {\r\n let container = options.scrollableContainer;\r\n let scrollIndex = options.scrollIndex;\r\n\r\n if (!options.scrollableContainer)\r\n throw new Error('container cannot be null');\r\n if (KeyboardScrollable.isJQuery(container))\r\n this.scrollableContainer = new ScrollableContainer(container, scrollIndex);\r\n else if (KeyboardScrollable.isIScrollableContainer(container))\r\n this.scrollableContainer = container;\r\n else\r\n throw new Error('container cannot be null');\r\n }\r\n\r\n public resetScrollIndex(): void {\r\n this.scrollableContainer.reset();\r\n }\r\n\r\n public getSelected(): JQuery {\r\n return this.scrollableContainer.getSelectedElement();\r\n }\r\n\r\n private setScrollableContainer(): void {\r\n if (!this.options.scrollableContainer) {\r\n let id = this.$element.data('keyboardscrollable');\r\n let $scrollableContainer = $('scrollablecontainer'.asDataSelector(id));\r\n\r\n if ($scrollableContainer.length <= 0)\r\n throw new Error('No scrollable container provided or registered');\r\n\r\n this.options.scrollableContainer = $scrollableContainer;\r\n }\r\n this.updateScrollableContainer(this.options);\r\n }\r\n\r\n private onKeyDown(event: any): void {\r\n let keycode = event.keyCode;\r\n\r\n if (keycode === KeyCode.Up)\r\n this.scrollableContainer.scrollUp();\r\n else if (keycode === KeyCode.Down)\r\n this.scrollableContainer.scrollDown();\r\n else if (keycode === KeyCode.Enter) {\r\n let $selected = this.scrollableContainer.getSelectedElement();\r\n this.$element.trigger('selected.rustig.keyboardscrollable', $selected);\r\n }\r\n else if (keycode === KeyCode.Escape)\r\n event.preventDefault();\r\n }\r\n\r\n public static isJQuery(container: IScrollableContainer | JQuery): container is JQuery {\r\n return (container).data != undefined;\r\n }\r\n\r\n public static isIScrollableContainer(container: IScrollableContainer | JQuery): container is IScrollableContainer {\r\n return (container) != undefined;\r\n }\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.keyboardscrollable');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new KeyboardScrollable($this, options);\r\n $this.data('rustig.keyboardscrollable', data);\r\n }\r\n\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n($.fn).keyboardscrollable = Plugin;\r\n\r\nexport interface IScrollableContainer {\r\n reset(): void;\r\n scrollUp(): void;\r\n scrollDown(): void;\r\n getSelectedElement(): JQuery;\r\n}\r\n\r\nclass ScrollableContainer {\r\n\r\n private $element: JQuery;\r\n private items: Array;\r\n private scrollIndex: number;\r\n\r\n constructor($element: JQuery, scrollIndex?: number) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element;\r\n this.items = new Array();\r\n this.setItems();\r\n\r\n this.scrollIndex = scrollIndex > -1 ? scrollIndex : -1;\r\n if (this.scrollIndex > -1 && this.scrollIndex < this.items.length)\r\n this.items[this.scrollIndex].addClass('ks-hover');\r\n }\r\n\r\n public reset(): void {\r\n this.items = new Array();\r\n this.scrollIndex = -1;\r\n this.setItems();\r\n }\r\n\r\n public scrollUp(): void {\r\n if (this.scrollIndex <= 0)\r\n return;\r\n\r\n this.items[this.scrollIndex].removeClass('ks-hover');\r\n\r\n this.scrollIndex -= 1;\r\n let $itemAtScrollIndex = this.items[this.scrollIndex].addClass('ks-hover');\r\n this.scrollTo($itemAtScrollIndex);\r\n }\r\n\r\n public scrollDown(): void {\r\n if (this.scrollIndex + 1 == this.items.length)\r\n return;\r\n\r\n if (this.scrollIndex != -1)\r\n this.items[this.scrollIndex].removeClass('ks-hover');\r\n\r\n this.scrollIndex += 1;\r\n let $itemAtScrollIndex = this.items[this.scrollIndex].addClass('ks-hover');\r\n this.scrollTo($itemAtScrollIndex);\r\n }\r\n\r\n public getSelectedElement(): JQuery {\r\n if (this.scrollIndex == -1)\r\n return $();\r\n else\r\n return this.items[this.scrollIndex];\r\n }\r\n\r\n private setItems(): void {\r\n if (this.items.length == 0) {\r\n let self = this;\r\n let $children = self.$element.children();\r\n $children.map(function (index: number, domElement: HTMLElement) {\r\n self.items.push($(domElement));\r\n });\r\n }\r\n }\r\n\r\n private scrollTo($item: JQuery): void {\r\n let $parent = this.$element;\r\n\r\n $parent.scrollTop(\r\n $item.offset().top - $parent.offset().top + $parent.scrollTop()\r\n );\r\n }\r\n}\r\n","/*\n * ----------------------------- JSTORAGE -------------------------------------\n * Simple local storage wrapper to save data on the browser side, supporting\n * all major browsers - IE6+, Firefox2+, Safari4+, Chrome4+ and Opera 10.5+\n *\n * Author: Andris Reinman, andris.reinman@gmail.com\n * Project homepage: www.jstorage.info\n *\n * Licensed under Unlicense:\n *\n * This is free and unencumbered software released into the public domain.\n *\n * Anyone is free to copy, modify, publish, use, compile, sell, or\n * distribute this software, either in source code form or as a compiled\n * binary, for any purpose, commercial or non-commercial, and by any\n * means.\n *\n * In jurisdictions that recognize copyright laws, the author or authors\n * of this software dedicate any and all copyright interest in the\n * software to the public domain. We make this dedication for the benefit\n * of the public at large and to the detriment of our heirs and\n * successors. We intend this dedication to be an overt act of\n * relinquishment in perpetuity of all present and future rights to this\n * software under copyright law.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\n * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\n * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n *\n * For more information, please refer to \n */\n\n/* global ActiveXObject: false */\n/* jshint browser: true */\n\n(function() {\n 'use strict';\n\n var\n /* jStorage version */\n JSTORAGE_VERSION = '0.4.12',\n\n /* detect a dollar object or create one if not found */\n $ = window.jQuery || window.$ || (window.$ = {}),\n\n /* check for a JSON handling support */\n JSON = {\n parse: window.JSON && (window.JSON.parse || window.JSON.decode) ||\n String.prototype.evalJSON && function(str) {\n return String(str).evalJSON();\n } ||\n $.parseJSON ||\n $.evalJSON,\n stringify: Object.toJSON ||\n window.JSON && (window.JSON.stringify || window.JSON.encode) ||\n $.toJSON\n };\n\n // Break if no JSON support was found\n if (typeof JSON.parse !== 'function' || typeof JSON.stringify !== 'function') {\n throw new Error('No JSON support found, include //cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js to page');\n }\n\n var\n /* This is the object, that holds the cached values */\n _storage = {\n __jstorage_meta: {\n CRC32: {}\n }\n },\n\n /* Actual browser storage (localStorage or globalStorage['domain']) */\n _storage_service = {\n jStorage: '{}'\n },\n\n /* DOM element for older IE versions, holds userData behavior */\n _storage_elm = null,\n\n /* How much space does the storage take */\n _storage_size = 0,\n\n /* which backend is currently used */\n _backend = false,\n\n /* onchange observers */\n _observers = {},\n\n /* timeout to wait after onchange event */\n _observer_timeout = false,\n\n /* last update time */\n _observer_update = 0,\n\n /* pubsub observers */\n _pubsub_observers = {},\n\n /* skip published items older than current timestamp */\n _pubsub_last = +new Date(),\n\n /* Next check for TTL */\n _ttl_timeout,\n\n /**\n * XML encoding and decoding as XML nodes can't be JSON'ized\n * XML nodes are encoded and decoded if the node is the value to be saved\n * but not if it's as a property of another object\n * Eg. -\n * $.jStorage.set('key', xmlNode); // IS OK\n * $.jStorage.set('key', {xml: xmlNode}); // NOT OK\n */\n _XMLService = {\n\n /**\n * Validates a XML node to be XML\n * based on jQuery.isXML function\n */\n isXML: function(elm) {\n var documentElement = (elm ? elm.ownerDocument || elm : 0).documentElement;\n return documentElement ? documentElement.nodeName !== 'HTML' : false;\n },\n\n /**\n * Encodes a XML node to string\n * based on http://www.mercurytide.co.uk/news/article/issues-when-working-ajax/\n */\n encode: function(xmlNode) {\n if (!this.isXML(xmlNode)) {\n return false;\n }\n try { // Mozilla, Webkit, Opera\n return new XMLSerializer().serializeToString(xmlNode);\n } catch (E1) {\n try { // IE\n return xmlNode.xml;\n } catch (E2) {}\n }\n return false;\n },\n\n /**\n * Decodes a XML node from string\n * loosely based on http://outwestmedia.com/jquery-plugins/xmldom/\n */\n decode: function(xmlString) {\n var dom_parser = ('DOMParser' in window && (new DOMParser()).parseFromString) ||\n (window.ActiveXObject && function(_xmlString) {\n var xml_doc = new ActiveXObject('Microsoft.XMLDOM');\n xml_doc.async = 'false';\n xml_doc.loadXML(_xmlString);\n return xml_doc;\n }),\n resultXML;\n if (!dom_parser) {\n return false;\n }\n resultXML = dom_parser.call('DOMParser' in window && (new DOMParser()) || window, xmlString, 'text/xml');\n return this.isXML(resultXML) ? resultXML : false;\n }\n };\n\n\n ////////////////////////// PRIVATE METHODS ////////////////////////\n\n /**\n * Initialization function. Detects if the browser supports DOM Storage\n * or userData behavior and behaves accordingly.\n */\n function _init() {\n /* Check if browser supports localStorage */\n var localStorageReallyWorks = false;\n if ('localStorage' in window) {\n try {\n window.localStorage.setItem('_tmptest', 'tmpval');\n localStorageReallyWorks = true;\n window.localStorage.removeItem('_tmptest');\n } catch (BogusQuotaExceededErrorOnIos5) {\n // Thanks be to iOS5 Private Browsing mode which throws\n // QUOTA_EXCEEDED_ERRROR DOM Exception 22.\n }\n }\n\n if (localStorageReallyWorks) {\n try {\n if (window.localStorage) {\n _storage_service = window.localStorage;\n _backend = 'localStorage';\n _observer_update = _storage_service.jStorage_update;\n }\n } catch (E3) { /* Firefox fails when touching localStorage and cookies are disabled */ }\n }\n /* Check if browser supports globalStorage */\n else if ('globalStorage' in window) {\n try {\n if (window.globalStorage) {\n if (window.location.hostname == 'localhost') {\n _storage_service = window.globalStorage['localhost.localdomain'];\n } else {\n _storage_service = window.globalStorage[window.location.hostname];\n }\n _backend = 'globalStorage';\n _observer_update = _storage_service.jStorage_update;\n }\n } catch (E4) { /* Firefox fails when touching localStorage and cookies are disabled */ }\n }\n /* Check if browser supports userData behavior */\n else {\n _storage_elm = document.createElement('link');\n if (_storage_elm.addBehavior) {\n\n /* Use a DOM element to act as userData storage */\n _storage_elm.style.behavior = 'url(#default#userData)';\n\n /* userData element needs to be inserted into the DOM! */\n document.getElementsByTagName('head')[0].appendChild(_storage_elm);\n\n try {\n _storage_elm.load('jStorage');\n } catch (E) {\n // try to reset cache\n _storage_elm.setAttribute('jStorage', '{}');\n _storage_elm.save('jStorage');\n _storage_elm.load('jStorage');\n }\n\n var data = '{}';\n try {\n data = _storage_elm.getAttribute('jStorage');\n } catch (E5) {}\n\n try {\n _observer_update = _storage_elm.getAttribute('jStorage_update');\n } catch (E6) {}\n\n _storage_service.jStorage = data;\n _backend = 'userDataBehavior';\n } else {\n _storage_elm = null;\n return;\n }\n }\n\n // Load data from storage\n _load_storage();\n\n // remove dead keys\n _handleTTL();\n\n // start listening for changes\n _setupObserver();\n\n // initialize publish-subscribe service\n _handlePubSub();\n\n // handle cached navigation\n if ('addEventListener' in window) {\n window.addEventListener('pageshow', function(event) {\n if (event.persisted) {\n _storageObserver();\n }\n }, false);\n }\n }\n\n /**\n * Reload data from storage when needed\n */\n function _reloadData() {\n var data = '{}';\n\n if (_backend == 'userDataBehavior') {\n _storage_elm.load('jStorage');\n\n try {\n data = _storage_elm.getAttribute('jStorage');\n } catch (E5) {}\n\n try {\n _observer_update = _storage_elm.getAttribute('jStorage_update');\n } catch (E6) {}\n\n _storage_service.jStorage = data;\n }\n\n _load_storage();\n\n // remove dead keys\n _handleTTL();\n\n _handlePubSub();\n }\n\n /**\n * Sets up a storage change observer\n */\n function _setupObserver() {\n if (_backend == 'localStorage' || _backend == 'globalStorage') {\n if ('addEventListener' in window) {\n window.addEventListener('storage', _storageObserver, false);\n } else {\n document.attachEvent('onstorage', _storageObserver);\n }\n } else if (_backend == 'userDataBehavior') {\n setInterval(_storageObserver, 1000);\n }\n }\n\n /**\n * Fired on any kind of data change, needs to check if anything has\n * really been changed\n */\n function _storageObserver() {\n var updateTime;\n // cumulate change notifications with timeout\n clearTimeout(_observer_timeout);\n _observer_timeout = setTimeout(function() {\n\n if (_backend == 'localStorage' || _backend == 'globalStorage') {\n updateTime = _storage_service.jStorage_update;\n } else if (_backend == 'userDataBehavior') {\n _storage_elm.load('jStorage');\n try {\n updateTime = _storage_elm.getAttribute('jStorage_update');\n } catch (E5) {}\n }\n\n if (updateTime && updateTime != _observer_update) {\n _observer_update = updateTime;\n _checkUpdatedKeys();\n }\n\n }, 25);\n }\n\n /**\n * Reloads the data and checks if any keys are changed\n */\n function _checkUpdatedKeys() {\n var oldCrc32List = JSON.parse(JSON.stringify(_storage.__jstorage_meta.CRC32)),\n newCrc32List;\n\n _reloadData();\n newCrc32List = JSON.parse(JSON.stringify(_storage.__jstorage_meta.CRC32));\n\n var key,\n updated = [],\n removed = [];\n\n for (key in oldCrc32List) {\n if (oldCrc32List.hasOwnProperty(key)) {\n if (!newCrc32List[key]) {\n removed.push(key);\n continue;\n }\n if (oldCrc32List[key] != newCrc32List[key] && String(oldCrc32List[key]).substr(0, 2) == '2.') {\n updated.push(key);\n }\n }\n }\n\n for (key in newCrc32List) {\n if (newCrc32List.hasOwnProperty(key)) {\n if (!oldCrc32List[key]) {\n updated.push(key);\n }\n }\n }\n\n _fireObservers(updated, 'updated');\n _fireObservers(removed, 'deleted');\n }\n\n /**\n * Fires observers for updated keys\n *\n * @param {Array|String} keys Array of key names or a key\n * @param {String} action What happened with the value (updated, deleted, flushed)\n */\n function _fireObservers(keys, action) {\n keys = [].concat(keys || []);\n\n var i, j, len, jlen;\n\n if (action == 'flushed') {\n keys = [];\n for (var key in _observers) {\n if (_observers.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n action = 'deleted';\n }\n for (i = 0, len = keys.length; i < len; i++) {\n if (_observers[keys[i]]) {\n for (j = 0, jlen = _observers[keys[i]].length; j < jlen; j++) {\n _observers[keys[i]][j](keys[i], action);\n }\n }\n if (_observers['*']) {\n for (j = 0, jlen = _observers['*'].length; j < jlen; j++) {\n _observers['*'][j](keys[i], action);\n }\n }\n }\n }\n\n /**\n * Publishes key change to listeners\n */\n function _publishChange() {\n var updateTime = (+new Date()).toString();\n\n if (_backend == 'localStorage' || _backend == 'globalStorage') {\n try {\n _storage_service.jStorage_update = updateTime;\n } catch (E8) {\n // safari private mode has been enabled after the jStorage initialization\n _backend = false;\n }\n } else if (_backend == 'userDataBehavior') {\n _storage_elm.setAttribute('jStorage_update', updateTime);\n _storage_elm.save('jStorage');\n }\n\n _storageObserver();\n }\n\n /**\n * Loads the data from the storage based on the supported mechanism\n */\n function _load_storage() {\n /* if jStorage string is retrieved, then decode it */\n if (_storage_service.jStorage) {\n try {\n _storage = JSON.parse(String(_storage_service.jStorage));\n } catch (E6) {\n _storage_service.jStorage = '{}';\n }\n } else {\n _storage_service.jStorage = '{}';\n }\n _storage_size = _storage_service.jStorage ? String(_storage_service.jStorage).length : 0;\n\n if (!_storage.__jstorage_meta) {\n _storage.__jstorage_meta = {};\n }\n if (!_storage.__jstorage_meta.CRC32) {\n _storage.__jstorage_meta.CRC32 = {};\n }\n }\n\n /**\n * This functions provides the 'save' mechanism to store the jStorage object\n */\n function _save() {\n _dropOldEvents(); // remove expired events\n try {\n _storage_service.jStorage = JSON.stringify(_storage);\n // If userData is used as the storage engine, additional\n if (_storage_elm) {\n _storage_elm.setAttribute('jStorage', _storage_service.jStorage);\n _storage_elm.save('jStorage');\n }\n _storage_size = _storage_service.jStorage ? String(_storage_service.jStorage).length : 0;\n } catch (E7) { /* probably cache is full, nothing is saved this way*/ }\n }\n\n /**\n * Function checks if a key is set and is string or numberic\n *\n * @param {String} key Key name\n */\n function _checkKey(key) {\n if (typeof key != 'string' && typeof key != 'number') {\n throw new TypeError('Key name must be string or numeric');\n }\n if (key == '__jstorage_meta') {\n throw new TypeError('Reserved key name');\n }\n return true;\n }\n\n /**\n * Removes expired keys\n */\n function _handleTTL() {\n var curtime, i, TTL, CRC32, nextExpire = Infinity,\n changed = false,\n deleted = [];\n\n clearTimeout(_ttl_timeout);\n\n if (!_storage.__jstorage_meta || typeof _storage.__jstorage_meta.TTL != 'object') {\n // nothing to do here\n return;\n }\n\n curtime = +new Date();\n TTL = _storage.__jstorage_meta.TTL;\n\n CRC32 = _storage.__jstorage_meta.CRC32;\n for (i in TTL) {\n if (TTL.hasOwnProperty(i)) {\n if (TTL[i] <= curtime) {\n delete TTL[i];\n delete CRC32[i];\n delete _storage[i];\n changed = true;\n deleted.push(i);\n } else if (TTL[i] < nextExpire) {\n nextExpire = TTL[i];\n }\n }\n }\n\n // set next check\n if (nextExpire != Infinity) {\n _ttl_timeout = setTimeout(_handleTTL, Math.min(nextExpire - curtime, 0x7FFFFFFF));\n }\n\n // save changes\n if (changed) {\n _save();\n _publishChange();\n _fireObservers(deleted, 'deleted');\n }\n }\n\n /**\n * Checks if there's any events on hold to be fired to listeners\n */\n function _handlePubSub() {\n var i, len;\n if (!_storage.__jstorage_meta.PubSub) {\n return;\n }\n var pubelm,\n _pubsubCurrent = _pubsub_last,\n needFired = [];\n\n for (i = len = _storage.__jstorage_meta.PubSub.length - 1; i >= 0; i--) {\n pubelm = _storage.__jstorage_meta.PubSub[i];\n if (pubelm[0] > _pubsub_last) {\n _pubsubCurrent = pubelm[0];\n needFired.unshift(pubelm);\n }\n }\n\n for (i = needFired.length - 1; i >= 0; i--) {\n _fireSubscribers(needFired[i][1], needFired[i][2]);\n }\n\n _pubsub_last = _pubsubCurrent;\n }\n\n /**\n * Fires all subscriber listeners for a pubsub channel\n *\n * @param {String} channel Channel name\n * @param {Mixed} payload Payload data to deliver\n */\n function _fireSubscribers(channel, payload) {\n if (_pubsub_observers[channel]) {\n for (var i = 0, len = _pubsub_observers[channel].length; i < len; i++) {\n // send immutable data that can't be modified by listeners\n try {\n _pubsub_observers[channel][i](channel, JSON.parse(JSON.stringify(payload)));\n } catch (E) {}\n }\n }\n }\n\n /**\n * Remove old events from the publish stream (at least 2sec old)\n */\n function _dropOldEvents() {\n if (!_storage.__jstorage_meta.PubSub) {\n return;\n }\n\n var retire = +new Date() - 2000;\n\n for (var i = 0, len = _storage.__jstorage_meta.PubSub.length; i < len; i++) {\n if (_storage.__jstorage_meta.PubSub[i][0] <= retire) {\n // deleteCount is needed for IE6\n _storage.__jstorage_meta.PubSub.splice(i, _storage.__jstorage_meta.PubSub.length - i);\n break;\n }\n }\n\n if (!_storage.__jstorage_meta.PubSub.length) {\n delete _storage.__jstorage_meta.PubSub;\n }\n\n }\n\n /**\n * Publish payload to a channel\n *\n * @param {String} channel Channel name\n * @param {Mixed} payload Payload to send to the subscribers\n */\n function _publish(channel, payload) {\n if (!_storage.__jstorage_meta) {\n _storage.__jstorage_meta = {};\n }\n if (!_storage.__jstorage_meta.PubSub) {\n _storage.__jstorage_meta.PubSub = [];\n }\n\n _storage.__jstorage_meta.PubSub.unshift([+new Date(), channel, payload]);\n\n _save();\n _publishChange();\n }\n\n\n /**\n * JS Implementation of MurmurHash2\n *\n * SOURCE: https://github.com/garycourt/murmurhash-js (MIT licensed)\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n\n function murmurhash2_32_gc(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k =\n ((str.charCodeAt(i) & 0xff)) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24);\n\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n /* falls through */\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n /* falls through */\n case 1:\n h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n }\n\n ////////////////////////// PUBLIC INTERFACE /////////////////////////\n\n $.jStorage = {\n /* Version number */\n version: JSTORAGE_VERSION,\n\n /**\n * Sets a key's value.\n *\n * @param {String} key Key to set. If this value is not set or not\n * a string an exception is raised.\n * @param {Mixed} value Value to set. This can be any value that is JSON\n * compatible (Numbers, Strings, Objects etc.).\n * @param {Object} [options] - possible options to use\n * @param {Number} [options.TTL] - optional TTL value, in milliseconds\n * @return {Mixed} the used value\n */\n set: function(key, value, options) {\n _checkKey(key);\n\n options = options || {};\n\n // undefined values are deleted automatically\n if (typeof value == 'undefined') {\n this.deleteKey(key);\n return value;\n }\n\n if (_XMLService.isXML(value)) {\n value = {\n _is_xml: true,\n xml: _XMLService.encode(value)\n };\n } else if (typeof value == 'function') {\n return undefined; // functions can't be saved!\n } else if (value && typeof value == 'object') {\n // clone the object before saving to _storage tree\n value = JSON.parse(JSON.stringify(value));\n }\n\n _storage[key] = value;\n\n _storage.__jstorage_meta.CRC32[key] = '2.' + murmurhash2_32_gc(JSON.stringify(value), 0x9747b28c);\n\n this.setTTL(key, options.TTL || 0); // also handles saving and _publishChange\n\n _fireObservers(key, 'updated');\n return value;\n },\n\n /**\n * Looks up a key in cache\n *\n * @param {String} key - Key to look up.\n * @param {mixed} def - Default value to return, if key didn't exist.\n * @return {Mixed} the key value, default value or null\n */\n get: function(key, def) {\n _checkKey(key);\n if (key in _storage) {\n if (_storage[key] && typeof _storage[key] == 'object' && _storage[key]._is_xml) {\n return _XMLService.decode(_storage[key].xml);\n } else {\n return _storage[key];\n }\n }\n return typeof(def) == 'undefined' ? null : def;\n },\n\n /**\n * Deletes a key from cache.\n *\n * @param {String} key - Key to delete.\n * @return {Boolean} true if key existed or false if it didn't\n */\n deleteKey: function(key) {\n _checkKey(key);\n if (key in _storage) {\n delete _storage[key];\n // remove from TTL list\n if (typeof _storage.__jstorage_meta.TTL == 'object' &&\n key in _storage.__jstorage_meta.TTL) {\n delete _storage.__jstorage_meta.TTL[key];\n }\n\n delete _storage.__jstorage_meta.CRC32[key];\n\n _save();\n _publishChange();\n _fireObservers(key, 'deleted');\n return true;\n }\n return false;\n },\n\n /**\n * Sets a TTL for a key, or remove it if ttl value is 0 or below\n *\n * @param {String} key - key to set the TTL for\n * @param {Number} ttl - TTL timeout in milliseconds\n * @return {Boolean} true if key existed or false if it didn't\n */\n setTTL: function(key, ttl) {\n var curtime = +new Date();\n _checkKey(key);\n ttl = Number(ttl) || 0;\n if (key in _storage) {\n\n if (!_storage.__jstorage_meta.TTL) {\n _storage.__jstorage_meta.TTL = {};\n }\n\n // Set TTL value for the key\n if (ttl > 0) {\n _storage.__jstorage_meta.TTL[key] = curtime + ttl;\n } else {\n delete _storage.__jstorage_meta.TTL[key];\n }\n\n _save();\n\n _handleTTL();\n\n _publishChange();\n return true;\n }\n return false;\n },\n\n /**\n * Gets remaining TTL (in milliseconds) for a key or 0 when no TTL has been set\n *\n * @param {String} key Key to check\n * @return {Number} Remaining TTL in milliseconds\n */\n getTTL: function(key) {\n var curtime = +new Date(),\n ttl;\n _checkKey(key);\n if (key in _storage && _storage.__jstorage_meta.TTL && _storage.__jstorage_meta.TTL[key]) {\n ttl = _storage.__jstorage_meta.TTL[key] - curtime;\n return ttl || 0;\n }\n return 0;\n },\n\n /**\n * Deletes everything in cache.\n *\n * @return {Boolean} Always true\n */\n flush: function() {\n _storage = {\n __jstorage_meta: {\n CRC32: {}\n }\n };\n _save();\n _publishChange();\n _fireObservers(null, 'flushed');\n return true;\n },\n\n /**\n * Returns a read-only copy of _storage\n *\n * @return {Object} Read-only copy of _storage\n */\n storageObj: function() {\n function F() {}\n F.prototype = _storage;\n return new F();\n },\n\n /**\n * Returns an index of all used keys as an array\n * ['key1', 'key2',..'keyN']\n *\n * @return {Array} Used keys\n */\n index: function() {\n var index = [],\n i;\n for (i in _storage) {\n if (_storage.hasOwnProperty(i) && i != '__jstorage_meta') {\n index.push(i);\n }\n }\n return index;\n },\n\n /**\n * How much space in bytes does the storage take?\n *\n * @return {Number} Storage size in chars (not the same as in bytes,\n * since some chars may take several bytes)\n */\n storageSize: function() {\n return _storage_size;\n },\n\n /**\n * Which backend is currently in use?\n *\n * @return {String} Backend name\n */\n currentBackend: function() {\n return _backend;\n },\n\n /**\n * Test if storage is available\n *\n * @return {Boolean} True if storage can be used\n */\n storageAvailable: function() {\n return !!_backend;\n },\n\n /**\n * Register change listeners\n *\n * @param {String} key Key name\n * @param {Function} callback Function to run when the key changes\n */\n listenKeyChange: function(key, callback) {\n _checkKey(key);\n if (!_observers[key]) {\n _observers[key] = [];\n }\n _observers[key].push(callback);\n },\n\n /**\n * Remove change listeners\n *\n * @param {String} key Key name to unregister listeners against\n * @param {Function} [callback] If set, unregister the callback, if not - unregister all\n */\n stopListening: function(key, callback) {\n _checkKey(key);\n\n if (!_observers[key]) {\n return;\n }\n\n if (!callback) {\n delete _observers[key];\n return;\n }\n\n for (var i = _observers[key].length - 1; i >= 0; i--) {\n if (_observers[key][i] == callback) {\n _observers[key].splice(i, 1);\n }\n }\n },\n\n /**\n * Subscribe to a Publish/Subscribe event stream\n *\n * @param {String} channel Channel name\n * @param {Function} callback Function to run when the something is published to the channel\n */\n subscribe: function(channel, callback) {\n channel = (channel || '').toString();\n if (!channel) {\n throw new TypeError('Channel not defined');\n }\n if (!_pubsub_observers[channel]) {\n _pubsub_observers[channel] = [];\n }\n _pubsub_observers[channel].push(callback);\n },\n\n /**\n * Publish data to an event stream\n *\n * @param {String} channel Channel name\n * @param {Mixed} payload Payload to deliver\n */\n publish: function(channel, payload) {\n channel = (channel || '').toString();\n if (!channel) {\n throw new TypeError('Channel not defined');\n }\n\n _publish(channel, payload);\n },\n\n /**\n * Reloads the data from browser storage\n */\n reInit: function() {\n _reloadData();\n },\n\n /**\n * Removes reference from global objects and saves it as jStorage\n *\n * @param {Boolean} option if needed to save object as simple 'jStorage' in windows context\n */\n noConflict: function(saveInGlobal) {\n delete window.$.jStorage;\n\n if (saveInGlobal) {\n window.jStorage = this;\n }\n\n return this;\n }\n };\n\n // Initialize jStorage\n _init();\n\n})();","import $ from 'jquery';\r\nimport 'jstorage';\r\n\r\nexport class Storage {\r\n public static set(key: string, value: any, millisecondsToLive?: number): any {\r\n if (millisecondsToLive) {\r\n return $.jStorage.set(key, value, { TTL: millisecondsToLive });\r\n }\r\n return $.jStorage.set(key, value);\r\n }\r\n public static get(key: string): any {\r\n return $.jStorage.get(key);\r\n }\r\n public static remove(key: string): boolean {\r\n return $.jStorage.deleteKey(key);\r\n }\r\n public static clear(): void {\r\n $.jStorage.flush();\r\n }\r\n public static setChangeListener(key: string, callback: (key: string, action: any) => void): void {\r\n $.jStorage.listenKeyChange(key, callback);\r\n }\r\n public static removeOnChangeListener(key: string, callback?: () => void): void {\r\n $.jStorage.stopListening(key, callback);\r\n }\r\n}\r\n\r\nexport default Storage;","import { Storage } from './storage';\r\n\r\nexport class ElementPosition {\r\n private $elementToPosition: JQuery;\r\n private containerWidth: number;\r\n private containerHeight: number;\r\n private elementWidth: number;\r\n private elementHeight: number;\r\n private position: Point = { top: 0, left: 0 };\r\n\r\n constructor($elementToPosition: JQuery) {\r\n if (!$elementToPosition || $elementToPosition.length == 0)\r\n throw new Error('$elementToPosition is required.');\r\n this.$elementToPosition = $elementToPosition;\r\n }\r\n setPositionByPoint(point: Point) {\r\n this.calculateHeightsAndWidths();\r\n this.position = point;\r\n this.setPosition();\r\n }\r\n setPositionCenterScreen() {\r\n this.calculateHeightsAndWidths($(window));\r\n this.position.left = (this.containerWidth / 2) - (this.elementWidth / 2);\r\n var pageYOffset = Storage.get('scrollPositionBeforeReload') || window.pageYOffset;\r\n Storage.remove('scrollPositionBeforeReload');\r\n this.position.top = pageYOffset + (this.containerHeight / 2) - (this.elementHeight / 2);\r\n this.$elementToPosition.css(this.position);\r\n }\r\n setPositionByElement($target: JQuery, xAlignment: string = 'left', yAlignment = 'bottom') {\r\n if (!$target || $target.length == 0)\r\n throw new Error('$target is required.');\r\n\r\n this.calculateHeightsAndWidths();\r\n var offset = $target.offset();\r\n\r\n this.position.top = offset.top + $target.outerHeight();\r\n this.position.left = offset.left;\r\n\r\n if (xAlignment == 'right') {\r\n this.position.left = this.position.left + $target.outerWidth() - this.$elementToPosition.outerWidth();\r\n }\r\n if (yAlignment == 'top') {\r\n this.position.top = this.position.top - $target.outerHeight() - this.$elementToPosition.outerHeight();\r\n }\r\n this.setPosition($target);\r\n }\r\n private setPosition($target?: JQuery, xAlignment: string = 'left') {\r\n var fitsInContainerHeight = this.elementHeight < this.containerHeight;\r\n var fitsInContainerWidth = this.elementWidth < this.containerWidth;\r\n var shouldFlipVertically = fitsInContainerHeight && this.containerHeight < this.position.top + this.elementHeight;\r\n var shouldFlipHorizontally = fitsInContainerWidth && this.containerWidth < this.position.left + this.elementWidth;\r\n\r\n if (shouldFlipVertically) {\r\n var newTopAfterFlip = this.position.top - this.elementHeight;\r\n if ($target) {\r\n newTopAfterFlip = newTopAfterFlip - $target.outerHeight();\r\n }\r\n\r\n if (newTopAfterFlip > 0)\r\n this.position.top = newTopAfterFlip;\r\n }\r\n if (shouldFlipHorizontally) {\r\n this.position.left = this.position.left - this.elementWidth;\r\n if ($target) {\r\n var widthOffset = xAlignment == 'left' ? $target.outerWidth() : -$target.outerWidth();\r\n this.position.left = this.position.left + widthOffset;\r\n }\r\n }\r\n\r\n this.$elementToPosition.css(this.position);\r\n }\r\n private calculateHeightsAndWidths($container: JQuery = $(document)) {\r\n this.containerWidth = $container.width();\r\n this.containerHeight = $container.height();\r\n this.elementWidth = this.$elementToPosition.width();\r\n this.elementHeight = this.$elementToPosition.height();\r\n }\r\n\r\n public static setPositionByElement($element: JQuery, $target: JQuery) {\r\n return new ElementPosition($element).setPositionByElement($target);\r\n }\r\n}\r\n\r\n// INTERFACE\r\nexport interface Point{\r\n top: number;\r\n left: number;\r\n}\r\n\r\nexport default ElementPosition;","import $ from 'jquery';\r\n\r\nvar inputsOnlySelector: string = 'input, .dropdown-input, textarea, button[data-dismiss], button[data-ms-user-facing-input], button[data-daterange-display], [data-file-field]';\r\nvar allElementsSelector: string = '[data-tab], button, ' + inputsOnlySelector;\r\n\r\nexport class Focus {\r\n public static autoFocus($container?: JQuery): void {\r\n var $resolvedContainer = $container || $( document);\r\n\r\n var $focus = $resolvedContainer.find('[autofocus]');\r\n if ($focus.length == 1)\r\n $focus.focus();\r\n else\r\n Focus.focusFirstInput($resolvedContainer);\r\n }\r\n\r\n public static focusContainer($container?: JQuery): void {\r\n var $resolvedContainer = $container || $( document);\r\n Focus.focusFirstElement($resolvedContainer);\r\n }\r\n\r\n public static focusFirstElement($container: JQuery): void {\r\n focusFirst($container, allElementsSelector);\r\n }\r\n\r\n public static focusFirstInput($container: JQuery): void {\r\n focusFirst($container, inputsOnlySelector);\r\n }\r\n\r\n public static focusLastElement($container: JQuery): void {\r\n focusLast($container, allElementsSelector);\r\n }\r\n\r\n public static focusLastInput($container: JQuery): void {\r\n focusLast($container, inputsOnlySelector);\r\n }\r\n\r\n\r\n\r\n public static after(action: Function) {\r\n let element = document.activeElement as HTMLElement;\r\n let elementId = element.id;\r\n if (!elementId) {\r\n action();\r\n return;\r\n }\r\n\r\n let isCheckbox = element.matches('[type=\"checkbox\"]');\r\n let caretPosition;\r\n if (!isCheckbox && element instanceof HTMLInputElement)\r\n caretPosition = element.selectionStart;\r\n\r\n action();\r\n\r\n var updatedDomElement = document.getElementById(elementId);\r\n if (updatedDomElement) {\r\n updatedDomElement.focus();\r\n if (updatedDomElement instanceof HTMLInputElement && caretPosition) {\r\n updatedDomElement.selectionStart = caretPosition;\r\n updatedDomElement.selectionEnd = caretPosition;\r\n }\r\n }\r\n }\r\n}\r\n\r\nvar focusFirst = function ($container: JQuery, selector: string): void {\r\n var $focus = $container.find(selector).filter(':visible').not('[readonly=\"readonly\"]').first();\r\n if ($focus.length > 0) {\r\n $focus.focus();\r\n }\r\n}\r\n\r\nvar focusLast = function ($container: JQuery, selector: string): void {\r\n var $focus = $container.find(selector).filter(':visible').not('[readonly=\"readonly\"]').last();\r\n if ($focus.length > 0) {\r\n $focus.focus();\r\n }\r\n}\r\n\r\nexport default Focus;\r\n","import $ from 'jquery';\r\nimport { Point, ElementPosition } from \"../utilities/elementposition\";\r\nimport Focus from \"../utilities/focusfield\";\r\nimport KeyCode from \"../utilities/keycode\";\r\nimport _ from 'underscore';\r\n\r\nexport class Modal {\r\n private DEFAULTS = {\r\n $element: null,\r\n alignment: null,\r\n content: null\r\n };\r\n private static modalStack: ModalStack;\r\n private static $globalOverlay: JQuery = null;\r\n private id: string;\r\n private $modal: JQuery;\r\n private isOpen: boolean = false;\r\n private options: ModalOptions;\r\n private previousPosition: Point;\r\n private previousTitle: string;\r\n private previousPrimaryCaption: string;\r\n\r\n public get position() {\r\n if (!this.$modal)\r\n return null;\r\n\r\n return this.$modal.position();\r\n }\r\n\r\n public get title() : string {\r\n if (!this.$modal)\r\n return null;\r\n\r\n return this.$modal.find('.modal-title').text();\r\n }\r\n\r\n public get primaryCaption(): string {\r\n if (!this.$modal)\r\n return null;\r\n\r\n return this.$modal.find('.modal-actions .button-primary').text();\r\n }\r\n\r\n private get isDismissableFromOverlay(): boolean {\r\n return this.$modal.find('[data-dismiss-from-overlay]').length > 0;\r\n }\r\n\r\n constructor(options: ModalOptions) {\r\n this.options = $.extend(this.DEFAULTS, options, $(options.$element).data());\r\n this.validateOptions();\r\n this.id = $(this.options.content).data('modal-id');\r\n }\r\n\r\n public rememberPosition(position: Point): void {\r\n this.previousPosition = position;\r\n }\r\n\r\n public rememberTitle(value: string): void {\r\n this.previousTitle = value;\r\n }\r\n\r\n public rememberPrimaryCaption(value: string): void {\r\n this.previousPrimaryCaption = value;\r\n }\r\n\r\n private validateOptions = function () {\r\n if (!this.options.content || this.options.content.length == 0)\r\n throw new Error('Rustig.Modal.open requires you provide an options object with a content property');\r\n if (!$(this.options.content).data('modal-id'))\r\n throw new Error('Rustig.Modal.open requires you provide content with the root element containing a data-modal-id attribute');\r\n }\r\n private open(): void {\r\n if (this.isOpen)\r\n return;\r\n\r\n this.buildOverlayIfNeeded();\r\n this.buildModalAndAddToDOM();\r\n this.moveOverlayBehindTopMostModal();\r\n this.positionModal();\r\n\r\n this.$modal.trigger('show.rustig.modal');\r\n\r\n Modal.$globalOverlay.show();\r\n\r\n this.$modal.show();\r\n this.isOpen = true;\r\n this.setDefaultFocus();\r\n\r\n this.$modal.trigger('shown.rustig.modal');\r\n if (this.options.onShown)\r\n this.options.onShown(this.$modal);\r\n }\r\n private close(): void {\r\n if (this.isOpen == false)\r\n return;\r\n\r\n this.$modal.trigger('hide.rustig.modal');\r\n $(document).off('focusin.rustig.modal');\r\n\r\n this.removeModal();\r\n this.hideOrMoveOverlay();\r\n this.isOpen = false;\r\n\r\n $(document).trigger('hidden.rustig.modal', this.$modal);\r\n if (this.options.onHidden)\r\n this.options.onHidden(this.$modal);\r\n }\r\n private performDefault(): boolean {\r\n if (this.isOpen == false)\r\n return;\r\n\r\n let $defaultButton = this.$modal.find('[data-default]');\r\n if ($defaultButton.length != 0) {\r\n $defaultButton.click();\r\n return true;\r\n }\r\n return false;\r\n }\r\n private buildOverlayIfNeeded() {\r\n if (Modal.$globalOverlay)\r\n return;\r\n\r\n Modal.$globalOverlay = $('
').attr('id', 'modalGlobalOverlay');\r\n $(document.body).append(Modal.$globalOverlay);\r\n }\r\n private buildModalAndAddToDOM(): void {\r\n this.$modal = $('
').addClass('modal-container');\r\n $(document.body).append(this.$modal);\r\n if ($.fn.draggable) {\r\n let m: any = this.$modal;\r\n m.draggable({\r\n handle: '.modal-title',\r\n start: function (e) {\r\n $(e.target).trigger('dragstart.rustig.modal');\r\n }\r\n });\r\n }\r\n\r\n let $content = $(this.options.content).clone(true);\r\n\r\n if ($content.is('modal-preserve-context'.asDataSelector())) {\r\n $content.find('.modal-title').text(this.previousTitle);\r\n $content.find('.modal-actions .button-primary').text(this.previousPrimaryCaption);\r\n }\r\n\r\n let containerClass = $content.data('container-class');\r\n if (containerClass)\r\n this.$modal.addClass(containerClass);\r\n\r\n let modalContent = $content[0].outerHTML + this.getSiblingContent();\r\n let focusGuard = '
';\r\n modalContent = focusGuard + modalContent + focusGuard;\r\n this.$modal.html(modalContent);\r\n\r\n Modal.modalStack.push(this);\r\n }\r\n private getSiblingContent(): string {\r\n let siblingContent = '';\r\n let canGetSiblings = this.options.content.siblings || $(this.options.content).siblings;\r\n if (canGetSiblings) {\r\n $(this.options.content).siblings().not('[data-modal-id]').each(function () {\r\n siblingContent += '\\r\\n' + $(this)[0].outerHTML;\r\n });\r\n }\r\n return siblingContent;\r\n }\r\n private removeModal(): void {\r\n this.$modal.remove();\r\n Modal.modalStack.pop();\r\n }\r\n private positionModal() {\r\n let position = new ElementPosition(this.$modal);\r\n let hasElement = this.options.$element != null;\r\n let hasVisibleElement = hasElement && this.options.$element.is(':visible');\r\n let lastTargetPosition = hasElement ? this.options.$element.data('rustig.lastoffset') : null;\r\n let canPositionByPoint = !hasVisibleElement && lastTargetPosition;\r\n let canPositionByElement = hasVisibleElement;\r\n\r\n if (this.previousPosition) {\r\n position.setPositionByPoint(this.previousPosition);\r\n this.previousPosition = null;\r\n }\r\n else if (canPositionByElement) {\r\n position.setPositionByElement(this.options.$element, this.options.alignment);\r\n }\r\n else if (canPositionByPoint) {\r\n position.setPositionByPoint(lastTargetPosition);\r\n }\r\n else {\r\n position.setPositionCenterScreen();\r\n }\r\n }\r\n private hideOrMoveOverlay(): void {\r\n if (Modal.modalStack.isEmpty) {\r\n Modal.$globalOverlay.hide();\r\n }\r\n else {\r\n this.moveOverlayBehindTopMostModal();\r\n }\r\n }\r\n private moveOverlayBehindTopMostModal(): void {\r\n let topMostModal = Modal.modalStack.peek();\r\n if (topMostModal)\r\n Modal.$globalOverlay.detach().insertBefore(topMostModal.$modal);\r\n }\r\n private setDefaultFocus() {\r\n Focus.autoFocus(this.$modal);\r\n }\r\n static current(): JQuery {\r\n return Modal.modalStack.isEmpty\r\n ? $()\r\n : Modal.modalStack.peek().$modal;\r\n }\r\n static open(options: ModalOptions): void {\r\n let modal = new Modal(options);\r\n\r\n if (!Modal.modalStack.isEmpty) {\r\n let topModal = Modal.modalStack.peek();\r\n let isAlreadyOpen = topModal.id == modal.id;\r\n if (isAlreadyOpen) {\r\n modal.rememberPosition(topModal.position);\r\n modal.rememberTitle(topModal.title);\r\n modal.rememberPrimaryCaption(topModal.primaryCaption);\r\n topModal.close();\r\n }\r\n }\r\n modal.open();\r\n\r\n this.wireupDismiss();\r\n this.wireupSubmit();\r\n }\r\n static openDisconnectModal(): void {\r\n this.open({\r\n content: '

Disconnected

' +\r\n '

The connection to the application has been lost.' +\r\n ' Please attempt to restore your internet connection and try the current operation again.

' +\r\n '
'\r\n });\r\n }\r\n static openErrorModal(error: string): void {\r\n this.open({\r\n content: '

Action Failed

' +\r\n '

Error: ' + error + '

' +\r\n '
'\r\n });\r\n }\r\n static close(): void {\r\n if (Modal.modalStack.isNotEmpty)\r\n Modal.modalStack.peek().close();\r\n\r\n if (Modal.modalStack.isNotEmpty)\r\n Modal.modalStack.peek().setDefaultFocus();\r\n else {\r\n this.unhookDismiss();\r\n this.unhookSubmit();\r\n }\r\n }\r\n static closeIfCanDismissFromOverlay(): void {\r\n if (Modal.modalStack.isEmpty)\r\n return;\r\n\r\n let modal = Modal.modalStack.peek();\r\n if (modal.isDismissableFromOverlay)\r\n modal.close();\r\n }\r\n static closeAll(): void {\r\n while (!Modal.modalStack.isEmpty) {\r\n Modal.modalStack.peek().close();\r\n }\r\n this.unhookDismiss();\r\n this.unhookSubmit();\r\n }\r\n static wireupDismiss(): void {\r\n this.unhookDismiss();\r\n $(document).on('keyup.dismiss.rustig.modal', (e: JQueryEventObject) => {\r\n e.which == KeyCode.Escape && Modal.close();\r\n });\r\n }\r\n static unhookDismiss(): void {\r\n $(document).off('keyup.dismiss.rustig.modal');\r\n }\r\n static wireupSubmit(): void {\r\n this.unhookSubmit();\r\n $(document).on('keyup.performdefault.rustig.modal', (e: JQueryEventObject) => {\r\n if (e.ctrlKey && e.which == KeyCode.Enter) {\r\n if (Modal.modalStack.isNotEmpty) {\r\n let performed = Modal.modalStack.peek().performDefault();\r\n if (!performed) {\r\n Modal.close();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n static unhookSubmit(): void {\r\n $(document).off('keyup.performdefault.rustig.modal');\r\n }\r\n\r\n public static initialize: Function = _.once(() => {\r\n if (!Modal.modalStack)\r\n Modal.modalStack = new ModalStack();\r\n\r\n $(document).on('click.dismiss.rustig.modal', '.modal-container [data-dismiss]', function (e) {\r\n e.preventDefault();\r\n Modal.close();\r\n });\r\n\r\n $(document).on('click.dismiss.rustig.modal', '#modalGlobalOverlay', function (e) {\r\n Modal.closeIfCanDismissFromOverlay();\r\n });\r\n });\r\n}\r\n\r\n\r\nclass ModalStack {\r\n modalStack = [];\r\n\r\n get isEmpty(): boolean {\r\n return this.modalStack.length <= 0;\r\n }\r\n get isNotEmpty(): boolean {\r\n return !this.isEmpty;\r\n }\r\n push(modal: Modal) {\r\n this.modalStack.push(modal);\r\n }\r\n pop(): Modal {\r\n return this.modalStack.pop();\r\n }\r\n peek(): Modal {\r\n if (this.isEmpty)\r\n return null;\r\n return this.modalStack[this.modalStack.length - 1];\r\n }\r\n}\r\n\r\n// MODAL INTERFACES\r\nexport interface ModalOptions {\r\n content: any;\r\n $element?: JQuery;\r\n alignment?: string;\r\n onShown?($modal: JQuery): void;\r\n onHidden?($modal: JQuery): void;\r\n}\r\n\r\nexport default Modal;\r\n","\r\nimport $ from 'jquery';\r\nexport class RequestVerificationToken {\r\n private static get selector(): string { return '#page-anti-forgery-token > input[name=\"__RequestVerificationToken\"]'; }\r\n private static get key(): string { return '__RequestVerificationToken'; }\r\n private _value: string;\r\n constructor() {\r\n this._value = $(RequestVerificationToken.selector).val() as string;\r\n }\r\n\r\n public get key() {\r\n return RequestVerificationToken.key;\r\n }\r\n\r\n public get value() {\r\n return this._value;\r\n }\r\n}\r\n\r\nexport default RequestVerificationToken;","import Modal from './modal';\r\nimport $ from 'jquery';\r\n\r\nvar $confirmation: JQuery = null;\r\nvar $content: JQuery = null;\r\nvar $title: JQuery = null;\r\nvar $yesButton: JQuery = null;\r\nvar $noButton: JQuery = null;\r\n\r\nvar yesId: string = 'confirmation-dialog-yes-button';\r\nvar noId: string = 'confirmation-dialog-no-button';\r\n\r\nexport class Confirmation {\r\n static get id(): string {\r\n return 'confirmation-dialog';\r\n }\r\n\r\n static show(options: IConfirmationOptions): void {\r\n new Confirmation(options).open();\r\n }\r\n private DEFAULTS = {\r\n title: 'Confirm',\r\n yesCaption: 'Yes',\r\n noCaption: 'No',\r\n showOnTarget: false,\r\n modalSize: 'modal-md'\r\n }\r\n private options: IConfirmationOptions;\r\n constructor(options: IConfirmationOptions) {\r\n this.options = $.extend({}, this.DEFAULTS, options);\r\n\r\n if (!this.options)\r\n throw new Error('Options are required');\r\n if (!this.options.content)\r\n throw new Error('The option \"content\" is required');\r\n if (!this.options.callback)\r\n throw new Error('The option \"callback\" is required');\r\n if (this.options.showOnTarget && (this.options.$target == null || this.options.$target.length == 0))\r\n throw new Error('A target must be provided for showing a confirmation modal on target');\r\n }\r\n private open(): void {\r\n this.buildTemplate();\r\n this.applyOptionsToContent();\r\n Modal.open({\r\n content: $confirmation,\r\n $element: this.options.$target\r\n });\r\n }\r\n private buildTemplate(): void {\r\n $confirmation = $('
').addClass(`modal ${this.options.modalSize}`).attr('id', Confirmation.id).attr('data-modal-id', 'confirmation-modal');\r\n\r\n var $header = $('
').addClass('modal-header');\r\n $title = $('

').addClass('modal-title');\r\n $header.append($title);\r\n $header.append('

');\r\n\r\n $content = $('
').addClass('modal-content spacer-all');\r\n\r\n var $actions = $('
').addClass('modal-actions');\r\n var $primaryActions = $('
').addClass('modal-primary-actions').appendTo($actions);\r\n $yesButton = $('')\r\n .attr('tabindex', '-1')\r\n .addClass('button button-icon dropdown-button')\r\n .click(this.onButtonClick.bind(this))\r\n .insertAfter(this.$element);\r\n }\r\n }\r\n\r\n private onButtonClick(): boolean {\r\n if (this.$element.isDisabled() || this.$element.isReadonly())\r\n return true;\r\n\r\n if (this.popover.isOpen())\r\n return true;\r\n else {\r\n this.$element.focus();\r\n this.popover.open();\r\n return false;\r\n }\r\n }\r\n\r\n private onEscapePressed() {\r\n this.popover.clear();\r\n this.restoreSuggestionsAndSelection();\r\n }\r\n\r\n private clearSuggestionsAndSelectionCache() {\r\n this.$element.data('selected-index', -1);\r\n this.$element.data('selected-suggestion-items', $());\r\n }\r\n\r\n private cacheSuggestionsAndSelection(selectedIndex: number) {\r\n let $suggestionItems = this.$element.closest('.suggest-search').find('.ss-suggestion');\r\n\r\n this.$element.data('selected-index', selectedIndex);\r\n this.$element.data('selected-suggestion-items', $suggestionItems);\r\n }\r\n\r\n private restoreSuggestionsAndSelection() {\r\n let selectedIndex = this.$element.data('selected-index') as number;\r\n if (selectedIndex < 0)\r\n return;\r\n\r\n let $suggestionItems = this.$element.data('selected-suggestion-items') as JQuery;\r\n let $suggestSearchPopoverContent = this.$element.closest('.suggest-search').find('[data-suggest-search-popover-content]');\r\n\r\n $suggestSearchPopoverContent.html('')\r\n .append($suggestionItems);\r\n let $selected = $suggestionItems.eq(selectedIndex);\r\n this.setValueForInputsInGroup($selected);\r\n\r\n let self = this;\r\n $suggestSearchPopoverContent.find('.ss-suggestion')\r\n .each(function () {\r\n self.wireupMouseClickForSuggestion($(this));\r\n });\r\n }\r\n}\r\n\r\nclass SelectableListPopover {\r\n\r\n private $element: JQuery;\r\n private $popover: JQuery;\r\n private keyboardScrollable: KeyboardScrollable;\r\n private rootClass: string;\r\n private channel: string = 'selectablelist';\r\n private _isOpen: boolean;\r\n private isClearing: boolean;\r\n\r\n public constructor($element: JQuery, rootClass: string) {\r\n this.setElement($element);\r\n this.rootClass = rootClass;\r\n this.createPopover();\r\n }\r\n\r\n private setElement($element: JQuery) {\r\n if (!$element || $element.length != 1)\r\n throw new Error(\"You must provide a single element to Rustig.SelectableListPopover\");\r\n this.$element = $element;\r\n }\r\n\r\n private createPopover(): void {\r\n let id = Math.random().toString();\r\n let $temp = $('
').insertAfter(this.$element);\r\n\r\n this.$popover = $('
');\r\n this.$popover.appendTo($temp);\r\n\r\n this.$element\r\n .popover({\r\n popover: id,\r\n trigger: 'click',\r\n channel: this.channel,\r\n placement: 'bottom',\r\n containerClass: null,\r\n alignment: 'left',\r\n sizing: 'element'\r\n })\r\n .on('shown.rustig.popover.suggestsearch', this.onShown.bind(this))\r\n .on('hidden.rustig.popover.suggestsearch', this.onHidden.bind(this));\r\n }\r\n\r\n private onShown(event: Event, args: any) {\r\n if (!args || args.channel !== this.channel)\r\n return;\r\n\r\n this._isOpen = true;\r\n\r\n let options = this.buildKeyboardScrollableOptions();\r\n if (!this.keyboardScrollable) {\r\n this.keyboardScrollable = new KeyboardScrollable(this.$element, options);\r\n }\r\n else {\r\n this.keyboardScrollable.updateScrollableContainer(options);\r\n }\r\n }\r\n\r\n private buildKeyboardScrollableOptions(): IKeyboardScrollableOptions {\r\n let $globalPopover = $('#popoverGlobalMenu' + 'channel'.asDataSelector(this.channel));\r\n let options: IKeyboardScrollableOptions = { scrollableContainer: $globalPopover.find('[data-suggest-search-popover-content]') };\r\n\r\n let $selected = this.$element.closest('.suggest-search')\r\n .find('.ss-suggestion')\r\n .filter('[data-selected]');\r\n if ($selected.length) {\r\n options.scrollIndex = $selected.index();\r\n this.scrollTo($selected);\r\n }\r\n else\r\n options.scrollIndex = 0;\r\n\r\n return options;\r\n }\r\n\r\n private scrollTo($element: JQuery) {\r\n let $parent = $element.parent();\r\n $parent.scrollTop(\r\n $element.offset().top - $parent.offset().top + $parent.scrollTop()\r\n );\r\n }\r\n\r\n private onHidden(event: Event, args: any) {\r\n if (!args || args.channel !== this.channel)\r\n return;\r\n\r\n this._isOpen = false;\r\n }\r\n\r\n public setOnHide(callback: (popoverIsClearing: boolean) => void): void {\r\n let self = this;\r\n this.$element.on('hide.rustig.popover.suggestsearch', function (event: any, args: any) {\r\n if (!args || args.channel !== self.channel)\r\n return;\r\n\r\n callback(self.isClearing);\r\n });\r\n }\r\n\r\n public setOnHidden(callback: () => void): void {\r\n let self = this;\r\n this.$element.on('hidden.rustig.popover.suggestsearch', function (event: any, args: any) {\r\n if (!args || args.channel !== self.channel)\r\n return;\r\n\r\n callback();\r\n });\r\n }\r\n\r\n public open(): SelectableListPopover {\r\n if (this._isOpen)\r\n return this;\r\n\r\n this.$element.trigger('click.rustig.popover');\r\n return this;\r\n }\r\n\r\n public close(): SelectableListPopover {\r\n if (!this._isOpen)\r\n return this;\r\n\r\n this.$element.popover('close', this.channel);\r\n return this;\r\n }\r\n\r\n public enable(): SelectableListPopover {\r\n this.$element.popover('enable', this.channel);\r\n return this;\r\n }\r\n\r\n public disable(): SelectableListPopover {\r\n this.$element.popover('disable', this.channel);\r\n return this;\r\n }\r\n\r\n public clear(): SelectableListPopover {\r\n this.isClearing = true;\r\n this.$popover.html('');\r\n this.close();\r\n this.isClearing = false;\r\n return this;\r\n }\r\n\r\n public addItem($item: JQuery): SelectableListPopover {\r\n this.$popover.append($item);\r\n return this;\r\n }\r\n\r\n public isOpen(): boolean {\r\n return this._isOpen;\r\n }\r\n\r\n public highlight(searchText: string): SelectableListPopover {\r\n this.$popover.unhighlight();\r\n this.$popover.highlight(searchText);\r\n\r\n return this;\r\n }\r\n\r\n public getSelected(): JQuery {\r\n return this.keyboardScrollable.getSelected();\r\n }\r\n\r\n public setSelected(index: number): SelectableListPopover {\r\n this.$popover.find('[data-selected]').removeAttr('data-selected');\r\n this.$popover.children().eq(index).attr('data-selected', 'true');\r\n return this;\r\n }\r\n}\r\n\r\nfunction Plugin(option) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.suggestsearch');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new SuggestSearch($this, options);\r\n $this.data('rustig.suggestsearch', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option]();\r\n });\r\n}\r\n$.fn.suggestsearch = Plugin;\r\n","import ko from 'knockout';\r\nimport $ from 'jquery';\r\nimport { DateField } from \"../datefield\"\r\nimport { SuggestSearch } from '../suggestsearch';\r\n\r\nexport default class Utility {\r\n public static excludeKeys = ['editorTableInternalId', 'toJSON', 'tableKey', 'emptyObjectBuilder'];\r\n static formatTextIfNumber(value): string {\r\n if ($.isNumeric(value))\r\n return Number(value).toLocaleString('en', { style: 'decimal', currency: 'USD', maximumFractionDigits: 2, minimumFractionDigits: 2 });\r\n else\r\n return value;\r\n }\r\n\r\n static relativeName(name: string): string {\r\n return name.substring(name.lastIndexOf(\".\") + 1, name.length);\r\n }\r\n\r\n static formatMoney(value) {\r\n if (typeof value != \"string\")\r\n return value;\r\n var money = value.replace(\"(\", \"-\").replace(\")\", \"\");\r\n if (value.substring(0, 1) === \"$\")\r\n money = value.substring(1, value.length);\r\n return money;\r\n }\r\n\r\n static guid() {\r\n function s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' +\r\n s4() + '-' + s4() + s4() + s4();\r\n }\r\n static isBlankItem(item): boolean {\r\n var isBlank = true;\r\n Object.keys(item).forEach(k => {\r\n if (this.excludeKeys.indexOf(k) != -1)\r\n return;\r\n var unwrappedValue = ko.utils.unwrapObservable(item[k]);\r\n if (unwrappedValue === 0 || unwrappedValue)\r\n isBlank = false;\r\n });\r\n return isBlank;\r\n }\r\n\r\n static addRow(data, numRowsToAdd, focusOnNewRow) {\r\n if (!numRowsToAdd)\r\n numRowsToAdd = 1;\r\n\r\n var currentRowCount = data.Rows().length;\r\n\r\n for (var i = 0; i < numRowsToAdd; i++) {\r\n var emptyObject = { editorTableInternalId: Utility.guid() };\r\n Object.keys(data.emptyObjectBuilder).forEach((key) => {\r\n var value = data.emptyObjectBuilder[key];\r\n emptyObject[value.name] = value.build(emptyObject);\r\n });\r\n data.Rows.push(emptyObject);\r\n }\r\n setTimeout(() => { //wait for the new DOM row to show up\r\n var $table = $(\"[data-et-key='\" + data.tableKey + \"']\");\r\n\r\n $table.find(\"tbody tr\").each((index, el) => {\r\n if (index < currentRowCount)\r\n return;\r\n var $element: any = $(el);\r\n //todo bzink - remove this hack\r\n $element.find(DateField.wireup).each((i, e) => {\r\n var $el: any = $(e);\r\n $el.datefield();\r\n });\r\n $element.find(SuggestSearch.wireup).each((i, e) => {\r\n var $el: any = $(e);\r\n $el.suggestsearch();\r\n });\r\n $element.find(\":input[type='text'], :input[type='checkbox'], select\").each((i, e) => {\r\n var cellId = $(e).attr(\"id\");\r\n if (cellId) {\r\n cellId = cellId.replace(/_[0-9]+$/, '');\r\n $(e).attr(\"id\", cellId + \"_\" + index);\r\n }\r\n })\r\n });\r\n\r\n if (focusOnNewRow) {\r\n $table.find(\"tbody tr\").eq(currentRowCount)\r\n .find(\":input[type='text'], :input[type='checkbox'], select\").first().focus();\r\n }\r\n }, 200);\r\n }\r\n}\r\n","import $ from 'jquery';\r\nexport interface IBinder {\r\n getElements(parent: JQuery): JQuery;\r\n getBinding(cell: JQuery, rowData: Object): IBinding;\r\n}\r\n\r\nexport interface IExternalElementBinder {\r\n key: string;\r\n compute(tableData: Object): Function;\r\n subscribe: ISubscribeFunction;\r\n extend(): IBehaviorFunction;\r\n}\r\nexport interface IBinding {\r\n bindingName: string;\r\n bindTo: string;\r\n}\r\n\r\nexport interface IValueBinding extends IBinding {\r\n dataName: string;\r\n dataValue: any;\r\n}\r\n\r\nexport interface ICellBinding extends IValueBinding {\r\n //specify how to create this cell for a blank editor table row\r\n createEmptyValue(rowData): any;\r\n}\r\n\r\nexport interface IBehaviorBinding extends IBinding {\r\n createEmptyValue?: Function;\r\n behavior: IBehaviorFunction;\r\n}\r\n\r\nexport interface IBehaviorFunction {\r\n name: string;\r\n build(...args: any[]): void;\r\n}\r\nexport interface ISubscribeFunction {\r\n (value: any): any;\r\n}\r\n\r\nexport class BindingConverter {\r\n static toValueBinding(binding: IBinding): IValueBinding {\r\n var temp: any = binding;\r\n if (!temp.dataName || !temp.dataValue)\r\n return null;\r\n\r\n return {\r\n bindingName: binding.bindingName,\r\n bindTo: binding.bindingName,\r\n dataName: temp.dataName,\r\n dataValue: temp.dataValue\r\n };\r\n }\r\n\r\n static toCellBinding(binding: IBinding): ICellBinding {\r\n var temp: any = binding;\r\n var valueBinding = this.toValueBinding(temp);\r\n if (valueBinding == null || !temp.createEmptyValue)\r\n return null;\r\n\r\n return {\r\n bindingName: binding.bindingName,\r\n bindTo: binding.bindingName,\r\n dataName: temp.dataName,\r\n dataValue: temp.dataValue,\r\n createEmptyValue: temp.createEmptyValue\r\n };\r\n }\r\n\r\n static toBehaviorBinding(binding: IBinding): IBehaviorBinding {\r\n var temp: any = binding;\r\n\r\n return {\r\n bindingName: binding.bindingName,\r\n bindTo: binding.bindTo,\r\n behavior: temp.behavior\r\n };\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport $ from 'jquery'\r\nimport { ITemplateRow } from \"./templaterowfactory\";\r\n\r\nexport class TemplateRow implements ITemplateRow {\r\n public $row: JQuery;\r\n constructor(private $table: JQuery) {\r\n this.$row = this.getRow();\r\n }\r\n public static wireup: string = \"[data-et-template]\";\r\n\r\n public static canBuild($table): boolean {\r\n var templateRow = $table.find(\"[data-et-template]\");\r\n if (templateRow.length > 0)\r\n return true;\r\n return false;\r\n }\r\n\r\n getRow(): JQuery {\r\n var templateRow = this.$table.find(\"[data-et-template]\");\r\n if (templateRow.length != 0) {\r\n this.$row = templateRow;\r\n return this.$row;\r\n }\r\n return null;\r\n }\r\n\r\n public init(): boolean {\r\n if (this.$row.length == 0)\r\n return false;\r\n this.$row.attr(\"data-template\", \"true\")\r\n .removeAttr(\"data-init\")\r\n .removeAttr(\"data-et-template\");\r\n this.$row.find(\"td input\").each(function () {\r\n var input = $(this);\r\n var binder = input.attr('data-bind');\r\n if (binder)\r\n input.attr(\"data-bind\", input.attr(\"data-bind\").replace(\"init, \", \"\"));\r\n });\r\n return true;\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport $ from 'jquery';\r\nimport {ITemplateRow} from \"./templaterowfactory\"\r\n\r\nexport class CloneRow implements ITemplateRow {\r\n public $row: JQuery;\r\n constructor(private $table: JQuery) {\r\n this.$row = this.getRow();\r\n }\r\n\r\n getRow(): JQuery {\r\n var rowToClone = this.$table.find(\"tbody tr.et-cloneable-row\").eq(0);\r\n if (rowToClone.length == 0)\r\n rowToClone = this.$table.find(\"tbody tr\").eq(0);\r\n var cloneRow = rowToClone.clone();\r\n this.$table.find(\"tbody\").append(cloneRow);\r\n this.$row = this.$table.find(\"tbody tr\").last();\r\n return this.$row;\r\n }\r\n\r\n public init(): void {\r\n //create a blank row to use for adding Rows \r\n var cloneRow = this.$row;\r\n cloneRow.attr(\"data-template\", \"true\");\r\n cloneRow.find(\"td input, td select\").each(function () {\r\n var input = $(this);\r\n var binder = input.attr('data-bind');\r\n if (binder)\r\n input.attr(\"data-bind\", input.attr(\"data-bind\").replace(\"init, \", \"\"));\r\n input.val(\"\");\r\n });\r\n cloneRow.find(\"td\").contents().filter(function () {\r\n return (this.nodeType == 3 /*text*/);\r\n }).remove();\r\n\r\n this.$table.append(cloneRow);\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport { TemplateRow } from \"./templaterow\";\r\nimport { CloneRow } from \"./clonerow\"\r\n\r\nexport interface ITemplateRow {\r\n $row: JQuery;\r\n init(): void;\r\n}\r\n\r\nexport class TemplateRowFactory {\r\n public static create($table: JQuery): ITemplateRow {\r\n if (TemplateRow.canBuild($table))\r\n return new TemplateRow($table);\r\n\r\n return new CloneRow($table);\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport $ from 'jquery'\r\n\r\nexport default class NullableTextObservable {\r\n constructor(initialValue?: any) {\r\n var rawValue = ko.observable(initialValue);\r\n var formatted = ko.computed({\r\n read: () => {\r\n var v = rawValue();\r\n if (v)\r\n return \"\" + v;\r\n return null;\r\n },\r\n write: (val) => {\r\n rawValue(val || null);\r\n }\r\n });\r\n return formatted;\r\n }\r\n}\r\n\r\n","import { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\nimport NullableTextObservable from \"../observables/nullabletextobservable\";\r\nimport ko from 'knockout';\r\nimport $ from 'jquery';\r\n\r\n\r\nexport class DateInputBinder implements IBinder {\r\n public getElements(row: JQuery): JQuery {\r\n return row.find(\"[data-datefield]\");\r\n }\r\n\r\n public getBinding(cell: JQuery): ICellBinding {\r\n var cellName = cell.attr(\"name\");\r\n\r\n return {\r\n dataName: cellName,\r\n dataValue: new NullableTextObservable(cell.val()),\r\n bindingName: \"init, rustigDate\",\r\n bindTo: cellName,\r\n createEmptyValue: () => new NullableTextObservable()\r\n }\r\n }\r\n}\r\n\r\n\r\nko.bindingHandlers.rustigDate = {\r\n init: (el, valueAccessor, bindingsAccessor, viewModel) => {\r\n var $el: any = $(el),\r\n value = valueAccessor();\r\n\r\n /*\r\n * bind directly to bootstrap-datepicker change event.\r\n * bootstrap-datepicker suppresses this event if the the date field is edited but the value is unchanged\r\n * this causes a bug where the knockout viewmodel object receives an incorrect value rather than the final auto-completed value.\r\n */\r\n $el.on('dp.change', (e) => {\r\n value($el.val());\r\n });\r\n }\r\n};\r\n","import { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\nimport NullableTextObservable from \"../observables/nullabletextobservable\"\r\nimport ko from 'knockout'\r\nimport $ from 'jquery';\r\n\r\nexport class SelectBinder implements IBinder {\r\n public getElements(row: JQuery): JQuery {\r\n return row.find(\"select\");\r\n }\r\n\r\n public getBinding(cell: JQuery): ICellBinding {\r\n var selectName = cell.attr(\"name\");\r\n\r\n return {\r\n dataName: selectName,\r\n dataValue: new NullableTextObservable(cell.val()),\r\n bindingName: \"init, value\",\r\n bindTo: selectName,\r\n createEmptyValue: () => {\r\n return new NullableTextObservable();\r\n }\r\n }\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport $ from 'jquery'\r\n\r\ndeclare global {\r\n interface KnockoutStatic {\r\n dependentObservable: any;\r\n }\r\n}\r\n\r\nexport default class NullableNumericObservable {\r\n constructor(initialValue?: any) {\r\n var rawValue = ko.observable(initialValue);\r\n var formatted = ko.dependentObservable({\r\n read: () => {\r\n var v = rawValue();\r\n if ((isNaN(v) || !v) && v !== 0)\r\n return null;\r\n return \"\" + v;\r\n },\r\n write: (val) => {\r\n if ((isNaN(val) || !val) && val !== 0)\r\n rawValue(null);\r\n else rawValue(val);\r\n }\r\n });\r\n return formatted;\r\n }\r\n}\r\n","import { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\nimport NullableNumericObservable from \"../observables/nullablenumericobservable\";\r\nimport ko from 'knockout';\r\nimport $ from 'jquery';\r\n\r\nexport class NumericInputBinder implements IBinder {\r\n public getElements(row: JQuery): JQuery {\r\n return row.find(\"input.number-field\");\r\n }\r\n public getBinding(cell: JQuery): ICellBinding {\r\n var cellName = cell.attr(\"name\");\r\n return {\r\n dataName: cellName,\r\n dataValue: new NullableNumericObservable(cell.val()),\r\n bindingName: \"init, autoNumeric\",\r\n bindTo: cellName,\r\n createEmptyValue: () => new NullableNumericObservable(),\r\n }\r\n }\r\n}\r\n\r\nko.bindingHandlers.autoNumeric = {\r\n init: (el, valueAccessor, bindingsAccessor, viewModel) => {\r\n var $el: any = $(el),\r\n pF: any = parseFloat,\r\n settings = { aSign: '', vMin: '-999999999', mDec: 0 },\r\n value = valueAccessor();\r\n $el.autoNumeric(settings);\r\n\r\n var numericValue = pF(ko.utils.unwrapObservable(value()), 10);\r\n if ((isNaN(numericValue) || !numericValue) && numericValue !== 0)\r\n numericValue = null;\r\n\r\n $el.autoNumeric('set', numericValue);\r\n $el.change(function () {\r\n value(pF($el.autoNumeric('get'), 10));\r\n });\r\n },\r\n update: (el, valueAccessor, bindingsAccessor, viewModel) => {\r\n var $el: any = $(el),\r\n unwrapped = ko.utils.unwrapObservable(valueAccessor());\r\n\r\n var newValue = ((isNaN(unwrapped) || !unwrapped) && unwrapped !== 0) ? null : unwrapped;\r\n\r\n var elementValue = $el.autoNumeric('get', 10),\r\n valueHasChanged = (newValue != elementValue);\r\n if (valueHasChanged) {\r\n $el.autoNumeric('set', newValue);\r\n }\r\n }\r\n};\r\n","import ko from 'knockout'\r\nimport Utility from \"../utility\"\r\n\r\n\r\nexport default class NullableMoneyObservable {\r\n constructor(initialValue?: any) {\r\n var rawValue = ko.observable(initialValue);\r\n var formatted = ko.computed({\r\n read: () => {\r\n var v = Utility.formatMoney(rawValue());\r\n if ((isNaN(v) || !v) && v !== 0)\r\n return null;\r\n return v;\r\n },\r\n write: (val) => {\r\n if (typeof val == \"string\") {\r\n var formattedValue = Utility.formatMoney(rawValue());\r\n rawValue(formattedValue);\r\n }\r\n else\r\n rawValue(val);\r\n }\r\n });\r\n return formatted;\r\n }\r\n}\r\n","import { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\nimport NullableMoneyObservable from \"../observables/nullablemoneyobservable\";\r\nimport Utility from \"../utility\"\r\nimport ko from 'knockout';\r\nimport $ from 'jquery';\r\n\r\n\r\nexport class MoneyInputBinder implements IBinder {\r\n public getElements(row: JQuery): JQuery {\r\n return row.find(\"input[type='text'].money-field\");\r\n }\r\n\r\n public getBinding(cell: JQuery): ICellBinding {\r\n var cellName = cell.attr(\"name\");\r\n\r\n return {\r\n dataName: cellName,\r\n dataValue: new NullableMoneyObservable(cell.val()),\r\n bindingName: \"init, autoMoney\",\r\n bindTo: cellName,\r\n createEmptyValue: () => new NullableMoneyObservable()\r\n }\r\n }\r\n}\r\n\r\n\r\nko.bindingHandlers.autoMoney = {\r\n init: (el, valueAccessor, bindingsAccessor, viewModel) => {\r\n var pF: any = parseFloat;\r\n var $el: any = $(el),\r\n settings = { aSign: '', vMin: '-999999999.99' },\r\n value = valueAccessor();\r\n $el.autoNumeric(settings);\r\n\r\n var numericValue = pF(ko.utils.unwrapObservable(value()), 10);\r\n if ((isNaN(numericValue) || !numericValue) && numericValue !== 0)\r\n numericValue = null;\r\n else\r\n numericValue = Utility.formatMoney(numericValue);\r\n\r\n $el.autoNumeric('set', numericValue);\r\n $el.change(() => {\r\n value(pF($el.autoNumeric('get'), 10));\r\n });\r\n },\r\n update: (el, valueAccessor, bindingsAccessor, viewModel) => {\r\n var $el: any = $(el),\r\n unwrapped = ko.utils.unwrapObservable(valueAccessor());\r\n\r\n var newValue = ((isNaN(unwrapped) || !unwrapped) && unwrapped !== 0) ? null\r\n : Utility.formatMoney(unwrapped);\r\n\r\n var elementValue = $el.autoNumeric('get'),\r\n valueHasChanged = (newValue != elementValue);\r\n\r\n if (valueHasChanged) {\r\n $el.autoNumeric('set', newValue);\r\n }\r\n },\r\n};\r\n","import { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\nimport NullableTextObservable from \"../observables/nullabletextobservable\" \r\nimport ko from 'knockout';\r\nimport $ from 'jquery';\r\n\r\nexport class TextInputBinder implements IBinder {\r\n public getElements(parent: JQuery): JQuery {\r\n return parent.find(\":input[type='text']\");\r\n }\r\n\r\n public getBinding(element: JQuery): ICellBinding {\r\n var inputName = element.attr(\"name\");\r\n\r\n return {\r\n dataName: inputName,\r\n dataValue: new NullableTextObservable(element.val()),\r\n bindingName: \"init, valueUpdate: 'change.rustig', value\",\r\n bindTo: inputName,\r\n createEmptyValue: () => {\r\n return new NullableTextObservable();\r\n }\r\n }\r\n }\r\n}","import $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\n\r\nexport class HiddenInputBinder implements IBinder {\r\n public getElements(row: JQuery): JQuery {\r\n var hiddenInputs = row.find(\":input[type='hidden']:not([data-et-json])\").filter(function () {\r\n var name = $(this).attr(\"name\");\r\n var siblings = $(this).siblings(\"input[type='checkbox'][name='\" + name + \"']\");\r\n if (siblings.length > 0)\r\n return false;\r\n return true;\r\n });\r\n return hiddenInputs;\r\n\r\n }\r\n public getBinding(cell: JQuery): ICellBinding {\r\n var cellName = cell.attr(\"name\");\r\n var value = cell.val();\r\n\r\n return {\r\n dataName: cellName,\r\n dataValue: ko.observable(value),\r\n bindingName: \"init, value\",\r\n bindTo: cellName,\r\n createEmptyValue: () => ko.observable()\r\n\r\n };\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport $ from 'jquery';\r\nimport { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\n\r\nexport class CheckboxInputBinder implements IBinder {\r\n public getElements(row: JQuery): JQuery {\r\n return row.find(\":input[type='checkbox']\");\r\n }\r\n\r\n public getBinding(cell: JQuery): ICellBinding {\r\n var bindingName = \"init, checked\";\r\n var cellName = cell.attr(\"name\");\r\n\r\n return {\r\n dataName: cellName,\r\n dataValue: ko.observable(cell.is(\":checked\")),\r\n bindingName: bindingName,\r\n bindTo: cellName,\r\n createEmptyValue: () => ko.observable()\r\n }\r\n }\r\n}\r\n","import { IBinder, IValueBinding, ICellBinding } from \"./ibinder\"\r\nimport $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport Utility from \"../utility\"\r\n\r\nexport class ColumnTotalBinder implements IBinder {\r\n public getElements(root: JQuery): JQuery {\r\n return root.find(\"tfoot tr td[data-et-total]\");\r\n }\r\n\r\n public getBinding(element: JQuery, data): IValueBinding {\r\n var columnNumber: any = element.attr(\"data-et-total\");\r\n var cellName = \"ColumnTotal\" + columnNumber;\r\n var targetCell = element.parents(\"table\").find(\"tbody tr\").eq(0).find(\"td\").eq(columnNumber);\r\n var valueName = \"\";\r\n if (targetCell.data(\"et-expression-key\"))\r\n valueName = targetCell.data(\"et-expression-key\");\r\n else\r\n throw new Error(\"Not yet implemented: other methods for determining valueName\");\r\n\r\n var compute = (d) => ko.computed({\r\n read: () => {\r\n var total = 0;\r\n for (var i = 0, len = d.Rows().length; i < len; i++) {\r\n total += parseFloat(d.Rows()[i][valueName]().replace(',', ''));\r\n }\r\n return Utility.formatTextIfNumber(total);\r\n }\r\n }, d);\r\n\r\n return {\r\n bindingName: \"text\",\r\n bindTo: cellName,\r\n dataName: cellName,\r\n dataValue: compute(data)\r\n }\r\n }\r\n}","import { IBinder, IValueBinding} from \"./ibinder\"\r\nimport ko from 'knockout';\r\nimport $ from 'jquery';\r\n\r\nexport class RowCountBinder implements IBinder {\r\n public getElements(root: JQuery): JQuery {\r\n return root.find(\".et-row-count\");\r\n }\r\n\r\n public getBinding(element: JQuery, data): IValueBinding {\r\n var compute = (d) => ko.computed({\r\n read: () => {\r\n return d.Rows().length;\r\n }\r\n }, d);\r\n\r\n return {\r\n bindingName: \"text\",\r\n bindTo: \"RowCount\",\r\n dataName: \"RowCount\",\r\n dataValue: compute(data)\r\n }\r\n }\r\n}\r\n","import { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\nimport ko from 'knockout';\r\nimport $ from 'jquery';\r\nimport Utility from \"../utility\";\r\n\r\nexport class ExpressionBinder implements IBinder {\r\n public getElements(row: JQuery): JQuery {\r\n return row.find(\"[data-et-expression]\");\r\n }\r\n\r\n public getBinding(cell: JQuery, rowData: Object): ICellBinding {\r\n var cellName = cell.attr(\"data-et-expression-key\");\r\n if (cellName == null)\r\n throw new Error(\"compute binding must have a [data-et-expression-key] attribute\");\r\n\r\n var compute = (rd) => ko.computed({\r\n read: function(){\r\n var data = ExpressionBinder.rewriteComputeExpression(cell.data(\"et-expression\"));\r\n var compute = new Function('row', 'return ' + data);\r\n return Utility.formatTextIfNumber(compute(this)) || \"\";\r\n }\r\n }, rd);\r\n\r\n return {\r\n dataName: cellName,\r\n dataValue: compute(rowData),\r\n bindingName: \"text\",\r\n bindTo: cellName,\r\n createEmptyValue: (rd) => compute(rd)\r\n }\r\n }\r\n\r\n static rewriteComputeExpression(expression: string) {\r\n //[row.Units] * [row.Price] => this.Units() * this.Price()\r\n var re = [];\r\n var propertyName = [];\r\n var bracketsOpen = false;\r\n for (var i = 0, len = expression.length; i < len; i++) {\r\n if (expression[i] === \"[\") {\r\n bracketsOpen = true;\r\n re.push(\"[\");\r\n }\r\n else if (expression[i] === \"]\") {\r\n bracketsOpen = false;\r\n re.push(Utility.relativeName(propertyName.join(\"\")));\r\n propertyName = [];\r\n re.push(\"]\");\r\n }\r\n else if (bracketsOpen)\r\n propertyName.push(expression[i]);\r\n else\r\n re.push(expression[i]);\r\n }\r\n\r\n return re.join(\"\").replace(/\\[/g, \"row.\").replace(/\\]/g, \"()\");\r\n }\r\n}","import $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\n\r\n export class EnterKeyBinder implements IBinder {\r\n public getElements(row: JQuery): JQuery {\r\n if (row.parents(\"tbody\").length == 0)\r\n return $();\r\n return row.find(EnterKeyBinder.inputSelector);\r\n }\r\n\r\n public getBinding(element: JQuery): IBehaviorBinding {\r\n return {\r\n bindingName: \"event\",\r\n bindTo: \"{keyup : $parent.enterKey}\",\r\n createEmptyValue: () => null,\r\n behavior: {\r\n name: \"enterKey\",\r\n build: data => (item, event) => {\r\n var cell = $(event.currentTarget).parents(\".et-field\");\r\n var row = cell.parents(\"tr\");\r\n var rowIndex = row.parent().children(\"tr\").index(row);\r\n\r\n if (event.keyCode == EnterKeyBinder.enterKey) {\r\n if (!event.shiftKey)\r\n EnterKeyBinder.moveTo(cell, rowIndex + 1);\r\n else if (rowIndex != 0)\r\n EnterKeyBinder.moveTo(cell, rowIndex - 1);\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n private static highlightSelection(element: JQuery) {\r\n var e: any = element[0];\r\n if (e != undefined && \"selectionStart\" in e) {\r\n try {\r\n let val = element.val() as string;\r\n e.selectionStart = 0;\r\n e.selectionEnd = val.length;\r\n }\r\n catch (er) { }\r\n }\r\n }\r\n\r\n private static moveTo(currentCell: JQuery, rowIndex: number) {\r\n var cell = $(event.currentTarget).parents(\".et-field\");\r\n var row = cell.parents(\"tr\");\r\n var tbody = row.parents(\"tbody\");\r\n var columnIndex = row.children(\"td\").index(cell);\r\n var element = tbody.find(\"tr\").eq(rowIndex).find(\"td\").eq(columnIndex).find(EnterKeyBinder.inputSelector);\r\n element.focus();\r\n EnterKeyBinder.highlightSelection(element);\r\n }\r\n\r\n private static inputSelector = \"input:not(\\\"[type='hidden']\\\")\";\r\n private static enterKey = 13;\r\n }\r\n","import ko from 'knockout'\r\nimport { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\nimport Utility from \"../utility\"\r\nimport $ from 'jquery';\r\n\r\nexport class RemoveRowBinder implements IBinder {\r\n public getElements(root: JQuery): JQuery {\r\n return root.find(\".et-remove-row\");\r\n }\r\n\r\n public getBinding(element: JQuery): IBehaviorBinding {\r\n return {\r\n bindingName: \"click\",\r\n bindTo: \"$parent.removeRow\",\r\n createEmptyValue: () => null,\r\n behavior: {\r\n name: \"removeRow\",\r\n build: data => (item) => {\r\n if (!Utility.isBlankItem(item)) {\r\n if (!data.RemovedRows)\r\n data.RemovedRows = ko.observableArray();\r\n data.RemovedRows.push(item);\r\n }\r\n data.Rows.remove(item);\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\";\r\nimport Utility from \"../utility\";\r\nimport { Remote } from \"../../remote/remote\";\r\nimport $ from 'jquery';\r\nimport ko from 'knockout';\r\n\r\nexport class RemoteOnChangeBinder implements IBinder {\r\n public getElements(root: JQuery): JQuery {\r\n return root.find(\":input[data-url]\");\r\n }\r\n\r\n public getBinding(element: JQuery): IBehaviorBinding {\r\n return {\r\n bindingName: \"event\",\r\n bindTo: \"{change: $parent.remote}\",\r\n createEmptyValue: () => null,\r\n behavior: {\r\n name: \"remote\",\r\n build: data => (item, event) => {\r\n var $el = $(event.currentTarget);\r\n var remoteKeys = $el.attr(\"data-et-remote-keys\");\r\n if (remoteKeys) {\r\n var dataKeysToSend = remoteKeys.split(\",\");\r\n var dataToSend = {};\r\n dataKeysToSend.forEach(key => {\r\n var _key = key.trim();\r\n var name = Utility.relativeName(_key);\r\n dataToSend[name] = ko.utils.unwrapObservable(item[name]);\r\n });\r\n\r\n $el.data(\"et-additional-values\", dataToSend);\r\n }\r\n $el.remote();\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\nimport Utility from \"../utility\"\r\n\r\nexport class AutoGrowBinder implements IBinder {\r\n public getElements(root: JQuery): JQuery {\r\n return root.find(\"[data-et-auto-grow='true']\");\r\n }\r\n\r\n public getBinding(element: JQuery): IBehaviorBinding {\r\n return {\r\n bindingName: \"event\",\r\n bindTo: \"{focus : $parent.autoGrow}\",\r\n createEmptyValue: () => null,\r\n behavior: {\r\n name: \"autoGrow\",\r\n build: data => (item, event) => {\r\n var isLastRow = $(event.currentTarget).parents(\"tr\").is(\":last-child\");\r\n if (!isLastRow)\r\n return true;\r\n var lastItem = data.Rows()[data.Rows().length - 1];\r\n if (Utility.isBlankItem(lastItem))\r\n return true;\r\n\r\n Utility.addRow(data, 1, false);\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n}","import $ from 'jquery';\r\nimport { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\nimport Utility from \"../utility\"\r\n\r\n export class AddRowBinder implements IBinder {\r\n public getElements(root: JQuery): JQuery {\r\n return root.find(\"[class*='et-add-row']\");\r\n }\r\n\r\n public getBinding(element: JQuery): IBehaviorBinding {\r\n var addRowClass = element.attr(\"class\").split(\" \").filter((v: any) => {\r\n if (v.indexOf('et-add-row') !== -1)\r\n return true;\r\n else\r\n return false;\r\n })[0];\r\n\r\n var numRowsToAdd = \"1\";\r\n if (addRowClass != 'et-add-row')\r\n numRowsToAdd = addRowClass.match(/et-add-row-(\\d*)/)[1]; //et-add-row-1 ... et-add-row-5 ... et-add-row\r\n\r\n var bindTo = \"addRow.bind($data, \" + numRowsToAdd + \")\";\r\n\r\n return {\r\n bindingName: \"click\",\r\n bindTo: bindTo,\r\n behavior: {\r\n name: \"addRow\",\r\n build: data => (num, data, event) => {\r\n event.preventDefault();\r\n Utility.addRow(data, num, true);\r\n return true;\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n","import $ from 'jquery';\r\nimport { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\";\r\n\r\nexport class CheckAllBinder implements IBinder {\r\n public getElements(root: JQuery): JQuery {\r\n return root.find(\"th input[type='checkbox']\");\r\n }\r\n\r\n public getBinding(element: JQuery): IBehaviorBinding {\r\n var bindTo = \"checkAll.bind($data)\";\r\n\r\n return {\r\n bindingName: \"click\",\r\n bindTo: bindTo,\r\n behavior: {\r\n name: \"checkAll\",\r\n build: data => (data, event) => {\r\n var checkbox = $(event.currentTarget);\r\n var isChecked = checkbox.is(\":checked\");\r\n var table = $('table[data-et-key=\"' + data.tableKey + '\"]');\r\n var checkboxIndex = table.find(\"thead th\").index(checkbox.parent(\"th\"));\r\n\r\n var firstRow = table.find(\"tbody tr\").eq(0);\r\n var column = firstRow.find(\"td\").eq(checkboxIndex);\r\n var valueName = column.find(\"input[type='checkbox']\").attr(\"name\").split(\".\")[1];\r\n\r\n data.Rows().forEach(v => {\r\n v[valueName].call(this, isChecked);\r\n });\r\n\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport { IBinder, IBehaviorBinding, ICellBinding } from \"./ibinder\"\r\n\r\nexport class ForEachBinder implements IBinder {\r\n public getElements(root: JQuery): JQuery {\r\n return root.find(\"tbody\");\r\n }\r\n\r\n public getBinding(element: JQuery): IBehaviorBinding {\r\n\r\n return {\r\n bindingName: \"foreachInit\",\r\n bindTo: \"Rows\",\r\n behavior: null\r\n }\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport $ from 'jquery';\r\nimport { IBinder, IBehaviorBinding } from \"./ibinder\"\r\nimport { JsonBuilder } from \"../jsonbuilder\";\r\n\r\nexport class ToJSONBinder implements IBinder {\r\n public getElements(root: JQuery): JQuery {\r\n if (root.is(\"table\"))\r\n return root;\r\n return root.find(\"table\");\r\n }\r\n\r\n public getBinding(element: JQuery): IBehaviorBinding {\r\n\r\n return {\r\n bindingName: \"attr\",\r\n bindTo: \"{'data-et-data' : JsonBuilder.toJSON($data)}\",\r\n behavior: null\r\n }\r\n }\r\n}\r\n","import ko from 'knockout'\r\nimport $ from 'jquery';\r\nimport Utility from \"./utility\"\r\n\r\nexport class JsonBuilder {\r\n public static toJSON(data: any): string {\r\n var pojo = ko.toJS(data);\r\n pojo.Rows = JsonBuilder.deleteEmptyArrayItems(pojo.Rows);\r\n JsonBuilder.setExcludeKeys(pojo);\r\n return JSON.stringify(pojo);\r\n }\r\n\r\n private static setExcludeKeys(obj) {\r\n if (obj && !Array.isArray(obj))\r\n obj.toJSON = () => JsonBuilder.toJsonFunc(obj);\r\n for (var o in obj) {\r\n if (obj.hasOwnProperty(o)) {\r\n if (typeof obj[o] != \"object\")\r\n continue;\r\n JsonBuilder.setExcludeKeys(obj[o]);\r\n }\r\n }\r\n }\r\n\r\n private static toJsonFunc = (obj) => {\r\n var rewrite = {};\r\n Object.keys(obj).forEach(key => {\r\n if (Utility.excludeKeys.indexOf(key) === -1)\r\n rewrite[key] = obj[key];\r\n });\r\n return rewrite;\r\n }\r\n\r\n private static deleteEmptyArrayItems(arr: Array) {\r\n var cleanedArr = [];\r\n for (var i = 0; i < arr.length; i++) {\r\n if (!Utility.isBlankItem(arr[i]))\r\n cleanedArr.push(arr[i]);\r\n }\r\n return cleanedArr;\r\n }\r\n}\r\n\r\n","import $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport { IBinder, IExternalElementBinder, ICellBinding, ISubscribeFunction, IBehaviorFunction } from \"./ibinder\"\r\nimport { JsonBuilder } from \"../jsonbuilder\";\r\n\r\nexport class ExternalJsonBinder implements IExternalElementBinder {\r\n key: string = \"ExternalJson\";\r\n constructor(private tableKey: string) { }\r\n\r\n getElements(): JQuery {\r\n return $(\"[data-et-json='\" + this.tableKey + \"']\");\r\n }\r\n\r\n public compute(tableData): Function {\r\n return ko.computed(() => {\r\n return JsonBuilder.toJSON(tableData);\r\n });\r\n }\r\n\r\n public subscribe: ISubscribeFunction = (value) => {\r\n var $elements = this.getElements();\r\n $elements.each(function () {\r\n $(this).val(value);\r\n });\r\n }\r\n\r\n public extend(): IBehaviorFunction {\r\n return null;\r\n }\r\n}\r\n","import $ from 'jquery'\r\nimport ko from 'knockout';\r\nimport { IBinder, IBehaviorBinding, ICellBinding , IExternalElementBinder, ISubscribeFunction, IBehaviorFunction} from \"./ibinder\"\r\nimport { JsonBuilder } from \"../jsonbuilder\"\r\n\r\nexport class ExternalTrackChangesHideBinder implements IExternalElementBinder {\r\n key: string = \"ExternalTrackChanges\";\r\n initialTableData: string;\r\n $table: JQuery\r\n\r\n constructor(private tableKey: string) {\r\n this.$table = $(\"[data-et-key='\" + this.tableKey + \"']\");\r\n }\r\n\r\n getElements(): JQuery {\r\n return $(\"[data-et-track-changes='\" + this.tableKey + \"']\");\r\n }\r\n\r\n initialized(): boolean {\r\n if (this.$table.data(\"rustig.editortable\"))\r\n return true;\r\n return false;\r\n }\r\n\r\n public compute(tableData): Function {\r\n if (!this.initialTableData)\r\n this.initialTableData = JsonBuilder.toJSON(tableData);\r\n return ko.computed(() => {\r\n return JsonBuilder.toJSON(tableData);\r\n });\r\n }\r\n\r\n public subscribe: ISubscribeFunction = (value) => {\r\n var $elements = this.getElements();\r\n var isDirty = this.initialized() && value != this.initialTableData;\r\n\r\n $elements.each(function () {\r\n if (isDirty)\r\n $(this).slideDown(100);\r\n else\r\n $(this).slideUp(100);\r\n });\r\n\r\n }\r\n public extend(): IBehaviorFunction {\r\n return null;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport { IBinder, IBehaviorBinding, ICellBinding, IExternalElementBinder, IBehaviorFunction, ISubscribeFunction} from \"./ibinder\"\r\nimport { JsonBuilder } from \"../jsonbuilder\";\r\n\r\n export class ExternalNavigationWarning implements IExternalElementBinder {\r\n key: string = \"ExternalAreYouSure\";\r\n beforUnloadEvent = \"beforeunload.et-areyousure\";\r\n initialTableData: string;\r\n isBound: boolean;\r\n $table: JQuery;\r\n\r\n constructor(private tableKey: string) {\r\n this.$table = $(\"[data-et-key='\" + this.tableKey + \"']\");\r\n }\r\n\r\n initialized(): boolean {\r\n if (this.$table.data(\"rustig.editortable\"))\r\n return true;\r\n return false;\r\n }\r\n\r\n public compute(tableData): Function {\r\n if (!this.initialTableData)\r\n this.initialTableData = JsonBuilder.toJSON(tableData);\r\n return ko.computed(() => {\r\n return JsonBuilder.toJSON(tableData);\r\n });\r\n }\r\n\r\n public subscribe: ISubscribeFunction = (value) => {\r\n if (this.$table.is(\"[data-et-notrack]\"))\r\n return;\r\n var isDirty = this.initialized() && value != this.initialTableData;\r\n if (isDirty && !this.isBound) {\r\n $(window).on(this.beforUnloadEvent, () => \"There are unsaved changes\");\r\n this.isBound = true;\r\n }\r\n if (!isDirty && this.isBound) {\r\n $(window).off(this.beforUnloadEvent);\r\n this.isBound = false;\r\n }\r\n }\r\n public extend(): IBehaviorFunction {\r\n return null;\r\n }\r\n }","import ko from \"knockout\";\r\nimport $ from 'jquery';\r\nimport Utility from \"./utility\";\r\nimport { IBinder, IBehaviorBinding, ICellBinding, IExternalElementBinder, BindingConverter } from \"./binders/ibinder\"\r\nimport { TemplateRowFactory, ITemplateRow } from \"./templaterowfactory\"\r\nimport { DateInputBinder } from \"./binders/dateinputbinder\";\r\nimport { SelectBinder } from \"./binders/selectbinder\";\r\nimport { NumericInputBinder } from \"./binders/numericinputbinder\";\r\nimport { MoneyInputBinder } from \"./binders/moneyinputbinder\";\r\nimport { TextInputBinder } from \"./binders/textinputbinder\";\r\nimport { HiddenInputBinder } from \"./binders/hiddeninputbinder\";\r\nimport { CheckboxInputBinder } from \"./binders/checkboxinputbinder\";\r\nimport { ColumnTotalBinder } from \"./binders/columntotalbinder\";\r\nimport { RowCountBinder } from \"./binders/rowcountbinder\";\r\nimport { ExpressionBinder } from \"./binders/expressionbinder\";\r\nimport { EnterKeyBinder } from \"./binders/enterkeybinder\"\r\nimport { RemoveRowBinder } from \"./binders/removerowbinder\"\r\nimport { RemoteOnChangeBinder } from \"./binders/remoteonchangebinder\"\r\nimport { AutoGrowBinder } from \"./binders/autogrowbinder\"\r\nimport { AddRowBinder } from \"./binders/addrowbinder\"\r\nimport { CheckAllBinder } from \"./binders/checkallbinder\"\r\nimport { ForEachBinder } from \"./binders/foreachbinder\"\r\nimport { ToJSONBinder } from \"./binders/tojsonbinder\"\r\nimport { ExternalJsonBinder } from \"./binders/externaljsonbinder\"\r\nimport { ExternalTrackChangesHideBinder } from \"./binders/externaltrackchangeshidebinder\"\r\nimport { ExternalNavigationWarning } from \"./binders/externalnavigationwarningbinder\"\r\n\r\ndeclare global {\r\n interface JQuery {\r\n editortable(): EditorTable;\r\n }\r\n}\r\n\r\nexport class EditorTable {\r\n\r\n static get wireup(): string {\r\n return '.editortable';\r\n }\r\n static isEditorTable($element: JQuery): boolean {\r\n return $element.is(this.wireup);\r\n }\r\n\r\n tableKey: string;\r\n tableData: any = ko.observable({\r\n Rows: ko.observableArray()\r\n });\r\n computedTableData: any;\r\n private $table: JQuery;\r\n private valueBinders = new Array();\r\n private behaviorBinders = new Array();\r\n private externalBinders = new Array();\r\n private templateRow: ITemplateRow;\r\n private emptyObjectBuilder: Object;\r\n\r\n constructor(private $root: JQuery) {\r\n if ($root.is(\"table\"))\r\n this.$table = $root;\r\n else\r\n this.$table = $root.find(\"table\").first();\r\n\r\n if (this.$table.closest(\".editortable\").length == 0)\r\n this.$table.addClass('editortable');\r\n\r\n this.tableKey = this.$table.attr('data-et-key');\r\n if (!this.tableKey)\r\n throw new Error(\"your editor table must have a data-et-key attribute to identify it\");\r\n\r\n this.registerBinders();\r\n this.initialize();\r\n }\r\n\r\n private initialize(): void {\r\n var data = { tableKey: this.tableKey };\r\n this.templateRow = TemplateRowFactory.create(this.$table);\r\n this.bindRows(data);\r\n this.bindRootValues(data);\r\n this.bindRootBehavior(data);\r\n this.bindExternal(data);\r\n this.templateRow.init();\r\n data[\"emptyObjectBuilder\"] = this.emptyObjectBuilder;\r\n this.tableData = ko.observable(data);\r\n ko.applyBindings(this.tableData, this.$root[0]);\r\n this.$table.data(\"rustig.editortable\", this);\r\n }\r\n\r\n private bindRootBehavior(data): void {\r\n var binders = this.behaviorBinders;\r\n for (var i = 0; i < binders.length; i++) {\r\n var binder = binders[i];\r\n var $elements = binder.getElements(this.$root);\r\n\r\n $elements.each(function () {\r\n var $element = $(this);\r\n var binding = BindingConverter.toBehaviorBinding(binder.getBinding($element, data));\r\n if (binding && !EditorTable.inTable($element)) {\r\n\r\n EditorTable.addBindingToElement($element, binding);\r\n if (binding.behavior)\r\n data[binding.behavior.name] = binding.behavior.build(data);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private bindRootValues(data): void {\r\n var binders = this.valueBinders;\r\n for (var i = 0; i < binders.length; i++) {\r\n var binder = binders[i];\r\n var $elements = binder.getElements(this.$root);\r\n\r\n $elements.each(function () {\r\n var $element = $(this);\r\n if (!EditorTable.inTable($element) && !EditorTable.isInitialized($element)) {\r\n var binding = BindingConverter.toValueBinding(binder.getBinding($element, data));\r\n if (binding) {\r\n data[Utility.relativeName(binding.dataName)] = binding.dataValue;\r\n EditorTable.addBindingToElement($element, binding);\r\n $element.data(\"et-initialized\", \"true\");\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n private bindRows(data) {\r\n data[\"Rows\"] = ko.observableArray();\r\n var valueBinders = this.valueBinders;\r\n var behaviorBinders = this.behaviorBinders;\r\n var $templateRow = this.templateRow.$row;\r\n var emptyObjectBuilder = [];\r\n this.$table.find(\"tbody tr\").each(function (i, v) {\r\n var $row = $(this);\r\n var rowNumber = i;\r\n var rowData = {};\r\n $row.attr(\"data-init\", \"true\");\r\n\r\n valueBinders.forEach(binder => {\r\n var $cells = binder.getElements($row);\r\n\r\n $cells.each(function () {\r\n var $cell = $(this);\r\n var binding = BindingConverter.toCellBinding(binder.getBinding($cell, rowData));\r\n if (!binding || $cell.data(\"et-initialized\"))\r\n return;\r\n\r\n EditorTable.addBindingToElement($cell, binding, rowNumber);\r\n\r\n rowData[Utility.relativeName(binding.dataName)] = binding.dataValue;\r\n if ($row.is($templateRow))\r\n emptyObjectBuilder.push({ name: Utility.relativeName(binding.dataName), build: binding.createEmptyValue });\r\n\r\n $cell.data(\"et-initialized\", \"true\");\r\n\r\n });\r\n });\r\n\r\n behaviorBinders.forEach(binder => {\r\n var $cells = binder.getElements($row);\r\n\r\n $cells.each(function () {\r\n var $cell = $(this);\r\n var binding = BindingConverter.toBehaviorBinding(binder.getBinding($cell, rowData));\r\n if (!binding)\r\n return;\r\n\r\n EditorTable.addBindingToElement($cell, binding);\r\n\r\n if (binding.behavior)\r\n data[binding.behavior.name] = binding.behavior.build(data);\r\n\r\n });\r\n });\r\n\r\n rowData[\"editorTableInternalId\"] = Utility.guid();\r\n if (!$row.is($templateRow))\r\n data.Rows.push(rowData);\r\n });\r\n this.emptyObjectBuilder = emptyObjectBuilder;\r\n }\r\n\r\n private bindExternal(data): void {\r\n var self = this;\r\n self.externalBinders.forEach(b => {\r\n var binder = b;\r\n self[binder.key] = binder.compute(data);\r\n self[binder.key].subscribe((value) => {\r\n binder.subscribe(value);\r\n });\r\n var dataExtension = binder.extend();\r\n if (dataExtension)\r\n data[dataExtension.name] = dataExtension.build(self.tableData);\r\n self[binder.key].notifySubscribers(self[binder.key]());\r\n });\r\n }\r\n\r\n\r\n private registerBinders(): void {\r\n //most specific binders first\r\n this.valueBinders.push(new DateInputBinder());\r\n this.valueBinders.push(new SelectBinder());\r\n this.valueBinders.push(new NumericInputBinder());\r\n this.valueBinders.push(new MoneyInputBinder());\r\n this.valueBinders.push(new TextInputBinder());\r\n this.valueBinders.push(new HiddenInputBinder());\r\n this.valueBinders.push(new CheckboxInputBinder());\r\n this.valueBinders.push(new ColumnTotalBinder());\r\n this.valueBinders.push(new RowCountBinder());\r\n //computed cell binders should be processed last so all other values are initialized\r\n this.valueBinders.push(new ExpressionBinder());\r\n\r\n this.behaviorBinders.push(new EnterKeyBinder());\r\n this.behaviorBinders.push(new RemoveRowBinder());\r\n this.behaviorBinders.push(new RemoteOnChangeBinder());\r\n this.behaviorBinders.push(new AutoGrowBinder());\r\n this.behaviorBinders.push(new AddRowBinder());\r\n this.behaviorBinders.push(new CheckAllBinder());\r\n this.behaviorBinders.push(new ForEachBinder());\r\n this.behaviorBinders.push(new ToJSONBinder());\r\n\r\n //external element binders. bind to elements outside the KO/root scope\r\n this.externalBinders.push(new ExternalJsonBinder(this.tableKey));\r\n this.externalBinders.push(new ExternalTrackChangesHideBinder(this.tableKey));\r\n this.externalBinders.push(new ExternalNavigationWarning(this.tableKey));\r\n }\r\n\r\n private static inTable($element: JQuery): boolean {\r\n return $element.parents(\"tbody\").length !== 0;\r\n }\r\n\r\n private static isInitialized($element: JQuery): boolean {\r\n return $element.data(\"et-initialized\");\r\n }\r\n\r\n private static addBindingToElement($element: JQuery, binding: any, rowNumber?: Number) {\r\n var currentBinding = $element.attr(\"data-bind\");\r\n var finalBinding = \"\";\r\n //FIF: Remove this hack for having multiple 'event' binders\r\n if (currentBinding && binding.bindingName == \"event\" && currentBinding.indexOf(\"event\") != -1) {\r\n var bindingValue = binding.bindTo.substr(1, binding.bindTo.length - 2);\r\n var eventClosingBracketPosition = currentBinding.indexOf(\"}\");\r\n finalBinding = [currentBinding.slice(0, eventClosingBracketPosition), \", \", bindingValue, currentBinding.slice(eventClosingBracketPosition)].join('');\r\n }\r\n else {\r\n var newBinding = binding.bindingName + \": \"\r\n + (binding.dataName ? Utility.relativeName(binding.dataName) : binding.bindTo);\r\n\r\n finalBinding = currentBinding ? currentBinding + \", \" + newBinding : newBinding;\r\n }\r\n\r\n $element.attr(\"data-bind\", finalBinding);\r\n if (rowNumber) {\r\n var elementId = $element.attr(\"id\");\r\n if (elementId) {\r\n $element.attr(\"id\", elementId + \"_\" + rowNumber);\r\n }\r\n }\r\n }\r\n}\r\n\r\n($ => {\r\n function Plugin() {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var table = $this.data('rustig.editortable');\r\n\r\n if (!table) {\r\n new EditorTable($this);\r\n }\r\n else {\r\n throw new Error(\"refresh not implemented\");\r\n }\r\n });\r\n }\r\n $.fn.editortable = Plugin;\r\n\r\n})($);","import $ from 'jquery'\r\n\r\nexport class FormValidation {\r\n public static get validationClass(): string {\r\n return 'input-validation-error';\r\n }\r\n\r\n private static handlers: Array = new Array();\r\n public static registerHandler(...handlers: IValidationHandler[]): void {\r\n handlers.forEach(function (handler) {\r\n FormValidation.handlers.push(handler);\r\n });\r\n }\r\n static handleErrors(): void {\r\n var _this = this;\r\n var $errors = $('.field-validation-error');\r\n if ($errors.length == 0)\r\n return;\r\n\r\n $errors.each(function () {\r\n var $error = $(this);\r\n\r\n for (var i = 0; i < _this.handlers.length; i++) {\r\n var isHandled = _this.handlers[i].handle($error);\r\n if (isHandled)\r\n break;\r\n }\r\n });\r\n\r\n $(document).trigger('formvalidationhandled.rustig.formvalidation');\r\n }\r\n}\r\n\r\nexport interface IValidationHandler {\r\n handle($error: JQuery): boolean;\r\n}\r\n","import $ from 'jquery';\r\nimport \"../../modules/popover\";\r\nimport { IPopOverHTMLElement } from '../../modules/popover';\r\nimport { FormValidation } from \"./formvalidation\";\r\n\r\nexport class ErrorPopover {\r\n private defaults = {\r\n channel: 'error',\r\n placement: 'top',\r\n containerClass: 'error-container',\r\n position: 'element',\r\n sizing: 'element',\r\n mode: 'copy'\r\n };\r\n\r\n private options;\r\n\r\n constructor(popoverOptions = {}) {\r\n this.options = $.extend({}, this.defaults, popoverOptions);\r\n }\r\n\r\n public append($targetInput: JQuery, targetId: string, message: any, trigger?: string, clearErrorOptions?: IClearErrorOptions): void {\r\n this.addValidationClass($targetInput);\r\n trigger = trigger || 'focus'\r\n\r\n // create popover content\r\n var $popover = $('
');\r\n var $content = $('
');\r\n\r\n var $existingPopover = $('[data-popover-content=\"' + targetId + '\"]');\r\n if ($existingPopover.length != 0)\r\n $existingPopover.remove();\r\n\r\n $(document.body).append($popover);\r\n $popover.append($content);\r\n $content.append(message);\r\n\r\n // init popover\r\n $targetInput.popover({\r\n popover: targetId,\r\n trigger: trigger,\r\n ...this.options\r\n });\r\n\r\n let resultClearErrorOptions = this.determineClearErrorBehavior($targetInput, clearErrorOptions);\r\n let self = this;\r\n resultClearErrorOptions.clearErrorWireups.forEach((x) => {\r\n x.$targetInput.on(x.triggerEvents, function (e) {\r\n if (x.$targetInput.data('r-is-constructing') as boolean) {\r\n return true;\r\n }\r\n\r\n self.removeErrorState(x.$targetInput, resultClearErrorOptions.onErrorPopoverDisabled);\r\n return true;\r\n });\r\n });\r\n }\r\n\r\n protected addValidationClass($target: JQuery):void {\r\n $target.addClass(FormValidation.validationClass);\r\n }\r\n\r\n private determineClearErrorBehavior($defaultTarget: JQuery, options?: IClearErrorOptions): IClearErrorOptions {\r\n let result = $.extend({}, this.defaultClearErrorBehavior($defaultTarget), options);\r\n\r\n return result;\r\n }\r\n\r\n private removeErrorState($target: JQuery, onErrorPopoverDisabled?: Function): void {\r\n $target.removeClass(FormValidation.validationClass);\r\n let $popoverElement = ($target[0] as IPopOverHTMLElement);\r\n\r\n if ($popoverElement?.popovers) {\r\n $popoverElement.popovers['error'].disable();\r\n }\r\n\r\n if (onErrorPopoverDisabled) {\r\n onErrorPopoverDisabled();\r\n }\r\n }\r\n\r\n private defaultClearErrorBehavior($target:JQuery): IClearErrorOptions\r\n {\r\n let defaultWireups: IClearErrorWireup[] = [this.defaultWireup($target)];\r\n\r\n return {\r\n clearErrorWireups: defaultWireups,\r\n onErrorPopoverDisabled: null\r\n };\r\n };\r\n\r\n private defaultWireup($target: JQuery): IClearErrorWireup {\r\n return {\r\n $targetInput: $target,\r\n triggerEvents: 'change change.rustig input'\r\n };\r\n }\r\n}\r\n\r\nexport interface IClearErrorOptions {\r\n clearErrorWireups?: Array;\r\n onErrorPopoverDisabled?: Function;\r\n}\r\n\r\nexport interface IClearErrorWireup {\r\n $targetInput: JQuery;\r\n triggerEvents: string;\r\n}","import $ from 'jquery';\r\nimport { ErrorPopover } from \"../../utilities/formvalidation/errorpopover\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n editortable_validation(): JQuery;\r\n }\r\n}\r\n\r\nexport class Validation {\r\n static wireup: string = \".editortable-validation\";\r\n constructor(private $element: JQuery) {\r\n this.init();\r\n }\r\n private init(): void {\r\n this.$element.each(function () {\r\n if (!$(this).is(\".editortable-validation\"))\r\n throw new Error(\"editor table validation root must be marked with .editortable-validation\");\r\n\r\n $(this).find(\"span\").each(function () {\r\n let $el = $(this);\r\n let key = $el.attr(\"title\");\r\n let tableKey = $el.data(\"key\");\r\n let matchIndex = key.match(/.*\\[(\\d+)\\].*/);\r\n if (!matchIndex)\r\n return;\r\n let rowNum = parseInt(matchIndex[1]);\r\n let lastDot = key.lastIndexOf(\".\");\r\n let columnName = key.substring(lastDot + 1, key.length);\r\n\r\n let table = $(\"[data-et-key='\" + tableKey + \"']\");\r\n let row = table.find(\"tbody tr\").eq(rowNum);\r\n let inputCell = row.find(\":input[name$='.\" + columnName + \"']\");\r\n let displayCell = row.find(`[data-et-validation='${columnName}']`)\r\n let cell = inputCell.length !== 0 ? inputCell : displayCell;\r\n if (cell.length == 0)\r\n console.error(`Unable to find column for validation, looking for column name that ends with: ${columnName} or data-et-validation='${columnName}'`);\r\n\r\n new EditorTableErrorPopover({\r\n sizing: cell.data('sizing')\r\n }).append(cell, columnName + rowNum, $el.text());\r\n\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport class EditorTableErrorPopover extends ErrorPopover {\r\n constructor(popoverOptions) {\r\n super(popoverOptions);\r\n }\r\n public append($target: JQuery, targetId: string, message, trigger?: string): void {\r\n super.append($target, targetId, message, $target.is(\"td\") ? \"click\" : undefined);\r\n }\r\n\r\n protected addValidationClass($target: JQuery) {\r\n if ($target.is(\"td\"))\r\n super.addValidationClass($target);\r\n else\r\n super.addValidationClass($target.parents(\"td\"));\r\n }\r\n}\r\n\r\n($ => {\r\n function Plugin() {\r\n return this.each(function () {\r\n new Validation($(this));\r\n });\r\n }\r\n $.fn.editortable_validation = Plugin;\r\n\r\n})($);\r\n","import { Remote, IRemoteOptions, IRemoteHandler } from \"./remote\";\r\nimport Element from \"../../utilities/element\";\r\nimport Ajax from \"./ajax\";\r\n\r\nexport class RemoteTriggerHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n var shouldHandle = $element.isEnabled() && $element.is(Remote.triggerWireup);\r\n if (!shouldHandle)\r\n return false;\r\n\r\n options.$triggeringEvent?.preventDefault();\r\n\r\n options.type = $element.data('method') || 'get';\r\n options.url = options.url || $element.attr('href') || $element.data('url');\r\n let element = new Element($element);\r\n var name = $element.data('remote-name-override') || element.name();\r\n var value = $element.data('remote-value-override') || element.value();\r\n var data = {}\r\n data[name] = value;\r\n\r\n options.url = options.url || $element.data('url');\r\n options.data = data;\r\n\r\n Ajax.execute($element, options);\r\n\r\n return true;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n fileinput: () => any;\r\n }\r\n}\r\nexport class FileInput {\r\n static get wireup(): string {\r\n return '[data-fileinput]';\r\n }\r\n\r\n static get inputFlag(): string {\r\n return FileInput.wireup;\r\n }\r\n static get preserveFlag(): string {\r\n return '[data-fileinput-preserve]';\r\n }\r\n static get handledFlag(): string {\r\n return 'fileinput-handled';\r\n }\r\n\r\n public static get droppedFile(): File { return this._droppedFiles ? FileInput.droppedFiles[0] : null; }\r\n private static _droppedFiles: Array;\r\n public static get droppedFiles(): Array { return FileInput._droppedFiles; }\r\n\r\n public static storeDroppedFile(data: IHaveDroppedFile): void {\r\n FileInput.storeDroppedFiles([data.file]);\r\n }\r\n\r\n public static storeDroppedFiles(files: Array): void {\r\n this._droppedFiles = files;\r\n }\r\n\r\n public static stagedFiles: any = {};\r\n public static addStagedFile(data: FileInputInfo): void {\r\n FileInput.stagedFiles[data.elementId] = data;\r\n }\r\n\r\n public static handleStagedFiles($context: JQuery): void {\r\n if ($context.data(FileInput.handledFlag)) {\r\n return;\r\n }\r\n\r\n if ($context.find(FileInput.preserveFlag).length == 0) {\r\n FileInput.clearStagedFiles();\r\n }\r\n FileInput.setInputs();\r\n\r\n $context.data(FileInput.handledFlag, \"handled!\");\r\n }\r\n\r\n public static clearStagedFiles(): void {\r\n FileInput.stagedFiles = {};\r\n }\r\n\r\n public static setInputs(): void {\r\n for (var key in FileInput.stagedFiles) {\r\n var fileInfo = FileInput.stagedFiles[key];\r\n try {\r\n ($(fileInfo.selector)[0]).files = fileInfo.fileData;\r\n }\r\n catch (e) {\r\n // some browsers do not support setting the files collection yet.\r\n }\r\n }\r\n }\r\n\r\n constructor() {\r\n FileInput.wireupDocument();\r\n }\r\n\r\n private static wireupDocument: Function = _.once(() => {\r\n $(document).on('change.rustig.fileinput', FileInput.inputFlag, function (e) {\r\n var $input = $(e.target);\r\n var elementId = $input.attr('id');\r\n var fileData = ($input[0]).files;\r\n FileInput.addStagedFile(new FileInputInfo(fileData, elementId));\r\n });\r\n });\r\n}\r\n\r\nexport interface IHaveDroppedFile {\r\n file: File;\r\n}\r\n\r\nexport class FileInputInfo {\r\n constructor(public fileData: any, public elementId: string) { }\r\n\r\n get selector(): string {\r\n return \"#\" + this.elementId;\r\n }\r\n}\r\n\r\nfunction Plugin() {\r\n var $this = this;\r\n return $this.each(function () {\r\n FileInput.handleStagedFiles($(this).closest('form'));\r\n });\r\n}\r\n\r\n$.fn.fileinput = Plugin;\r\n","import $ from 'jquery';\r\nimport { IRemoteHandler, IRemoteOptions } from \"./remote\";\r\nimport Ajax from \"./ajax\";\r\nimport { FileInput } from \"../fileinput\";\r\n\r\nexport class FileDropRemoteHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n var $form = $element.closest('form[data-file-upload]');\r\n var droppedFile = FileInput.droppedFile;\r\n var hasFileDrop = !!droppedFile;\r\n var elementIsFormOrSubmitable = $element.is('input[type=\"submit\"]') || $element.is('form') || $element.is('button');\r\n\r\n var shouldHandle = hasFileDrop && elementIsFormOrSubmitable && $element.isEnabled() && $form.length != 0;\r\n if (!shouldHandle)\r\n return false;\r\n\r\n options.$triggeringEvent?.preventDefault();\r\n\r\n var formData = new window['FormData']($form[0] as HTMLFormElement);\r\n formData.append('droppedFile', droppedFile);\r\n\r\n options.contentType = false;\r\n options.processData = false;\r\n options.type = options.type || $element.data('method') || $form.attr('method') || 'post';\r\n options.url = options.url || $element.data('url') || $form.attr('action');\r\n options.data = formData;\r\n\r\n Ajax.execute($element, options);\r\n return true;\r\n }\r\n}","import $ from 'jquery';\r\nimport { IRemoteHandler, IRemoteOptions } from \"./remote\";\r\nimport Ajax from \"./ajax\";\r\n\r\nexport class FileUploadFormRemoteHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n var $form = $element.closest('form');\r\n var $files = $form.find('input[type=\"file\"]');\r\n var hasFileInputs = $files.length > 0;\r\n var elementIsFormOrSubmitable = $element.is('input[type=\"submit\"]') || $element.is('form') || $element.is('button');\r\n\r\n var shouldHandle = hasFileInputs && elementIsFormOrSubmitable && $element.isEnabled() && $form.length != 0;\r\n if (!shouldHandle)\r\n return false;\r\n\r\n options.$triggeringEvent?.preventDefault();\r\n\r\n $form.trigger('formdatacollecting.rustig.remote');\r\n var form: any = $form[0];\r\n var data = new window['FormData'](form);\r\n\r\n options.contentType = false; // setting contentType and processData to false corrects jQuery's assumption about adding a Content-Type header for you. http://stackoverflow.com/questions/5392344/sending-multipart-formdata-with-jquery-ajax\r\n options.processData = false;\r\n options.type = options.type || $element.data('method') || $form.attr('method') || 'post';\r\n options.url = options.url || $element.data('url') || $form.attr('action');\r\n options.data = data;\r\n\r\n $form.trigger('remotesubmit.rustig.remote');\r\n Ajax.execute($element, options);\r\n return true;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport { IRemoteHandler, IRemoteOptions } from \"./remote\";\r\nimport Ajax from \"./ajax\";\r\n\r\nexport class SwitchRemoteHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n var $input = $element.find('.switch-input');\r\n var shouldHandle = $element.is('.switch-field');\r\n if (!shouldHandle)\r\n return false;\r\n\r\n options.$triggeringEvent?.preventDefault();\r\n\r\n if ($input.isDisabled())\r\n return true;\r\n\r\n var currentValue = $input.is(':checked');\r\n var name = $input.attr('name');\r\n var newValue = !currentValue;\r\n var data = {}\r\n data[name] = newValue;\r\n\r\n $input.prop('checked', newValue);\r\n\r\n options.url = options.url || $element.data('url');\r\n options.data = data;\r\n options.type = 'post';\r\n\r\n Ajax.execute($element, options);\r\n return true;\r\n }\r\n}\r\n","import $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n disable(shouldClearValue?: boolean): JQuery;\r\n enable(): JQuery;\r\n isDisabled(): boolean;\r\n isEnabled(): boolean;\r\n toggleEnabled(condition: boolean, shouldClearValueOnDisable?: boolean): JQuery\r\n }\r\n}\r\n\r\n(function ($) {\r\n $.fn.disable = function (shouldClearValue: boolean = false) {\r\n $(this).each(function () {\r\n var $self = $(this);\r\n $self.attr('disabled', 'disabled');\r\n if (shouldClearValue)\r\n $self.val(null);\r\n });\r\n return $(this);\r\n };\r\n $.fn.enable = function () {\r\n $(this).each(function () {\r\n var $self = $(this);\r\n\r\n var disabledByPermissions = $self.data('disabled-by-permissions') || false;\r\n if (disabledByPermissions)\r\n return;\r\n\r\n $self.removeAttr('disabled');\r\n });\r\n return $(this);\r\n };\r\n $.fn.isDisabled = function () {\r\n return $(this).is('[disabled]');\r\n }\r\n $.fn.isEnabled = function () {\r\n return !$(this).isDisabled();\r\n }\r\n $.fn.toggleEnabled = function (condition, shouldClearValueOnDisable: boolean = false) {\r\n if (condition)\r\n return $(this).enable();\r\n else\r\n return $(this).disable(shouldClearValueOnDisable);\r\n }\r\n\r\n $(document).on('click.rustig.disable', 'a[disabled]', function (e) { e.preventDefault(); });\r\n})($);\r\n","import $ from 'jquery';\r\nimport { IRemoteHandler, IRemoteOptions } from \"./remote\";\r\nimport Ajax from \"./ajax\";\r\nimport {EditorTable} from \"../editortable/editortable\"\r\nimport Utility from \"../editortable/utility\";\r\nimport \"../../utilities/disable\"\r\n\r\nexport class EditorTableFieldChangeRemoteHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n var shouldHandle = $element.is('input[data-et-remote]') && $element.isEnabled();\r\n if (!shouldHandle)\r\n return false;\r\n\r\n options.$triggeringEvent?.preventDefault();\r\n\r\n var name = $element.data('et-remote-name-override') ||\r\n Utility.relativeName($element.attr('name'));\r\n var value = $element.val();\r\n var data = {}\r\n data[name] = value;\r\n\r\n var additionalValues = $element.data(\"et-additional-values\");\r\n if (additionalValues)\r\n Object.keys(additionalValues).forEach(key => {\r\n var formattedKey = Utility.relativeName(key);\r\n data[formattedKey] = additionalValues[formattedKey];\r\n });\r\n\r\n options.url = options.url || $element.data('url');\r\n options.data = data;\r\n\r\n Ajax.execute($element, options);\r\n return true;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport { IRemoteHandler, IRemoteOptions } from \"./remote\";\r\nimport Ajax from \"./ajax\";\r\n\r\nexport class SingleInputRemoteHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n let isInForm = $element.closest('form').length != 0;\r\n let shouldHandle = $element.is('input') && $element.isEnabled() && !isInForm;\r\n if (!shouldHandle)\r\n return false;\r\n\r\n options.$triggeringEvent?.preventDefault();\r\n\r\n let name = $element.attr('name');\r\n let value = $element.val();\r\n\r\n let data = options.data;\r\n if (!data) {\r\n data = {}\r\n data[name] = value;\r\n }\r\n\r\n options.url = options.url || $element.data('url');\r\n options.data = data;\r\n\r\n Ajax.execute($element, options);\r\n return true;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport { IRemoteHandler, IRemoteOptions } from \"./remote\";\r\nimport Ajax from \"./ajax\";\r\nimport RequestVerificationToken from \"../../utilities/requestverificationtoken\";\r\nimport _ from \"underscore\"\r\n\r\nexport class FormInputRemoteHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n var $form = this.findForm($element);\r\n var shouldHandle = ($element.is('form') || this.isSubmit($element)) && $element.isEnabled() && $form.length != 0;\r\n if (!shouldHandle)\r\n return false;\r\n\r\n options.$triggeringEvent?.preventDefault();\r\n\r\n options.type = options.type || $element.data('method') || $form.attr('method') || 'post';\r\n options.url = options.url || $element.data('url') || $form.attr('action');\r\n\r\n if ($element.is('button[type=\"submit\"]')) {\r\n this.addOrUpdateHiddenInputForSubmitButton($element, $form);\r\n }\r\n\r\n if (!options.data)\r\n options.data = {};\r\n\r\n if (!options.data['__RequestVerificationToken']) {\r\n var token = new RequestVerificationToken();\r\n options.data[token.key] = token.value;\r\n }\r\n\r\n $form.trigger('formdatacollecting.rustig.remote');\r\n let data = $.extend({}, options.data, this.serializeFormToJSON($form));\r\n options.data = this.transformJsonToString(data);\r\n\r\n $form.trigger('remotesubmit.rustig.remote');\r\n Ajax.execute($element, options);\r\n return true;\r\n }\r\n\r\n private findForm($element: JQuery) {\r\n let $result = $element.closest('form');\r\n let hasRemoteTargetForm = this.isSubmit($element) && $element.is('form'.asDataSelector());\r\n\r\n if ($result.length == 0 && hasRemoteTargetForm) {\r\n let targetFormId = $element.data('form');\r\n $result = $('form-id'.asDataSelector(targetFormId));\r\n }\r\n\r\n return $result;\r\n }\r\n\r\n private addOrUpdateHiddenInputForSubmitButton($button: JQuery, $form: JQuery): void {\r\n var name = $button.attr('name');\r\n if (!name)\r\n return;\r\n\r\n var value = $button.val();\r\n var $input = $form.find('input[name=\"' + name + '\"]');\r\n if ($input.length == 0) {\r\n $input = $('').attr('type', 'hidden')\r\n .attr('name', name)\r\n $form.prepend($input);\r\n }\r\n $input.val(value);\r\n }\r\n\r\n private serializeFormToJSON($form: JQuery): any {\r\n var arr = $form.serializeArray();\r\n var data = _(arr).reduce((acc, field: any) => {\r\n if (acc[field.name] && field.value == \"false\")\r\n return acc;\r\n\r\n var currentProperty = acc[field.name];\r\n if (currentProperty !== undefined) {\r\n if ($.isArray(currentProperty))\r\n acc[field.name].push(field.value);\r\n else\r\n acc[field.name] = [currentProperty, field.value];\r\n }\r\n else\r\n acc[field.name] = field.value;\r\n\r\n return acc;\r\n }, {});\r\n return data;\r\n }\r\n\r\n private transformJsonToString(jsonObject: any): any {\r\n var result = \"\";\r\n\r\n for (var key in jsonObject) {\r\n if ($.isArray(jsonObject[key])) {\r\n var arrayData = _(jsonObject[key]).reduce((acc, prop: any) => {\r\n acc += '&' + key + '=' + encodeURIComponent(prop);\r\n return acc;\r\n }, \"\");\r\n result += arrayData;\r\n }\r\n else {\r\n result += '&' + key + '=' + encodeURIComponent(jsonObject[key]);\r\n }\r\n }\r\n\r\n return result.length > 0 ? result.substring(1) : result;\r\n };\r\n\r\n private isSubmit($element: JQuery): boolean {\r\n return $element.is('[type=\"submit\"]') || $element.is('submit'.asDataSelector());\r\n }\r\n\r\n }\r\n","import $ from 'jquery';\r\nimport { Remote, IRemoteOptions, IRemoteHandler } from \"./remote\";\r\nimport Ajax from \"./ajax\";\r\n\r\nexport class SelectRemoteHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n var shouldHandle = $element.is(\"select\") && $element.isEnabled();\r\n if (!shouldHandle)\r\n return false;\r\n\r\n options.$triggeringEvent?.preventDefault();\r\n\r\n var value = $element.val();\r\n\r\n options.url = options.url || $element.find('option[value=\"' + value + '\"]').data('url');\r\n\r\n if (!options.url)\r\n options.url = $element.data('url');\r\n\r\n options.type = options.type || $element.data('method') || 'get';\r\n\r\n Ajax.execute($element, options);\r\n return true;\r\n }\r\n}\r\n","import \"../../utilities/disable\";\r\nimport { IRemoteHandler, IRemoteOptions } from \"./remote\";\r\n\r\nexport class NestedAnchorRemoteHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n // In this handler we check if the targetted element is an anchor with\r\n // href, but not the remote attribute. In these cases we don't call\r\n // `event.preventDefault()` and let the browser handle the event as\r\n // normal. We return true though so we prevent other handers from taking\r\n // any actions.\r\n return $element.isEnabled() && this.targetIsAnchor(options.$target);\r\n }\r\n\r\n private targetIsAnchor($target: JQuery): boolean {\r\n if (!$target || $target.length == 0)\r\n return false;\r\n\r\n return $target.is('a')\r\n && !$target.is('[data-remote]')\r\n && $target.attr('href') != undefined;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport { IRemoteHandler, IRemoteOptions } from \"./remote\";\r\nimport Ajax from \"./ajax\";\r\nimport \"../../utilities/disable\";\r\n\r\nexport class DefaultRemoteHandler implements IRemoteHandler {\r\n public handle($element: JQuery, options: IRemoteOptions): boolean {\r\n var shouldHandle = $element.isEnabled();\r\n if (!shouldHandle)\r\n return false;\r\n\r\n options.$triggeringEvent?.preventDefault();\r\n\r\n options.type = options.type || $element.data('method') || 'get';\r\n options.url = options.url || $element.attr('href') || $element.data('url');\r\n\r\n Ajax.execute($element, options);\r\n\r\n return true;\r\n }\r\n}\r\n","\r\nimport { RemoteTriggerHandler } from \"./remotetriggerhandler\";\r\nimport { FileDropRemoteHandler } from \"./filedropremotehandler\";\r\nimport { FileUploadFormRemoteHandler } from \"./fileuploadformremotehandler\";\r\nimport { SwitchRemoteHandler } from \"./switchremotehandler\";\r\nimport { EditorTableFieldChangeRemoteHandler } from \"./editortablefieldchangeremotehandler\";\r\nimport { SingleInputRemoteHandler } from \"./singleinputremotehandler\";\r\nimport { FormInputRemoteHandler } from \"./forminputremotehandler\";\r\nimport { SelectRemoteHandler } from \"./selectremotehandler\";\r\nimport { NestedAnchorRemoteHandler } from \"./nestedanchorremotehandler\";\r\nimport { DefaultRemoteHandler } from \"./defaultremotehandler\";\r\nimport { IRemoteHandler } from \"./remote\";\r\n\r\nexport class HandlerFactory {\r\n create(): Array {\r\n return [\r\n new RemoteTriggerHandler(),\r\n new FileDropRemoteHandler(),\r\n new FileUploadFormRemoteHandler(),\r\n new SwitchRemoteHandler(),\r\n new EditorTableFieldChangeRemoteHandler(),\r\n new SingleInputRemoteHandler(),\r\n new FormInputRemoteHandler(),\r\n new SelectRemoteHandler(),\r\n new NestedAnchorRemoteHandler(),\r\n new DefaultRemoteHandler()\r\n ];\r\n }\r\n}","import $ from 'jquery';\r\nimport Modal from \"../modal\";\r\nimport _ from 'underscore';\r\nimport { HandlerFactory } from \"./handlerFactory\"\r\n\r\ndeclare global {\r\n interface JQuery {\r\n remote(options?: IRemoteOptions);\r\n }\r\n}\r\n\r\nexport class Remote {\r\n public static get triggerWireup() {\r\n return '[data-remote][data-remote-trigger]';\r\n }\r\n private static DEFAULTS: IRemoteOptions = {\r\n async: true,\r\n beforeRemote: null,\r\n contentType: 'application/x-www-form-urlencoded; charset=UTF-8',\r\n data: null,\r\n dataFilter: null,\r\n error: null,\r\n state: null,\r\n success: null,\r\n processData: true,\r\n traditional: false,\r\n type: null,\r\n url: null\r\n };\r\n\r\n public static execute($element: JQuery, options: IRemoteOptions): void {\r\n let handlers = new HandlerFactory().create();\r\n let _options = $.extend({}, this.DEFAULTS, options);\r\n try {\r\n for (var i = 0; i < handlers.length; i++) {\r\n var isHandled = handlers[i].handle($element, _options);\r\n if (isHandled)\r\n break;\r\n }\r\n }\r\n catch (ex) {\r\n Modal.openErrorModal(ex.message);\r\n }\r\n }\r\n public static wireupDocument: Function = _.once(() => {\r\n $.fn.remote = function (options) {\r\n $(this).each(function () {\r\n Remote.execute($(this), options);\r\n });\r\n return $(this);\r\n }\r\n\r\n function callRemote(e: JQueryEventObject) {\r\n $.fn.remote.call(this,\r\n {\r\n $element: $(this),\r\n $target: $(e.target),\r\n $triggeringEvent: e,\r\n } as IRemoteOptions);\r\n }\r\n\r\n $(document).on('click.rustig.remote', '[data-remote]:not(select, form, [data-remote-trigger])', callRemote);\r\n $(document).on('change.rustig.remote', 'select[data-remote]:not([data-remote-trigger])', callRemote);\r\n });\r\n\r\n public static wireupTriggers(): void {\r\n $(this).each(function () {\r\n let $element = $(this);\r\n let trigger = $element.data('remote-trigger');\r\n let context = $element.data('remote-trigger-context') || 'element';\r\n let $contextElement:any = $element;\r\n\r\n if (context == 'document')\r\n $contextElement = $(document);\r\n else if (context != 'element') {\r\n $contextElement = $(context);\r\n if ($contextElement.length == 0)\r\n throw Error('Could not find trigger context element for remote: \"' + context);\r\n }\r\n\r\n $contextElement.on(trigger, function () {\r\n $element.remote();\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport interface IRemoteHandler {\r\n handle($element: JQuery, options?: IRemoteOptions): boolean;\r\n}\r\n\r\nexport interface IRemoteOptions {\r\n async?: boolean;\r\n beforeRemote?(): void;\r\n contentType?: any;\r\n data?: any;\r\n dataFilter?(data: any, state: any): any;\r\n error?(jqXHR: JQueryXHR, textStatus: string, errorThrown: string): any;\r\n state?: any;\r\n success?(data: any, textStatus: string, jqXHR: JQueryXHR): any;\r\n traditional?: boolean;\r\n processData?: boolean;\r\n type?: string;\r\n url?: string;\r\n allowMultipleAjaxCalls?: boolean;\r\n $element?: JQuery;\r\n $target?: JQuery;\r\n $triggeringEvent?: JQueryEventObject;\r\n}\r\n\r\n","export class JsTreeConfig {\r\n constructor(private options: IJsTreeOptions) { }\r\n\r\n public toJson(): Object {\r\n return {\r\n 'core': {\r\n 'data': this.options.nodes,\r\n 'animation': false,\r\n 'themes': {\r\n 'dots': false,\r\n 'icons': false\r\n }\r\n },\r\n 'checkbox': {\r\n 'keep_selected_style': false\r\n },\r\n 'plugins': [ 'checkbox' ]\r\n }\r\n }\r\n}\r\n\r\nexport interface IJsTreeOptions {\r\n nodes: any;\r\n}\r\n","import { IJsTreeOptions, JsTreeConfig } from \"./treeconfig\";\r\nimport $ from 'jquery';\r\nimport \"../../utilities/extensions\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n treeinput: (option) => any;\r\n }\r\n}\r\n\r\nexport class TreeInput {\r\n static get wireup(): string {\r\n return '[data-treeinput]';\r\n }\r\n\r\n private DEFAULTS: ITreeInputOptions = {\r\n treeOptions: { 'nodes': new Array() },\r\n inputName: null\r\n };\r\n\r\n private $input: JQuery;\r\n constructor(private $jsTree, private options?: ITreeInputOptions) {\r\n this.setOptions();\r\n this.findInput();\r\n this.validate();\r\n this.createTree();\r\n this.wireupEvents();\r\n }\r\n\r\n public setSelectedValues(): void {\r\n let checkedIds = this.$jsTree.jstree('get_selected', true)\r\n .filter(n => n.children.length == 0)\r\n .map(n => n.id)\r\n .join();\r\n this.$input.val(checkedIds);\r\n }\r\n\r\n private setOptions(): void {\r\n this.options = $.extend({}, this.DEFAULTS, this.$jsTree.data(), this.options);\r\n }\r\n\r\n private findInput(): void {\r\n this.$input = $('name'.asAttrSelector(this.options.inputName));\r\n }\r\n\r\n private validate(): void {\r\n if (this.$input.length == 0)\r\n throw Error(\"$input could not be found with name: \" + this.options.inputName);\r\n if (this.options.treeOptions === undefined)\r\n throw Error(\"TreeOptions are required\");\r\n }\r\n\r\n private createTree(): void {\r\n let config = new JsTreeConfig(this.options.treeOptions);\r\n this.$jsTree.append($('

').html(\"Loading...\"))\r\n .jstree(config.toJson());\r\n this.$jsTree.addClass('treeinput');\r\n }\r\n\r\n private wireupEvents() {\r\n this.$jsTree.closest('form').on('click.rustig', '[type=\"submit\"]', () => this.setSelectedValues());\r\n }\r\n}\r\n\r\nexport interface ITreeInputOptions {\r\n treeOptions: IJsTreeOptions;\r\n inputName: string;\r\n}\r\n\r\n(function ($) {\r\n function Plugin(option) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.treeinput');\r\n\r\n if (!data) {\r\n data = new TreeInput($this);\r\n $this.data('rustig.treeinput', data);\r\n }\r\n if (typeof option == 'string') {\r\n data[option]();\r\n }\r\n });\r\n }\r\n$.fn.treeinput = Plugin;\r\n\r\n})($);","import $ from 'jquery';\r\nimport Storage from \"../utilities/storage\";\r\nimport ElementPosition from \"../utilities/elementposition\";\r\n\r\nvar $globalContainer: JQuery;\r\n\r\nexport class Alert {\r\n public static get AlertStorageKey(): string { return \"Rustig.Alert\"; }\r\n public static flashSaveSuccessful() {\r\n this.flash('Save Successful!');\r\n }\r\n public static flash(message: string, $container?: JQuery) {\r\n if (!message)\r\n return;\r\n\r\n let hasCustomContainer = $container && $container.length > 0;\r\n\r\n // build container if needed\r\n if (!$globalContainer) {\r\n $globalContainer = $('

').attr('id', 'alertGlobal');\r\n $(document.body).append($globalContainer);\r\n }\r\n\r\n // create message\r\n $globalContainer.hide();\r\n $globalContainer.children().remove();\r\n let $messageContainer = $('
').addClass('alert alert-success').text(message);\r\n $globalContainer.append($messageContainer);\r\n\r\n if (hasCustomContainer) {\r\n let position = $container.offset();\r\n $globalContainer.css(position);\r\n }\r\n else {\r\n new ElementPosition($globalContainer).setPositionCenterScreen();\r\n }\r\n\r\n //show and fade\r\n $globalContainer.show().delay(2000).fadeOut('slow');\r\n }\r\n}\r\n\r\n$(function () {\r\n var alertMessage = $('[data-alert]').data('alert');\r\n if (alertMessage)\r\n Storage.set(Alert.AlertStorageKey, alertMessage);\r\n\r\n var message = Storage.get(Alert.AlertStorageKey);\r\n if (message) {\r\n Storage.remove(Alert.AlertStorageKey);\r\n Alert.flash(message);\r\n }\r\n});\r\n\r\nexport default Alert;","import $ from 'jquery';\r\nimport _ from 'underscore'\r\n\r\nexport class AddressLoader {\r\n public static calculateAddressFromZipcode(e: JQueryEventObject): void {\r\n var $addressLoader = $(e.target).closest('[data-addressloader]');\r\n\r\n var url = $addressLoader.data('calculate-from-zip-url');\r\n var zipCode = $addressLoader.find('[data-addressloader-zipcode]').val();\r\n\r\n $addressLoader.remote({\r\n url: url,\r\n data: {\r\n zipCode: zipCode,\r\n callback: \"Rustig.AddressLoader.onAddressOptionsCalculatedFromZipcode\"\r\n }\r\n });\r\n }\r\n\r\n public static onAddressOptionsCalculatedFromZipcode(data: any): void {\r\n data.$remoteTarget.find('[data-addressloader-state]').val(data.state).change();\r\n data.$remoteTarget.find('[data-addressloader-city]').html(data.cityOptions).trigger('dropdown:reload').val(data.city).change();\r\n data.$remoteTarget.find('[data-addressloader-county]').html(data.countyOptions).trigger('dropdown:reload').val(data.county).change();\r\n }\r\n\r\n public static wireupDocument: Function = _.once(() => {\r\n $(document).on('change.rustig.zipcode', '[data-addressloader-zipcode]', AddressLoader.calculateAddressFromZipcode);\r\n });\r\n\r\n}\r\n","export class Age {\r\n private birthDate: Date;\r\n private birthYear: number;\r\n private birthMonth: number;\r\n private birthDay: number;\r\n\r\n public get Years(): number {\r\n var today = new Date();\r\n var age = today.getFullYear() - this.birthYear;\r\n var monthDifference = today.getMonth() - this.birthMonth;\r\n var isBeforeBirthMonth = monthDifference < 0;\r\n var isSameMonthButBeforeBirthday = monthDifference === 0 && today.getDate() < this.birthDay;\r\n\r\n if (isBeforeBirthMonth || isSameMonthButBeforeBirthday) {\r\n age--;\r\n }\r\n\r\n if (age < 0)\r\n return 0;\r\n\r\n return age;\r\n }\r\n constructor(birthDate: Date) {\r\n if (birthDate == null)\r\n throw new Error('birthDate is required');\r\n\r\n this.birthDate = birthDate;\r\n this.birthYear = birthDate.getFullYear();\r\n this.birthMonth = birthDate.getMonth();\r\n this.birthDay = birthDate.getDate();\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport { Age } from \"../utilities/age\";\r\nimport _ from 'underscore';\r\n\r\nexport class AgeField {\r\n public static wireupDocument: Function = _.once(() => {\r\n $(document).on('change.rustig', '[data-birthdate]', function () {\r\n try {\r\n let inputValue = $(this).val() as string;\r\n var ageValue = null;\r\n var birthdate = new Date(inputValue);\r\n var isValid = !isNaN(birthdate.getTime()) && birthdate.getFullYear() > 1800;\r\n if (isValid)\r\n ageValue = new Age(birthdate).Years.toString();\r\n\r\n $('[data-age]').val(ageValue);\r\n }\r\n catch (e) { }\r\n\r\n });\r\n });\r\n}\r\n\r\n","\r\n/*\r\n *\r\n * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\r\n *\r\n * Copyright (c) 2012, Matias Meno\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n *\r\n */\r\n\r\n(function () {\r\n var Dropzone, Emitter, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,\r\n __slice = [].slice,\r\n __hasProp = {}.hasOwnProperty,\r\n __extends = function (child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\r\n\r\n noop = function () { };\r\n\r\n Emitter = (function () {\r\n function Emitter() { }\r\n\r\n Emitter.prototype.addEventListener = Emitter.prototype.on;\r\n\r\n Emitter.prototype.on = function (event, fn) {\r\n this._callbacks = this._callbacks || {};\r\n if (!this._callbacks[event]) {\r\n this._callbacks[event] = [];\r\n }\r\n this._callbacks[event].push(fn);\r\n return this;\r\n };\r\n\r\n Emitter.prototype.emit = function () {\r\n var args, callback, callbacks, event, _i, _len;\r\n event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\r\n this._callbacks = this._callbacks || {};\r\n callbacks = this._callbacks[event];\r\n if (callbacks) {\r\n for (_i = 0, _len = callbacks.length; _i < _len; _i++) {\r\n callback = callbacks[_i];\r\n callback.apply(this, args);\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n Emitter.prototype.removeListener = Emitter.prototype.off;\r\n\r\n Emitter.prototype.removeAllListeners = Emitter.prototype.off;\r\n\r\n Emitter.prototype.removeEventListener = Emitter.prototype.off;\r\n\r\n Emitter.prototype.off = function (event, fn) {\r\n var callback, callbacks, i, _i, _len;\r\n if (!this._callbacks || arguments.length === 0) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n callbacks = this._callbacks[event];\r\n if (!callbacks) {\r\n return this;\r\n }\r\n if (arguments.length === 1) {\r\n delete this._callbacks[event];\r\n return this;\r\n }\r\n for (i = _i = 0, _len = callbacks.length; _i < _len; i = ++_i) {\r\n callback = callbacks[i];\r\n if (callback === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n return Emitter;\r\n\r\n })();\r\n\r\n Dropzone = (function (_super) {\r\n var extend, resolveOption;\r\n\r\n __extends(Dropzone, _super);\r\n\r\n Dropzone.prototype.Emitter = Emitter;\r\n\r\n\r\n /*\r\n This is a list of all available events you can register on a dropzone object.\r\n \r\n You can register an event handler like this:\r\n \r\n dropzone.on(\"dragEnter\", function() { });\r\n */\r\n\r\n Dropzone.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"addedfiles\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\r\n\r\n Dropzone.prototype.defaultOptions = {\r\n url: null,\r\n method: \"post\",\r\n withCredentials: false,\r\n parallelUploads: 2,\r\n uploadMultiple: false,\r\n maxFilesize: 256,\r\n paramName: \"file\",\r\n createImageThumbnails: true,\r\n maxThumbnailFilesize: 10,\r\n thumbnailWidth: 120,\r\n thumbnailHeight: 120,\r\n thumbnailSquare: false,\r\n confirm: function (text, callback) { Dropzone.confirm(text, callback); },\r\n filesizeBase: 1000,\r\n maxFiles: null,\r\n params: {},\r\n clickable: true,\r\n clickableElements: null,\r\n ignoreHiddenFiles: true,\r\n acceptedFiles: null,\r\n acceptedMimeTypes: null,\r\n autoProcessQueue: true,\r\n autoQueue: true,\r\n addRemoveLinks: false,\r\n previewsContainer: null,\r\n previewsContainerPrepend: null,\r\n hiddenInputContainer: \"body\",\r\n capture: null,\r\n renameFilename: null,\r\n dictDefaultMessage: \"Drop files here to upload\",\r\n dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\r\n dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\r\n dictFileTooBig: \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\r\n dictInvalidFileType: \"You can't upload files of this type.\",\r\n dictResponseError: \"Server responded with {{statusCode}} code.\",\r\n dictCancelUpload: \"Cancel upload\",\r\n dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\r\n dictRemoveFile: \"Remove file\",\r\n dictRemoveFileConfirmation: null,\r\n dictMaxFilesExceeded: \"You can not upload any more files.\",\r\n accept: function (file, done) {\r\n return done();\r\n },\r\n init: function () {\r\n return noop;\r\n },\r\n forceFallback: false,\r\n fallback: function () {\r\n var child, messageElement, span, _i, _len, _ref;\r\n this.element.className = \"\" + this.element.className + \" dz-browser-not-supported\";\r\n _ref = this.element.getElementsByTagName(\"div\");\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n child = _ref[_i];\r\n if (/(^| )dz-message($| )/.test(child.className)) {\r\n messageElement = child;\r\n child.className = \"dz-message\";\r\n continue;\r\n }\r\n }\r\n if (!messageElement) {\r\n messageElement = Dropzone.createElement(\"
\");\r\n this.element.appendChild(messageElement);\r\n }\r\n span = messageElement.getElementsByTagName(\"span\")[0];\r\n if (span) {\r\n if (span.textContent != null) {\r\n span.textContent = this.options.dictFallbackMessage;\r\n } else if (span.innerText != null) {\r\n span.innerText = this.options.dictFallbackMessage;\r\n }\r\n }\r\n return this.element.appendChild(this.getFallbackForm());\r\n },\r\n resize: function (file) {\r\n var info, srcRatio, trgRatio;\r\n info = {\r\n srcX: 0,\r\n srcY: 0,\r\n srcWidth: file.width,\r\n srcHeight: file.height\r\n };\r\n srcRatio = file.width / file.height;\r\n info.optWidth = this.options.thumbnailWidth;\r\n info.optHeight = this.options.thumbnailHeight;\r\n if (this.options.thumbnailSquare) {\r\n var max = Math.max(info.srcHeight, info.srcWidth);\r\n var ratio = info.optHeight / max;\r\n info.optHeight = ratio * info.srcHeight;\r\n info.optWidth = ratio * info.srcWidth;\r\n } else if ((info.optWidth == null) && (info.optHeight == null)) {\r\n info.optWidth = info.srcWidth;\r\n info.optHeight = info.srcHeight;\r\n } else if (info.optWidth == null) {\r\n info.optWidth = srcRatio * info.optHeight;\r\n } else if (info.optHeight == null) {\r\n info.optHeight = (1 / srcRatio) * info.optWidth;\r\n }\r\n trgRatio = info.optWidth / info.optHeight;\r\n if (file.height < info.optHeight || file.width < info.optWidth) {\r\n info.trgHeight = info.srcHeight;\r\n info.trgWidth = info.srcWidth;\r\n } else {\r\n if (srcRatio > trgRatio) {\r\n info.srcHeight = file.height;\r\n info.srcWidth = info.srcHeight * trgRatio;\r\n } else {\r\n info.srcWidth = file.width;\r\n info.srcHeight = info.srcWidth / trgRatio;\r\n }\r\n }\r\n info.srcX = (file.width - info.srcWidth) / 2;\r\n info.srcY = (file.height - info.srcHeight) / 2;\r\n return info;\r\n },\r\n\r\n /*\r\n Those functions register themselves to the events on init and handle all\r\n the user interface specific stuff. Overwriting them won't break the upload\r\n but can break the way it's displayed.\r\n You can overwrite them if you don't like the default behavior. If you just\r\n want to add an additional event handler, register it on the dropzone object\r\n and don't overwrite those options.\r\n */\r\n drop: function (e) {\r\n for (var i = 0; i < this.clickableElements.length; i++) {\r\n this.clickableElements[i].classList.remove(\"dz-drag-hover\")\r\n }\r\n return this.element.classList.remove(\"dz-drag-hover\");\r\n },\r\n dragstart: noop,\r\n dragend: function (e) {\r\n for (var i = 0; i < this.clickableElements.length; i++) {\r\n this.clickableElements[i].classList.remove(\"dz-drag-hover\");\r\n }\r\n return this.element.classList.remove(\"dz-drag-hover\");\r\n },\r\n dragenter: function (e) {\r\n for (var i = 0; i < this.clickableElements.length; i++) {\r\n this.clickableElements[i].classList.add(\"dz-drag-hover\");\r\n }\r\n return this.element.classList.add(\"dz-drag-hover\");\r\n },\r\n dragover: function (e) {\r\n for (var i = 0; i < this.clickableElements.length; i++) {\r\n this.clickableElements[i].classList.add(\"dz-drag-hover\");\r\n }\r\n return this.element.classList.add(\"dz-drag-hover\");\r\n },\r\n dragleave: function (e) {\r\n for (var i = 0; i < this.clickableElements.length; i++) {\r\n this.clickableElements[i].classList.remove(\"dz-drag-hover\");\r\n }\r\n return this.element.classList.remove(\"dz-drag-hover\");\r\n },\r\n paste: noop,\r\n reset: function () {\r\n return this.element.classList.remove(\"dz-started\");\r\n },\r\n addedfile: function (file) {\r\n var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\r\n if (this.element === this.previewsContainer) {\r\n this.element.classList.add(\"dz-started\");\r\n }\r\n if (this.previewsContainer) {\r\n file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\r\n file.previewTemplate = file.previewElement;\r\n if (this.previewsContainerPrepend)\r\n $(file.previewElement).insertBefore($(this.previewsContainerPrepend));\r\n else\r\n this.previewsContainer.appendChild(file.previewElement);\r\n _ref = file.previewElement.querySelectorAll(\"[data-dz-name]\");\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n node = _ref[_i];\r\n node.textContent = this._renameFilename(file.name);\r\n node.setAttribute('title', this._renameFilename(file.name));\r\n node.setAttribute('value', this._renameFilename(file.name));\r\n }\r\n _ref1 = file.previewElement.querySelectorAll(\"[data-dz-size]\");\r\n for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\r\n node = _ref1[_j];\r\n node.innerHTML = this.filesize(file.size);\r\n }\r\n if (this.options.addRemoveLinks) {\r\n file._removeLink = Dropzone.createElement(\"\" + this.options.dictRemoveFile + \"\");\r\n file.previewElement.appendChild(file._removeLink);\r\n }\r\n removeFileEvent = (function (_this) {\r\n return function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (file.status === Dropzone.UPLOADING) {\r\n _this.options.confirm(_this.options.dictCancelUploadConfirmation, function () {\r\n return _this.removeFile(file);\r\n });\r\n } else {\r\n if (_this.options.dictRemoveFileConfirmation) {\r\n this.options.confirm(_this.options.dictRemoveFileConfirmation, function () {\r\n return _this.removeFile(file);\r\n });\r\n } else {\r\n return _this.removeFile(file);\r\n }\r\n }\r\n };\r\n })(this);\r\n _ref2 = file.previewElement.querySelectorAll(\"[data-dz-remove]\");\r\n _results = [];\r\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\r\n removeLink = _ref2[_k];\r\n _results.push(removeLink.addEventListener(\"click\", removeFileEvent));\r\n }\r\n return _results;\r\n }\r\n },\r\n removedfile: function (file) {\r\n var _ref;\r\n if (file.previewElement) {\r\n if ((_ref = file.previewElement) != null) {\r\n _ref.parentNode.removeChild(file.previewElement);\r\n }\r\n }\r\n return this._updateMaxFilesReachedClass();\r\n },\r\n thumbnail: function (file, dataUrl) {\r\n var thumbnailElement, _i, _len, _ref;\r\n if (file.previewElement) {\r\n file.previewElement.classList.remove(\"dz-file-preview\");\r\n _ref = file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\");\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n thumbnailElement = _ref[_i];\r\n thumbnailElement.alt = file.name;\r\n thumbnailElement.src = dataUrl;\r\n }\r\n return setTimeout(((function (_this) {\r\n return function () {\r\n return file.previewElement.classList.add(\"dz-image-preview\");\r\n };\r\n })(this)), 1);\r\n }\r\n },\r\n error: function (file, message) {\r\n var node, _i, _len, _ref, _results;\r\n if (file.previewElement) {\r\n file.previewElement.classList.add(\"dz-error\");\r\n if (typeof message !== \"String\" && message.error) {\r\n message = message.error;\r\n }\r\n _ref = file.previewElement.querySelectorAll(\"[data-dz-errormessage]\");\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n node = _ref[_i];\r\n _results.push(node.textContent = message);\r\n }\r\n return _results;\r\n }\r\n },\r\n errormultiple: noop,\r\n processing: function (file) {\r\n if (file.previewElement) {\r\n file.previewElement.classList.add(\"dz-processing\");\r\n if (file._removeLink) {\r\n return file._removeLink.textContent = this.options.dictCancelUpload;\r\n }\r\n }\r\n },\r\n processingmultiple: noop,\r\n uploadprogress: function (file, progress, bytesSent) {\r\n var node, _i, _len, _ref, _results;\r\n if (file.previewElement) {\r\n _ref = file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\");\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n node = _ref[_i];\r\n if (node.nodeName === 'PROGRESS') {\r\n _results.push(node.value = progress);\r\n } else {\r\n _results.push(node.style.width = \"\" + progress + \"%\");\r\n }\r\n }\r\n return _results;\r\n }\r\n },\r\n totaluploadprogress: noop,\r\n sending: noop,\r\n sendingmultiple: noop,\r\n success: function (file) {\r\n if (file.previewElement) {\r\n return file.previewElement.classList.add(\"dz-success\");\r\n }\r\n },\r\n successmultiple: noop,\r\n canceled: function (file) {\r\n // return this.emit(\"error\", file, \"Upload canceled.\");\r\n },\r\n canceledmultiple: noop,\r\n complete: function (file) {\r\n if (file._removeLink) {\r\n file._removeLink.textContent = this.options.dictRemoveFile;\r\n }\r\n if (file.previewElement) {\r\n return file.previewElement.classList.add(\"dz-complete\");\r\n }\r\n },\r\n completemultiple: noop,\r\n maxfilesexceeded: noop,\r\n maxfilesreached: noop,\r\n queuecomplete: noop,\r\n addedfiles: noop,\r\n previewTemplate: \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n Check\\n \\n \\n \\n \\n \\n
\\n
\\n \\n Error\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\"\r\n };\r\n\r\n extend = function () {\r\n var key, object, objects, target, val, _i, _len;\r\n target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\r\n for (_i = 0, _len = objects.length; _i < _len; _i++) {\r\n object = objects[_i];\r\n for (key in object) {\r\n val = object[key];\r\n target[key] = val;\r\n }\r\n }\r\n return target;\r\n };\r\n\r\n function Dropzone(element, options) {\r\n var elementOptions, fallback, _ref;\r\n this.element = element;\r\n this.version = Dropzone.version;\r\n this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\\n*/g, \"\");\r\n this.clickableElements = [];\r\n this.listeners = [];\r\n this.files = [];\r\n if (typeof this.element === \"string\") {\r\n this.element = document.querySelector(this.element);\r\n }\r\n if (!(this.element && (this.element.nodeType != null))) {\r\n throw new Error(\"Invalid dropzone element.\");\r\n }\r\n if (this.element.dropzone) {\r\n throw new Error(\"Dropzone already attached.\");\r\n }\r\n Dropzone.instances.push(this);\r\n this.element.dropzone = this;\r\n elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {};\r\n this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});\r\n if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {\r\n return this.options.fallback.call(this);\r\n }\r\n if (this.options.url == null) {\r\n this.options.url = this.element.getAttribute(\"action\");\r\n }\r\n if (!this.options.url) {\r\n throw new Error(\"No URL provided.\");\r\n }\r\n if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {\r\n throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\r\n }\r\n if (this.options.acceptedMimeTypes) {\r\n this.options.acceptedFiles = this.options.acceptedMimeTypes;\r\n delete this.options.acceptedMimeTypes;\r\n }\r\n this.options.method = this.options.method.toUpperCase();\r\n if ((fallback = this.getExistingFallback()) && fallback.parentNode) {\r\n fallback.parentNode.removeChild(fallback);\r\n }\r\n if (this.options.previewsContainer !== false) {\r\n if (this.options.previewsContainer) {\r\n this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, \"previewsContainer\");\r\n } else {\r\n this.previewsContainer = this.element;\r\n }\r\n }\r\n if (this.options.previewsContainerPrepend !== false) {\r\n this.previewsContainerPrepend = this.options.previewsContainerPrepend;\r\n }\r\n if (this.options.clickable) {\r\n if (this.options.clickable === true) {\r\n this.clickableElements = [this.element];\r\n } else {\r\n this.clickableElements = Dropzone.getElements(this.options.clickable, \"clickable\");\r\n }\r\n }\r\n if (this.options.clickableElements) {\r\n this.clickableElements = this.options.clickableElements;\r\n }\r\n this.init();\r\n }\r\n\r\n Dropzone.prototype.getAcceptedFiles = function () {\r\n var file, _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.accepted) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.getRejectedFiles = function () {\r\n var file, _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (!file.accepted) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.getFilesWithStatus = function (status) {\r\n var file, _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.status === status) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.getQueuedFiles = function () {\r\n return this.getFilesWithStatus(Dropzone.QUEUED);\r\n };\r\n\r\n Dropzone.prototype.getUploadingFiles = function () {\r\n return this.getFilesWithStatus(Dropzone.UPLOADING);\r\n };\r\n\r\n Dropzone.prototype.getAddedFiles = function () {\r\n return this.getFilesWithStatus(Dropzone.ADDED);\r\n };\r\n\r\n Dropzone.prototype.getActiveFiles = function () {\r\n var file, _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.init = function () {\r\n var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1;\r\n if (this.element.tagName === \"form\") {\r\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\r\n }\r\n if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\r\n this.element.appendChild(Dropzone.createElement(\"
\" + this.options.dictDefaultMessage + \"
\"));\r\n }\r\n if (this.clickableElements.length) {\r\n setupHiddenFileInput = (function (_this) {\r\n return function () {\r\n if (_this.hiddenFileInput) {\r\n _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput);\r\n }\r\n _this.hiddenFileInput = document.createElement(\"input\");\r\n _this.hiddenFileInput.setAttribute(\"type\", \"file\");\r\n if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {\r\n _this.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\r\n }\r\n _this.hiddenFileInput.className = \"dz-hidden-input\";\r\n if (_this.options.acceptedFiles != null) {\r\n _this.hiddenFileInput.setAttribute(\"accept\", _this.options.acceptedFiles);\r\n }\r\n if (_this.options.capture != null) {\r\n _this.hiddenFileInput.setAttribute(\"capture\", _this.options.capture);\r\n }\r\n _this.hiddenFileInput.style.visibility = \"hidden\";\r\n _this.hiddenFileInput.style.position = \"absolute\";\r\n _this.hiddenFileInput.style.top = \"0\";\r\n _this.hiddenFileInput.style.left = \"0\";\r\n _this.hiddenFileInput.style.height = \"0\";\r\n _this.hiddenFileInput.style.width = \"0\";\r\n document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput);\r\n return _this.hiddenFileInput.addEventListener(\"change\", function () {\r\n var file, files, _i, _len;\r\n files = _this.hiddenFileInput.files;\r\n if (files.length) {\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n _this.addFile(file);\r\n }\r\n }\r\n _this.emit(\"addedfiles\", files);\r\n return setupHiddenFileInput();\r\n });\r\n };\r\n })(this);\r\n setupHiddenFileInput();\r\n }\r\n this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL;\r\n _ref1 = this.events;\r\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\r\n eventName = _ref1[_i];\r\n this.on(eventName, this.options[eventName]);\r\n }\r\n this.on(\"uploadprogress\", (function (_this) {\r\n return function () {\r\n return _this.updateTotalUploadProgress();\r\n };\r\n })(this));\r\n this.on(\"removedfile\", (function (_this) {\r\n return function () {\r\n return _this.updateTotalUploadProgress();\r\n };\r\n })(this));\r\n this.on(\"canceled\", (function (_this) {\r\n return function (file) {\r\n return _this.emit(\"complete\", file);\r\n };\r\n })(this));\r\n this.on(\"complete\", (function (_this) {\r\n return function (file) {\r\n if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {\r\n return setTimeout((function () {\r\n return _this.emit(\"queuecomplete\");\r\n }), 0);\r\n }\r\n };\r\n })(this));\r\n noPropagation = function (e) {\r\n e.stopPropagation();\r\n if (e.preventDefault) {\r\n return e.preventDefault();\r\n } else {\r\n return e.returnValue = false;\r\n }\r\n };\r\n this.listeners = [\r\n {\r\n element: this.element,\r\n events: {\r\n \"dragstart\": (function (_this) {\r\n return function (e) {\r\n return _this.emit(\"dragstart\", e);\r\n };\r\n })(this),\r\n \"dragenter\": (function (_this) {\r\n return function (e) {\r\n noPropagation(e);\r\n return _this.emit(\"dragenter\", e);\r\n };\r\n })(this),\r\n \"dragover\": (function (_this) {\r\n return function (e) {\r\n var efct;\r\n try {\r\n efct = e.dataTransfer.effectAllowed;\r\n } catch (_error) { }\r\n e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\r\n noPropagation(e);\r\n return _this.emit(\"dragover\", e);\r\n };\r\n })(this),\r\n \"dragleave\": (function (_this) {\r\n return function (e) {\r\n return _this.emit(\"dragleave\", e);\r\n };\r\n })(this),\r\n \"drop\": (function (_this) {\r\n return function (e) {\r\n noPropagation(e);\r\n return _this.drop(e);\r\n };\r\n })(this),\r\n \"dragend\": (function (_this) {\r\n return function (e) {\r\n return _this.emit(\"dragend\", e);\r\n };\r\n })(this)\r\n }\r\n }\r\n ];\r\n this.clickableElements.forEach((function (_this) {\r\n return function (clickableElement) {\r\n return _this.listeners.push({\r\n element: clickableElement,\r\n events: {\r\n \"click\": function (evt) {\r\n if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(\".dz-message\")))) {\r\n _this.hiddenFileInput.click();\r\n }\r\n return true;\r\n },\r\n \"dragstart\":\r\n function (e) {\r\n return _this.emit(\"dragstart\", e);\r\n },\r\n \"dragenter\": function (e) {\r\n noPropagation(e);\r\n return _this.emit(\"dragenter\", e);\r\n },\r\n \"dragover\": function (e) {\r\n var efct;\r\n try {\r\n efct = e.dataTransfer.effectAllowed;\r\n } catch (_error) { }\r\n e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\r\n noPropagation(e);\r\n return _this.emit(\"dragover\", e);\r\n },\r\n \"dragleave\": function (e) {\r\n return _this.emit(\"dragleave\", e);\r\n },\r\n \"drop\": function (e) {\r\n noPropagation(e);\r\n return _this.drop(e);\r\n },\r\n \"dragend\": function (e) {\r\n return _this.emit(\"dragend\", e);\r\n }\r\n }\r\n });\r\n };\r\n })(this));\r\n this.enable();\r\n return this.options.init.call(this);\r\n };\r\n\r\n Dropzone.prototype.updatePreviewContainer = function (previewContainer, prepend) {\r\n this.previewsContainer = previewContainer;\r\n this.previewsContainerPrepend = prepend;\r\n }\r\n\r\n\r\n Dropzone.prototype.addClickableElement = function (clickableElement, dropzone) {\r\n dropzone.clickableElements.push(clickableElement);\r\n clickableElement.classList.add(\"dz-clickable\");\r\n var noPropagation = function (e) {\r\n e.stopPropagation();\r\n if (e.preventDefault) {\r\n return e.preventDefault();\r\n } else {\r\n return e.returnValue = false;\r\n }\r\n };\r\n\r\n var onclick = function (evt) {\r\n if ((clickableElement !== dropzone.element) || (evt.target === dropzone.element || Dropzone.elementInside(evt.target, dropzone.dropzone.querySelector(\".dz-message\")))) {\r\n dropzone.hiddenFileInput.click();\r\n }\r\n return true;\r\n }\r\n\r\n clickableElement.addEventListener('click', onclick, false);\r\n clickableElement.addEventListener('dragstart', function (e) { dropzone.emit(\"dragstart\", e); }, false);\r\n clickableElement.addEventListener('dragenter', function (e) { noPropagation(e); dropzone.emit(\"dragenter\", e); }, false);\r\n clickableElement.addEventListener('dragover', function (e) {\r\n var effect;\r\n try {\r\n effect = e.dataTransfer.effectAllowed;\r\n } catch (_error) { }\r\n e.dataTransfer.dropEffect = 'move' === effect || 'linkMove' === effect ? 'move' : 'copy';\r\n noPropagation(e);\r\n return dropzone.emit(\"dragover\", e);\r\n }, false);\r\n clickableElement.addEventListener('dragleave', function (e) { dropzone.emit(\"dragleave\", e); }, false);\r\n clickableElement.addEventListener('drop', function (e) { noPropagation(e); dropzone.drop(e); }, false);\r\n clickableElement.addEventListener('dragend', function (e) { dropzone.emit(\"dragend\", e); }, false);\r\n }\r\n\r\n Dropzone.prototype.addElementAsDragAndDropArea = function (element, dropzone, dragDropClass) {\r\n dragDropClass = dragDropClass || 'dz-drag-hover';\r\n var noPropagation = function (e) {\r\n e.stopPropagation();\r\n if (e.preventDefault) {\r\n return e.preventDefault();\r\n } else {\r\n return e.returnValue = false;\r\n }\r\n };\r\n element.addEventListener('dragenter', function (e) { noPropagation(e); element.classList.add(dragDropClass); }, false);\r\n element.addEventListener('dragover', function (e) {\r\n var effect;\r\n try {\r\n effect = e.dataTransfer.effectAllowed;\r\n } catch (_error) { }\r\n e.dataTransfer.dropEffect = 'move' === effect || 'linkMove' === effect ? 'move' : 'copy';\r\n noPropagation(e);\r\n return element.classList.add(dragDropClass);\r\n }, false);\r\n element.addEventListener('dragleave', function (e) { element.classList.remove(dragDropClass); }, false);\r\n element.addEventListener('drop', function (e) { noPropagation(e); dropzone.drop(e); element.classList.remove(dragDropClass); }, false);\r\n }\r\n\r\n Dropzone.prototype.destroy = function () {\r\n var _ref;\r\n this.disable();\r\n this.removeAllFiles(true);\r\n if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) {\r\n this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\r\n this.hiddenFileInput = null;\r\n }\r\n delete this.element.dropzone;\r\n return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\r\n };\r\n\r\n Dropzone.prototype.updateTotalUploadProgress = function () {\r\n var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref;\r\n totalBytesSent = 0;\r\n totalBytes = 0;\r\n activeFiles = this.getActiveFiles();\r\n if (activeFiles.length) {\r\n _ref = this.getActiveFiles();\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n totalBytesSent += file.upload.bytesSent;\r\n totalBytes += file.upload.total;\r\n }\r\n totalUploadProgress = 100 * totalBytesSent / totalBytes;\r\n } else {\r\n totalUploadProgress = 100;\r\n }\r\n return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\r\n };\r\n\r\n Dropzone.prototype._getParamName = function (n) {\r\n if (typeof this.options.paramName === \"function\") {\r\n return this.options.paramName(n);\r\n } else {\r\n return \"\" + this.options.paramName + (this.options.uploadMultiple ? \"[\" + n + \"]\" : \"\");\r\n }\r\n };\r\n\r\n Dropzone.prototype._renameFilename = function (name) {\r\n if (typeof this.options.renameFilename !== \"function\") {\r\n return name;\r\n }\r\n return this.options.renameFilename(name);\r\n };\r\n\r\n Dropzone.prototype.getFallbackForm = function () {\r\n var existingFallback, fields, fieldsString, form;\r\n if (existingFallback = this.getExistingFallback()) {\r\n return existingFallback;\r\n }\r\n fieldsString = \"
\";\r\n if (this.options.dictFallbackText) {\r\n fieldsString += \"

\" + this.options.dictFallbackText + \"

\";\r\n }\r\n fieldsString += \"
\";\r\n fields = Dropzone.createElement(fieldsString);\r\n if (this.element.tagName !== \"FORM\") {\r\n form = Dropzone.createElement(\"
\");\r\n form.appendChild(fields);\r\n } else {\r\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\r\n this.element.setAttribute(\"method\", this.options.method);\r\n }\r\n return form != null ? form : fields;\r\n };\r\n\r\n Dropzone.prototype.getExistingFallback = function () {\r\n var fallback, getFallback, tagName, _i, _len, _ref;\r\n getFallback = function (elements) {\r\n var el, _i, _len;\r\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\r\n el = elements[_i];\r\n if (/(^| )fallback($| )/.test(el.className)) {\r\n return el;\r\n }\r\n }\r\n };\r\n _ref = [\"div\", \"form\"];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n tagName = _ref[_i];\r\n if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\r\n return fallback;\r\n }\r\n }\r\n };\r\n\r\n Dropzone.prototype.setupEventListeners = function () {\r\n var elementListeners, event, listener, _i, _len, _ref, _results;\r\n _ref = this.listeners;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n elementListeners = _ref[_i];\r\n _results.push((function () {\r\n var _ref1, _results1;\r\n _ref1 = elementListeners.events;\r\n _results1 = [];\r\n for (event in _ref1) {\r\n listener = _ref1[event];\r\n _results1.push(elementListeners.element.addEventListener(event, listener, false));\r\n }\r\n return _results1;\r\n })());\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.removeEventListeners = function () {\r\n var elementListeners, event, listener, _i, _len, _ref, _results;\r\n _ref = this.listeners;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n elementListeners = _ref[_i];\r\n _results.push((function () {\r\n var _ref1, _results1;\r\n _ref1 = elementListeners.events;\r\n _results1 = [];\r\n for (event in _ref1) {\r\n listener = _ref1[event];\r\n _results1.push(elementListeners.element.removeEventListener(event, listener, false));\r\n }\r\n return _results1;\r\n })());\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.disable = function () {\r\n var file, _i, _len, _ref, _results;\r\n this.clickableElements.forEach(function (element) {\r\n return element.classList.remove(\"dz-clickable\");\r\n });\r\n this.removeEventListeners();\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n _results.push(this.cancelUpload(file));\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.enable = function () {\r\n this.clickableElements.forEach(function (element) {\r\n return element.classList.add(\"dz-clickable\");\r\n });\r\n return this.setupEventListeners();\r\n };\r\n\r\n Dropzone.prototype.filesize = function (size) {\r\n var cutoff, i, selectedSize, selectedUnit, unit, units, _i, _len;\r\n selectedSize = 0;\r\n selectedUnit = \"b\";\r\n if (size > 0) {\r\n units = ['TB', 'GB', 'MB', 'KB', 'b'];\r\n for (i = _i = 0, _len = units.length; _i < _len; i = ++_i) {\r\n unit = units[i];\r\n cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\r\n if (size >= cutoff) {\r\n selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\r\n selectedUnit = unit;\r\n break;\r\n }\r\n }\r\n selectedSize = Math.round(10 * selectedSize) / 10;\r\n }\r\n return \"\" + selectedSize + \" \" + selectedUnit;\r\n };\r\n\r\n Dropzone.prototype._updateMaxFilesReachedClass = function () {\r\n if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\r\n if (this.getAcceptedFiles().length === this.options.maxFiles) {\r\n this.emit('maxfilesreached', this.files);\r\n }\r\n return this.element.classList.add(\"dz-max-files-reached\");\r\n } else {\r\n return this.element.classList.remove(\"dz-max-files-reached\");\r\n }\r\n };\r\n\r\n Dropzone.prototype.drop = function (e) {\r\n var files, items;\r\n if (!e.dataTransfer) {\r\n return;\r\n }\r\n this.emit(\"drop\", e);\r\n files = e.dataTransfer.files;\r\n this.emit(\"addedfiles\", files);\r\n for (var i = 0; i < files.length; i++) {\r\n this.addFile(files[i]);\r\n }\r\n };\r\n\r\n Dropzone.prototype.paste = function (e) {\r\n var items, _ref;\r\n if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {\r\n return;\r\n }\r\n this.emit(\"paste\", e);\r\n items = e.clipboardData.items;\r\n if (items.length) {\r\n return this._addFilesFromItems(items);\r\n }\r\n };\r\n\r\n Dropzone.prototype.handleFiles = function (files) {\r\n var file, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n _results.push(this.addFile(file));\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype._addFilesFromItems = function (items) {\r\n var entry, item, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = items.length; _i < _len; _i++) {\r\n item = items[_i];\r\n if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {\r\n if (entry.isFile) {\r\n _results.push(this.addFile(item.getAsFile()));\r\n } else if (entry.isDirectory) {\r\n _results.push(this._addFilesFromDirectory(entry, entry.name));\r\n } else {\r\n _results.push(void 0);\r\n }\r\n } else if (item.getAsFile != null) {\r\n if ((item.kind == null) || item.kind === \"file\") {\r\n _results.push(this.addFile(item.getAsFile()));\r\n } else {\r\n _results.push(void 0);\r\n }\r\n } else {\r\n _results.push(void 0);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype._addFilesFromDirectory = function (directory, path) {\r\n var dirReader, errorHandler, readEntries;\r\n dirReader = directory.createReader();\r\n errorHandler = function (error) {\r\n return typeof console !== \"undefined\" && console !== null ? typeof console.log === \"function\" ? console.log(error) : void 0 : void 0;\r\n };\r\n readEntries = (function (_this) {\r\n return function () {\r\n return dirReader.readEntries(function (entries) {\r\n var entry, _i, _len;\r\n if (entries.length > 0) {\r\n for (_i = 0, _len = entries.length; _i < _len; _i++) {\r\n entry = entries[_i];\r\n if (entry.isFile) {\r\n entry.file(function (file) {\r\n if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\r\n return;\r\n }\r\n file.fullPath = \"\" + path + \"/\" + file.name;\r\n return _this.addFile(file);\r\n });\r\n } else if (entry.isDirectory) {\r\n _this._addFilesFromDirectory(entry, \"\" + path + \"/\" + entry.name);\r\n }\r\n }\r\n readEntries();\r\n }\r\n return null;\r\n }, errorHandler);\r\n };\r\n })(this);\r\n return readEntries();\r\n };\r\n\r\n Dropzone.prototype.accept = function (file, done) {\r\n if (file.size > this.options.maxFilesize * 1024 * 1024) {\r\n return done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\r\n } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\r\n $(file.previewElement).remove();\r\n return done(this.options.dictInvalidFileType);\r\n } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\r\n done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\r\n return this.emit(\"maxfilesexceeded\", file);\r\n } else {\r\n return this.options.accept.call(this, file, done);\r\n }\r\n };\r\n\r\n Dropzone.prototype.addFile = function (file) {\r\n file.upload = {\r\n progress: 0,\r\n total: file.size,\r\n bytesSent: 0\r\n };\r\n this.files.push(file);\r\n file.status = Dropzone.ADDED;\r\n this.emit(\"addedfile\", file);\r\n this._enqueueThumbnail(file);\r\n return this.accept(file, (function (_this) {\r\n return function (error) {\r\n if (error) {\r\n file.accepted = false;\r\n _this._errorProcessing([file], error);\r\n } else {\r\n file.accepted = true;\r\n if (_this.options.autoQueue) {\r\n _this.enqueueFile(file);\r\n }\r\n }\r\n return _this._updateMaxFilesReachedClass();\r\n };\r\n })(this));\r\n };\r\n\r\n Dropzone.prototype.initExistingFile = function (file) {\r\n file.upload = {\r\n progress: 100,\r\n total: file.size,\r\n bytesSent: 0\r\n };\r\n this.files.push(file);\r\n file.status = Dropzone.SUCCESS;\r\n file.accepted = true;\r\n return this;\r\n };\r\n\r\n Dropzone.prototype.enqueueFiles = function (files) {\r\n var file, _i, _len;\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n this.enqueueFile(file);\r\n }\r\n return null;\r\n };\r\n\r\n Dropzone.prototype.enqueueFile = function (file) {\r\n if (file.status === Dropzone.ADDED && file.accepted === true) {\r\n file.status = Dropzone.QUEUED;\r\n if (this.options.autoProcessQueue) {\r\n return setTimeout(((function (_this) {\r\n return function () {\r\n return _this.processQueue();\r\n };\r\n })(this)), 0);\r\n }\r\n } else {\r\n throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\r\n }\r\n };\r\n\r\n Dropzone.prototype._thumbnailQueue = [];\r\n\r\n Dropzone.prototype._processingThumbnail = false;\r\n\r\n Dropzone.prototype._enqueueThumbnail = function (file) {\r\n if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\r\n this._thumbnailQueue.push(file);\r\n return setTimeout(((function (_this) {\r\n return function () {\r\n return _this._processThumbnailQueue();\r\n };\r\n })(this)), 0);\r\n }\r\n };\r\n\r\n Dropzone.prototype._processThumbnailQueue = function () {\r\n if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\r\n return;\r\n }\r\n this._processingThumbnail = true;\r\n return this.createThumbnail(this._thumbnailQueue.shift(), (function (_this) {\r\n return function () {\r\n _this._processingThumbnail = false;\r\n return _this._processThumbnailQueue();\r\n };\r\n })(this));\r\n };\r\n\r\n Dropzone.prototype.removeFile = function (file) {\r\n if (file.status === Dropzone.UPLOADING) {\r\n this.cancelUpload(file);\r\n }\r\n if (file.status === Dropzone.QUEUED) {\r\n $(file.previewElement).remove();\r\n }\r\n this.files = without(this.files, file);\r\n this.emit(\"removedfile\", file);\r\n if (this.files.length === 0) {\r\n return this.emit(\"reset\");\r\n }\r\n };\r\n\r\n Dropzone.prototype.removeAllFiles = function (cancelIfNecessary) {\r\n var file, _i, _len, _ref;\r\n if (cancelIfNecessary == null) {\r\n cancelIfNecessary = false;\r\n }\r\n _ref = this.files.slice();\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\r\n this.removeFile(file);\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n Dropzone.prototype.createThumbnail = function (file, callback) {\r\n var fileReader;\r\n fileReader = new FileReader;\r\n fileReader.onload = (function (_this) {\r\n return function () {\r\n if (file.type === \"image/svg+xml\") {\r\n _this.emit(\"thumbnail\", file, fileReader.result);\r\n if (callback != null) {\r\n callback();\r\n }\r\n return;\r\n }\r\n return _this.createThumbnailFromUrl(file, fileReader.result, callback);\r\n };\r\n })(this);\r\n return fileReader.readAsDataURL(file);\r\n };\r\n\r\n Dropzone.prototype.createThumbnailFromUrl = function (file, imageUrl, callback, crossOrigin) {\r\n var img;\r\n img = document.createElement(\"img\");\r\n if (crossOrigin) {\r\n img.crossOrigin = crossOrigin;\r\n }\r\n img.onload = (function (_this) {\r\n return function () {\r\n var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3;\r\n file.width = img.width;\r\n file.height = img.height;\r\n resizeInfo = _this.options.resize.call(_this, file);\r\n if (resizeInfo.trgWidth == null) {\r\n resizeInfo.trgWidth = resizeInfo.optWidth;\r\n }\r\n if (resizeInfo.trgHeight == null) {\r\n resizeInfo.trgHeight = resizeInfo.optHeight;\r\n }\r\n canvas = document.createElement(\"canvas\");\r\n ctx = canvas.getContext(\"2d\");\r\n canvas.width = resizeInfo.trgWidth;\r\n canvas.height = resizeInfo.trgHeight;\r\n drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\r\n thumbnail = canvas.toDataURL(\"image/png\");\r\n _this.emit(\"thumbnail\", file, thumbnail);\r\n if (callback != null) {\r\n return callback();\r\n }\r\n };\r\n })(this);\r\n if (callback != null) {\r\n img.onerror = callback;\r\n }\r\n return img.src = imageUrl;\r\n };\r\n\r\n Dropzone.prototype.processQueue = function () {\r\n var i, parallelUploads, processingLength, queuedFiles;\r\n parallelUploads = this.options.parallelUploads;\r\n processingLength = this.getUploadingFiles().length;\r\n i = processingLength;\r\n if (processingLength >= parallelUploads) {\r\n return;\r\n }\r\n queuedFiles = this.getQueuedFiles();\r\n if (!(queuedFiles.length > 0)) {\r\n return;\r\n }\r\n if (this.options.uploadMultiple) {\r\n return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\r\n } else {\r\n while (i < parallelUploads) {\r\n if (!queuedFiles.length) {\r\n return;\r\n }\r\n this.processFile(queuedFiles.shift());\r\n i++;\r\n }\r\n }\r\n };\r\n\r\n Dropzone.prototype.processFile = function (file) {\r\n return this.processFiles([file]);\r\n };\r\n\r\n Dropzone.prototype.processFiles = function (files) {\r\n var file, _i, _len;\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n file.processing = true;\r\n file.status = Dropzone.UPLOADING;\r\n this.emit(\"processing\", file);\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"processingmultiple\", files);\r\n }\r\n return this.uploadFiles(files);\r\n };\r\n\r\n Dropzone.prototype._getFilesWithXhr = function (xhr) {\r\n var file, files;\r\n return files = (function () {\r\n var _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.xhr === xhr) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n }).call(this);\r\n };\r\n\r\n Dropzone.prototype.cancelUpload = function (file) {\r\n var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;\r\n if (file.status === Dropzone.UPLOADING) {\r\n groupedFiles = this._getFilesWithXhr(file.xhr);\r\n for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) {\r\n groupedFile = groupedFiles[_i];\r\n groupedFile.status = Dropzone.CANCELED;\r\n }\r\n file.xhr.abort();\r\n for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) {\r\n groupedFile = groupedFiles[_j];\r\n this.emit(\"canceled\", groupedFile);\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"canceledmultiple\", groupedFiles);\r\n }\r\n } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {\r\n file.status = Dropzone.CANCELED;\r\n this.emit(\"canceled\", file);\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"canceledmultiple\", [file]);\r\n }\r\n }\r\n if (this.options.autoProcessQueue) {\r\n return this.processQueue();\r\n }\r\n };\r\n\r\n resolveOption = function () {\r\n var args, option;\r\n option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\r\n if (typeof option === 'function') {\r\n return option.apply(this, args);\r\n }\r\n return option;\r\n };\r\n\r\n Dropzone.prototype.uploadFile = function (file) {\r\n return this.uploadFiles([file]);\r\n };\r\n\r\n Dropzone.prototype.uploadFiles = function (files) {\r\n var file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, key, method, option, progressObj, response, updateProgress, url, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;\r\n xhr = new XMLHttpRequest();\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n file.xhr = xhr;\r\n }\r\n method = resolveOption(this.options.method, files);\r\n url = resolveOption(this.options.url, files);\r\n xhr.open(method, url, true);\r\n xhr.withCredentials = !!this.options.withCredentials;\r\n response = null;\r\n handleError = (function (_this) {\r\n return function () {\r\n var _j, _len1, _results;\r\n _results = [];\r\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\r\n file = files[_j];\r\n _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr));\r\n }\r\n return _results;\r\n };\r\n })(this);\r\n updateProgress = (function (_this) {\r\n return function (e) {\r\n var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results;\r\n if (e != null) {\r\n progress = 100 * e.loaded / e.total;\r\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\r\n file = files[_j];\r\n file.upload = {\r\n progress: progress,\r\n total: e.total,\r\n bytesSent: e.loaded\r\n };\r\n }\r\n } else {\r\n allFilesFinished = true;\r\n progress = 100;\r\n for (_k = 0, _len2 = files.length; _k < _len2; _k++) {\r\n file = files[_k];\r\n if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {\r\n allFilesFinished = false;\r\n }\r\n file.upload.progress = progress;\r\n file.upload.bytesSent = file.upload.total;\r\n }\r\n if (allFilesFinished) {\r\n return;\r\n }\r\n }\r\n _results = [];\r\n for (_l = 0, _len3 = files.length; _l < _len3; _l++) {\r\n file = files[_l];\r\n _results.push(_this.emit(\"uploadprogress\", file, progress, file.upload.bytesSent));\r\n }\r\n return _results;\r\n };\r\n })(this);\r\n xhr.onload = (function (_this) {\r\n return function (e) {\r\n var _ref;\r\n if (files[0].status === Dropzone.CANCELED) {\r\n return;\r\n }\r\n if (xhr.readyState !== 4) {\r\n return;\r\n }\r\n response = xhr.responseText;\r\n if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\r\n try {\r\n response = JSON.parse(response);\r\n } catch (_error) {\r\n e = _error;\r\n response = \"Invalid JSON response from server.\";\r\n }\r\n }\r\n updateProgress();\r\n if (!((200 <= (_ref = xhr.status) && _ref < 300))) {\r\n return handleError();\r\n } else {\r\n return _this._finished(files, response, e);\r\n }\r\n };\r\n })(this);\r\n xhr.onerror = (function (_this) {\r\n return function () {\r\n if (files[0].status === Dropzone.CANCELED) {\r\n return;\r\n }\r\n return handleError();\r\n };\r\n })(this);\r\n progressObj = (_ref = xhr.upload) != null ? _ref : xhr;\r\n progressObj.onprogress = updateProgress;\r\n headers = {\r\n \"Accept\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n \"X-Requested-With\": \"XMLHttpRequest\"\r\n };\r\n if (this.options.headers) {\r\n extend(headers, this.options.headers);\r\n }\r\n for (headerName in headers) {\r\n headerValue = headers[headerName];\r\n if (headerValue) {\r\n xhr.setRequestHeader(headerName, headerValue);\r\n }\r\n }\r\n formData = new FormData();\r\n if (this.options.params) {\r\n _ref1 = this.options.params;\r\n for (key in _ref1) {\r\n value = _ref1[key];\r\n formData.append(key, value);\r\n }\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"sendingmultiple\", files, xhr, formData);\r\n }\r\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\r\n file = files[_j];\r\n this.emit(\"sending\", file, xhr, formData);\r\n }\r\n if (this.element.tagName === \"FORM\") {\r\n _ref2 = this.element.querySelectorAll(\"input, textarea, select, button\");\r\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\r\n input = _ref2[_k];\r\n inputName = input.getAttribute(\"name\");\r\n inputType = input.getAttribute(\"type\");\r\n if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\r\n _ref3 = input.options;\r\n for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {\r\n option = _ref3[_l];\r\n if (option.selected) {\r\n formData.append(inputName, option.value);\r\n }\r\n }\r\n } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== \"checkbox\" && _ref4 !== \"radio\") || input.checked) {\r\n formData.append(inputName, input.value);\r\n }\r\n }\r\n }\r\n for (i = _m = 0, _ref5 = files.length - 1; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) {\r\n formData.append(this._getParamName(i), files[i], this._renameFilename(files[i].name));\r\n }\r\n return this.submitRequest(xhr, formData, files);\r\n };\r\n\r\n Dropzone.prototype.submitRequest = function (xhr, formData, files) {\r\n return xhr.send(formData);\r\n };\r\n\r\n Dropzone.prototype._finished = function (files, responseText, e) {\r\n var file, _i, _len;\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n file.status = Dropzone.SUCCESS;\r\n this.emit(\"success\", file, responseText, e);\r\n this.emit(\"complete\", file);\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"successmultiple\", files, responseText, e);\r\n this.emit(\"completemultiple\", files);\r\n }\r\n if (this.options.autoProcessQueue) {\r\n return this.processQueue();\r\n }\r\n };\r\n\r\n Dropzone.prototype._errorProcessing = function (files, message, xhr) {\r\n var file, _i, _len;\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n file.status = Dropzone.ERROR;\r\n this.emit(\"error\", file, message, xhr);\r\n this.emit(\"complete\", file);\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"errormultiple\", files, message, xhr);\r\n this.emit(\"completemultiple\", files);\r\n }\r\n if (this.options.autoProcessQueue) {\r\n return this.processQueue();\r\n }\r\n };\r\n\r\n return Dropzone;\r\n\r\n })(Emitter);\r\n\r\n Dropzone.version = \"4.3.0\";\r\n\r\n Dropzone.options = {};\r\n\r\n Dropzone.optionsForElement = function (element) {\r\n if (element.getAttribute(\"id\")) {\r\n return Dropzone.options[camelize(element.getAttribute(\"id\"))];\r\n } else {\r\n return void 0;\r\n }\r\n };\r\n\r\n Dropzone.instances = [];\r\n\r\n Dropzone.forElement = function (element) {\r\n if (typeof element === \"string\") {\r\n element = document.querySelector(element);\r\n }\r\n if ((element != null ? element.dropzone : void 0) == null) {\r\n throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\r\n }\r\n return element.dropzone;\r\n };\r\n\r\n Dropzone.autoDiscover = false;\r\n\r\n Dropzone.discover = function () {\r\n var checkElements, dropzone, dropzones, _i, _len, _results;\r\n if (document.querySelectorAll) {\r\n dropzones = document.querySelectorAll(\".dropzone\");\r\n } else {\r\n dropzones = [];\r\n checkElements = function (elements) {\r\n var el, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\r\n el = elements[_i];\r\n if (/(^| )dropzone($| )/.test(el.className)) {\r\n _results.push(dropzones.push(el));\r\n } else {\r\n _results.push(void 0);\r\n }\r\n }\r\n return _results;\r\n };\r\n checkElements(document.getElementsByTagName(\"div\"));\r\n checkElements(document.getElementsByTagName(\"form\"));\r\n }\r\n _results = [];\r\n for (_i = 0, _len = dropzones.length; _i < _len; _i++) {\r\n dropzone = dropzones[_i];\r\n if (Dropzone.optionsForElement(dropzone) !== false) {\r\n _results.push(new Dropzone(dropzone));\r\n } else {\r\n _results.push(void 0);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\\/12/i];\r\n\r\n Dropzone.isBrowserSupported = function () {\r\n var capableBrowser, regex, _i, _len, _ref;\r\n capableBrowser = true;\r\n if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\r\n if (!(\"classList\" in document.createElement(\"a\"))) {\r\n capableBrowser = false;\r\n } else {\r\n _ref = Dropzone.blacklistedBrowsers;\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n regex = _ref[_i];\r\n if (regex.test(navigator.userAgent)) {\r\n capableBrowser = false;\r\n continue;\r\n }\r\n }\r\n }\r\n } else {\r\n capableBrowser = false;\r\n }\r\n return capableBrowser;\r\n };\r\n\r\n without = function (list, rejectedItem) {\r\n var item, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = list.length; _i < _len; _i++) {\r\n item = list[_i];\r\n if (item !== rejectedItem) {\r\n _results.push(item);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n camelize = function (str) {\r\n return str.replace(/[\\-_](\\w)/g, function (match) {\r\n return match.charAt(1).toUpperCase();\r\n });\r\n };\r\n\r\n Dropzone.createElement = function (string) {\r\n var div;\r\n div = document.createElement(\"div\");\r\n div.innerHTML = string;\r\n return div.childNodes[0];\r\n };\r\n\r\n Dropzone.elementInside = function (element, container) {\r\n if (element === container) {\r\n return true;\r\n }\r\n while (element = element.parentNode) {\r\n if (element === container) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n Dropzone.getElement = function (el, name) {\r\n var element;\r\n if (typeof el === \"string\") {\r\n element = document.querySelector(el);\r\n } else if (el.nodeType != null) {\r\n element = el;\r\n }\r\n if (element == null) {\r\n throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector or a plain HTML element.\");\r\n }\r\n return element;\r\n };\r\n\r\n Dropzone.getElements = function (els, name) {\r\n var e, el, elements, _i, _j, _len, _len1, _ref;\r\n if (els instanceof Array) {\r\n elements = [];\r\n try {\r\n for (_i = 0, _len = els.length; _i < _len; _i++) {\r\n el = els[_i];\r\n elements.push(this.getElement(el, name));\r\n }\r\n } catch (_error) {\r\n e = _error;\r\n elements = null;\r\n }\r\n } else if (typeof els === \"string\") {\r\n elements = [];\r\n _ref = document.querySelectorAll(els);\r\n for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\r\n el = _ref[_j];\r\n elements.push(el);\r\n }\r\n } else if (els.nodeType != null) {\r\n elements = [els];\r\n }\r\n if (!((elements != null) && elements.length)) {\r\n throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\");\r\n }\r\n return elements;\r\n };\r\n\r\n Dropzone.confirm = function (question, accepted, rejected) {\r\n if (window.confirm(question)) {\r\n return accepted();\r\n } else if (rejected != null) {\r\n return rejected();\r\n }\r\n };\r\n\r\n Dropzone.isValidFile = function (file, acceptedFiles) {\r\n var baseMimeType, mimeType, validType, _i, _len;\r\n if (!acceptedFiles) {\r\n return true;\r\n }\r\n acceptedFiles = acceptedFiles.split(\",\");\r\n mimeType = file.type;\r\n baseMimeType = mimeType.replace(/\\/.*$/, \"\");\r\n for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) {\r\n validType = acceptedFiles[_i];\r\n validType = validType.trim();\r\n if (validType.charAt(0) === \".\") {\r\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\r\n return true;\r\n }\r\n } else if (/\\/\\*$/.test(validType)) {\r\n if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\r\n return true;\r\n }\r\n } else {\r\n if (mimeType === validType) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n if (typeof jQuery !== \"undefined\" && jQuery !== null) {\r\n jQuery.fn.dropzone = function (options) {\r\n return this.each(function () {\r\n return new Dropzone(this, options);\r\n });\r\n };\r\n }\r\n\r\n if (typeof module !== \"undefined\" && module !== null) {\r\n module.exports = Dropzone;\r\n } else {\r\n window.Dropzone = Dropzone;\r\n }\r\n\r\n Dropzone.ADDED = \"added\";\r\n\r\n Dropzone.QUEUED = \"queued\";\r\n\r\n Dropzone.ACCEPTED = Dropzone.QUEUED;\r\n\r\n Dropzone.UPLOADING = \"uploading\";\r\n\r\n Dropzone.PROCESSING = Dropzone.UPLOADING;\r\n\r\n Dropzone.CANCELED = \"canceled\";\r\n\r\n Dropzone.ERROR = \"error\";\r\n\r\n Dropzone.SUCCESS = \"success\";\r\n\r\n\r\n /*\r\n \r\n Bugfix for iOS 6 and 7\r\n Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\r\n based on the work of https://github.com/stomita/ios-imagefile-megapixel\r\n */\r\n\r\n detectVerticalSquash = function (img) {\r\n var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;\r\n iw = img.naturalWidth;\r\n ih = img.naturalHeight;\r\n canvas = document.createElement(\"canvas\");\r\n canvas.width = 1;\r\n canvas.height = ih;\r\n ctx = canvas.getContext(\"2d\");\r\n ctx.drawImage(img, 0, 0);\r\n data = ctx.getImageData(0, 0, 1, ih).data;\r\n sy = 0;\r\n ey = ih;\r\n py = ih;\r\n while (py > sy) {\r\n alpha = data[(py - 1) * 4 + 3];\r\n if (alpha === 0) {\r\n ey = py;\r\n } else {\r\n sy = py;\r\n }\r\n py = (ey + sy) >> 1;\r\n }\r\n ratio = py / ih;\r\n if (ratio === 0) {\r\n return 1;\r\n } else {\r\n return ratio;\r\n }\r\n };\r\n\r\n drawImageIOSFix = function (ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\r\n var vertSquashRatio;\r\n vertSquashRatio = detectVerticalSquash(img);\r\n return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\r\n };\r\n\r\n\r\n /*\r\n * contentloaded.js\r\n *\r\n * Author: Diego Perini (diego.perini at gmail.com)\r\n * Summary: cross-browser wrapper for DOMContentLoaded\r\n * Updated: 20101020\r\n * License: MIT\r\n * Version: 1.2\r\n *\r\n * URL:\r\n * http://javascript.nwbox.com/ContentLoaded/\r\n * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\r\n */\r\n\r\n contentLoaded = function (win, fn) {\r\n var add, doc, done, init, poll, pre, rem, root, top;\r\n done = false;\r\n top = true;\r\n doc = win.document;\r\n root = doc.documentElement;\r\n add = (doc.addEventListener ? \"addEventListener\" : \"attachEvent\");\r\n rem = (doc.addEventListener ? \"removeEventListener\" : \"detachEvent\");\r\n pre = (doc.addEventListener ? \"\" : \"on\");\r\n init = function (e) {\r\n if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\r\n return;\r\n }\r\n (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\r\n if (!done && (done = true)) {\r\n return fn.call(win, e.type || e);\r\n }\r\n };\r\n poll = function () {\r\n var e;\r\n try {\r\n root.doScroll(\"left\");\r\n } catch (_error) {\r\n e = _error;\r\n setTimeout(poll, 50);\r\n return;\r\n }\r\n return init(\"poll\");\r\n };\r\n if (doc.readyState !== \"complete\") {\r\n if (doc.createEventObject && root.doScroll) {\r\n try {\r\n top = !win.frameElement;\r\n } catch (_error) { }\r\n if (top) {\r\n poll();\r\n }\r\n }\r\n doc[add](pre + \"DOMContentLoaded\", init, false);\r\n doc[add](pre + \"readystatechange\", init, false);\r\n return win[add](pre + \"load\", init, false);\r\n }\r\n };\r\n\r\n Dropzone._autoDiscoverFunction = function () {\r\n if (Dropzone.autoDiscover) {\r\n return Dropzone.discover();\r\n }\r\n };\r\n\r\n contentLoaded(window, Dropzone._autoDiscoverFunction);\r\n\r\n}).call(this);\r\n","import '../../js/utilities/dropzone.js';\r\nimport Modal from \"./modal\";\r\nimport Confirmation from \"./confirmation\";\r\nimport RequestVerificationToken from \"../utilities/requestverificationtoken\";\r\nimport $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n dropzone(IDropzoneOptions?: any): JQuery;\r\n thumbnailupload: (option) => any;\r\n }\r\n\r\n interface HTMLElement {\r\n dropzone: Dropzone;\r\n }\r\n\r\n interface File {\r\n previewElement: HTMLElement;\r\n size: number;\r\n }\r\n}\r\n\r\nexport interface Dropzone {\r\n clickableElements: HTMLElement[];\r\n files: File[];\r\n\r\n optionCallbacks: any;\r\n\r\n addClickableElement(clickableElement: HTMLElement, dropzone: Dropzone);\r\n addElementAsDragAndDropArea(element: HTMLElement, dropzone: Dropzone, dragHoverClass?: string);\r\n addFile(file: File);\r\n initExistingFile(file: File);\r\n emit(action: string, file: File, errorMessage: string, e: any);\r\n getUploadingFiles(): File[];\r\n getQueuedFiles(): File[];\r\n removeFile(file: File);\r\n updatePreviewContainer(previewContainer: HTMLElement, previewContainerPrepend: HTMLElement);\r\n}\r\n\r\n\r\nexport class ThumbnailUpload {\r\n static get wireup(): string { return '[data-thumbnailupload-id]'; }\r\n\r\n private static get thumbnailId(): string { return 'tu-thumbnail-id'; }\r\n private static get uploadSuccess(): string { return 'tu-success'; }\r\n private static get uploadError(): string { return 'tu-error'; }\r\n private static get thumbnailRemove(): string { return 'tu-remove'; }\r\n private static get dropzonePreserver(): string { return 'thumbnailUploadPreserver'; }\r\n private static get prependAttribute(): string { return 'tu-prepend'; }\r\n private static get previewTemplate(): string { return 'tu-preview-template'; }\r\n private static get tuUploading(): string { return 'tu-uploading'; }\r\n private static get tuEmpty(): string { return 'tu-empty'; }\r\n\r\n public DEFAULTS: IThumbnailUploadOptions = {\r\n $dropzone: null,\r\n $previewContainer: null,\r\n uniqueId: null\r\n }\r\n\r\n private $element: JQuery;\r\n private options: IThumbnailUploadOptions;\r\n private dropzone: Dropzone;\r\n\r\n public constructor(options: IThumbnailUploadOptions) {\r\n this.options = $.extend({}, this.DEFAULTS, options);\r\n\r\n if (!this.options.$dropzone || this.options.$dropzone.length <= 0)\r\n throw new Error('$dropzone cannot be null');\r\n if (!this.options.$previewContainer || this.options.$previewContainer.length <= 0)\r\n throw new Error('$previewContainer cannot be null');\r\n if (!this.options.uniqueId)\r\n throw new Error('uniqueId cannot be null');\r\n\r\n this.$element = this.options.$dropzone;\r\n\r\n let uploadPreserverId = 'thumbnailUploadPreserver' + this.options.uniqueId;\r\n let $uploadPreserver = $('#' + uploadPreserverId);\r\n if ($uploadPreserver.length <= 0)\r\n this.createUploadPreserver(uploadPreserverId);\r\n else\r\n this.updateDropzone($uploadPreserver);\r\n }\r\n\r\n public addElementAsDragAndDropArea(element: HTMLElement) {\r\n this.dropzone.addElementAsDragAndDropArea(element, this.dropzone, 'tu-drag-hover');\r\n }\r\n\r\n public initFile(file: File) {\r\n this.dropzone.initExistingFile(file);\r\n }\r\n\r\n public addFile(file: File) {\r\n this.dropzone.addFile(file);\r\n }\r\n\r\n public removeFile(file: File) {\r\n if (!file)\r\n return;\r\n\r\n this.dropzone.removeFile(file);\r\n }\r\n\r\n public getUploadingFiles(): File[] {\r\n return this.dropzone.getUploadingFiles();\r\n }\r\n\r\n public getAllFiles(): File[] {\r\n return this.dropzone.files;\r\n }\r\n\r\n private createUploadPreserver(id: string): void {\r\n let $uploadPreserver = $('');\r\n $(document.body).append($uploadPreserver);\r\n $uploadPreserver.dropzone(this.getDefaultOptions());\r\n this.dropzone = $uploadPreserver[0].dropzone;\r\n }\r\n\r\n private getDefaultOptions(): any {\r\n let self = this;\r\n\r\n return {\r\n accept: this.options.accept ? (file, done) => this.dropzone.optionCallbacks.accept(file, done) : (file, done) => done(),\r\n acceptedFiles: self.$element.data('tu-file-types'),\r\n clickable: false,\r\n clickableElements: [self.$element[0]],\r\n confirm: ThumbnailUpload.confirm,\r\n dictDefaultMessage: '',\r\n hiddenInputContainer: '#' + ThumbnailUpload.dropzonePreserver + self.options.uniqueId,\r\n maxFiles: self.$element.data('tu-max-files') || null,\r\n maxFilesize: self.$element.data('tu-max-file-size') || 256,\r\n maxThumbnailFilesize: self.$element.data('tu-max-thumbnail-filesize') || 10,\r\n parallelUploads: self.$element.data('tu-parallel-uploads') || 2,\r\n previewsContainer: self.options.$previewContainer[0],\r\n previewsContainerPrepend: self.options.$previewContainer.find(ThumbnailUpload.prependAttribute.asDataSelector())[0],\r\n previewTemplate: self.getPreviewTemplate() || self.getDefaultPreviewTemplate(),\r\n removedfile: function () { },\r\n renameFilename: (name: string) => encodeURIComponent(name),\r\n thumbnailHeight: 150,\r\n thumbnailSquare: true,\r\n thumbnailWidth: 150,\r\n uploadMultiple: self.$element.data('tu-upload-multiple') ? true : null,\r\n url: self.$element.data('tu-url'),\r\n\r\n init: function () {\r\n this.on('addedfile', function (file: File) {\r\n let dropzone = this;\r\n let $thumbnail = $(file.previewElement);\r\n $thumbnail.find('[data-tu-name]').attr('title', file.name).attr('value', file.name).text(file.name);\r\n $thumbnail.find('[data-tu-remove]').on('click.rustig', () => dropzone.removeFile(file));\r\n });\r\n let removeDragHoverClass = function () {\r\n let removeClass = (value: HTMLElement) => value.classList.remove('tu-drag-hover');\r\n self.dropzone.clickableElements.forEach(removeClass);\r\n };\r\n this.on('drop', removeDragHoverClass);\r\n this.on('dragend', removeDragHoverClass);\r\n this.on('dragleave', removeDragHoverClass);\r\n let addDragHoverClass = function () {\r\n let addClass = (value: HTMLElement) => value.classList.add('tu-drag-hover');\r\n self.dropzone.clickableElements.forEach(addClass);\r\n };\r\n this.on('dragenter', addDragHoverClass);\r\n this.on('dragover', addDragHoverClass);\r\n this.on('thumbnail', function (file: File, dataUrl: string) {\r\n let $thumbnail = $(file.previewElement);\r\n $thumbnail.find('[data-tu-thumbnail]').attr('src', dataUrl);\r\n });\r\n this.on('uploadprogress', function (file: File, progress: number, bytesSent: number) {\r\n let $thumbnail = $(file.previewElement);\r\n $thumbnail.find('[data-tu-uploadprogress]').width(progress + '%');\r\n });\r\n\r\n this.on('addedfile', self.onFileAdded);\r\n this.on('canceled', self.onCanceled);\r\n this.on('sending', self.onSending.bind(self));\r\n this.on('sendingmultiple', self.onSendingMultiple.bind(self));\r\n this.on('success', self.onUploadComplete.bind(self));\r\n\r\n this.optionCallbacks = self.options;\r\n\r\n if (self.options.onUploadComplete) {\r\n this.on('success', function (file: File, responseText: any, e: any) {\r\n this.optionCallbacks.onUploadComplete(file, responseText, e);\r\n });\r\n }\r\n\r\n if (self.options.onFileAdded) {\r\n this.on('addedfile', function (file: File) {\r\n this.optionCallbacks.onFileAdded(file)\r\n });\r\n }\r\n\r\n if (self.options.onError) {\r\n this.on('error', function (file: File, errorMessage: string, e?: any) {\r\n this.optionCallbacks.onError(file, errorMessage, e);\r\n });\r\n }\r\n else\r\n this.on('error', self.onError);\r\n\r\n if (self.options.onThumbnailGenerated) {\r\n this.on('thumbnail', function (file: File, dataUrl: string) {\r\n this.optionCallbacks.onThumbnailGenerated(file, dataUrl);\r\n });\r\n }\r\n }\r\n };\r\n }\r\n\r\n private getPreviewTemplate(): string {\r\n let $previewTemplateContainer = this.options.$previewContainer.find(ThumbnailUpload.previewTemplate.asDataSelector());\r\n if ($previewTemplateContainer.length > 0) {\r\n let $previewTemplate = $previewTemplateContainer.find(':first');\r\n $previewTemplate.find(ThumbnailUpload.uploadSuccess.asDataSelector() + ', ' + ThumbnailUpload.uploadError.asDataSelector()).attr('hidden', 'hidden');\r\n return $previewTemplateContainer.html();\r\n }\r\n }\r\n\r\n private getDefaultPreviewTemplate(): string {\r\n return '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '' +\r\n '
' +\r\n 'Uploading' +\r\n '
' +\r\n ' ' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '

' +\r\n '(cancel)' +\r\n '' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
';\r\n }\r\n\r\n private onFileAdded(file: File): void {\r\n let $thumbnail = $(file.previewElement);\r\n let thumbnailId = $(ThumbnailUpload.thumbnailId.asDataSelector()).length;\r\n $thumbnail.attr(ThumbnailUpload.thumbnailId.asData(), thumbnailId);\r\n\r\n window.Application.wireupConventions($(file.previewElement));\r\n }\r\n\r\n private onCanceled(file: File): void {\r\n $(file.previewElement).remove();\r\n }\r\n\r\n private onSending(file: File, xhr: JQueryXHR, formData: FormData): void {\r\n let $thumbnail = $(file.previewElement);\r\n if ($thumbnail.data('tu-already-sent'))\r\n return;\r\n\r\n this.addFormData(formData, $thumbnail.data(ThumbnailUpload.thumbnailId));\r\n }\r\n\r\n private onSendingMultiple(files: File[], xhr: JQueryXHR, formData: FormData): void {\r\n let thumbnailIds = '';\r\n for (let i = 0; i < files.length; i++) {\r\n let $thumbnail = $(files[i].previewElement);\r\n if (thumbnailIds === '')\r\n thumbnailIds = $thumbnail.data(ThumbnailUpload.thumbnailId);\r\n else\r\n thumbnailIds = thumbnailIds + ',' + $thumbnail.data(ThumbnailUpload.thumbnailId);\r\n $thumbnail.data('tu-already-sent', true);\r\n }\r\n\r\n this.addFormData(formData, thumbnailIds);\r\n }\r\n\r\n private addFormData(formData: FormData, thumbnailIds: string) {\r\n formData.append('thumbnailIds', thumbnailIds);\r\n let token = new RequestVerificationToken();\r\n formData.append(token.key, token.value);\r\n }\r\n\r\n private onUploadComplete(file: File, responseText: string | IUploadCompleteResponse[], e: any): void {\r\n if (!responseText || !responseText.length) {\r\n this.dropzone.emit('error', file, 'An unexpected error has occured', e);\r\n return;\r\n }\r\n else if (responseText == ThumbnailUpload.tuEmpty) {\r\n return;\r\n }\r\n\r\n let response = this.getServerResponseFor(file, responseText, e);\r\n let $thumbnail = $(file.previewElement);\r\n\r\n if (response.html)\r\n $thumbnail.replaceWith($(response.html));\r\n else {\r\n $thumbnail.find(ThumbnailUpload.tuUploading.asDataSelector()).remove();\r\n\r\n if (response.errorText) {\r\n if (this.options.onError)\r\n this.dropzone.emit('error', file, response.errorText, e);\r\n else\r\n this.onUploadError($thumbnail, response.errorText);\r\n }\r\n else if (response.serverId)\r\n this.onUploadSuccess($thumbnail, response);\r\n else {\r\n this.dropzone.emit('error', file, 'An unexpected error has occured', e);\r\n throw new Error('Server response not properly formatted for thumbnailId' + response.thumbnailId);\r\n }\r\n }\r\n }\r\n\r\n private getServerResponseFor(file: File, responseText: IUploadCompleteResponse[], e: any): IUploadCompleteResponse {\r\n let thumbnailId = $(file.previewElement).data(ThumbnailUpload.thumbnailId);\r\n let response;\r\n for (let i = 0; i < responseText.length; i++) {\r\n if (responseText[i].thumbnailId === thumbnailId) {\r\n response = responseText[i];\r\n break;\r\n }\r\n }\r\n\r\n if (!response) {\r\n this.dropzone.emit('error', file, 'An unexpected error has occured', e);\r\n throw new Error('No response from server for thumbnailId' + thumbnailId);\r\n }\r\n\r\n return response\r\n }\r\n\r\n private onUploadError($thumbnail: JQuery, errorText: string): void {\r\n $thumbnail.attr('title', errorText);\r\n $thumbnail.find(ThumbnailUpload.uploadError.asDataSelector()).removeAttr('hidden');\r\n $thumbnail.find('[data-tu-error-toggle-enabled]').each(this.toggleEnabled);\r\n\r\n $thumbnail.find('[data-tu-error-remove]').on('click.rustig', this.removeElementAndClickDropzone.bind(this));\r\n $thumbnail.find(ThumbnailUpload.thumbnailRemove.asDataSelector()).on('click.rustig', this.removeThumbnail);\r\n }\r\n\r\n private removeElementAndClickDropzone(event: Event): void {\r\n let $thumbnail = $(event.target).closest(ThumbnailUpload.thumbnailId.asDataSelector());\r\n $thumbnail.remove();\r\n this.$element.click();\r\n }\r\n\r\n private removeThumbnail(): void {\r\n let $thumbnail = $(this).closest(ThumbnailUpload.thumbnailId.asDataSelector());\r\n $thumbnail.remove();\r\n }\r\n\r\n private onUploadSuccess($thumbnail: JQuery, response: IUploadCompleteResponse): void {\r\n $thumbnail.attr('data-server-id', response.serverId);\r\n this.addServerIdToElements($thumbnail.find('[data-tu-add-server-id]'), response.serverId);\r\n $thumbnail.find(ThumbnailUpload.uploadSuccess.asDataSelector()).removeAttr('hidden');\r\n $thumbnail.find('[data-tu-thumbnail]').removeAttr('hidden');\r\n\r\n this.replaceDropzoneRemoveWithRemoveAction($thumbnail, response.serverId);\r\n\r\n $thumbnail.find('[data-tu-success-toggle-enabled]').each(this.toggleEnabled);\r\n }\r\n\r\n private addServerIdToElements($elements: JQuery, serverId: string) {\r\n let self = this;\r\n\r\n $elements.each(function () {\r\n let $element = $(this);\r\n\r\n if ($element.is('[href]'))\r\n self.addServerIdToUrlAttribute($element, 'href', serverId);\r\n else if ($element.is('form'))\r\n self.addServerIdToUrlAttribute($element, 'action', serverId);\r\n else if ($element.is('[data-url]'))\r\n self.addServerIdToUrlAttribute($element, 'data-url', serverId);\r\n else\r\n $element.val(serverId);\r\n });\r\n }\r\n\r\n private addServerIdToUrlAttribute($element: JQuery, attribute: string, serverId: string) {\r\n let url = $element.attr(attribute);\r\n url = this.addQueryParamToUrl(url, 'serverId', serverId);\r\n $element.attr(attribute, url);\r\n }\r\n\r\n private replaceDropzoneRemoveWithRemoveAction($thumbnail: JQuery, serverId: string): void {\r\n let removeUrl = this.$element.data('tu-remove-url');\r\n\r\n if (removeUrl) {\r\n removeUrl = this.addQueryParamToUrl(removeUrl, 'serverId', serverId);\r\n let $removeElement = $thumbnail.find(ThumbnailUpload.thumbnailRemove.asDataSelector() + ':not([hidden])');\r\n $removeElement.off('click.rustig');\r\n $removeElement.attr('href', removeUrl);\r\n }\r\n }\r\n\r\n private addQueryParamToUrl(url: string, key: string, value: string): string {\r\n let separator = url.indexOf('?') == -1 ? '?' : '&';\r\n return url + separator + key + '=' + value;\r\n }\r\n\r\n private toggleEnabled(): void {\r\n $(this).toggleEnabled($(this).isDisabled());\r\n }\r\n\r\n private onError(file: File, errorMessage: string, xhr: JQueryXHR): void {\r\n $(file.previewElement).remove();\r\n Modal.openErrorModal(errorMessage);\r\n }\r\n\r\n private updateDropzone($uploadPreserver: JQuery): void {\r\n this.dropzone = $uploadPreserver[0].dropzone;\r\n\r\n let $previewContainer = this.options.$previewContainer;\r\n let $previewContainerPrepend = $previewContainer.find(ThumbnailUpload.prependAttribute.asDataSelector());\r\n\r\n this.dropzone.updatePreviewContainer($previewContainer[0], $previewContainerPrepend[0]);\r\n this.dropzone.addClickableElement(this.$element[0], this.dropzone);\r\n this.addUploadingAndQueuedFilesToDropzone($previewContainerPrepend);\r\n\r\n this.dropzone.optionCallbacks = this.options;\r\n }\r\n\r\n private addUploadingAndQueuedFilesToDropzone($prepend: JQuery): void {\r\n let files = this.getUploadingFiles().concat(this.dropzone.getQueuedFiles());\r\n\r\n for (let i = 0; i < files.length; i++) {\r\n let $thumbnail = $(files[i].previewElement);\r\n if ($prepend.length > 0)\r\n $thumbnail.insertBefore($prepend);\r\n else\r\n $thumbnail.appendTo(this.options.$previewContainer);\r\n }\r\n }\r\n\r\n private static confirm(text: string, callback: any): void {\r\n Confirmation.show({\r\n content: text,\r\n callback: function () {\r\n Modal.close();\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport interface IThumbnailUploadOptions {\r\n $dropzone: JQuery,\r\n onUploadComplete?: (file: File, responseText: any, e: any) => void;\r\n onFileAdded?: (file: File) => void;\r\n onError?: (file: File, errorMessage: string, e?: any) => void;\r\n onThumbnailGenerated?: (file: File, dataUrl: string) => void;\r\n $previewContainer: JQuery;\r\n uniqueId: number;\r\n accept?: (file: File, done: any) => void;\r\n}\r\n\r\nexport interface IUploadCompleteResponse {\r\n thumbnailId: string,\r\n html?: string,\r\n serverId?: string,\r\n errorText?: string\r\n}\r\n\r\nfunction Plugin(option) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.thumbnailupload');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data && !$this.is('[data-tu-ignore]')) {\r\n data = new ThumbnailUpload({\r\n $dropzone: $this.find('[data-tu-url]'),\r\n $previewContainer: $this,\r\n uniqueId: parseInt($this.data('thumbnailupload-id'))\r\n });\r\n $this.data('rustig.thumbnailupload', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option]();\r\n });\r\n}\r\n\r\n$.fn.thumbnailupload = Plugin;\r\n","import $ from 'jquery';\r\n\r\nexport class Url {\r\n public get protocol(): string { return this.options.protocol; }\r\n public get host(): string { return this.options.host; }\r\n public get port(): string { return this.options.port; }\r\n public get path(): string { return this.options.path; }\r\n public get queryParameters(): any { return this.options.queryParameters; }\r\n public get hash(): string { return this.options.hash; }\r\n\r\n private DEFAULTS: IUrlOptions = {\r\n protocol: '',\r\n host: '',\r\n port: '',\r\n path: '',\r\n queryParameters: {},\r\n hash: ''\r\n };\r\n\r\n private options: IUrlOptions;\r\n\r\n constructor(url?: string, options?: IUrlOptions) {\r\n if (url)\r\n options = this.parseUrl(url);\r\n\r\n this.options = $.extend({}, this.DEFAULTS, options);\r\n\r\n if (!this.options.queryParameters)\r\n throw new Error('queryParameters cannot be null');\r\n }\r\n\r\n public setProtocol(protocol: string): Url {\r\n if (protocol) {\r\n protocol = protocol.replace(':', '');\r\n protocol = protocol.replace('/', '');\r\n }\r\n\r\n this.options.protocol = protocol;\r\n\r\n return this;\r\n }\r\n\r\n public setHost(host: string): Url {\r\n this.options.host = host;\r\n\r\n return this;\r\n }\r\n\r\n public setPort(port: string): Url {\r\n if (port && !/^\\d+&/.test(port))\r\n throw new Error('port must be an integer');\r\n\r\n this.options.port = port;\r\n\r\n return this;\r\n }\r\n\r\n public setPath(path: string): Url {\r\n if (path && path.charAt(0) != '/')\r\n path = '/' + path;\r\n\r\n this.options.path = path;\r\n\r\n return this;\r\n }\r\n\r\n public setQueryParameter(key: string, value: string | Array): Url {\r\n if (!key)\r\n throw new Error('key cannot be null');\r\n\r\n let valuesArray: Array;\r\n if (!(value instanceof Array))\r\n valuesArray = [value];\r\n else\r\n valuesArray = value;\r\n\r\n let encodedValues = valuesArray.map(x => encodeURIComponent(x));\r\n\r\n this.options.queryParameters[key] = encodedValues.join('&' + key + '=');\r\n\r\n return this;\r\n }\r\n\r\n public removeQueryParameter(key: string): Url {\r\n if (!key)\r\n throw new Error('key cannot be null');\r\n\r\n delete this.options.queryParameters[key];\r\n\r\n return this;\r\n }\r\n\r\n public getQueryParameter(key: string): string {\r\n if (!key)\r\n throw new Error('key cannot be null');\r\n\r\n return this.options.queryParameters[key];\r\n }\r\n\r\n public setHash(hash: string): Url {\r\n if (hash)\r\n hash.replace('#', '');\r\n\r\n this.options.hash = hash;\r\n\r\n return this;\r\n }\r\n\r\n public toUrl(): string {\r\n let url = '';\r\n\r\n if (this.protocol)\r\n url = this.protocol + '://';\r\n\r\n if (this.host)\r\n url = url + this.host;\r\n\r\n if (this.port)\r\n url = url + ':' + this.port;\r\n\r\n if (this.path)\r\n url = url + this.path;\r\n\r\n let querystring = this.createQueryString();\r\n if (querystring)\r\n url = url + '?' + querystring.substring(1);\r\n\r\n if (this.hash)\r\n url = url + '#' + this.hash;\r\n\r\n return url;\r\n }\r\n\r\n private parseUrl(url: string): IUrlOptions {\r\n let result = {};\r\n let a = document.createElement('a');\r\n a.href = url;\r\n\r\n result.protocol = a.protocol.replace(':', '');\r\n result.host = a.hostname;\r\n result.port = a.port;\r\n result.path = a.pathname;\r\n result.queryParameters = this.getQueryParameters(a.search);\r\n result.hash = a.hash.replace('#', '');\r\n\r\n if (result.path && result.path.charAt(0) != '/')\r\n result.path = '/' + result.path;\r\n\r\n return result;\r\n }\r\n\r\n private getQueryParameters(queryString: string): any {\r\n if (!queryString)\r\n return {};\r\n\r\n if (queryString.charAt(0) === '?')\r\n queryString = queryString.substring(1);\r\n\r\n let queryParams = queryString.split('&');\r\n\r\n let result = {};\r\n queryParams.map(function (value: string) {\r\n let pair = value.split('=');\r\n result[pair[0]] = pair[1];\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private createQueryString(): string {\r\n let self = this;\r\n let querystring = '';\r\n\r\n Object.keys(this.queryParameters).forEach(function (key) {\r\n querystring = querystring + '&' + key + '=' + self.queryParameters[key]\r\n });\r\n\r\n return querystring;\r\n }\r\n}\r\n\r\nexport interface IUrlOptions {\r\n protocol?: string;\r\n host?: string;\r\n port?: string;\r\n path?: string;\r\n queryParameters?: any;\r\n hash?: string;\r\n}\r\n\r\nexport default Url;\r\n","export class FileSize {\r\n private Kilobyte = 1024;\r\n private Megabyte = this.Kilobyte * 1024;\r\n private Gigabyte = this.Megabyte * 1024;\r\n\r\n public get bytes(): number { return this._bytes; }\r\n public get kilobytes(): number { return this._bytes / this.Kilobyte; }\r\n public get megabytes(): number { return this._bytes / this.Megabyte; }\r\n public get gigabytes(): number { return this._bytes / this.Gigabyte; }\r\n\r\n private _bytes: number;\r\n\r\n constructor(bytes: number) {\r\n this._bytes = bytes;\r\n }\r\n\r\n public toString(): string {\r\n return new FormatsFileSize().execute(this);\r\n }\r\n}\r\n\r\nexport class FormatsFileSize {\r\n public execute(model: FileSize): string {\r\n if (!model)\r\n return null;\r\n\r\n let suffix = 'B';\r\n let value = model.bytes;\r\n\r\n if (model.gigabytes >= 1) {\r\n value = model.gigabytes;\r\n suffix = \"GB\";\r\n }\r\n else if (model.megabytes >= 1) {\r\n value = model.megabytes;\r\n suffix = \"MB\";\r\n }\r\n else if (model.kilobytes >= 1) {\r\n value = model.kilobytes;\r\n suffix = \"KB\";\r\n }\r\n\r\n return (value * 1.0).toFixed(1) + ' ' + suffix;\r\n }\r\n}\r\n\r\n\r\nexport default FileSize;","export class FileName {\r\n private fileName: string\r\n\r\n constructor(fileName: string) {\r\n this.fileName = fileName;\r\n }\r\n\r\n public withExtension(): string | null {\r\n if (this.fileName === undefined)\r\n return null;\r\n\r\n return this.fileName;\r\n }\r\n\r\n public withoutExtension(): string | null {\r\n if (this.fileName === undefined)\r\n return null;\r\n\r\n return this.fileName.substring(0, this.fileName.lastIndexOf('.'));\r\n }\r\n\r\n public extension(): string | null {\r\n if (this.fileName === undefined)\r\n return null;\r\n\r\n return this.fileName.substring(this.fileName.lastIndexOf('.') + 1).toLowerCase();\r\n }\r\n}\r\n\r\nexport default FileName;","import FileName from \"../utilities/filename\";\r\n\r\nexport class BuildsExtensionIcon {\r\n private map = [\r\n { className: 'icon-file-pdf', fileTypes: ['pdf'] },\r\n { className: 'icon-file-word', fileTypes: ['doc', 'dot', 'docx', 'docm', 'dotx', 'dotm', 'docb'] },\r\n { className: 'icon-file-excel', fileTypes: ['xln', 'xlt', 'xlm', 'xlsx', 'xlsm', 'xltx', 'xltm', 'xlw'] },\r\n { className: 'icon-file-audio', fileTypes: ['aif', 'iff', 'm3u', 'm4a', 'mid', 'mp3', 'mpa', 'ra', 'wav', 'wma'] },\r\n { className: 'icon-file-video', fileTypes: ['3g2', '3gp', 'asf', 'asx', 'avi', 'flv', 'm4v', 'mov', 'mp4', 'mpg', 'rm', 'srt', 'swf', 'vob', 'wmv'] },\r\n { className: 'icon-file-image', fileTypes: ['bmp', 'dds', 'gif', 'jpg', 'jpeg', 'png', 'psd', 'pspimage', 'tga', 'thm', 'tif', 'tiff', 'yuv'] },\r\n { className: 'icon-file-text', fileTypes: ['log', 'msg', 'odt', 'pages', 'rtf', 'tex', 'txt', 'wpd', 'wps', 'dat'] },\r\n ];\r\n\r\n public execute(filename: string): string {\r\n if (!filename)\r\n return null;\r\n\r\n let extension = new FileName(filename).extension();\r\n\r\n for (let i = 0; i < this.map.length; i++) {\r\n for (let j = 0; j < this.map[i].fileTypes.length; j++) {\r\n if (this.map[i].fileTypes[j] === extension)\r\n return this.map[i].className;\r\n }\r\n }\r\n return 'icon-file-default';\r\n }\r\n}\r\n\r\nexport default BuildsExtensionIcon;","import $ from 'jquery';\r\nimport Url from \"../utilities/url\";\r\n\r\nexport class BrowserHistory {\r\n public static get wireup(): string { return '[data-query-parameter]'; }\r\n\r\n private $queryParameters: JQuery;\r\n private queryString: string;\r\n private title: string;\r\n\r\n public constructor($queryParameters) {\r\n if ($queryParameters.length <= 0)\r\n throw new Error(\"$queryParameters cannot be null\");\r\n\r\n this.$queryParameters = $queryParameters;\r\n this.queryString = this.createQueryString();\r\n this.title = $('title').text();\r\n\r\n }\r\n\r\n private recordState() {\r\n $(window).off('popstate.rustig.browserhistory')\r\n\r\n let currentState = history.state || {};\r\n if (!currentState._querystring || this.queryStringsMatch(currentState._querystring))\r\n window.history.replaceState({ _querystring: this.queryString }, this.title, this.queryString)\r\n else\r\n window.history.pushState({ _querystring: this.queryString }, this.title, this.queryString);\r\n\r\n $(window).on('popstate.rustig.browserhistory', $.proxy(this.onStateChange, this));\r\n }\r\n\r\n private onStateChange(event) {\r\n let currentState = history.state;\r\n\r\n let shouldIgnoreStateChange = this.queryStringsMatch(currentState._querystring);\r\n if (!shouldIgnoreStateChange)\r\n window.location.href = currentState._querystring;\r\n }\r\n\r\n private queryStringsMatch(queryString: string): boolean {\r\n return this.queryString === queryString;\r\n }\r\n\r\n private createQueryString(): string {\r\n let url = new Url();\r\n\r\n this.$queryParameters.each(function () {\r\n let $element = $(this);\r\n\r\n let value = $element.val() as string;\r\n if ($element.data('is-bool'))\r\n value = value.toLowerCase();\r\n\r\n url.setQueryParameter($element.attr('name'), value);\r\n });\r\n\r\n return url.toUrl();\r\n }\r\n\r\n public static createHistory(): BrowserHistory {\r\n if (this.length <= 0)\r\n return;\r\n\r\n let $queryParameters = $('[data-query-parameter]');\r\n let h = new BrowserHistory($queryParameters);\r\n h.recordState();\r\n\r\n return h;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n drawer: (option, args) => any;\r\n }\r\n}\r\n// todo: multiple drawers?\r\n// todo: detect orientation change and close.\r\n\r\nexport class Drawer {\r\n public static get wireup(): string {\r\n return '[data-drawer]';\r\n }\r\n\r\n private $drawer: JQuery;\r\n private get isOpen(): boolean {\r\n return this.$drawer.data('rustig.drawer.isOpen') === true;\r\n }\r\n private set isOpen(value: boolean) {\r\n this.$drawer.data('rustig.drawer.isOpen', value);\r\n }\r\n private get isClosed(): boolean {\r\n return !this.isOpen;\r\n }\r\n private get $overlay(): JQuery {\r\n return $('[data-drawer-overlay]');\r\n }\r\n\r\n constructor(private $toggle: JQuery/*, options: any */) {\r\n let targetId = $toggle.data('drawer');\r\n if (!targetId)\r\n throw new Error('drawer needs a target!');\r\n\r\n _.once(() => this.wireup())();\r\n\r\n this.$drawer = $('[data-drawer-content=\\\"' + targetId + '\\\"]');\r\n\r\n this.addCssFooterStateIfNeeded();\r\n this.$drawer.data('rustig.drawer.isOpen', false);\r\n }\r\n\r\n public toggle() {\r\n if (this.isOpen)\r\n this.close();\r\n else\r\n this.open();\r\n }\r\n\r\n public open() {\r\n if (this.isOpen)\r\n return;\r\n\r\n this.$drawer.addClass('d-open');\r\n this.$overlay.addClass('d-show');\r\n\r\n this.isOpen = true;\r\n this.$drawer.data('rustig.drawer.isOpen', true);\r\n }\r\n\r\n public close() {\r\n if (this.isClosed)\r\n return;\r\n\r\n this.$drawer.removeClass('d-open');\r\n this.$overlay.removeClass('d-show');\r\n\r\n this.isOpen = false;\r\n this.$drawer.data('rustig.drawer.isOpen', false);\r\n }\r\n\r\n private addCssFooterStateIfNeeded() {\r\n var hasFooter = this.$drawer.find('.d-footer').length > 0;\r\n if (hasFooter)\r\n this.$drawer.find('.d-body').addClass('d-with-footer');\r\n }\r\n\r\n public static closeAll(): void {\r\n $('[data-drawer]').each(function () {\r\n $(this).data('rustig.drawer').close();\r\n });\r\n }\r\n\r\n private wireup() {\r\n $(document).on('click.rustig.drawer', Drawer.wireup, function () {\r\n $(this).data('rustig.drawer').toggle();\r\n });\r\n $(document).on('click.rustig.drawer', '[data-drawer-dismiss]', Drawer.closeAll);\r\n }\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.drawer');\r\n let options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new Drawer($this/*, options*/);\r\n $this.data('rustig.drawer', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.drawer = Plugin;\r\n\r\nexport default Drawer;","import $ from 'jquery';\r\n\r\ndeclare global{\r\n interface Event {\r\n dataTransfer: DataTransfer;\r\n }\r\n interface JQuery {\r\n filedragout: () => any;\r\n }\r\n}\r\n\r\nexport class FileDragOut {\r\n static get wireup(): string {\r\n return '[data-filedragout]';\r\n }\r\n}\r\n\r\nfunction Plugin() {\r\n var $this = this;\r\n return $this.each(function () {\r\n $this.addClass('fdo-draggable');\r\n $this.attr('draggable', true);\r\n });\r\n}\r\n\r\n$.fn.filedragout = Plugin;\r\n\r\nexport interface DataTransfer {\r\n setData(prop: string, val: any): void;\r\n}\r\n\r\ninterface Event {\r\n dataTransfer: DataTransfer;\r\n}\r\n\r\n$('[data-filedragout]').on('dragstart', function (e: JQueryEventObject) {\r\n var data = $(this).data();\r\n var completeUrl = 'application/octet-stream:' + data.filename + ':' + data.downloadurl;\r\n e.originalEvent.dataTransfer.setData('DownloadURL', completeUrl);\r\n}).on('mousedown', function () { $(this).addClass('fdo-grabbing') })\r\n .on('mouseup dragend', function () { $(this).removeClass('fdo-grabbing') });\r\n\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n fillwindow(): JQuery;\r\n }\r\n}\r\n(function ($) {\r\n\r\n $.fn.fillwindow = function () {\r\n $(this).each(function () {\r\n let $this = $(this);\r\n\r\n let newSize = 0;\r\n let thisTop = $(this).offset().top;\r\n let footerSelector = $this.data('footer');\r\n let footerSize = 0;\r\n if (footerSelector) {\r\n let $footer = $('footer-content'.asDataSelector(footerSelector));\r\n if ($footer.length <= 0)\r\n throw new Error('fillwindow: unable to find footer with selector ' + footerSelector);\r\n footerSize = $footer.height();\r\n }\r\n\r\n let offset = $this.is('[data-no-offset]') ? 0 : 35;\r\n newSize = $(window).height() - thisTop - footerSize - offset;\r\n\r\n $this.height(newSize);\r\n });\r\n return $(this);\r\n };\r\n\r\n $(window).on('resize.rustig.fillwindow', _.throttle(() => $('[data-fillwindow]').fillwindow(), 250));\r\n\r\n $(function () {\r\n $('[data-fillwindow]').fillwindow();\r\n });\r\n\r\n $(document).ajaxComplete(function () {\r\n $('[data-fillwindow]').fillwindow();\r\n });\r\n\r\n})($);\r\n","import $ from 'jquery';\r\nimport _ from 'underscore'\r\n\r\nexport class ItemList {\r\n public static wireupDocument: Function = _.once(() => {\r\n $(document).on('click.rustig.itemlist', '.il-item', function (e: JQueryEventObject): void {\r\n let $this = $(this);\r\n let $list = $this.closest('.itemlist');\r\n\r\n $list.find('.il-item.il-selected').removeClass('il-selected');\r\n $this.addClass('il-selected');\r\n });\r\n });\r\n}\r\n","import $ from 'jquery';\r\nimport Focus from \"../utilities/focusfield\";\r\n\r\nexport class ListView {\r\n public static showMoreRows(data: any): void {\r\n var $tableBody = $(\"#rows\");\r\n\r\n $(\".table-more-row\").replaceWith($(data.Items));\r\n $(\"#item-count\").html(data.Count);\r\n }\r\n\r\n public static refreshPageData(data: any): void {\r\n Focus.after(() => {\r\n $(\"#rows\").html(data.Rows);\r\n\r\n if (data.FilterTabs)\r\n $(\"#filter-tabs\").html(data.FilterTabs);\r\n if (data.TraditionalPager)\r\n $(\"#traditional-pager\").html(data.TraditionalPager);\r\n\r\n $(\"#item-count\").html(data.Count);\r\n $(\"#search-field\").replaceWith($(data.Search));\r\n\r\n if (data.OnRemotePageUpdate)\r\n $.fn.executeFunctionByName(data.OnRemotePageUpdate, window, data);\r\n });\r\n }\r\n\r\n public static toggleMultiSelect(data: any): void {\r\n var $table = $(\"#rows\").parent();\r\n\r\n $table.find(\"thead\").replaceWith(data.TableHeading);\r\n $(\"#title-buttons\").html(data.TitleButtons);\r\n $(\"#action-menu-container\").html(data.ActionMenu);\r\n\r\n ListView.refreshPageData(data);\r\n }\r\n}\r\n","window.paceOptions = {\r\n ajax: {\r\n trackMethods: new Array(\"GET\", \"POST\"),\r\n ignoreURLs: [/.*notifications\\/popups.*/i, 'arterySignalR', 'browserLink'],\r\n trackWebSockets: false\r\n },\r\n startOnPageLoad: false,\r\n restartOnRequestAfter: 250,\r\n target: 'body'\r\n};","(function() {\n var AjaxMonitor, Bar, DocumentMonitor, ElementMonitor, ElementTracker, EventLagMonitor, Evented, Events, NoTargetError, Pace, RequestIntercept, SOURCE_KEYS, Scaler, SocketRequestTracker, XHRRequestTracker, animation, avgAmplitude, bar, cancelAnimation, cancelAnimationFrame, defaultOptions, extend, extendNative, getFromDOM, getIntercept, handlePushState, ignoreStack, init, now, options, requestAnimationFrame, result, runAnimation, scalers, shouldIgnoreURL, shouldTrack, source, sources, uniScaler, _WebSocket, _XDomainRequest, _XMLHttpRequest, _i, _intercept, _len, _pushState, _ref, _ref1, _replaceState,\n __slice = [].slice,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n defaultOptions = {\n catchupTime: 100,\n initialRate: .03,\n minTime: 250,\n ghostTime: 100,\n maxProgressPerFrame: 20,\n easeFactor: 1.25,\n startOnPageLoad: true,\n restartOnPushState: true,\n restartOnRequestAfter: 500,\n target: 'body',\n elements: {\n checkInterval: 100,\n selectors: ['body']\n },\n eventLag: {\n minSamples: 10,\n sampleCount: 3,\n lagThreshold: 3\n },\n ajax: {\n trackMethods: ['GET'],\n trackWebSockets: true,\n ignoreURLs: []\n }\n };\n\n now = function() {\n var _ref;\n return (_ref = typeof performance !== \"undefined\" && performance !== null ? typeof performance.now === \"function\" ? performance.now() : void 0 : void 0) != null ? _ref : +(new Date);\n };\n\n requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;\n\n cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;\n\n if (requestAnimationFrame == null) {\n requestAnimationFrame = function(fn) {\n return setTimeout(fn, 50);\n };\n cancelAnimationFrame = function(id) {\n return clearTimeout(id);\n };\n }\n\n runAnimation = function(fn) {\n var last, tick;\n last = now();\n tick = function() {\n var diff;\n diff = now() - last;\n if (diff >= 33) {\n last = now();\n return fn(diff, function() {\n return requestAnimationFrame(tick);\n });\n } else {\n return setTimeout(tick, 33 - diff);\n }\n };\n return tick();\n };\n\n result = function() {\n var args, key, obj;\n obj = arguments[0], key = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : [];\n if (typeof obj[key] === 'function') {\n return obj[key].apply(obj, args);\n } else {\n return obj[key];\n }\n };\n\n extend = function() {\n var key, out, source, sources, val, _i, _len;\n out = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n for (_i = 0, _len = sources.length; _i < _len; _i++) {\n source = sources[_i];\n if (source) {\n for (key in source) {\n if (!__hasProp.call(source, key)) continue;\n val = source[key];\n if ((out[key] != null) && typeof out[key] === 'object' && (val != null) && typeof val === 'object') {\n extend(out[key], val);\n } else {\n out[key] = val;\n }\n }\n }\n }\n return out;\n };\n\n avgAmplitude = function(arr) {\n var count, sum, v, _i, _len;\n sum = count = 0;\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\n v = arr[_i];\n sum += Math.abs(v);\n count++;\n }\n return sum / count;\n };\n\n getFromDOM = function(key, json) {\n var data, e, el;\n if (key == null) {\n key = 'options';\n }\n if (json == null) {\n json = true;\n }\n el = document.querySelector(\"[data-pace-\" + key + \"]\");\n if (!el) {\n return;\n }\n data = el.getAttribute(\"data-pace-\" + key);\n if (!json) {\n return data;\n }\n try {\n return JSON.parse(data);\n } catch (_error) {\n e = _error;\n return typeof console !== \"undefined\" && console !== null ? console.error(\"Error parsing inline pace options\", e) : void 0;\n }\n };\n\n Evented = (function() {\n function Evented() {}\n\n Evented.prototype.on = function(event, handler, ctx, once) {\n var _base;\n if (once == null) {\n once = false;\n }\n if (this.bindings == null) {\n this.bindings = {};\n }\n if ((_base = this.bindings)[event] == null) {\n _base[event] = [];\n }\n return this.bindings[event].push({\n handler: handler,\n ctx: ctx,\n once: once\n });\n };\n\n Evented.prototype.once = function(event, handler, ctx) {\n return this.on(event, handler, ctx, true);\n };\n\n Evented.prototype.off = function(event, handler) {\n var i, _ref, _results;\n if (((_ref = this.bindings) != null ? _ref[event] : void 0) == null) {\n return;\n }\n if (handler == null) {\n return delete this.bindings[event];\n } else {\n i = 0;\n _results = [];\n while (i < this.bindings[event].length) {\n if (this.bindings[event][i].handler === handler) {\n _results.push(this.bindings[event].splice(i, 1));\n } else {\n _results.push(i++);\n }\n }\n return _results;\n }\n };\n\n Evented.prototype.trigger = function() {\n var args, ctx, event, handler, i, once, _ref, _ref1, _results;\n event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n if ((_ref = this.bindings) != null ? _ref[event] : void 0) {\n i = 0;\n _results = [];\n while (i < this.bindings[event].length) {\n _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once;\n handler.apply(ctx != null ? ctx : this, args);\n if (once) {\n _results.push(this.bindings[event].splice(i, 1));\n } else {\n _results.push(i++);\n }\n }\n return _results;\n }\n };\n\n return Evented;\n\n })();\n\n Pace = window.Pace || {};\n\n window.Pace = Pace;\n\n extend(Pace, Evented.prototype);\n\n options = Pace.options = extend({}, defaultOptions, window.paceOptions, getFromDOM());\n\n _ref = ['ajax', 'document', 'eventLag', 'elements'];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n source = _ref[_i];\n if (options[source] === true) {\n options[source] = defaultOptions[source];\n }\n }\n\n NoTargetError = (function(_super) {\n __extends(NoTargetError, _super);\n\n function NoTargetError() {\n _ref1 = NoTargetError.__super__.constructor.apply(this, arguments);\n return _ref1;\n }\n\n return NoTargetError;\n\n })(Error);\n\n Bar = (function() {\n function Bar() {\n this.progress = 0;\n }\n\n Bar.prototype.getElement = function() {\n var targetElement;\n if (this.el == null) {\n targetElement = document.querySelector(options.target);\n if (!targetElement) {\n throw new NoTargetError;\n }\n this.el = document.createElement('div');\n this.el.className = \"pace pace-active\";\n document.body.className = document.body.className.replace(/pace-done/g, '');\n document.body.className += ' pace-running';\n this.el.innerHTML = '
\\n
\\n
\\n
';\n if (targetElement.firstChild != null) {\n targetElement.insertBefore(this.el, targetElement.firstChild);\n } else {\n targetElement.appendChild(this.el);\n }\n }\n return this.el;\n };\n\n Bar.prototype.finish = function() {\n var el;\n el = this.getElement();\n el.className = el.className.replace('pace-active', '');\n el.className += ' pace-inactive';\n document.body.className = document.body.className.replace('pace-running', '');\n return document.body.className += ' pace-done';\n };\n\n Bar.prototype.update = function(prog) {\n this.progress = prog;\n return this.render();\n };\n\n Bar.prototype.destroy = function() {\n try {\n this.getElement().parentNode.removeChild(this.getElement());\n } catch (_error) {\n NoTargetError = _error;\n }\n return this.el = void 0;\n };\n\n Bar.prototype.render = function() {\n var el, key, progressStr, transform, _j, _len1, _ref2;\n if (document.querySelector(options.target) == null) {\n return false;\n }\n el = this.getElement();\n transform = \"translate3d(\" + this.progress + \"%, 0, 0)\";\n _ref2 = ['webkitTransform', 'msTransform', 'transform'];\n for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n key = _ref2[_j];\n el.children[0].style[key] = transform;\n }\n if (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) {\n el.children[0].setAttribute('data-progress-text', \"\" + (this.progress | 0) + \"%\");\n if (this.progress >= 100) {\n progressStr = '99';\n } else {\n progressStr = this.progress < 10 ? \"0\" : \"\";\n progressStr += this.progress | 0;\n }\n el.children[0].setAttribute('data-progress', \"\" + progressStr);\n }\n return this.lastRenderedProgress = this.progress;\n };\n\n Bar.prototype.done = function() {\n return this.progress >= 100;\n };\n\n return Bar;\n\n })();\n\n Events = (function() {\n function Events() {\n this.bindings = {};\n }\n\n Events.prototype.trigger = function(name, val) {\n var binding, _j, _len1, _ref2, _results;\n if (this.bindings[name] != null) {\n _ref2 = this.bindings[name];\n _results = [];\n for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n binding = _ref2[_j];\n _results.push(binding.call(this, val));\n }\n return _results;\n }\n };\n\n Events.prototype.on = function(name, fn) {\n var _base;\n if ((_base = this.bindings)[name] == null) {\n _base[name] = [];\n }\n return this.bindings[name].push(fn);\n };\n\n return Events;\n\n })();\n\n _XMLHttpRequest = window.XMLHttpRequest;\n\n _XDomainRequest = window.XDomainRequest;\n\n _WebSocket = window.WebSocket;\n\n extendNative = function(to, from) {\n var e, key, _results;\n _results = [];\n for (key in from.prototype) {\n try {\n if ((to[key] == null) && typeof from[key] !== 'function') {\n if (typeof Object.defineProperty === 'function') {\n _results.push(Object.defineProperty(to, key, {\n get: function() {\n return from.prototype[key];\n },\n configurable: true,\n enumerable: true\n }));\n } else {\n _results.push(to[key] = from.prototype[key]);\n }\n } else {\n _results.push(void 0);\n }\n } catch (_error) {\n e = _error;\n }\n }\n return _results;\n };\n\n ignoreStack = [];\n\n Pace.ignore = function() {\n var args, fn, ret;\n fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n ignoreStack.unshift('ignore');\n ret = fn.apply(null, args);\n ignoreStack.shift();\n return ret;\n };\n\n Pace.track = function() {\n var args, fn, ret;\n fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n ignoreStack.unshift('track');\n ret = fn.apply(null, args);\n ignoreStack.shift();\n return ret;\n };\n\n shouldTrack = function(method) {\n var _ref2;\n if (method == null) {\n method = 'GET';\n }\n if (ignoreStack[0] === 'track') {\n return 'force';\n }\n if (!ignoreStack.length && options.ajax) {\n if (method === 'socket' && options.ajax.trackWebSockets) {\n return true;\n } else if (_ref2 = method.toUpperCase(), __indexOf.call(options.ajax.trackMethods, _ref2) >= 0) {\n return true;\n }\n }\n return false;\n };\n\n RequestIntercept = (function(_super) {\n __extends(RequestIntercept, _super);\n\n function RequestIntercept() {\n var monitorXHR,\n _this = this;\n RequestIntercept.__super__.constructor.apply(this, arguments);\n monitorXHR = function(req) {\n var _open;\n _open = req.open;\n return req.open = function(type, url, async) {\n if (shouldTrack(type)) {\n _this.trigger('request', {\n type: type,\n url: url,\n request: req\n });\n }\n return _open.apply(req, arguments);\n };\n };\n window.XMLHttpRequest = function(flags) {\n var req;\n req = new _XMLHttpRequest(flags);\n monitorXHR(req);\n return req;\n };\n try {\n extendNative(window.XMLHttpRequest, _XMLHttpRequest);\n } catch (_error) {}\n if (_XDomainRequest != null) {\n window.XDomainRequest = function() {\n var req;\n req = new _XDomainRequest;\n monitorXHR(req);\n return req;\n };\n try {\n extendNative(window.XDomainRequest, _XDomainRequest);\n } catch (_error) {}\n }\n if ((_WebSocket != null) && options.ajax.trackWebSockets) {\n window.WebSocket = function(url, protocols) {\n var req;\n if (protocols != null) {\n req = new _WebSocket(url, protocols);\n } else {\n req = new _WebSocket(url);\n }\n if (shouldTrack('socket')) {\n _this.trigger('request', {\n type: 'socket',\n url: url,\n protocols: protocols,\n request: req\n });\n }\n return req;\n };\n try {\n extendNative(window.WebSocket, _WebSocket);\n } catch (_error) {}\n }\n }\n\n return RequestIntercept;\n\n })(Events);\n\n _intercept = null;\n\n getIntercept = function() {\n if (_intercept == null) {\n _intercept = new RequestIntercept;\n }\n return _intercept;\n };\n\n shouldIgnoreURL = function(url) {\n var pattern, _j, _len1, _ref2;\n _ref2 = options.ajax.ignoreURLs;\n for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n pattern = _ref2[_j];\n if (typeof pattern === 'string') {\n if (url.indexOf(pattern) !== -1) {\n return true;\n }\n } else {\n if (pattern.test(url)) {\n return true;\n }\n }\n }\n return false;\n };\n\n getIntercept().on('request', function(_arg) {\n var after, args, request, type, url;\n type = _arg.type, request = _arg.request, url = _arg.url;\n if (shouldIgnoreURL(url)) {\n return;\n }\n if (!Pace.running && (options.restartOnRequestAfter !== false || shouldTrack(type) === 'force')) {\n args = arguments;\n after = options.restartOnRequestAfter || 0;\n if (typeof after === 'boolean') {\n after = 0;\n }\n return setTimeout(function() {\n var stillActive, _j, _len1, _ref2, _ref3, _results;\n if (type === 'socket') {\n stillActive = request.readyState < 2;\n } else {\n stillActive = (0 < (_ref2 = request.readyState) && _ref2 < 4);\n }\n if (stillActive) {\n Pace.restart();\n _ref3 = Pace.sources;\n _results = [];\n for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {\n source = _ref3[_j];\n if (source instanceof AjaxMonitor) {\n source.watch.apply(source, args);\n break;\n } else {\n _results.push(void 0);\n }\n }\n return _results;\n }\n }, after);\n }\n });\n\n AjaxMonitor = (function() {\n function AjaxMonitor() {\n var _this = this;\n this.elements = [];\n getIntercept().on('request', function() {\n return _this.watch.apply(_this, arguments);\n });\n }\n\n AjaxMonitor.prototype.watch = function(_arg) {\n var request, tracker, type, url;\n type = _arg.type, request = _arg.request, url = _arg.url;\n if (shouldIgnoreURL(url)) {\n return;\n }\n if (type === 'socket') {\n tracker = new SocketRequestTracker(request);\n } else {\n tracker = new XHRRequestTracker(request);\n }\n return this.elements.push(tracker);\n };\n\n return AjaxMonitor;\n\n })();\n\n XHRRequestTracker = (function() {\n function XHRRequestTracker(request) {\n var event, size, _j, _len1, _onreadystatechange, _ref2,\n _this = this;\n this.progress = 0;\n if (window.ProgressEvent != null) {\n size = null;\n request.addEventListener('progress', function(evt) {\n if (evt.lengthComputable) {\n return _this.progress = 100 * evt.loaded / evt.total;\n } else {\n return _this.progress = _this.progress + (100 - _this.progress) / 2;\n }\n }, false);\n _ref2 = ['load', 'abort', 'timeout', 'error'];\n for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n event = _ref2[_j];\n request.addEventListener(event, function() {\n return _this.progress = 100;\n }, false);\n }\n } else {\n _onreadystatechange = request.onreadystatechange;\n request.onreadystatechange = function() {\n var _ref3;\n if ((_ref3 = request.readyState) === 0 || _ref3 === 4) {\n _this.progress = 100;\n } else if (request.readyState === 3) {\n _this.progress = 50;\n }\n return typeof _onreadystatechange === \"function\" ? _onreadystatechange.apply(null, arguments) : void 0;\n };\n }\n }\n\n return XHRRequestTracker;\n\n })();\n\n SocketRequestTracker = (function() {\n function SocketRequestTracker(request) {\n var event, _j, _len1, _ref2,\n _this = this;\n this.progress = 0;\n _ref2 = ['error', 'open'];\n for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n event = _ref2[_j];\n request.addEventListener(event, function() {\n return _this.progress = 100;\n }, false);\n }\n }\n\n return SocketRequestTracker;\n\n })();\n\n ElementMonitor = (function() {\n function ElementMonitor(options) {\n var selector, _j, _len1, _ref2;\n if (options == null) {\n options = {};\n }\n this.elements = [];\n if (options.selectors == null) {\n options.selectors = [];\n }\n _ref2 = options.selectors;\n for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n selector = _ref2[_j];\n this.elements.push(new ElementTracker(selector));\n }\n }\n\n return ElementMonitor;\n\n })();\n\n ElementTracker = (function() {\n function ElementTracker(selector) {\n this.selector = selector;\n this.progress = 0;\n this.check();\n }\n\n ElementTracker.prototype.check = function() {\n var _this = this;\n if (document.querySelector(this.selector)) {\n return this.done();\n } else {\n return setTimeout((function() {\n return _this.check();\n }), options.elements.checkInterval);\n }\n };\n\n ElementTracker.prototype.done = function() {\n return this.progress = 100;\n };\n\n return ElementTracker;\n\n })();\n\n DocumentMonitor = (function() {\n DocumentMonitor.prototype.states = {\n loading: 0,\n interactive: 50,\n complete: 100\n };\n\n function DocumentMonitor() {\n var _onreadystatechange, _ref2,\n _this = this;\n this.progress = (_ref2 = this.states[document.readyState]) != null ? _ref2 : 100;\n _onreadystatechange = document.onreadystatechange;\n document.onreadystatechange = function() {\n if (_this.states[document.readyState] != null) {\n _this.progress = _this.states[document.readyState];\n }\n return typeof _onreadystatechange === \"function\" ? _onreadystatechange.apply(null, arguments) : void 0;\n };\n }\n\n return DocumentMonitor;\n\n })();\n\n EventLagMonitor = (function() {\n function EventLagMonitor() {\n var avg, interval, last, points, samples,\n _this = this;\n this.progress = 0;\n avg = 0;\n samples = [];\n points = 0;\n last = now();\n interval = setInterval(function() {\n var diff;\n diff = now() - last - 50;\n last = now();\n samples.push(diff);\n if (samples.length > options.eventLag.sampleCount) {\n samples.shift();\n }\n avg = avgAmplitude(samples);\n if (++points >= options.eventLag.minSamples && avg < options.eventLag.lagThreshold) {\n _this.progress = 100;\n return clearInterval(interval);\n } else {\n return _this.progress = 100 * (3 / (avg + 3));\n }\n }, 50);\n }\n\n return EventLagMonitor;\n\n })();\n\n Scaler = (function() {\n function Scaler(source) {\n this.source = source;\n this.last = this.sinceLastUpdate = 0;\n this.rate = options.initialRate;\n this.catchup = 0;\n this.progress = this.lastProgress = 0;\n if (this.source != null) {\n this.progress = result(this.source, 'progress');\n }\n }\n\n Scaler.prototype.tick = function(frameTime, val) {\n var scaling;\n if (val == null) {\n val = result(this.source, 'progress');\n }\n if (val >= 100) {\n this.done = true;\n }\n if (val === this.last) {\n this.sinceLastUpdate += frameTime;\n } else {\n if (this.sinceLastUpdate) {\n this.rate = (val - this.last) / this.sinceLastUpdate;\n }\n this.catchup = (val - this.progress) / options.catchupTime;\n this.sinceLastUpdate = 0;\n this.last = val;\n }\n if (val > this.progress) {\n this.progress += this.catchup * frameTime;\n }\n scaling = 1 - Math.pow(this.progress / 100, options.easeFactor);\n this.progress += scaling * this.rate * frameTime;\n this.progress = Math.min(this.lastProgress + options.maxProgressPerFrame, this.progress);\n this.progress = Math.max(0, this.progress);\n this.progress = Math.min(100, this.progress);\n this.lastProgress = this.progress;\n return this.progress;\n };\n\n return Scaler;\n\n })();\n\n sources = null;\n\n scalers = null;\n\n bar = null;\n\n uniScaler = null;\n\n animation = null;\n\n cancelAnimation = null;\n\n Pace.running = false;\n\n handlePushState = function() {\n if (options.restartOnPushState) {\n return Pace.restart();\n }\n };\n\n if (window.history.pushState != null) {\n _pushState = window.history.pushState;\n window.history.pushState = function() {\n handlePushState();\n return _pushState.apply(window.history, arguments);\n };\n }\n\n if (window.history.replaceState != null) {\n _replaceState = window.history.replaceState;\n window.history.replaceState = function() {\n handlePushState();\n return _replaceState.apply(window.history, arguments);\n };\n }\n\n SOURCE_KEYS = {\n ajax: AjaxMonitor,\n elements: ElementMonitor,\n document: DocumentMonitor,\n eventLag: EventLagMonitor\n };\n\n (init = function() {\n var type, _j, _k, _len1, _len2, _ref2, _ref3, _ref4;\n Pace.sources = sources = [];\n _ref2 = ['ajax', 'elements', 'document', 'eventLag'];\n for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n type = _ref2[_j];\n if (options[type] !== false) {\n sources.push(new SOURCE_KEYS[type](options[type]));\n }\n }\n _ref4 = (_ref3 = options.extraSources) != null ? _ref3 : [];\n for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {\n source = _ref4[_k];\n sources.push(new source(options));\n }\n Pace.bar = bar = new Bar;\n scalers = [];\n return uniScaler = new Scaler;\n })();\n\n Pace.stop = function() {\n Pace.trigger('stop');\n Pace.running = false;\n bar.destroy();\n cancelAnimation = true;\n if (animation != null) {\n if (typeof cancelAnimationFrame === \"function\") {\n cancelAnimationFrame(animation);\n }\n animation = null;\n }\n return init();\n };\n\n Pace.restart = function() {\n Pace.trigger('restart');\n Pace.stop();\n return Pace.start();\n };\n\n Pace.go = function() {\n var start;\n Pace.running = true;\n bar.render();\n start = now();\n cancelAnimation = false;\n return animation = runAnimation(function(frameTime, enqueueNextFrame) {\n var avg, count, done, element, elements, i, j, remaining, scaler, scalerList, sum, _j, _k, _len1, _len2, _ref2;\n remaining = 100 - bar.progress;\n count = sum = 0;\n done = true;\n for (i = _j = 0, _len1 = sources.length; _j < _len1; i = ++_j) {\n source = sources[i];\n scalerList = scalers[i] != null ? scalers[i] : scalers[i] = [];\n elements = (_ref2 = source.elements) != null ? _ref2 : [source];\n for (j = _k = 0, _len2 = elements.length; _k < _len2; j = ++_k) {\n element = elements[j];\n scaler = scalerList[j] != null ? scalerList[j] : scalerList[j] = new Scaler(element);\n done &= scaler.done;\n if (scaler.done) {\n continue;\n }\n count++;\n sum += scaler.tick(frameTime);\n }\n }\n avg = sum / count;\n bar.update(uniScaler.tick(frameTime, avg));\n if (bar.done() || done || cancelAnimation) {\n bar.update(100);\n Pace.trigger('done');\n return setTimeout(function() {\n bar.finish();\n Pace.running = false;\n return Pace.trigger('hide');\n }, Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0)));\n } else {\n return enqueueNextFrame();\n }\n });\n };\n\n Pace.start = function(_options) {\n extend(options, _options);\n Pace.running = true;\n try {\n bar.render();\n } catch (_error) {\n NoTargetError = _error;\n }\n if (!document.querySelector('.pace')) {\n return setTimeout(Pace.start, 50);\n } else {\n Pace.trigger('start');\n return Pace.go();\n }\n };\n\n if (typeof define === 'function' && define.amd) {\n define(['pace'], function() {\n return Pace;\n });\n } else if (typeof exports === 'object') {\n module.exports = Pace;\n } else {\n if (options.startOnPageLoad) {\n Pace.start();\n }\n }\n\n}).call(this);\n","import $ from 'jquery';\r\nimport '../../js/paceoptions.js';\r\nimport Pace from 'pace-js';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n loading(): JQuery;\r\n stopLoading(): JQuery;\r\n }\r\n}\r\n\r\n(function ($) {\r\n $.fn.loading = function () {\r\n let $element = $(this);\r\n let random = Math.random();\r\n $element.attr('data-loading-target', random)\r\n Pace.startOn('loading-target'.asDataSelector(random));\r\n return $(this);\r\n };\r\n $.fn.stopLoading = function () {\r\n Pace.stop();\r\n return $(this);\r\n };\r\n\r\n if (window.Pace) {\r\n Pace.startOn = function (selector) {\r\n var $target = $(selector).first();\r\n if ($target.length == 0)\r\n return;\r\n\r\n $target.addClass('pace-target-container');\r\n Pace.options.target = selector;\r\n Pace.restart();\r\n };\r\n\r\n Pace.on('hide', function () {\r\n $(Pace.options.target).removeClass('pace-target-container');\r\n Pace.options.target = window.paceOptions.target;\r\n });\r\n }\r\n})($);\r\n\r\n","/* humanize.js - v1.8.2 */\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\n/**\n * Copyright 2013-2016 HubSpotDev\n * MIT Licensed\n *\n * @module humanize.js\n */\n\n(function (root, factory) {\n if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n define([], function () {\n return root.Humanize = factory();\n });\n } else {\n root.Humanize = factory();\n }\n})(this, function () {\n //------------------------------------------------------------------------------\n // Constants\n //------------------------------------------------------------------------------\n\n var TIME_FORMATS = [{\n name: 'second',\n value: 1e3\n }, {\n name: 'minute',\n value: 6e4\n }, {\n name: 'hour',\n value: 36e5\n }, {\n name: 'day',\n value: 864e5\n }, {\n name: 'week',\n value: 6048e5\n }];\n\n var LABELS_FOR_POWERS_OF_KILO = {\n P: Math.pow(2, 50),\n T: Math.pow(2, 40),\n G: Math.pow(2, 30),\n M: Math.pow(2, 20)\n };\n\n //------------------------------------------------------------------------------\n // Helpers\n //------------------------------------------------------------------------------\n\n var exists = function exists(maybe) {\n return typeof maybe !== 'undefined' && maybe !== null;\n };\n\n var isNaN = function isNaN(value) {\n return value !== value;\n }; // eslint-disable-line\n\n var isFiniteNumber = function isFiniteNumber(value) {\n return isFinite(value) && !isNaN(parseFloat(value));\n };\n\n var isArray = function isArray(value) {\n var type = Object.prototype.toString.call(value);\n return type === '[object Array]';\n };\n\n //------------------------------------------------------------------------------\n // Humanize\n //------------------------------------------------------------------------------\n\n var Humanize = {\n\n // Converts a large integer to a friendly text representation.\n\n intword: function intword(number, charWidth) {\n var decimals = arguments.length <= 2 || arguments[2] === undefined ? 2 : arguments[2];\n\n /*\n * This method is deprecated. Please use compactInteger instead.\n * intword will be going away in the next major version.\n */\n return Humanize.compactInteger(number, decimals);\n },\n\n\n // Converts an integer into its most compact representation\n compactInteger: function compactInteger(input) {\n var decimals = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n decimals = Math.max(decimals, 0);\n var number = parseInt(input, 10);\n var signString = number < 0 ? '-' : '';\n var unsignedNumber = Math.abs(number);\n var unsignedNumberString = String(unsignedNumber);\n var numberLength = unsignedNumberString.length;\n var numberLengths = [13, 10, 7, 4];\n var bigNumPrefixes = ['T', 'B', 'M', 'k'];\n\n // small numbers\n if (unsignedNumber < 1000) {\n return '' + signString + unsignedNumberString;\n }\n\n // really big numbers\n if (numberLength > numberLengths[0] + 3) {\n return number.toExponential(decimals).replace('e+', 'x10^');\n }\n\n // 999 < unsignedNumber < 999,999,999,999,999\n var length = void 0;\n for (var i = 0; i < numberLengths.length; i++) {\n var _length = numberLengths[i];\n if (numberLength >= _length) {\n length = _length;\n break;\n }\n }\n\n var decimalIndex = numberLength - length + 1;\n var unsignedNumberCharacterArray = unsignedNumberString.split('');\n\n var wholePartArray = unsignedNumberCharacterArray.slice(0, decimalIndex);\n var decimalPartArray = unsignedNumberCharacterArray.slice(decimalIndex, decimalIndex + decimals + 1);\n\n var wholePart = wholePartArray.join('');\n\n // pad decimalPart if necessary\n var decimalPart = decimalPartArray.join('');\n if (decimalPart.length < decimals) {\n decimalPart += '' + Array(decimals - decimalPart.length + 1).join('0');\n }\n\n var output = void 0;\n if (decimals === 0) {\n output = '' + signString + wholePart + bigNumPrefixes[numberLengths.indexOf(length)];\n } else {\n var outputNumber = Number(wholePart + '.' + decimalPart).toFixed(decimals);\n output = '' + signString + outputNumber + bigNumPrefixes[numberLengths.indexOf(length)];\n }\n\n return output;\n },\n\n\n // Converts an integer to a string containing commas every three digits.\n intComma: function intComma(number) {\n var decimals = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n\n return Humanize.formatNumber(number, decimals);\n },\n intcomma: function intcomma() {\n return Humanize.intComma.apply(Humanize, arguments);\n },\n\n\n // Formats the value like a 'human-readable' file size (i.e. '13 KB', '4.1 MB', '102 bytes', etc).\n fileSize: function fileSize(filesize) {\n var precision = arguments.length <= 1 || arguments[1] === undefined ? 2 : arguments[1];\n\n for (var label in LABELS_FOR_POWERS_OF_KILO) {\n if (LABELS_FOR_POWERS_OF_KILO.hasOwnProperty(label)) {\n var minnum = LABELS_FOR_POWERS_OF_KILO[label];\n if (filesize >= minnum) {\n return Humanize.formatNumber(filesize / minnum, precision, '') + ' ' + label + 'B';\n }\n }\n }\n if (filesize >= 1024) {\n return Humanize.formatNumber(filesize / 1024, 0) + ' KB';\n }\n\n return Humanize.formatNumber(filesize, 0) + Humanize.pluralize(filesize, ' byte');\n },\n filesize: function filesize() {\n return Humanize.fileSize.apply(Humanize, arguments);\n },\n\n\n // Formats a number to a human-readable string.\n // Localize by overriding the precision, thousand and decimal arguments.\n formatNumber: function formatNumber(number) {\n var precision = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n var thousand = arguments.length <= 2 || arguments[2] === undefined ? ',' : arguments[2];\n var decimal = arguments.length <= 3 || arguments[3] === undefined ? '.' : arguments[3];\n\n // Create some private utility functions to make the computational\n // code that follows much easier to read.\n var firstComma = function firstComma(_number, _thousand, _position) {\n return _position ? _number.substr(0, _position) + _thousand : '';\n };\n\n var commas = function commas(_number, _thousand, _position) {\n return _number.substr(_position).replace(/(\\d{3})(?=\\d)/g, '$1' + _thousand);\n };\n\n var decimals = function decimals(_number, _decimal, usePrecision) {\n return usePrecision ? _decimal + Humanize.toFixed(Math.abs(_number), usePrecision).split('.')[1] : '';\n };\n\n var usePrecision = Humanize.normalizePrecision(precision);\n\n // Do some calc\n var negative = number < 0 && '-' || '';\n var base = String(parseInt(Humanize.toFixed(Math.abs(number || 0), usePrecision), 10));\n var mod = base.length > 3 ? base.length % 3 : 0;\n\n // Format the number\n return negative + firstComma(base, thousand, mod) + commas(base, thousand, mod) + decimals(number, decimal, usePrecision);\n },\n\n\n // Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61')\n toFixed: function toFixed(value, precision) {\n precision = exists(precision) ? precision : Humanize.normalizePrecision(precision, 0);\n var power = Math.pow(10, precision);\n\n // Multiply up by precision, round accurately, then divide and use native toFixed()\n return (Math.round(value * power) / power).toFixed(precision);\n },\n\n\n // Ensures precision value is a positive integer\n normalizePrecision: function normalizePrecision(value, base) {\n value = Math.round(Math.abs(value));\n return isNaN(value) ? base : value;\n },\n\n\n // Converts an integer to its ordinal as a string.\n ordinal: function ordinal(value) {\n var number = parseInt(value, 10);\n\n if (number === 0) {\n return value;\n }\n\n var specialCase = number % 100;\n if ([11, 12, 13].indexOf(specialCase) >= 0) {\n return number + 'th';\n }\n\n var leastSignificant = number % 10;\n\n var end = void 0;\n switch (leastSignificant) {\n case 1:\n end = 'st';\n break;\n case 2:\n end = 'nd';\n break;\n case 3:\n end = 'rd';\n break;\n default:\n end = 'th';\n }\n\n return '' + number + end;\n },\n\n\n // Interprets numbers as occurences. Also accepts an optional array/map of overrides.\n times: function times(value) {\n var overrides = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n if (isFiniteNumber(value) && value >= 0) {\n var number = parseFloat(value);\n var smallTimes = ['never', 'once', 'twice'];\n if (exists(overrides[number])) {\n return String(overrides[number]);\n }\n\n var numberString = exists(smallTimes[number]) && smallTimes[number].toString();\n return numberString || number.toString() + ' times';\n }\n return null;\n },\n\n\n // Returns the plural version of a given word if the value is not 1. The default suffix is 's'.\n pluralize: function pluralize(number, singular, plural) {\n if (!(exists(number) && exists(singular))) {\n return null;\n }\n\n plural = exists(plural) ? plural : singular + 's';\n\n return parseInt(number, 10) === 1 ? singular : plural;\n },\n\n\n // Truncates a string if it is longer than the specified number of characters (inclusive).\n // Truncated strings will end with a translatable ellipsis sequence (\"…\").\n truncate: function truncate(str) {\n var length = arguments.length <= 1 || arguments[1] === undefined ? 100 : arguments[1];\n var ending = arguments.length <= 2 || arguments[2] === undefined ? '...' : arguments[2];\n\n if (str.length > length) {\n return str.substring(0, length - ending.length) + ending;\n }\n return str;\n },\n\n\n // Truncates a string after a certain number of words.\n truncateWords: function truncateWords(string, length) {\n var array = string.split(' ');\n var result = '';\n var i = 0;\n\n while (i < length) {\n if (exists(array[i])) {\n result += array[i] + ' ';\n }\n i++;\n }\n\n if (array.length > length) {\n return result + '...';\n }\n\n return null;\n },\n truncatewords: function truncatewords() {\n return Humanize.truncateWords.apply(Humanize, arguments);\n },\n\n\n // Truncates a number to an upper bound.\n boundedNumber: function boundedNumber(num) {\n var bound = arguments.length <= 1 || arguments[1] === undefined ? 100 : arguments[1];\n var ending = arguments.length <= 2 || arguments[2] === undefined ? '+' : arguments[2];\n\n var result = void 0;\n\n if (isFiniteNumber(num) && isFiniteNumber(bound)) {\n if (num > bound) {\n result = bound + ending;\n }\n }\n\n return (result || num).toString();\n },\n truncatenumber: function truncatenumber() {\n return Humanize.boundedNumber.apply(Humanize, arguments);\n },\n\n\n // Converts a list of items to a human readable string with an optional limit.\n oxford: function oxford(items, limit, limitStr) {\n var numItems = items.length;\n\n var limitIndex = void 0;\n if (numItems < 2) {\n return String(items);\n } else if (numItems === 2) {\n return items.join(' and ');\n } else if (exists(limit) && numItems > limit) {\n var extra = numItems - limit;\n limitIndex = limit;\n limitStr = exists(limitStr) ? limitStr : ', and ' + extra + ' ' + Humanize.pluralize(extra, 'other');\n } else {\n limitIndex = -1;\n limitStr = ', and ' + items[numItems - 1];\n }\n\n return items.slice(0, limitIndex).join(', ') + limitStr;\n },\n\n\n // Converts an object to a definition-like string\n dictionary: function dictionary(object) {\n var joiner = arguments.length <= 1 || arguments[1] === undefined ? ' is ' : arguments[1];\n var separator = arguments.length <= 2 || arguments[2] === undefined ? ', ' : arguments[2];\n\n var result = '';\n\n if (exists(object) && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && !isArray(object)) {\n var defs = [];\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n var val = object[key];\n defs.push('' + key + joiner + val);\n }\n }\n\n return defs.join(separator);\n }\n\n return result;\n },\n\n\n // Describes how many times an item appears in a list\n frequency: function frequency(list, verb) {\n if (!isArray(list)) {\n return null;\n }\n\n var len = list.length;\n var times = Humanize.times(len);\n\n if (len === 0) {\n return times + ' ' + verb;\n }\n\n return verb + ' ' + times;\n },\n pace: function pace(value, intervalMs) {\n var unit = arguments.length <= 2 || arguments[2] === undefined ? 'time' : arguments[2];\n\n if (value === 0 || intervalMs === 0) {\n // Needs a better string than this...\n return 'No ' + Humanize.pluralize(0, unit);\n }\n\n // Expose these as overridables?\n var prefix = 'Approximately';\n var timeUnit = void 0;\n var relativePace = void 0;\n\n var rate = value / intervalMs;\n for (var i = 0; i < TIME_FORMATS.length; ++i) {\n // assumes sorted list\n var f = TIME_FORMATS[i];\n relativePace = rate * f.value;\n if (relativePace > 1) {\n timeUnit = f.name;\n break;\n }\n }\n\n // Use the last time unit if there is nothing smaller\n if (!timeUnit) {\n prefix = 'Less than';\n relativePace = 1;\n timeUnit = TIME_FORMATS[TIME_FORMATS.length - 1].name;\n }\n\n var roundedPace = Math.round(relativePace);\n unit = Humanize.pluralize(roundedPace, unit);\n\n return prefix + ' ' + roundedPace + ' ' + unit + ' per ' + timeUnit;\n },\n\n\n // Converts newlines to
tags\n nl2br: function nl2br(string) {\n var replacement = arguments.length <= 1 || arguments[1] === undefined ? '
' : arguments[1];\n\n return string.replace(/\\n/g, replacement);\n },\n\n\n // Converts
tags to newlines\n br2nl: function br2nl(string) {\n var replacement = arguments.length <= 1 || arguments[1] === undefined ? '\\r\\n' : arguments[1];\n\n return string.replace(/\\/g, replacement);\n },\n\n\n // Capitalizes first letter in a string\n capitalize: function capitalize(string) {\n var downCaseTail = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n return '' + string.charAt(0).toUpperCase() + (downCaseTail ? string.slice(1).toLowerCase() : string.slice(1));\n },\n\n\n // Capitalizes the first letter of each word in a string\n capitalizeAll: function capitalizeAll(string) {\n return string.replace(/(?:^|\\s)\\S/g, function (a) {\n return a.toUpperCase();\n });\n },\n\n\n // Titlecase words in a string.\n titleCase: function titleCase(string) {\n var smallWords = /\\b(a|an|and|at|but|by|de|en|for|if|in|of|on|or|the|to|via|vs?\\.?)\\b/i;\n var internalCaps = /\\S+[A-Z]+\\S*/;\n var splitOnWhiteSpaceRegex = /\\s+/;\n var splitOnHyphensRegex = /-/;\n\n var _doTitleCase = void 0;\n _doTitleCase = function doTitleCase(_string) {\n var hyphenated = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n var firstOrLast = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];\n\n var titleCasedArray = [];\n var stringArray = _string.split(hyphenated ? splitOnHyphensRegex : splitOnWhiteSpaceRegex);\n\n for (var index = 0; index < stringArray.length; ++index) {\n var word = stringArray[index];\n if (word.indexOf('-') !== -1) {\n titleCasedArray.push(_doTitleCase(word, true, index === 0 || index === stringArray.length - 1));\n continue;\n }\n\n if (firstOrLast && (index === 0 || index === stringArray.length - 1)) {\n titleCasedArray.push(internalCaps.test(word) ? word : Humanize.capitalize(word));\n continue;\n }\n\n if (internalCaps.test(word)) {\n titleCasedArray.push(word);\n } else if (smallWords.test(word)) {\n titleCasedArray.push(word.toLowerCase());\n } else {\n titleCasedArray.push(Humanize.capitalize(word));\n }\n }\n\n return titleCasedArray.join(hyphenated ? '-' : ' ');\n };\n\n return _doTitleCase(string);\n },\n titlecase: function titlecase() {\n return Humanize.titleCase.apply(Humanize, arguments);\n }\n };\n\n return Humanize;\n});","import $ from 'jquery';\r\nimport Humanizer from \"humanize-plus\";\r\n\r\nimport { MultiSelectTable } from \"./multiselecttable\"\r\nimport Url from \"../utilities/url\";\r\n\r\n$(function () {\r\n\r\n let getUrlAttribute = function ($element: JQuery): string {\r\n if ($element.is('[href]'))\r\n return 'href'\r\n else if ($element.is('[data-url]'))\r\n return 'data-url';\r\n else if ($element.is('[data-documentlink]'))\r\n return 'data-documentlink';\r\n else\r\n throw new Error('Does not have a valid url.')\r\n }\r\n\r\n let isDisabledKey = 'rustig.multiselectcontextmenuitem.isDisabled';\r\n\r\n let addIdsToUrl = function ($element: JQuery, selected: number[]) {\r\n let href = getUrlAttribute($element);\r\n let queryParameterName = $element.data('actionmenu-multiselect-query-parameter') || 'ids';\r\n let url = new Url($element.attr(href))\r\n .setQueryParameter(queryParameterName, selected.map(x => x.toString()));\r\n $element.attr(href, url.toUrl());\r\n }\r\n\r\n $(document).on('show.rustig.popover', 'table.multiselect [data-popover]', function (e) {\r\n e.stopImmediatePropagation();\r\n let $popover = $(this);\r\n let table = $popover.closest('table.multiselect').data('rustig.multiselecttable');\r\n\r\n let $row = $popover.closest('tr');\r\n if (!table.isRowSelected($row))\r\n table.selectRowElement($row);\r\n\r\n let selected = >table.selected();\r\n\r\n let $popoverContent = $('popover-content'.asDataSelector($popover.data('popover')));\r\n $popoverContent.find('li a').each(function () {\r\n let $element = $(this);\r\n let isDisabled = $element.isDisabled();\r\n $element.data(isDisabledKey, isDisabled);\r\n\r\n if (isDisabled || !$element.is('[data-actionmenu-multiselect]')) {\r\n if (selected.length > 1)\r\n $element.disable();\r\n return;\r\n }\r\n\r\n addIdsToUrl($element, selected);\r\n });\r\n //$popoverContent.find('.actionmenu').prepend($('
  • ' + ' item'.toQuantity(selected.length, Humanizer.ShowQuantityAs.Numeric) + ' selected
  • '));\r\n $popoverContent.find('.actionmenu').prepend($('
  • ' + selected.length + Humanizer.pluralize(selected.length, ' item') + ' selected
  • '));\r\n });\r\n\r\n let tryEnable = function ($element: JQuery) {\r\n let wasDisabledByThisPlugin = $element.data(isDisabledKey) != null && $element.data(isDisabledKey) == false\r\n if (wasDisabledByThisPlugin)\r\n $element.enable();\r\n }\r\n\r\n let removeIdsFromUrl = function ($element: JQuery) {\r\n let href = getUrlAttribute($element);\r\n let queryParameterName = $element.data('multiselect-query-parameter') || 'ids';\r\n let url = new Url($element.attr(href))\r\n .removeQueryParameter(queryParameterName);\r\n $element.attr(href, url.toUrl());\r\n }\r\n\r\n $(document).on('hide.rustig.popover', 'table.multiselect [data-popover]', function () {\r\n let $popover = $(this);\r\n\r\n let $content = $('popover-content'.asDataSelector($popover.data('popover')));\r\n $content.find('li a').each(function () {\r\n let $element = $(this);\r\n\r\n tryEnable($element);\r\n\r\n if ($element.is('[data-actionmenu-multiselect]'))\r\n removeIdsFromUrl($element);\r\n });\r\n $content.find('.actionmenu-header').remove();\r\n });\r\n});","import $ from 'jquery'\r\nimport ko from 'knockout'\r\nimport _ from 'underscore';\r\nimport { Element as RustigElement } from '../utilities/element';\r\n\r\ndeclare global {\r\n\r\n interface JQuery {\r\n multiselecttable(): JQuery;\r\n multiselecttablerow: Function;\r\n }\r\n}\r\n\r\nexport class MultiSelectTable {\r\n static get wireup(): string {\r\n return 'table.multiselect';\r\n }\r\n static isMultiSelect($element: JQuery): boolean {\r\n return $element.is(this.wireup);\r\n }\r\n public get tableKey(): string {\r\n return this.$table.data('multiselect-key');\r\n }\r\n\r\n public get selectAllElement(): RustigElement {\r\n let selector = 'multiselect-key'.asDataSelector(this.tableKey) + ' ' + 'multiselect-selectall'.asDataSelector();\r\n return new RustigElement($(selector));\r\n }\r\n\r\n selected: any;\r\n anySelected: any;\r\n all: any[];\r\n allSelected: any;\r\n\r\n constructor(private $table: JQuery) {\r\n this.$table.addClass('multiselect')\r\n .attr('data-multiselecttable', 'on');\r\n \r\n this.selected = ko.observableArray();\r\n this.allSelected = ko.pureComputed(() => {\r\n let selected = this.selected().length;\r\n let all = this.all.length;\r\n let isSelectAll = selected === all;\r\n\r\n return isSelectAll;\r\n });\r\n\r\n this.anySelected = ko.computed(() => {\r\n return this.selected().length > 0;\r\n });\r\n\r\n if (this.tableKey) {\r\n this.bindExternal(this.tableKey);\r\n }\r\n\r\n this.validateMarkup();\r\n this.koInit();\r\n\r\n this.$table.data(\"rustig.multiselecttable\", this);\r\n this.initializeJsonValues();\r\n\r\n this.allSelected.subscribe((isSelectAll) => {\r\n this.onSelectAllChanged(isSelectAll);\r\n });\r\n }\r\n\r\n public addRow($row: JQuery) {\r\n $row.attr(\"data-bind\", \"css:{ selected: isRowSelected($element)}, click: selectRow\");\r\n $row.find('input[type=\"checkbox\"]').attr(\"data-bind\", \"checked: selected\").attr('data-multiselect-selector', 'true');\r\n this.updateAll();\r\n ko.applyBindings(this, $row[0]);\r\n }\r\n\r\n selectAll() {\r\n let value = this.allSelected();\r\n if (value) {\r\n this.selected.removeAll();\r\n this.$table.find(\"tbody tr\").removeClass(\"selected\");\r\n } else {\r\n this.selected(this.all.slice(0));\r\n this.$table.find(\"tbody tr\").addClass(\"selected\");\r\n }\r\n\r\n return this.onSelectedChanged();\r\n }\r\n\r\n isSelectAllChecked(): boolean {\r\n return this.selectAllElement.value() as boolean\r\n }\r\n\r\n selectRow(data, e) {\r\n let target = $(e.target);\r\n let textIsHighlighted = getSelection().toString();\r\n if (target.is(\"a\") || target.is(\"input\") || textIsHighlighted)\r\n return this.onSelectedChanged();\r\n\r\n let $selector = target.closest(\"tr\").find(\"[data-multiselect-selector]\");\r\n if (e.ctrlKey) {\r\n this.toggle($selector.val());\r\n return this.onSelectedChanged();\r\n }\r\n\r\n let wasSelected = _.contains(this.selected(), $selector.val());\r\n this.selected.removeAll();\r\n this.$table.find(\"tbody tr\").removeClass(\"selected\");\r\n if (!wasSelected)\r\n this.toggle($selector.val());\r\n\r\n return this.onSelectedChanged();\r\n }\r\n\r\n selectRowElement($row: JQuery) {\r\n let selector = $row.find('[data-multiselect-selector]');\r\n this.toggle(selector.val());\r\n return true;\r\n }\r\n\r\n toggle(value: any) {\r\n let index = this.selected().indexOf(value);\r\n if (index === -1)\r\n this.selected.push(value);\r\n else\r\n this.selected.splice(index, 1);\r\n }\r\n\r\n isRowSelected(element) {\r\n let val = $(element).find(\"[data-multiselect-selector]\").val();\r\n return this.selected.indexOf(val) >= 0;\r\n }\r\n\r\n destroy(): void {\r\n ko.cleanNode(this.$table[0]);\r\n this.$table.removeClass(\"multiselect\");\r\n this.$table.removeData(\"rustig.multiselecttable\");\r\n }\r\n refresh(): void {\r\n ko.cleanNode(this.$table[0]);\r\n this.koInit();\r\n\r\n this.$table.data(\"rustig.multiselecttable\", this);\r\n }\r\n\r\n onSelectedChanged(): boolean {\r\n let $count = $('multiselect-selected-row-count'.asDataSelector(this.tableKey));\r\n if ($count.length == 0)\r\n return true;\r\n\r\n let selectedCount = this.selected().length;\r\n let rCount = new RustigElement($count);\r\n if (rCount.isInput)\r\n rCount.value(selectedCount);\r\n else\r\n rCount.text(selectedCount);\r\n\r\n return true;\r\n }\r\n\r\n private onSelectAllChanged(isSelectAll) {\r\n this.$table.trigger('allSelectedChanged.rustig.multiselecttable', [{ isSelectAll: isSelectAll }]);\r\n }\r\n\r\n private koInit(): void {\r\n this.updateAll();\r\n this.createBinders();\r\n ko.applyBindings(this, this.$table[0]);\r\n }\r\n\r\n private createBinders(): void {\r\n this.$table.attr(\"data-bind\", \"attr:{ 'data-table-selected' : ko.toJSON(selected), 'data-table-all' : ko.toJSON(all)}\");\r\n\r\n this.$table.find(\"tbody tr:not('.table-more-row')\").each(function () {\r\n $(this).attr(\"data-bind\", \"css:{ selected: isRowSelected($element)}, click: selectRow\");\r\n });\r\n\r\n this.$table.find(\"td input[type='checkbox']\").each(function () {\r\n $(this).attr(\"data-bind\", \"checked: selected\");\r\n $(this).attr(\"data-multiselect-selector\", \"true\");\r\n });\r\n\r\n this.$table.find(\"th input[type='checkbox']\")\r\n .attr(\"data-multiselect-selectall\", \"true\")\r\n .attr(\"data-bind\", \"click: selectAll, checked: allSelected\");\r\n\r\n }\r\n\r\n private bindExternal(key: string): void {\r\n let json = ko.computed(() => {\r\n return ko.toJSON(this.selected);\r\n });\r\n\r\n json.subscribe((v) => {\r\n $('multiselect-json'.asDataSelector(key))\r\n .each(function () {\r\n $(this).val(v);\r\n });\r\n });\r\n\r\n this.anySelected.subscribe((v) => {\r\n $('multiselect-any'.asDataSelector(key))\r\n .each(function () {\r\n if (v)\r\n $(this).enable();\r\n else\r\n $(this).disable();\r\n });\r\n });\r\n\r\n }\r\n\r\n private validateMarkup(): void {\r\n if (!this.$table.is(\"table\"))\r\n throw new Error(\"Multiselect table must be initiated on a element\");\r\n }\r\n private updateAll(): void {\r\n let ids = [];\r\n let _this = this;\r\n this.$table.find(\"td input[type='checkbox']\").each(function () {\r\n let id = $(this).val();\r\n ids.push(id);\r\n\r\n let isSelected = !!(new RustigElement($(this)).value());\r\n if (isSelected)\r\n _this.selected.push(id);\r\n });\r\n\r\n this.all = ids;\r\n this.onSelectedChanged();\r\n }\r\n\r\n private initializeJsonValues(): void {\r\n if (this.tableKey === undefined)\r\n return;\r\n\r\n let initialJson = ko.toJSON(this.selected);\r\n $('multiselect-json'.asDataSelector(this.tableKey))\r\n .each(function () {\r\n $(this).val(initialJson);\r\n });\r\n }\r\n}\r\n\r\n(function ($) {\r\n function Plugin() {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let table = $this.data('rustig.multiselecttable');\r\n\r\n if (!table) {\r\n new MultiSelectTable($this);\r\n }\r\n else {\r\n table.refresh();\r\n }\r\n });\r\n }\r\n $.fn.multiselecttable = Plugin;\r\n $.fn.multiselecttablerow = function () {\r\n this.each(function () {\r\n let table = $(this).closest('table.multiselect').data('rustig.multiselecttable');\r\n\r\n if (!table)\r\n return true;\r\n\r\n table.addRow($(this).closest('tr'));\r\n });\r\n };\r\n})($);","import KeyCode from \"../utilities/keycode\"\r\nimport $ from 'jquery';\r\nimport _ from \"underscore\";\r\nimport { Url } from \"../utilities/url\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n photoviewer(option, args): any;\r\n }\r\n}\r\n\r\n\r\nexport class PhotoViewer {\r\n public static get wireup(): string { return '[data-photo-viewer]'; }\r\n\r\n private $element: JQuery;\r\n private photos: Array;\r\n private showing: Photo;\r\n private $globalOverlay: JQuery;\r\n private $photosContainer: JQuery;\r\n\r\n public constructor($element: JQuery, options: any) {\r\n if (!$element || $element.length != 1)\r\n throw new Error('You must provide an element to Rustig.PhotoViewer');\r\n\r\n this.$element = $element;\r\n this.buildOverlay();\r\n this.loadPhotos();\r\n this.$element.on('click.rustig.photoviewer', '[data-pv-photo]', this.onPhotoClick.bind(this));\r\n this.setEscapeKeyToClosePhotoViewer();\r\n }\r\n\r\n public AddPhoto($element: JQuery) {\r\n if (!$element && $element.length != 1)\r\n throw Error('You must provide a single element to Rustig.PhotoViewer.AddPhoto');\r\n\r\n this.photos.push(new Photo($element));\r\n }\r\n\r\n public RemovePhoto($element: JQuery) {\r\n if (!$element && $element.length != 1)\r\n throw Error('You must provide a single element to Rustig.PhotoViewer.AddPhoto');\r\n\r\n let photo = this.getPhoto($element);\r\n this.photos.splice(this.photos.indexOf(photo), 1);\r\n }\r\n\r\n private buildOverlay(): void {\r\n this.$globalOverlay = $('#photoViewerGlobalOverlay');\r\n if (this.$globalOverlay.length <= 0)\r\n this.$globalOverlay = PhotoViewerGlobalOverlay.build();\r\n\r\n this.$photosContainer = this.$globalOverlay.find('[data-pv-container]');\r\n\r\n this.$globalOverlay.on('close.rustig.photoviewer', this.closeOverlay.bind(this));\r\n this.$globalOverlay.on('previous.rustig.photoviewer', this.viewPrevious.bind(this));\r\n this.$globalOverlay.on('next.rustig.photoviewer', this.viewNext.bind(this));\r\n this.$globalOverlay.on('download.rustig.photoviewer', () => {\r\n if (this.showing)\r\n this.showing.downloadPhoto()\r\n });\r\n }\r\n\r\n private loadPhotos(): void {\r\n let self = this;\r\n self.photos = new Array();\r\n\r\n self.$element.find('[data-pv-photo]').each(function () {\r\n let $this = $(this);\r\n\r\n let photo = self.getPhoto($this);\r\n if (photo)\r\n self.photos.push(photo);\r\n else\r\n self.photos.push(new Photo($this));\r\n });\r\n }\r\n\r\n private setEscapeKeyToClosePhotoViewer(): void {\r\n $(document).keyup((e) => {\r\n let isPhotoViewerOpen = this.showing;\r\n\r\n if (isPhotoViewerOpen && e.keyCode == KeyCode.Escape) {\r\n this.closeOverlay();\r\n e.stopImmediatePropagation();\r\n }\r\n });\r\n }\r\n\r\n private getPhoto($element: JQuery): Photo {\r\n let url = $element.data('pv-photo');\r\n let $photo = this.$globalOverlay.find('pv-full-image'.asDataSelector(url));\r\n if ($photo.length <= 0)\r\n return null;\r\n else\r\n return $photo.data('rustig.photoviewer.photo');\r\n }\r\n\r\n public onPhotoClick(event: Event): void {\r\n let $photo = $(event.target).closest('[data-pv-photo]');\r\n let url = $photo.data('pv-photo');\r\n\r\n let photo = _.findWhere(this.photos, { downloadUrl: url });\r\n this.openOverlay(photo);\r\n }\r\n\r\n private openOverlay(photo: Photo): void {\r\n this.$globalOverlay.show();\r\n this.updateShowing(photo);\r\n $('html').addClass('overflow-hidden');\r\n }\r\n\r\n private closeOverlay(): void {\r\n if (!this.showing)\r\n return;\r\n\r\n this.$globalOverlay.hide();\r\n this.showing.hide();\r\n this.showing = null;\r\n $('html').removeClass('overflow-hidden');\r\n }\r\n\r\n private viewPrevious(): void {\r\n if (!this.showing)\r\n return;\r\n\r\n let index = this.photos.indexOf(this.showing);\r\n index = index == 0 ? this.photos.length - 1 : index - 1;\r\n\r\n this.updateShowing(this.photos[index]);\r\n }\r\n\r\n private viewNext(): void {\r\n if (!this.showing)\r\n return;\r\n\r\n let index = this.photos.indexOf(this.showing);\r\n index = index == this.photos.length - 1 ? 0 : index + 1;\r\n\r\n this.updateShowing(this.photos[index]);\r\n }\r\n\r\n private updateShowing(photo: Photo): void {\r\n if (this.showing)\r\n this.showing.hide();\r\n\r\n this.showing = photo;\r\n this.$photosContainer.append(this.showing.show())\r\n .trigger('photochanged', { name: this.showing.photoName });\r\n }\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.photoviewer');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new PhotoViewer($this, options);\r\n $this.data('rustig.photoviewer', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.photoviewer = Plugin;\r\n\r\nclass PhotoViewerGlobalOverlay {\r\n\r\n public static build(): JQuery {\r\n let $root = $('
    ')\r\n .attr('id', 'photoViewerGlobalOverlay');\r\n\r\n let $grid = $('
    ').appendTo($root);\r\n\r\n let $nameContainer = $('
    ').appendTo($grid);\r\n let $name = $('
    ')\r\n .appendTo($nameContainer);\r\n\r\n let $buttonsContainer = $('
    ').appendTo($grid);\r\n let $tbGroup = $('
    ')\r\n .appendTo($buttonsContainer);\r\n\r\n let $downloadButton = $('
    ')\r\n .appendTo($tbGroup)\r\n .on('click.rustig', () => {\r\n $root.trigger('download.rustig');\r\n });\r\n\r\n let $closeButton = $('
    ')\r\n .appendTo($tbGroup)\r\n .on('click.rustig', () => {\r\n $root.trigger('close.rustig');\r\n });\r\n\r\n let $photosContainer = $('
    ')\r\n .appendTo($root);\r\n\r\n let resizePhotosContainer = () => $photosContainer.height($(window).height() - $grid.height());\r\n resizePhotosContainer();\r\n $(window).on('resize.rustig.photoviewer', _.throttle(resizePhotosContainer, 250));\r\n\r\n let $previousButton = $('
    ')\r\n .appendTo($photosContainer)\r\n .on('click.rustig', () => {\r\n $root.trigger('previous.rustig');\r\n });\r\n\r\n let $nextButton = $('
    ')\r\n .appendTo($photosContainer)\r\n .on('click.rustig', () => {\r\n $root.trigger('next.rustig');\r\n });\r\n\r\n return $root.hide()\r\n .appendTo($(document.body))\r\n .on('photochanged.rustig', (event, options) => {\r\n $name.text(options.name);\r\n });;\r\n }\r\n}\r\n\r\nclass Photo {\r\n\r\n private $element: JQuery;\r\n private $fullImageContainer: JQuery;\r\n private $image: JQuery;\r\n private $statusContainer: JQuery;\r\n private name: string;\r\n\r\n private _downloadUrl: string;\r\n private downloadAttempted: boolean;\r\n\r\n public get downloadUrl(): string { return this._downloadUrl; }\r\n public get photoName(): string { return this.name; }\r\n\r\n public constructor($element: JQuery) {\r\n if (!$element || $element.length != 1)\r\n throw new Error('You must provide an element to Rustig.Photo');\r\n\r\n this.$element = $element;\r\n this._downloadUrl = this.$element.data('pv-photo');\r\n this.name = this.$element.data('pv-photo-name');\r\n\r\n this.$fullImageContainer = $('
    ')\r\n .attr('data-pv-full-image', this.downloadUrl)\r\n .addClass('pv-full-image')\r\n .appendTo(this.$element)\r\n .data('rustig.photoviewer.photo', this)\r\n .hide();\r\n\r\n this.$statusContainer = $('
    ')\r\n .attr('data-pv-status', 'on')\r\n .addClass('pv-status')\r\n .html('
    Downloading')\r\n .appendTo(this.$fullImageContainer);\r\n\r\n this.$fullImageContainer.data('rustig.photoviewer.photo', this);\r\n }\r\n\r\n public show(): JQuery {\r\n if (!this.downloadAttempted) {\r\n this.downloadForViewer();\r\n this.downloadAttempted = true;\r\n }\r\n\r\n return this.$fullImageContainer.show();\r\n }\r\n\r\n public hide(): void {\r\n this.$fullImageContainer.hide();\r\n }\r\n\r\n public downloadPhoto(): void {\r\n window.open(this.downloadUrl, '_blank');\r\n }\r\n\r\n private downloadForViewer(): void {\r\n let urlThatPreventsCaching = new Url(this.downloadUrl)\r\n .setQueryParameter('time', new Date().getTime().toString())\r\n .toUrl();\r\n this.$image = $('')\r\n .attr('src', urlThatPreventsCaching)\r\n .appendTo(this.$fullImageContainer)\r\n .on('load.rustig.photoviewer', this.onSuccess.bind(this))\r\n .on('error.rustig.photoviewer', this.onError.bind(this));\r\n }\r\n\r\n private onSuccess(data): void {\r\n this.$statusContainer.remove();\r\n\r\n let photoSize = PhotoSize.getPhotoSizeScaledToFitContainer(this.$image, this.$image.parent());\r\n\r\n this.$fullImageContainer.css('max-height', photoSize.height);\r\n this.$fullImageContainer.css('max-width', photoSize.width);\r\n }\r\n\r\n private onError(): void {\r\n this.$image.remove();\r\n\r\n let $children = this.$statusContainer.children().hide();\r\n let $retryContainer = $('
    ')\r\n .append('
    Error downloading image
    Retry')\r\n .appendTo(this.$statusContainer)\r\n .on('click', 'a', () => {\r\n $retryContainer.remove();\r\n $children.show();\r\n this.downloadForViewer();\r\n });\r\n }\r\n}\r\n\r\nexport class PhotoSize {\r\n\r\n constructor(public width: number, public height: number) { }\r\n\r\n public static getPhotoSizeScaledToFitContainer($element: JQuery, $container: JQuery): PhotoSize {\r\n if (!$element && $element.length != 1 && !$element.is('img'))\r\n throw Error('You must provide an img element to Rustig.PhotoSize');\r\n\r\n if (!$container && $container.length != 1)\r\n throw Error('You must provide an container element to Rustig.PhotoSize');\r\n\r\n let image = $element[0];\r\n $container = $container || $( window);\r\n\r\n let containerHeight = $container.outerHeight();\r\n let containerWidth = $container.outerWidth();\r\n\r\n let imageHeight = image.naturalHeight;\r\n let imageWidth = image.naturalWidth;\r\n\r\n if (imageHeight > containerHeight || imageWidth > containerWidth) {\r\n let max = imageHeight > imageWidth ? imageHeight : imageWidth;\r\n let ratio = containerHeight / imageHeight;\r\n\r\n imageHeight = ratio * imageHeight;\r\n imageWidth = ratio * imageWidth;\r\n }\r\n\r\n return new PhotoSize(imageWidth, imageHeight);\r\n }\r\n}\r\n","import Element from \"../utilities/element\";\r\nimport { StringExtensions } from \"../utilities/extensions\";\r\nimport \"../utilities/readonly\";\r\nimport $ from 'jquery';\r\nimport _ from \"underscore\";\r\nimport \"./popover\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n realtimevalidation: (option, args) => any;\r\n }\r\n}\r\n\r\n\r\nexport class RealTimeValidation {\r\n public static get wireup(): string { return 'dependency'.asDataSelector(); }\r\n\r\n private dependency: Dependency;\r\n\r\n public constructor($element: JQuery) {\r\n if (!$element && $element.length != 1)\r\n throw new Error('You must provide a single element to Rustig.RealTimeValidation');\r\n\r\n this.dependency = new Dependency($element);\r\n }\r\n}\r\n\r\nclass Dependency {\r\n private $element: JQuery;\r\n private element: Element;\r\n private dependents: Dependent[];\r\n private _id: string;\r\n private _name: string;\r\n private $popover: JQuery;\r\n private $validationErrorElement: JQuery;\r\n private shouldPreventPopover: boolean;\r\n private shouldPreventErrorClass: boolean;\r\n\r\n public get id(): string { return this._id; }\r\n public get name(): string { return this._name; }\r\n public get value(): string { return this.element.value(); }\r\n\r\n public constructor($element: JQuery) {\r\n this.$element = $element;\r\n this.element = new Element(this.$element);\r\n\r\n this._id = this.$element.data('dependency');\r\n if (!this.id)\r\n throw new Error('id cannot be null');\r\n this._id = this.id.toString().replace(' ', '_');\r\n\r\n this._name = this.$element.data('dependency-name');\r\n if (!this.name)\r\n throw new Error('name cannot be null');\r\n\r\n this.shouldPreventPopover = StringExtensions.toBoolean(this.$element.data('dependency-should-prevent-popover'));\r\n this.shouldPreventErrorClass = StringExtensions.toBoolean(this.$element.data('dependency-should-prevent-error-class'));\r\n\r\n this.dependents = this.getDependents();\r\n this.$validationErrorElement = this.getValidationErrorElement(this.$element);\r\n this.$element.on('change.rustig.realtimevalidation', this.onChange.bind(this));\r\n $(document).one('rustig.conventionsready', () => this.onChange());\r\n }\r\n\r\n public removeMessageFor(dependent: Dependent): void {\r\n let $message = dependent.getPopoverMessage();\r\n if ($message && $message.length) {\r\n $message.remove();\r\n dependent.cachePopoverMessage(null);\r\n }\r\n\r\n let hasOtherErrors = _.any(this.dependents, x => x.hasValidationError);\r\n if (!hasOtherErrors) {\r\n this.$validationErrorElement.removeClass('realtimevalidation-error');\r\n\r\n if (this.$validationErrorElement.data('rustig.popover.rtv'))\r\n this.$validationErrorElement.popover('disable', 'rtv').popover('close', 'rtv');\r\n }\r\n }\r\n\r\n public addMessageFor(dependent: Dependent): void {\r\n if (!this.shouldPreventErrorClass)\r\n this.$validationErrorElement.addClass('realtimevalidation-error');\r\n\r\n let messageAlreadyExists = dependent.getPopoverMessage();\r\n if (this.shouldPreventPopover || messageAlreadyExists)\r\n return;\r\n\r\n if (!this.$popover)\r\n this.createPopover();\r\n\r\n this.$validationErrorElement.popover('enable', 'rtv');\r\n this.appendPopoverMessage(dependent);\r\n\r\n if (this.$validationErrorElement.is(':focus'))\r\n this.$validationErrorElement.popover('open', 'rtv');\r\n }\r\n\r\n private getValidationErrorElement($element: JQuery): JQuery {\r\n let $validationElement;\r\n\r\n let target = $element.data('dependency-error-target');\r\n if (target)\r\n $validationElement = $('dependency-error-target-for'.asDataSelector(target));\r\n else\r\n $validationElement = this.element.$userFacingElement;\r\n\r\n if ($validationElement.length <= 0)\r\n throw new Error('A validation error element must be defined');\r\n\r\n return $validationElement;\r\n }\r\n\r\n private getDependents(): Dependent[] {\r\n let self = this;\r\n let $dependents = $('[data-depends-on-' + self.id + ']');\r\n\r\n var result: Dependent[] = [];\r\n\r\n $dependents.each((index, value) => {\r\n result.push(new Dependent($(value), self));\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private createPopover(): void {\r\n let $popoverContent = $('
    ')\r\n .insertAfter(this.$validationErrorElement);\r\n\r\n this.$popover = $('
    ')\r\n .appendTo($popoverContent);\r\n\r\n this.$validationErrorElement.popover({\r\n popover: this.id,\r\n trigger: 'focus',\r\n placement: 'top',\r\n containerClass: 'error-container',\r\n channel: 'rtv'\r\n });\r\n }\r\n\r\n private appendPopoverMessage(dependent: Dependent) {\r\n dependent.cachePopoverMessage(\r\n $('
    ')\r\n .attr('data-validation-message', 'on')\r\n .html(this.buildValidationMessage(dependent.validationMessage))\r\n .appendTo(this.$popover)\r\n );\r\n }\r\n\r\n private buildValidationMessage(message: string): string {\r\n if (this.element.isSelect && message.indexOf(\"Enter\") == 0)\r\n return \"Select\" + message.substring(\"Enter\".length);\r\n return message;\r\n }\r\n\r\n private onChange(): void {\r\n for (let i = 0; i < this.dependents.length; i++) {\r\n this.dependents[i].onChange();\r\n }\r\n }\r\n}\r\n\r\nclass Dependent {\r\n private element: Element;\r\n private dependency: Dependency;\r\n private dependencyValidator: RegExp;\r\n private dependentValidator: RegExp;\r\n private _hasValidationError: boolean;\r\n private shouldDisableDependentWhileValidationError: boolean;\r\n private _validationMessage: string;\r\n\r\n private get $element(): JQuery { return this.element.$element; }\r\n private get dependencyValidatorAttribute(): string { return 'data-depends-on-' + this.dependency.id + '-dependency-validator'; }\r\n private get dependentValidatorAttribute(): string { return 'data-depends-on-' + this.dependency.id + '-dependent-validator'; }\r\n private get shouldDisableAttribute(): string { return 'data-depends-on-' + this.dependency.id + '-should-disable'; }\r\n private get validationMessageAttribute(): string { return 'data-depends-on-' + this.dependency.id + '-validation-message'; }\r\n\r\n public get hasValidationError(): boolean { return this._hasValidationError; }\r\n public get validationMessage(): string { return this._validationMessage; }\r\n\r\n public constructor($element: JQuery, dependency: Dependency) {\r\n this.element = new Element($element);\r\n this.dependency = dependency;\r\n\r\n if (this.element.isCheckbox)\r\n throw new Error('Checkbox is not supported');\r\n if (this.element.isRadio)\r\n throw new Error('Radio buttons are not supported');\r\n\r\n let dependentName = $element.data('depends-on-name');\r\n if (!dependentName)\r\n throw new Error('dependentName cannot be null');\r\n\r\n let anyValueButEmpty = '.+';\r\n this.dependentValidator = new RegExp(this.$element.attr(this.dependentValidatorAttribute) || anyValueButEmpty);\r\n this.dependencyValidator = new RegExp(this.$element.attr(this.dependencyValidatorAttribute) || anyValueButEmpty);\r\n\r\n this._validationMessage = this.$element.attr(this.validationMessageAttribute) || dependency.name + ' is required for ' + dependentName;\r\n this.shouldDisableDependentWhileValidationError = StringExtensions.toBoolean(this.$element.attr(this.shouldDisableAttribute));\r\n\r\n this.$element.on('change.rustig.realtimevalidation', this.onChange.bind(this));\r\n }\r\n\r\n public cachePopoverMessage($message: JQuery): void {\r\n this.$element.data(this.dependency.id, $message);\r\n }\r\n\r\n public getPopoverMessage(): JQuery {\r\n return this.$element.data(this.dependency.id);\r\n }\r\n\r\n public onChange(): void {\r\n this._hasValidationError = this.dependentPassesValidation() && !this.dependencyPassesValidation();\r\n\r\n if (this.hasValidationError) {\r\n this.dependency.addMessageFor(this);\r\n\r\n if (this.shouldDisableDependentWhileValidationError) {\r\n this.element.$userFacingElement.readonly();\r\n this.element.value('');\r\n }\r\n }\r\n else {\r\n this.dependency.removeMessageFor(this);\r\n\r\n if (this.shouldDisableDependentWhileValidationError)\r\n this.element.$userFacingElement.editable();\r\n }\r\n }\r\n\r\n private dependentPassesValidation(): boolean {\r\n return this.dependentValidator.test(this.$element.val() as string);\r\n }\r\n\r\n private dependencyPassesValidation(): boolean {\r\n return this.dependencyValidator.test(this.dependency.value);\r\n }\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('pb.realtimevalidation');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new RealTimeValidation($this);\r\n $this.data('rustig.realtimevalidation', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.realtimevalidation = Plugin;\r\n","declare var CKEDITOR: any;\r\nimport $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n richtext:(option) => any;\r\n }\r\n}\r\n\r\nexport class RichText {\r\n static get wireup(): string {\r\n return '[data-richtext]';\r\n }\r\n\r\n constructor(private $textArea: JQuery) {\r\n var id = $textArea.attr(\"id\");\r\n CKEDITOR.replace(id);\r\n }\r\n}\r\n\r\n($ => {\r\n function Plugin(option) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.richtext');\r\n\r\n if (!data) {\r\n data = new RichText($this);\r\n $this.data('rustig.richtext', data);\r\n }\r\n if (typeof option == 'string') {\r\n data[option]();\r\n }\r\n });\r\n }\r\n\r\n $.fn.richtext = Plugin;\r\n\r\n})($);","import $ from 'jquery';\r\nimport Element from '../utilities/element';\r\nimport _ from 'underscore';\r\n\r\ndeclare global {\r\n\r\n interface JQuery {\r\n searchField(options?: any, args?: any): JQuery;\r\n }\r\n}\r\n\r\nexport class SearchField {\r\n private static id: number = 0;\r\n static get wireup(): string {\r\n return '[data-searchfield]';\r\n }\r\n private debouncedDoAction: Function;\r\n private $element: JQuery;\r\n private $searchForm: JQuery;\r\n private isPartOfSearchForm: boolean;\r\n private $targetForm: JQuery;\r\n private $dataForm: JQuery;\r\n private hasTargetForm: boolean;\r\n private hasCustomAction: boolean;\r\n private remoteDataFilter: (data: any, state: any) => any;\r\n private $filterElement: JQuery;\r\n private get filterId(): number {\r\n return this.$filterElement.data('rustig.searchfield.filterId') || 0;\r\n }\r\n private set filterId(value: number) {\r\n this.$filterElement.data('rustig.searchfield.filterId', value);\r\n }\r\n private remoteAction: Function;\r\n private element: Element;\r\n private value: any;\r\n\r\n private DEFAULTS: ISearchFieldOptions = {\r\n sfDelay: 500\r\n };\r\n\r\n constructor(element: JQuery, private options?: ISearchFieldOptions) {\r\n this.$element = $(element);\r\n this.init();\r\n }\r\n\r\n public setValue(value: any) {\r\n this.value = value;\r\n }\r\n\r\n private init(): void {\r\n this.options = $.extend({}, this.DEFAULTS, this.$element.data(), this.options);\r\n this.isPartOfSearchForm = !this.options.url;\r\n this.hasCustomAction = this.options.action != null;\r\n this.resolveTargetForm();\r\n this.$searchForm = this.hasTargetForm ? this.$targetForm : this.$element.closest('form');\r\n if (!this.hasCustomAction) {\r\n this.remoteDataFilter = this.getDefaultDataFilter();\r\n this.$filterElement = this.isPartOfSearchForm ? this.$searchForm : this.$element;\r\n }\r\n\r\n this.element = new Element(this.$element);\r\n this.value = this.getsCurrentValue();\r\n\r\n this.validate();\r\n\r\n var actionEventName = this.determineEventName();\r\n\r\n if (this.isPartOfSearchForm && !this.hasCustomAction) {\r\n let formDebounceFunction = this.$filterElement.data('rustig.searchfield.debounce');\r\n if (!formDebounceFunction) {\r\n formDebounceFunction = _.debounce((e) => this.doAction(e), this.options.sfDelay);\r\n this.$filterElement.data('rustig.searchfield.debounce', formDebounceFunction);\r\n }\r\n this.debouncedDoAction = formDebounceFunction;\r\n }\r\n else {\r\n this.debouncedDoAction = _.debounce((e) => this.doAction(e), this.options.sfDelay);\r\n }\r\n\r\n this.$element.on(actionEventName, (e) => this.debouncedDoAction(e));\r\n }\r\n\r\n private doAction(e: JQueryEventObject): void {\r\n if (!this.valueChanged())\r\n return;\r\n\r\n if (this.options.action) {\r\n this.options.action(this.$element, e);\r\n return;\r\n }\r\n\r\n var data = {};\r\n if (this.hasTargetForm) {\r\n var $formInputs = this.$dataForm.find('[name]');\r\n var $this = this;\r\n $formInputs.each(function () {\r\n $this.addInputToData($(this), data);\r\n });\r\n }\r\n else if (!this.isPartOfSearchForm) {\r\n this.addInputToData(this.$filterElement, data);\r\n }\r\n else {\r\n this.addsNameOverridesToFormData(data);\r\n }\r\n\r\n this.$filterElement.remote({\r\n state: ++this.filterId,\r\n data: data,\r\n dataFilter: this.remoteDataFilter,\r\n allowMultipleAjaxCalls: true\r\n });\r\n }\r\n\r\n private addsNameOverridesToFormData(data: any) {\r\n let $searchfieldNameInputs = this.$filterElement.find('[data-searchfield-name]').addBack();\r\n $searchfieldNameInputs.each((i, e) => {\r\n this.addInputToData($(e), data);\r\n });\r\n }\r\n\r\n private valueChanged(): boolean {\r\n var currentValue = this.getsCurrentValue();\r\n\r\n if (this.value === currentValue)\r\n return false;\r\n\r\n this.value = currentValue;\r\n return true;\r\n }\r\n\r\n private getsCurrentValue(): any {\r\n if (this.isPartOfSearchForm && !this.hasCustomAction) {\r\n let nameSorter = (a: any, b: any) => {\r\n if (a.name > b.name)\r\n return 1;\r\n if (b.name > a.name)\r\n return -1;\r\n return 0;\r\n }\r\n let joinReducer = (output: string, currentValue: any) => output + \"&\" + currentValue.name + \"=\" + currentValue.value;\r\n let selector = this.element.element.matches('form') ? '[name]' : SearchField.wireup;\r\n return this.$filterElement.find(selector)\r\n .toArray()\r\n .map((element: HTMLElement) => Element.from(element))\r\n .map((element: Element) => { return { name: element.name, value: element.value() } })\r\n .sort(nameSorter)\r\n .reduce(joinReducer, '');\r\n }\r\n else\r\n return this.element.value();\r\n }\r\n\r\n private validate(): void {\r\n if (this.hasCustomAction)\r\n return;\r\n\r\n if (this.isPartOfSearchForm && this.$searchForm.length == 0)\r\n throw new Error('The search field is part of a search form and the form cannot be found.');\r\n\r\n if (this.hasTargetForm && this.$targetForm.length == 0)\r\n throw new Error('the target form for the search fields could not be found.');\r\n }\r\n\r\n private getDefaultDataFilter(): any {\r\n return (data, state) => {\r\n if (state == this.filterId) {\r\n return data;\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n private addInputToData($input: JQuery, data) {\r\n let element = new Element($input);\r\n let name = $input.data('searchfield-name') || element.name();\r\n data[name] = element.value();\r\n }\r\n\r\n private resolveTargetForm() {\r\n this.$dataForm = this.$element.closest('[data-form]');\r\n var targetFormSelector = this.$dataForm.data('form');\r\n if (targetFormSelector) {\r\n this.hasTargetForm = true;\r\n this.$targetForm = $(targetFormSelector);\r\n }\r\n }\r\n\r\n private determineEventName(): string {\r\n var actions: Array = new Array('rustig.valuebinding.valueset');\r\n\r\n if (this.options.sfTrigger)\r\n actions.push(this.options.sfTrigger);\r\n else if (this.$element.is('form')) {\r\n actions.push('change.rustig');\r\n actions.push('change.rustig.searchfield');\r\n actions.push('input.rustig.searchfield');\r\n }\r\n else {\r\n var isDateField = this.$element.is('[data-datefield]');\r\n var triggersFromChangeEvent = this.$element.is('select, [type=\"checkbox\"], .input-radio-group, [data-ms-real-input], [data-daterange-input]');\r\n\r\n if (isDateField)\r\n actions.push('change.rustig');\r\n else if (triggersFromChangeEvent)\r\n actions.push('change.rustig.searchfield');\r\n else\r\n actions.push('input.rustig.searchfield');\r\n }\r\n\r\n return actions.join(' ');\r\n }\r\n}\r\n\r\nexport interface ISearchFieldOptions {\r\n url?: string;\r\n action?: ($element: JQuery, event: JQueryEventObject) => void;\r\n sfDelay?: number;\r\n sfTrigger?: string;\r\n}\r\n\r\n(function ($) {\r\n function Plugin(option, args) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.searchfield');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new SearchField(this, options);\r\n $this.data('rustig.searchfield', data);\r\n }\r\n if (typeof option == 'string') {\r\n data[option](args);\r\n }\r\n });\r\n }\r\n ($.fn).searchField = Plugin;\r\n})($);","import $ from 'jquery'\r\nimport Focus from \"../utilities/focusfield\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n tabs(option?: any): JQuery;\r\n }\r\n}\r\n\r\nexport class Tabs {\r\n static get wireup(): string {\r\n return '[data-tabs]';\r\n }\r\n\r\n private DEFAULTS: ITabsOptions = {\r\n selectedTabClass: null,\r\n };\r\n\r\n private options: ITabsOptions;\r\n constructor(private $tabs: JQuery, options: ITabsOptions) {\r\n this.options = $.extend(this.DEFAULTS, $tabs.data());\r\n this.$tabs.on('click.rustig.tabs', '[data-tab]', (e: JQueryEventObject) => {\r\n this.selectTab( $(e.currentTarget));\r\n })\r\n\r\n this.selectInitialTab();\r\n this.applyErrors();\r\n }\r\n\r\n public selectTab($tab: JQuery): void {\r\n var tabId = $tab.data('tab');\r\n\r\n if (this.options.selectedTabClass) {\r\n this.$tabs.find('[data-tab]').removeClass(this.options.selectedTabClass);\r\n $tab.addClass(this.options.selectedTabClass);\r\n }\r\n\r\n this.$tabs.find('[data-tab-content]').removeClass('selected');\r\n var $content = this.findContent(tabId);\r\n $content.addClass('selected');\r\n Focus.autoFocus($content);\r\n }\r\n\r\n public applyErrors() {\r\n this.$tabs.find('[data-tab-content]').each((i, e) => {\r\n var $content = $(e);\r\n var id = $content.data('tab-content');\r\n var hasError = $content.find('.input-validation-error').length > 0;\r\n\r\n if (hasError)\r\n this.addErrorIconToTab(this.findTab(id));\r\n });\r\n }\r\n\r\n private addErrorIconToTab($tab: JQuery) {\r\n var $errorIcon = $('');\r\n var $tabIcon = $tab.find('[class *= \"icon-\"]');\r\n\r\n if ($tabIcon.length > 0)\r\n $tabIcon.replaceWith($errorIcon);\r\n else\r\n $tab.append($errorIcon);\r\n }\r\n\r\n private findContent(tabId: string): JQuery {\r\n return this.$tabs.find('[data-tab-content=\"' + tabId + '\"]');\r\n }\r\n\r\n private findTab(tabId: string): JQuery {\r\n return this.$tabs.find('[data-tab=\"' + tabId + '\"]');\r\n }\r\n\r\n private selectInitialTab() {\r\n var $allTabs = this.$tabs.find('[data-tab]');\r\n if (this.options.selectedTabClass) {\r\n var $selectedTabs = $allTabs.filter('.' + this.options.selectedTabClass);\r\n if ($selectedTabs.length == 0)\r\n this.selectTab($allTabs.first());\r\n else\r\n this.selectTab($selectedTabs.first());\r\n }\r\n else {\r\n this.selectTab($allTabs.first());\r\n }\r\n }\r\n\r\n public static applyErrors() {\r\n $(Tabs.wireup).each(function () {\r\n var tabs = $(this).data('rustig.tabs');\r\n if (tabs)\r\n tabs.applyErrors();\r\n });\r\n }\r\n}\r\n\r\nexport interface ITabsOptions {\r\n selectedTabClass?: string;\r\n}\r\n\r\n(function ($) {\r\n function Plugin(option) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.tabs');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new Tabs($this, options);\r\n $this.data('rustig.tabs', data);\r\n }\r\n if (typeof option == 'string') {\r\n data[option]();\r\n }\r\n });\r\n }\r\n ($.fn).tabs = Plugin;\r\n\r\n})($);","import Storage from \"../utilities/storage\";\r\nimport $ from 'jquery';\r\nimport Url from \"../utilities/url\";\r\nimport \"./remote/remote\";\r\nimport { StringExtensions } from \"../utilities/extensions\";\r\ndeclare global {\r\n interface JQuery {\r\n thumbnaildownloader: (options, args) => any;\r\n }\r\n}\r\n\r\nexport class ThumbnailDownloader {\r\n public static get wireup(): string { return this.attributeKey.asDataSelector(); }\r\n public static get attributeKey(): string { return 'thumbnail-url'; }\r\n\r\n private $element: JQuery;\r\n private url: string;\r\n\r\n public constructor($element: JQuery) {\r\n if (!$element || $element.length != 1)\r\n throw new Error('You must provide a single element to Rustig.ThumbnailDownloader');\r\n\r\n this.$element = $element;\r\n this.url = this.$element.data(ThumbnailDownloader.attributeKey);\r\n\r\n let thumbnailWasInCache = this.trySetThumbnailFromCache();\r\n if (!thumbnailWasInCache)\r\n this.downloadThumbnail();\r\n }\r\n\r\n public trySetThumbnailFromCache(): boolean {\r\n let value = Storage.get(this.url);\r\n\r\n if (StringExtensions.isNullOrWhitespace(value))\r\n return false;\r\n\r\n ThumbnailDownloader.setSrc(this.$element, value);\r\n return true;\r\n }\r\n\r\n public downloadThumbnail(): void {\r\n this.$element.remote({ url: this.url });\r\n }\r\n\r\n public static setThumbnail(data: IThumbnailDownloaderData): void {\r\n let url = new Url(data.url)\r\n .setProtocol('')\r\n .setHost('')\r\n .setPort('')\r\n .removeQueryParameter('_')\r\n .toUrl();\r\n\r\n if (data.shouldCacheThumbnail) {\r\n let sevenDays = 604800000;\r\n Storage.set(url, data.src, sevenDays);\r\n }\r\n\r\n let $element = $(ThumbnailDownloader.attributeKey.asDataSelector(url));\r\n ThumbnailDownloader.setSrc($element, data.src);\r\n }\r\n\r\n private static setSrc($element: JQuery, src: string): void {\r\n if ($element.is('img'))\r\n $element.attr('src', src);\r\n else\r\n $element.find('img').attr('src', src);\r\n\r\n $element.find('[data-td-retrieving]').remove();\r\n }\r\n}\r\n\r\nexport interface IThumbnailDownloaderData {\r\n url: string;\r\n src: string;\r\n shouldCacheThumbnail: boolean;\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.thumbnaildownloader');\r\n let options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new ThumbnailDownloader($this);\r\n $this.data('rustig.thumbnaildownloader', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.thumbnaildownloader = Plugin;\r\n","import $ from 'jquery';\r\nimport { StringExtensions } from \"../utilities/extensions\";\r\nimport \"../utilities/disable\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n togglestate: (option: any, args: any) => any;\r\n }\r\n}\r\n\r\nexport class ToggleState {\r\n public static get wireup(): string {\r\n return this.config.wireup.asDataSelector();\r\n }\r\n public static triggerWireup(trigger: string) {\r\n return this.wireup + this.config.trigger.asAttrSelector(trigger);\r\n }\r\n\r\n private static config: Config = {\r\n state: 'data-ts-state',\r\n command: 'data-ts-command',\r\n trigger: 'data-ts-trigger',\r\n wireup: 'togglestate'\r\n }\r\n\r\n public static toggleAll(key: string): void {\r\n let $elements = $(this.config.wireup.asDataSelector(key));\r\n\r\n $elements.each(function () {\r\n let $element = $(this);\r\n let model = $(this).data('rustig.togglestate');\r\n model.toggle();\r\n });\r\n }\r\n\r\n public get key(): string {\r\n return this._key;\r\n }\r\n private _key: string;\r\n private DEFAULTS: ToggleStateOptions = {\r\n state: undefined,\r\n command: undefined,\r\n trigger: undefined\r\n };\r\n\r\n private $element: JQuery;\r\n private options: ToggleStateOptions;\r\n\r\n public constructor($element: JQuery, options: ToggleStateOptions) {\r\n this.$element = $element;\r\n this.options = $.extend({}, this.DEFAULTS, this.getDataOptions(), options);\r\n this._key = $element.data(ToggleState.config.wireup);\r\n\r\n this.initAttributes();\r\n }\r\n\r\n public toggle(): void {\r\n if (this.$element.isDisabled())\r\n return;\r\n\r\n let currentState = this.$element.data(ToggleState.config.state);\r\n if (!currentState)\r\n return;\r\n\r\n let newState = currentState == 'on' ? 'off' : 'on';\r\n this.setProperty(ToggleState.config.state, newState);\r\n\r\n this.$element.trigger('toggled.rustig.togglestate');\r\n }\r\n\r\n private getDataOptions(): ToggleStateOptions {\r\n return {\r\n state: this.$element.attr(ToggleState.config.state),\r\n command: this.$element.attr(ToggleState.config.command),\r\n trigger: this.$element.attr(ToggleState.config.trigger)\r\n }\r\n }\r\n\r\n private initAttributes(): void {\r\n let state = this.options.state || this.$element.attr(ToggleState.config.state);\r\n let command = this.validateTriggerEvent(this.options.command) || this.$element.attr(ToggleState.config.command);\r\n let trigger = this.options.trigger || this.$element.attr(ToggleState.config.trigger);\r\n\r\n this.setProperty(ToggleState.config.state, state);\r\n this.setProperty(ToggleState.config.command, command);\r\n this.setProperty(ToggleState.config.trigger, trigger);\r\n\r\n if (command == 'slide') {\r\n this.$element.addClass('ts-height-peek')\r\n var maxHeight = this.$element.outerHeight(true);\r\n this.$element.removeClass('ts-height-peek')\r\n .css('max-height', maxHeight);\r\n }\r\n\r\n if (this.options) {\r\n this.$element.on(this.options.trigger + '.rustig.togglestate', function (e) {\r\n if (this.$element.isDisabled())\r\n return;\r\n\r\n let $target = $(e.target);\r\n let isLink = $target.is('a') && $target.attr('href') != null;\r\n let isRemote = $target.data('remote') || $target.parent().data('remote');\r\n let areWeTryingToGoSomewhere = isLink || isRemote;\r\n\r\n if (areWeTryingToGoSomewhere || $target.is('[data-ts-ignore]'))\r\n return;\r\n\r\n ToggleState.toggleAll(this.key);\r\n }.bind(this));\r\n }\r\n }\r\n\r\n private validateTriggerEvent(event: string): string {\r\n let validEvents = ['click', 'change'];\r\n if (event && validEvents.indexOf(event) != -1)\r\n return event;\r\n return null;\r\n }\r\n\r\n private setProperty(property: string, value: any): void {\r\n\r\n if (value === undefined) {\r\n this.$element.removeAttr(property)\r\n .removeData(property);\r\n return;\r\n }\r\n\r\n this.$element.attr(property, value)\r\n .data(property, value);\r\n }\r\n}\r\n\r\nexport interface ToggleStateOptions {\r\n state: string,\r\n command: string,\r\n trigger: string\r\n};\r\n\r\ninterface Config extends ToggleStateOptions {\r\n wireup: string\r\n};\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.togglestate');\r\n let options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new ToggleState($this, options);\r\n $this.data('rustig.togglestate', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.togglestate = Plugin;\r\n","\r\n/**\r\n * Utility class with convienent controller remote action results.\r\n */\r\nimport { Storage } from \"./storage\";\r\nimport { Element } from \"./element\";\r\nimport { Modal, ModalOptions } from \"../modules/modal\";\r\nimport Alert from \"../modules/alert\";\r\nimport Drawer from \"../modules/drawer\";\r\nimport { Focus } from \"./focusfield\";\r\nimport Confirmation from \"../modules/confirmation\";\r\nimport Ajax from \"../modules/remote/ajax\";\r\n\r\nexport class ActionResult {\r\n static openModal(data: ISimpleModalOptions): void {\r\n var $element = $(data.element);\r\n var modalOptions: ModalOptions = {\r\n content: data.content,\r\n alignment: data.alignment,\r\n $element: $element\r\n };\r\n if (data.anchorOnRemoteTarget && data.$remoteTarget) {\r\n modalOptions.$element = data.$remoteTarget;\r\n }\r\n\r\n if (ActionResult.isCurrentModalConfirmation())\r\n Modal.close();\r\n\r\n Modal.open(modalOptions);\r\n Drawer.closeAll();\r\n }\r\n\r\n static closeModal(data: any): void {\r\n if (data && data.message) {\r\n Alert.flash(data.message);\r\n }\r\n Modal.close();\r\n Drawer.closeAll();\r\n }\r\n\r\n public static closeModalById(data: ICloseModalByIdOptions): void {\r\n let $modal = Modal.current();\r\n if ($modal.length == 0)\r\n return;\r\n\r\n let isMatch = $modal.find('modal-id'.asDataSelector(data.modalId)).length > 0;\r\n\r\n if (isMatch)\r\n Modal.close();\r\n }\r\n\r\n static refresh(data): void {\r\n ActionResult.handleNavigationWarning(data);\r\n ActionResult.refreshAndFlashAlert(data);\r\n }\r\n static flashAlert(data: IFlashAlertOptions): void {\r\n Alert.flash(data.message, $(data.containerSelector));\r\n }\r\n static refreshAndFlashAlert(data?: IRefreshOptions): void {\r\n ActionResult.handleNavigationWarning(data);\r\n ActionResult.storeAlertAndCloseModals(data);\r\n Storage.set('scrollPositionBeforeReload', window.pageYOffset);\r\n window.location.reload();\r\n }\r\n static redirect(data: IRedirectOptions): void {\r\n ActionResult.handleNavigationWarning(data);\r\n ActionResult.storeAlertAndCloseModals(data);\r\n window.location.href = data.url;\r\n }\r\n static remoteRequest(data: IRedirectOptions): void {\r\n Ajax.execute({url: data.url});\r\n }\r\n static notImplemented(): void {\r\n Modal.open({\r\n content: '

    Not Implemented

    ' +\r\n '

    This action has not been implemented.

    ' +\r\n '
    '\r\n });\r\n }\r\n static refreshContent(data: IRefreshContentOptions) {\r\n ActionResult.updateHtml(data, x => $(x.selector).html(x.html));\r\n }\r\n\r\n static replaceContent(data: IRefreshContentOptions) {\r\n ActionResult.updateHtml(data, x => $(x.selector).replaceWith($(x.html)));\r\n }\r\n\r\n static replaceValue(data: IRefreshValueOptions) {\r\n var element = new Element($(data.selector));\r\n\r\n if (data.shouldSuppressValueChanged)\r\n element.suppressValueChange(data.value);\r\n else\r\n element.value(data.value);\r\n }\r\n\r\n static replaceCallbackValue(data: IRefreshCallbackValueOptions) {\r\n Element.fromElements($(data.selector)).forEach((x) => {\r\n x.value(data.value);\r\n });\r\n }\r\n\r\n static appendContent(data: IAppendContentOptions) {\r\n if (!data || !data.selector)\r\n return;\r\n\r\n var $html = $(data.html);\r\n $(data.selector).append($html);\r\n window.Application.wireupConventions($html);\r\n }\r\n\r\n static prependContent(data: IPrependContentOptions) {\r\n if (!data || !data.selector)\r\n return;\r\n\r\n var $html = $(data.html);\r\n $(data.selector).prepend($html);\r\n window.Application.wireupConventions($html);\r\n }\r\n\r\n static refreshDropdownListItems(data: IRefreshDropdownListOptions) {\r\n if (!data || !data.selector)\r\n return;\r\n\r\n let element = new Element($(data.selector));\r\n\r\n element.suppressValueChange(function () {\r\n let value;\r\n if (data.shouldPreserveUserInput)\r\n value = element.value();\r\n\r\n element.$element.html(data.options)\r\n .trigger('dropdown:reload');\r\n\r\n if (data.shouldPreserveUserInput)\r\n element.value(value);\r\n });\r\n }\r\n\r\n static updateHtml(data: IRefreshContentOptions, replaceHtml: IHtmlReplacer) {\r\n $(document).trigger('htmlupdating.rustig.actionresult', data);\r\n\r\n let selectors = 'input:not([data-ms-real-input]), textarea, select, [data-file-field], [data-multiselect]';\r\n if (data.shouldPreserveUserInput) {\r\n var map = ActionResult.createMapOfInputFieldIds($(data.selector).find(selectors), data.shouldPreserveValidationErrors);\r\n\r\n Focus.after(() => replaceHtml(data));\r\n\r\n $(document).trigger('inputvaluesrestoring.rustig.actionresult', data);\r\n ActionResult.mapInputFieldIdsToValues($(data.selector).find(selectors), map, data.shouldPreserveValidationErrors);\r\n $(document).trigger('inputvaluesrestored.rustig.actionresult', data);\r\n }\r\n else {\r\n Focus.after(() => replaceHtml(data));\r\n }\r\n\r\n $(document).trigger('htmlupdated.rustig.actionresult', data);\r\n\r\n if (data && data.message) {\r\n Alert.flash(data.message);\r\n }\r\n }\r\n\r\n static renameThumbnail(data: IRenameThumbnail) {\r\n $(data.selector).each(function () {\r\n if (data.shouldReplaceTag) {\r\n var $name = $('

    ' + data.name + '

    ');\r\n $(this).replaceWith($name);\r\n }\r\n else {\r\n if (this.tagName === 'P')\r\n this.textContent = data.name;\r\n else\r\n this.setAttribute('value', data.name);\r\n this.setAttribute('title', data.name);\r\n }\r\n });\r\n }\r\n\r\n static triggerEvent(data: ITriggerEventData): void {\r\n let $element = $( document);\r\n\r\n if (data && data.selector)\r\n $element = $(data.selector);\r\n\r\n let event = $.Event(data.event);\r\n\r\n $element.trigger(data.event, data.data);\r\n }\r\n\r\n private static createMapOfInputFieldIds(inputFields: any, shouldPreserveValidationErrors: boolean): any {\r\n var map = {};\r\n for (var i = 0; i < inputFields.length; i++) {\r\n var $input = $(inputFields.get(i));\r\n if ($input.prop('id') || $input.data('mappable'))\r\n map[$input.prop('id')] = new InputFieldMapper($input, shouldPreserveValidationErrors);\r\n }\r\n return map;\r\n }\r\n\r\n private static mapInputFieldIdsToValues(inputFields: any, map: any, shouldPreserveValidationErrors: boolean): void {\r\n for (var i = 0; i < inputFields.length; i++) {\r\n var $input = $(inputFields.get(i));\r\n if (map[$input.prop('id')])\r\n map[$input.prop('id')].mapToInput($input, shouldPreserveValidationErrors);\r\n }\r\n }\r\n\r\n private static storeAlertAndCloseModals(data?: IRefreshOptions): void {\r\n if (data && data.message) {\r\n Storage.set(Alert.AlertStorageKey, data.message);\r\n }\r\n Modal.closeAll();\r\n }\r\n\r\n private static handleNavigationWarning(data?: IRefreshOptions): void {\r\n if (data.suppressNavigationWarning)\r\n $(window).off('beforeunload');\r\n }\r\n\r\n private static isCurrentModalConfirmation(): boolean {\r\n return Modal.current().find('#' + Confirmation.id).length > 0;\r\n }\r\n}\r\n\r\nexport interface IRenameThumbnail {\r\n name: string;\r\n selector: string;\r\n shouldReplaceTag: boolean;\r\n}\r\n\r\nexport interface IHtmlReplacer {\r\n (data: IRefreshContentOptions): void;\r\n}\r\n\r\nexport interface ISimpleModalOptions {\r\n content: any;\r\n element: string;\r\n alignment: string;\r\n anchorOnRemoteTarget?: boolean;\r\n $remoteTarget?: JQuery;\r\n}\r\n\r\nexport interface IFlashAlertOptions extends IRefreshOptions {\r\n containerSelector?: string;\r\n}\r\nexport interface IRefreshOptions extends IAlertOptions {\r\n suppressNavigationWarning?: boolean;\r\n}\r\nexport interface IRedirectOptions extends IRefreshOptions {\r\n url: string;\r\n}\r\nexport interface IRefreshContentOptions extends IAlertOptions {\r\n html: string;\r\n selector: string;\r\n shouldPreserveUserInput: boolean;\r\n shouldPreserveValidationErrors: boolean;\r\n}\r\nexport interface IRefreshValueOptions {\r\n value: string;\r\n selector: string;\r\n shouldSuppressValueChanged: boolean\r\n}\r\nexport interface IRefreshCallbackValueOptions {\r\n value: string;\r\n selector: string;\r\n}\r\nexport interface IAppendContentOptions {\r\n html: string;\r\n selector: string;\r\n}\r\nexport interface IPrependContentOptions {\r\n html: string;\r\n selector: string;\r\n}\r\nexport interface IAlertOptions {\r\n message?: string;\r\n}\r\nexport interface IRefreshDropdownListOptions {\r\n selector: string;\r\n options: any;\r\n shouldPreserveUserInput?: boolean;\r\n}\r\n\r\nexport interface ITriggerEventData {\r\n event: string,\r\n selector?: string,\r\n data?: any\r\n}\r\n\r\nexport interface ICloseModalByIdOptions {\r\n modalId: string\r\n}\r\n\r\nclass InputFieldMapper {\r\n value: any;\r\n hasValidationError;\r\n popoverOptions: any;\r\n\r\n constructor($inputField: any, shouldPreserveValidationErrors: boolean) {\r\n let element = new Element($inputField);\r\n\r\n this.value = element.value();\r\n\r\n if (shouldPreserveValidationErrors) {\r\n this.hasValidationError = element.$userFacingElement.hasClass('input-validation-error');\r\n if (this.hasValidationError)\r\n this.popoverOptions = element.$userFacingElement.data('rustig.popover.error').options;\r\n }\r\n }\r\n\r\n mapToInput($inputToMapTo: any, shouldPreserveValidationErrors: boolean) {\r\n let element = new Element($inputToMapTo);\r\n \r\n element.suppressValueChange(this.value);\r\n\r\n if (shouldPreserveValidationErrors) {\r\n if (this.hasValidationError && !element.$userFacingElement.hasClass('input-validation-error'))\r\n element.$userFacingElement.addClass('input-validation-error').popover(this.popoverOptions);\r\n else if (!this.hasValidationError && element.$userFacingElement.hasClass('input-validation-error'))\r\n element.$userFacingElement.removeClass('input-validation-error').popover('disable', 'error');\r\n }\r\n }\r\n}","import $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n autorequest(option, args): any;\r\n }\r\n}\r\nexport class AutoRequest {\r\n public static get wireup(): string {\r\n return '[data-autorequest]'\r\n }\r\n\r\n private get timeoutDataAttribute(): string {\r\n return 'autorequest-' + this.options.id;\r\n }\r\n\r\n private DEFAULTS: AutoRequestOptions = {\r\n id: null,\r\n timeout: 0\r\n };\r\n\r\n private $element: JQuery;\r\n private options: AutoRequestOptions;\r\n\r\n public constructor($element: JQuery, options: AutoRequestOptions) {\r\n if (!$element && $element.length != 1)\r\n throw new Error('You must provide a single element to Rustig.Autorequest');\r\n\r\n this.$element = $element;\r\n this.options = $.extend({}, this.DEFAULTS, $element.data(), options);\r\n this.configureId();\r\n\r\n this.scheduleRemoteRequest();\r\n }\r\n\r\n private configureId(): void {\r\n if (this.options.id)\r\n return;\r\n\r\n this.options.id = this.$element.data('autorequest');\r\n \r\n if (this.options.id == 'on')\r\n this.options.id = this.$element.data('url') || this.$element.data('documentlink');\r\n\r\n if (this.options.id == null)\r\n throw new Error('Autorequest requires an id to be set');\r\n }\r\n\r\n private scheduleRemoteRequest(): void {\r\n this.options.timeout = this.options.timeout || this.DEFAULTS.timeout;\r\n this.cancelPreviousTimeoutIfNeeded();\r\n\r\n let executeFunc = this.$element.data('documentlink')\r\n ? this.executeClick.bind(this)\r\n : this.executeRemote.bind(this);\r\n\r\n let timeoutId = window.setTimeout(executeFunc, this.options.timeout)\r\n this.storeTimeout(timeoutId);\r\n }\r\n\r\n private cancelPreviousTimeoutIfNeeded() {\r\n let timeoutId = $(document).data(this.timeoutDataAttribute);\r\n\r\n if (!timeoutId)\r\n return;\r\n\r\n window.clearTimeout(timeoutId);\r\n }\r\n\r\n private storeTimeout(timeoutId: number) {\r\n $(document).data(this.timeoutDataAttribute, timeoutId);\r\n }\r\n\r\n private executeClick(): void {\r\n this.$element.click();\r\n }\r\n\r\n private executeRemote(): void {\r\n\r\n this.$element.remote();\r\n }\r\n}\r\n\r\nexport interface AutoRequestOptions {\r\n id: string,\r\n timeout?: number,\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.autorequest');\r\n let options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new AutoRequest($this, options);\r\n $this.data('rustig.autorequest', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option]();\r\n });\r\n}\r\n\r\n$.fn.autorequest = Plugin;\r\n","\r\nimport $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n autosave: (option) => any;\r\n }\r\n}\r\n\r\nexport class Autosave {\r\n public static get wireup(): string { return '[data-autosave]'; }\r\n\r\n private DEFAULTS: IAutosaveOptions = {\r\n timeout: 3000,\r\n autosaveOn: null,\r\n autosaveOnTargets: null\r\n };\r\n\r\n private $element: JQuery;\r\n private timeout: number;\r\n private options: IAutosaveOptions;\r\n private isRemoting: boolean;\r\n\r\n private get hasUnsavedChanges(): boolean { return this.timeout != null; }\r\n\r\n constructor($element: JQuery, options: IAutosaveOptions) {\r\n if (!$element && $element.length != 1)\r\n throw new Error('You must provide a single element to Rustig.Autosave');\r\n this.$element = $element;\r\n\r\n this.options = $.extend({}, this.DEFAULTS, $element.data(), options);\r\n this.$element.on(this.options.autosaveOn, this.options.autosaveOnTargets, this.autosave.bind(this))\r\n .on('ajaxcomplete.rustig.remote', () => this.isRemoting = false);\r\n this.setShowAlertIfNavigatingFromPageWithUnsavedChanges();\r\n }\r\n\r\n public clearAutosaveDebounce(): void {\r\n clearTimeout(this.timeout);\r\n this.timeout = null;\r\n }\r\n\r\n public save(): void {\r\n this.$element.remote({\r\n beforeRemote: () => this.isRemoting = true\r\n });\r\n this.clearAutosaveDebounce();\r\n }\r\n\r\n private autosave(event: Event): void {\r\n if (!this.isRemoting) {\r\n this.clearAutosaveDebounce();\r\n this.timeout = window.setTimeout(this.save.bind(this), this.options.timeout);\r\n }\r\n }\r\n\r\n private setShowAlertIfNavigatingFromPageWithUnsavedChanges(): void {\r\n $(window).off('beforeunload.rustig.autosave')\r\n .on('beforeunload.rustig.autosave', () => {\r\n if (this.hasUnsavedChanges)\r\n return 'There are unsaved changes'\r\n });\r\n }\r\n}\r\n\r\nexport interface IAutosaveOptions {\r\n timeout: number;\r\n autosaveOn: string;\r\n autosaveOnTargets: string\r\n}\r\n\r\nfunction Plugin(option) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.autosave');\r\n let options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new Autosave($this, options);\r\n $this.data('rustig.autosave', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option]();\r\n });\r\n}\r\n\r\n$.fn.autosave = Plugin;","export class PdfUrlBuilder {\r\n build(fileUrl: string) {\r\n return fileUrl;\r\n }\r\n}","import $ from 'jquery';\r\nimport { PdfUrlBuilder } from './pdfurlbuilder';\r\n\r\ndeclare var Pace: any;\r\nexport interface IDocumentViewUi {\r\n renderFailed(): void;\r\n displayDocument(): void;\r\n}\r\n\r\nexport class DocumentDataPoll {\r\n private api: Api;\r\n private retryDuration = 60000;\r\n private isRetryTimedOut = false;\r\n\r\n constructor(private isAvailableUrl: string, private ui: IDocumentViewUi) {\r\n this.api = new Api(isAvailableUrl);\r\n }\r\n\r\n public view(): void {\r\n this.loadPreview();\r\n setTimeout(() => {\r\n this.isRetryTimedOut = true;\r\n }, this.retryDuration);\r\n }\r\n\r\n private loadPreview(): void {\r\n this.api.isPdfAvailable((result) => { this.checkForPdf(result); });\r\n }\r\n\r\n private checkForPdf(isPdfAvailable) {\r\n if (this.isRetryTimedOut)\r\n this.ui.renderFailed();\r\n else if (isPdfAvailable)\r\n this.ui.displayDocument();\r\n else {\r\n setTimeout(() => { this.loadPreview(); }, 1000);\r\n }\r\n }\r\n}\r\n\r\nexport class DefaultDocumentViewUi implements IDocumentViewUi {\r\n constructor(private dataUrl: string, private $ui: JQuery) { }\r\n $spinner = this.$ui.find('.view-spinner');\r\n $loading = this.$spinner.find('.preview-loading');\r\n $failed = this.$spinner.find('.preview-failed');\r\n\r\n renderFailed(): void {\r\n this.$loading.hide();\r\n this.$failed.show();\r\n }\r\n\r\n displayDocument(): void {\r\n this.$spinner.remove();\r\n var url = new PdfUrlBuilder().build(this.dataUrl);\r\n let frame = $(\"\");\r\n this.$ui.append(frame);\r\n }\r\n}\r\n\r\nclass Api {\r\n constructor(private isAvailableUrl: string) {\r\n }\r\n isPdfAvailable = (callback: Function) => {\r\n if (typeof (Pace) == 'undefined')\r\n $.get(this.isAvailableUrl, callback);\r\n else\r\n Pace.ignore(() => { //kill this dependency\r\n $.get(this.isAvailableUrl, callback);\r\n });\r\n };\r\n}\r\n\r\n$(() => {\r\n $(document).on(\"mouseenter\", \"[data-documentviewer] .direct-download-link a\", () => {\r\n $(\"[data-documentviewer] .preview-icon\").addClass(\"icon-smile\");\r\n });\r\n $(document).on(\"mouseleave\", \"[data-documentviewer] .direct-download-link a\", () => {\r\n $(\"[data-documentviewer] .preview-icon\").removeClass(\"icon-smile\");\r\n });\r\n});\r\n","import $ from 'jquery';\r\nimport { DefaultDocumentViewUi, DocumentDataPoll } from \"./documentdatapoll\";\r\nimport { PdfUrlBuilder } from './pdfurlbuilder';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n documentviewer: (option, args) => any;\r\n }\r\n}\r\n\r\nexport class DocumentViewer {\r\n public static get wireup(): string {\r\n return '[data-documentviewer]'\r\n };\r\n\r\n public static show(url: string): void {\r\n let maxWidth = 1728; // 1920 * .90;\r\n let maxHeight = 972; // 1080 * .90;\r\n var scr: any = screen;\r\n\r\n let width = Math.round(screen.availWidth * .90);\r\n let height = Math.round(screen.availHeight * .90);\r\n if (width > maxWidth)\r\n width = maxWidth;\r\n if (height > maxHeight)\r\n height = maxHeight;\r\n\r\n var left = scr.availLeft + (screen.availWidth / 2) - (width / 2);\r\n var top = scr.availTop + (screen.availHeight / 2) - (height / 2);\r\n window.open(url, url, \"width=\" + width + \",height=\" + height + \",left=\" + left + \",top=\" + top);\r\n }\r\n\r\n public static load($ui: JQuery): void {\r\n var url = new PdfUrlBuilder().build($ui.data().url);\r\n let $frame = $(\"\");\r\n let $spinner = $('
    ').addClass('documentviewer-spinner');\r\n $ui.empty().append($spinner);\r\n $spinner.loading();\r\n $ui.append($frame);\r\n }\r\n\r\n public static poll($ui: JQuery) {\r\n var dataUrl = $ui.attr(\"data-documentdataurl\");\r\n if (!dataUrl)\r\n throw new Error(\"You need a data URL. Check the Docs\");\r\n var pollUrl = $ui.attr(\"data-documentpollurl\");\r\n if (!pollUrl)\r\n throw new Error(\"You need a poll URL. Check the Docs\");\r\n\r\n var ui = new DefaultDocumentViewUi(dataUrl, $ui);\r\n var poller = new DocumentDataPoll(pollUrl, ui);\r\n poller.view();\r\n }\r\n}\r\n\r\n$(document).on('click.rustig.documentviewer', '[data-documentlink]', function (e) {\r\n var $this = $(this);\r\n if ($this.data(\"url\") || $this.attr(\"href\"))\r\n throw Error(\"put your url in the data-documentlink attribute. You can't use href or data-url with documentlinks\");\r\n var url = $this.data('documentlink');\r\n if (url)\r\n DocumentViewer.show(url);\r\n});\r\n\r\nfunction Plugin(options, args) {\r\n return this.each(function () {\r\n if ($(this).attr(\"data-documentviewer\") === \"poll\")\r\n DocumentViewer.poll($(this));\r\n else\r\n DocumentViewer.load($(this));\r\n })\r\n}\r\n\r\n$.fn.documentviewer = Plugin;","import $ from 'jquery'\r\n\r\ndeclare global{\r\n interface JQuery {\r\n errorMessage(): JQuery;\r\n }\r\n}\r\n\r\n(function ($) {\r\n $.fn.errorMessage = function () {\r\n $(this).each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.errormessage');\r\n\r\n if (!data) {\r\n data = new ErrorMessage($(this));\r\n $this.data('rustig.errormessage', data);\r\n }\r\n });\r\n return $(this);\r\n };\r\n})($);\r\n\r\nexport class ErrorMessage {\r\n constructor(public $element: JQuery) {\r\n $element.on('input', e => this.resetValidity(e));\r\n $element.on('invalid', e => this.handleInvalid(e));\r\n }\r\n private resetValidity(e: any): void {\r\n this.setValidity(e.target, '');\r\n }\r\n private handleInvalid(e: any): void {\r\n this.setValidity(e.target, this.$element.data('error-message'));\r\n }\r\n private setValidity($target: any, message: string = ''): void {\r\n $target.setCustomValidity(message);\r\n }\r\n}\r\n","// future: support many storage strategies\r\nimport $ from 'jquery';\r\nimport { Storage } from \"./storage\";\r\nimport { Element } from \"./element\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n eventlistener: (option, args) => any;\r\n }\r\n}\r\n\r\nexport class EventListener {\r\n public static get wireup(): string { return this.attributeKey.asDataSelector(); }\r\n public static get attributeKey(): string { return 'event-listener'; }\r\n\r\n private DEFAULTS: IEventListenerOptions = {\r\n eventListener: null,\r\n eventListenerBinding: 'value',\r\n eventListenerEmptyMessage: 'Not Entered'\r\n };\r\n\r\n private $element: JQuery;\r\n private options: IEventListenerOptions;\r\n\r\n public constructor($element: JQuery, options: IEventListenerOptions) {\r\n if ($element.length <= 0)\r\n throw new Error('$element cannot be null');\r\n\r\n this.$element = $element;\r\n this.options = $.extend({}, this.DEFAULTS, $element.data(), options);\r\n\r\n if (!this.options.eventListener)\r\n throw new Error('eventListener cannot be null');\r\n if (!this.options.eventListenerBinding)\r\n throw new Error('eventListenerBinding cannot be null');\r\n\r\n Storage.setChangeListener(this.options.eventListener, this.setText.bind(this));\r\n }\r\n\r\n public setText(key: string): void {\r\n let storageValue = Storage.get(key);\r\n\r\n let element = new Element(this.$element);\r\n if (storageValue && storageValue[this.options.eventListenerBinding])\r\n element.text(storageValue[this.options.eventListenerBinding]);\r\n else\r\n element.text(this.options.eventListenerEmptyMessage);\r\n\r\n element.$.trigger('notified.rustig.eventlistener');\r\n }\r\n}\r\n\r\nexport interface IEventListenerOptions {\r\n eventListener: string;\r\n eventListenerBinding: string;\r\n eventListenerEmptyMessage: string;\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.eventlistener');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new EventListener($this, options);\r\n $this.data('rustig.eventlistener', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.eventlistener = Plugin;\r\n","// future: support many storage strategies\r\nimport $ from 'jquery';\r\nimport { Element } from \"./element\";\r\nimport { Storage } from \"./storage\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n eventnotifier(option, args) : any;\r\n }\r\n}\r\n\r\nexport class EventNotifier {\r\n public static get wireup(): string { return this.wireupName.asDataSelector(); }\r\n public static get wireupName(): string { return 'event-notifier'; }\r\n\r\n private $element: JQuery;\r\n private options: IEventNotifierOptions;\r\n\r\n private DEFAULTS: IEventNotifierOptions = {\r\n key: null,\r\n notifyOn: 'change'\r\n };\r\n\r\n constructor($element: JQuery, options: IEventNotifierOptions) {\r\n if (!$element || $element.length == 0)\r\n throw Error('You must provide an element to Rustig.EventNotifier');\r\n\r\n this.$element = $element;\r\n this.options = $.extend({}, this.DEFAULTS, this.options, this.$element.data());\r\n this.options.key = this.options.key || this.$element.data(EventNotifier.wireupName);\r\n\r\n if (!this.options.key)\r\n throw Error('You must provide a key to Rustig.EventNotifier');\r\n\r\n this.setEventListener();\r\n }\r\n\r\n private setEventListener(): void {\r\n let events = this.options.notifyOn.split(',').map((event: string) => {\r\n return event.trim() + '.rustig.eventnotifier'\r\n });\r\n\r\n let eventName = events.join(' ');\r\n\r\n this.$element.on(eventName, () => {\r\n let subject = new Element(this.$element);\r\n\r\n let value = {\r\n value: subject.value(),\r\n text: subject.text()\r\n }\r\n\r\n let oneMinute = 60000;\r\n Storage.set(this.options.key, value, oneMinute);\r\n });\r\n }\r\n}\r\n\r\nexport interface IEventNotifierOptions {\r\n key: string;\r\n notifyOn: string;\r\n}\r\n\r\nexport interface IElementProperties {\r\n value: any;\r\n text: string;\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.eventnotifier');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new EventNotifier($this, options);\r\n $this.data('rustig.eventnotifier', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.eventnotifier = Plugin;\r\n","import $ from 'jquery';\r\nimport 'jquery-highlight';\r\nimport Element from '../utilities/element';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n filteritems: (option, args) => any;\r\n }\r\n}\r\n\r\nexport class FilterItems {\r\n public static get attribute(): string { return 'filteritems'; }\r\n public static get wireup(): string { return FilterItems.attribute.asDataSelector() }\r\n\r\n private input: Element;\r\n private key: string;\r\n private options: FilterItemsOptions = {};\r\n private selectedClass: string;\r\n private get $items(): JQuery {\r\n return $('[data-fi=\"' + this.key + '\"]');\r\n }\r\n private emptySelector: string = '[data-fi-empty]';\r\n\r\n public constructor($input: JQuery, options: any) {\r\n this.input = new Element($input);\r\n this.key = $input.data(FilterItems.attribute);\r\n this.options = this.getOptions(options);\r\n\r\n if (this.key == null)\r\n throw new Error('key must be provided.')\r\n\r\n this.selectedClass = 'fi-selected';\r\n if (this.options.selectedClass)\r\n this.selectedClass += ' ' + this.options.selectedClass;\r\n\r\n this.emptyFilter();\r\n this.wireupEvents();\r\n }\r\n\r\n private getOptions(options: any): FilterItemsOptions {\r\n let mapped = FilterItems.optionMap(this.input.$element.data());\r\n return $.extend({}, this.options, options, mapped);\r\n }\r\n\r\n private wireupEvents(): void {\r\n this.input.$userFacingElement.on('input.rustig.filteritems', () => this.filterItems());\r\n }\r\n\r\n public filterItems(): void {\r\n let $itemList = this.$items;\r\n let filterText = this.input.value();\r\n\r\n if (!filterText) {\r\n this.showMatches($itemList);\r\n let $selected = $itemList.filter(this.emptySelector).first().addClass(this.selectedClass);\r\n\r\n this.triggerOnFiltered(filterText, $itemList, $(), $selected);\r\n\r\n return;\r\n }\r\n\r\n let filter = '\\\\b' + this.escapeRegExp(filterText).toLowerCase();\r\n let regex = new RegExp(filter);\r\n\r\n let lowestSearchIndex = null;\r\n let selectIndex = 0;\r\n let index = 0;\r\n let $matches = $itemList.filter(function () {\r\n let item: Element = new Element($(this));\r\n index++;\r\n let searchIndex = ((item.text())).toLowerCase().search(regex);\r\n if (searchIndex >= 0 && (lowestSearchIndex == null || searchIndex < lowestSearchIndex)) {\r\n lowestSearchIndex = searchIndex;\r\n selectIndex = index;\r\n }\r\n let isMatch = searchIndex >= 0;\r\n return isMatch;\r\n });\r\n let $filtered = $itemList.not($matches);\r\n\r\n this.triggerOnFilter(filterText, $matches, $filtered);\r\n this.showMatches($matches, filterText);\r\n this.hideFiltered($filtered);\r\n let $selected = this.setSelectedItem($matches, $itemList, selectIndex);\r\n\r\n this.triggerOnFiltered(filterText, $matches, $filtered, $selected);\r\n }\r\n\r\n public emptyFilter(): void {\r\n this.showMatches(this.$items);\r\n }\r\n\r\n private escapeRegExp(value: string): string {\r\n return value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\r\n };\r\n\r\n private showMatches($items: JQuery, highlightFilter?: string): void {\r\n $items.removeClass(this.selectedClass)\r\n .addClass('fi-matched')\r\n .attr('data-fi-matched', 'on')\r\n .removeClass('fi-filtered')\r\n .removeAttr('data-fi-filtered')\r\n .unhighlight();\r\n\r\n if (highlightFilter)\r\n $items.highlight(highlightFilter);\r\n }\r\n\r\n private hideFiltered($items: JQuery): void {\r\n $items.removeClass(this.selectedClass)\r\n .addClass('fi-filtered')\r\n .attr('data-fi-filtered', 'on')\r\n .removeClass('fi-matched')\r\n .removeClass(this.selectedClass)\r\n .removeAttr('data-fi-matched')\r\n .unhighlight();\r\n }\r\n\r\n private setSelectedItem($matches: JQuery, $items: JQuery, selectIndex: number): JQuery {\r\n if ($matches.length == 0)\r\n return $();\r\n\r\n let $selected = $($items.get(selectIndex - 1));\r\n $selected.addClass(this.selectedClass);\r\n\r\n return $selected;\r\n }\r\n\r\n private triggerOnFilter(filterText: string, $matches: JQuery, $filtered: JQuery): void {\r\n let onFilterData: OnFilterEventObject = {\r\n filterText: filterText,\r\n $matched: $matches,\r\n $filtered: $filtered\r\n };\r\n this.input.$element.trigger('onfilter.rustig.filteritems', onFilterData);\r\n }\r\n\r\n private triggerOnFiltered(filterText: string, $matches: JQuery, $filtered: JQuery, $selected: JQuery): void {\r\n let onFilteredData: OnFilteredEventObject = {\r\n filterText: filterText,\r\n $matched: $matches,\r\n $filtered: $filtered,\r\n $selected: $selected\r\n };\r\n this.input.$element.trigger('onfiltered.rustig.filteritems', onFilteredData);\r\n }\r\n\r\n private static optionMap(data: any): FilterItemsOptions {\r\n return {\r\n selectedClass: data.fiSelectedClass\r\n };\r\n }\r\n}\r\n\r\nexport interface FilterItemsOptions {\r\n selectedClass?: string;\r\n}\r\n\r\nexport interface OnFilterEventObject {\r\n filterText: string,\r\n $matched: JQuery,\r\n $filtered: JQuery\r\n}\r\n\r\nexport interface OnFilteredEventObject {\r\n filterText: string,\r\n $matched: JQuery,\r\n $filtered: JQuery,\r\n $selected: JQuery\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.filteritems');\r\n let options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new FilterItems($this, options);\r\n $this.data('rustig.filteritems', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.filteritems = Plugin;\r\n","import $ from 'jquery';\r\n\r\nexport class ListBinding {\r\n public static reorder() {\r\n const regex = /(.*?)(\\d+)(.*)/;\r\n\r\n const list = $(\"[data-list-binding]\");\r\n const inputs = list.find(\"input, select, textarea\");\r\n\r\n inputs.each(function () {\r\n const input = $(this);\r\n if (input == undefined)\r\n return;\r\n\r\n let nameLeftOver = input.attr(\"name\");\r\n const nameReplacements = [];\r\n\r\n let idLeftOver = input.attr(\"id\");\r\n const idReplacements = [];\r\n\r\n const parentListItems = $(input.parents(\"[data-list-item]\").get().reverse());\r\n parentListItems.each(function () {\r\n const listItem = $(this);\r\n const index = listItem.index();\r\n\r\n if (nameLeftOver != null) {\r\n if (regex.test(nameLeftOver)) {\r\n nameReplacements.push(nameLeftOver.replace(regex, \"$1\" + index));\r\n const result = regex.exec(nameLeftOver);\r\n nameLeftOver = result[3];\r\n }\r\n }\r\n\r\n if (idLeftOver != null) {\r\n if (regex.test(idLeftOver)) {\r\n idReplacements.push(idLeftOver.replace(regex, \"$1\" + index));\r\n const result = regex.exec(idLeftOver);\r\n idLeftOver = result[3];\r\n }\r\n }\r\n });\r\n\r\n if (nameReplacements.length > 0) {\r\n const nameFinal = nameReplacements.join(\"\") + nameLeftOver;\r\n //console.log(\"rewriting name: \" + input.attr(\"name\") + \" => \" + nameFinal);\r\n input.attr(\"name\", nameFinal);\r\n }\r\n\r\n if (idReplacements.length > 0) {\r\n const idFinal = idReplacements.join(\"\") + idLeftOver;\r\n //console.log(\"rewriting id : \" + input.attr(\"id\") + \" => \" + idFinal);\r\n input.attr(\"id\", idFinal);\r\n }\r\n });\r\n }\r\n}\r\n\r\n$(() => {\r\n $(document).on('submit formdatacollecting.rustig.remote', 'form', e => {\r\n ListBinding.reorder();\r\n });\r\n})","export class HandlesWindowNavigation {\r\n public static execute(options: Options): void {\r\n if (!options.url)\r\n return;\r\n\r\n let _window = (window);\r\n if (options.target == '_self') {\r\n _window.location = options.url;\r\n }\r\n else if (options.target == '_blank') {\r\n _window.open(options.url, options.target);\r\n }\r\n }\r\n}\r\n\r\ninterface Options {\r\n url: string,\r\n target: string,\r\n}","import $ from 'jquery';\r\nimport { HandlesWindowNavigation } from './handleswindownavigation';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n navigate: (object, args) => any;\r\n }\r\n}\r\n\r\nexport class Navigate {\r\n\r\n public static get wireup(): string {\r\n return '[data-navigate]'\r\n }\r\n\r\n private DEFAULTS: NavigateOptions = {\r\n url: undefined,\r\n on: 'click',\r\n target: '_self'\r\n };\r\n\r\n private $element: JQuery;\r\n private options: NavigateOptions;\r\n\r\n public constructor($element: JQuery, options?: NavigateOptions) {\r\n this.$element = $element;\r\n this.options = $.extend({}, this.DEFAULTS, this.getOptions(), options)\r\n this.wireupEvents();\r\n }\r\n\r\n private wireupEvents() {\r\n if (this.options.on == 'click') {\r\n this.$element.on('click', (e: JQueryEventObject) => this.navigateToUrl(e));\r\n }\r\n else if (this.options.on == 'doubleclick') {\r\n this.$element.on('dblclick', (e: JQueryEventObject) => this.navigateToUrl(e));\r\n }\r\n }\r\n\r\n private getOptions(): NavigateOptions {\r\n return {\r\n url: this.$element.data('navigate'),\r\n on: this.$element.data('navigate-on'),\r\n target: this.$element.data('navigate-target')\r\n };\r\n }\r\n\r\n private navigateToUrl(e: JQueryEventObject): void {\r\n var isRemote = this.$element.is('[data-remote]');\r\n var isTargetAnchor = $(e.target).is('a');\r\n\r\n if (isTargetAnchor)\r\n return;\r\n\r\n if (isRemote) {\r\n this.$element.remote({ url: this.options.url });\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n else {\r\n HandlesWindowNavigation.execute({\r\n url: this.options.url,\r\n target: this.options.target\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport interface NavigateOptions {\r\n url: string,\r\n on: string,\r\n target: string\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.navigate');\r\n let options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new Navigate($this, options);\r\n $this.data('rustig.navigate', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.navigate = Plugin;\r\n","import $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n isOptional(): boolean;\r\n isNotOptional(): boolean;\r\n optional(): JQuery;\r\n notOptional(): JQuery;\r\n toggleOptional(condition: any): JQuery;\r\n }\r\n}\r\n\r\n(function ($) {\r\n $.fn.optional = function () {\r\n return $(this).attr('optional', 'optional');\r\n };\r\n $.fn.notOptional = function () {\r\n return $(this).removeAttr('optional');\r\n };\r\n $.fn.isOptional = function () {\r\n return $(this).is('[optional]');\r\n }\r\n $.fn.isNotOptional = function () {\r\n return !$(this).isOptional();\r\n }\r\n $.fn.toggleOptional = function (condition) {\r\n if (condition)\r\n return $(this).optional();\r\n else\r\n return $(this).notOptional();\r\n }\r\n})($);","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\nexport interface IReadonlyIfOptions {\r\n condition: boolean;\r\n shouldClearValueOnReadonly: boolean;\r\n}\r\n\r\nexport class ReadonlyIf {\r\n public static wireupDocument: Function = _.once(() => {\r\n $(document).on('onreadonlyif.rustig', function (e: JQueryEventObject, eventData?: IReadonlyIfOptions) {\r\n if (eventData === undefined) return;\r\n $(e.target).toggleReadonly(eventData.condition, eventData.shouldClearValueOnReadonly);\r\n });\r\n });\r\n}","import $ from 'jquery';\r\n\r\n$(function () {\r\n $(document).on('click', '[data-remove]', function () {\r\n let removeWhat: string = $(this).data('remove');\r\n let id = $(this).data('remove-id');\r\n\r\n let selector = removeWhat.asDataSelector(id);\r\n let $element = $(selector);\r\n\r\n if ($element.length <= 0)\r\n return true;\r\n\r\n $element.trigger('remove.rustig.removeelement');\r\n $(selector).remove();\r\n $element.trigger('removed.rustig.removeelement');\r\n });\r\n}); ","import $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n required(): JQuery;\r\n notRequired(): JQuery;\r\n isRequired(): boolean;\r\n isNotRequired(): boolean;\r\n toggleRequired(condition: boolean): JQuery;\r\n }\r\n}\r\n\r\n(function ($) {\r\n $.fn.required = function () {\r\n $(this).each(function () {\r\n var $self = $(this);\r\n $self.attr('data-required', 'data-required');\r\n });\r\n return $(this);\r\n };\r\n $.fn.notRequired = function () {\r\n $(this).each(function () {\r\n var $self = $(this);\r\n\r\n $self.removeAttr('data-required');\r\n });\r\n\r\n return $(this);\r\n };\r\n $.fn.isRequired = function () {\r\n return $(this).is('[data-required]');\r\n }\r\n $.fn.isNotRequired = function () {\r\n return !$(this).isRequired();\r\n }\r\n $.fn.toggleRequired = function (condition) {\r\n if (condition)\r\n return $(this).required();\r\n else\r\n return $(this).notRequired();\r\n }\r\n})($);","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\nexport interface IShowIfOptions {\r\n condition: boolean;\r\n}\r\n\r\nexport class ShowIf {\r\n public static wireupDocument: Function = _.once(() => {\r\n $(document).on('onshowif.rustig', function (e: JQueryEventObject, eventData?: IShowIfOptions) {\r\n if (eventData === undefined) return;\r\n\r\n $(e.target).toggleShow(eventData.condition);\r\n });\r\n });\r\n}","import $ from 'jquery';\r\n\r\n$(document).on('mousedown.rustig.showpassword', '[data-showpassword]', function (e: JQueryEventObject) {\r\n $(this).prev('input[type=\"password\"]')\r\n .attr(\"type\", \"text\")\r\n .attr(\"data-showpassword-active\", \"on\");\r\n }).on('mouseup.rustig.showpassword', function (e: JQueryEventObject) {\r\n $('[data-showpassword-active]')\r\n .attr(\"type\", \"password\")\r\n .removeAttr(\"data-showpassword-active\");\r\n});","import $ from 'jquery';\r\nimport _ from 'underscore'\r\ndeclare global {\r\n interface JQuery {\r\n transformtexttolink: (options, args) => any;\r\n }\r\n}\r\n\r\n export class TransformTextToLink {\r\n public static get wireup(): string { return '[data-transform-text-to-link]'; }\r\n\r\n private static mutationConfig: MutationObserverInit = {\r\n childList: true,\r\n subtree: true\r\n };\r\n\r\n public static createLink($element: JQuery, options: ICreateLink) {\r\n if (!$element || $element.length != 1)\r\n throw new Error('You must provide a single element to Rustig.TransformTextToLink');\r\n\r\n options = $.extend({}, $element.data(), options);\r\n\r\n if (!options.regex || !options.url)\r\n return;\r\n\r\n if ($element.is('[data-remote]')) {\r\n options.isRemote = true;\r\n $element.on('click.rustig.remote', function (e) {\r\n if (e.target == this)\r\n e.stopImmediatePropagation();\r\n });\r\n }\r\n\r\n this.configureMutationObserver($element, options, this.tryApplyLink.bind(this));\r\n this.tryApplyLink($element, $element[0], options);\r\n }\r\n\r\n public static tryApplyLink($element: JQuery, node: any, options: ICreateLink) {\r\n let observer = $element.data('transform-text-to-link-observer');\r\n try {\r\n observer.disconnect();\r\n this.applyLink(node, options);\r\n }\r\n finally {\r\n observer.observe($element[0], this.mutationConfig);\r\n }\r\n }\r\n\r\n public static applyLink(node: Node, options: ICreateLink): number {\r\n if (node instanceof Text) {\r\n let regex = typeof (options.regex) === 'string' ? new RegExp(options.regex) : options.regex;\r\n let index = node.data.search(regex);\r\n if (index >= 0 && node.data.length > 0) {\r\n var match = node.data.match(regex);\r\n\r\n if (!match)\r\n return;\r\n\r\n var aNode = document.createElement('a');\r\n if (options.isRemote)\r\n aNode.setAttribute('data-url', options.url)\r\n else\r\n aNode.setAttribute('href', options.url);\r\n if (options.target)\r\n aNode.setAttribute('target', options.target);\r\n\r\n let aNodeText = node.splitText(index);\r\n aNodeText.splitText(match[0].length);\r\n\r\n let aNodeTextClone = aNodeText.cloneNode(true);\r\n aNode.appendChild(aNodeTextClone);\r\n\r\n if (aNodeText.parentNode) {\r\n aNodeText.parentNode.replaceChild(aNode, aNodeText);\r\n } else {\r\n node.parentNode.insertBefore(aNode, node.nextSibling);\r\n }\r\n\r\n let skipNewlyCreatedNodes = 2;\r\n return skipNewlyCreatedNodes;\r\n }\r\n }\r\n else if (node instanceof HTMLElement) {\r\n let hasChildNodes = node.childNodes;\r\n let isStyleOrScriptElement = /(script|style)/i.test(node.tagName);\r\n if (hasChildNodes && !isStyleOrScriptElement) {\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n i += this.applyLink(node.childNodes[i], options);\r\n }\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n private static configureMutationObserver($element: JQuery, options: ICreateLink, nodeAddedHandler: ($element: JQuery, node: any, options: ICreateLink) => void): void {\r\n if ($element.data('transform-text-to-link-observer'))\r\n return;\r\n\r\n const callback: MutationCallback = (mutationsList: MutationRecord[]) => {\r\n for (const mutation of mutationsList) {\r\n if (mutation.type === 'childList' && mutation.addedNodes.length) {\r\n\r\n mutation.addedNodes.forEach((node) => {\r\n nodeAddedHandler($element, node, options);\r\n });\r\n }\r\n }\r\n }\r\n\r\n const observer = new MutationObserver(callback);\r\n\r\n $element.data('transform-text-to-link-observer', observer);\r\n observer.observe($element[0], this.mutationConfig);\r\n }\r\n }\r\n\r\n export interface ICreateLink {\r\n regex: string | RegExp;\r\n url: string;\r\n isRemote?: boolean;\r\n target?: string;\r\n }\r\n\r\n function Plugin(option, args) {\r\n return this.each(function () {\r\n TransformTextToLink.createLink($(this), option);\r\n });\r\n }\r\n\r\n$.fn.transformtexttolink = Plugin;\r\n","import $ from 'jquery';\r\nimport Element from \"./element\";\r\n\r\ndeclare global {\r\n\r\n interface JQuery {\r\n valuebinding(options?: IValueBindingOptions);\r\n }\r\n}\r\n\r\nexport class ValueBinding {\r\n public static get wireup(): string {\r\n return this.wireupName.asDataSelector();\r\n }\r\n\r\n private static wireupName: string = 'value-bind';\r\n private static suppressedKey = '_suppressed';\r\n private element: Element;\r\n private getValue: (element: Element) => any;\r\n private setValue: (element: Element, value: any) => void;\r\n private hasSuppressedBindTo: boolean;\r\n\r\n private DEFAULTS: IValueBindingOptions = {\r\n bindOn: 'input',\r\n bindFrom: 'value',\r\n bindTo: 'value',\r\n bindBehavior: 'set',\r\n key: null,\r\n nullToken: null\r\n };\r\n\r\n private bindToMap: any[] = [\r\n { key: 'text', binder: (e, v) => e.text(v) },\r\n { key: 'value', binder: (e, v) => e.value(v) },\r\n { key: `value${ValueBinding.suppressedKey}`, binder: (e, v) => e.suppressValueChange(v) }\r\n ];\r\n\r\n private bindFromMap: any[] = [\r\n { key: 'text', binder: e => e.text() },\r\n { key: 'value', binder: e => e.value() }\r\n ];\r\n\r\n constructor(private $element: JQuery, private options: IValueBindingOptions) {\r\n if (!this.$element || this.$element.length == 0)\r\n throw Error('You must provide an element to Rustig.ValueBinding');\r\n\r\n this.options = $.extend({}, this.DEFAULTS, this.options, this.$element.data())\r\n this.options.key = this.options.key || this.$element.data(ValueBinding.wireupName);\r\n this.element = new Element(this.$element);\r\n\r\n if (!this.options.key)\r\n throw Error('You must provide a key to Rustig.ValueBinding');\r\n\r\n this.setGetValue();\r\n this.setSetValue();\r\n\r\n this.options.bindOn.split(',').forEach((event) => {\r\n this.bindEvent(event.trim());\r\n });\r\n }\r\n\r\n private bindEvent(event: string) {\r\n let key = 'rustig.valuebinding.' + event + '.target';\r\n let eventName = event + '.rustig.valuebinding';\r\n let targets = >this.$element.data(key);\r\n if (!targets) {\r\n let selector = '[data-value-bind-for=\"' + this.options.key + '\"]';\r\n targets = Element.fromElements($(selector));\r\n this.$element.data(key, targets);\r\n }\r\n\r\n this.$element.on(eventName, () => {\r\n let value;\r\n let isFalseBool = this.options.bindWith !== undefined && !this.options.bindWith;\r\n\r\n if (isFalseBool)\r\n value = false;\r\n else\r\n value = this.options.bindWith || this.getValue(this.element);\r\n\r\n if (value === this.options.nullToken)\r\n value = null;\r\n\r\n targets.forEach((target: Element) => {\r\n let currentValue = this.getValue(target);\r\n\r\n if (this.options.bindBehavior === 'toggle' && currentValue === value) {\r\n value = null;\r\n }\r\n\r\n this.setValue(target, value);\r\n\r\n if (!target.isCheckbox && !this.hasSuppressedBindTo)\r\n target.$element.trigger(jQuery.Event(eventName));\r\n\r\n target.$element.trigger(jQuery.Event('rustig.valuebinding.valueset'));\r\n });\r\n });\r\n };\r\n\r\n private setGetValue(): void {\r\n for (let i = 0; i < this.bindFromMap.length; i++) {\r\n if (this.options.bindFrom === this.bindFromMap[i].key) {\r\n this.getValue = this.bindFromMap[i].binder;\r\n return;\r\n }\r\n }\r\n this.getValue = e => e.value();\r\n }\r\n\r\n private setSetValue(): void {\r\n this.hasSuppressedBindTo = this.options.bindTo.endsWith(ValueBinding.suppressedKey);\r\n\r\n for (let i = 0; i < this.bindToMap.length; i++) {\r\n if (this.options.bindTo === this.bindToMap[i].key) {\r\n this.setValue = this.bindToMap[i].binder;\r\n return;\r\n }\r\n }\r\n this.setValue = (e, v) => e.value(v);\r\n }\r\n}\r\n\r\nexport interface IValueBindingOptions {\r\n key: string;\r\n bindOn: string;\r\n bindFrom?: string;\r\n bindTo?: string;\r\n bindWith?: string;\r\n bindBehavior?: string;\r\n nullToken?: string;\r\n};\r\n\r\nfunction Plugin(option) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.valuebinding');\r\n let options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new ValueBinding($this, options);\r\n $this.data('rustig.valuebinding', data);\r\n }\r\n });\r\n}\r\n\r\n$.fn.valuebinding = Plugin;\r\n\r\n","import $ from 'jquery';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n isHidden(): boolean;\r\n isVisible(): boolean;\r\n hidden(): JQuery;\r\n visible(): JQuery;\r\n toggleVisible(condition: any): JQuery;\r\n }\r\n}\r\n\r\n(function ($) {\r\n $.fn.hidden = function () {\r\n return $(this).addClass('visibility-hidden');\r\n };\r\n $.fn.visible = function () {\r\n return $(this).removeClass('visibility-hidden');\r\n };\r\n $.fn.isHidden = function () {\r\n return $(this).is('.visibility-hidden');\r\n }\r\n $.fn.isVisible = function () {\r\n return !$(this).isHidden();\r\n }\r\n $.fn.toggleVisible = function (condition) {\r\n if (condition)\r\n return $(this).visible();\r\n else\r\n return $(this).hidden();\r\n }\r\n})($);","import $ from 'jquery';\r\nimport { Element } from './element';\r\nimport _ from 'underscore';\r\n\r\nexport class ToggleValue {\r\n public static wireupDocument: Function = _.once(() => {\r\n $(document).on('toggled.rustig.togglestate', '[data-ts-command=\"value\"]', function () {\r\n let htmlElement = this as HTMLElement;\r\n let element = Element.from(htmlElement);\r\n\r\n let value1 = element.isCheckbox ? htmlElement.getAttribute('data-value-1').toBoolean() : htmlElement.getAttribute('data-value-1');\r\n let value2 = element.isCheckbox ? htmlElement.getAttribute('data-value-2').toBoolean() : htmlElement.getAttribute('data-value-2');\r\n\r\n if (element.value() === value1)\r\n element.value(value2);\r\n else\r\n element.value(value1);\r\n });\r\n\r\n $(document).on('toggled.rustig.togglestate', '[data-ts-command=\"value-by-selector\"]', function () {\r\n let htmlElement = this as HTMLElement;\r\n let getValue = function (attribute: string): string {\r\n let selector = htmlElement.getAttribute(attribute);\r\n let element = document.querySelector(selector) as HTMLElement;\r\n return Element.from(element).value();\r\n }\r\n\r\n let value1 = getValue('data-value-1');\r\n let value2 = getValue('data-value-2');\r\n\r\n let element = Element.from(htmlElement);\r\n if (element.value() === value1)\r\n element.value(value2);\r\n else\r\n element.value(value1);\r\n });\r\n });\r\n}","import $ from 'jquery';\r\n\r\nclass Application {\r\n static conventions: any;\r\n static conventionsReady: boolean;\r\n\r\n static convention(selector, wireup) {\r\n Application.conventions.push({ selector: selector, wireup: wireup });\r\n };\r\n\r\n static wireupConventions(element) {\r\n for (var i = 0; i < Application.conventions.length; i++) {\r\n var convention = Application.conventions[i];\r\n convention.wireup.call($(convention.selector, $(element)).addBack(convention.selector));\r\n }\r\n }\r\n static triggerConventionsReady() {\r\n if (Application.conventionsReady) {\r\n $(document).trigger('rustig.conventionsready');\r\n } else {\r\n setTimeout(Application.triggerConventionsReady, 50);\r\n }\r\n };\r\n}\r\nApplication.conventions = [];\r\nApplication.conventionsReady = true;\r\n\r\nexport default Application;\r\n\r\n","import $ from 'jquery';\r\nimport Application from './application';\r\n\r\nexport class Patches {\r\n public static Execute() {\r\n ($.fn).oldSlideUp = $.fn.slideUp;\r\n ($.fn).slideUp = function (interval, callback) {\r\n return ($(this)).oldSlideUp(interval,\r\n function () {\r\n if (typeof (callback) == \"function\")\r\n callback();\r\n $(this).css('overflow', '');\r\n });\r\n };\r\n ($.fn).oldSlideDown = $.fn.slideDown;\r\n ($.fn).slideDown = function (interval, callback) {\r\n return ($(this)).oldSlideDown(interval,\r\n function () {\r\n if (typeof (callback) == \"function\")\r\n callback();\r\n $(this).css('overflow', '');\r\n });\r\n };\r\n\r\n // hijack jquery's html method to run our wireups when dom is modified\r\n ($.fn).oldHtml = $.fn.html;\r\n $.fn.html = function() {\r\n if (!arguments.length)\r\n return ($.fn).oldHtml.apply(this, arguments);\r\n\r\n Application.conventionsReady = false;\r\n var r = ($.fn).oldHtml.apply(this, arguments);\r\n Application.wireupConventions(this);\r\n Application.conventionsReady = true;\r\n setTimeout(Application.triggerConventionsReady, 50);\r\n\r\n return r;\r\n };\r\n\r\n //override jquery's replaceWith method to run our wireups when dom is modified\r\n ($.fn).oldReplaceWith = $.fn.replaceWith;\r\n $.fn.replaceWith = function() {\r\n Application.conventionsReady = false;\r\n var newElement = arguments[0];\r\n var r = ($.fn).oldReplaceWith.apply(this, arguments);\r\n Application.wireupConventions(newElement);\r\n Application.conventionsReady = true;\r\n setTimeout(Application.triggerConventionsReady, 50);\r\n\r\n return r;\r\n };\r\n\r\n }\r\n}\r\n\r\n","\r\nexport class Polyfills {\r\n public static Execute() {\r\n this.closest();\r\n this.endsWith();\r\n }\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\r\n private static closest() {\r\n if (!Element.prototype.matches)\r\n Element.prototype.matches = Element.prototype.msMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n\r\n if (!Element.prototype.closest) {\r\n Element.prototype.closest = function (s) {\r\n var el = this;\r\n if (!document.documentElement.contains(el)) return null;\r\n do {\r\n if (el.matches(s)) return el;\r\n el = el.parentElement || el.parentNode;\r\n } while (el !== null && el.nodeType === 1);\r\n return null;\r\n };\r\n }\r\n }\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\r\n private static endsWith() {\r\n if (!String.prototype.endsWith) {\r\n String.prototype.endsWith = function (search, this_len) {\r\n if (this_len === undefined || this_len > this.length) {\r\n this_len = this.length;\r\n }\r\n return this.substring(this_len - search.length, this_len) === search;\r\n };\r\n }\r\n }\r\n}","import $ from 'jquery';\r\nimport { PopOver, IPopoverOptions } from \"./popover\";\r\n\r\ndeclare global {\r\n interface JQuery {\r\n remotePopover(option?: any): JQuery;\r\n }\r\n}\r\n\r\nexport class RemotePopOver extends PopOver{\r\n public static wireup: string = '[data-remotepopover]';\r\n constructor(element: JQuery, options: IPopoverOptions) {\r\n super(element, options)\r\n }\r\n\r\n protected init() {\r\n var url = this.$element.data(\"popover-url\");\r\n if (url.length == 0)\r\n throw new Error(\"you must specify a url when using RemotePopover\");\r\n this.options.popover = url;\r\n\r\n this.options.getContent = function (popover: RemotePopOver) {\r\n var d = $.Deferred();\r\n popover.$element.remote({\r\n url: url,\r\n success: function (data) {\r\n data = $(data).attr('data-remotepopover-content', 'on')[0].outerHTML;\r\n d.resolve(data);\r\n }\r\n });\r\n return d.promise();\r\n }\r\n\r\n super.init();\r\n }\r\n}\r\n\r\n($ => {\r\n function plugin(option) {\r\n return this.each(function() {\r\n var $this = $(this);\r\n var data = $this.data('rustig.remotepopover');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new RemotePopOver(this, options);\r\n $this.data('rustig.remotepopover', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option]();\r\n });\r\n }\r\n\r\n $.fn.remotePopover = plugin;\r\n})($);","import $ from 'jquery';\r\n\r\nexport class AutoHeightTable {\r\n\r\n public static get wireup(): string { return 'auto-height-table'.asDataSelector(); }\r\n\r\n constructor($element: JQuery, options: any) {\r\n const tableRowHeight = 32;\r\n let rowCount = $element.find('tbody tr').length;\r\n let tableHeight = (rowCount + 1) * tableRowHeight;\r\n\r\n $element.height(tableHeight);\r\n }\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.autoheighttable');\r\n let options = typeof option === 'object' && option;\r\n\r\n if (!data) {\r\n data = new AutoHeightTable($this, options);\r\n $this.data('rustig.autoheighttable', data);\r\n }\r\n if (typeof (option) == 'string')\r\n data[option](args);\r\n })\r\n}\r\n\r\ndeclare global {\r\n interface JQuery {\r\n autoheighttable: (option, args) => any;\r\n }\r\n}\r\n\r\n$.fn.autoheighttable = Plugin;","import $ from 'jquery';\r\nimport { ErrorPopover, IClearErrorOptions, IClearErrorWireup } from \"./errorpopover\";\r\nimport { FormValidation, IValidationHandler } from \"./formvalidation\"\r\n\r\nexport class CheckboxValidationHandler implements IValidationHandler {\r\n handle($error: JQuery): boolean {\r\n var $checkboxField = $error.closest('.input-checkbox-field');\r\n var isCheckbox = $checkboxField.length > 0;\r\n if (!isCheckbox)\r\n return false;\r\n\r\n if ($checkboxField.data('error-handled') == true)\r\n return true;\r\n\r\n var errorMessage = $error.html();\r\n $checkboxField.data('error-handled', true);\r\n $checkboxField.addClass(FormValidation.validationClass);\r\n\r\n $error.remove();\r\n\r\n var $input = $checkboxField.find('[type=\"checkbox\"]');\r\n var id = $input.attr('id');\r\n\r\n new ErrorPopover().append($input, id, errorMessage, null, \r\n {\r\n onErrorPopoverDisabled: () => this.onErrorPopoverDisabled($checkboxField)\r\n } as IClearErrorOptions);\r\n\r\n return true;\r\n }\r\n\r\n private onErrorPopoverDisabled($field: JQuery): void {\r\n $field.removeClass(FormValidation.validationClass);\r\n }\r\n}\r\n","import moment, { unitOfTime } from 'moment';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { Element as RustigElement } from './element';\r\nimport { DateField } from '../modules/datefield';\r\n\r\nexport class DateExpression {\r\n private static sourceSelector = 'date-expression';\r\n private static targetSelector = 'de-target';\r\n\r\n public static get wireup() {\r\n return DateExpression.sourceSelector.asDataSelector();\r\n }\r\n\r\n $element: JQuery;\r\n $datefield: DateField;\r\n $key: string;\r\n\r\n public constructor($element: JQuery) {\r\n this.$element = $element;\r\n this.$datefield = this.$element.data('rustig.datefield');\r\n this.$key = this.$element.data(DateExpression.sourceSelector);\r\n\r\n if (this.$key === undefined)\r\n throw new Error('Rustig.DateExpression requires a key');\r\n\r\n this.registerEvents();\r\n }\r\n\r\n registerEvents() {\r\n let eventString = this.$element.data('de-trigger');\r\n\r\n this.$element.on(eventString, this.onInputChange.bind(this));\r\n }\r\n\r\n onInputChange(e: JQueryEventObject) {\r\n const format = this.$datefield?.dateFormat?.pickerDateFormat;\r\n const sourceValue = moment(this.$element.val(), format);\r\n\r\n if (!sourceValue.isValid())\r\n return;\r\n\r\n const $targets = $(DateExpression.targetSelector.asDataSelector(this.$key));\r\n\r\n $targets\r\n .each((_, element) => {\r\n const $element = $(element);\r\n const value = parseInt($element.data('de-value'));\r\n const unit = $element.data('de-unit') ?? 'd' as unitOfTime.Base;\r\n\r\n if (isNaN(value))\r\n throw new Error('Rustig.DateExpression requires a value.');\r\n\r\n const newValue = sourceValue.clone().add(value, unit).toDate();\r\n\r\n new RustigElement($element).value(newValue);\r\n });\r\n }\r\n}\r\n\r\nfunction Plugin(): void {\r\n return this.each(function () {\r\n let $this = $(this);\r\n let data = $this.data('rustig.dateexpression');\r\n\r\n if (!data) {\r\n data = new DateExpression($this);\r\n $this.data('rustig.dateexpression', data);\r\n }\r\n })\r\n}\r\n\r\ndeclare global {\r\n interface JQuery {\r\n dateexpression: () => any;\r\n }\r\n}\r\n\r\n$.fn.dateexpression = Plugin;\r\n","import $ from 'jquery';\r\nimport { ErrorPopover } from \"./errorpopover\";\r\nimport { FormValidation, IValidationHandler } from \"./formvalidation\"\r\n\r\nexport class FieldValidationHandler implements IValidationHandler {\r\n handle($error: JQuery): boolean {\r\n if ($error.data('error-handled') == true)\r\n return true;\r\n\r\n let errorMessage = $error.html();\r\n \r\n let targetId = $error.data('for');\r\n let $context = this.resolveContext($error);\r\n let $targetInput = $context.find('#' + targetId);\r\n\r\n if ($targetInput.length == 0)\r\n return false;\r\n\r\n $targetInput.data('error-handled', true);\r\n $error.remove();\r\n\r\n new ErrorPopover().append($targetInput, targetId, errorMessage);\r\n\r\n return true;\r\n }\r\n\r\n private resolveContext($error: JQuery) {\r\n let $form = $error.closest('form');\r\n\r\n return $form.length > 0 ? $form\r\n : $(document);\r\n }\r\n}","// todo: needs to scope to the nearest form or possibly a data attribute the developer places so \r\n// multiple instances can be used on the same page.\r\n\r\nexport class HasChanges {\r\n public static wireup() {\r\n $(document).on('change change.rustig input fileadded', function (e) {\r\n var $hasChanges = $('[data-has-changes]');\r\n if ($hasChanges.length <= 0)\r\n return true;\r\n\r\n let $this = $(this);\r\n if ($this.data('r-is-constructing') as boolean) {\r\n return true;\r\n }\r\n\r\n $hasChanges.val('true');\r\n\r\n return true;\r\n });\r\n }\r\n}","import { Element as RustigElement } from '../utilities/element';\r\n\r\nexport class MathExpressions {\r\n public static wireup() {\r\n\r\n let getValue = (element: HTMLElement): any => {\r\n var rElement = RustigElement.from(element);\r\n\r\n let result = element.getAttribute('data-expression-value')\r\n || rElement.value()\r\n || 0;\r\n\r\n if (rElement.isCheckbox) {\r\n let isChecked = !!rElement.value();\r\n return isChecked ? Number(result) : 0;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n let setValue = (element: HTMLElement, value: any): void => {\r\n let rElement = RustigElement.from(element);\r\n let setType = element.getAttribute('data-expression-set') || 'value';\r\n\r\n if (setType == 'value')\r\n rElement.value(value);\r\n else\r\n rElement.text(value);\r\n }\r\n\r\n $(document).on('change', '[data-expression-key]', function (e: Event) {\r\n let key = (e.target as Element).getAttribute('data-expression-key');\r\n let elements = document.querySelectorAll('[data-expression*=\"' + key + '\"]');\r\n\r\n Array.prototype.slice.call(elements).forEach((element: Element) => {\r\n let expression = element.getAttribute('data-expression');\r\n let expressionKeySurroundedByBrackets = /\\[([^\\]]*)\\]/g;\r\n let expressionKeys = expression.match(expressionKeySurroundedByBrackets);\r\n let selectors = expressionKeys.map(x => 'expression-key'.asDataSelector(x.replace(/[\\[\\]]/g, '')));\r\n let values = selectors.map(x => getValue(document.querySelector(x) as HTMLElement));\r\n for (let i = 0; i < expressionKeys.length; i++) {\r\n expression = expression.replace(expressionKeys[i], values[i]);\r\n }\r\n let value = Function('return ' + expression)();\r\n setValue(element as HTMLElement, value);\r\n });\r\n });\r\n\r\n $(document).on('change', '[data-sum-key]', function (e: Event) {\r\n let key = (e.target as Element).getAttribute('data-sum-key');\r\n let keyElements = document.querySelectorAll('sum-key'.asDataSelector(key));\r\n let value = Array.prototype.slice.call(keyElements).reduce((total, element) => total + parseFloat(getValue(element as HTMLElement)), 0);\r\n\r\n let sumElement = document.querySelector('sum'.asDataSelector(key));\r\n setValue(sumElement as HTMLElement, value);\r\n });\r\n }\r\n}","import $ from 'jquery';\r\nimport { ErrorPopover, IClearErrorOptions } from \"./errorpopover\";\r\nimport { FormValidation, IValidationHandler } from \"./formvalidation\";\r\nimport { FieldValidationHandler } from \"./fieldvalidationhandler\";\r\n\r\nexport class MultiSelectDropdownValidationHandler implements IValidationHandler {\r\n handle($error: JQuery): boolean {\r\n let $field = $error.prev('[data-multiselect]');\r\n let isMultiSelect = $field.length > 0;\r\n if (!isMultiSelect)\r\n return false;\r\n\r\n if ($field.data('error-handled') == true)\r\n return true;\r\n\r\n let errorMessage = $error.html();\r\n $field.data('error-handled', true);\r\n $field.addClass(FormValidation.validationClass);\r\n\r\n $error.remove();\r\n\r\n let id = $field.find('[data-popover]').data('popover') + '-error';\r\n let $userFacingInput = $field.find('[data-ms-user-facing-input]');\r\n let $realInput = $field.find('[data-ms-real-input]');\r\n new ErrorPopover().append($userFacingInput, id, errorMessage, 'none', {\r\n clearErrorWireups: [\r\n { $targetInput: $userFacingInput, triggerEvents: 'change input' },\r\n { $targetInput: $realInput, triggerEvents: 'change' }\r\n ],\r\n onErrorPopoverDisabled: () => {\r\n this.onErrorPopoverDisabled($field);\r\n this.onErrorPopoverDisabled($userFacingInput);\r\n }\r\n } as IClearErrorOptions);\r\n\r\n return true;\r\n }\r\n\r\n private onErrorPopoverDisabled($field: JQuery): void {\r\n $field.removeClass(FormValidation.validationClass);\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport { ErrorPopover } from \"./errorpopover\";\r\nimport { FormValidation, IValidationHandler } from \"./formvalidation\";\r\nimport { FieldValidationHandler } from \"./fieldvalidationhandler\";\r\n\r\nexport class NameValidationHandler implements IValidationHandler {\r\n handle($error: JQuery): boolean {\r\n var $nameField = $error.closest('.name-field');\r\n var isName = $nameField.length > 0;\r\n if (isName == false)\r\n return false;\r\n\r\n if ($nameField.data('error-handled') == true)\r\n return true;\r\n\r\n var $errors = $nameField.find('.field-validation-error')\r\n var $errorRollUp = $('
    ');\r\n $errors.each(function () {\r\n var $error = $(this);\r\n $errorRollUp.append($('

    ').append($error.html()));\r\n new FieldValidationHandler().handle($error);\r\n });\r\n\r\n var $targetInput = $nameField.find('.name-full-input');\r\n var targetId = $errors.first().data('for') + '-name-full-input';\r\n new ErrorPopover().append($targetInput, targetId, $errorRollUp);\r\n $nameField.data('error-handled', true);\r\n\r\n return true;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\nvar Legacy = Legacy || {};\r\n\r\ninterface IPersonName {\r\n prefix: string | null,\r\n first: string | null,\r\n middle: string | null,\r\n last: string | null,\r\n suffix: string | null,\r\n};\r\n\r\nexport class PersonName implements IPersonName {\r\n public prefix: string | null;\r\n public first: string | null;\r\n public middle: string | null;\r\n public last: string | null;\r\n public suffix: string | null;\r\n\r\n public constructor(prefix: string, first: string, middle: string, last: string, suffix: string) {\r\n this.prefix = prefix;\r\n this.first = first;\r\n this.middle = middle;\r\n this.last = last;\r\n this.suffix = suffix;\r\n }\r\n\r\n public static parse(input: string): PersonName {\r\n if (!input || input.isNullOrWhitespace())\r\n return new PersonName(null, null, null, null, null);\r\n\r\n let prefixes = [\"Dr.\", \"Miss\", \"Mr.\", \"Mrs.\", \"Ms.\", \"Prof.\"];\r\n let suffixes = [\"I\", \"II\", \"III\", \"Jr.\", \"Sr.\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\", \"Esq.\"];\r\n let lastNamePrefixes = [\"Al\", \"Au\", \"De\", \"Di\", \"Du\", \"El\", \"La\", \"Le\", \"St\", \"Van\", \"Von\"];\r\n\r\n let values: IPersonName = {\r\n prefix: null,\r\n first: null,\r\n middle: null,\r\n last: null,\r\n suffix: null,\r\n };\r\n\r\n if (isFormalForm(input)) {\r\n parseFormal(input, values);\r\n } else {\r\n parseInformal(input, values);\r\n }\r\n\r\n // capitalize all parts\r\n if (values.prefix)\r\n values.prefix = values.prefix.capitalize();\r\n if (values.first)\r\n values.first = values.first.capitalize();\r\n if (values.middle)\r\n values.middle = values.middle.capitalize();\r\n if (values.last)\r\n values.last = values.last.capitalize();\r\n if (values.suffix)\r\n values.suffix = values.suffix.capitalize();\r\n\r\n return new PersonName(\r\n values.prefix,\r\n values.first,\r\n values.middle,\r\n values.last,\r\n values.suffix\r\n );\r\n\r\n function parseFormal(name: string, result: IPersonName) {\r\n let commaIndex = name.indexOf(',');\r\n let beforeComma = name.substring(0, commaIndex);\r\n let afterComma = name.substring(commaIndex + 1);\r\n\r\n result.last = beforeComma;\r\n\r\n if (!afterComma || afterComma?.isNullOrWhitespace())\r\n return; \r\n\r\n let words = afterComma.split(/\\s*,?\\s+|,/).filter(x => x && !x.isNullOrWhitespace());\r\n\r\n extractPrefix(words, result);\r\n extractSuffix(words, result);\r\n extractFirstNameSingleCharacter();\r\n extractMiddleInitial();\r\n\r\n result.first = result.first || words.join(\" \");\r\n\r\n function extractFirstNameSingleCharacter(): void {\r\n if (words.length == 0)\r\n return;\r\n\r\n var testWord = words[0];\r\n if (testWord.length == 1) {\r\n result.first = testWord;\r\n words.shift();\r\n }\r\n }\r\n\r\n function extractMiddleInitial(): void {\r\n if (words.length == 0)\r\n return;\r\n\r\n if (words.length == 2 && isLastNamePrefix(words[0]))\r\n return;\r\n\r\n var testWord = last(words);\r\n if (testWord.length == 1 || testWord.length == 2 && testWord[1] == '.') {\r\n result.middle = trimDot(testWord);\r\n words.pop();\r\n }\r\n }\r\n }\r\n\r\n function parseInformal(name: string, result: IPersonName) {\r\n let words = name.trim().split(/\\s*,?\\s+|,/).filter(x => x && !x.isNullOrWhitespace());\r\n\r\n extractPrefix(words, result);\r\n extractSuffix(words, result);\r\n\r\n if (words.length == 0)\r\n return;\r\n else if (words.length == 1) {\r\n result.last = words[0];\r\n return;\r\n }\r\n\r\n if (words.length == 2) {\r\n if (isLastNamePrefix(words[0])) {\r\n result.last = words.join(\" \");\r\n return;\r\n }\r\n\r\n result.first = words[0];\r\n result.last = words[1];\r\n\r\n return;\r\n }\r\n\r\n if (words.length == 3) {\r\n\r\n if (isInitial(words[1])) {\r\n result.first = words[0];\r\n result.middle = trimDot(words[1]);\r\n result.last = words[2];\r\n return;\r\n }\r\n\r\n if (isLastNamePrefix(words[1])) {\r\n result.first = words[0];\r\n result.last = `${words[1]} ${words[2]}`;\r\n return;\r\n }\r\n\r\n result.first = `${words[0]} ${words[1]}`;\r\n result.last = words[2];\r\n\r\n return;\r\n }\r\n\r\n let isFirst = true;\r\n let foundLastToken = false;\r\n let firstWords: string[] = [];\r\n let lastWords: string[] = [];\r\n\r\n while (words.length > 0) {\r\n let testWord = words[0];\r\n\r\n if (!isFirst && isInitial(testWord))\r\n result.middle = testWord[0];\r\n else if (isFirst) {\r\n firstWords.push(testWord);\r\n isFirst = false;\r\n }\r\n else if (!foundLastToken && isLastNamePrefix(testWord)) {\r\n firstWords.push(...lastWords);\r\n lastWords = [testWord];\r\n foundLastToken = true;\r\n }\r\n else\r\n lastWords.push(testWord);\r\n\r\n words.shift();\r\n }\r\n\r\n result.first = firstWords.join(\" \");\r\n result.last = lastWords.join(\" \");\r\n }\r\n\r\n function isInitial(word: string): boolean {\r\n return word.length == 1 || (word.length == 2 && word[1] == '.');\r\n }\r\n\r\n function isLastNamePrefix(word: string): boolean {\r\n return lastNamePrefixes.some(x => isEqualIgnoreCase(x, word));\r\n }\r\n\r\n function extractPrefix(words: string[], result: IPersonName) {\r\n if (prefixes == null || words.length == 0)\r\n return;\r\n\r\n let foundPrefix = findWord(prefixes, words[0]);\r\n\r\n if (foundPrefix) {\r\n result.prefix = foundPrefix;\r\n words.shift();\r\n }\r\n }\r\n\r\n function extractSuffix(words: string[], result: IPersonName) {\r\n if (suffixes == null || words.length == 0)\r\n return;\r\n\r\n let foundSuffix = findWord(suffixes, last(words));\r\n\r\n if (foundSuffix) {\r\n result.suffix = foundSuffix;\r\n words.pop();\r\n }\r\n }\r\n\r\n function isFormalForm(name: string): boolean {\r\n let suffixFollowsComma = false;\r\n let commaIndex = name.indexOf(',');\r\n\r\n if (commaIndex > -1) {\r\n let afterComma = name.substring(commaIndex + 1).trim();\r\n suffixFollowsComma = findWord(suffixes, afterComma) != null;\r\n }\r\n\r\n let hasCommaNotFollowedBySuffix = commaIndex > -1 && !suffixFollowsComma;\r\n return hasCommaNotFollowedBySuffix;\r\n }\r\n\r\n function findWord(words: string[], testword: string): string | null {\r\n if (words == null || !testword || testword.isNullOrWhitespace())\r\n return null;\r\n\r\n return _.find(words, x => isEqualIgnoreCase(x, testword) || isEqualIgnoreCase(x, testword + \".\"));\r\n }\r\n\r\n function last(array: T[]): T {\r\n return array[array.length - 1];\r\n }\r\n\r\n function isEqualIgnoreCase(a: string, b: string): boolean {\r\n return a.localeCompare(b, undefined, { sensitivity: 'accent' }) === 0;\r\n }\r\n\r\n function trimDot(value: string): string {\r\n return value.replace('.', '');\r\n }\r\n }\r\n\r\n public format(): string | null {\r\n let middle = this.middle;\r\n if (middle && middle.length == 1)\r\n middle += '.';\r\n\r\n let nocomma = PersonName.joinNotNullOrWhitespace(\" \", this.prefix, this.first, middle);\r\n let name = PersonName.joinNotNullOrWhitespace(\", \", this.last, nocomma, this.suffix);\r\n return !name || name.isNullOrWhitespace() ? null : name;\r\n }\r\n\r\n public formatInformal(): string | null {\r\n let middle = this.middle;\r\n if (middle && middle.length == 1)\r\n middle += '.';\r\n\r\n let name = PersonName.joinNotNullOrWhitespace(\" \", this.prefix, this.first, middle, this.last);\r\n if (!this.suffix.isNullOrWhitespace())\r\n name = name + \", \" + this.suffix;\r\n\r\n return !name || name.isNullOrWhitespace() ? null : name;\r\n }\r\n\r\n private static joinNotNullOrWhitespace = function (separator: string, ...args: string[]): string {\r\n return args.filter(x => x && !x.isNullOrWhitespace()).join(separator);\r\n }\r\n}\r\n\r\nexport default PersonName;\r\n","import $ from 'jquery';\r\nimport { ErrorPopover } from \"./errorpopover\";\r\nimport { FormValidation, IValidationHandler } from \"./formvalidation\";\r\nimport { FieldValidationHandler } from \"./fieldvalidationhandler\";\r\n\r\n\r\nexport class PhoneValidationHandler implements IValidationHandler {\r\n handle($error: JQuery): boolean {\r\n var $phoneField = $error.closest('.phone-field');\r\n var isPhone = $phoneField.length > 0;\r\n if (isPhone == false)\r\n return false;\r\n\r\n if ($phoneField.data('error-handled') == true)\r\n return true;\r\n\r\n var $errors = $phoneField.find('.field-validation-error')\r\n var $errorRollUp = $('

    ');\r\n $errors.each(function () {\r\n var $error = $(this);\r\n $errorRollUp.append($('

    ').append($error.html()));\r\n new FieldValidationHandler().handle($error);\r\n });\r\n\r\n var $targetInput = $phoneField.find('.phone-full-input');\r\n var targetId = $errors.first().data('for') + '-phone-full-input';\r\n new ErrorPopover().append($targetInput, targetId, $errorRollUp);\r\n $phoneField.data('error-handled', true);\r\n\r\n return true;\r\n }\r\n}\r\n","export class PrintPreview {\r\n public static wireup() {\r\n document.addEventListener('click', function (e: Event) {\r\n let element = e.target as HTMLElement;\r\n if (!element.matches('[data-print]'))\r\n return;\r\n\r\n let id = element.getAttribute('data-print');\r\n let iframe = document.querySelector('print-preview'.asDataSelector(id)).querySelector('iframe') as HTMLIFrameElement;\r\n iframe.focus();\r\n try {\r\n iframe.contentWindow.document.execCommand('print', false, null)\r\n }\r\n catch (e) {\r\n iframe.contentWindow.print();\r\n }\r\n });\r\n }\r\n}","import $ from 'jquery';\r\nimport { ErrorPopover } from \"./errorpopover\";\r\nimport { FormValidation, IValidationHandler } from \"./formvalidation\"\r\n\r\nexport class RadioValidationHandler implements IValidationHandler {\r\n handle($error: JQuery): boolean {\r\n var $radioField = $error.closest('.input-radio-fields');\r\n var isRadio = $radioField.length > 0;\r\n if (!isRadio)\r\n return false;\r\n\r\n if ($radioField.data('error-handled') == true)\r\n return true;\r\n\r\n var errorMessage = $error.html();\r\n $radioField.data('error-handled', true);\r\n var id = Math.random().toString();\r\n $error.remove();\r\n new ErrorPopover().append($radioField, id, errorMessage, 'focusin');\r\n\r\n return true;\r\n }\r\n}\r\n","import Focus from \"./focusfield\";\r\n\r\nexport class KeyboardFocusBounds {\r\n public static wireupDocument() {\r\n $(document).on('focus', '[data-keyboard-focus-bound]', function () {\r\n let $guard = $(this);\r\n let $parent = $guard.parent();\r\n if ($guard == $parent.find('[data-keyboard-focus-bound]').first())\r\n Focus.focusLastElement($parent);\r\n else\r\n Focus.focusFirstElement($parent);\r\n });\r\n }\r\n}\r\n\r\nexport default KeyboardFocusBounds;","import { FileInput } from \"./fileinput\";\r\nimport { Url } from \"../utilities/url\";\r\nimport { AsyncFileField } from \"./asyncfilefield\";\r\nimport _ from \"underscore\";\r\n\r\nexport class DragAndDropUpload {\r\n public static get wireup(): string { return '[data-drag-and-drop-upload]'; }\r\n\r\n private DEFAULTS: IDragAndDropUploadOptions = {\r\n queryParameterName: 'fileCount'\r\n }\r\n\r\n private options: IDragAndDropUploadOptions;\r\n private element: HTMLElement;\r\n\r\n public constructor(element: HTMLElement, options?: IDragAndDropUploadOptions) {\r\n if (element == null)\r\n throw new Error('You must provide an element to DragAndDropUpload')\r\n this.element = element;\r\n this.options = _.extend({}, this.DEFAULTS, this.getOptionsFromElement(), options);\r\n this.wireUpFileDragAndDrop();\r\n }\r\n\r\n public static load(element: HTMLElement, options?: IDragAndDropUploadOptions): DragAndDropUpload {\r\n let dragAndDropUploadElement = element as IDragAndDropUploadElement;\r\n if (!dragAndDropUploadElement.dragAndDropUpload)\r\n dragAndDropUploadElement.dragAndDropUpload = new DragAndDropUpload(dragAndDropUploadElement, options);\r\n\r\n return dragAndDropUploadElement.dragAndDropUpload;\r\n }\r\n\r\n public static wireupDocument(): void {\r\n $(document).on('draganddropuploadinputsready', (event: JQueryEventObject, data?: any) => {\r\n if (data === undefined) return;\r\n\r\n let fileFieldsContainer = document.querySelector(data.selector);\r\n let files = FileInput.droppedFiles;\r\n let fileFields = fileFieldsContainer.querySelectorAll('[data-file-field]');\r\n\r\n for (let i = 0; i < files.length; i++) {\r\n let fileField = $(fileFields[i]).data('rustig.asyncfilefield');\r\n fileField.addFile(files[i]);\r\n }\r\n });\r\n }\r\n\r\n private getOptionsFromElement(): IDragAndDropUploadOptions {\r\n let options = {} as IDragAndDropUploadOptions;\r\n\r\n if (this.element.getAttribute('data-query-parameter-name'))\r\n options.queryParameterName = this.element.getAttribute('data-query-parameter-name');\r\n\r\n return options;\r\n }\r\n\r\n private wireUpFileDragAndDrop(): void {\r\n $(this.element).fileDragAndDrop({\r\n onFileDrop: ($dropArea: JQuery, files: Array, event: Event) => {\r\n this.element.classList.remove('over');\r\n\r\n FileInput.storeDroppedFiles(files);\r\n\r\n let fileCount = files.length;\r\n let url = this.element.getAttribute('data-url');\r\n $(this.element).remote({\r\n url: new Url(url).setQueryParameter(this.options.queryParameterName, fileCount.toString()).toUrl()\r\n })\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport interface IDragAndDropUploadElement extends HTMLInputElement {\r\n dragAndDropUpload: DragAndDropUpload;\r\n}\r\n\r\nexport interface IDragAndDropUploadOptions {\r\n queryParameterName: string;\r\n}\r\n\r\nexport default DragAndDropUpload;\r\n\r\n","import $ from 'jquery';\r\nimport { ErrorPopover, IClearErrorOptions } from \"./errorpopover\";\r\nimport { FormValidation, IValidationHandler } from \"./formvalidation\"\r\n\r\nexport class DropdownValidationHandler implements IValidationHandler {\r\n handle($error: JQuery): boolean {\r\n let targetId = $error.data('for');\r\n if (!targetId)\r\n return false;\r\n\r\n let $context = this.resolveContext($error);\r\n let $targetInput = $context.find('#' + targetId);\r\n\r\n if ($targetInput.length == 0)\r\n return false;\r\n\r\n let $dropdownField = $targetInput.closest('.dropdown-field');\r\n let isDropdown = $dropdownField.length > 0;\r\n if (!isDropdown)\r\n return false;\r\n\r\n if ($dropdownField.data('error-handled') == true)\r\n return true;\r\n\r\n let errorMessage = $error.html();\r\n\r\n $dropdownField.data('error-handled', true);\r\n $error.remove();\r\n\r\n let $select = $dropdownField.find('select');\r\n new ErrorPopover().append($targetInput, targetId, errorMessage, null, {\r\n clearErrorWireups: [\r\n { $targetInput: $targetInput, triggerEvents: 'change input' },\r\n { $targetInput: $select, triggerEvents: 'change' }\r\n ],\r\n onErrorPopoverDisabled: () => this.onErrorPopoverDisabled($targetInput)\r\n } as IClearErrorOptions);\r\n\r\n return true;\r\n }\r\n\r\n private onErrorPopoverDisabled($field: JQuery): void {\r\n $field.removeClass(FormValidation.validationClass);\r\n }\r\n\r\n private resolveContext($error: JQuery) {\r\n let $form = $error.closest('form');\r\n\r\n return $form.length > 0 ? $form\r\n : $(document);\r\n }\r\n}","import $ from 'jquery';\r\nimport { ErrorPopover, IClearErrorOptions } from \"./errorpopover\";\r\nimport { FormValidation, IValidationHandler } from \"./formvalidation\";\r\n\r\nexport class DateRangeValidationHandler implements IValidationHandler {\r\n handle($error: JQuery): boolean {\r\n let targetId = $error.data('for') as string;\r\n if (!targetId)\r\n return false;\r\n\r\n let $context = this.resolveContext($error);\r\n let $targetInput = $context.find('#' + targetId);\r\n\r\n if ($targetInput.length == 0)\r\n return false;\r\n\r\n let $dateRangeField = $targetInput.closest('[data-daterange]');\r\n let isDateRangeMainInput = $dateRangeField.length > 0 && targetId.endsWith('-display');\r\n if (!isDateRangeMainInput)\r\n return false;\r\n\r\n if ($dateRangeField.data('error-handled') == true)\r\n return true;\r\n\r\n let errorMessage = $error.html();\r\n\r\n $dateRangeField.data('error-handled', true);\r\n $error.remove();\r\n\r\n let $valueInput = $dateRangeField.find('[data-daterange-input]');\r\n let $userFacingElement = $dateRangeField.find('[data-daterange-display]');\r\n new ErrorPopover().append($targetInput, targetId, errorMessage, null, {\r\n clearErrorWireups: [\r\n { $targetInput: $valueInput, triggerEvents: 'ondaterangechanged' },\r\n ],\r\n onErrorPopoverDisabled: () => {\r\n this.onErrorPopoverDisabled($targetInput);\r\n this.onErrorPopoverDisabled($userFacingElement);\r\n }\r\n } as IClearErrorOptions);\r\n\r\n return true;\r\n }\r\n\r\n private onErrorPopoverDisabled($field: JQuery): void {\r\n $field.removeClass(FormValidation.validationClass);\r\n }\r\n\r\n private resolveContext($error: JQuery) {\r\n let $form = $error.closest('form');\r\n\r\n return $form.length > 0 ? $form\r\n : $(document);\r\n }\r\n}","import $ from 'jquery';\r\nimport { ErrorPopover, IClearErrorOptions, IClearErrorWireup } from \"./errorpopover\";\r\nimport { IValidationHandler } from \"./formvalidation\"\r\n\r\nexport class AsyncFileValidationHandler implements IValidationHandler {\r\n handle($error: JQuery): boolean {\r\n let $asyncFileField = $error.closest('[data-file-field]');\r\n let isFileField = $asyncFileField.length > 0;\r\n if (!isFileField)\r\n return false;\r\n\r\n if ($asyncFileField.data('error-handled') == true)\r\n return true;\r\n\r\n let errorMessage = $error.html();\r\n let targetId = $error.data('for');\r\n let $context = this.resolveContext($error);\r\n let $targetInput = $context.find('#' + targetId);\r\n\r\n if ($targetInput.length == 0)\r\n return false;\r\n\r\n $asyncFileField.data('error-handled', true);\r\n $error.remove();\r\n\r\n new ErrorPopover().append($targetInput, targetId, errorMessage, null, {\r\n clearErrorWireups: [\r\n { $targetInput: $targetInput, triggerEvents: 'fileadded' },\r\n ]\r\n } as IClearErrorOptions);\r\n\r\n return true;\r\n }\r\n\r\n private resolveContext($error: JQuery) {\r\n let $form = $error.closest('form');\r\n\r\n return $form.length > 0 ? $form\r\n : $(document);\r\n }\r\n}","import $ from 'jquery';\r\nimport 'moment';\r\nimport { Patches } from './patches';\r\nimport { Polyfills } from './polyfills';\r\n\r\nimport { ActionResult } from './utilities/actionresult';\r\n\r\nimport { AddressLoader } from './modules/addressloader';\r\nimport { AgeField } from './modules/agefield';\r\nimport { AsyncFileField } from './modules/asyncfilefield';\r\nimport { BrowserHistory } from './modules/browserhistory';\r\nimport { DateField } from './modules/datefield';\r\nimport { DateRangeField } from './modules/daterangefield';\r\nimport { Drawer } from './modules/drawer';\r\nimport { DualListBox } from './modules/duallistbox';\r\nimport { EditorTable } from './modules/editortable/editortable';\r\nimport { FileDragOut } from './modules/filedragout';\r\nimport { FileInput } from './modules/fileinput';\r\nimport { FilterItems } from './modules/filteritems';\r\nimport { ItemList } from './modules/itemlist';\r\nimport { JsonBuilder } from './modules/editortable/jsonbuilder';\r\nimport { Modal } from './modules/modal';\r\nimport './modules/multiselectcontextmenuitem';\r\nimport { MultiSelectDropdown } from './modules/multiselectdropdown';\r\nimport { MultiSelectTable } from './modules/multiselecttable';\r\nimport { PhotoViewer } from './modules/photoviewer';\r\nimport { PopOver } from './modules/popover';\r\nimport { RealTimeValidation } from './modules/realtimevalidation';\r\nimport { Remote } from './modules/remote/remote';\r\nimport { RemotePopOver } from './modules/remotepopover';\r\nimport { RichText } from './modules/richtext';\r\nimport { SearchField } from './modules/searchfield';\r\nimport { SuggestSearch } from './modules/suggestsearch';\r\nimport { Tabs } from './modules/tabs';\r\nimport { ThumbnailDownloader } from './modules/thumbnaildownloader';\r\nimport { ThumbnailUpload } from './modules/thumbnailupload';\r\nimport { ToggleState } from './modules/togglestate';\r\nimport { TreeInput } from './modules/treefield/treeinput';\r\nimport { Validation } from './modules/editortable/validation';\r\n\r\nimport { AutoHeightTable } from './utilities/autoheighttable';\r\nimport { AutoRequest } from './utilities/autorequest';\r\nimport { Autosave } from './utilities/autosave';\r\nimport { CheckboxValidationHandler } from './utilities/formvalidation/checkboxvalidationhandler';\r\nimport { DateExpression } from './utilities/dateexpression';\r\nimport { DocumentViewer } from './utilities/documentviewer';\r\nimport { ErrorPopover } from './utilities/formvalidation/errorpopover';\r\nimport { EventListener } from './utilities/eventlistener';\r\nimport { EventNotifier } from './utilities/eventnotifier';\r\nimport { FieldValidationHandler } from './utilities/formvalidation/fieldvalidationhandler';\r\nimport { FormValidation } from './utilities/formvalidation/formvalidation';\r\nimport { HandlesWindowNavigation } from './utilities/handleswindownavigation';\r\nimport { HasChanges } from './utilities/haschanges';\r\nimport { KeyboardScrollable } from './utilities/keyboardscrollable';\r\nimport { MathExpressions } from './utilities/mathexpressions';\r\nimport { MultiSelectDropdownValidationHandler } from './utilities/formvalidation/multiselectdropdownvalidationhandler';\r\nimport { NameValidationHandler } from './utilities/formvalidation/namevalidationhandler'\r\nimport { Navigate } from './utilities/navigate';\r\nimport { PersonName } from './utilities/personname';\r\nimport { PhoneValidationHandler } from './utilities/formvalidation/phonevalidationhandler';\r\nimport { PrintPreview } from './utilities/printpreview';\r\nimport { RadioValidationHandler } from './utilities/formvalidation/radiovalidationhandler';\r\nimport { ReadonlyIf } from './utilities/readonlyif';\r\nimport { ScrollTo } from './utilities/scrollto';\r\nimport { ShowIf } from './utilities/showif';\r\nimport { ToggleValue } from './utilities/togglevalue';\r\nimport { TransformTextToLink } from './utilities/transformtexttolink';\r\nimport { ValueBinding } from './utilities/valuebinding';\r\nimport './utilities/visibility';\r\n\r\nimport Application from './application';\r\nimport KeyboardFocusBounds from './utilities/keyboardfocusbounds';\r\nimport DragAndDropUpload from './modules/draganddropupload';\r\nimport { DropdownValidationHandler } from './utilities/formvalidation/dropdownvalidationhandler';\r\nimport { DateRangeValidationHandler } from './utilities/formvalidation/daterangevalidationhandler';\r\nimport { AsyncFileValidationHandler } from './utilities/formvalidation/asyncfilevalidationhandler';\r\nimport { ElementPosition } from './utilities/elementposition';\r\n\r\nexport class Wireup {\r\n\r\n constructor() {\r\n this.registerDefaults();\r\n }\r\n\r\n push(selector, wireup) {\r\n Application.convention(selector, wireup);\r\n }\r\n\r\n execute() {\r\n\r\n console.log('rustig initializing');\r\n\r\n Polyfills.Execute();\r\n Patches.Execute();\r\n\r\n window.Rustig = {\r\n ActionResult: ActionResult,\r\n Modal: Modal,\r\n PersonName: PersonName,\r\n ThumbnailDownloader: ThumbnailDownloader,\r\n AddressLoader: AddressLoader,\r\n AsyncFileField: AsyncFileField,\r\n ElementPosition: ElementPosition\r\n };\r\n //hack for editortable, fix this\r\n window.JsonBuilder = JsonBuilder;\r\n window.isWindowUnloading = false;\r\n window.onbeforeunload = function () {\r\n window.isWindowUnloading = true;\r\n };\r\n Application.conventionsReady = false;\r\n\r\n let defaults = {};\r\n window.RUSTIG_OPTIONS = $.extend({}, defaults, window.RUSTIG_OPTIONS);\r\n window.Application = Application;\r\n\r\n Application.wireupConventions(document);\r\n Application.triggerConventionsReady();\r\n\r\n }\r\n\r\n private registerDefaults() {\r\n // Don't click the first button in a form when hitting the enter key\r\n $(document).on('keypress.rustig', 'form:not([data-allow-enter]) input[type!=submit], form:not([data-allow-enter]) select', function (event) {\r\n return event.keyCode != 13;\r\n });\r\n\r\n $(document).on('formvalidationhandled.rustig.formvalidation', Tabs.applyErrors);\r\n\r\n FormValidation.registerHandler(\r\n new PhoneValidationHandler(),\r\n new NameValidationHandler(),\r\n new RadioValidationHandler(),\r\n new CheckboxValidationHandler(),\r\n new DropdownValidationHandler(),\r\n new DateRangeValidationHandler(),\r\n new AsyncFileValidationHandler(),\r\n new FieldValidationHandler(),\r\n new MultiSelectDropdownValidationHandler()\r\n );\r\n\r\n\r\n Application.convention('[disabled]', $.fn.disable);\r\n Application.convention('.name-field', $.fn.nameField);\r\n Application.convention('.phone-field', $.fn.phoneField);\r\n Application.convention('.money-field', $.fn.moneyField);\r\n Application.convention('.number-field', $.fn.numberField);\r\n Application.convention('.percent-field', $.fn.percentField);\r\n Application.convention('select:not(\"[data-et-vanilla-select]\")', $.fn.dropDown);\r\n Application.convention(SearchField.wireup, $.fn.searchField);\r\n Application.convention(RichText.wireup, $.fn.richtext);\r\n Application.convention('[data-error-message]', $.fn.errorMessage);\r\n Application.convention(PopOver.wireup, $.fn.popover);\r\n Application.convention(RemotePopOver.wireup, $.fn.remotePopover);\r\n Application.convention(Tabs.wireup, $.fn.tabs);\r\n Application.convention('[data-nav]', $.fn.nav);\r\n Application.convention(DateField.wireup, $.fn.datefield);\r\n Application.convention(MultiSelectTable.wireup, $.fn.multiselecttable);\r\n Application.convention(EditorTable.wireup, $.fn.editortable);\r\n Application.convention(FileInput.wireup, $.fn.fileinput);\r\n Application.convention(FileDragOut.wireup, $.fn.filedragout);\r\n Application.convention(Remote.triggerWireup, Remote.wireupTriggers);\r\n Application.convention(ValueBinding.wireup, $.fn.valuebinding);\r\n Application.convention(Validation.wireup, $.fn.editortable_validation);\r\n Application.convention('.field-validation-error', () => FormValidation.handleErrors());\r\n Application.convention(DocumentViewer.wireup, $.fn.documentviewer);\r\n Application.convention(ThumbnailUpload.wireup, $.fn.thumbnailupload);\r\n Application.convention(SuggestSearch.wireup, $.fn.suggestsearch);\r\n Application.convention(ToggleState.wireup, $.fn.togglestate);\r\n Application.convention(Drawer.wireup, $.fn.drawer);\r\n Application.convention(KeyboardScrollable.wireup, $.fn.keyboardscrollable);\r\n Application.convention(BrowserHistory.wireup, BrowserHistory.createHistory);\r\n Application.convention(Navigate.wireup, $.fn.navigate);\r\n Application.convention(PhotoViewer.wireup, $.fn.photoviewer);\r\n Application.convention(RealTimeValidation.wireup, $.fn.realtimevalidation);\r\n Application.convention(EventListener.wireup, $.fn.eventlistener);\r\n Application.convention(EventNotifier.wireup, $.fn.eventnotifier);\r\n Application.convention(Autosave.wireup, $.fn.autosave);\r\n Application.convention(TransformTextToLink.wireup, $.fn.transformtexttolink);\r\n Application.convention(ThumbnailDownloader.wireup, $.fn.thumbnaildownloader);\r\n Application.convention(TreeInput.wireup, $.fn.treeinput);\r\n Application.convention('.dropdowntree-field', $.fn.dropdowntree);\r\n Application.convention(AutoRequest.wireup, $.fn.autorequest);\r\n Application.convention(AsyncFileField.wireup, $.fn.asyncfilefield);\r\n Application.convention('[data-multiselect-checkbox]:not([data-multiselect-selector])', $.fn.multiselecttablerow);\r\n Application.convention(ScrollTo.wireup, $.fn.scrollto);\r\n Application.convention(FilterItems.wireup, $.fn.filteritems);\r\n Application.convention(MultiSelectDropdown.wireup, $.fn.multiselectdropdown);\r\n Application.convention(DateRangeField.wireup, function () {\r\n $(this).each(function () {\r\n DateRangeField.load(this);\r\n });\r\n });\r\n Application.convention(DragAndDropUpload.wireup, function () {\r\n $(this).each(function () {\r\n DragAndDropUpload.load(this);\r\n });\r\n });\r\n Application.convention(DateExpression.wireup, $.fn.dateexpression);\r\n Application.convention(DualListBox.wireup, $.fn.duallistbox);\r\n Application.convention(AutoHeightTable.wireup, $.fn.autoheighttable);\r\n\r\n AgeField.wireupDocument();\r\n AddressLoader.wireupDocument();\r\n ItemList.wireupDocument();\r\n Remote.wireupDocument();\r\n Modal.initialize();\r\n ToggleValue.wireupDocument();\r\n ReadonlyIf.wireupDocument();\r\n ShowIf.wireupDocument();\r\n KeyboardFocusBounds.wireupDocument();\r\n DragAndDropUpload.wireupDocument();\r\n MathExpressions.wireup();\r\n PrintPreview.wireup();\r\n HasChanges.wireup();\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport { ThumbnailUpload, IThumbnailUploadOptions, IUploadCompleteResponse} from \"./thumbnailupload\"\r\nimport Modal from \"./modal\";\r\nimport Ajax from \"./remote/ajax\";\r\nimport Url from \"../utilities/url\";\r\nimport FileSize from \"../utilities/filesize\";\r\nimport BuildsExtensionIcon from \"../utilities/buildsextensionicon\";\r\nimport \"../utilities/disable\";\r\nimport \"../utilities/readonly\"\r\nimport { FileName } from '../../../rustig';\r\n\r\ndeclare global {\r\n interface JQuery {\r\n asyncfilefield(option, args): any;\r\n }\r\n}\r\n\r\nexport class AsyncFileField {\r\n public static get wireup(): string { return '[data-file-field]'; }\r\n\r\n private $element: JQuery;\r\n private options: IAsyncFileFieldOptions;\r\n\r\n private $fileChooser: JQuery;\r\n private $previewContainer: JQuery;\r\n\r\n private $hiddenId: JQuery;\r\n private $hiddenFilename: JQuery;\r\n private $hiddenLength: JQuery;\r\n\r\n private fileBeingUploaded: File;\r\n private state: string;\r\n private uploader: ThumbnailUpload;\r\n\r\n private onValidationComplete: any;\r\n private static get preUploadInvalidFileMessage(): string { return 'invalid-file'; }\r\n private static get cannotUploadAnymoreFiles(): string { return 'You can not upload any more files.'; }\r\n\r\n public get $userFacingElement(): JQuery { return this.$element; }\r\n public get $valueElement(): JQuery { return this.$hiddenId; }\r\n\r\n public constructor($element: JQuery, options?: IAsyncFileFieldOptions) {\r\n if (!$element || $element.length != 1)\r\n throw new Error('You must provide a single element to Rustig.AsyncFileField');\r\n this.$element = $element;\r\n\r\n this.options = $.extend({}, this.$element.data(), options);\r\n this.initializeElements();\r\n this.setOnClickListeners();\r\n this.initializeDocumentUploader();\r\n this.setState();\r\n }\r\n\r\n public addFile(file: File): void {\r\n if (!file)\r\n throw new Error('file cannot be null');\r\n if (this.state !== 'beforeupload')\r\n throw new Error('Cannot upload file');\r\n\r\n this.uploader.addFile(file);\r\n }\r\n\r\n public value(value?: any): any | void {\r\n if (value !== undefined && value.id) {\r\n this.setValue(value);\r\n this.reload();\r\n }\r\n else\r\n return this.getValue();\r\n }\r\n\r\n public text(text?: any): any | void {\r\n if (text !== undefined) {\r\n this.$hiddenFilename.val(text);\r\n this.reload();\r\n }\r\n else {\r\n let fileName = this.$userFacingElement.find('tu-name'.asDataSelector()).text();\r\n if (!fileName)\r\n return null;\r\n\r\n return new FileName(fileName).withoutExtension();\r\n }\r\n }\r\n\r\n public name(): string {\r\n return this.$hiddenId.attr('name');\r\n }\r\n\r\n private reload(): void {\r\n if (this.state === 'uploading')\r\n this.cancelUploadInProgress();\r\n else if (this.state === 'uploadcomplete')\r\n this.clearInput();\r\n\r\n this.setUploadCompleteState();\r\n }\r\n\r\n private getValue(): FileInputs {\r\n return {\r\n id: this.$hiddenId.val() as number,\r\n filename: this.$hiddenFilename.val() as string,\r\n length: this.$hiddenLength.val() as number\r\n };\r\n }\r\n\r\n private setValue(value: any): void {\r\n if (value[\"id\"])\r\n this.$hiddenId.val(value[\"id\"])\r\n if (value[\"filename\"])\r\n this.$hiddenFilename.val(value[\"filename\"])\r\n if (value[\"length\"])\r\n this.$hiddenLength.val(value[\"length\"])\r\n }\r\n\r\n private initializeElements(): void {\r\n this.$fileChooser = this.$element.find('[data-ff-file-chooser]');\r\n this.$previewContainer = this.$element.find('[data-ff-preview]');\r\n this.$hiddenId = this.$element.find('[data-ff-id]');\r\n this.$hiddenFilename = this.$element.find('[data-ff-filename]');\r\n this.$hiddenLength = this.$element.find('[data-ff-length]');\r\n }\r\n\r\n private initializeDocumentUploader(): void {\r\n let id = this.options.uniqueId || Math.floor(Math.random() * 100000);\r\n this.$element.attr('data-ff-uploader-id', id);\r\n\r\n this.uploader = new ThumbnailUpload({\r\n $dropzone: this.$fileChooser,\r\n $previewContainer: this.$previewContainer,\r\n uniqueId: id,\r\n onFileAdded: this.onFileAdded.bind(this),\r\n onUploadComplete: this.onUploadComplete.bind(this),\r\n onError: this.onError.bind(this),\r\n accept: this.$fileChooser.is('[data-ff-preupload-url]') ? this.preUpload.bind(this) : null\r\n });\r\n\r\n if (this.options.dropElementSelector) {\r\n this.uploader.addElementAsDragAndDropArea($(this.options.dropElementSelector)[0]);\r\n }\r\n\r\n var value = this.getValue();\r\n if (value.id) {\r\n let file = new File([\"temp\"], value.filename, null);\r\n this.uploader.initFile(file);\r\n }\r\n }\r\n\r\n private preUpload(file: File, onValidationComplete: any): void {\r\n this.onValidationComplete = onValidationComplete;\r\n\r\n Ajax.execute({\r\n url: new Url(this.$fileChooser.data('ff-preupload-url'))\r\n .setQueryParameter('uploaderId', this.$element.data('ff-uploader-id'))\r\n .setQueryParameter('fileSize', file.size.toString())\r\n .setQueryParameter('fileName', file.name)\r\n .toUrl(),\r\n error: (jqXHR, textStatus, errorThrown) => {\r\n onValidationComplete(AsyncFileField.preUploadInvalidFileMessage);\r\n if (!window.isWindowUnloading) {\r\n if (jqXHR.status == 0)\r\n Modal.openDisconnectModal();\r\n else\r\n Modal.openErrorModal(jqXHR.responseText);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static preUploadComplete(data: IPreUploadResult): void {\r\n var asyncFileField = $(('ff-uploader-id').asDataSelector(data.id)).data('rustig.asyncfilefield');\r\n if (data.fileIsValid) {\r\n asyncFileField.onValidationComplete();\r\n asyncFileField.$element.trigger('preuploaded');\r\n }\r\n else\r\n asyncFileField.onValidationComplete(AsyncFileField.preUploadInvalidFileMessage); // triggers an error\r\n }\r\n\r\n private setOnClickListeners(): void {\r\n this.$element.on('click.rustig.filefield', '[data-ff-cancel]', this.onCancel.bind(this));\r\n if (this.options.cancelsKey)\r\n $(document).on('click.rustig.filefield', '[data-ff-cancel-' + this.options.cancelsKey + ']', this.onCancel.bind(this));\r\n\r\n this.$fileChooser.on('click.rustig.filefield', function (e: Event) {\r\n if (this.$element.isReadonly() || this.$element.isDisabled())\r\n e.stopImmediatePropagation();\r\n }.bind(this));\r\n }\r\n\r\n private setState(): void {\r\n if (this.$hiddenId.val()) {\r\n this.setUploadCompleteState();\r\n }\r\n else if (this.uploader.getUploadingFiles().length) {\r\n this.$element.addClass('ff-uploading');\r\n this.state = 'uploading';\r\n this.fileBeingUploaded = this.uploader.getUploadingFiles()[0];\r\n }\r\n else {\r\n this.state = 'beforeupload';\r\n }\r\n }\r\n\r\n private setUploadCompleteState(): void {\r\n this.$element.addClass('ff-upload-complete');\r\n this.state = 'uploadcomplete';\r\n this.createThumbnail();\r\n this.fileBeingUploaded = this.uploader.getAllFiles()[0];\r\n }\r\n\r\n private createThumbnail(): void {\r\n let $thumbnail = this.$element.find('[data-tu-preview-template]').children().first().clone().appendTo(this.$previewContainer);\r\n\r\n let filename = this.$hiddenFilename.val() as string;\r\n let filesize = Number(this.$hiddenLength.val());\r\n $thumbnail.find('[data-tu-name]').attr('title', filename).html(filename);\r\n $thumbnail.find('[data-ff-filetype]').addClass(new BuildsExtensionIcon().execute(filename));\r\n $thumbnail.find('[data-ff-filesize]').html(new FileSize(filesize).toString());\r\n }\r\n\r\n private onCancel(): void {\r\n if (this.$element.isReadonly() || this.$element.isDisabled())\r\n return;\r\n\r\n if (this.state === 'uploading')\r\n this.cancelUploadInProgress();\r\n else if (this.state === 'uploadcomplete')\r\n this.cancelCompletedUpload();\r\n\r\n this.$element.trigger('fileremoved');\r\n }\r\n\r\n private cancelUploadInProgress(): void {\r\n this.$element.removeClass('ff-uploading');\r\n this.state = 'beforeupload';\r\n this.enableLinkedElements();\r\n this.uploader.removeFile(this.fileBeingUploaded);\r\n }\r\n\r\n private cancelCompletedUpload(): void {\r\n Ajax.execute({\r\n url: this.buildsRemoveUrl(),\r\n type: 'post',\r\n success: () => {\r\n this.uploader.removeFile(this.fileBeingUploaded);\r\n this.clearInput();\r\n }\r\n });\r\n }\r\n\r\n private clearInput(): void {\r\n this.state = 'beforeupload';\r\n this.$previewContainer.html('');\r\n this.$element.removeClass('ff-upload-complete');\r\n this.$hiddenId.val(null);\r\n this.$hiddenFilename.val(null);\r\n this.$hiddenLength.val(null);\r\n }\r\n\r\n private buildsRemoveUrl(): string {\r\n let url = this.$fileChooser.data('tu-remove-url');\r\n let serverId = this.$hiddenId.val() as string;\r\n\r\n return new Url(url)\r\n .setQueryParameter('serverId', serverId)\r\n .toUrl();\r\n }\r\n\r\n private onFileAdded(file: File): void {\r\n this.$element.addClass('ff-uploading');\r\n this.state = 'uploading';\r\n this.fileBeingUploaded = file;\r\n\r\n this.disableLinkedElements();\r\n\r\n let $thumbnail = $(file.previewElement);\r\n $thumbnail.find('[data-ff-filetype]').addClass(new BuildsExtensionIcon().execute(file.name));\r\n $thumbnail.find('[data-ff-filesize]').html(new FileSize(file.size).toString());\r\n this.$element.trigger('fileadded');\r\n }\r\n\r\n private onUploadComplete(file: File, responseText: IUploadCompleteResponse[], xhr: JQueryXHR): void {\r\n if (!responseText || !responseText.length || responseText[0].errorText)\r\n return;\r\n\r\n this.$element.removeClass('ff-uploading').addClass('ff-upload-complete');\r\n this.state = 'uploadcomplete';\r\n\r\n let serverId = $(this.fileBeingUploaded.previewElement).data('server-id');\r\n this.$hiddenId.val(serverId);\r\n this.$hiddenFilename.val(this.fileBeingUploaded.name);\r\n this.$hiddenLength.val(this.fileBeingUploaded.size);\r\n\r\n this.enableLinkedElements();\r\n }\r\n\r\n private enableLinkedElements(): void {\r\n if (!this.options.disablesKey)\r\n return;\r\n\r\n $('[data-ff-toggle-enabled-' + this.options.disablesKey + ']').each(function () {\r\n let $element = $(this);\r\n let numberOfFilesUploading = $element.data('async-file-field-uploading-count') - 1;\r\n $element.data('async-file-field-uploading-count', numberOfFilesUploading);\r\n if (numberOfFilesUploading == 0)\r\n $element.enable();\r\n });\r\n }\r\n\r\n private disableLinkedElements(): void {\r\n if (!this.options.disablesKey)\r\n return;\r\n\r\n $('[data-ff-toggle-enabled-' + this.options.disablesKey + ']').each(function () {\r\n let $element = $(this);\r\n let numberOfFilesUploading = $element.data('async-file-field-uploading-count') || 0;\r\n $element.data('async-file-field-uploading-count', numberOfFilesUploading + 1)\r\n .disable();\r\n });\r\n }\r\n\r\n private onError(file: File, errorMessage: string, xhr: JQueryXHR): void {\r\n if (errorMessage !== AsyncFileField.preUploadInvalidFileMessage)\r\n Modal.openErrorModal(errorMessage);\r\n\r\n if (errorMessage === AsyncFileField.cannotUploadAnymoreFiles) {\r\n this.$previewContainer.find('.dz-error').remove();\r\n this.state = 'uploadcomplete';\r\n this.fileBeingUploaded = this.uploader.getAllFiles()[0];\r\n }\r\n else {\r\n this.state = 'beforeupload'; \r\n this.$previewContainer.html('');\r\n }\r\n\r\n this.$element.removeClass('ff-uploading');\r\n this.enableLinkedElements();\r\n this.uploader.removeFile(file);\r\n this.$element.trigger('fileremoved');\r\n }\r\n\r\n\r\n}\r\n\r\ninterface FileInputs {\r\n id?: number;\r\n filename?: string;\r\n length?: number;\r\n}\r\n\r\nexport interface IPreUploadResult {\r\n id: number;\r\n fileIsValid: boolean;\r\n}\r\n\r\nexport interface IAsyncFileFieldOptions {\r\n disablesKey?: string;\r\n cancelsKey?: string;\r\n uniqueId?: number;\r\n dropElementSelector?: string;\r\n}\r\n\r\nfunction Plugin(option, args) {\r\n return this.each(function () {\r\n var $this = $(this);\r\n var data = $this.data('rustig.asyncfilefield');\r\n var options = typeof option == 'object' && option;\r\n\r\n if (!data) {\r\n data = new AsyncFileField($this, options);\r\n $this.data('rustig.asyncfilefield', data);\r\n }\r\n if (typeof option == 'string')\r\n data[option](args);\r\n });\r\n}\r\n\r\n$.fn.asyncfilefield = Plugin;\r\n\r\nexport default AsyncFileField;\r\n","/**@license\n * sysend.js - send messages between browser windows/tabs version 1.3.3\n *\n * Copyright (C) 2014-2018 Jakub Jankiewicz \n * Released under the MIT license\n *\n * The idea for localStorage implementation came from this StackOverflow question:\n * http://stackoverflow.com/q/24182409/387194\n *\n */\n/* global define, module, exports, localStorage, setTimeout */\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(['sysend'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.sysend = factory();\n }\n})(typeof window !== \"undefined\" ? window : this, function() {\n // we use prefix so `foo' event don't collide with `foo' locaStorage value\n var uniq_prefix = '___sysend___';\n var random_value = Math.random();\n // we use id because storage event is not executed if message was not\n // changed, and we want it if user send same object twice (before it will\n // be removed)\n var id = 0;\n // we need to clean up localStorage if broadcast on unload\n // because setTimeout will never fire, even setTimeout 0\n var re = new RegExp('^' + uniq_prefix);\n for(var key in localStorage) {\n if (key.match(re)) {\n localStorage.removeItem(key);\n }\n }\n function get(key) {\n return localStorage.getItem(uniq_prefix + key);\n }\n function set(key, value) {\n // storage event is not fired when value is set first time\n if (id == 0) {\n localStorage.setItem(uniq_prefix + key, random_value);\n }\n localStorage.setItem(uniq_prefix + key, value);\n }\n function remove(key) {\n localStorage.removeItem(uniq_prefix + key);\n }\n function to_json(input) {\n // save random_value in storage to fix issue in IE that storage event\n // is fired on same page where setItem was called\n var obj = [id++, random_value];\n // undefined in array get stringified as null\n if (typeof input != 'undefined') {\n obj.push(input);\n }\n return JSON.stringify(obj);\n }\n function from_json(json) {\n return JSON.parse(json);\n }\n var host = (function() {\n var a = document.createElement('a');\n return function(url) {\n a.href = url;\n return a.host;\n };\n })();\n function send_to_iframes(key, data) {\n // propagate events to iframes\n iframes.forEach(function(iframe) {\n var payload = {\n name: uniq_prefix,\n key: key,\n data: data\n };\n iframe.window.postMessage(JSON.stringify(payload), \"*\");\n });\n }\n // object with user events as keys and values arrays of callback functions\n var callbacks = {};\n var iframes = [];\n var index = 0;\n var channel;\n if (typeof window.BroadcastChannel === 'function') {\n channel = new window.BroadcastChannel(uniq_prefix);\n channel.addEventListener('message', function(event) {\n if (event.target.name === uniq_prefix) {\n var key = event.data && event.data.name;\n if (callbacks[key]) {\n callbacks[key].forEach(function(fn) {\n fn(event.data.data, key);\n });\n }\n }\n });\n } else {\n window.addEventListener('storage', function(e) {\n // prevent event to be executed on remove in IE\n if (e.key.match(re) && index++ % 2 === 0) {\n var key = e.key.replace(re, '');\n if (callbacks[key]) {\n var value = e.newValue || get(key);\n if (value && value != random_value) {\n var obj = JSON.parse(value);\n if (obj && obj[1] != random_value) {\n // don't call on remove\n callbacks[key].forEach(function(fn) {\n fn(obj[2], key);\n });\n }\n }\n }\n }\n }, false);\n }\n // ref: https://stackoverflow.com/a/326076/387194\n function is_iframe() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n }\n if (is_iframe()) {\n window.addEventListener('message', function(e) {\n var payload = JSON.parse(e.data);\n if (payload.name === uniq_prefix) {\n sysend.broadcast(payload.key, payload.data);\n }\n });\n }\n return {\n broadcast: function(event, message) {\n if (channel) {\n channel.postMessage({name: event, data: message});\n } else {\n set(event, to_json(message));\n // clean up localstorage\n setTimeout(function() {\n remove(event);\n }, 0);\n }\n send_to_iframes(event, message);\n },\n proxy: function(url) {\n if (typeof url === 'string' && host(url) !== window.location.host) {\n var iframe = document.createElement('iframe');\n iframe.style.width = iframe.style.height = 0;\n iframe.style.border = 'none';\n var proxy_url = url;\n if (!url.match(/\\.html$/)) {\n proxy_url = url.replace(/\\/$/, '') + '/proxy.html';\n }\n iframe.addEventListener('error', function handler() {\n setTimeout(function() {\n throw new Error('html proxy file not found on \"' + url + '\" url');\n }, 0);\n iframe.removeEventListener('error', handler);\n });\n iframe.addEventListener('load', function handler() {\n var win;\n try {\n win = iframe.contentWindow;\n } catch(e) {\n win = iframe.contentWindow;\n }\n iframes.push({window: win, node: iframe});\n iframe.removeEventListener('load', handler);\n });\n document.body.appendChild(iframe);\n iframe.src = proxy_url;\n }\n },\n on: function(event, fn) {\n if (!callbacks[event]) {\n callbacks[event] = [];\n }\n callbacks[event].push(fn);\n },\n off: function(event, fn) {\n if (callbacks[event]) {\n if (fn) {\n for (var i=callbacks[event].length; i--;) {\n if (callbacks[event][i] == fn) {\n callbacks[event].splice(i, 1);\n }\n }\n } else {\n callbacks[event] = [];\n }\n }\n }\n };\n});\n"],"names":["___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","module","exports","globalThis","g","this","Function","e","window","self","root","factory","_typeof","Symbol","iterator","obj","constructor","TIME_FORMATS","name","value","LABELS_FOR_POWERS_OF_KILO","P","Math","pow","T","G","M","exists","maybe","isNaN","isFiniteNumber","isFinite","parseFloat","isArray","Object","prototype","toString","call","Humanize","intword","number","charWidth","decimals","arguments","length","undefined","compactInteger","input","max","parseInt","signString","unsignedNumber","abs","unsignedNumberString","String","numberLength","numberLengths","bigNumPrefixes","toExponential","replace","i","_length","decimalIndex","unsignedNumberCharacterArray","split","wholePartArray","slice","decimalPartArray","wholePart","join","decimalPart","Array","indexOf","Number","toFixed","intComma","formatNumber","intcomma","apply","fileSize","filesize","precision","label","hasOwnProperty","minnum","pluralize","_thousand","_position","thousand","decimal","usePrecision","normalizePrecision","negative","base","mod","substr","_number","commas","_decimal","power","round","ordinal","end","times","overrides","smallTimes","singular","plural","truncate","str","ending","substring","truncateWords","string","array","result","truncatewords","boundedNumber","num","bound","truncatenumber","oxford","items","limit","limitStr","numItems","limitIndex","extra","dictionary","object","joiner","separator","defs","key","val","push","frequency","list","verb","len","pace","intervalMs","unit","prefix","timeUnit","relativePace","rate","f","roundedPace","nl2br","replacement","br2nl","capitalize","downCaseTail","charAt","toUpperCase","toLowerCase","capitalizeAll","a","titleCase","smallWords","internalCaps","splitOnWhiteSpaceRegex","splitOnHyphensRegex","_doTitleCase","_string","hyphenated","firstOrLast","titleCasedArray","stringArray","index","word","test","titlecase","moment","defineLocale","months","monthsShort","weekdays","weekdaysShort","weekdaysMin","meridiemParse","isPM","meridiem","hours","minutes","isLower","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","s","m","mm","h","hh","d","dd","MM","y","yy","ordinalParse","week","dow","doy","symbolMap","numberMap","hour","minute","preparse","match","postformat","pluralForm","n","plurals","u","withoutSuffix","isFuture","suffixes","relativeTimeWithPlural","forms","format","month","day","period","lastDigit","last2Digits","relativeTimeWithMutation","text","mutationTable","softMutation","mutation","lastNumber","translate","output","monthsParse","_monthsParse","RegExp","exec","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","mom","_calendarEl","b","monthsShortDot","l","ll","lll","llll","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","meridiemHour","weekEndings","ss","token","isUpper","eifelerRegelAppliesToNumber","units","weekDays","translateSingular","special","nominative","weekDay","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","monthsNominative","monthsSubjective","now","trim","processHoursFunction","hm","startOfWeek","startOf","unix","hookCallback","utils_hooks__hooks","isDate","Date","hasOwnProp","extend","valueOf","create_utc__createUTC","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","valid__isValid","_isValid","flags","_d","getTime","invalidWeekday","_strict","bigHour","valid__createInvalid","NaN","momentProperties","copyConfig","to","from","prop","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","config","updateOffset","isMoment","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","compareArrays","array1","array2","dontConvert","min","lengthDiff","diffs","Locale","globalLocale","locales","normalizeLocale","loadLocale","oldLocale","_abbr","locale_locales__getSetGlobalLocale","values","data","locale_locales__getLocale","abbr","set","names","j","next","chooseLocale","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","makeGetSet","keepTime","get_set__set","get_set__get","getSet","zeroFill","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","callback","func","localeData","formatMoment","isValid","expandFormat","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","lastIndex","match1","match2","match3","match4","match6","match1to2","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchWord","regexes","addRegexToken","regex","strictRegex","sth","isStrict","getParseRegexForToken","matched","p1","p2","p3","p4","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","daysInMonth","year","UTC","getUTCDate","defaultLocaleMonths","defaultLocaleMonthsShort","setMonth","dayOfMonth","date","getSetMonth","checkOverflow","_overflowDayOfYear","warn","msg","suppressDeprecationWarnings","console","deprecate","fn","firstTime","Error","stack","deprecations","from_string__isoRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","configFromStringAndFormat","createDate","ms","setFullYear","createUTCDate","setUTCFullYear","daysInYear","isLeapYear","createFromInputFallback","_useUTC","parseTwoDigitYear","getSetYear","weekOfYear","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","local__createLocal","add","dayOfYear","defaults","c","configFromArray","currentDate","yearToUse","getUTCFullYear","getUTCMonth","getFullYear","getMonth","getDate","currentDateArray","w","weekYear","weekday","temp","GG","W","E","_week","gg","week1Jan","getUTCDay","dayOfYearFromWeeks","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","setUTCMinutes","getUTCMinutes","ISO_8601","parsedInput","skipped","stringLength","totalParsedInputLength","isPm","meridiemFixWrap","_meridiem","prepareConfig","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","configFromString","arr","res","map","second","millisecond","configFromObject","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","Duration","duration","years","quarters","quarter","weeks","days","seconds","milliseconds","_milliseconds","_days","_months","_data","_bubble","isDuration","offset","utcOffset","sign","offsetFromString","chunkOffset","matches","parts","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","create__isoRegex","create__createDuration","ret","diffRes","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","tmp","deprecateSimple","add_subtract__addSubtract","isAdding","add_subtract__add","add_subtract__subtract","moment_format__toISOString","toISOString","toDate","newLocaleData","defaultFormat","lang","addWeekYearFormatToken","getter","weeksInYear","isoWeekYear","_ordinalParse","_ordinalParseLenient","getSetDayOfMonth","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","lowercase","matchMeridiem","_meridiemParse","_isPm","getSetHour","getSetMinute","getSetSecond","parseMs","getSetMillisecond","momentPrototype__proto","time","formats","sod","asFloat","delta","wholeMonthDiff","anchor","that","zoneDelta","endOf","subtract","inputString","humanize","fromNow","toNow","get","invalidAt","inputMs","isBetween","isSame","parsingFlags","isoWeekday","toArray","toObject","toJSON","isoWeek","isoWeeks","weekInfo","isoWeeksInYear","getDay","parseWeekday","keepLocalTime","localAdjust","_changeInProgress","parseZone","hasAlignedHourOffset","isDST","isDSTShifted","_isDSTShifted","isLocal","isUtcOffset","zoneAbbr","zoneName","dates","zone","momentPrototype","preParsePostFormat","prototype__proto","lists__get","field","setter","count","out","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","_relativeTime","pastFuture","source","_monthsShort","monthName","_longMonthsParse","_shortMonthsParse","firstDayOfYear","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParse","langData","mathAbs","duration_add_subtract__addSubtract","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","makeGetter","thresholds","substituteTimeAgo","iso_string__abs","iso_string__toISOString","Y","D","total","duration_prototype__proto","monthsFromDays","withSuffix","posNegDuration","duration_humanize__relativeTime","toIsoString","version","invalid","relativeTimeThreshold","threshold","previousUnderscore","_","ArrayProto","ObjProto","FuncProto","nativeIsArray","nativeKeys","keys","nativeBind","bind","nativeCreate","create","Ctor","_wrapped","VERSION","optimizeCb","context","argCount","collection","accumulator","cb","identity","isFunction","isObject","matcher","property","iteratee","Infinity","createAssigner","keysFunc","undefinedOnly","baseCreate","MAX_ARRAY_INDEX","getLength","isArrayLike","createReduce","dir","memo","currentKey","each","forEach","collect","results","reduce","foldl","inject","reduceRight","foldr","find","detect","predicate","findIndex","findKey","filter","select","reject","negate","every","all","some","any","contains","includes","include","item","fromIndex","guard","invoke","method","args","isFunc","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","rand","shuffled","random","sample","sortBy","criteria","sort","left","right","group","behavior","groupBy","has","indexBy","countBy","size","partition","pass","fail","first","head","take","initial","last","rest","tail","drop","compact","flatten","shallow","startIndex","idx","isArguments","createPredicateIndexFinder","createIndexFinder","predicateFind","sortedIndex","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","findLastIndex","low","high","mid","lastIndexOf","range","start","stop","step","executeBound","sourceFunc","boundFunc","callingContext","TypeError","concat","partial","boundArgs","position","bindAll","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","before","once","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","proto","allKeys","mapObject","pairs","invert","functions","methods","extendOwn","assign","pick","oiteratee","omit","props","tap","interceptor","isMatch","eq","aStack","bStack","className","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isString","isElement","nodeType","type","Int8Array","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","accum","escapeMap","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","escape","unescape","fallback","idCounter","uniqueId","id","templateSettings","evaluate","interpolate","noMatch","escapes","escapeChar","template","settings","oldSettings","variable","render","argument","chain","instance","_chain","mixin","$element","dateFormatId","Configuration","hasPicker","validate","wireupEvents","applyInputMask","applyPicker","$button","hide","dateFormat","change","trigger","on","inputmask","inputMaskOptions","onInputFocus","datetimepicker","datePickerOptions","closest","DateField","pickerButtonSelector","onPickerButtonClicked","preventDefault","show","stopPropagation","stopImmediatePropagation","hasSupportedFormat","_dateFormat","findDateFormat","useCurrent","viewMode","pickerDateFormat","keyBinds","enter","inputMaskFormat","showMaskOnHover","clearIncomplete","yearrange","minyear","maxyear","supportedFormats","$","datefield","$this","jQuery","highlight","node","re","nodeName","document","createElement","capturePos","wordNode","splitText","wordClone","cloneNode","appendChild","parentNode","replaceChild","childNodes","tagName","unhighlight","element","parent","firstChild","normalize","caseSensitive","wordsOnly","wordsBoundary","grep","flag","pattern","wordsBoundaryStart","wordsBoundaryEnd","require$$0","MultiSelectDropdown","wireupDocument","filters","emptyFilter","cacheElements","handleReadonly","onSelectionChanged","findFromCheckbox","$checkbox","popoverId","showSelectedOnly","keywordSearch","$userFacingInput","is","$popoverTrigger","$realInput","onValueSet","$inputDisplay","attr","popover","$popover","$filterInput","$filterButton","$filterButtonIcon","$clearFilters","$itemsContainer","emptyText","isReadonly","openErrorPopover","closeErrorPopover","channel","focusKeywordFilter","removeClass","onFilterChanged","showOrHideItems","$filtered","$matched","Element","deselectAllItems","keyCode","KeyCode","Enter","$selectedItems","selections","el","$el","setRealInput","formatDisplay","$uncheckedMatchedItems","shouldShowUnchecked","styleFilterButton","$checkedCheckboxes","fromElements","x","suppressValueChange","$items","shouldShow","removeAttr","addClass","focus","errorPopover","open","close","selectedValues","$currentlySelected","$selectedItem","selectedCount","display","toggleClass","onItemChecked","multiselectdropdown","option","execute","event","action","HTMLElement","events","unshift","addedEvent","splice","hooks","createUTC","parsedDateParts","rfc2822","weekdayMismatch","parsedParts","isNowValid","isFrozen","createInvalid","fun","t","deprecationHandler","arg","mergeConfigs","parentConfig","childConfig","priorities","addUnitPriority","priority","match3to4","match5to6","matchShortOffset","regexEscape","WEEK","WEEKDAY","set$1","modMonth","o","monthsShortRegex","monthsRegex","MONTHS_IN_FORMAT","handleStrictParse","ii","llc","toLocaleLowerCase","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","firstWeekOffset","fwd","resYear","resDayOfYear","resWeek","weekOffset","weekOffsetNext","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","handleStrictParse$1","_shortWeekdaysParse","_minWeekdaysParse","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","kInput","pos","pos1","pos2","baseConfig","dayOfMonthOrdinalParse","localeFamilies","aliasedRequire","getSetGlobalLocale","getLocale","_config","parentLocale","_overflowWeeks","_overflowWeekday","expectedWeekday","nowValue","weekdayOverflow","createLocal","curWeek","extendedIsoRegex","basicIsoRegex","tzRegex","allowTime","timeFormat","tzFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","parsedArray","weekdayStr","checkWeekday","obsOffset","militaryOffset","numOffset","calculateOffset","RFC_2822","getOwnPropertyNames","k","isObjectEmpty","ordering","unitHasDecimal","isDurationValid","absRound","isoRegex","createDuration","addSubtract","monthDiff","defaultFormatUtc","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","_dayOfMonthOrdinalParse","_dayOfMonthOrdinalParseLenient","calendarFormat","localInput","inclusivity","isSameOrAfter","isSameOrBefore","prioritized","unitsObj","getPrioritizedUnits","keepOffset","inspect","suffix","creationData","parseIsoWeekday","keepMinutes","tZone","proto$1","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","shift","isFormat","_monthsParseExact","_weekdaysParseExact","_fullWeekdaysParse","addSubtract$1","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","proto$2","relativeTime$1","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","isNullOrWhitespace","toBoolean","StringExtensions","equals","date1","date2","addDays","addMonths","toFieldDateString","eventName","bubbles","cancelable","createEvent","initEvent","dispatchEvent","isVisible","offsetWidth","offsetHeight","getClientRects","asJsSelector","asDataSelector","sentenceCase","asAttrSelector","asData","copyFieldBooleanAttributes","$target","attributes","DateExtensions","HTMLElementExtensions","Node","NodeExtensions","toggleShow","condition","ToggleShow","style","originalDisplayValue","readonly","shouldClearValue","EditState","editable","isEditable","toggleReadonly","shouldClearValueOnReadonly","htmlElement","userFacingElement","setAttribute","removeAttribute","hasAttribute","dropDown","flyoutId","getAttribute","querySelector","DEFAULTS","daterangeKey","allowsEmpty","_valueElement","getOptionsFromElement","valueElement","_userFacingElement","setUpPopover","setUpUserFacingElement","SuppressesEvent","setValue","NullableDate","load","dateRangeElement","dateRangeField","DateRangeField","newValue","reset","textContent","Popover","onApply","addEventListener","isOpen","popovers","tryShowErrorPopover","types","Type","All","Today","Last30Days","Last6Months","ThisYear","LastYear","Is","Before","After","Between","dropdown","buildTypeDropdown","wireupEventListeners","onDateFieldChanged","gridUnit","classList","insertBefore","DropDown","flyout","onSelectChanged","canSwichTypeFromBetween","typeValue","update","build","dateRange","shouldShowStart","shouldShowEnd","today","hasValue","januaryFirst","decemberThirtyFirst","_value","ScrollTo","attribute","$container","isInView","scrollTop","top","container","elementRect","getBoundingClientRect","elementTop","elementBottom","height","parentRect","isElementTopBelowParentBottom","bottom","isElementBottomAboveParentTop","scrollto","$searchResults","$selectedResults","$selectedValuesCsv","$searchCount","$selectedCount","selectedItemHiddenInputNameValue","hasGroupItems","refreshSelections","onSelectRow","onRemoveRow","onSelectAll","onRemoveAll","$rows","selectRow","onValueChanged","$row","target","$selectedRow","removeRow","isValueSelected","findAndCloneResultRow","insertRowIntoSelectedItems","handleGroupItemSelectionIfNeeded","$searchResultsGrouping","findSearchResultsGrouping","$searchResultsGroupItem","$selectedResultsGroupItem","findSelectedResultsGrouping","remove","handleGroupItemRemovalIfNeeded","$removedRow","$selectedResultsGrouping","$searchResultRows","rowIsSelected","$groupItem","selectedValuesCsv","findSearchResultRow","appendTo","groupValue","selectedRowText","rows","append","currentRowText","insertAfter","duallistbox","DualListBox","_$element","getType","$userFacingElement","$valueElement","Input","Select","DisplayField","RadioGroup","Checkbox","File","DateRangeDateField","DateRange","MoneyField","GenericElement","addType","selector","$elements","currentValue","SelectSuggestSearch","PhoneField","NameField","AsyncField","msdropdown","wireup","DualListBoxElement","$root","_$userFacingElement","_$valueElement","allowsCustomInput","$option","$childElement","children","$text","$label","prepend","resetFileInput","siblings","$valueInput","$textInput","$value","datePicker","popoverContent","autoNumeric","log","scrollIndex","scrollableContainer","setScrollableContainer","onKeyDown","updateScrollableContainer","KeyboardScrollable","isJQuery","ScrollableContainer","isIScrollableContainer","resetScrollIndex","getSelected","getSelectedElement","$scrollableContainer","keycode","Up","scrollUp","Down","scrollDown","$selected","Escape","keyboardscrollable","setItems","$itemAtScrollIndex","scrollTo","domElement","$item","$parent","JSON","parse","decode","evalJSON","parseJSON","stringify","encode","_ttl_timeout","_storage","__jstorage_meta","CRC32","_storage_service","jStorage","_storage_elm","_storage_size","_backend","_observers","_observer_timeout","_observer_update","_pubsub_observers","_pubsub_last","_XMLService","isXML","elm","documentElement","ownerDocument","xmlNode","XMLSerializer","serializeToString","E1","xml","E2","xmlString","resultXML","dom_parser","DOMParser","parseFromString","ActiveXObject","_xmlString","xml_doc","async","loadXML","_reloadData","E5","E6","_load_storage","_handleTTL","_handlePubSub","_storageObserver","updateTime","jStorage_update","newCrc32List","oldCrc32List","updated","removed","_fireObservers","_checkUpdatedKeys","jlen","_publishChange","E8","save","_save","PubSub","retire","_dropOldEvents","E7","_checkKey","curtime","TTL","nextExpire","changed","deleted","pubelm","_pubsubCurrent","needFired","_fireSubscribers","payload","deleteKey","_is_xml","charCodeAt","murmurhash2_32_gc","setTTL","def","ttl","getTTL","flush","storageObj","F","storageSize","currentBackend","storageAvailable","listenKeyChange","stopListening","subscribe","publish","_publish","reInit","saveInGlobal","localStorageReallyWorks","localStorage","setItem","removeItem","BogusQuotaExceededErrorOnIos5","E3","globalStorage","location","hostname","E4","addBehavior","getElementsByTagName","attachEvent","setInterval","persisted","_init","millisecondsToLive","clear","setChangeListener","removeOnChangeListener","$elementToPosition","setPositionByPoint","point","calculateHeightsAndWidths","setPosition","setPositionCenterScreen","containerWidth","elementWidth","pageYOffset","Storage","containerHeight","elementHeight","css","setPositionByElement","xAlignment","yAlignment","outerHeight","outerWidth","fitsInContainerHeight","fitsInContainerWidth","shouldFlipVertically","shouldFlipHorizontally","newTopAfterFlip","widthOffset","width","ElementPosition","inputsOnlySelector","allElementsSelector","autoFocus","$resolvedContainer","$focus","Focus","focusFirstInput","focusContainer","focusFirstElement","focusFirst","focusLastElement","focusLast","focusLastInput","activeElement","elementId","caretPosition","HTMLInputElement","selectionStart","updatedDomElement","getElementById","selectionEnd","not","alignment","content","validateOptions","$modal","rememberPosition","previousPosition","rememberTitle","previousTitle","rememberPrimaryCaption","previousPrimaryCaption","buildOverlayIfNeeded","buildModalAndAddToDOM","moveOverlayBehindTopMostModal","positionModal","Modal","$globalOverlay","setDefaultFocus","onShown","off","removeModal","hideOrMoveOverlay","onHidden","performDefault","$defaultButton","click","body","draggable","handle","$content","containerClass","modalContent","outerHTML","getSiblingContent","focusGuard","html","modalStack","siblingContent","hasElement","hasVisibleElement","lastTargetPosition","canPositionByPoint","canPositionByElement","topMostModal","peek","detach","current","modal","topModal","title","primaryCaption","wireupDismiss","wireupSubmit","openDisconnectModal","openErrorModal","error","isNotEmpty","unhookDismiss","unhookSubmit","closeIfCanDismissFromOverlay","isDismissableFromOverlay","closeAll","which","ctrlKey","initialize","ModalStack","RequestVerificationToken","$confirmation","$title","$yesButton","$noButton","yesId","yesCaption","noCaption","showOnTarget","modalSize","Confirmation","buildTemplate","applyOptionsToContent","$header","$actions","$primaryActions","onYesClicked","disable","arg1","arg2","AjaxCall","url","beforeRemote","addAntiForgeryToken","confirm","ajax","allowMultipleAjaxCalls","xhr","createXhr","contentType","processData","traditional","dataFilter","state","success","textStatus","jqXHR","Data","RustigRemoteJsCallback","callbackArgs","remoteOptions","$remoteTarget","executeFunctionByName","errorThrown","errorHandled","isWindowUnloading","status","responseText","complete","functionName","throwCallbackError","namespaces","lastFunc","isEnabled","PopOver","closeAllPopOversWithChannel","buildGlobalMenu","getGlobalMenu","$menu","emptyMenu","getOptions","init","mode","openContextMenu","onClickOff","closeAllPopOvers","getDefaults","button","preventBrowserContextMenu","eventTriggeredByMe","eventTriggeredByMyGroup","otherPopoverNoClickSetToMyGroup","$noClickOff","clickInPopover","targetInAction","targetInClickOffOverrideForChannel","targetNoClickSetToMyGroup","popoverTriggeredByFocusAndElementHasFocus","addBack","enable","one","$globalMenu","globalMenuChannels","getContent","done","isCopy","isDetachAndMenuIsEmpty","pageY","pageX","placement","sizeMenu","sizing","$children","namespace","setElement","setGroupId","setUpDisabledAndReadonlyFunctionality","buildPopover","wireupSearchField","wireupKeyboardListeners","configureToBehaveLikeSelect","groupId","isDisabled","SelectableListPopover","setOnHidden","selectedHasBeenSet","searchField","fetchSuggestions","isSelect","Ajax","onSuccess","getData","searchText","buildSuggestions","$selectValueInput","addSuggestion","buildSelectListItem","suggestionWithText","$suggestion","isSelected","wireupMouseClickForSuggestion","addItem","onSelectByMouseClick","setSelected","clearValueForInputsInGroup","clearSuggestionsAndSelectionCache","selectedIndex","setValueForInputsInGroup","cacheSuggestionsAndSelection","$hasKey","textValue","valueValue","fieldsIncludedInSearch","fieldName","onSelectByKeyboard","selected","onEscapePressed","Tab","setOnHide","popoverIsClearing","createDropdownButton","onButtonClick","restoreSuggestionsAndSelection","$suggestionItems","$suggestSearchPopoverContent","rootClass","createPopover","$temp","_isOpen","buildKeyboardScrollableOptions","keyboardScrollable","isClearing","suggestsearch","SuggestSearch","formatTextIfNumber","toLocaleString","currency","maximumFractionDigits","minimumFractionDigits","relativeName","formatMoney","money","guid","s4","isBlankItem","isBlank","excludeKeys","unwrappedValue","unwrapObservable","addRow","numRowsToAdd","focusOnNewRow","currentRowCount","Rows","emptyObject","editorTableInternalId","Utility","emptyObjectBuilder","$table","tableKey","cellId","toValueBinding","binding","dataName","dataValue","bindingName","bindTo","toCellBinding","createEmptyValue","toBehaviorBinding","getRow","canBuild","templateRow","rowToClone","cloneRow","contents","TemplateRow","CloneRow","initialValue","rawValue","read","v","write","getElements","row","getBinding","cell","cellName","NullableTextObservable","rustigDate","valueAccessor","bindingsAccessor","viewModel","selectName","NullableNumericObservable","pF","aSign","vMin","mDec","numericValue","unwrapped","formattedValue","NullableMoneyObservable","autoMoney","inputName","valueName","columnNumber","targetCell","parents","rowData","compute","rd","ExpressionBinder","rewriteComputeExpression","expression","propertyName","bracketsOpen","EnterKeyBinder","inputSelector","currentTarget","rowIndex","enterKey","shiftKey","moveTo","highlightSelection","er","currentCell","tbody","columnIndex","RemovedRows","remoteKeys","dataKeysToSend","dataToSend","_key","remote","lastItem","addRowClass","checkbox","isChecked","table","checkboxIndex","pojo","JsonBuilder","deleteEmptyArrayItems","setExcludeKeys","toJsonFunc","cleanedArr","rewrite","tableData","isDirty","initialized","initialTableData","slideDown","slideUp","beforUnloadEvent","isBound","valueBinders","behaviorBinders","externalBinders","registerBinders","isEditorTable","TemplateRowFactory","bindRows","bindRootValues","bindRootBehavior","bindExternal","binders","binder","BindingConverter","EditorTable","inTable","addBindingToElement","isInitialized","$templateRow","rowNumber","$cell","dataExtension","notifySubscribers","DateInputBinder","SelectBinder","NumericInputBinder","MoneyInputBinder","TextInputBinder","HiddenInputBinder","CheckboxInputBinder","ColumnTotalBinder","RowCountBinder","RemoveRowBinder","RemoteOnChangeBinder","AutoGrowBinder","AddRowBinder","CheckAllBinder","ForEachBinder","ToJSONBinder","ExternalJsonBinder","ExternalTrackChangesHideBinder","ExternalNavigationWarning","currentBinding","finalBinding","bindingValue","eventClosingBracketPosition","newBinding","editortable","registerHandler","handlers","handler","FormValidation","handleErrors","_this","$errors","$error","popoverOptions","$targetInput","targetId","message","clearErrorOptions","addValidationClass","$existingPopover","resultClearErrorOptions","determineClearErrorBehavior","clearErrorWireups","triggerEvents","removeErrorState","onErrorPopoverDisabled","validationClass","$defaultTarget","defaultClearErrorBehavior","$popoverElement","defaultWireup","matchIndex","rowNum","lastDot","columnName","inputCell","displayCell","EditorTableErrorPopover","ErrorPopover","editortable_validation","Validation","Remote","triggerWireup","$triggeringEvent","FileInput","_droppedFiles","droppedFiles","storeDroppedFile","storeDroppedFiles","file","files","addStagedFile","stagedFiles","handleStagedFiles","$context","handledFlag","preserveFlag","clearStagedFiles","setInputs","fileInfo","fileData","inputFlag","$input","FileInputInfo","fileinput","$form","droppedFile","hasFileDrop","elementIsFormOrSubmitable","formData","hasFileInputs","form","$self","toggleEnabled","shouldClearValueOnDisable","additionalValues","formattedKey","isInForm","findForm","isSubmit","addOrUpdateHiddenInputForSubmitButton","serializeFormToJSON","transformJsonToString","$result","hasRemoteTargetForm","targetFormId","serializeArray","acc","currentProperty","jsonObject","encodeURIComponent","targetIsAnchor","RemoteTriggerHandler","FileDropRemoteHandler","FileUploadFormRemoteHandler","SwitchRemoteHandler","EditorTableFieldChangeRemoteHandler","SingleInputRemoteHandler","FormInputRemoteHandler","SelectRemoteHandler","NestedAnchorRemoteHandler","DefaultRemoteHandler","HandlerFactory","_options","ex","wireupTriggers","$contextElement","callRemote","toJson","nodes","$jsTree","treeOptions","setOptions","findInput","createTree","setSelectedValues","checkedIds","jstree","JsTreeConfig","treeinput","TreeInput","$globalContainer","calculateAddressFromZipcode","$addressLoader","zipCode","onAddressOptionsCalculatedFromZipcode","cityOptions","city","countyOptions","county","AddressLoader","birthDate","birthYear","birthMonth","birthDay","age","monthDifference","isBeforeBirthMonth","isSameMonthButBeforeBirthday","inputValue","ageValue","birthdate","Age","Years","Alert","flashSaveSuccessful","flash","hasCustomContainer","$messageContainer","fadeOut","alertMessage","AlertStorageKey","Dropzone","Emitter","camelize","contentLoaded","detectVerticalSquash","drawImageIOSFix","__slice","__hasProp","_callbacks","emit","callbacks","_len","removeListener","removeAllListeners","removeEventListener","_super","resolveOption","elementOptions","_ref","defaultOptions","previewTemplate","clickableElements","listeners","dropzone","instances","optionsForElement","forceFallback","isBrowserSupported","acceptedFiles","acceptedMimeTypes","getExistingFallback","removeChild","previewsContainer","getElement","previewsContainerPrepend","clickable","child","ctor","__super__","__extends","withCredentials","parallelUploads","uploadMultiple","maxFilesize","paramName","createImageThumbnails","maxThumbnailFilesize","thumbnailWidth","thumbnailHeight","thumbnailSquare","filesizeBase","maxFiles","params","ignoreHiddenFiles","autoProcessQueue","autoQueue","addRemoveLinks","hiddenInputContainer","capture","renameFilename","dictDefaultMessage","dictFallbackMessage","dictFallbackText","dictFileTooBig","dictInvalidFileType","dictResponseError","dictCancelUpload","dictCancelUploadConfirmation","dictRemoveFile","dictRemoveFileConfirmation","dictMaxFilesExceeded","accept","messageElement","span","innerText","getFallbackForm","resize","info","srcRatio","trgRatio","srcX","srcY","srcWidth","srcHeight","optWidth","optHeight","ratio","trgHeight","trgWidth","dragstart","dragend","dragenter","dragover","dragleave","paste","addedfile","removeFileEvent","removeLink","_j","_k","_len1","_len2","_ref1","_ref2","_results","previewElement","querySelectorAll","_renameFilename","innerHTML","_removeLink","UPLOADING","removeFile","removedfile","_updateMaxFilesReachedClass","thumbnail","dataUrl","thumbnailElement","alt","src","errormultiple","processing","processingmultiple","uploadprogress","progress","bytesSent","totaluploadprogress","sending","sendingmultiple","successmultiple","canceled","canceledmultiple","completemultiple","maxfilesexceeded","maxfilesreached","queuecomplete","addedfiles","objects","getAcceptedFiles","accepted","getRejectedFiles","getFilesWithStatus","getQueuedFiles","QUEUED","getUploadingFiles","getAddedFiles","ADDED","getActiveFiles","noPropagation","setupHiddenFileInput","hiddenFileInput","visibility","addFile","URL","webkitURL","updateTotalUploadProgress","returnValue","efct","dataTransfer","effectAllowed","_error","dropEffect","clickableElement","evt","elementInside","updatePreviewContainer","previewContainer","addClickableElement","effect","addElementAsDragAndDropArea","dragDropClass","destroy","removeAllFiles","totalBytes","totalBytesSent","totalUploadProgress","upload","_getParamName","existingFallback","fields","fieldsString","getFallback","elements","setupEventListeners","elementListeners","listener","_results1","removeEventListeners","cancelUpload","selectedSize","selectedUnit","clipboardData","_addFilesFromItems","handleFiles","entry","webkitGetAsEntry","isFile","getAsFile","isDirectory","_addFilesFromDirectory","kind","directory","path","dirReader","errorHandler","readEntries","createReader","entries","fullPath","isValidFile","_enqueueThumbnail","_errorProcessing","enqueueFile","initExistingFile","SUCCESS","enqueueFiles","processQueue","_thumbnailQueue","_processingThumbnail","_processThumbnailQueue","createThumbnail","cancelIfNecessary","fileReader","FileReader","onload","createThumbnailFromUrl","readAsDataURL","imageUrl","crossOrigin","img","canvas","ctx","resizeInfo","_ref3","getContext","trgX","trgY","toDataURL","onerror","processingLength","queuedFiles","processFiles","processFile","uploadFiles","_getFilesWithXhr","groupedFile","groupedFiles","CANCELED","abort","uploadFile","handleError","headerName","headerValue","headers","inputType","response","updateProgress","_len3","_m","_ref4","_ref5","XMLHttpRequest","allFilesFinished","loaded","readyState","getResponseHeader","_finished","onprogress","setRequestHeader","FormData","checked","submitRequest","send","ERROR","forElement","autoDiscover","discover","checkElements","dropzones","blacklistedBrowsers","capableBrowser","FileList","Blob","navigator","userAgent","rejectedItem","div","els","question","rejected","baseMimeType","mimeType","validType","ACCEPTED","PROCESSING","ey","ih","py","sy","naturalWidth","naturalHeight","drawImage","getImageData","sx","sw","sh","dx","dy","dw","dh","vertSquashRatio","win","doc","poll","pre","rem","doScroll","createEventObject","frameElement","_autoDiscoverFunction","$dropzone","$previewContainer","uploadPreserverId","$uploadPreserver","createUploadPreserver","updateDropzone","initFile","getAllFiles","getDefaultOptions","optionCallbacks","ThumbnailUpload","dropzonePreserver","prependAttribute","getPreviewTemplate","getDefaultPreviewTemplate","$thumbnail","removeDragHoverClass","addDragHoverClass","onFileAdded","onCanceled","onSending","onSendingMultiple","onUploadComplete","onError","errorMessage","onThumbnailGenerated","$previewTemplateContainer","uploadSuccess","uploadError","tuUploading","thumbnailRemove","thumbnailId","Application","wireupConventions","addFormData","thumbnailIds","tuEmpty","getServerResponseFor","replaceWith","errorText","onUploadError","serverId","onUploadSuccess","removeElementAndClickDropzone","removeThumbnail","addServerIdToElements","replaceDropzoneRemoveWithRemoveAction","addServerIdToUrlAttribute","addQueryParamToUrl","removeUrl","$removeElement","$previewContainerPrepend","addUploadingAndQueuedFilesToDropzone","$prepend","thumbnailupload","protocol","host","port","queryParameters","hash","parseUrl","setProtocol","setHost","setPort","setPath","setQueryParameter","encodedValues","removeQueryParameter","getQueryParameter","setHash","toUrl","querystring","createQueryString","href","pathname","getQueryParameters","search","queryString","queryParams","pair","bytes","Kilobyte","Megabyte","Gigabyte","_bytes","FormatsFileSize","gigabytes","megabytes","kilobytes","fileName","withExtension","withoutExtension","extension","fileTypes","filename","FileName","$queryParameters","recordState","currentState","history","_querystring","queryStringsMatch","replaceState","pushState","onStateChange","Url","createHistory","BrowserHistory","$toggle","$drawer","addCssFooterStateIfNeeded","toggle","$overlay","isClosed","Drawer","drawer","filedragout","completeUrl","downloadurl","originalEvent","setData","fillwindow","newSize","thisTop","footerSelector","footerSize","$footer","ajaxComplete","showMoreRows","Items","Count","refreshPageData","FilterTabs","TraditionalPager","Search","OnRemotePageUpdate","toggleMultiSelect","TableHeading","TitleButtons","ActionMenu","ListView","paceOptions","trackMethods","ignoreURLs","trackWebSockets","startOnPageLoad","restartOnRequestAfter","AjaxMonitor","Bar","DocumentMonitor","ElementMonitor","ElementTracker","EventLagMonitor","Evented","Events","NoTargetError","Pace","RequestIntercept","SOURCE_KEYS","Scaler","SocketRequestTracker","XHRRequestTracker","animation","avgAmplitude","bar","cancelAnimation","cancelAnimationFrame","extendNative","getFromDOM","getIntercept","handlePushState","ignoreStack","requestAnimationFrame","runAnimation","scalers","shouldIgnoreURL","shouldTrack","sources","uniScaler","_WebSocket","_XDomainRequest","_XMLHttpRequest","_intercept","_pushState","_replaceState","__indexOf","catchupTime","initialRate","minTime","ghostTime","maxProgressPerFrame","easeFactor","restartOnPushState","checkInterval","selectors","eventLag","minSamples","sampleCount","lagThreshold","performance","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","mozCancelAnimationFrame","tick","sum","json","_base","bindings","targetElement","finish","prog","progressStr","transform","lastRenderedProgress","XDomainRequest","WebSocket","defineProperty","configurable","enumerable","ignore","track","monitorXHR","req","_open","request","protocols","_arg","running","restart","watch","tracker","_onreadystatechange","ProgressEvent","lengthComputable","onreadystatechange","check","states","loading","interactive","avg","interval","points","samples","clearInterval","sinceLastUpdate","catchup","lastProgress","frameTime","scaling","extraSources","go","enqueueNextFrame","scaler","scalerList","startOn","stopLoading","getUrlAttribute","isDisabledKey","isRowSelected","selectRowElement","$popoverContent","queryParameterName","addIdsToUrl","Humanizer","tryEnable","removeIdsFromUrl","allSelected","anySelected","validateMarkup","koInit","initializeJsonValues","isSelectAll","onSelectAllChanged","isMultiSelect","RustigElement","updateAll","selectAll","removeAll","onSelectedChanged","isSelectAllChecked","selectAllElement","textIsHighlighted","getSelection","$selector","wasSelected","removeData","refresh","$count","rCount","isInput","createBinders","ids","initialJson","multiselecttable","MultiSelectTable","multiselecttablerow","buildOverlay","loadPhotos","onPhotoClick","setEscapeKeyToClosePhotoViewer","AddPhoto","photos","Photo","RemovePhoto","photo","getPhoto","PhotoViewerGlobalOverlay","$photosContainer","closeOverlay","viewPrevious","viewNext","showing","downloadPhoto","keyup","$photo","downloadUrl","openOverlay","updateShowing","photoName","photoviewer","PhotoViewer","$grid","$nameContainer","$name","$buttonsContainer","$tbGroup","resizePhotosContainer","_downloadUrl","$fullImageContainer","$statusContainer","downloadAttempted","downloadForViewer","urlThatPreventsCaching","$image","photoSize","PhotoSize","getPhotoSizeScaledToFitContainer","$retryContainer","image","imageHeight","imageWidth","dependency","Dependency","_id","_name","shouldPreventPopover","shouldPreventErrorClass","dependents","getDependents","$validationErrorElement","getValidationErrorElement","onChange","removeMessageFor","dependent","$message","getPopoverMessage","cachePopoverMessage","hasValidationError","addMessageFor","messageAlreadyExists","appendPopoverMessage","$validationElement","$dependents","Dependent","buildValidationMessage","validationMessage","isCheckbox","isRadio","dependentName","dependentValidator","dependentValidatorAttribute","dependencyValidator","dependencyValidatorAttribute","_validationMessage","validationMessageAttribute","shouldDisableDependentWhileValidationError","shouldDisableAttribute","_hasValidationError","dependentPassesValidation","dependencyPassesValidation","realtimevalidation","RealTimeValidation","$textArea","CKEDITOR","richtext","RichText","sfDelay","$filterElement","isPartOfSearchForm","hasCustomAction","resolveTargetForm","$searchForm","hasTargetForm","$targetForm","remoteDataFilter","getDefaultDataFilter","getsCurrentValue","actionEventName","determineEventName","formDebounceFunction","doAction","debouncedDoAction","valueChanged","$formInputs","$dataForm","addInputToData","addsNameOverridesToFormData","filterId","SearchField","targetFormSelector","actions","sfTrigger","isDateField","triggersFromChangeEvent","$tabs","selectedTabClass","selectTab","selectInitialTab","applyErrors","$tab","tabId","findContent","addErrorIconToTab","findTab","$errorIcon","$tabIcon","$allTabs","$selectedTabs","Tabs","tabs","ThumbnailDownloader","attributeKey","trySetThumbnailFromCache","downloadThumbnail","setSrc","setThumbnail","shouldCacheThumbnail","thumbnaildownloader","command","getDataOptions","ToggleState","initAttributes","toggleAll","newState","setProperty","validateTriggerEvent","maxHeight","isLink","isRemote","togglestate","openModal","modalOptions","anchorOnRemoteTarget","ActionResult","isCurrentModalConfirmation","closeModal","closeModalById","modalId","handleNavigationWarning","refreshAndFlashAlert","flashAlert","containerSelector","storeAlertAndCloseModals","reload","redirect","remoteRequest","notImplemented","refreshContent","updateHtml","replaceContent","replaceValue","shouldSuppressValueChanged","replaceCallbackValue","appendContent","$html","prependContent","refreshDropdownListItems","shouldPreserveUserInput","replaceHtml","createMapOfInputFieldIds","shouldPreserveValidationErrors","mapInputFieldIdsToValues","renameThumbnail","shouldReplaceTag","triggerEvent","Event","inputFields","InputFieldMapper","mapToInput","suppressNavigationWarning","$inputField","hasClass","$inputToMapTo","configureId","scheduleRemoteRequest","cancelPreviousTimeoutIfNeeded","executeFunc","executeClick","executeRemote","timeoutId","storeTimeout","timeoutDataAttribute","autorequest","AutoRequest","autosaveOn","autosaveOnTargets","autosave","isRemoting","setShowAlertIfNavigatingFromPageWithUnsavedChanges","clearAutosaveDebounce","hasUnsavedChanges","Autosave","fileUrl","isAvailableUrl","ui","retryDuration","isRetryTimedOut","api","Api","view","loadPreview","isPdfAvailable","checkForPdf","renderFailed","displayDocument","$ui","$spinner","$loading","$failed","PdfUrlBuilder","frame","scr","screen","availWidth","availHeight","availLeft","availTop","$frame","pollUrl","DefaultDocumentViewUi","DocumentDataPoll","DocumentViewer","documentviewer","ErrorMessage","resetValidity","handleInvalid","setValidity","setCustomValidity","eventListener","eventListenerBinding","eventListenerEmptyMessage","setText","storageValue","eventlistener","EventListener","notifyOn","EventNotifier","wireupName","setEventListener","subject","eventnotifier","emptySelector","FilterItems","selectedClass","mapped","optionMap","filterItems","$itemList","filterText","escapeRegExp","lowestSearchIndex","selectIndex","$matches","searchIndex","triggerOnFilter","showMatches","hideFiltered","setSelectedItem","triggerOnFiltered","highlightFilter","onFilterData","onFilteredData","fiSelectedClass","filteritems","reorder","nameLeftOver","nameReplacements","idLeftOver","idReplacements","reverse","nameFinal","idFinal","ListBinding","_window","navigateToUrl","HandlesWindowNavigation","navigate","Navigate","optional","notOptional","isOptional","isNotOptional","toggleOptional","eventData","removeWhat","required","notRequired","isRequired","isNotRequired","toggleRequired","prev","createLink","configureMutationObserver","tryApplyLink","observer","disconnect","applyLink","observe","mutationConfig","Text","aNode","aNodeText","aNodeTextClone","nextSibling","hasChildNodes","isStyleOrScriptElement","nodeAddedHandler","MutationObserver","mutationsList","addedNodes","childList","subtree","transformtexttolink","TransformTextToLink","bindOn","bindFrom","bindBehavior","nullToken","bindToMap","ValueBinding","suppressedKey","bindFromMap","setGetValue","setSetValue","bindEvent","targets","isFalseBool","bindWith","getValue","hasSuppressedBindTo","endsWith","valuebinding","hidden","visible","isHidden","toggleVisible","value1","value2","convention","conventions","triggerConventionsReady","conventionsReady","Execute","oldSlideUp","oldSlideDown","oldHtml","r","oldReplaceWith","newElement","msMatchesSelector","webkitMatchesSelector","parentElement","this_len","resolve","promise","remotePopover","RemotePopOver","tableHeight","autoheighttable","AutoHeightTable","$checkboxField","$field","$datefield","$key","DateExpression","sourceSelector","registerEvents","eventString","onInputChange","sourceValue","targetSelector","dateexpression","resolveContext","$hasChanges","rElement","expressionKeys","keyElements","sumElement","$nameField","$errorRollUp","FieldValidationHandler","middle","PersonName","prefixes","lastNamePrefixes","suffixFollowsComma","commaIndex","afterComma","findWord","isFormalForm","beforeComma","extractPrefix","extractSuffix","testWord","extractFirstNameSingleCharacter","isLastNamePrefix","trimDot","extractMiddleInitial","parseFormal","isInitial","isFirst","foundLastToken","firstWords","lastWords","parseInformal","isEqualIgnoreCase","foundPrefix","foundSuffix","testword","localeCompare","sensitivity","nocomma","joinNotNullOrWhitespace","formatInformal","$phoneField","iframe","contentWindow","execCommand","print","$radioField","$guard","wireUpFileDragAndDrop","dragAndDropUploadElement","dragAndDropUpload","DragAndDropUpload","fileFieldsContainer","fileFields","fileDragAndDrop","onFileDrop","$dropArea","fileCount","$dropdownField","$select","$dateRangeField","$asyncFileField","registerDefaults","Polyfills","Patches","Rustig","AsyncFileField","onbeforeunload","RUSTIG_OPTIONS","PhoneValidationHandler","NameValidationHandler","RadioValidationHandler","CheckboxValidationHandler","DropdownValidationHandler","DateRangeValidationHandler","AsyncFileValidationHandler","MultiSelectDropdownValidationHandler","nameField","phoneField","moneyField","numberField","percentField","nav","FileDragOut","dropdowntree","asyncfilefield","AgeField","ItemList","ToggleValue","ReadonlyIf","ShowIf","KeyboardFocusBounds","MathExpressions","PrintPreview","HasChanges","initializeElements","setOnClickListeners","initializeDocumentUploader","setState","$hiddenId","uploader","$hiddenFilename","cancelUploadInProgress","clearInput","setUploadCompleteState","$hiddenLength","$fileChooser","preUpload","dropElementSelector","onValidationComplete","preUploadInvalidFileMessage","asyncFileField","fileIsValid","onCancel","cancelsKey","fileBeingUploaded","BuildsExtensionIcon","FileSize","cancelCompletedUpload","enableLinkedElements","buildsRemoveUrl","disableLinkedElements","disablesKey","numberOfFilesUploading","cannotUploadAnymoreFiles","uniq_prefix","random_value","iframes","BroadcastChannel","getItem","is_iframe","sysend","broadcast","postMessage","send_to_iframes","proxy","border","proxy_url"],"sourceRoot":""}