{"version":3,"file":"help.min.js","mappings":"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","sources":["webpack://ecommerce/./src/config/config.inwild.js","webpack://ecommerce/./src/config/config.js","webpack://ecommerce/./src/config/config.production.inwild.js","webpack://ecommerce/./src/config/config.production.js","webpack://ecommerce/./src/config/config.production.runkd.js","webpack://ecommerce/./src/config/config.runkd.js","webpack://ecommerce/./src/config/config.staging.inwild.js","webpack://ecommerce/./src/config/config.staging.js","webpack://ecommerce/./src/config/config.staging.runkd.js","webpack://ecommerce/./src/config/index.js","webpack://ecommerce/./src/common/common.js","webpack://ecommerce/./node_modules/i18next/dist/es/logger.js","webpack://ecommerce/./node_modules/i18next/dist/es/EventEmitter.js","webpack://ecommerce/./node_modules/i18next/dist/es/utils.js","webpack://ecommerce/./node_modules/i18next/dist/es/ResourceStore.js","webpack://ecommerce/./node_modules/i18next/dist/es/postProcessor.js","webpack://ecommerce/./node_modules/i18next/dist/es/Translator.js","webpack://ecommerce/./node_modules/i18next/dist/es/LanguageUtils.js","webpack://ecommerce/./node_modules/i18next/dist/es/PluralResolver.js","webpack://ecommerce/./node_modules/i18next/dist/es/Interpolator.js","webpack://ecommerce/./node_modules/i18next/dist/es/BackendConnector.js","webpack://ecommerce/./node_modules/i18next/dist/es/defaults.js","webpack://ecommerce/./node_modules/i18next/dist/es/i18next.js","webpack://ecommerce/./src/common/translateService.js","webpack://ecommerce/./node_modules/i18next/dist/es/index.js","webpack://ecommerce/./src/components/imageUploader.js","webpack://ecommerce/./src/help/helpUploader.js","webpack://ecommerce/./src/help.js","webpack://ecommerce/./wwwroot/js/modernizr-custom-mq.js","webpack://ecommerce/./node_modules/fine-uploader/fine-uploader/fine-uploader.js","webpack://ecommerce/./node_modules/fine-uploader/lib/traditional.js","webpack://ecommerce/./node_modules/jquery-validation/dist/jquery.validate.js","webpack://ecommerce/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://ecommerce/webpack/bootstrap","webpack://ecommerce/webpack/runtime/chunk loaded","webpack://ecommerce/webpack/runtime/compat get default export","webpack://ecommerce/webpack/runtime/define property getters","webpack://ecommerce/webpack/runtime/global","webpack://ecommerce/webpack/runtime/hasOwnProperty shorthand","webpack://ecommerce/webpack/runtime/make namespace object","webpack://ecommerce/webpack/runtime/node module decorator","webpack://ecommerce/webpack/runtime/jsonp chunk loading","webpack://ecommerce/webpack/startup"],"sourcesContent":["module.exports = {\r\n debug: true,\r\n realtime: {\r\n tokenUrl: 'http://localhost/JSport.RealtimeServiceWeb/api/Token',\r\n paymentHubUrl: 'http://localhost/JSport.RealtimeServiceWeb/paymenthub',\r\n username: 'Admin',\r\n password: 'SignalR2020',\r\n },\r\n useCdn: false,\r\n cdnImagesUrl: 'https://d26ztvr3v93474.cloudfront.net',\r\n cdnImagesFallbackUrl: 'https://sync.inwild.com:4433',\r\n cdnCmsAssetsUrl: 'https://d19sv9e4y8qwzh.cloudfront.net',\r\n supportedCultures: () => [\r\n 'it-IT',\r\n 'es-ES',\r\n 'fr-FR',\r\n 'en-GB',\r\n 'en-US',\r\n 'de-DE',\r\n ],\r\n cms: {\r\n cmsUrl: 'http://localhost:1339',\r\n },\r\n tracingUrl:\r\n 'https://6f569c242a3a4173b354adf56020c011@o245932.ingest.sentry.io/5905368',\r\n};\r\n","module.exports = {\r\n debug: true,\r\n realtime: {\r\n tokenUrl: 'http://localhost/JSport.RealtimeServiceWeb/api/Token',\r\n paymentHubUrl: 'http://localhost/JSport.RealtimeServiceWeb/paymenthub',\r\n username: 'Admin',\r\n password: 'SignalR2020',\r\n },\r\n useCdn: false,\r\n cdnImagesUrl: 'https://d3n8mmvj9ns1ml.cloudfront.net',\r\n cdnImagesFallbackUrl: 'https://sync.lordgunbicycles.com:4433',\r\n cdnCmsAssetsUrl: 'https://d2umopxfu128sk.cloudfront.net',\r\n supportedCultures: () => [\r\n 'it-IT',\r\n 'es-ES',\r\n 'fr-FR',\r\n 'en-GB',\r\n 'en-US',\r\n 'de-DE',\r\n 'en-AU',\r\n 'ko-KR',\r\n ],\r\n cms: {\r\n cmsUrl: 'http://localhost:1337',\r\n },\r\n tracingUrl:\r\n 'https://6f569c242a3a4173b354adf56020c011@o245932.ingest.sentry.io/5905368',\r\n};\r\n","module.exports = {\r\n debug: false,\r\n realtime: {\r\n tokenUrl: 'https://api.inwild.com/realtime/api/Token',\r\n paymentHubUrl: 'https://api.inwild.com/realtime/paymenthub',\r\n username: 'Admin',\r\n password: 'SignalR2020',\r\n },\r\n useCdn: true,\r\n cdnImagesUrl: 'https://d26ztvr3v93474.cloudfront.net',\r\n cdnImagesFallbackUrl: 'https://sync.inwild.com:4433',\r\n cdnCmsAssetsUrl: 'https://d19sv9e4y8qwzh.cloudfront.net',\r\n supportedCultures: () => [\r\n 'it-IT',\r\n 'es-ES',\r\n 'fr-FR',\r\n 'en-GB',\r\n 'en-US',\r\n 'de-DE',\r\n ],\r\n cms: {\r\n cmsUrl: 'https://news.inwild.com',\r\n },\r\n tracingUrl:\r\n 'https://6f569c242a3a4173b354adf56020c011@o245932.ingest.sentry.io/5905368',\r\n};\r\n","module.exports = {\r\n debug: false,\r\n realtime: {\r\n tokenUrl: 'https://api.lordgunbicycles.com/realtime/api/Token',\r\n paymentHubUrl: 'https://api.lordgunbicycles.com/realtime/paymenthub',\r\n username: 'Admin',\r\n password: 'SignalR2020',\r\n },\r\n useCdn: true,\r\n cdnImagesUrl: 'https://d3n8mmvj9ns1ml.cloudfront.net',\r\n cdnImagesFallbackUrl: 'https://sync.lordgunbicycles.com:4433',\r\n cdnCmsAssetsUrl: 'https://d2umopxfu128sk.cloudfront.net',\r\n supportedCultures: () => [\r\n 'it-IT',\r\n 'es-ES',\r\n 'fr-FR',\r\n 'en-GB',\r\n 'en-US',\r\n 'de-DE',\r\n 'en-AU',\r\n 'ko-KR',\r\n ],\r\n cms: {\r\n cmsUrl: 'https://news.lordgun.com',\r\n },\r\n tracingUrl:\r\n 'https://6f569c242a3a4173b354adf56020c011@o245932.ingest.sentry.io/5905368',\r\n};\r\n","module.exports = {\r\n debug: false,\r\n realtime: {\r\n tokenUrl: 'https://api.runkd.com/realtime/api/Token',\r\n paymentHubUrl: 'https://api.runkd.com/realtime/paymenthub',\r\n username: 'Admin',\r\n password: 'SignalR2020',\r\n },\r\n useCdn: true,\r\n cdnImagesUrl: 'https://dufrl78eaxiu3.cloudfront.net',\r\n cdnImagesFallbackUrl: 'https://sync.runkd.com:4433',\r\n cdnCmsAssetsUrl: 'https://d218t1pkbrmetd.cloudfront.net',\r\n supportedCultures: () => [\r\n 'it-IT',\r\n 'es-ES',\r\n 'fr-FR',\r\n 'en-GB',\r\n 'en-US',\r\n 'de-DE',\r\n ],\r\n cms: {\r\n cmsUrl: 'https://news.runkd.com',\r\n },\r\n tracingUrl:\r\n 'https://6f569c242a3a4173b354adf56020c011@o245932.ingest.sentry.io/5905368',\r\n};\r\n","module.exports = {\r\n debug: true,\r\n realtime: {\r\n tokenUrl: 'http://localhost/JSport.RealtimeServiceWeb/api/Token',\r\n paymentHubUrl: 'http://localhost/JSport.RealtimeServiceWeb/paymenthub',\r\n username: 'Admin',\r\n password: 'SignalR2020',\r\n },\r\n useCdn: false,\r\n cdnImagesUrl: 'https://dufrl78eaxiu3.cloudfront.net',\r\n cdnImagesFallbackUrl: 'https://sync.runkd.com:4433',\r\n cdnCmsAssetsUrl: 'https://d218t1pkbrmetd.cloudfront.net',\r\n supportedCultures: () => [\r\n 'it-IT',\r\n 'es-ES',\r\n 'fr-FR',\r\n 'en-GB',\r\n 'en-US',\r\n 'de-DE',\r\n ],\r\n cms: {\r\n cmsUrl: 'http://localhost:1338',\r\n },\r\n tracingUrl:\r\n 'https://6f569c242a3a4173b354adf56020c011@o245932.ingest.sentry.io/5905368',\r\n};\r\n","module.exports = {\r\n debug: true,\r\n realtime: {\r\n tokenUrl: 'https://staging.lordgunbicycles.com/inwild/webapi/realtime/api/Token',\r\n paymentHubUrl: 'https://staging.lordgunbicycles.com/inwild/webapi/realtime/paymenthub',\r\n username: 'Admin',\r\n password: 'SignalR2020',\r\n },\r\n useCdn: false,\r\n cdnImagesUrl: 'https://d26ztvr3v93474.cloudfront.net',\r\n cdnImagesFallbackUrl: 'https://sync.inwild.com:4433',\r\n cdnCmsAssetsUrl: 'https://d19sv9e4y8qwzh.cloudfront.net',\r\n supportedCultures: () => [\r\n 'it-IT',\r\n 'es-ES',\r\n 'fr-FR',\r\n 'en-GB',\r\n 'en-US',\r\n 'de-DE',\r\n ],\r\n cms: {\r\n cmsUrl: 'https://lnxtest.lordgunbicycles.com',\r\n },\r\n tracingUrl:\r\n 'https://6f569c242a3a4173b354adf56020c011@o245932.ingest.sentry.io/5905368',\r\n};\r\n","module.exports = {\r\n debug: true,\r\n realtime: {\r\n tokenUrl: 'https://staging.lordgunbicycles.com/webapi/realtime/api/Token',\r\n paymentHubUrl: 'https://staging.lordgunbicycles.com/webapi/realtime/paymenthub',\r\n username: 'Admin',\r\n password: 'SignalR2020',\r\n },\r\n useCdn: false,\r\n cdnImagesUrl: 'https://d3n8mmvj9ns1ml.cloudfront.net',\r\n cdnImagesFallbackUrl: 'https://sync.lordgunbicycles.com:4433',\r\n cdnCmsAssetsUrl: 'https://d2umopxfu128sk.cloudfront.net',\r\n supportedCultures: () => [\r\n 'it-IT',\r\n 'es-ES',\r\n 'fr-FR',\r\n 'en-GB',\r\n 'en-US',\r\n 'de-DE',\r\n 'en-AU',\r\n 'ko-KR',\r\n ],\r\n cms: {\r\n cmsUrl: 'https://lnxtest.lordgunbicycles.com',\r\n },\r\n tracingUrl:\r\n 'https://6f569c242a3a4173b354adf56020c011@o245932.ingest.sentry.io/5905368',\r\n};\r\n","module.exports = {\r\n debug: true,\r\n realtime: {\r\n tokenUrl: 'https://staging.lordgunbicycles.com/runkd/webapi/realtime/api/Token',\r\n paymentHubUrl: 'https://staging.lordgunbicycles.com/runkd/webapi/realtime/paymenthub',\r\n username: 'Admin',\r\n password: 'SignalR2020',\r\n },\r\n useCdn: false,\r\n cdnImagesUrl: 'https://dufrl78eaxiu3.cloudfront.net',\r\n cdnImagesFallbackUrl: 'https://sync.runkd.com:4433',\r\n cdnCmsAssetsUrl: 'https://d218t1pkbrmetd.cloudfront.net',\r\n supportedCultures: () => [\r\n 'it-IT',\r\n 'es-ES',\r\n 'fr-FR',\r\n 'en-GB',\r\n 'en-US',\r\n 'de-DE',\r\n ],\r\n cms: {\r\n cmsUrl: 'https://lnxtest.lordgunbicycles.com',\r\n },\r\n tracingUrl:\r\n 'https://6f569c242a3a4173b354adf56020c011@o245932.ingest.sentry.io/5905368',\r\n};\r\n","const config_lordgun = require('./config');\r\nconst config_staging_lordgun = require('./config.staging');\r\nconst config_production_lordgun = require('./config.production');\r\n// RUNKD\r\nconst config_runkd = require('./config.runkd');\r\nconst config_staging_runkd = require('./config.staging.runkd');\r\nconst config_production_runkd = require('./config.production.runkd');\r\n// INWILD\r\nconst config_inwild = require('./config.inwild');\r\nconst config_staging_inwild = require('./config.staging.inwild');\r\nconst config_production_inwild = require('./config.production.inwild');\r\n\r\nconst config = {\r\n lordgun: {\r\n development: config_lordgun,\r\n staging: config_staging_lordgun,\r\n production: config_production_lordgun,\r\n },\r\n runkd: {\r\n development: config_runkd,\r\n staging: config_staging_runkd,\r\n production: config_production_runkd,\r\n },\r\n inwild: {\r\n development: config_inwild,\r\n staging: config_staging_inwild,\r\n production: config_production_inwild,\r\n },\r\n};\r\n\r\nconst isEnvironmentSet =\r\n NODE_ENV !== null && NODE_ENV !== undefined && NODE_ENV !== '';\r\n\r\nlet environment = isEnvironmentSet\r\n ? NODE_ENV.toLowerCase().trim()\r\n : 'production';\r\n\r\nlet configObj = {\r\n getConfig: () => config[SITE.toLowerCase()][environment],\r\n};\r\n\r\nmodule.exports = configObj;\r\n","const configHelper = require('../config/index');\r\nimport { reduce, replace, isNil, some, startsWith, isEmpty } from 'lodash';\r\n\r\nrequire('../../wwwroot/js/modernizr-custom-mq.js');\r\nconst trimTrailingSlash = (virtualdir = '') => {\r\n return virtualdir.length > 0 && virtualdir[virtualdir.length - 1] === '/'\r\n ? virtualdir.slice(0, virtualdir.length - 1)\r\n : virtualdir;\r\n};\r\nconst getSiteUrl = (virtualdir = window.$pathBase) => {\r\n if (virtualdir === undefined) {\r\n throw new Error(\r\n 'common.getSiteUrl: virtualdir undefined. Should be emtpy or set.'\r\n );\r\n }\r\n if (window.location.port === '') {\r\n return trimTrailingSlash(\r\n window.location.protocol +\r\n '//' +\r\n window.location.hostname +\r\n virtualdir\r\n );\r\n }\r\n return trimTrailingSlash(\r\n window.location.protocol +\r\n '//' +\r\n window.location.hostname +\r\n ':' +\r\n window.location.port +\r\n virtualdir\r\n );\r\n};\r\nconst getSiteCommercialName = () => {\r\n const siteName = {\r\n lordgun: 'LordGun',\r\n runkd: 'RUNKD',\r\n inwild: 'INWILD',\r\n };\r\n return siteName[SITE.toLowerCase()];\r\n};\r\nconst contentFromCdn = ({ path, keepUrlAsIs }) => {\r\n try {\r\n if (keepUrlAsIs === true) {\r\n return path;\r\n }\r\n const config = configHelper.getConfig();\r\n const { useCdn, cdnImagesUrl, cdnImagesFallbackUrl, cms } = config;\r\n\r\n if (cms && cms.cmsUrl && !isNil(cms.cmsUrl) && !isEmpty(cms.cmsUrl)) {\r\n if (startsWith(path, cms.cmsUrl)) {\r\n return path;\r\n }\r\n }\r\n\r\n if (some([useCdn, cdnImagesUrl, cdnImagesFallbackUrl], isNil)) {\r\n throw new Error('Some config for contentFromCdn is missing');\r\n }\r\n let transformedPath = replace(path.toLowerCase(), '~', '');\r\n transformedPath = replace(\r\n transformedPath,\r\n '/content/products',\r\n '/products'\r\n );\r\n transformedPath = replace(transformedPath, '/content/kits', '/kits');\r\n transformedPath = replace(transformedPath, '/content/img/', '/img/');\r\n transformedPath = replace(transformedPath, '/content/img', '/img');\r\n transformedPath = replace(transformedPath, 'content/img/', '/img/');\r\n transformedPath = replace(transformedPath, 'content/', '');\r\n transformedPath = replace(transformedPath, cdnImagesUrl, '');\r\n transformedPath = replace(transformedPath, cdnImagesFallbackUrl, '');\r\n let siteUrl = getSiteUrl().toLowerCase();\r\n transformedPath = transformedPath.replace(siteUrl, '');\r\n transformedPath = replace(\r\n transformedPath,\r\n window.$pathBase.toLowerCase(),\r\n ''\r\n );\r\n transformedPath = transformedPath.startsWith('/')\r\n ? transformedPath.slice(1, transformedPath.length)\r\n : transformedPath;\r\n if (useCdn && startsWith(transformedPath, cdnImagesUrl.toLowerCase())) {\r\n transformedPath = replace(\r\n transformedPath,\r\n cdnImagesUrl.toLowerCase(),\r\n ''\r\n );\r\n }\r\n if (\r\n useCdn === false &&\r\n startsWith(transformedPath, cdnImagesFallbackUrl.toLowerCase())\r\n ) {\r\n transformedPath = replace(\r\n transformedPath,\r\n cdnImagesFallbackUrl.toLowerCase(),\r\n ''\r\n );\r\n }\r\n\r\n let finalPath = useCdn\r\n ? `${cdnImagesUrl}/${transformedPath}`\r\n : `${cdnImagesFallbackUrl}/${transformedPath}`;\r\n return finalPath;\r\n } catch (error) {\r\n console.error('contentFromCdn. Set content from Cdn', error);\r\n }\r\n};\r\nconst getPartnersByCulture = ({ culture, partners }) => {\r\n const items = reduce(\r\n partners,\r\n (acc, el) => {\r\n return el.Culture === culture ? acc.concat(el) : acc;\r\n },\r\n []\r\n );\r\n return reduce(\r\n items,\r\n (acc, p) => {\r\n acc.push({\r\n title: p.Name,\r\n url: p.Url,\r\n culture: p.Culture,\r\n logo: contentFromCdn({\r\n path: `/Content/img/${p.Logo}`,\r\n keepUrlAsIs: false,\r\n }),\r\n });\r\n return acc;\r\n },\r\n []\r\n );\r\n};\r\nconst getParameterByName = function (name, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n};\r\nexport default {\r\n getSiteUrl,\r\n getLang: () => document.documentElement.lang,\r\n isTouch: () => Modernizr.touch || window.innerWidth <= 768,\r\n isDesktop: () => Modernizr.mq('(min-width: 64em)'),\r\n getSite: () => SITE.trim().toLowerCase(),\r\n getSiteCommercialName,\r\n contentFromCdn,\r\n getPartnersByCulture,\r\n getParameterByName,\r\n};\r\n","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar consoleLogger = {\n type: 'logger',\n\n log: function log(args) {\n this.output('log', args);\n },\n warn: function warn(args) {\n this.output('warn', args);\n },\n error: function error(args) {\n this.output('error', args);\n },\n output: function output(type, args) {\n var _console;\n\n /* eslint no-console: 0 */\n if (console && console[type]) (_console = console)[type].apply(_console, _toConsumableArray(args));\n }\n};\n\nvar Logger = function () {\n function Logger(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Logger);\n\n this.init(concreteLogger, options);\n }\n\n Logger.prototype.init = function init(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n };\n\n Logger.prototype.setDebug = function setDebug(bool) {\n this.debug = bool;\n };\n\n Logger.prototype.log = function log() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return this.forward(args, 'log', '', true);\n };\n\n Logger.prototype.warn = function warn() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return this.forward(args, 'warn', '', true);\n };\n\n Logger.prototype.error = function error() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return this.forward(args, 'error', '');\n };\n\n Logger.prototype.deprecate = function deprecate() {\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n };\n\n Logger.prototype.forward = function forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === 'string') args[0] = '' + prefix + this.prefix + ' ' + args[0];\n return this.logger[lvl](args);\n };\n\n Logger.prototype.create = function create(moduleName) {\n return new Logger(this.logger, _extends({ prefix: this.prefix + ':' + moduleName + ':' }, this.options));\n };\n\n return Logger;\n}();\n\nexport default new Logger();","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EventEmitter = function () {\n function EventEmitter() {\n _classCallCheck(this, EventEmitter);\n\n this.observers = {};\n }\n\n EventEmitter.prototype.on = function on(events, listener) {\n var _this = this;\n\n events.split(' ').forEach(function (event) {\n _this.observers[event] = _this.observers[event] || [];\n _this.observers[event].push(listener);\n });\n return this;\n };\n\n EventEmitter.prototype.off = function off(event, listener) {\n var _this2 = this;\n\n if (!this.observers[event]) {\n return;\n }\n\n this.observers[event].forEach(function () {\n if (!listener) {\n delete _this2.observers[event];\n } else {\n var index = _this2.observers[event].indexOf(listener);\n if (index > -1) {\n _this2.observers[event].splice(index, 1);\n }\n }\n });\n };\n\n EventEmitter.prototype.emit = function emit(event) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (this.observers[event]) {\n var cloned = [].concat(this.observers[event]);\n cloned.forEach(function (observer) {\n observer.apply(undefined, args);\n });\n }\n\n if (this.observers['*']) {\n var _cloned = [].concat(this.observers['*']);\n _cloned.forEach(function (observer) {\n observer.apply(observer, [event].concat(args));\n });\n }\n };\n\n return EventEmitter;\n}();\n\nexport default EventEmitter;","export function makeString(object) {\n if (object == null) return '';\n /* eslint prefer-template: 0 */\n return '' + object;\n}\n\nexport function copy(a, s, t) {\n a.forEach(function (m) {\n if (s[m]) t[m] = s[m];\n });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n function cleanKey(key) {\n return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n }\n\n function canNotTraverseDeeper() {\n return !object || typeof object === 'string';\n }\n\n var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n while (stack.length > 1) {\n if (canNotTraverseDeeper()) return {};\n\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n object = object[key];\n }\n\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\n\nexport function setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object),\n obj = _getLastOfPath.obj,\n k = _getLastOfPath.k;\n\n obj[k] = newValue;\n}\n\nexport function pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object),\n obj = _getLastOfPath2.obj,\n k = _getLastOfPath2.k;\n\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\n\nexport function getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path),\n obj = _getLastOfPath3.obj,\n k = _getLastOfPath3.k;\n\n if (!obj) return undefined;\n return obj[k];\n}\n\nexport function deepExtend(target, source, overwrite) {\n /* eslint no-restricted-syntax: 0 */\n for (var prop in source) {\n if (prop in target) {\n // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch\n if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n return target;\n}\n\nexport function regexEscape(str) {\n /* eslint no-useless-escape: 0 */\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n\n/* eslint-disable */\nvar _entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': '"',\n \"'\": ''',\n \"/\": '/'\n};\n/* eslint-enable */\n\nexport function escape(data) {\n if (typeof data === 'string') {\n return data.replace(/[&<>\"'\\/]/g, function (s) {\n return _entityMap[s];\n });\n }\n\n return data;\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\nimport EventEmitter from './EventEmitter.js';\nimport * as utils from './utils.js';\n\nvar ResourceStore = function (_EventEmitter) {\n _inherits(ResourceStore, _EventEmitter);\n\n function ResourceStore(data) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { ns: ['translation'], defaultNS: 'translation' };\n\n _classCallCheck(this, ResourceStore);\n\n var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n _this.data = data || {};\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n return _this;\n }\n\n ResourceStore.prototype.addNamespaces = function addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n };\n\n ResourceStore.prototype.removeNamespaces = function removeNamespaces(ns) {\n var index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n };\n\n ResourceStore.prototype.getResource = function getResource(lng, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n\n var path = [lng, ns];\n if (key && typeof key !== 'string') path = path.concat(key);\n if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n }\n\n return utils.getPath(this.data, path);\n };\n\n ResourceStore.prototype.addResource = function addResource(lng, ns, key, value) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { silent: false };\n\n var keySeparator = this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = '.';\n\n var path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n\n utils.setPath(this.data, path, value);\n\n if (!options.silent) this.emit('added', lng, ns, key, value);\n };\n\n ResourceStore.prototype.addResources = function addResources(lng, ns, resources) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { silent: false };\n\n /* eslint no-restricted-syntax: 0 */\n for (var m in resources) {\n if (typeof resources[m] === 'string') this.addResource(lng, ns, m, resources[m], { silent: true });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n };\n\n ResourceStore.prototype.addResourceBundle = function addResourceBundle(lng, ns, resources, deep, overwrite) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : { silent: false };\n\n var path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n\n var pack = utils.getPath(this.data, path) || {};\n\n if (deep) {\n utils.deepExtend(pack, resources, overwrite);\n } else {\n pack = _extends({}, pack, resources);\n }\n\n utils.setPath(this.data, path, pack);\n\n if (!options.silent) this.emit('added', lng, ns, resources);\n };\n\n ResourceStore.prototype.removeResourceBundle = function removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n\n this.emit('removed', lng, ns);\n };\n\n ResourceStore.prototype.hasResourceBundle = function hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n };\n\n ResourceStore.prototype.getResourceBundle = function getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n\n // COMPATIBILITY: remove extend in v2.1.0\n if (this.options.compatibilityAPI === 'v1') return _extends({}, this.getResource(lng, ns));\n\n return this.getResource(lng, ns);\n };\n\n ResourceStore.prototype.getDataByLanguage = function getDataByLanguage(lng) {\n return this.data[lng];\n };\n\n ResourceStore.prototype.toJSON = function toJSON() {\n return this.data;\n };\n\n return ResourceStore;\n}(EventEmitter);\n\nexport default ResourceStore;","export default {\n\n processors: {},\n\n addPostProcessor: function addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle: function handle(processors, value, key, options, translator) {\n var _this = this;\n\n processors.forEach(function (processor) {\n if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n });\n\n return value;\n }\n};","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\nimport baseLogger from './logger.js';\nimport EventEmitter from './EventEmitter.js';\nimport postProcessor from './postProcessor.js';\nimport * as utils from './utils.js';\n\nvar Translator = function (_EventEmitter) {\n _inherits(Translator, _EventEmitter);\n\n function Translator(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Translator);\n\n var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n utils.copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat'], services, _this);\n\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n\n _this.logger = baseLogger.create('translator');\n return _this;\n }\n\n Translator.prototype.changeLanguage = function changeLanguage(lng) {\n if (lng) this.language = lng;\n };\n\n Translator.prototype.exists = function exists(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { interpolation: {} };\n\n var resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n };\n\n Translator.prototype.extractFromKey = function extractFromKey(key, options) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n\n var namespaces = options.ns || this.options.defaultNS;\n if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n var parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n if (typeof namespaces === 'string') namespaces = [namespaces];\n\n return {\n key: key,\n namespaces: namespaces\n };\n };\n\n Translator.prototype.translate = function translate(keys, options) {\n var _this2 = this;\n\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object' && this.options.overloadTranslationOptionHandler) {\n /* eslint prefer-rest-params: 0 */\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (!options) options = {};\n\n // non valid keys handling\n if (keys === undefined || keys === null || keys === '') return '';\n if (typeof keys === 'number') keys = String(keys);\n if (typeof keys === 'string') keys = [keys];\n\n // separators\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n\n // get namespace(s)\n\n var _extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n key = _extractFromKey.key,\n namespaces = _extractFromKey.namespaces;\n\n var namespace = namespaces[namespaces.length - 1];\n\n // return key on CIMode\n var lng = options.lng || this.language;\n var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n return namespace + nsSeparator + key;\n }\n\n return key;\n }\n\n // resolve from store\n var resolved = this.resolve(keys, options);\n var res = resolved && resolved.res;\n var resUsedKey = resolved && resolved.usedKey || key;\n\n var resType = Object.prototype.toString.apply(res);\n var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n\n // object\n var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(joinArrays && resType === '[object Array]')) {\n if (!options.returnObjects && !this.options.returnObjects) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, options) : 'key \\'' + key + ' (' + this.language + ')\\' returned an object instead of string.';\n }\n\n // if we got a separator we loop over children - else we just return object as is\n // as having it set to false means no hierarchy so no lookup for nested values\n if (keySeparator) {\n var copy = resType === '[object Array]' ? [] : {}; // apply child translation on a copy\n\n /* eslint no-restricted-syntax: 0 */\n for (var m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n var deepKey = '' + resUsedKey + keySeparator + m;\n copy[m] = this.translate(deepKey, _extends({}, options, { joinArrays: false, ns: namespaces }));\n if (copy[m] === deepKey) copy[m] = res[m]; // if nothing found use orginal value as fallback\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && joinArrays && resType === '[object Array]') {\n // array special treatment\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options);\n } else {\n // string, empty or null\n var usedDefault = false;\n var usedKey = false;\n\n // fallback value\n if (!this.isValidLookup(res) && options.defaultValue !== undefined) {\n usedDefault = true;\n\n if (options.count !== undefined) {\n var suffix = this.pluralResolver.getSuffix(lng, options.count);\n res = options['defaultValue' + suffix];\n }\n if (!res) res = options.defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n\n // save missing\n var updateMissing = options.defaultValue && options.defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? options.defaultValue : res);\n\n var lngs = [];\n var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (var i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n\n var send = function send(l, k) {\n if (_this2.options.missingKeyHandler) {\n _this2.options.missingKeyHandler(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n _this2.backendConnector.saveMissing(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n }\n _this2.emit('missingKey', l, namespace, k, res);\n };\n\n if (this.options.saveMissing) {\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(function (l) {\n var plurals = _this2.pluralResolver.getPluralFormsOfKey(l, key);\n\n plurals.forEach(function (p) {\n return send([l], p);\n });\n });\n } else {\n send(lngs, key);\n }\n }\n }\n\n // extend\n res = this.extendTranslation(res, keys, options, resolved);\n\n // append namespace if still key\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = namespace + ':' + key;\n\n // parseMissingKeyHandler\n if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n }\n\n // return\n return res;\n };\n\n Translator.prototype.extendTranslation = function extendTranslation(res, key, options, resolved) {\n var _this3 = this;\n\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, options, resolved.usedLng, resolved.usedNS, resolved.usedKey, { resolved: resolved });\n } else if (!options.skipInterpolation) {\n // i18next.parsing\n if (options.interpolation) this.interpolator.init(_extends({}, options, { interpolation: _extends({}, this.options.interpolation, options.interpolation) }));\n\n // interpolate\n var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = _extends({}, this.options.interpolation.defaultVariables, data);\n res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n\n // nesting\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n return _this3.translate.apply(_this3, arguments);\n }, options);\n\n if (options.interpolation) this.interpolator.reset();\n }\n\n // post process\n var postProcess = options.postProcess || this.options.postProcess;\n var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, options, this);\n }\n\n return res;\n };\n\n Translator.prototype.resolve = function resolve(keys) {\n var _this4 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var found = void 0;\n var usedKey = void 0;\n var usedLng = void 0;\n var usedNS = void 0;\n\n if (typeof keys === 'string') keys = [keys];\n\n // forEach possible key\n keys.forEach(function (k) {\n if (_this4.isValidLookup(found)) return;\n var extracted = _this4.extractFromKey(k, options);\n var key = extracted.key;\n usedKey = key;\n var namespaces = extracted.namespaces;\n if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';\n\n var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n\n namespaces.forEach(function (ns) {\n if (_this4.isValidLookup(found)) return;\n usedNS = ns;\n\n codes.forEach(function (code) {\n if (_this4.isValidLookup(found)) return;\n usedLng = code;\n\n var finalKey = key;\n var finalKeys = [finalKey];\n\n if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n var pluralSuffix = void 0;\n if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count);\n\n // fallback for plural if context not found\n if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix);\n\n // get key for context if needed\n if (needsContextHandling) finalKeys.push(finalKey += '' + _this4.options.contextSeparator + options.context);\n\n // get key for plural if needed\n if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n }\n\n // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only\n var possibleKey = void 0;\n /* eslint no-cond-assign: 0 */\n while (possibleKey = finalKeys.pop()) {\n if (!_this4.isValidLookup(found)) {\n found = _this4.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n\n return { res: found, usedKey: usedKey, usedLng: usedLng, usedNS: usedNS };\n };\n\n Translator.prototype.isValidLookup = function isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n };\n\n Translator.prototype.getResource = function getResource(code, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n };\n\n return Translator;\n}(EventEmitter);\n\nexport default Translator;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport baseLogger from './logger.js';\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtil = function () {\n function LanguageUtil(options) {\n _classCallCheck(this, LanguageUtil);\n\n this.options = options;\n\n this.whitelist = this.options.whitelist || false;\n this.logger = baseLogger.create('languageUtils');\n }\n\n LanguageUtil.prototype.getScriptPartFromCode = function getScriptPartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return null;\n\n var p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n return this.formatLanguageCode(p.join('-'));\n };\n\n LanguageUtil.prototype.getLanguagePartFromCode = function getLanguagePartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return code;\n\n var p = code.split('-');\n return this.formatLanguageCode(p[0]);\n };\n\n LanguageUtil.prototype.formatLanguageCode = function formatLanguageCode(code) {\n // http://www.iana.org/assignments/language-tags/language-tags.xhtml\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n var p = code.split('-');\n\n if (this.options.lowerCaseLng) {\n p = p.map(function (part) {\n return part.toLowerCase();\n });\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n\n // if lenght 2 guess it's a country\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n\n return p.join('-');\n }\n\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n };\n\n LanguageUtil.prototype.isWhitelisted = function isWhitelisted(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitWhitelist) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.whitelist || !this.whitelist.length || this.whitelist.indexOf(code) > -1;\n };\n\n LanguageUtil.prototype.getFallbackCodes = function getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n\n if (!code) return fallbacks.default || [];\n\n // asume we have an object defining fallbacks\n var found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks.default;\n\n return found || [];\n };\n\n LanguageUtil.prototype.toResolveHierarchy = function toResolveHierarchy(code, fallbackCode) {\n var _this = this;\n\n var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n\n var codes = [];\n var addCode = function addCode(c) {\n if (!c) return;\n if (_this.isWhitelisted(c)) {\n codes.push(c);\n } else {\n _this.logger.warn('rejecting non-whitelisted language code: ' + c);\n }\n };\n\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === 'string') {\n addCode(this.formatLanguageCode(code));\n }\n\n fallbackCodes.forEach(function (fc) {\n if (codes.indexOf(fc) < 0) addCode(_this.formatLanguageCode(fc));\n });\n\n return codes;\n };\n\n return LanguageUtil;\n}();\n\nexport default LanguageUtil;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport baseLogger from './logger.js';\n\n// definition http://translate.sourceforge.net/wiki/l10n/pluralforms\n/* eslint-disable */\nvar sets = [{ lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'ti', 'tr', 'uz', 'wa'], nr: [1, 2], fc: 1 }, { lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'he', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'], nr: [1, 2], fc: 2 }, { lngs: ['ay', 'bo', 'cgg', 'fa', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'], nr: [1], fc: 3 }, { lngs: ['be', 'bs', 'dz', 'hr', 'ru', 'sr', 'uk'], nr: [1, 2, 5], fc: 4 }, { lngs: ['ar'], nr: [0, 1, 2, 3, 11, 100], fc: 5 }, { lngs: ['cs', 'sk'], nr: [1, 2, 5], fc: 6 }, { lngs: ['csb', 'pl'], nr: [1, 2, 5], fc: 7 }, { lngs: ['cy'], nr: [1, 2, 3, 8], fc: 8 }, { lngs: ['fr'], nr: [1, 2], fc: 9 }, { lngs: ['ga'], nr: [1, 2, 3, 7, 11], fc: 10 }, { lngs: ['gd'], nr: [1, 2, 3, 20], fc: 11 }, { lngs: ['is'], nr: [1, 2], fc: 12 }, { lngs: ['jv'], nr: [0, 1], fc: 13 }, { lngs: ['kw'], nr: [1, 2, 3, 4], fc: 14 }, { lngs: ['lt'], nr: [1, 2, 10], fc: 15 }, { lngs: ['lv'], nr: [1, 2, 0], fc: 16 }, { lngs: ['mk'], nr: [1, 2], fc: 17 }, { lngs: ['mnk'], nr: [0, 1, 2], fc: 18 }, { lngs: ['mt'], nr: [1, 2, 11, 20], fc: 19 }, { lngs: ['or'], nr: [2, 1], fc: 2 }, { lngs: ['ro'], nr: [1, 2, 20], fc: 20 }, { lngs: ['sl'], nr: [5, 1, 2, 3], fc: 21 }];\n\nvar _rulesPluralsTypes = {\n 1: function _(n) {\n return Number(n > 1);\n },\n 2: function _(n) {\n return Number(n != 1);\n },\n 3: function _(n) {\n return 0;\n },\n 4: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function _(n) {\n return Number(n === 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function _(n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function _(n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function _(n) {\n return Number(n >= 2);\n },\n 10: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function _(n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function _(n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function _(n) {\n return Number(n !== 0);\n },\n 14: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function _(n) {\n return Number(n == 1 || n % 10 == 1 ? 0 : 1);\n },\n 18: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function _(n) {\n return Number(n == 1 ? 0 : n === 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function _(n) {\n return Number(n == 1 ? 0 : n === 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function _(n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n },\n 22: function _(n) {\n return Number(n === 1 ? 0 : n === 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n }\n};\n/* eslint-enable */\n\nfunction createRules() {\n var rules = {};\n sets.forEach(function (set) {\n set.lngs.forEach(function (l) {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\n\nvar PluralResolver = function () {\n function PluralResolver(languageUtils) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, PluralResolver);\n\n this.languageUtils = languageUtils;\n this.options = options;\n\n this.logger = baseLogger.create('pluralResolver');\n\n this.rules = createRules();\n }\n\n PluralResolver.prototype.addRule = function addRule(lng, obj) {\n this.rules[lng] = obj;\n };\n\n PluralResolver.prototype.getRule = function getRule(code) {\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n };\n\n PluralResolver.prototype.needsPlural = function needsPlural(code) {\n var rule = this.getRule(code);\n\n return rule && rule.numbers.length > 1;\n };\n\n PluralResolver.prototype.getPluralFormsOfKey = function getPluralFormsOfKey(code, key) {\n var _this = this;\n\n var ret = [];\n\n var rule = this.getRule(code);\n\n if (!rule) return ret;\n\n rule.numbers.forEach(function (n) {\n var suffix = _this.getSuffix(code, n);\n ret.push('' + key + suffix);\n });\n\n return ret;\n };\n\n PluralResolver.prototype.getSuffix = function getSuffix(code, count) {\n var _this2 = this;\n\n var rule = this.getRule(code);\n\n if (rule) {\n // if (rule.numbers.length === 1) return ''; // only singular\n\n var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n var suffix = rule.numbers[idx];\n\n // special treatment for lngs only having singular and plural\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n\n var returnSuffix = function returnSuffix() {\n return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n };\n\n // COMPATIBILITY JSON\n // v1\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return '_plural_' + suffix.toString();\n return returnSuffix();\n } else if ( /* v2 */this.options.compatibilityJSON === 'v2' && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n } else if ( /* v3 - gettext index */this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n\n this.logger.warn('no plural rule found for: ' + code);\n return '';\n };\n\n return PluralResolver;\n}();\n\nexport default PluralResolver;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport * as utils from './utils.js';\nimport baseLogger from './logger.js';\n\nvar Interpolator = function () {\n function Interpolator() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Interpolator);\n\n this.logger = baseLogger.create('interpolator');\n\n this.init(options, true);\n }\n\n /* eslint no-param-reassign: 0 */\n\n\n Interpolator.prototype.init = function init() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var reset = arguments[1];\n\n if (reset) {\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || function (value) {\n return value;\n };\n }\n if (!options.interpolation) options.interpolation = { escapeValue: true };\n\n var iOpts = options.interpolation;\n\n this.escape = iOpts.escape !== undefined ? iOpts.escape : utils.escape;\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n\n this.prefix = iOpts.prefix ? utils.regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n this.suffix = iOpts.suffix ? utils.regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n\n this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n\n this.nestingPrefix = iOpts.nestingPrefix ? utils.regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || utils.regexEscape('$t(');\n this.nestingSuffix = iOpts.nestingSuffix ? utils.regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || utils.regexEscape(')');\n\n this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n\n // the regexp\n this.resetRegExp();\n };\n\n Interpolator.prototype.reset = function reset() {\n if (this.options) this.init(this.options);\n };\n\n Interpolator.prototype.resetRegExp = function resetRegExp() {\n // the regexp\n var regexpStr = this.prefix + '(.+?)' + this.suffix;\n this.regexp = new RegExp(regexpStr, 'g');\n\n var regexpUnescapeStr = '' + this.prefix + this.unescapePrefix + '(.+?)' + this.unescapeSuffix + this.suffix;\n this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n\n var nestingRegexpStr = this.nestingPrefix + '(.+?)' + this.nestingSuffix;\n this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n };\n\n Interpolator.prototype.interpolate = function interpolate(str, data, lng, options) {\n var _this = this;\n\n var match = void 0;\n var value = void 0;\n var replaces = void 0;\n\n function regexSafe(val) {\n return val.replace(/\\$/g, '$$$$');\n }\n\n var handleFormat = function handleFormat(key) {\n if (key.indexOf(_this.formatSeparator) < 0) return utils.getPath(data, key);\n\n var p = key.split(_this.formatSeparator);\n var k = p.shift().trim();\n var f = p.join(_this.formatSeparator).trim();\n\n return _this.format(utils.getPath(data, k), f, lng);\n };\n\n this.resetRegExp();\n\n var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n\n replaces = 0;\n // unescape if has unescapePrefix/Suffix\n /* eslint no-cond-assign: 0 */\n while (match = this.regexpUnescape.exec(str)) {\n value = handleFormat(match[1].trim());\n str = str.replace(match[0], value);\n this.regexpUnescape.lastIndex = 0;\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n\n replaces = 0;\n // regular escape on demand\n while (match = this.regexp.exec(str)) {\n value = handleFormat(match[1].trim());\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n var temp = missingInterpolationHandler(str, match);\n value = typeof temp === 'string' ? temp : '';\n } else {\n this.logger.warn('missed to pass in variable ' + match[1] + ' for interpolating ' + str);\n value = '';\n }\n } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n value = utils.makeString(value);\n }\n value = this.escapeValue ? regexSafe(this.escape(value)) : regexSafe(value);\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n return str;\n };\n\n Interpolator.prototype.nest = function nest(str, fc) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var match = void 0;\n var value = void 0;\n\n var clonedOptions = _extends({}, options);\n clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup\n\n // if value is something like \"myKey\": \"lorem $(anotherKey, { \"count\": {{aValueInOptions}} })\"\n function handleHasOptions(key, inheritedOptions) {\n if (key.indexOf(',') < 0) return key;\n\n var p = key.split(',');\n key = p.shift();\n var optionsString = p.join(',');\n optionsString = this.interpolate(optionsString, clonedOptions);\n optionsString = optionsString.replace(/'/g, '\"');\n\n try {\n clonedOptions = JSON.parse(optionsString);\n\n if (inheritedOptions) clonedOptions = _extends({}, inheritedOptions, clonedOptions);\n } catch (e) {\n this.logger.error('failed parsing options string in nesting for key ' + key, e);\n }\n\n return key;\n }\n\n // regular escape on demand\n while (match = this.nestingRegexp.exec(str)) {\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n\n // is only the nesting key (key1 = '$(key2)') return the value without stringify\n if (value && match[0] === str && typeof value !== 'string') return value;\n\n // no string to include or empty\n if (typeof value !== 'string') value = utils.makeString(value);\n if (!value) {\n this.logger.warn('missed to resolve ' + match[1] + ' for nesting ' + str);\n value = '';\n }\n // Nested keys should not be escaped by default #854\n // value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n };\n\n return Interpolator;\n}();\n\nexport default Interpolator;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\nimport * as utils from './utils.js';\nimport baseLogger from './logger.js';\nimport EventEmitter from './EventEmitter.js';\n\nfunction remove(arr, what) {\n var found = arr.indexOf(what);\n\n while (found !== -1) {\n arr.splice(found, 1);\n found = arr.indexOf(what);\n }\n}\n\nvar Connector = function (_EventEmitter) {\n _inherits(Connector, _EventEmitter);\n\n function Connector(backend, store, services) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Connector);\n\n var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n _this.backend = backend;\n _this.store = store;\n _this.languageUtils = services.languageUtils;\n _this.options = options;\n _this.logger = baseLogger.create('backendConnector');\n\n _this.state = {};\n _this.queue = [];\n\n if (_this.backend && _this.backend.init) {\n _this.backend.init(services, options.backend, options);\n }\n return _this;\n }\n\n Connector.prototype.queueLoad = function queueLoad(languages, namespaces, options, callback) {\n var _this2 = this;\n\n // find what needs to be loaded\n var toLoad = [];\n var pending = [];\n var toLoadLanguages = [];\n var toLoadNamespaces = [];\n\n languages.forEach(function (lng) {\n var hasAllNamespaces = true;\n\n namespaces.forEach(function (ns) {\n var name = lng + '|' + ns;\n\n if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n _this2.state[name] = 2; // loaded\n } else if (_this2.state[name] < 0) {\n // nothing to do for err\n } else if (_this2.state[name] === 1) {\n if (pending.indexOf(name) < 0) pending.push(name);\n } else {\n _this2.state[name] = 1; // pending\n\n hasAllNamespaces = false;\n\n if (pending.indexOf(name) < 0) pending.push(name);\n if (toLoad.indexOf(name) < 0) toLoad.push(name);\n if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n }\n });\n\n if (!hasAllNamespaces) toLoadLanguages.push(lng);\n });\n\n if (toLoad.length || pending.length) {\n this.queue.push({\n pending: pending,\n loaded: {},\n errors: [],\n callback: callback\n });\n }\n\n return {\n toLoad: toLoad,\n pending: pending,\n toLoadLanguages: toLoadLanguages,\n toLoadNamespaces: toLoadNamespaces\n };\n };\n\n Connector.prototype.loaded = function loaded(name, err, data) {\n var _name$split = name.split('|'),\n _name$split2 = _slicedToArray(_name$split, 2),\n lng = _name$split2[0],\n ns = _name$split2[1];\n\n if (err) this.emit('failedLoading', lng, ns, err);\n\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n }\n\n // set loaded\n this.state[name] = err ? -1 : 2;\n\n // consolidated loading done in this run - only emit once for a loaded namespace\n var loaded = {};\n\n // callback if ready\n this.queue.forEach(function (q) {\n utils.pushPath(q.loaded, [lng], ns);\n remove(q.pending, name);\n\n if (err) q.errors.push(err);\n\n if (q.pending.length === 0 && !q.done) {\n // only do once per loaded -> this.emit('loaded', q.loaded);\n Object.keys(q.loaded).forEach(function (l) {\n if (!loaded[l]) loaded[l] = [];\n if (q.loaded[l].length) {\n q.loaded[l].forEach(function (ns) {\n if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);\n });\n }\n });\n\n /* eslint no-param-reassign: 0 */\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n\n // emit consolidated loaded event\n this.emit('loaded', loaded);\n\n // remove done load requests\n this.queue = this.queue.filter(function (q) {\n return !q.done;\n });\n };\n\n Connector.prototype.read = function read(lng, ns, fcName) {\n var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n var _this3 = this;\n\n var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n var callback = arguments[5];\n\n if (!lng.length) return callback(null, {}); // noting to load\n\n return this.backend[fcName](lng, ns, function (err, data) {\n if (err && data /* = retryFlag */ && tried < 5) {\n setTimeout(function () {\n _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n });\n };\n\n /* eslint consistent-return: 0 */\n\n\n Connector.prototype.prepareLoading = function prepareLoading(languages, namespaces) {\n var _this4 = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = arguments[3];\n\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n\n if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === 'string') namespaces = [namespaces];\n\n var toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now\n return null; // pendings will trigger callback\n }\n\n toLoad.toLoad.forEach(function (name) {\n _this4.loadOne(name);\n });\n };\n\n Connector.prototype.load = function load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n };\n\n Connector.prototype.reload = function reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, { reload: true }, callback);\n };\n\n Connector.prototype.loadOne = function loadOne(name) {\n var _this5 = this;\n\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n var _name$split3 = name.split('|'),\n _name$split4 = _slicedToArray(_name$split3, 2),\n lng = _name$split4[0],\n ns = _name$split4[1];\n\n this.read(lng, ns, 'read', null, null, function (err, data) {\n if (err) _this5.logger.warn(prefix + 'loading namespace ' + ns + ' for language ' + lng + ' failed', err);\n if (!err && data) _this5.logger.log(prefix + 'loaded namespace ' + ns + ' for language ' + lng, data);\n\n _this5.loaded(name, err, data);\n });\n };\n\n Connector.prototype.saveMissing = function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n if (this.backend && this.backend.create) {\n this.backend.create(languages, namespace, key, fallbackValue, null /* unused callback */, _extends({}, options, { isUpdate: isUpdate }));\n }\n\n // write to store to avoid resending\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n };\n\n return Connector;\n}(EventEmitter);\n\nexport default Connector;","export { get };\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false, // string or array of namespaces\n\n whitelist: false, // array with whitelisted languages\n nonExplicitWhitelist: false,\n load: 'all', // | currentOnly | languageOnly\n preload: false, // array with preload languages\n\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n\n saveMissing: false, // enable to send missing values\n updateMissing: false, // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth)\n saveMissingTo: 'fallback', // 'current' || 'all'\n saveMissingPlurals: true, // will save all forms not only singular key\n missingKeyHandler: false, // function(lng, ns, key, fallbackValue) -> override if prefer on handling\n missingInterpolationHandler: false, // function(str, match)\n\n postProcess: false, // string or array of postProcessor names\n returnNull: true, // allows null value as valid translation\n returnEmptyString: true, // allows empty string value as valid translation\n returnObjects: false,\n joinArrays: false, // or string to join array\n returnedObjectHandler: function returnedObjectHandler() {}, // function(key, value, options) triggered if key returns object but returnObjects is set to false\n parseMissingKeyHandler: false, // function(key) parsed a key that was not found in t() before returning\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n var ret = {};\n if (args[1]) ret.defaultValue = args[1];\n if (args[2]) ret.tDescription = args[2];\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: function format(value, _format, lng) {\n return value;\n },\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n // prefixEscaped: '{{',\n // suffixEscaped: '}}',\n // unescapeSuffix: '',\n unescapePrefix: '-',\n\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n // nestingPrefixEscaped: '$t(',\n // nestingSuffixEscaped: ')',\n // defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data\n maxReplaces: 1000 // max replaces to prevent endless loop\n }\n };\n}\n\n/* eslint no-param-reassign: 0 */\nexport function transformOptions(options) {\n // create namespace object if namespace is passed in as string\n if (typeof options.ns === 'string') options.ns = [options.ns];\n if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n\n // extend whitelist with cimode\n if (options.whitelist && options.whitelist.indexOf('cimode') < 0) {\n options.whitelist = options.whitelist.concat(['cimode']);\n }\n\n return options;\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\nimport baseLogger from './logger.js';\nimport EventEmitter from './EventEmitter.js';\nimport ResourceStore from './ResourceStore.js';\nimport Translator from './Translator.js';\nimport LanguageUtils from './LanguageUtils.js';\nimport PluralResolver from './PluralResolver.js';\nimport Interpolator from './Interpolator.js';\nimport BackendConnector from './BackendConnector.js';\nimport { get as getDefaults, transformOptions } from './defaults.js';\nimport postProcessor from './postProcessor.js';\n\nfunction noop() {}\n\nvar I18n = function (_EventEmitter) {\n _inherits(I18n, _EventEmitter);\n\n function I18n() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments[1];\n\n _classCallCheck(this, I18n);\n\n var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n _this.options = transformOptions(options);\n _this.services = {};\n _this.logger = baseLogger;\n _this.modules = { external: [] };\n\n if (callback && !_this.isInitialized && !options.isClone) {\n var _ret;\n\n // https://github.com/i18next/i18next/issues/879\n if (!_this.options.initImmediate) return _ret = _this.init(options, callback), _possibleConstructorReturn(_this, _ret);\n setTimeout(function () {\n _this.init(options, callback);\n }, 0);\n }\n return _this;\n }\n\n I18n.prototype.init = function init() {\n var _this2 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments[1];\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n this.options = _extends({}, getDefaults(), this.options, transformOptions(options));\n\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n\n function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n }\n\n // init services\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n\n var lu = new LanguageUtils(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n\n var s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, { prepend: this.options.pluralSeparator, compatibilityJSON: this.options.compatibilityJSON, simplifyPluralSuffix: this.options.simplifyPluralSuffix });\n s.interpolator = new Interpolator(this.options);\n\n s.backendConnector = new BackendConnector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n // pipe events from backendConnector\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n s.languageDetector.init(s, this.options.detection, this.options);\n }\n\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n\n this.translator = new Translator(this.services, this.options);\n // pipe events from translator\n this.translator.on('*', function (event) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n\n this.modules.external.forEach(function (m) {\n if (m.init) m.init(_this2);\n });\n }\n\n // append api\n var storeApi = ['getResource', 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(function (fcName) {\n _this2[fcName] = function () {\n var _store;\n\n return (_store = _this2.store)[fcName].apply(_store, arguments);\n };\n });\n\n var load = function load() {\n _this2.changeLanguage(_this2.options.lng, function (err, t) {\n _this2.isInitialized = true;\n _this2.logger.log('initialized', _this2.options);\n _this2.emit('initialized', _this2.options);\n\n callback(err, t);\n });\n };\n\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n\n return this;\n };\n\n /* eslint consistent-return: 0 */\n\n\n I18n.prototype.loadResources = function loadResources() {\n var _this3 = this;\n\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n\n if (!this.options.resources) {\n if (this.language && this.language.toLowerCase() === 'cimode') return callback(); // avoid loading resources for cimode\n\n var toLoad = [];\n\n var append = function append(lng) {\n if (!lng) return;\n var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n\n if (!this.language) {\n // at least load fallbacks in this case\n var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(function (l) {\n return append(l);\n });\n } else {\n append(this.language);\n }\n\n if (this.options.preload) {\n this.options.preload.forEach(function (l) {\n return append(l);\n });\n }\n\n this.services.backendConnector.load(toLoad, this.options.ns, callback);\n } else {\n callback(null);\n }\n };\n\n I18n.prototype.reloadResources = function reloadResources(lngs, ns, callback) {\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = function callback() {};\n this.services.backendConnector.reload(lngs, ns, callback);\n };\n\n I18n.prototype.use = function use(module) {\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n\n return this;\n };\n\n I18n.prototype.changeLanguage = function changeLanguage(lng, callback) {\n var _this4 = this;\n\n var done = function done(err, l) {\n _this4.translator.changeLanguage(l);\n\n if (l) {\n _this4.emit('languageChanged', l);\n _this4.logger.log('languageChanged', l);\n }\n\n if (callback) callback(err, function () {\n return _this4.t.apply(_this4, arguments);\n });\n };\n\n var setLng = function setLng(l) {\n if (l) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n\n if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n }\n\n _this4.loadResources(function (err) {\n done(err, l);\n });\n };\n\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n this.services.languageDetector.detect(setLng);\n } else {\n setLng(lng);\n }\n };\n\n I18n.prototype.getFixedT = function getFixedT(lng, ns) {\n var _this5 = this;\n\n var fixedT = function fixedT(key, opts) {\n for (var _len3 = arguments.length, rest = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n\n var options = _extends({}, opts);\n if ((typeof opts === 'undefined' ? 'undefined' : _typeof(opts)) !== 'object') {\n options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n }\n\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n return _this5.t(key, options);\n };\n if (typeof lng === 'string') {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n return fixedT;\n };\n\n I18n.prototype.t = function t() {\n var _translator;\n\n return this.translator && (_translator = this.translator).translate.apply(_translator, arguments);\n };\n\n I18n.prototype.exists = function exists() {\n var _translator2;\n\n return this.translator && (_translator2 = this.translator).exists.apply(_translator2, arguments);\n };\n\n I18n.prototype.setDefaultNamespace = function setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n };\n\n I18n.prototype.loadNamespaces = function loadNamespaces(ns, callback) {\n var _this6 = this;\n\n if (!this.options.ns) return callback && callback();\n if (typeof ns === 'string') ns = [ns];\n\n ns.forEach(function (n) {\n if (_this6.options.ns.indexOf(n) < 0) _this6.options.ns.push(n);\n });\n\n this.loadResources(callback);\n };\n\n I18n.prototype.loadLanguages = function loadLanguages(lngs, callback) {\n if (typeof lngs === 'string') lngs = [lngs];\n var preloaded = this.options.preload || [];\n\n var newLngs = lngs.filter(function (lng) {\n return preloaded.indexOf(lng) < 0;\n });\n // Exit early if all given languages are already preloaded\n if (!newLngs.length) return callback();\n\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(callback);\n };\n\n I18n.prototype.dir = function dir(lng) {\n if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n if (!lng) return 'rtl';\n\n var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];\n\n return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';\n };\n\n /* eslint class-methods-use-this: 0 */\n\n\n I18n.prototype.createInstance = function createInstance() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments[1];\n\n return new I18n(options, callback);\n };\n\n I18n.prototype.cloneInstance = function cloneInstance() {\n var _this7 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n var mergedOptions = _extends({}, this.options, options, { isClone: true });\n var clone = new I18n(mergedOptions);\n var membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(function (m) {\n clone[m] = _this7[m];\n });\n clone.translator = new Translator(clone.services, clone.options);\n clone.translator.on('*', function (event) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n clone.emit.apply(clone, [event].concat(args));\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = clone.options; // sync options\n\n return clone;\n };\n\n return I18n;\n}(EventEmitter);\n\nexport default new I18n();","import i18next from 'i18next';\r\nimport keys from 'lodash/keys';\r\nimport reduce from 'lodash/reduce';\r\nimport common from './common';\r\nimport commonTranslation from '../translations/common';\r\nimport reviewImages from '../translations/reviewImages';\r\nimport customFeesLordgun from '../translations/customFees.lordgun';\r\nimport customFeesRunkd from '../translations/customFees.runkd';\r\nimport customFeesInwild from '../translations/customFees.inwild';\r\nimport cartStep1 from '../translations/cartStep1';\r\nimport cartStep2Lordgun from '../translations/cartStep2.lordgun';\r\nimport cartStep2Inwild from '../translations/cartStep2.inwild';\r\nimport cartStep2Runkd from '../translations/cartStep2.runkd';\r\nimport reassortmentNotification from '../translations/reassortmentNotification';\r\nimport paymentInfo from '../translations/paymentInfo';\r\nimport nicknameValidator from '../translations/nicknameValidator';\r\nimport disbursementSimulator from '../translations/disbursementSimulator';\r\nimport cookieConsentLordgun from '../translations/cookieConsent.lordgun';\r\nimport cookieConsentRunkd from '../translations/cookieConsent.runkd';\r\nimport cookieConsentInwild from '../translations/cookieConsent.inwild';\r\nimport socialLinks from '../translations/socialLinks';\r\nimport blog from '../translations/blog/blog';\r\nimport productCard from '../translations/productCard';\r\nimport recentlyViewedProducts from '../translations/product/recentlyViewedProducts';\r\nimport productDetail from '../translations/product/detail';\r\nimport carousel from '../translations/carousel';\r\nimport topBrands from '../translations/brands/topBrands';\r\nimport cartRightSummary from '../translations/cartRightSummary';\r\nimport topBlogPosts from '../translations/blog/topBlogPosts';\r\nimport serviceLinks from '../translations/serviceLinks';\r\nimport reviews from '../translations/reviews/reviews';\r\nimport questions from '../translations/questionAndAnswers/questions';\r\nimport feedbacks from '../translations/feedbacks/feedbacks';\r\nimport bannerRedirectLordgun from '../translations/bannerRedirect.lordgun';\r\nimport bannerRedirectRunkd from '../translations/bannerRedirect.runkd';\r\nimport bannerRedirectInwild from '../translations/bannerRedirect.inwild';\r\nimport form from '../translations/form/form';\r\nimport home from '../translations/home/homeTranslations';\r\nimport orders from '../translations/orders/orders';\r\nimport returns from '../translations/returns/returns';\r\nimport search from '../translations/search';\r\nimport newsletter from '../translations/newsletter';\r\nimport lowerPrice from '../translations/product/lowerPrice';\r\n\r\nconst configHelper = require('../config/index.js');\r\n\r\nlet initialized = false;\r\nconst commonTranslations = [\r\n { reviewImages },\r\n { common: commonTranslation },\r\n { cartStep1 },\r\n { reassortmentNotification },\r\n { nicknameValidator },\r\n { disbursementSimulator },\r\n { paymentInfo },\r\n { socialLinks },\r\n { blog },\r\n { productCard },\r\n { recentlyViewedProducts },\r\n { carousel },\r\n { topBrands },\r\n { cartRightSummary },\r\n { topBlogPosts },\r\n { serviceLinks },\r\n { productDetail },\r\n { reviews },\r\n { questions },\r\n { feedbacks },\r\n { form },\r\n { home },\r\n { orders },\r\n { returns },\r\n { search },\r\n { newsletter },\r\n { lowerPrice },\r\n];\r\nconst translationsForLordgun = commonTranslations.concat([\r\n { customFees: customFeesLordgun },\r\n { cookieConsent: cookieConsentLordgun },\r\n { bannerRedirect: bannerRedirectLordgun },\r\n { cartStep2: cartStep2Lordgun },\r\n]);\r\nconst translationsForRunkd = commonTranslations.concat([\r\n { customFees: customFeesRunkd },\r\n { cookieConsent: cookieConsentRunkd },\r\n { bannerRedirect: bannerRedirectRunkd },\r\n { cartStep2: cartStep2Runkd },\r\n]);\r\nconst translationsForInwild = commonTranslations.concat([\r\n { customFees: customFeesInwild },\r\n { cookieConsent: cookieConsentInwild },\r\n { bannerRedirect: bannerRedirectInwild },\r\n { cartStep2: cartStep2Inwild },\r\n]);\r\nlet translations;\r\n\r\nswitch (common.getSite()) {\r\n case 'lordgun':\r\n translations = translationsForLordgun;\r\n break;\r\n case 'runkd':\r\n translations = translationsForRunkd;\r\n break;\r\n case 'inwild':\r\n translations = translationsForInwild;\r\n break;\r\n}\r\n\r\nconst getMappedTranslation = (culture, translations) => {\r\n const mappedTranslation = reduce(\r\n translations,\r\n (acc, translation) => {\r\n let key = keys(translation)[0];\r\n acc[key] = translation[key][culture];\r\n return acc;\r\n },\r\n {}\r\n );\r\n return mappedTranslation;\r\n};\r\n\r\nconst init = () => {\r\n if (initialized === false) {\r\n let staticResources = reduce(\r\n configHelper.getConfig().supportedCultures(),\r\n (acc, culture) => {\r\n acc[culture] = {\r\n translation: getMappedTranslation(culture, translations),\r\n };\r\n return acc;\r\n },\r\n {}\r\n );\r\n i18next.init({\r\n lng: common.getLang(),\r\n resources: staticResources,\r\n });\r\n initialized = true;\r\n }\r\n return initialized;\r\n};\r\n\r\nexport default {\r\n get: (key) => {\r\n if (init()) {\r\n const translation = i18next.t(key);\r\n return translation;\r\n }\r\n throw new Error('translateService not initialized');\r\n },\r\n interpolate: (key, params) => {\r\n if (init()) {\r\n let translation = i18next.t(key);\r\n translation = _.reduce(\r\n _.keys(params),\r\n (acc, paramKey) => {\r\n acc = _.replace(\r\n acc,\r\n `{${paramKey}}`,\r\n `${params[paramKey]}`\r\n );\r\n return acc;\r\n },\r\n translation\r\n );\r\n return translation;\r\n }\r\n throw new Error('translateService not initialized');\r\n },\r\n};\r\n","import i18next from './i18next.js';\n\nexport default i18next;\n\nexport var changeLanguage = i18next.changeLanguage.bind(i18next);\nexport var cloneInstance = i18next.cloneInstance.bind(i18next);\nexport var createInstance = i18next.createInstance.bind(i18next);\nexport var dir = i18next.dir.bind(i18next);\nexport var exists = i18next.exists.bind(i18next);\nexport var getFixedT = i18next.getFixedT.bind(i18next);\nexport var init = i18next.init.bind(i18next);\nexport var loadLanguages = i18next.loadLanguages.bind(i18next);\nexport var loadNamespaces = i18next.loadNamespaces.bind(i18next);\nexport var loadResources = i18next.loadResources.bind(i18next);\nexport var off = i18next.off.bind(i18next);\nexport var on = i18next.on.bind(i18next);\nexport var setDefaultNamespace = i18next.setDefaultNamespace.bind(i18next);\nexport var t = i18next.t.bind(i18next);\nexport var use = i18next.use.bind(i18next);","import qq from 'fine-uploader/lib/traditional';\r\nimport common from '../common/common';\r\nimport translateService from '../common/translateService';\r\n\r\nexport default {\r\n setup: ({\r\n id,\r\n onComplete,\r\n onDeleteComplete,\r\n onSubmitDelete,\r\n sizeLimit,\r\n }) => {\r\n var imageUploader = new qq.FineUploader({\r\n element: document.getElementById(id),\r\n template: 'qq-template-gallery',\r\n text: {},\r\n request: {\r\n endpoint: common.getSiteUrl() + '/upload/uploadfile',\r\n },\r\n messages: {\r\n typeError: translateService.get(\r\n 'reviewImages.messages.typeError'\r\n ),\r\n sizeError: translateService.get(\r\n 'reviewImages.messages.sizeError'\r\n ),\r\n emptyError: translateService.get(\r\n 'reviewImages.messages.emptyError'\r\n ),\r\n tooManyItemsError: translateService.get(\r\n 'reviewImages.messages.tooManyItemsError'\r\n ),\r\n // other messages can go here as well ...\r\n },\r\n validation: {\r\n allowedExtensions: ['jpeg', 'jpg', 'png', 'bmp'],\r\n itemLimit: 3,\r\n sizeLimit: sizeLimit || 3000000, // 3MB\r\n },\r\n deleteFile: {\r\n enabled: true,\r\n forceConfirm: true,\r\n confirmMessage: translateService.get(\r\n 'reviewImages.deleteFile.confirmMessage'\r\n ),\r\n endpoint: common.getSiteUrl() + '/image/delete',\r\n },\r\n callbacks: {\r\n onComplete,\r\n onDeleteComplete,\r\n onSubmitDelete,\r\n },\r\n });\r\n\r\n return imageUploader;\r\n },\r\n};\r\n","import $ from 'jquery';\r\nimport imageUploader from '../components/imageUploader';\r\nimport translateService from '../common/translateService';\r\n\r\nconst init = () => {\r\n const identifier = 'help-uploader';\r\n let btn = document.getElementById(identifier);\r\n if (btn !== null) {\r\n var galleryUploader = imageUploader.setup({\r\n id: identifier,\r\n onComplete: function (id, name, response) {\r\n $('#' + identifier).after(\r\n ''\r\n );\r\n },\r\n onDeleteComplete: function (id, xhr, isError) {\r\n if (isError === false) {\r\n $(\"input[name='Attachments[\" + id + \"]']\").remove();\r\n }\r\n },\r\n onSubmitDelete: function (id) {\r\n var item = $(\"input[name='Attachments[\" + id + \"]']\");\r\n if (item.length > 0) {\r\n var fileSystemId = item.val();\r\n this.setDeleteFileParams(\r\n { fileSystemId: fileSystemId },\r\n id\r\n );\r\n }\r\n },\r\n sizeLimit: 5000000,\r\n sizeError: translateService.get('helpUploader.messages.sizeError'),\r\n });\r\n\r\n $('.qq-upload-button-selector.qq-upload-button div').text(\r\n translateService.get('reviewImages.messages.attachYourImages')\r\n );\r\n $('.qq-uploader-selector.qq-uploader.qq-gallery').attr(\r\n 'qq-drop-area-text',\r\n translateService.get('reviewImages.messages.dropAreaText')\r\n );\r\n }\r\n};\r\n\r\nexport default {\r\n init,\r\n};\r\n","import helpUploader from './help/helpUploader';\r\nrequire('jquery-validation');\r\nwindow.onload = function () {\r\n helpUploader.init();\r\n};\r\n","/*!\r\n * modernizr v3.6.0\r\n * Build https://modernizr.com/download?-mq-dontmin\r\n *\r\n * Copyright (c)\r\n * Faruk Ates\r\n * Paul Irish\r\n * Alex Sexton\r\n * Ryan Seddon\r\n * Patrick Kettner\r\n * Stu Cox\r\n * Richard Herrera\r\n\r\n * MIT License\r\n */\r\n\r\n/*\r\n * Modernizr tests which native CSS3 and HTML5 features are available in the\r\n * current UA and makes the results available to you in two ways: as properties on\r\n * a global `Modernizr` object, and as classes on the `` element. This\r\n * information allows you to progressively enhance your pages with a granular level\r\n * of control over the experience.\r\n*/\r\n\r\n;(function(window, document, undefined){\r\n var tests = [];\r\n \r\n\r\n /**\r\n *\r\n * ModernizrProto is the constructor for Modernizr\r\n *\r\n * @class\r\n * @access public\r\n */\r\n\r\n var ModernizrProto = {\r\n // The current version, dummy\r\n _version: '3.6.0',\r\n\r\n // Any settings that don't work as separate modules\r\n // can go in here as configuration.\r\n _config: {\r\n 'classPrefix': '',\r\n 'enableClasses': true,\r\n 'enableJSClass': true,\r\n 'usePrefixes': true\r\n },\r\n\r\n // Queue of tests\r\n _q: [],\r\n\r\n // Stub these for people who are listening\r\n on: function(test, cb) {\r\n // I don't really think people should do this, but we can\r\n // safe guard it a bit.\r\n // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.\r\n // This is in case people listen to synchronous tests. I would leave it out,\r\n // but the code to *disallow* sync tests in the real version of this\r\n // function is actually larger than this.\r\n var self = this;\r\n setTimeout(function() {\r\n cb(self[test]);\r\n }, 0);\r\n },\r\n\r\n addTest: function(name, fn, options) {\r\n tests.push({name: name, fn: fn, options: options});\r\n },\r\n\r\n addAsyncTest: function(fn) {\r\n tests.push({name: null, fn: fn});\r\n }\r\n };\r\n\r\n \r\n\r\n // Fake some of Object.create so we can force non test results to be non \"own\" properties.\r\n var Modernizr = function() {};\r\n Modernizr.prototype = ModernizrProto;\r\n\r\n // Leak modernizr globally when you `require` it rather than force it here.\r\n // Overwrite name so constructor name is nicer :D\r\n Modernizr = new Modernizr();\r\n\r\n \r\n\r\n var classes = [];\r\n \r\n\r\n /**\r\n * is returns a boolean if the typeof an obj is exactly type.\r\n *\r\n * @access private\r\n * @function is\r\n * @param {*} obj - A thing we want to check the type of\r\n * @param {string} type - A string to compare the typeof against\r\n * @returns {boolean}\r\n */\r\n\r\n function is(obj, type) {\r\n return typeof obj === type;\r\n }\r\n ;\r\n\r\n /**\r\n * Run through all tests and detect their support in the current UA.\r\n *\r\n * @access private\r\n */\r\n\r\n function testRunner() {\r\n var featureNames;\r\n var feature;\r\n var aliasIdx;\r\n var result;\r\n var nameIdx;\r\n var featureName;\r\n var featureNameSplit;\r\n\r\n for (var featureIdx in tests) {\r\n if (tests.hasOwnProperty(featureIdx)) {\r\n featureNames = [];\r\n feature = tests[featureIdx];\r\n // run the test, throw the return value into the Modernizr,\r\n // then based on that boolean, define an appropriate className\r\n // and push it into an array of classes we'll join later.\r\n //\r\n // If there is no name, it's an 'async' test that is run,\r\n // but not directly added to the object. That should\r\n // be done with a post-run addTest call.\r\n if (feature.name) {\r\n featureNames.push(feature.name.toLowerCase());\r\n\r\n if (feature.options && feature.options.aliases && feature.options.aliases.length) {\r\n // Add all the aliases into the names list\r\n for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {\r\n featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());\r\n }\r\n }\r\n }\r\n\r\n // Run the test, or use the raw value if it's not a function\r\n result = is(feature.fn, 'function') ? feature.fn() : feature.fn;\r\n\r\n\r\n // Set each of the names on the Modernizr object\r\n for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {\r\n featureName = featureNames[nameIdx];\r\n // Support dot properties as sub tests. We don't do checking to make sure\r\n // that the implied parent tests have been added. You must call them in\r\n // order (either in the test, or make the parent test a dependency).\r\n //\r\n // Cap it to TWO to make the logic simple and because who needs that kind of subtesting\r\n // hashtag famous last words\r\n featureNameSplit = featureName.split('.');\r\n\r\n if (featureNameSplit.length === 1) {\r\n Modernizr[featureNameSplit[0]] = result;\r\n } else {\r\n // cast to a Boolean, if not one already\r\n if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\r\n Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\r\n }\r\n\r\n Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;\r\n }\r\n\r\n classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));\r\n }\r\n }\r\n }\r\n }\r\n ;\r\n\r\n /**\r\n * docElement is a convenience wrapper to grab the root element of the document\r\n *\r\n * @access private\r\n * @returns {HTMLElement|SVGElement} The root element of the document\r\n */\r\n\r\n var docElement = document.documentElement;\r\n \r\n\r\n /**\r\n * A convenience helper to check if the document we are running in is an SVG document\r\n *\r\n * @access private\r\n * @returns {boolean}\r\n */\r\n\r\n var isSVG = docElement.nodeName.toLowerCase() === 'svg';\r\n \r\n\r\n /**\r\n * createElement is a convenience wrapper around document.createElement. Since we\r\n * use createElement all over the place, this allows for (slightly) smaller code\r\n * as well as abstracting away issues with creating elements in contexts other than\r\n * HTML documents (e.g. SVG documents).\r\n *\r\n * @access private\r\n * @function createElement\r\n * @returns {HTMLElement|SVGElement} An HTML or SVG element\r\n */\r\n\r\n function createElement() {\r\n if (typeof document.createElement !== 'function') {\r\n // This is the case in IE7, where the type of createElement is \"object\".\r\n // For this reason, we cannot call apply() as Object is not a Function.\r\n return document.createElement(arguments[0]);\r\n } else if (isSVG) {\r\n return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);\r\n } else {\r\n return document.createElement.apply(document, arguments);\r\n }\r\n }\r\n\r\n ;\r\n\r\n /**\r\n * getBody returns the body of a document, or an element that can stand in for\r\n * the body if a real body does not exist\r\n *\r\n * @access private\r\n * @function getBody\r\n * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an\r\n * artificially created element that stands in for the body\r\n */\r\n\r\n function getBody() {\r\n // After page load injecting a fake body doesn't work so check if body exists\r\n var body = document.body;\r\n\r\n if (!body) {\r\n // Can't use the real body create a fake one.\r\n body = createElement(isSVG ? 'svg' : 'body');\r\n body.fake = true;\r\n }\r\n\r\n return body;\r\n }\r\n\r\n ;\r\n\r\n /**\r\n * injectElementWithStyles injects an element with style element and some CSS rules\r\n *\r\n * @access private\r\n * @function injectElementWithStyles\r\n * @param {string} rule - String representing a css rule\r\n * @param {function} callback - A function that is used to test the injected element\r\n * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\r\n * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\r\n * @returns {boolean}\r\n */\r\n\r\n function injectElementWithStyles(rule, callback, nodes, testnames) {\r\n var mod = 'modernizr';\r\n var style;\r\n var ret;\r\n var node;\r\n var docOverflow;\r\n var div = createElement('div');\r\n var body = getBody();\r\n\r\n if (parseInt(nodes, 10)) {\r\n // In order not to give false positives we create a node for each test\r\n // This also allows the method to scale for unspecified uses\r\n while (nodes--) {\r\n node = createElement('div');\r\n node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\r\n div.appendChild(node);\r\n }\r\n }\r\n\r\n style = createElement('style');\r\n style.type = 'text/css';\r\n style.id = 's' + mod;\r\n\r\n // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\r\n // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\r\n (!body.fake ? div : body).appendChild(style);\r\n body.appendChild(div);\r\n\r\n if (style.styleSheet) {\r\n style.styleSheet.cssText = rule;\r\n } else {\r\n style.appendChild(document.createTextNode(rule));\r\n }\r\n div.id = mod;\r\n\r\n if (body.fake) {\r\n //avoid crashing IE8, if background image is used\r\n body.style.background = '';\r\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\r\n body.style.overflow = 'hidden';\r\n docOverflow = docElement.style.overflow;\r\n docElement.style.overflow = 'hidden';\r\n docElement.appendChild(body);\r\n }\r\n\r\n ret = callback(div, rule);\r\n // If this is done after page load we don't want to remove the body so check if body exists\r\n if (body.fake) {\r\n body.parentNode.removeChild(body);\r\n docElement.style.overflow = docOverflow;\r\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\r\n // eslint-disable-next-line\r\n docElement.offsetHeight;\r\n } else {\r\n div.parentNode.removeChild(div);\r\n }\r\n\r\n return !!ret;\r\n\r\n }\r\n\r\n ;\r\n\r\n /**\r\n * Modernizr.mq tests a given media query, live against the current state of the window\r\n * adapted from matchMedia polyfill by Scott Jehl and Paul Irish\r\n * gist.github.com/786768\r\n *\r\n * @memberof Modernizr\r\n * @name Modernizr.mq\r\n * @optionName Modernizr.mq()\r\n * @optionProp mq\r\n * @access public\r\n * @function mq\r\n * @param {string} mq - String of the media query we want to test\r\n * @returns {boolean}\r\n * @example\r\n * Modernizr.mq allows for you to programmatically check if the current browser\r\n * window state matches a media query.\r\n *\r\n * ```js\r\n * var query = Modernizr.mq('(min-width: 900px)');\r\n *\r\n * if (query) {\r\n * // the browser window is larger than 900px\r\n * }\r\n * ```\r\n *\r\n * Only valid media queries are supported, therefore you must always include values\r\n * with your media query\r\n *\r\n * ```js\r\n * // good\r\n * Modernizr.mq('(min-width: 900px)');\r\n *\r\n * // bad\r\n * Modernizr.mq('min-width');\r\n * ```\r\n *\r\n * If you would just like to test that media queries are supported in general, use\r\n *\r\n * ```js\r\n * Modernizr.mq('only all'); // true if MQ are supported, false if not\r\n * ```\r\n *\r\n *\r\n * Note that if the browser does not support media queries (e.g. old IE) mq will\r\n * always return false.\r\n */\r\n\r\n var mq = (function() {\r\n var matchMedia = window.matchMedia || window.msMatchMedia;\r\n if (matchMedia) {\r\n return function(mq) {\r\n var mql = matchMedia(mq);\r\n return mql && mql.matches || false;\r\n };\r\n }\r\n\r\n return function(mq) {\r\n var bool = false;\r\n\r\n injectElementWithStyles('@media ' + mq + ' { #modernizr { position: absolute; } }', function(node) {\r\n bool = (window.getComputedStyle ?\r\n window.getComputedStyle(node, null) :\r\n node.currentStyle).position == 'absolute';\r\n });\r\n\r\n return bool;\r\n };\r\n })();\r\n\r\n\r\n ModernizrProto.mq = mq;\r\n\r\n \r\n\r\n // Run each test\r\n testRunner();\r\n\r\n delete ModernizrProto.addTest;\r\n delete ModernizrProto.addAsyncTest;\r\n\r\n // Run the things that are supposed to run after the tests\r\n for (var i = 0; i < Modernizr._q.length; i++) {\r\n Modernizr._q[i]();\r\n }\r\n\r\n // Leak Modernizr namespace\r\n window.Modernizr = Modernizr;\r\n\r\n\r\n;\r\n\r\n})(window, document);","// Fine Uploader 5.16.2 - MIT licensed. http://fineuploader.com\n(function(global) {\n var qq = function(element) {\n \"use strict\";\n return {\n hide: function() {\n element.style.display = \"none\";\n return this;\n },\n attach: function(type, fn) {\n if (element.addEventListener) {\n element.addEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.attachEvent(\"on\" + type, fn);\n }\n return function() {\n qq(element).detach(type, fn);\n };\n },\n detach: function(type, fn) {\n if (element.removeEventListener) {\n element.removeEventListener(type, fn, false);\n } else if (element.attachEvent) {\n element.detachEvent(\"on\" + type, fn);\n }\n return this;\n },\n contains: function(descendant) {\n if (!descendant) {\n return false;\n }\n if (element === descendant) {\n return true;\n }\n if (element.contains) {\n return element.contains(descendant);\n } else {\n return !!(descendant.compareDocumentPosition(element) & 8);\n }\n },\n insertBefore: function(elementB) {\n elementB.parentNode.insertBefore(element, elementB);\n return this;\n },\n remove: function() {\n element.parentNode.removeChild(element);\n return this;\n },\n css: function(styles) {\n if (element.style == null) {\n throw new qq.Error(\"Can't apply style to node as it is not on the HTMLElement prototype chain!\");\n }\n if (styles.opacity != null) {\n if (typeof element.style.opacity !== \"string\" && typeof element.filters !== \"undefined\") {\n styles.filter = \"alpha(opacity=\" + Math.round(100 * styles.opacity) + \")\";\n }\n }\n qq.extend(element.style, styles);\n return this;\n },\n hasClass: function(name, considerParent) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n return re.test(element.className) || !!(considerParent && re.test(element.parentNode.className));\n },\n addClass: function(name) {\n if (!qq(element).hasClass(name)) {\n element.className += \" \" + name;\n }\n return this;\n },\n removeClass: function(name) {\n var re = new RegExp(\"(^| )\" + name + \"( |$)\");\n element.className = element.className.replace(re, \" \").replace(/^\\s+|\\s+$/g, \"\");\n return this;\n },\n getByClass: function(className, first) {\n var candidates, result = [];\n if (first && element.querySelector) {\n return element.querySelector(\".\" + className);\n } else if (element.querySelectorAll) {\n return element.querySelectorAll(\".\" + className);\n }\n candidates = element.getElementsByTagName(\"*\");\n qq.each(candidates, function(idx, val) {\n if (qq(val).hasClass(className)) {\n result.push(val);\n }\n });\n return first ? result[0] : result;\n },\n getFirstByClass: function(className) {\n return qq(element).getByClass(className, true);\n },\n children: function() {\n var children = [], child = element.firstChild;\n while (child) {\n if (child.nodeType === 1) {\n children.push(child);\n }\n child = child.nextSibling;\n }\n return children;\n },\n setText: function(text) {\n element.innerText = text;\n element.textContent = text;\n return this;\n },\n clearText: function() {\n return qq(element).setText(\"\");\n },\n hasAttribute: function(attrName) {\n var attrVal;\n if (element.hasAttribute) {\n if (!element.hasAttribute(attrName)) {\n return false;\n }\n return /^false$/i.exec(element.getAttribute(attrName)) == null;\n } else {\n attrVal = element[attrName];\n if (attrVal === undefined) {\n return false;\n }\n return /^false$/i.exec(attrVal) == null;\n }\n }\n };\n };\n (function() {\n \"use strict\";\n qq.canvasToBlob = function(canvas, mime, quality) {\n return qq.dataUriToBlob(canvas.toDataURL(mime, quality));\n };\n qq.dataUriToBlob = function(dataUri) {\n var arrayBuffer, byteString, createBlob = function(data, mime) {\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder, blobBuilder = BlobBuilder && new BlobBuilder();\n if (blobBuilder) {\n blobBuilder.append(data);\n return blobBuilder.getBlob(mime);\n } else {\n return new Blob([ data ], {\n type: mime\n });\n }\n }, intArray, mimeString;\n if (dataUri.split(\",\")[0].indexOf(\"base64\") >= 0) {\n byteString = atob(dataUri.split(\",\")[1]);\n } else {\n byteString = decodeURI(dataUri.split(\",\")[1]);\n }\n mimeString = dataUri.split(\",\")[0].split(\":\")[1].split(\";\")[0];\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n qq.each(byteString, function(idx, character) {\n intArray[idx] = character.charCodeAt(0);\n });\n return createBlob(arrayBuffer, mimeString);\n };\n qq.log = function(message, level) {\n if (window.console) {\n if (!level || level === \"info\") {\n window.console.log(message);\n } else {\n if (window.console[level]) {\n window.console[level](message);\n } else {\n window.console.log(\"<\" + level + \"> \" + message);\n }\n }\n }\n };\n qq.isObject = function(variable) {\n return variable && !variable.nodeType && Object.prototype.toString.call(variable) === \"[object Object]\";\n };\n qq.isFunction = function(variable) {\n return typeof variable === \"function\";\n };\n qq.isArray = function(value) {\n return Object.prototype.toString.call(value) === \"[object Array]\" || value && window.ArrayBuffer && value.buffer && value.buffer.constructor === ArrayBuffer;\n };\n qq.isItemList = function(maybeItemList) {\n return Object.prototype.toString.call(maybeItemList) === \"[object DataTransferItemList]\";\n };\n qq.isNodeList = function(maybeNodeList) {\n return Object.prototype.toString.call(maybeNodeList) === \"[object NodeList]\" || maybeNodeList.item && maybeNodeList.namedItem;\n };\n qq.isString = function(maybeString) {\n return Object.prototype.toString.call(maybeString) === \"[object String]\";\n };\n qq.trimStr = function(string) {\n if (String.prototype.trim) {\n return string.trim();\n }\n return string.replace(/^\\s+|\\s+$/g, \"\");\n };\n qq.format = function(str) {\n var args = Array.prototype.slice.call(arguments, 1), newStr = str, nextIdxToReplace = newStr.indexOf(\"{}\");\n qq.each(args, function(idx, val) {\n var strBefore = newStr.substring(0, nextIdxToReplace), strAfter = newStr.substring(nextIdxToReplace + 2);\n newStr = strBefore + val + strAfter;\n nextIdxToReplace = newStr.indexOf(\"{}\", nextIdxToReplace + val.length);\n if (nextIdxToReplace < 0) {\n return false;\n }\n });\n return newStr;\n };\n qq.isFile = function(maybeFile) {\n return window.File && Object.prototype.toString.call(maybeFile) === \"[object File]\";\n };\n qq.isFileList = function(maybeFileList) {\n return window.FileList && Object.prototype.toString.call(maybeFileList) === \"[object FileList]\";\n };\n qq.isFileOrInput = function(maybeFileOrInput) {\n return qq.isFile(maybeFileOrInput) || qq.isInput(maybeFileOrInput);\n };\n qq.isInput = function(maybeInput, notFile) {\n var evaluateType = function(type) {\n var normalizedType = type.toLowerCase();\n if (notFile) {\n return normalizedType !== \"file\";\n }\n return normalizedType === \"file\";\n };\n if (window.HTMLInputElement) {\n if (Object.prototype.toString.call(maybeInput) === \"[object HTMLInputElement]\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n if (maybeInput.tagName) {\n if (maybeInput.tagName.toLowerCase() === \"input\") {\n if (maybeInput.type && evaluateType(maybeInput.type)) {\n return true;\n }\n }\n }\n return false;\n };\n qq.isBlob = function(maybeBlob) {\n if (window.Blob && Object.prototype.toString.call(maybeBlob) === \"[object Blob]\") {\n return true;\n }\n };\n qq.isXhrUploadSupported = function() {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n return input.multiple !== undefined && typeof File !== \"undefined\" && typeof FormData !== \"undefined\" && typeof qq.createXhrInstance().upload !== \"undefined\";\n };\n qq.createXhrInstance = function() {\n if (window.XMLHttpRequest) {\n return new XMLHttpRequest();\n }\n try {\n return new ActiveXObject(\"MSXML2.XMLHTTP.3.0\");\n } catch (error) {\n qq.log(\"Neither XHR or ActiveX are supported!\", \"error\");\n return null;\n }\n };\n qq.isFolderDropSupported = function(dataTransfer) {\n return dataTransfer.items && dataTransfer.items.length > 0 && dataTransfer.items[0].webkitGetAsEntry;\n };\n qq.isFileChunkingSupported = function() {\n return !qq.androidStock() && qq.isXhrUploadSupported() && (File.prototype.slice !== undefined || File.prototype.webkitSlice !== undefined || File.prototype.mozSlice !== undefined);\n };\n qq.sliceBlob = function(fileOrBlob, start, end) {\n var slicer = fileOrBlob.slice || fileOrBlob.mozSlice || fileOrBlob.webkitSlice;\n return slicer.call(fileOrBlob, start, end);\n };\n qq.arrayBufferToHex = function(buffer) {\n var bytesAsHex = \"\", bytes = new Uint8Array(buffer);\n qq.each(bytes, function(idx, byt) {\n var byteAsHexStr = byt.toString(16);\n if (byteAsHexStr.length < 2) {\n byteAsHexStr = \"0\" + byteAsHexStr;\n }\n bytesAsHex += byteAsHexStr;\n });\n return bytesAsHex;\n };\n qq.readBlobToHex = function(blob, startOffset, length) {\n var initialBlob = qq.sliceBlob(blob, startOffset, startOffset + length), fileReader = new FileReader(), promise = new qq.Promise();\n fileReader.onload = function() {\n promise.success(qq.arrayBufferToHex(fileReader.result));\n };\n fileReader.onerror = promise.failure;\n fileReader.readAsArrayBuffer(initialBlob);\n return promise;\n };\n qq.extend = function(first, second, extendNested) {\n qq.each(second, function(prop, val) {\n if (extendNested && qq.isObject(val)) {\n if (first[prop] === undefined) {\n first[prop] = {};\n }\n qq.extend(first[prop], val, true);\n } else {\n first[prop] = val;\n }\n });\n return first;\n };\n qq.override = function(target, sourceFn) {\n var super_ = {}, source = sourceFn(super_);\n qq.each(source, function(srcPropName, srcPropVal) {\n if (target[srcPropName] !== undefined) {\n super_[srcPropName] = target[srcPropName];\n }\n target[srcPropName] = srcPropVal;\n });\n return target;\n };\n qq.indexOf = function(arr, elt, from) {\n if (arr.indexOf) {\n return arr.indexOf(elt, from);\n }\n from = from || 0;\n var len = arr.length;\n if (from < 0) {\n from += len;\n }\n for (;from < len; from += 1) {\n if (arr.hasOwnProperty(from) && arr[from] === elt) {\n return from;\n }\n }\n return -1;\n };\n qq.getUniqueId = function() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : r & 3 | 8;\n return v.toString(16);\n });\n };\n qq.ie = function() {\n return navigator.userAgent.indexOf(\"MSIE\") !== -1 || navigator.userAgent.indexOf(\"Trident\") !== -1;\n };\n qq.ie7 = function() {\n return navigator.userAgent.indexOf(\"MSIE 7\") !== -1;\n };\n qq.ie8 = function() {\n return navigator.userAgent.indexOf(\"MSIE 8\") !== -1;\n };\n qq.ie10 = function() {\n return navigator.userAgent.indexOf(\"MSIE 10\") !== -1;\n };\n qq.ie11 = function() {\n return qq.ie() && navigator.userAgent.indexOf(\"rv:11\") !== -1;\n };\n qq.edge = function() {\n return navigator.userAgent.indexOf(\"Edge\") >= 0;\n };\n qq.safari = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Apple\") !== -1;\n };\n qq.chrome = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Google\") !== -1;\n };\n qq.opera = function() {\n return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Opera\") !== -1;\n };\n qq.firefox = function() {\n return !qq.edge() && !qq.ie11() && navigator.userAgent.indexOf(\"Mozilla\") !== -1 && navigator.vendor !== undefined && navigator.vendor === \"\";\n };\n qq.windows = function() {\n return navigator.platform === \"Win32\";\n };\n qq.android = function() {\n return navigator.userAgent.toLowerCase().indexOf(\"android\") !== -1;\n };\n qq.androidStock = function() {\n return qq.android() && navigator.userAgent.toLowerCase().indexOf(\"chrome\") < 0;\n };\n qq.ios6 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 6_\") !== -1;\n };\n qq.ios7 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 7_\") !== -1;\n };\n qq.ios8 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_\") !== -1;\n };\n qq.ios800 = function() {\n return qq.ios() && navigator.userAgent.indexOf(\" OS 8_0 \") !== -1;\n };\n qq.ios = function() {\n return navigator.userAgent.indexOf(\"iPad\") !== -1 || navigator.userAgent.indexOf(\"iPod\") !== -1 || navigator.userAgent.indexOf(\"iPhone\") !== -1;\n };\n qq.iosChrome = function() {\n return qq.ios() && navigator.userAgent.indexOf(\"CriOS\") !== -1;\n };\n qq.iosSafari = function() {\n return qq.ios() && !qq.iosChrome() && navigator.userAgent.indexOf(\"Safari\") !== -1;\n };\n qq.iosSafariWebView = function() {\n return qq.ios() && !qq.iosChrome() && !qq.iosSafari();\n };\n qq.preventDefault = function(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n };\n qq.toElement = function() {\n var div = document.createElement(\"div\");\n return function(html) {\n div.innerHTML = html;\n var element = div.firstChild;\n div.removeChild(element);\n return element;\n };\n }();\n qq.each = function(iterableItem, callback) {\n var keyOrIndex, retVal;\n if (iterableItem) {\n if (window.Storage && iterableItem.constructor === window.Storage) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(iterableItem.key(keyOrIndex), iterableItem.getItem(iterableItem.key(keyOrIndex)));\n if (retVal === false) {\n break;\n }\n }\n } else if (qq.isArray(iterableItem) || qq.isItemList(iterableItem) || qq.isNodeList(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n } else if (qq.isString(iterableItem)) {\n for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n retVal = callback(keyOrIndex, iterableItem.charAt(keyOrIndex));\n if (retVal === false) {\n break;\n }\n }\n } else {\n for (keyOrIndex in iterableItem) {\n if (Object.prototype.hasOwnProperty.call(iterableItem, keyOrIndex)) {\n retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n if (retVal === false) {\n break;\n }\n }\n }\n }\n }\n };\n qq.bind = function(oldFunc, context) {\n if (qq.isFunction(oldFunc)) {\n var args = Array.prototype.slice.call(arguments, 2);\n return function() {\n var newArgs = qq.extend([], args);\n if (arguments.length) {\n newArgs = newArgs.concat(Array.prototype.slice.call(arguments));\n }\n return oldFunc.apply(context, newArgs);\n };\n }\n throw new Error(\"first parameter must be a function!\");\n };\n qq.obj2url = function(obj, temp, prefixDone) {\n var uristrings = [], prefix = \"&\", add = function(nextObj, i) {\n var nextTemp = temp ? /\\[\\]$/.test(temp) ? temp : temp + \"[\" + i + \"]\" : i;\n if (nextTemp !== \"undefined\" && i !== \"undefined\") {\n uristrings.push(typeof nextObj === \"object\" ? qq.obj2url(nextObj, nextTemp, true) : Object.prototype.toString.call(nextObj) === \"[object Function]\" ? encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj()) : encodeURIComponent(nextTemp) + \"=\" + encodeURIComponent(nextObj));\n }\n };\n if (!prefixDone && temp) {\n prefix = /\\?/.test(temp) ? /\\?$/.test(temp) ? \"\" : \"&\" : \"?\";\n uristrings.push(temp);\n uristrings.push(qq.obj2url(obj));\n } else if (Object.prototype.toString.call(obj) === \"[object Array]\" && typeof obj !== \"undefined\") {\n qq.each(obj, function(idx, val) {\n add(val, idx);\n });\n } else if (typeof obj !== \"undefined\" && obj !== null && typeof obj === \"object\") {\n qq.each(obj, function(prop, val) {\n add(val, prop);\n });\n } else {\n uristrings.push(encodeURIComponent(temp) + \"=\" + encodeURIComponent(obj));\n }\n if (temp) {\n return uristrings.join(prefix);\n } else {\n return uristrings.join(prefix).replace(/^&/, \"\").replace(/%20/g, \"+\");\n }\n };\n qq.obj2FormData = function(obj, formData, arrayKeyName) {\n if (!formData) {\n formData = new FormData();\n }\n qq.each(obj, function(key, val) {\n key = arrayKeyName ? arrayKeyName + \"[\" + key + \"]\" : key;\n if (qq.isObject(val)) {\n qq.obj2FormData(val, formData, key);\n } else if (qq.isFunction(val)) {\n formData.append(key, val());\n } else {\n formData.append(key, val);\n }\n });\n return formData;\n };\n qq.obj2Inputs = function(obj, form) {\n var input;\n if (!form) {\n form = document.createElement(\"form\");\n }\n qq.obj2FormData(obj, {\n append: function(key, val) {\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", key);\n input.setAttribute(\"value\", val);\n form.appendChild(input);\n }\n });\n return form;\n };\n qq.parseJson = function(json) {\n if (window.JSON && qq.isFunction(JSON.parse)) {\n return JSON.parse(json);\n } else {\n return eval(\"(\" + json + \")\");\n }\n };\n qq.getExtension = function(filename) {\n var extIdx = filename.lastIndexOf(\".\") + 1;\n if (extIdx > 0) {\n return filename.substr(extIdx, filename.length - extIdx);\n }\n };\n qq.getFilename = function(blobOrFileInput) {\n if (qq.isInput(blobOrFileInput)) {\n return blobOrFileInput.value.replace(/.*(\\/|\\\\)/, \"\");\n } else if (qq.isFile(blobOrFileInput)) {\n if (blobOrFileInput.fileName !== null && blobOrFileInput.fileName !== undefined) {\n return blobOrFileInput.fileName;\n }\n }\n return blobOrFileInput.name;\n };\n qq.DisposeSupport = function() {\n var disposers = [];\n return {\n dispose: function() {\n var disposer;\n do {\n disposer = disposers.shift();\n if (disposer) {\n disposer();\n }\n } while (disposer);\n },\n attach: function() {\n var args = arguments;\n this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\n },\n addDisposer: function(disposeFunction) {\n disposers.push(disposeFunction);\n }\n };\n };\n })();\n (function() {\n \"use strict\";\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return qq;\n });\n } else if (typeof module !== \"undefined\" && module.exports) {\n module.exports = qq;\n } else {\n global.qq = qq;\n }\n })();\n (function() {\n \"use strict\";\n qq.Error = function(message) {\n this.message = \"[Fine Uploader \" + qq.version + \"] \" + message;\n };\n qq.Error.prototype = new Error();\n })();\n qq.version = \"5.16.2\";\n qq.supportedFeatures = function() {\n \"use strict\";\n var supportsUploading, supportsUploadingBlobs, supportsFileDrop, supportsAjaxFileUploading, supportsFolderDrop, supportsChunking, supportsResume, supportsUploadViaPaste, supportsUploadCors, supportsDeleteFileXdr, supportsDeleteFileCorsXhr, supportsDeleteFileCors, supportsFolderSelection, supportsImagePreviews, supportsUploadProgress;\n function testSupportsFileInputElement() {\n var supported = true, tempInput;\n try {\n tempInput = document.createElement(\"input\");\n tempInput.type = \"file\";\n qq(tempInput).hide();\n if (tempInput.disabled) {\n supported = false;\n }\n } catch (ex) {\n supported = false;\n }\n return supported;\n }\n function isChrome14OrHigher() {\n return (qq.chrome() || qq.opera()) && navigator.userAgent.match(/Chrome\\/[1][4-9]|Chrome\\/[2-9][0-9]/) !== undefined;\n }\n function isCrossOriginXhrSupported() {\n if (window.XMLHttpRequest) {\n var xhr = qq.createXhrInstance();\n return xhr.withCredentials !== undefined;\n }\n return false;\n }\n function isXdrSupported() {\n return window.XDomainRequest !== undefined;\n }\n function isCrossOriginAjaxSupported() {\n if (isCrossOriginXhrSupported()) {\n return true;\n }\n return isXdrSupported();\n }\n function isFolderSelectionSupported() {\n return document.createElement(\"input\").webkitdirectory !== undefined;\n }\n function isLocalStorageSupported() {\n try {\n return !!window.localStorage && qq.isFunction(window.localStorage.setItem);\n } catch (error) {\n return false;\n }\n }\n function isDragAndDropSupported() {\n var span = document.createElement(\"span\");\n return (\"draggable\" in span || \"ondragstart\" in span && \"ondrop\" in span) && !qq.android() && !qq.ios();\n }\n supportsUploading = testSupportsFileInputElement();\n supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported();\n supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock();\n supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported();\n supportsFolderDrop = supportsFileDrop && function() {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n return !!(\"webkitdirectory\" in (input || document.querySelectorAll(\"input[type=file]\")[0]));\n }();\n supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported();\n supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported();\n supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher();\n supportsUploadCors = supportsUploading && (window.postMessage !== undefined || supportsAjaxFileUploading);\n supportsDeleteFileCorsXhr = isCrossOriginXhrSupported();\n supportsDeleteFileXdr = isXdrSupported();\n supportsDeleteFileCors = isCrossOriginAjaxSupported();\n supportsFolderSelection = isFolderSelectionSupported();\n supportsImagePreviews = supportsAjaxFileUploading && window.FileReader !== undefined;\n supportsUploadProgress = function() {\n if (supportsAjaxFileUploading) {\n return !qq.androidStock() && !qq.iosChrome();\n }\n return false;\n }();\n return {\n ajaxUploading: supportsAjaxFileUploading,\n blobUploading: supportsUploadingBlobs,\n canDetermineSize: supportsAjaxFileUploading,\n chunking: supportsChunking,\n deleteFileCors: supportsDeleteFileCors,\n deleteFileCorsXdr: supportsDeleteFileXdr,\n deleteFileCorsXhr: supportsDeleteFileCorsXhr,\n dialogElement: !!window.HTMLDialogElement,\n fileDrop: supportsFileDrop,\n folderDrop: supportsFolderDrop,\n folderSelection: supportsFolderSelection,\n imagePreviews: supportsImagePreviews,\n imageValidation: supportsImagePreviews,\n itemSizeValidation: supportsAjaxFileUploading,\n pause: supportsChunking,\n progressBar: supportsUploadProgress,\n resume: supportsResume,\n scaling: supportsImagePreviews && supportsUploadingBlobs,\n tiffPreviews: qq.safari(),\n unlimitedScaledImageSize: !qq.ios(),\n uploading: supportsUploading,\n uploadCors: supportsUploadCors,\n uploadCustomHeaders: supportsAjaxFileUploading,\n uploadNonMultipart: supportsAjaxFileUploading,\n uploadViaPaste: supportsUploadViaPaste\n };\n }();\n qq.isGenericPromise = function(maybePromise) {\n \"use strict\";\n return !!(maybePromise && maybePromise.then && qq.isFunction(maybePromise.then));\n };\n qq.Promise = function() {\n \"use strict\";\n var successArgs, failureArgs, successCallbacks = [], failureCallbacks = [], doneCallbacks = [], state = 0;\n qq.extend(this, {\n then: function(onSuccess, onFailure) {\n if (state === 0) {\n if (onSuccess) {\n successCallbacks.push(onSuccess);\n }\n if (onFailure) {\n failureCallbacks.push(onFailure);\n }\n } else if (state === -1) {\n onFailure && onFailure.apply(null, failureArgs);\n } else if (onSuccess) {\n onSuccess.apply(null, successArgs);\n }\n return this;\n },\n done: function(callback) {\n if (state === 0) {\n doneCallbacks.push(callback);\n } else {\n callback.apply(null, failureArgs === undefined ? successArgs : failureArgs);\n }\n return this;\n },\n success: function() {\n state = 1;\n successArgs = arguments;\n if (successCallbacks.length) {\n qq.each(successCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, successArgs);\n });\n }\n return this;\n },\n failure: function() {\n state = -1;\n failureArgs = arguments;\n if (failureCallbacks.length) {\n qq.each(failureCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n if (doneCallbacks.length) {\n qq.each(doneCallbacks, function(idx, callback) {\n callback.apply(null, failureArgs);\n });\n }\n return this;\n }\n });\n };\n qq.BlobProxy = function(referenceBlob, onCreate) {\n \"use strict\";\n qq.extend(this, {\n referenceBlob: referenceBlob,\n create: function() {\n return onCreate(referenceBlob);\n }\n });\n };\n qq.UploadButton = function(o) {\n \"use strict\";\n var self = this, disposeSupport = new qq.DisposeSupport(), options = {\n acceptFiles: null,\n element: null,\n focusClass: \"qq-upload-button-focus\",\n folders: false,\n hoverClass: \"qq-upload-button-hover\",\n ios8BrowserCrashWorkaround: false,\n multiple: false,\n name: \"qqfile\",\n onChange: function(input) {},\n title: null\n }, input, buttonId;\n qq.extend(options, o);\n buttonId = qq.getUniqueId();\n function createInput() {\n var input = document.createElement(\"input\");\n input.setAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME, buttonId);\n input.setAttribute(\"title\", options.title);\n self.setMultiple(options.multiple, input);\n if (options.folders && qq.supportedFeatures.folderSelection) {\n input.setAttribute(\"webkitdirectory\", \"\");\n }\n if (options.acceptFiles) {\n input.setAttribute(\"accept\", options.acceptFiles);\n }\n input.setAttribute(\"type\", \"file\");\n input.setAttribute(\"name\", options.name);\n qq(input).css({\n position: \"absolute\",\n right: 0,\n top: 0,\n fontFamily: \"Arial\",\n fontSize: qq.ie() && !qq.ie8() ? \"3500px\" : \"118px\",\n margin: 0,\n padding: 0,\n cursor: \"pointer\",\n opacity: 0\n });\n !qq.ie7() && qq(input).css({\n height: \"100%\"\n });\n options.element.appendChild(input);\n disposeSupport.attach(input, \"change\", function() {\n options.onChange(input);\n });\n disposeSupport.attach(input, \"mouseover\", function() {\n qq(options.element).addClass(options.hoverClass);\n });\n disposeSupport.attach(input, \"mouseout\", function() {\n qq(options.element).removeClass(options.hoverClass);\n });\n disposeSupport.attach(input, \"focus\", function() {\n qq(options.element).addClass(options.focusClass);\n });\n disposeSupport.attach(input, \"blur\", function() {\n qq(options.element).removeClass(options.focusClass);\n });\n return input;\n }\n qq(options.element).css({\n position: \"relative\",\n overflow: \"hidden\",\n direction: \"ltr\"\n });\n qq.extend(this, {\n getInput: function() {\n return input;\n },\n getButtonId: function() {\n return buttonId;\n },\n setMultiple: function(isMultiple, optInput) {\n var input = optInput || this.getInput();\n if (options.ios8BrowserCrashWorkaround && qq.ios8() && (qq.iosChrome() || qq.iosSafariWebView())) {\n input.setAttribute(\"multiple\", \"\");\n } else {\n if (isMultiple) {\n input.setAttribute(\"multiple\", \"\");\n } else {\n input.removeAttribute(\"multiple\");\n }\n }\n },\n setAcceptFiles: function(acceptFiles) {\n if (acceptFiles !== options.acceptFiles) {\n input.setAttribute(\"accept\", acceptFiles);\n }\n },\n reset: function() {\n if (input.parentNode) {\n qq(input).remove();\n }\n qq(options.element).removeClass(options.focusClass);\n input = null;\n input = createInput();\n }\n });\n input = createInput();\n };\n qq.UploadButton.BUTTON_ID_ATTR_NAME = \"qq-button-id\";\n qq.UploadData = function(uploaderProxy) {\n \"use strict\";\n var data = [], byUuid = {}, byStatus = {}, byProxyGroupId = {}, byBatchId = {};\n function getDataByIds(idOrIds) {\n if (qq.isArray(idOrIds)) {\n var entries = [];\n qq.each(idOrIds, function(idx, id) {\n entries.push(data[id]);\n });\n return entries;\n }\n return data[idOrIds];\n }\n function getDataByUuids(uuids) {\n if (qq.isArray(uuids)) {\n var entries = [];\n qq.each(uuids, function(idx, uuid) {\n entries.push(data[byUuid[uuid]]);\n });\n return entries;\n }\n return data[byUuid[uuids]];\n }\n function getDataByStatus(status) {\n var statusResults = [], statuses = [].concat(status);\n qq.each(statuses, function(index, statusEnum) {\n var statusResultIndexes = byStatus[statusEnum];\n if (statusResultIndexes !== undefined) {\n qq.each(statusResultIndexes, function(i, dataIndex) {\n statusResults.push(data[dataIndex]);\n });\n }\n });\n return statusResults;\n }\n qq.extend(this, {\n addFile: function(spec) {\n var status = spec.status || qq.status.SUBMITTING, id = data.push({\n name: spec.name,\n originalName: spec.name,\n uuid: spec.uuid,\n size: spec.size == null ? -1 : spec.size,\n status: status,\n file: spec.file\n }) - 1;\n if (spec.batchId) {\n data[id].batchId = spec.batchId;\n if (byBatchId[spec.batchId] === undefined) {\n byBatchId[spec.batchId] = [];\n }\n byBatchId[spec.batchId].push(id);\n }\n if (spec.proxyGroupId) {\n data[id].proxyGroupId = spec.proxyGroupId;\n if (byProxyGroupId[spec.proxyGroupId] === undefined) {\n byProxyGroupId[spec.proxyGroupId] = [];\n }\n byProxyGroupId[spec.proxyGroupId].push(id);\n }\n data[id].id = id;\n byUuid[spec.uuid] = id;\n if (byStatus[status] === undefined) {\n byStatus[status] = [];\n }\n byStatus[status].push(id);\n spec.onBeforeStatusChange && spec.onBeforeStatusChange(id);\n uploaderProxy.onStatusChange(id, null, status);\n return id;\n },\n retrieve: function(optionalFilter) {\n if (qq.isObject(optionalFilter) && data.length) {\n if (optionalFilter.id !== undefined) {\n return getDataByIds(optionalFilter.id);\n } else if (optionalFilter.uuid !== undefined) {\n return getDataByUuids(optionalFilter.uuid);\n } else if (optionalFilter.status) {\n return getDataByStatus(optionalFilter.status);\n }\n } else {\n return qq.extend([], data, true);\n }\n },\n removeFileRef: function(id) {\n var record = getDataByIds(id);\n if (record) {\n delete record.file;\n }\n },\n reset: function() {\n data = [];\n byUuid = {};\n byStatus = {};\n byBatchId = {};\n },\n setStatus: function(id, newStatus) {\n var oldStatus = data[id].status, byStatusOldStatusIndex = qq.indexOf(byStatus[oldStatus], id);\n byStatus[oldStatus].splice(byStatusOldStatusIndex, 1);\n data[id].status = newStatus;\n if (byStatus[newStatus] === undefined) {\n byStatus[newStatus] = [];\n }\n byStatus[newStatus].push(id);\n uploaderProxy.onStatusChange(id, oldStatus, newStatus);\n },\n uuidChanged: function(id, newUuid) {\n var oldUuid = data[id].uuid;\n data[id].uuid = newUuid;\n byUuid[newUuid] = id;\n delete byUuid[oldUuid];\n },\n updateName: function(id, newName) {\n data[id].name = newName;\n },\n updateSize: function(id, newSize) {\n data[id].size = newSize;\n },\n setParentId: function(targetId, parentId) {\n data[targetId].parentId = parentId;\n },\n getIdsInProxyGroup: function(id) {\n var proxyGroupId = data[id].proxyGroupId;\n if (proxyGroupId) {\n return byProxyGroupId[proxyGroupId];\n }\n return [];\n },\n getIdsInBatch: function(id) {\n var batchId = data[id].batchId;\n return byBatchId[batchId];\n }\n });\n };\n qq.status = {\n SUBMITTING: \"submitting\",\n SUBMITTED: \"submitted\",\n REJECTED: \"rejected\",\n QUEUED: \"queued\",\n CANCELED: \"canceled\",\n PAUSED: \"paused\",\n UPLOADING: \"uploading\",\n UPLOAD_FINALIZING: \"upload finalizing\",\n UPLOAD_RETRYING: \"retrying upload\",\n UPLOAD_SUCCESSFUL: \"upload successful\",\n UPLOAD_FAILED: \"upload failed\",\n DELETE_FAILED: \"delete failed\",\n DELETING: \"deleting\",\n DELETED: \"deleted\"\n };\n (function() {\n \"use strict\";\n qq.basePublicApi = {\n addBlobs: function(blobDataOrArray, params, endpoint) {\n this.addFiles(blobDataOrArray, params, endpoint);\n },\n addInitialFiles: function(cannedFileList) {\n var self = this;\n qq.each(cannedFileList, function(index, cannedFile) {\n self._addCannedFile(cannedFile);\n });\n },\n addFiles: function(data, params, endpoint) {\n this._maybeHandleIos8SafariWorkaround();\n var batchId = this._storedIds.length === 0 ? qq.getUniqueId() : this._currentBatchId, processBlob = qq.bind(function(blob) {\n this._handleNewFile({\n blob: blob,\n name: this._options.blobs.defaultName\n }, batchId, verifiedFiles);\n }, this), processBlobData = qq.bind(function(blobData) {\n this._handleNewFile(blobData, batchId, verifiedFiles);\n }, this), processCanvas = qq.bind(function(canvas) {\n var blob = qq.canvasToBlob(canvas);\n this._handleNewFile({\n blob: blob,\n name: this._options.blobs.defaultName + \".png\"\n }, batchId, verifiedFiles);\n }, this), processCanvasData = qq.bind(function(canvasData) {\n var normalizedQuality = canvasData.quality && canvasData.quality / 100, blob = qq.canvasToBlob(canvasData.canvas, canvasData.type, normalizedQuality);\n this._handleNewFile({\n blob: blob,\n name: canvasData.name\n }, batchId, verifiedFiles);\n }, this), processFileOrInput = qq.bind(function(fileOrInput) {\n if (qq.isInput(fileOrInput) && qq.supportedFeatures.ajaxUploading) {\n var files = Array.prototype.slice.call(fileOrInput.files), self = this;\n qq.each(files, function(idx, file) {\n self._handleNewFile(file, batchId, verifiedFiles);\n });\n } else {\n this._handleNewFile(fileOrInput, batchId, verifiedFiles);\n }\n }, this), normalizeData = function() {\n if (qq.isFileList(data)) {\n data = Array.prototype.slice.call(data);\n }\n data = [].concat(data);\n }, self = this, verifiedFiles = [];\n this._currentBatchId = batchId;\n if (data) {\n normalizeData();\n qq.each(data, function(idx, fileContainer) {\n if (qq.isFileOrInput(fileContainer)) {\n processFileOrInput(fileContainer);\n } else if (qq.isBlob(fileContainer)) {\n processBlob(fileContainer);\n } else if (qq.isObject(fileContainer)) {\n if (fileContainer.blob && fileContainer.name) {\n processBlobData(fileContainer);\n } else if (fileContainer.canvas && fileContainer.name) {\n processCanvasData(fileContainer);\n }\n } else if (fileContainer.tagName && fileContainer.tagName.toLowerCase() === \"canvas\") {\n processCanvas(fileContainer);\n } else {\n self.log(fileContainer + \" is not a valid file container! Ignoring!\", \"warn\");\n }\n });\n this.log(\"Received \" + verifiedFiles.length + \" files.\");\n this._prepareItemsForUpload(verifiedFiles, params, endpoint);\n }\n },\n cancel: function(id) {\n var uploadData = this._uploadData.retrieve({\n id: id\n });\n if (uploadData && uploadData.status === qq.status.UPLOAD_FINALIZING) {\n this.log(qq.format(\"Ignoring cancel for file ID {} ({}). Finalizing upload.\", id, this.getName(id)), \"error\");\n } else {\n this._handler.cancel(id);\n }\n },\n cancelAll: function() {\n var storedIdsCopy = [], self = this;\n qq.extend(storedIdsCopy, this._storedIds);\n qq.each(storedIdsCopy, function(idx, storedFileId) {\n self.cancel(storedFileId);\n });\n this._handler.cancelAll();\n },\n clearStoredFiles: function() {\n this._storedIds = [];\n },\n continueUpload: function(id) {\n var uploadData = this._uploadData.retrieve({\n id: id\n });\n if (!qq.supportedFeatures.pause || !this._options.chunking.enabled) {\n return false;\n }\n if (uploadData.status === qq.status.PAUSED) {\n this.log(qq.format(\"Paused file ID {} ({}) will be continued. Not paused.\", id, this.getName(id)));\n this._uploadFile(id);\n return true;\n } else {\n this.log(qq.format(\"Ignoring continue for file ID {} ({}). Not paused.\", id, this.getName(id)), \"error\");\n }\n return false;\n },\n deleteFile: function(id) {\n return this._onSubmitDelete(id);\n },\n doesExist: function(fileOrBlobId) {\n return this._handler.isValid(fileOrBlobId);\n },\n drawThumbnail: function(fileId, imgOrCanvas, maxSize, fromServer, customResizeFunction) {\n var promiseToReturn = new qq.Promise(), fileOrUrl, options;\n if (this._imageGenerator) {\n fileOrUrl = this._thumbnailUrls[fileId];\n options = {\n customResizeFunction: customResizeFunction,\n maxSize: maxSize > 0 ? maxSize : null,\n scale: maxSize > 0\n };\n if (!fromServer && qq.supportedFeatures.imagePreviews) {\n fileOrUrl = this.getFile(fileId);\n }\n if (fileOrUrl == null) {\n promiseToReturn.failure({\n container: imgOrCanvas,\n error: \"File or URL not found.\"\n });\n } else {\n this._imageGenerator.generate(fileOrUrl, imgOrCanvas, options).then(function success(modifiedContainer) {\n promiseToReturn.success(modifiedContainer);\n }, function failure(container, reason) {\n promiseToReturn.failure({\n container: container,\n error: reason || \"Problem generating thumbnail\"\n });\n });\n }\n } else {\n promiseToReturn.failure({\n container: imgOrCanvas,\n error: \"Missing image generator module\"\n });\n }\n return promiseToReturn;\n },\n getButton: function(fileId) {\n return this._getButton(this._buttonIdsForFileIds[fileId]);\n },\n getEndpoint: function(fileId) {\n return this._endpointStore.get(fileId);\n },\n getFile: function(fileOrBlobId) {\n var file = this._handler.getFile(fileOrBlobId);\n var uploadDataRecord;\n if (!file) {\n uploadDataRecord = this._uploadData.retrieve({\n id: fileOrBlobId\n });\n if (uploadDataRecord) {\n file = uploadDataRecord.file;\n }\n }\n return file || null;\n },\n getInProgress: function() {\n return this._uploadData.retrieve({\n status: [ qq.status.UPLOADING, qq.status.UPLOAD_RETRYING, qq.status.QUEUED ]\n }).length;\n },\n getName: function(id) {\n return this._uploadData.retrieve({\n id: id\n }).name;\n },\n getParentId: function(id) {\n var uploadDataEntry = this.getUploads({\n id: id\n }), parentId = null;\n if (uploadDataEntry) {\n if (uploadDataEntry.parentId !== undefined) {\n parentId = uploadDataEntry.parentId;\n }\n }\n return parentId;\n },\n getResumableFilesData: function() {\n return this._handler.getResumableFilesData();\n },\n getSize: function(id) {\n return this._uploadData.retrieve({\n id: id\n }).size;\n },\n getNetUploads: function() {\n return this._netUploaded;\n },\n getRemainingAllowedItems: function() {\n var allowedItems = this._currentItemLimit;\n if (allowedItems > 0) {\n return allowedItems - this._netUploadedOrQueued;\n }\n return null;\n },\n getUploads: function(optionalFilter) {\n return this._uploadData.retrieve(optionalFilter);\n },\n getUuid: function(id) {\n return this._uploadData.retrieve({\n id: id\n }).uuid;\n },\n isResumable: function(id) {\n return this._handler.hasResumeRecord(id);\n },\n log: function(str, level) {\n if (this._options.debug && (!level || level === \"info\")) {\n qq.log(\"[Fine Uploader \" + qq.version + \"] \" + str);\n } else if (level && level !== \"info\") {\n qq.log(\"[Fine Uploader \" + qq.version + \"] \" + str, level);\n }\n },\n pauseUpload: function(id) {\n var uploadData = this._uploadData.retrieve({\n id: id\n });\n if (!qq.supportedFeatures.pause || !this._options.chunking.enabled) {\n return false;\n }\n if (qq.indexOf([ qq.status.UPLOADING, qq.status.UPLOAD_RETRYING ], uploadData.status) >= 0) {\n if (this._handler.pause(id)) {\n this._uploadData.setStatus(id, qq.status.PAUSED);\n return true;\n } else {\n this.log(qq.format(\"Unable to pause file ID {} ({}).\", id, this.getName(id)), \"error\");\n }\n } else {\n this.log(qq.format(\"Ignoring pause for file ID {} ({}). Not in progress.\", id, this.getName(id)), \"error\");\n }\n return false;\n },\n removeFileRef: function(id) {\n this._handler.expunge(id);\n this._uploadData.removeFileRef(id);\n },\n reset: function() {\n this.log(\"Resetting uploader...\");\n this._handler.reset();\n this._storedIds = [];\n this._autoRetries = [];\n this._retryTimeouts = [];\n this._preventRetries = [];\n this._thumbnailUrls = [];\n qq.each(this._buttons, function(idx, button) {\n button.reset();\n });\n this._paramsStore.reset();\n this._endpointStore.reset();\n this._netUploadedOrQueued = 0;\n this._netUploaded = 0;\n this._uploadData.reset();\n this._buttonIdsForFileIds = [];\n this._pasteHandler && this._pasteHandler.reset();\n this._options.session.refreshOnReset && this._refreshSessionData();\n this._succeededSinceLastAllComplete = [];\n this._failedSinceLastAllComplete = [];\n this._totalProgress && this._totalProgress.reset();\n this._customResumeDataStore.reset();\n },\n retry: function(id) {\n return this._manualRetry(id);\n },\n scaleImage: function(id, specs) {\n var self = this;\n return qq.Scaler.prototype.scaleImage(id, specs, {\n log: qq.bind(self.log, self),\n getFile: qq.bind(self.getFile, self),\n uploadData: self._uploadData\n });\n },\n setCustomHeaders: function(headers, id) {\n this._customHeadersStore.set(headers, id);\n },\n setCustomResumeData: function(id, data) {\n this._customResumeDataStore.set(data, id);\n },\n setDeleteFileCustomHeaders: function(headers, id) {\n this._deleteFileCustomHeadersStore.set(headers, id);\n },\n setDeleteFileEndpoint: function(endpoint, id) {\n this._deleteFileEndpointStore.set(endpoint, id);\n },\n setDeleteFileParams: function(params, id) {\n this._deleteFileParamsStore.set(params, id);\n },\n setEndpoint: function(endpoint, id) {\n this._endpointStore.set(endpoint, id);\n },\n setForm: function(elementOrId) {\n this._updateFormSupportAndParams(elementOrId);\n },\n setItemLimit: function(newItemLimit) {\n this._currentItemLimit = newItemLimit;\n },\n setName: function(id, newName) {\n this._uploadData.updateName(id, newName);\n },\n setParams: function(params, id) {\n this._paramsStore.set(params, id);\n },\n setUuid: function(id, newUuid) {\n return this._uploadData.uuidChanged(id, newUuid);\n },\n setStatus: function(id, newStatus) {\n var fileRecord = this.getUploads({\n id: id\n });\n if (!fileRecord) {\n throw new qq.Error(id + \" is not a valid file ID.\");\n }\n switch (newStatus) {\n case qq.status.DELETED:\n this._onDeleteComplete(id, null, false);\n break;\n\n case qq.status.DELETE_FAILED:\n this._onDeleteComplete(id, null, true);\n break;\n\n default:\n var errorMessage = \"Method setStatus called on '\" + name + \"' not implemented yet for \" + newStatus;\n this.log(errorMessage);\n throw new qq.Error(errorMessage);\n }\n },\n uploadStoredFiles: function() {\n if (this._storedIds.length === 0) {\n this._itemError(\"noFilesError\");\n } else {\n this._uploadStoredFiles();\n }\n }\n };\n qq.basePrivateApi = {\n _addCannedFile: function(sessionData) {\n var self = this;\n return this._uploadData.addFile({\n uuid: sessionData.uuid,\n name: sessionData.name,\n size: sessionData.size,\n status: qq.status.UPLOAD_SUCCESSFUL,\n onBeforeStatusChange: function(id) {\n sessionData.deleteFileEndpoint && self.setDeleteFileEndpoint(sessionData.deleteFileEndpoint, id);\n sessionData.deleteFileParams && self.setDeleteFileParams(sessionData.deleteFileParams, id);\n if (sessionData.thumbnailUrl) {\n self._thumbnailUrls[id] = sessionData.thumbnailUrl;\n }\n self._netUploaded++;\n self._netUploadedOrQueued++;\n }\n });\n },\n _annotateWithButtonId: function(file, associatedInput) {\n if (qq.isFile(file)) {\n file.qqButtonId = this._getButtonId(associatedInput);\n }\n },\n _batchError: function(message) {\n this._options.callbacks.onError(null, null, message, undefined);\n },\n _createDeleteHandler: function() {\n var self = this;\n return new qq.DeleteFileAjaxRequester({\n method: this._options.deleteFile.method.toUpperCase(),\n maxConnections: this._options.maxConnections,\n uuidParamName: this._options.request.uuidName,\n customHeaders: this._deleteFileCustomHeadersStore,\n paramsStore: this._deleteFileParamsStore,\n endpointStore: this._deleteFileEndpointStore,\n cors: this._options.cors,\n log: qq.bind(self.log, self),\n onDelete: function(id) {\n self._onDelete(id);\n self._options.callbacks.onDelete(id);\n },\n onDeleteComplete: function(id, xhrOrXdr, isError) {\n self._onDeleteComplete(id, xhrOrXdr, isError);\n self._options.callbacks.onDeleteComplete(id, xhrOrXdr, isError);\n }\n });\n },\n _createPasteHandler: function() {\n var self = this;\n return new qq.PasteSupport({\n targetElement: this._options.paste.targetElement,\n callbacks: {\n log: qq.bind(self.log, self),\n pasteReceived: function(blob) {\n self._handleCheckedCallback({\n name: \"onPasteReceived\",\n callback: qq.bind(self._options.callbacks.onPasteReceived, self, blob),\n onSuccess: qq.bind(self._handlePasteSuccess, self, blob),\n identifier: \"pasted image\"\n });\n }\n }\n });\n },\n _createStore: function(initialValue, _readOnlyValues_) {\n var store = {}, catchall = initialValue, perIdReadOnlyValues = {}, readOnlyValues = _readOnlyValues_, copy = function(orig) {\n if (qq.isObject(orig)) {\n return qq.extend({}, orig);\n }\n return orig;\n }, getReadOnlyValues = function() {\n if (qq.isFunction(readOnlyValues)) {\n return readOnlyValues();\n }\n return readOnlyValues;\n }, includeReadOnlyValues = function(id, existing) {\n if (readOnlyValues && qq.isObject(existing)) {\n qq.extend(existing, getReadOnlyValues());\n }\n if (perIdReadOnlyValues[id]) {\n qq.extend(existing, perIdReadOnlyValues[id]);\n }\n };\n return {\n set: function(val, id) {\n if (id == null) {\n store = {};\n catchall = copy(val);\n } else {\n store[id] = copy(val);\n }\n },\n get: function(id) {\n var values;\n if (id != null && store[id]) {\n values = store[id];\n } else {\n values = copy(catchall);\n }\n includeReadOnlyValues(id, values);\n return copy(values);\n },\n addReadOnly: function(id, values) {\n if (qq.isObject(store)) {\n if (id === null) {\n if (qq.isFunction(values)) {\n readOnlyValues = values;\n } else {\n readOnlyValues = readOnlyValues || {};\n qq.extend(readOnlyValues, values);\n }\n } else {\n perIdReadOnlyValues[id] = perIdReadOnlyValues[id] || {};\n qq.extend(perIdReadOnlyValues[id], values);\n }\n }\n },\n remove: function(fileId) {\n return delete store[fileId];\n },\n reset: function() {\n store = {};\n perIdReadOnlyValues = {};\n catchall = initialValue;\n }\n };\n },\n _createUploadDataTracker: function() {\n var self = this;\n return new qq.UploadData({\n getName: function(id) {\n return self.getName(id);\n },\n getUuid: function(id) {\n return self.getUuid(id);\n },\n getSize: function(id) {\n return self.getSize(id);\n },\n onStatusChange: function(id, oldStatus, newStatus) {\n self._onUploadStatusChange(id, oldStatus, newStatus);\n self._options.callbacks.onStatusChange(id, oldStatus, newStatus);\n self._maybeAllComplete(id, newStatus);\n if (self._totalProgress) {\n setTimeout(function() {\n self._totalProgress.onStatusChange(id, oldStatus, newStatus);\n }, 0);\n }\n }\n });\n },\n _createUploadButton: function(spec) {\n var self = this, acceptFiles = spec.accept || this._options.validation.acceptFiles, allowedExtensions = spec.allowedExtensions || this._options.validation.allowedExtensions, button;\n function allowMultiple() {\n if (qq.supportedFeatures.ajaxUploading) {\n if (self._options.workarounds.iosEmptyVideos && qq.ios() && !qq.ios6() && self._isAllowedExtension(allowedExtensions, \".mov\")) {\n return false;\n }\n if (spec.multiple === undefined) {\n return self._options.multiple;\n }\n return spec.multiple;\n }\n return false;\n }\n button = new qq.UploadButton({\n acceptFiles: acceptFiles,\n element: spec.element,\n focusClass: this._options.classes.buttonFocus,\n folders: spec.folders,\n hoverClass: this._options.classes.buttonHover,\n ios8BrowserCrashWorkaround: this._options.workarounds.ios8BrowserCrash,\n multiple: allowMultiple(),\n name: this._options.request.inputName,\n onChange: function(input) {\n self._onInputChange(input);\n },\n title: spec.title == null ? this._options.text.fileInputTitle : spec.title\n });\n this._disposeSupport.addDisposer(function() {\n button.dispose();\n });\n self._buttons.push(button);\n return button;\n },\n _createUploadHandler: function(additionalOptions, namespace) {\n var self = this, lastOnProgress = {}, options = {\n debug: this._options.debug,\n maxConnections: this._options.maxConnections,\n cors: this._options.cors,\n paramsStore: this._paramsStore,\n endpointStore: this._endpointStore,\n chunking: this._options.chunking,\n resume: this._options.resume,\n blobs: this._options.blobs,\n log: qq.bind(self.log, self),\n preventRetryParam: this._options.retry.preventRetryResponseProperty,\n onProgress: function(id, name, loaded, total) {\n if (loaded < 0 || total < 0) {\n return;\n }\n if (lastOnProgress[id]) {\n if (lastOnProgress[id].loaded !== loaded || lastOnProgress[id].total !== total) {\n self._onProgress(id, name, loaded, total);\n self._options.callbacks.onProgress(id, name, loaded, total);\n }\n } else {\n self._onProgress(id, name, loaded, total);\n self._options.callbacks.onProgress(id, name, loaded, total);\n }\n lastOnProgress[id] = {\n loaded: loaded,\n total: total\n };\n },\n onComplete: function(id, name, result, xhr) {\n delete lastOnProgress[id];\n var status = self.getUploads({\n id: id\n }).status, retVal;\n if (status === qq.status.UPLOAD_SUCCESSFUL || status === qq.status.UPLOAD_FAILED) {\n return;\n }\n retVal = self._onComplete(id, name, result, xhr);\n if (retVal instanceof qq.Promise) {\n retVal.done(function() {\n self._options.callbacks.onComplete(id, name, result, xhr);\n });\n } else {\n self._options.callbacks.onComplete(id, name, result, xhr);\n }\n },\n onCancel: function(id, name, cancelFinalizationEffort) {\n var promise = new qq.Promise();\n self._handleCheckedCallback({\n name: \"onCancel\",\n callback: qq.bind(self._options.callbacks.onCancel, self, id, name),\n onFailure: promise.failure,\n onSuccess: function() {\n cancelFinalizationEffort.then(function() {\n self._onCancel(id, name);\n });\n promise.success();\n },\n identifier: id\n });\n return promise;\n },\n onUploadPrep: qq.bind(this._onUploadPrep, this),\n onUpload: function(id, name) {\n self._onUpload(id, name);\n var onUploadResult = self._options.callbacks.onUpload(id, name);\n if (qq.isGenericPromise(onUploadResult)) {\n self.log(qq.format(\"onUpload for {} returned a Promise - waiting for resolution.\", id));\n return onUploadResult;\n }\n return new qq.Promise().success();\n },\n onUploadChunk: function(id, name, chunkData) {\n self._onUploadChunk(id, chunkData);\n var onUploadChunkResult = self._options.callbacks.onUploadChunk(id, name, chunkData);\n if (qq.isGenericPromise(onUploadChunkResult)) {\n self.log(qq.format(\"onUploadChunk for {}.{} returned a Promise - waiting for resolution.\", id, chunkData.partIndex));\n return onUploadChunkResult;\n }\n return new qq.Promise().success();\n },\n onUploadChunkSuccess: function(id, chunkData, result, xhr) {\n self._onUploadChunkSuccess(id, chunkData);\n self._options.callbacks.onUploadChunkSuccess.apply(self, arguments);\n },\n onResume: function(id, name, chunkData, customResumeData) {\n return self._options.callbacks.onResume(id, name, chunkData, customResumeData);\n },\n onAutoRetry: function(id, name, responseJSON, xhr) {\n return self._onAutoRetry.apply(self, arguments);\n },\n onUuidChanged: function(id, newUuid) {\n self.log(\"Server requested UUID change from '\" + self.getUuid(id) + \"' to '\" + newUuid + \"'\");\n self.setUuid(id, newUuid);\n },\n getName: qq.bind(self.getName, self),\n getUuid: qq.bind(self.getUuid, self),\n getSize: qq.bind(self.getSize, self),\n setSize: qq.bind(self._setSize, self),\n getDataByUuid: function(uuid) {\n return self.getUploads({\n uuid: uuid\n });\n },\n isQueued: function(id) {\n var status = self.getUploads({\n id: id\n }).status;\n return status === qq.status.QUEUED || status === qq.status.SUBMITTED || status === qq.status.UPLOAD_RETRYING || status === qq.status.PAUSED;\n },\n getIdsInProxyGroup: self._uploadData.getIdsInProxyGroup,\n getIdsInBatch: self._uploadData.getIdsInBatch,\n isInProgress: function(id) {\n return self.getUploads({\n id: id\n }).status === qq.status.UPLOADING;\n },\n getCustomResumeData: qq.bind(self._getCustomResumeData, self),\n setStatus: function(id, status) {\n self._uploadData.setStatus(id, status);\n }\n };\n qq.each(this._options.request, function(prop, val) {\n options[prop] = val;\n });\n options.customHeaders = this._customHeadersStore;\n if (additionalOptions) {\n qq.each(additionalOptions, function(key, val) {\n options[key] = val;\n });\n }\n return new qq.UploadHandlerController(options, namespace);\n },\n _fileOrBlobRejected: function(id) {\n this._netUploadedOrQueued--;\n this._uploadData.setStatus(id, qq.status.REJECTED);\n },\n _formatSize: function(bytes) {\n if (bytes === 0) {\n return bytes + this._options.text.sizeSymbols[0];\n }\n var i = -1;\n do {\n bytes = bytes / 1e3;\n i++;\n } while (bytes > 999);\n return Math.max(bytes, .1).toFixed(1) + this._options.text.sizeSymbols[i];\n },\n _generateExtraButtonSpecs: function() {\n var self = this;\n this._extraButtonSpecs = {};\n qq.each(this._options.extraButtons, function(idx, extraButtonOptionEntry) {\n var multiple = extraButtonOptionEntry.multiple, validation = qq.extend({}, self._options.validation, true), extraButtonSpec = qq.extend({}, extraButtonOptionEntry);\n if (multiple === undefined) {\n multiple = self._options.multiple;\n }\n if (extraButtonSpec.validation) {\n qq.extend(validation, extraButtonOptionEntry.validation, true);\n }\n qq.extend(extraButtonSpec, {\n multiple: multiple,\n validation: validation\n }, true);\n self._initExtraButton(extraButtonSpec);\n });\n },\n _getButton: function(buttonId) {\n var extraButtonsSpec = this._extraButtonSpecs[buttonId];\n if (extraButtonsSpec) {\n return extraButtonsSpec.element;\n } else if (buttonId === this._defaultButtonId) {\n return this._options.button;\n }\n },\n _getButtonId: function(buttonOrFileInputOrFile) {\n var inputs, fileInput, fileBlobOrInput = buttonOrFileInputOrFile;\n if (fileBlobOrInput instanceof qq.BlobProxy) {\n fileBlobOrInput = fileBlobOrInput.referenceBlob;\n }\n if (fileBlobOrInput && !qq.isBlob(fileBlobOrInput)) {\n if (qq.isFile(fileBlobOrInput)) {\n return fileBlobOrInput.qqButtonId;\n } else if (fileBlobOrInput.tagName.toLowerCase() === \"input\" && fileBlobOrInput.type.toLowerCase() === \"file\") {\n return fileBlobOrInput.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME);\n }\n inputs = fileBlobOrInput.getElementsByTagName(\"input\");\n qq.each(inputs, function(idx, input) {\n if (input.getAttribute(\"type\") === \"file\") {\n fileInput = input;\n return false;\n }\n });\n if (fileInput) {\n return fileInput.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME);\n }\n }\n },\n _getCustomResumeData: function(fileId) {\n return this._customResumeDataStore.get(fileId);\n },\n _getNotFinished: function() {\n return this._uploadData.retrieve({\n status: [ qq.status.UPLOADING, qq.status.UPLOAD_RETRYING, qq.status.QUEUED, qq.status.SUBMITTING, qq.status.SUBMITTED, qq.status.PAUSED ]\n }).length;\n },\n _getValidationBase: function(buttonId) {\n var extraButtonSpec = this._extraButtonSpecs[buttonId];\n return extraButtonSpec ? extraButtonSpec.validation : this._options.validation;\n },\n _getValidationDescriptor: function(fileWrapper) {\n if (fileWrapper.file instanceof qq.BlobProxy) {\n return {\n name: qq.getFilename(fileWrapper.file.referenceBlob),\n size: fileWrapper.file.referenceBlob.size\n };\n }\n return {\n name: this.getUploads({\n id: fileWrapper.id\n }).name,\n size: this.getUploads({\n id: fileWrapper.id\n }).size\n };\n },\n _getValidationDescriptors: function(fileWrappers) {\n var self = this, fileDescriptors = [];\n qq.each(fileWrappers, function(idx, fileWrapper) {\n fileDescriptors.push(self._getValidationDescriptor(fileWrapper));\n });\n return fileDescriptors;\n },\n _handleCameraAccess: function() {\n if (this._options.camera.ios && qq.ios()) {\n var acceptIosCamera = \"image/*;capture=camera\", button = this._options.camera.button, buttonId = button ? this._getButtonId(button) : this._defaultButtonId, optionRoot = this._options;\n if (buttonId && buttonId !== this._defaultButtonId) {\n optionRoot = this._extraButtonSpecs[buttonId];\n }\n optionRoot.multiple = false;\n if (optionRoot.validation.acceptFiles === null) {\n optionRoot.validation.acceptFiles = acceptIosCamera;\n } else {\n optionRoot.validation.acceptFiles += \",\" + acceptIosCamera;\n }\n qq.each(this._buttons, function(idx, button) {\n if (button.getButtonId() === buttonId) {\n button.setMultiple(optionRoot.multiple);\n button.setAcceptFiles(optionRoot.acceptFiles);\n return false;\n }\n });\n }\n },\n _handleCheckedCallback: function(details) {\n var self = this, callbackRetVal = details.callback();\n if (qq.isGenericPromise(callbackRetVal)) {\n this.log(details.name + \" - waiting for \" + details.name + \" promise to be fulfilled for \" + details.identifier);\n return callbackRetVal.then(function(successParam) {\n self.log(details.name + \" promise success for \" + details.identifier);\n details.onSuccess(successParam);\n }, function() {\n if (details.onFailure) {\n self.log(details.name + \" promise failure for \" + details.identifier);\n details.onFailure();\n } else {\n self.log(details.name + \" promise failure for \" + details.identifier);\n }\n });\n }\n if (callbackRetVal !== false) {\n details.onSuccess(callbackRetVal);\n } else {\n if (details.onFailure) {\n this.log(details.name + \" - return value was 'false' for \" + details.identifier + \". Invoking failure callback.\");\n details.onFailure();\n } else {\n this.log(details.name + \" - return value was 'false' for \" + details.identifier + \". Will not proceed.\");\n }\n }\n return callbackRetVal;\n },\n _handleNewFile: function(file, batchId, newFileWrapperList) {\n var self = this, uuid = qq.getUniqueId(), size = -1, name = qq.getFilename(file), actualFile = file.blob || file, handler = this._customNewFileHandler ? this._customNewFileHandler : qq.bind(self._handleNewFileGeneric, self);\n if (!qq.isInput(actualFile) && actualFile.size >= 0) {\n size = actualFile.size;\n }\n handler(actualFile, name, uuid, size, newFileWrapperList, batchId, this._options.request.uuidName, {\n uploadData: self._uploadData,\n paramsStore: self._paramsStore,\n addFileToHandler: function(id, file) {\n self._handler.add(id, file);\n self._netUploadedOrQueued++;\n self._trackButton(id);\n }\n });\n },\n _handleNewFileGeneric: function(file, name, uuid, size, fileList, batchId) {\n var id = this._uploadData.addFile({\n uuid: uuid,\n name: name,\n size: size,\n batchId: batchId,\n file: file\n });\n this._handler.add(id, file);\n this._trackButton(id);\n this._netUploadedOrQueued++;\n fileList.push({\n id: id,\n file: file\n });\n },\n _handlePasteSuccess: function(blob, extSuppliedName) {\n var extension = blob.type.split(\"/\")[1], name = extSuppliedName;\n if (name == null) {\n name = this._options.paste.defaultName;\n }\n name += \".\" + extension;\n this.addFiles({\n name: name,\n blob: blob\n });\n },\n _handleDeleteSuccess: function(id) {\n if (this.getUploads({\n id: id\n }).status !== qq.status.DELETED) {\n var name = this.getName(id);\n this._netUploadedOrQueued--;\n this._netUploaded--;\n this._handler.expunge(id);\n this._uploadData.setStatus(id, qq.status.DELETED);\n this.log(\"Delete request for '\" + name + \"' has succeeded.\");\n }\n },\n _handleDeleteFailed: function(id, xhrOrXdr) {\n var name = this.getName(id);\n this._uploadData.setStatus(id, qq.status.DELETE_FAILED);\n this.log(\"Delete request for '\" + name + \"' has failed.\", \"error\");\n if (!xhrOrXdr || xhrOrXdr.withCredentials === undefined) {\n this._options.callbacks.onError(id, name, \"Delete request failed\", xhrOrXdr);\n } else {\n this._options.callbacks.onError(id, name, \"Delete request failed with response code \" + xhrOrXdr.status, xhrOrXdr);\n }\n },\n _initExtraButton: function(spec) {\n var button = this._createUploadButton({\n accept: spec.validation.acceptFiles,\n allowedExtensions: spec.validation.allowedExtensions,\n element: spec.element,\n folders: spec.folders,\n multiple: spec.multiple,\n title: spec.fileInputTitle\n });\n this._extraButtonSpecs[button.getButtonId()] = spec;\n },\n _initFormSupportAndParams: function() {\n this._formSupport = qq.FormSupport && new qq.FormSupport(this._options.form, qq.bind(this.uploadStoredFiles, this), qq.bind(this.log, this));\n if (this._formSupport && this._formSupport.attachedToForm) {\n this._paramsStore = this._createStore(this._options.request.params, this._formSupport.getFormInputsAsObject);\n this._options.autoUpload = this._formSupport.newAutoUpload;\n if (this._formSupport.newEndpoint) {\n this._options.request.endpoint = this._formSupport.newEndpoint;\n }\n } else {\n this._paramsStore = this._createStore(this._options.request.params);\n }\n },\n _isDeletePossible: function() {\n if (!qq.DeleteFileAjaxRequester || !this._options.deleteFile.enabled) {\n return false;\n }\n if (this._options.cors.expected) {\n if (qq.supportedFeatures.deleteFileCorsXhr) {\n return true;\n }\n if (qq.supportedFeatures.deleteFileCorsXdr && this._options.cors.allowXdr) {\n return true;\n }\n return false;\n }\n return true;\n },\n _isAllowedExtension: function(allowed, fileName) {\n var valid = false;\n if (!allowed.length) {\n return true;\n }\n qq.each(allowed, function(idx, allowedExt) {\n if (qq.isString(allowedExt)) {\n var extRegex = new RegExp(\"\\\\.\" + allowedExt + \"$\", \"i\");\n if (fileName.match(extRegex) != null) {\n valid = true;\n return false;\n }\n }\n });\n return valid;\n },\n _itemError: function(code, maybeNameOrNames, item) {\n var message = this._options.messages[code], allowedExtensions = [], names = [].concat(maybeNameOrNames), name = names[0], buttonId = this._getButtonId(item), validationBase = this._getValidationBase(buttonId), extensionsForMessage, placeholderMatch;\n function r(name, replacement) {\n message = message.replace(name, replacement);\n }\n qq.each(validationBase.allowedExtensions, function(idx, allowedExtension) {\n if (qq.isString(allowedExtension)) {\n allowedExtensions.push(allowedExtension);\n }\n });\n extensionsForMessage = allowedExtensions.join(\", \").toLowerCase();\n r(\"{file}\", this._options.formatFileName(name));\n r(\"{extensions}\", extensionsForMessage);\n r(\"{sizeLimit}\", this._formatSize(validationBase.sizeLimit));\n r(\"{minSizeLimit}\", this._formatSize(validationBase.minSizeLimit));\n placeholderMatch = message.match(/(\\{\\w+\\})/g);\n if (placeholderMatch !== null) {\n qq.each(placeholderMatch, function(idx, placeholder) {\n r(placeholder, names[idx]);\n });\n }\n this._options.callbacks.onError(null, name, message, undefined);\n return message;\n },\n _manualRetry: function(id, callback) {\n if (this._onBeforeManualRetry(id)) {\n this._netUploadedOrQueued++;\n this._uploadData.setStatus(id, qq.status.UPLOAD_RETRYING);\n if (callback) {\n callback(id);\n } else {\n this._handler.retry(id);\n }\n return true;\n }\n },\n _maybeAllComplete: function(id, status) {\n var self = this, notFinished = this._getNotFinished();\n if (status === qq.status.UPLOAD_SUCCESSFUL) {\n this._succeededSinceLastAllComplete.push(id);\n } else if (status === qq.status.UPLOAD_FAILED) {\n this._failedSinceLastAllComplete.push(id);\n }\n if (notFinished === 0 && (this._succeededSinceLastAllComplete.length || this._failedSinceLastAllComplete.length)) {\n setTimeout(function() {\n self._onAllComplete(self._succeededSinceLastAllComplete, self._failedSinceLastAllComplete);\n }, 0);\n }\n },\n _maybeHandleIos8SafariWorkaround: function() {\n var self = this;\n if (this._options.workarounds.ios8SafariUploads && qq.ios800() && qq.iosSafari()) {\n setTimeout(function() {\n window.alert(self._options.messages.unsupportedBrowserIos8Safari);\n }, 0);\n throw new qq.Error(this._options.messages.unsupportedBrowserIos8Safari);\n }\n },\n _maybeParseAndSendUploadError: function(id, name, response, xhr) {\n if (!response.success) {\n if (xhr && xhr.status !== 200 && !response.error) {\n this._options.callbacks.onError(id, name, \"XHR returned response code \" + xhr.status, xhr);\n } else {\n var errorReason = response.error ? response.error : this._options.text.defaultResponseError;\n this._options.callbacks.onError(id, name, errorReason, xhr);\n }\n }\n },\n _maybeProcessNextItemAfterOnValidateCallback: function(validItem, items, index, params, endpoint) {\n var self = this;\n if (items.length > index) {\n if (validItem || !this._options.validation.stopOnFirstInvalidFile) {\n setTimeout(function() {\n var validationDescriptor = self._getValidationDescriptor(items[index]), buttonId = self._getButtonId(items[index].file), button = self._getButton(buttonId);\n self._handleCheckedCallback({\n name: \"onValidate\",\n callback: qq.bind(self._options.callbacks.onValidate, self, validationDescriptor, button),\n onSuccess: qq.bind(self._onValidateCallbackSuccess, self, items, index, params, endpoint),\n onFailure: qq.bind(self._onValidateCallbackFailure, self, items, index, params, endpoint),\n identifier: \"Item '\" + validationDescriptor.name + \"', size: \" + validationDescriptor.size\n });\n }, 0);\n } else if (!validItem) {\n for (;index < items.length; index++) {\n self._fileOrBlobRejected(items[index].id);\n }\n }\n }\n },\n _onAllComplete: function(successful, failed) {\n this._totalProgress && this._totalProgress.onAllComplete(successful, failed, this._preventRetries);\n this._options.callbacks.onAllComplete(qq.extend([], successful), qq.extend([], failed));\n this._succeededSinceLastAllComplete = [];\n this._failedSinceLastAllComplete = [];\n },\n _onAutoRetry: function(id, name, responseJSON, xhr, callback) {\n var self = this;\n self._preventRetries[id] = responseJSON[self._options.retry.preventRetryResponseProperty];\n if (self._shouldAutoRetry(id)) {\n var retryWaitPeriod = self._options.retry.autoAttemptDelay * 1e3;\n self._maybeParseAndSendUploadError.apply(self, arguments);\n self._options.callbacks.onAutoRetry(id, name, self._autoRetries[id]);\n self._onBeforeAutoRetry(id, name);\n self._uploadData.setStatus(id, qq.status.UPLOAD_RETRYING);\n self._retryTimeouts[id] = setTimeout(function() {\n self.log(\"Starting retry for \" + name + \"...\");\n if (callback) {\n callback(id);\n } else {\n self._handler.retry(id);\n }\n }, retryWaitPeriod);\n return true;\n }\n },\n _onBeforeAutoRetry: function(id, name) {\n this.log(\"Waiting \" + this._options.retry.autoAttemptDelay + \" seconds before retrying \" + name + \"...\");\n },\n _onBeforeManualRetry: function(id) {\n var itemLimit = this._currentItemLimit, fileName;\n if (this._preventRetries[id]) {\n this.log(\"Retries are forbidden for id \" + id, \"warn\");\n return false;\n } else if (this._handler.isValid(id)) {\n fileName = this.getName(id);\n if (this._options.callbacks.onManualRetry(id, fileName) === false) {\n return false;\n }\n if (itemLimit > 0 && this._netUploadedOrQueued + 1 > itemLimit) {\n this._itemError(\"retryFailTooManyItems\");\n return false;\n }\n this.log(\"Retrying upload for '\" + fileName + \"' (id: \" + id + \")...\");\n return true;\n } else {\n this.log(\"'\" + id + \"' is not a valid file ID\", \"error\");\n return false;\n }\n },\n _onCancel: function(id, name) {\n this._netUploadedOrQueued--;\n clearTimeout(this._retryTimeouts[id]);\n var storedItemIndex = qq.indexOf(this._storedIds, id);\n if (!this._options.autoUpload && storedItemIndex >= 0) {\n this._storedIds.splice(storedItemIndex, 1);\n }\n this._uploadData.setStatus(id, qq.status.CANCELED);\n },\n _onComplete: function(id, name, result, xhr) {\n if (!result.success) {\n this._netUploadedOrQueued--;\n this._uploadData.setStatus(id, qq.status.UPLOAD_FAILED);\n if (result[this._options.retry.preventRetryResponseProperty] === true) {\n this._preventRetries[id] = true;\n }\n } else {\n if (result.thumbnailUrl) {\n this._thumbnailUrls[id] = result.thumbnailUrl;\n }\n this._netUploaded++;\n this._uploadData.setStatus(id, qq.status.UPLOAD_SUCCESSFUL);\n }\n this._maybeParseAndSendUploadError(id, name, result, xhr);\n return result.success ? true : false;\n },\n _onDelete: function(id) {\n this._uploadData.setStatus(id, qq.status.DELETING);\n },\n _onDeleteComplete: function(id, xhrOrXdr, isError) {\n var name = this.getName(id);\n if (isError) {\n this._handleDeleteFailed(id, xhrOrXdr);\n } else {\n this._handleDeleteSuccess(id);\n }\n },\n _onInputChange: function(input) {\n var fileIndex;\n if (qq.supportedFeatures.ajaxUploading) {\n for (fileIndex = 0; fileIndex < input.files.length; fileIndex++) {\n this._annotateWithButtonId(input.files[fileIndex], input);\n }\n this.addFiles(input.files);\n } else if (input.value.length > 0) {\n this.addFiles(input);\n }\n qq.each(this._buttons, function(idx, button) {\n button.reset();\n });\n },\n _onProgress: function(id, name, loaded, total) {\n this._totalProgress && this._totalProgress.onIndividualProgress(id, loaded, total);\n },\n _onSubmit: function(id, name) {},\n _onSubmitCallbackSuccess: function(id, name) {\n this._onSubmit.apply(this, arguments);\n this._uploadData.setStatus(id, qq.status.SUBMITTED);\n this._onSubmitted.apply(this, arguments);\n if (this._options.autoUpload) {\n this._options.callbacks.onSubmitted.apply(this, arguments);\n this._uploadFile(id);\n } else {\n this._storeForLater(id);\n this._options.callbacks.onSubmitted.apply(this, arguments);\n }\n },\n _onSubmitDelete: function(id, onSuccessCallback, additionalMandatedParams) {\n var uuid = this.getUuid(id), adjustedOnSuccessCallback;\n if (onSuccessCallback) {\n adjustedOnSuccessCallback = qq.bind(onSuccessCallback, this, id, uuid, additionalMandatedParams);\n }\n if (this._isDeletePossible()) {\n this._handleCheckedCallback({\n name: \"onSubmitDelete\",\n callback: qq.bind(this._options.callbacks.onSubmitDelete, this, id),\n onSuccess: adjustedOnSuccessCallback || qq.bind(this._deleteHandler.sendDelete, this, id, uuid, additionalMandatedParams),\n identifier: id\n });\n return true;\n } else {\n this.log(\"Delete request ignored for ID \" + id + \", delete feature is disabled or request not possible \" + \"due to CORS on a user agent that does not support pre-flighting.\", \"warn\");\n return false;\n }\n },\n _onSubmitted: function(id) {},\n _onTotalProgress: function(loaded, total) {\n this._options.callbacks.onTotalProgress(loaded, total);\n },\n _onUploadPrep: function(id) {},\n _onUpload: function(id, name) {\n this._uploadData.setStatus(id, qq.status.UPLOADING);\n },\n _onUploadChunk: function(id, chunkData) {},\n _onUploadChunkSuccess: function(id, chunkData) {\n if (!this._preventRetries[id] && this._options.retry.enableAuto) {\n this._autoRetries[id] = 0;\n }\n },\n _onUploadStatusChange: function(id, oldStatus, newStatus) {\n if (newStatus === qq.status.PAUSED) {\n clearTimeout(this._retryTimeouts[id]);\n }\n },\n _onValidateBatchCallbackFailure: function(fileWrappers) {\n var self = this;\n qq.each(fileWrappers, function(idx, fileWrapper) {\n self._fileOrBlobRejected(fileWrapper.id);\n });\n },\n _onValidateBatchCallbackSuccess: function(validationDescriptors, items, params, endpoint, button) {\n var errorMessage, itemLimit = this._currentItemLimit, proposedNetFilesUploadedOrQueued = this._netUploadedOrQueued;\n if (itemLimit === 0 || proposedNetFilesUploadedOrQueued <= itemLimit) {\n if (items.length > 0) {\n this._handleCheckedCallback({\n name: \"onValidate\",\n callback: qq.bind(this._options.callbacks.onValidate, this, validationDescriptors[0], button),\n onSuccess: qq.bind(this._onValidateCallbackSuccess, this, items, 0, params, endpoint),\n onFailure: qq.bind(this._onValidateCallbackFailure, this, items, 0, params, endpoint),\n identifier: \"Item '\" + items[0].file.name + \"', size: \" + items[0].file.size\n });\n } else {\n this._itemError(\"noFilesError\");\n }\n } else {\n this._onValidateBatchCallbackFailure(items);\n errorMessage = this._options.messages.tooManyItemsError.replace(/\\{netItems\\}/g, proposedNetFilesUploadedOrQueued).replace(/\\{itemLimit\\}/g, itemLimit);\n this._batchError(errorMessage);\n }\n },\n _onValidateCallbackFailure: function(items, index, params, endpoint) {\n var nextIndex = index + 1;\n this._fileOrBlobRejected(items[index].id, items[index].file.name);\n this._maybeProcessNextItemAfterOnValidateCallback(false, items, nextIndex, params, endpoint);\n },\n _onValidateCallbackSuccess: function(items, index, params, endpoint) {\n var self = this, nextIndex = index + 1, validationDescriptor = this._getValidationDescriptor(items[index]);\n this._validateFileOrBlobData(items[index], validationDescriptor).then(function() {\n self._upload(items[index].id, params, endpoint);\n self._maybeProcessNextItemAfterOnValidateCallback(true, items, nextIndex, params, endpoint);\n }, function() {\n self._maybeProcessNextItemAfterOnValidateCallback(false, items, nextIndex, params, endpoint);\n });\n },\n _prepareItemsForUpload: function(items, params, endpoint) {\n if (items.length === 0) {\n this._itemError(\"noFilesError\");\n return;\n }\n var validationDescriptors = this._getValidationDescriptors(items), buttonId = this._getButtonId(items[0].file), button = this._getButton(buttonId);\n this._handleCheckedCallback({\n name: \"onValidateBatch\",\n callback: qq.bind(this._options.callbacks.onValidateBatch, this, validationDescriptors, button),\n onSuccess: qq.bind(this._onValidateBatchCallbackSuccess, this, validationDescriptors, items, params, endpoint, button),\n onFailure: qq.bind(this._onValidateBatchCallbackFailure, this, items),\n identifier: \"batch validation\"\n });\n },\n _preventLeaveInProgress: function() {\n var self = this;\n this._disposeSupport.attach(window, \"beforeunload\", function(e) {\n if (self.getInProgress()) {\n e = e || window.event;\n e.returnValue = self._options.messages.onLeave;\n return self._options.messages.onLeave;\n }\n });\n },\n _refreshSessionData: function() {\n var self = this, options = this._options.session;\n if (qq.Session && this._options.session.endpoint != null) {\n if (!this._session) {\n qq.extend(options, {\n cors: this._options.cors\n });\n options.log = qq.bind(this.log, this);\n options.addFileRecord = qq.bind(this._addCannedFile, this);\n this._session = new qq.Session(options);\n }\n setTimeout(function() {\n self._session.refresh().then(function(response, xhrOrXdr) {\n self._sessionRequestComplete();\n self._options.callbacks.onSessionRequestComplete(response, true, xhrOrXdr);\n }, function(response, xhrOrXdr) {\n self._options.callbacks.onSessionRequestComplete(response, false, xhrOrXdr);\n });\n }, 0);\n }\n },\n _sessionRequestComplete: function() {},\n _setSize: function(id, newSize) {\n this._uploadData.updateSize(id, newSize);\n this._totalProgress && this._totalProgress.onNewSize(id);\n },\n _shouldAutoRetry: function(id) {\n var uploadData = this._uploadData.retrieve({\n id: id\n });\n if (!this._preventRetries[id] && this._options.retry.enableAuto && uploadData.status !== qq.status.PAUSED) {\n if (this._autoRetries[id] === undefined) {\n this._autoRetries[id] = 0;\n }\n if (this._autoRetries[id] < this._options.retry.maxAutoAttempts) {\n this._autoRetries[id] += 1;\n return true;\n }\n }\n return false;\n },\n _storeForLater: function(id) {\n this._storedIds.push(id);\n },\n _trackButton: function(id) {\n var buttonId;\n if (qq.supportedFeatures.ajaxUploading) {\n buttonId = this._handler.getFile(id).qqButtonId;\n } else {\n buttonId = this._getButtonId(this._handler.getInput(id));\n }\n if (buttonId) {\n this._buttonIdsForFileIds[id] = buttonId;\n }\n },\n _updateFormSupportAndParams: function(formElementOrId) {\n this._options.form.element = formElementOrId;\n this._formSupport = qq.FormSupport && new qq.FormSupport(this._options.form, qq.bind(this.uploadStoredFiles, this), qq.bind(this.log, this));\n if (this._formSupport && this._formSupport.attachedToForm) {\n this._paramsStore.addReadOnly(null, this._formSupport.getFormInputsAsObject);\n this._options.autoUpload = this._formSupport.newAutoUpload;\n if (this._formSupport.newEndpoint) {\n this.setEndpoint(this._formSupport.newEndpoint);\n }\n }\n },\n _upload: function(id, params, endpoint) {\n var name = this.getName(id);\n if (params) {\n this.setParams(params, id);\n }\n if (endpoint) {\n this.setEndpoint(endpoint, id);\n }\n this._handleCheckedCallback({\n name: \"onSubmit\",\n callback: qq.bind(this._options.callbacks.onSubmit, this, id, name),\n onSuccess: qq.bind(this._onSubmitCallbackSuccess, this, id, name),\n onFailure: qq.bind(this._fileOrBlobRejected, this, id, name),\n identifier: id\n });\n },\n _uploadFile: function(id) {\n if (!this._handler.upload(id)) {\n this._uploadData.setStatus(id, qq.status.QUEUED);\n }\n },\n _uploadStoredFiles: function() {\n var idToUpload, stillSubmitting, self = this;\n while (this._storedIds.length) {\n idToUpload = this._storedIds.shift();\n this._uploadFile(idToUpload);\n }\n stillSubmitting = this.getUploads({\n status: qq.status.SUBMITTING\n }).length;\n if (stillSubmitting) {\n qq.log(\"Still waiting for \" + stillSubmitting + \" files to clear submit queue. Will re-parse stored IDs array shortly.\");\n setTimeout(function() {\n self._uploadStoredFiles();\n }, 1e3);\n }\n },\n _validateFileOrBlobData: function(fileWrapper, validationDescriptor) {\n var self = this, file = function() {\n if (fileWrapper.file instanceof qq.BlobProxy) {\n return fileWrapper.file.referenceBlob;\n }\n return fileWrapper.file;\n }(), name = validationDescriptor.name, size = validationDescriptor.size, buttonId = this._getButtonId(fileWrapper.file), validationBase = this._getValidationBase(buttonId), validityChecker = new qq.Promise();\n validityChecker.then(function() {}, function() {\n self._fileOrBlobRejected(fileWrapper.id, name);\n });\n if (qq.isFileOrInput(file) && !this._isAllowedExtension(validationBase.allowedExtensions, name)) {\n this._itemError(\"typeError\", name, file);\n return validityChecker.failure();\n }\n if (!this._options.validation.allowEmpty && size === 0) {\n this._itemError(\"emptyError\", name, file);\n return validityChecker.failure();\n }\n if (size > 0 && validationBase.sizeLimit && size > validationBase.sizeLimit) {\n this._itemError(\"sizeError\", name, file);\n return validityChecker.failure();\n }\n if (size > 0 && size < validationBase.minSizeLimit) {\n this._itemError(\"minSizeError\", name, file);\n return validityChecker.failure();\n }\n if (qq.ImageValidation && qq.supportedFeatures.imagePreviews && qq.isFile(file)) {\n new qq.ImageValidation(file, qq.bind(self.log, self)).validate(validationBase.image).then(validityChecker.success, function(errorCode) {\n self._itemError(errorCode + \"ImageError\", name, file);\n validityChecker.failure();\n });\n } else {\n validityChecker.success();\n }\n return validityChecker;\n },\n _wrapCallbacks: function() {\n var self, safeCallback, prop;\n self = this;\n safeCallback = function(name, callback, args) {\n var errorMsg;\n try {\n return callback.apply(self, args);\n } catch (exception) {\n errorMsg = exception.message || exception.toString();\n self.log(\"Caught exception in '\" + name + \"' callback - \" + errorMsg, \"error\");\n }\n };\n for (prop in this._options.callbacks) {\n (function() {\n var callbackName, callbackFunc;\n callbackName = prop;\n callbackFunc = self._options.callbacks[callbackName];\n self._options.callbacks[callbackName] = function() {\n return safeCallback(callbackName, callbackFunc, arguments);\n };\n })();\n }\n }\n };\n })();\n (function() {\n \"use strict\";\n qq.FineUploaderBasic = function(o) {\n var self = this;\n this._options = {\n debug: false,\n button: null,\n multiple: true,\n maxConnections: 3,\n disableCancelForFormUploads: false,\n autoUpload: true,\n warnBeforeUnload: true,\n request: {\n customHeaders: {},\n endpoint: \"/server/upload\",\n filenameParam: \"qqfilename\",\n forceMultipart: true,\n inputName: \"qqfile\",\n method: \"POST\",\n omitDefaultParams: false,\n params: {},\n paramsInBody: true,\n requireSuccessJson: true,\n totalFileSizeName: \"qqtotalfilesize\",\n uuidName: \"qquuid\"\n },\n validation: {\n allowedExtensions: [],\n sizeLimit: 0,\n minSizeLimit: 0,\n itemLimit: 0,\n stopOnFirstInvalidFile: true,\n acceptFiles: null,\n image: {\n maxHeight: 0,\n maxWidth: 0,\n minHeight: 0,\n minWidth: 0\n },\n allowEmpty: false\n },\n callbacks: {\n onSubmit: function(id, name) {},\n onSubmitted: function(id, name) {},\n onComplete: function(id, name, responseJSON, maybeXhr) {},\n onAllComplete: function(successful, failed) {},\n onCancel: function(id, name) {},\n onUpload: function(id, name) {},\n onUploadChunk: function(id, name, chunkData) {},\n onUploadChunkSuccess: function(id, chunkData, responseJSON, xhr) {},\n onResume: function(id, fileName, chunkData, customResumeData) {},\n onProgress: function(id, name, loaded, total) {},\n onTotalProgress: function(loaded, total) {},\n onError: function(id, name, reason, maybeXhrOrXdr) {},\n onAutoRetry: function(id, name, attemptNumber) {},\n onManualRetry: function(id, name) {},\n onValidateBatch: function(fileOrBlobData) {},\n onValidate: function(fileOrBlobData) {},\n onSubmitDelete: function(id) {},\n onDelete: function(id) {},\n onDeleteComplete: function(id, xhrOrXdr, isError) {},\n onPasteReceived: function(blob) {},\n onStatusChange: function(id, oldStatus, newStatus) {},\n onSessionRequestComplete: function(response, success, xhrOrXdr) {}\n },\n messages: {\n typeError: \"{file} has an invalid extension. Valid extension(s): {extensions}.\",\n sizeError: \"{file} is too large, maximum file size is {sizeLimit}.\",\n minSizeError: \"{file} is too small, minimum file size is {minSizeLimit}.\",\n emptyError: \"{file} is empty, please select files again without it.\",\n noFilesError: \"No files to upload.\",\n tooManyItemsError: \"Too many items ({netItems}) would be uploaded. Item limit is {itemLimit}.\",\n maxHeightImageError: \"Image is too tall.\",\n maxWidthImageError: \"Image is too wide.\",\n minHeightImageError: \"Image is not tall enough.\",\n minWidthImageError: \"Image is not wide enough.\",\n retryFailTooManyItems: \"Retry failed - you have reached your file limit.\",\n onLeave: \"The files are being uploaded, if you leave now the upload will be canceled.\",\n unsupportedBrowserIos8Safari: \"Unrecoverable error - this browser does not permit file uploading of any kind due to serious bugs in iOS8 Safari. Please use iOS8 Chrome until Apple fixes these issues.\"\n },\n retry: {\n enableAuto: false,\n maxAutoAttempts: 3,\n autoAttemptDelay: 5,\n preventRetryResponseProperty: \"preventRetry\"\n },\n classes: {\n buttonHover: \"qq-upload-button-hover\",\n buttonFocus: \"qq-upload-button-focus\"\n },\n chunking: {\n enabled: false,\n concurrent: {\n enabled: false\n },\n mandatory: false,\n paramNames: {\n partIndex: \"qqpartindex\",\n partByteOffset: \"qqpartbyteoffset\",\n chunkSize: \"qqchunksize\",\n totalFileSize: \"qqtotalfilesize\",\n totalParts: \"qqtotalparts\"\n },\n partSize: function(id) {\n return 2e6;\n },\n success: {\n endpoint: null,\n headers: function(id) {\n return null;\n },\n jsonPayload: false,\n method: \"POST\",\n params: function(id) {\n return null;\n },\n resetOnStatus: []\n }\n },\n resume: {\n enabled: false,\n recordsExpireIn: 7,\n paramNames: {\n resuming: \"qqresume\"\n },\n customKeys: function(fileId) {\n return [];\n }\n },\n formatFileName: function(fileOrBlobName) {\n return fileOrBlobName;\n },\n text: {\n defaultResponseError: \"Upload failure reason unknown\",\n fileInputTitle: \"file input\",\n sizeSymbols: [ \"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\" ]\n },\n deleteFile: {\n enabled: false,\n method: \"DELETE\",\n endpoint: \"/server/upload\",\n customHeaders: {},\n params: {}\n },\n cors: {\n expected: false,\n sendCredentials: false,\n allowXdr: false\n },\n blobs: {\n defaultName: \"misc_data\"\n },\n paste: {\n targetElement: null,\n defaultName: \"pasted_image\"\n },\n camera: {\n ios: false,\n button: null\n },\n extraButtons: [],\n session: {\n endpoint: null,\n params: {},\n customHeaders: {},\n refreshOnReset: true\n },\n form: {\n element: \"qq-form\",\n autoUpload: false,\n interceptSubmit: true\n },\n scaling: {\n customResizer: null,\n sendOriginal: true,\n orient: true,\n defaultType: null,\n defaultQuality: 80,\n failureText: \"Failed to scale\",\n includeExif: false,\n sizes: []\n },\n workarounds: {\n iosEmptyVideos: true,\n ios8SafariUploads: true,\n ios8BrowserCrash: false\n }\n };\n qq.extend(this._options, o, true);\n this._buttons = [];\n this._extraButtonSpecs = {};\n this._buttonIdsForFileIds = [];\n this._wrapCallbacks();\n this._disposeSupport = new qq.DisposeSupport();\n this._storedIds = [];\n this._autoRetries = [];\n this._retryTimeouts = [];\n this._preventRetries = [];\n this._thumbnailUrls = [];\n this._netUploadedOrQueued = 0;\n this._netUploaded = 0;\n this._uploadData = this._createUploadDataTracker();\n this._initFormSupportAndParams();\n this._customHeadersStore = this._createStore(this._options.request.customHeaders);\n this._deleteFileCustomHeadersStore = this._createStore(this._options.deleteFile.customHeaders);\n this._deleteFileParamsStore = this._createStore(this._options.deleteFile.params);\n this._endpointStore = this._createStore(this._options.request.endpoint);\n this._deleteFileEndpointStore = this._createStore(this._options.deleteFile.endpoint);\n this._handler = this._createUploadHandler();\n this._deleteHandler = qq.DeleteFileAjaxRequester && this._createDeleteHandler();\n if (this._options.button) {\n this._defaultButtonId = this._createUploadButton({\n element: this._options.button,\n title: this._options.text.fileInputTitle\n }).getButtonId();\n }\n this._generateExtraButtonSpecs();\n this._handleCameraAccess();\n if (this._options.paste.targetElement) {\n if (qq.PasteSupport) {\n this._pasteHandler = this._createPasteHandler();\n } else {\n this.log(\"Paste support module not found\", \"error\");\n }\n }\n this._options.warnBeforeUnload && this._preventLeaveInProgress();\n this._imageGenerator = qq.ImageGenerator && new qq.ImageGenerator(qq.bind(this.log, this));\n this._refreshSessionData();\n this._succeededSinceLastAllComplete = [];\n this._failedSinceLastAllComplete = [];\n this._scaler = qq.Scaler && new qq.Scaler(this._options.scaling, qq.bind(this.log, this)) || {};\n if (this._scaler.enabled) {\n this._customNewFileHandler = qq.bind(this._scaler.handleNewFile, this._scaler);\n }\n if (qq.TotalProgress && qq.supportedFeatures.progressBar) {\n this._totalProgress = new qq.TotalProgress(qq.bind(this._onTotalProgress, this), function(id) {\n var entry = self._uploadData.retrieve({\n id: id\n });\n return entry && entry.size || 0;\n });\n }\n this._currentItemLimit = this._options.validation.itemLimit;\n this._customResumeDataStore = this._createStore();\n };\n qq.FineUploaderBasic.prototype = qq.basePublicApi;\n qq.extend(qq.FineUploaderBasic.prototype, qq.basePrivateApi);\n })();\n qq.AjaxRequester = function(o) {\n \"use strict\";\n var log, shouldParamsBeInQueryString, queue = [], requestData = {}, options = {\n acceptHeader: null,\n validMethods: [ \"PATCH\", \"POST\", \"PUT\" ],\n method: \"POST\",\n contentType: \"application/x-www-form-urlencoded\",\n maxConnections: 3,\n customHeaders: {},\n endpointStore: {},\n paramsStore: {},\n mandatedParams: {},\n allowXRequestedWithAndCacheControl: true,\n successfulResponseCodes: {\n DELETE: [ 200, 202, 204 ],\n PATCH: [ 200, 201, 202, 203, 204 ],\n POST: [ 200, 201, 202, 203, 204 ],\n PUT: [ 200, 201, 202, 203, 204 ],\n GET: [ 200 ]\n },\n cors: {\n expected: false,\n sendCredentials: false\n },\n log: function(str, level) {},\n onSend: function(id) {},\n onComplete: function(id, xhrOrXdr, isError) {},\n onProgress: null\n };\n qq.extend(options, o);\n log = options.log;\n if (qq.indexOf(options.validMethods, options.method) < 0) {\n throw new Error(\"'\" + options.method + \"' is not a supported method for this type of request!\");\n }\n function isSimpleMethod() {\n return qq.indexOf([ \"GET\", \"POST\", \"HEAD\" ], options.method) >= 0;\n }\n function containsNonSimpleHeaders(headers) {\n var containsNonSimple = false;\n qq.each(containsNonSimple, function(idx, header) {\n if (qq.indexOf([ \"Accept\", \"Accept-Language\", \"Content-Language\", \"Content-Type\" ], header) < 0) {\n containsNonSimple = true;\n return false;\n }\n });\n return containsNonSimple;\n }\n function isXdr(xhr) {\n return options.cors.expected && xhr.withCredentials === undefined;\n }\n function getCorsAjaxTransport() {\n var xhrOrXdr;\n if (window.XMLHttpRequest || window.ActiveXObject) {\n xhrOrXdr = qq.createXhrInstance();\n if (xhrOrXdr.withCredentials === undefined) {\n xhrOrXdr = new XDomainRequest();\n xhrOrXdr.onload = function() {};\n xhrOrXdr.onerror = function() {};\n xhrOrXdr.ontimeout = function() {};\n xhrOrXdr.onprogress = function() {};\n }\n }\n return xhrOrXdr;\n }\n function getXhrOrXdr(id, suppliedXhr) {\n var xhrOrXdr = requestData[id] && requestData[id].xhr;\n if (!xhrOrXdr) {\n if (suppliedXhr) {\n xhrOrXdr = suppliedXhr;\n } else {\n if (options.cors.expected) {\n xhrOrXdr = getCorsAjaxTransport();\n } else {\n xhrOrXdr = qq.createXhrInstance();\n }\n }\n requestData[id].xhr = xhrOrXdr;\n }\n return xhrOrXdr;\n }\n function dequeue(id) {\n var i = qq.indexOf(queue, id), max = options.maxConnections, nextId;\n delete requestData[id];\n queue.splice(i, 1);\n if (queue.length >= max && i < max) {\n nextId = queue[max - 1];\n sendRequest(nextId);\n }\n }\n function onComplete(id, xdrError) {\n var xhr = getXhrOrXdr(id), method = options.method, isError = xdrError === true;\n dequeue(id);\n if (isError) {\n log(method + \" request for \" + id + \" has failed\", \"error\");\n } else if (!isXdr(xhr) && !isResponseSuccessful(xhr.status)) {\n isError = true;\n log(method + \" request for \" + id + \" has failed - response code \" + xhr.status, \"error\");\n }\n options.onComplete(id, xhr, isError);\n }\n function getParams(id) {\n var onDemandParams = requestData[id].additionalParams, mandatedParams = options.mandatedParams, params;\n if (options.paramsStore.get) {\n params = options.paramsStore.get(id);\n }\n if (onDemandParams) {\n qq.each(onDemandParams, function(name, val) {\n params = params || {};\n params[name] = val;\n });\n }\n if (mandatedParams) {\n qq.each(mandatedParams, function(name, val) {\n params = params || {};\n params[name] = val;\n });\n }\n return params;\n }\n function sendRequest(id, optXhr) {\n var xhr = getXhrOrXdr(id, optXhr), method = options.method, params = getParams(id), payload = requestData[id].payload, url;\n options.onSend(id);\n url = createUrl(id, params, requestData[id].additionalQueryParams);\n if (isXdr(xhr)) {\n xhr.onload = getXdrLoadHandler(id);\n xhr.onerror = getXdrErrorHandler(id);\n } else {\n xhr.onreadystatechange = getXhrReadyStateChangeHandler(id);\n }\n registerForUploadProgress(id);\n xhr.open(method, url, true);\n if (options.cors.expected && options.cors.sendCredentials && !isXdr(xhr)) {\n xhr.withCredentials = true;\n }\n setHeaders(id);\n log(\"Sending \" + method + \" request for \" + id);\n if (payload) {\n xhr.send(payload);\n } else if (shouldParamsBeInQueryString || !params) {\n xhr.send();\n } else if (params && options.contentType && options.contentType.toLowerCase().indexOf(\"application/x-www-form-urlencoded\") >= 0) {\n xhr.send(qq.obj2url(params, \"\"));\n } else if (params && options.contentType && options.contentType.toLowerCase().indexOf(\"application/json\") >= 0) {\n xhr.send(JSON.stringify(params));\n } else {\n xhr.send(params);\n }\n return xhr;\n }\n function createUrl(id, params, additionalQueryParams) {\n var endpoint = options.endpointStore.get(id), addToPath = requestData[id].addToPath;\n if (addToPath != undefined) {\n endpoint += \"/\" + addToPath;\n }\n if (shouldParamsBeInQueryString && params) {\n endpoint = qq.obj2url(params, endpoint);\n }\n if (additionalQueryParams) {\n endpoint = qq.obj2url(additionalQueryParams, endpoint);\n }\n return endpoint;\n }\n function getXhrReadyStateChangeHandler(id) {\n return function() {\n if (getXhrOrXdr(id).readyState === 4) {\n onComplete(id);\n }\n };\n }\n function registerForUploadProgress(id) {\n var onProgress = options.onProgress;\n if (onProgress) {\n getXhrOrXdr(id).upload.onprogress = function(e) {\n if (e.lengthComputable) {\n onProgress(id, e.loaded, e.total);\n }\n };\n }\n }\n function getXdrLoadHandler(id) {\n return function() {\n onComplete(id);\n };\n }\n function getXdrErrorHandler(id) {\n return function() {\n onComplete(id, true);\n };\n }\n function setHeaders(id) {\n var xhr = getXhrOrXdr(id), customHeaders = options.customHeaders, onDemandHeaders = requestData[id].additionalHeaders || {}, method = options.method, allHeaders = {};\n if (!isXdr(xhr)) {\n options.acceptHeader && xhr.setRequestHeader(\"Accept\", options.acceptHeader);\n if (options.allowXRequestedWithAndCacheControl) {\n if (!options.cors.expected || (!isSimpleMethod() || containsNonSimpleHeaders(customHeaders))) {\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n xhr.setRequestHeader(\"Cache-Control\", \"no-cache\");\n }\n }\n if (options.contentType && (method === \"POST\" || method === \"PUT\")) {\n xhr.setRequestHeader(\"Content-Type\", options.contentType);\n }\n qq.extend(allHeaders, qq.isFunction(customHeaders) ? customHeaders(id) : customHeaders);\n qq.extend(allHeaders, onDemandHeaders);\n qq.each(allHeaders, function(name, val) {\n xhr.setRequestHeader(name, val);\n });\n }\n }\n function isResponseSuccessful(responseCode) {\n return qq.indexOf(options.successfulResponseCodes[options.method], responseCode) >= 0;\n }\n function prepareToSend(id, optXhr, addToPath, additionalParams, additionalQueryParams, additionalHeaders, payload) {\n requestData[id] = {\n addToPath: addToPath,\n additionalParams: additionalParams,\n additionalQueryParams: additionalQueryParams,\n additionalHeaders: additionalHeaders,\n payload: payload\n };\n var len = queue.push(id);\n if (len <= options.maxConnections) {\n return sendRequest(id, optXhr);\n }\n }\n shouldParamsBeInQueryString = options.method === \"GET\" || options.method === \"DELETE\";\n qq.extend(this, {\n initTransport: function(id) {\n var path, params, headers, payload, cacheBuster, additionalQueryParams;\n return {\n withPath: function(appendToPath) {\n path = appendToPath;\n return this;\n },\n withParams: function(additionalParams) {\n params = additionalParams;\n return this;\n },\n withQueryParams: function(_additionalQueryParams_) {\n additionalQueryParams = _additionalQueryParams_;\n return this;\n },\n withHeaders: function(additionalHeaders) {\n headers = additionalHeaders;\n return this;\n },\n withPayload: function(thePayload) {\n payload = thePayload;\n return this;\n },\n withCacheBuster: function() {\n cacheBuster = true;\n return this;\n },\n send: function(optXhr) {\n if (cacheBuster && qq.indexOf([ \"GET\", \"DELETE\" ], options.method) >= 0) {\n params.qqtimestamp = new Date().getTime();\n }\n return prepareToSend(id, optXhr, path, params, additionalQueryParams, headers, payload);\n }\n };\n },\n canceled: function(id) {\n dequeue(id);\n }\n });\n };\n qq.UploadHandler = function(spec) {\n \"use strict\";\n var proxy = spec.proxy, fileState = {}, onCancel = proxy.onCancel, getName = proxy.getName;\n qq.extend(this, {\n add: function(id, fileItem) {\n fileState[id] = fileItem;\n fileState[id].temp = {};\n },\n cancel: function(id) {\n var self = this, cancelFinalizationEffort = new qq.Promise(), onCancelRetVal = onCancel(id, getName(id), cancelFinalizationEffort);\n onCancelRetVal.then(function() {\n if (self.isValid(id)) {\n fileState[id].canceled = true;\n self.expunge(id);\n }\n cancelFinalizationEffort.success();\n });\n },\n expunge: function(id) {\n delete fileState[id];\n },\n getThirdPartyFileId: function(id) {\n return fileState[id].key;\n },\n isValid: function(id) {\n return fileState[id] !== undefined;\n },\n reset: function() {\n fileState = {};\n },\n _getFileState: function(id) {\n return fileState[id];\n },\n _setThirdPartyFileId: function(id, thirdPartyFileId) {\n fileState[id].key = thirdPartyFileId;\n },\n _wasCanceled: function(id) {\n return !!fileState[id].canceled;\n }\n });\n };\n qq.UploadHandlerController = function(o, namespace) {\n \"use strict\";\n var controller = this, chunkingPossible = false, concurrentChunkingPossible = false, chunking, preventRetryResponse, log, handler, options = {\n paramsStore: {},\n maxConnections: 3,\n chunking: {\n enabled: false,\n multiple: {\n enabled: false\n }\n },\n log: function(str, level) {},\n onProgress: function(id, fileName, loaded, total) {},\n onComplete: function(id, fileName, response, xhr) {},\n onCancel: function(id, fileName) {},\n onUploadPrep: function(id) {},\n onUpload: function(id, fileName) {},\n onUploadChunk: function(id, fileName, chunkData) {},\n onUploadChunkSuccess: function(id, chunkData, response, xhr) {},\n onAutoRetry: function(id, fileName, response, xhr) {},\n onResume: function(id, fileName, chunkData, customResumeData) {},\n onUuidChanged: function(id, newUuid) {},\n getName: function(id) {},\n setSize: function(id, newSize) {},\n isQueued: function(id) {},\n getIdsInProxyGroup: function(id) {},\n getIdsInBatch: function(id) {},\n isInProgress: function(id) {}\n }, chunked = {\n done: function(id, chunkIdx, response, xhr) {\n var chunkData = handler._getChunkData(id, chunkIdx);\n handler._getFileState(id).attemptingResume = false;\n delete handler._getFileState(id).temp.chunkProgress[chunkIdx];\n handler._getFileState(id).loaded += chunkData.size;\n options.onUploadChunkSuccess(id, handler._getChunkDataForCallback(chunkData), response, xhr);\n },\n finalize: function(id) {\n var size = options.getSize(id), name = options.getName(id);\n log(\"All chunks have been uploaded for \" + id + \" - finalizing....\");\n handler.finalizeChunks(id).then(function(response, xhr) {\n log(\"Finalize successful for \" + id);\n var normaizedResponse = upload.normalizeResponse(response, true);\n options.onProgress(id, name, size, size);\n handler._maybeDeletePersistedChunkData(id);\n upload.cleanup(id, normaizedResponse, xhr);\n }, function(response, xhr) {\n var normalizedResponse = upload.normalizeResponse(response, false);\n log(\"Problem finalizing chunks for file ID \" + id + \" - \" + normalizedResponse.error, \"error\");\n if (normalizedResponse.reset || xhr && options.chunking.success.resetOnStatus.indexOf(xhr.status) >= 0) {\n chunked.reset(id);\n }\n if (!options.onAutoRetry(id, name, normalizedResponse, xhr)) {\n upload.cleanup(id, normalizedResponse, xhr);\n }\n });\n },\n handleFailure: function(chunkIdx, id, response, xhr) {\n var name = options.getName(id);\n log(\"Chunked upload request failed for \" + id + \", chunk \" + chunkIdx);\n handler.clearCachedChunk(id, chunkIdx);\n var responseToReport = upload.normalizeResponse(response, false), inProgressIdx;\n if (responseToReport.reset) {\n chunked.reset(id);\n } else {\n var inProgressChunksArray = handler._getFileState(id).chunking.inProgress;\n inProgressIdx = inProgressChunksArray ? qq.indexOf(inProgressChunksArray, chunkIdx) : -1;\n if (inProgressIdx >= 0) {\n handler._getFileState(id).chunking.inProgress.splice(inProgressIdx, 1);\n handler._getFileState(id).chunking.remaining.unshift(chunkIdx);\n }\n }\n if (!handler._getFileState(id).temp.ignoreFailure) {\n if (concurrentChunkingPossible) {\n handler._getFileState(id).temp.ignoreFailure = true;\n log(qq.format(\"Going to attempt to abort these chunks: {}. These are currently in-progress: {}.\", JSON.stringify(Object.keys(handler._getXhrs(id))), JSON.stringify(handler._getFileState(id).chunking.inProgress)));\n qq.each(handler._getXhrs(id), function(ckid, ckXhr) {\n log(qq.format(\"Attempting to abort file {}.{}. XHR readyState {}. \", id, ckid, ckXhr.readyState));\n ckXhr.abort();\n ckXhr._cancelled = true;\n });\n handler.moveInProgressToRemaining(id);\n connectionManager.free(id, true);\n }\n if (!options.onAutoRetry(id, name, responseToReport, xhr)) {\n upload.cleanup(id, responseToReport, xhr);\n }\n }\n },\n hasMoreParts: function(id) {\n return !!handler._getFileState(id).chunking.remaining.length;\n },\n nextPart: function(id) {\n var nextIdx = handler._getFileState(id).chunking.remaining.shift();\n if (nextIdx >= handler._getTotalChunks(id)) {\n nextIdx = null;\n }\n return nextIdx;\n },\n reset: function(id) {\n log(\"Server or callback has ordered chunking effort to be restarted on next attempt for item ID \" + id, \"error\");\n handler._maybeDeletePersistedChunkData(id);\n handler.reevaluateChunking(id);\n handler._getFileState(id).loaded = 0;\n handler._getFileState(id).attemptingResume = false;\n },\n sendNext: function(id) {\n var size = options.getSize(id), name = options.getName(id), chunkIdx = chunked.nextPart(id), chunkData = handler._getChunkData(id, chunkIdx), fileState = handler._getFileState(id), resuming = fileState.attemptingResume, inProgressChunks = fileState.chunking.inProgress || [];\n if (fileState.loaded == null) {\n fileState.loaded = 0;\n }\n if (resuming && options.onResume(id, name, chunkData, fileState.customResumeData) === false) {\n chunked.reset(id);\n chunkIdx = chunked.nextPart(id);\n chunkData = handler._getChunkData(id, chunkIdx);\n resuming = false;\n }\n if (chunkIdx == null && inProgressChunks.length === 0) {\n chunked.finalize(id);\n } else {\n inProgressChunks.push(chunkIdx);\n handler._getFileState(id).chunking.inProgress = inProgressChunks;\n if (concurrentChunkingPossible) {\n connectionManager.open(id, chunkIdx);\n }\n if (concurrentChunkingPossible && connectionManager.available() && handler._getFileState(id).chunking.remaining.length) {\n chunked.sendNext(id);\n }\n if (chunkData.blob.size === 0) {\n log(qq.format(\"Chunk {} for file {} will not be uploaded, zero sized chunk.\", chunkIdx, id), \"error\");\n chunked.handleFailure(chunkIdx, id, \"File is no longer available\", null);\n }\n var onUploadChunkPromise = options.onUploadChunk(id, name, handler._getChunkDataForCallback(chunkData));\n onUploadChunkPromise.then(function(requestOverrides) {\n if (!options.isInProgress(id)) {\n log(qq.format(\"Not sending chunked upload request for item {}.{} - no longer in progress.\", id, chunkIdx));\n } else {\n log(qq.format(\"Sending chunked upload request for item {}.{}, bytes {}-{} of {}.\", id, chunkIdx, chunkData.start + 1, chunkData.end, size));\n var uploadChunkData = {\n chunkIdx: chunkIdx,\n id: id,\n overrides: requestOverrides,\n resuming: resuming\n };\n handler.uploadChunk(uploadChunkData).then(function success(response, xhr) {\n log(\"Chunked upload request succeeded for \" + id + \", chunk \" + chunkIdx);\n handler.clearCachedChunk(id, chunkIdx);\n var inProgressChunks = handler._getFileState(id).chunking.inProgress || [], responseToReport = upload.normalizeResponse(response, true), inProgressChunkIdx = qq.indexOf(inProgressChunks, chunkIdx);\n log(qq.format(\"Chunk {} for file {} uploaded successfully.\", chunkIdx, id));\n chunked.done(id, chunkIdx, responseToReport, xhr);\n if (inProgressChunkIdx >= 0) {\n inProgressChunks.splice(inProgressChunkIdx, 1);\n }\n handler._maybePersistChunkedState(id);\n if (!chunked.hasMoreParts(id) && inProgressChunks.length === 0) {\n chunked.finalize(id);\n } else if (chunked.hasMoreParts(id)) {\n chunked.sendNext(id);\n } else {\n log(qq.format(\"File ID {} has no more chunks to send and these chunk indexes are still marked as in-progress: {}\", id, JSON.stringify(inProgressChunks)));\n }\n }, function failure(response, xhr) {\n chunked.handleFailure(chunkIdx, id, response, xhr);\n }).done(function() {\n handler.clearXhr(id, chunkIdx);\n });\n }\n }, function(error) {\n chunked.handleFailure(chunkIdx, id, error, null);\n });\n }\n }\n }, connectionManager = {\n _open: [],\n _openChunks: {},\n _waiting: [],\n available: function() {\n var max = options.maxConnections, openChunkEntriesCount = 0, openChunksCount = 0;\n qq.each(connectionManager._openChunks, function(fileId, openChunkIndexes) {\n openChunkEntriesCount++;\n openChunksCount += openChunkIndexes.length;\n });\n return max - (connectionManager._open.length - openChunkEntriesCount + openChunksCount);\n },\n free: function(id, dontAllowNext) {\n var allowNext = !dontAllowNext, waitingIndex = qq.indexOf(connectionManager._waiting, id), connectionsIndex = qq.indexOf(connectionManager._open, id), nextId;\n delete connectionManager._openChunks[id];\n if (upload.getProxyOrBlob(id) instanceof qq.BlobProxy) {\n log(\"Generated blob upload has ended for \" + id + \", disposing generated blob.\");\n delete handler._getFileState(id).file;\n }\n if (waitingIndex >= 0) {\n connectionManager._waiting.splice(waitingIndex, 1);\n } else if (allowNext && connectionsIndex >= 0) {\n connectionManager._open.splice(connectionsIndex, 1);\n nextId = connectionManager._waiting.shift();\n if (nextId >= 0) {\n connectionManager._open.push(nextId);\n upload.start(nextId);\n }\n }\n },\n getWaitingOrConnected: function() {\n var waitingOrConnected = [];\n qq.each(connectionManager._openChunks, function(fileId, chunks) {\n if (chunks && chunks.length) {\n waitingOrConnected.push(parseInt(fileId));\n }\n });\n qq.each(connectionManager._open, function(idx, fileId) {\n if (!connectionManager._openChunks[fileId]) {\n waitingOrConnected.push(parseInt(fileId));\n }\n });\n waitingOrConnected = waitingOrConnected.concat(connectionManager._waiting);\n return waitingOrConnected;\n },\n isUsingConnection: function(id) {\n return qq.indexOf(connectionManager._open, id) >= 0;\n },\n open: function(id, chunkIdx) {\n if (chunkIdx == null) {\n connectionManager._waiting.push(id);\n }\n if (connectionManager.available()) {\n if (chunkIdx == null) {\n connectionManager._waiting.pop();\n connectionManager._open.push(id);\n } else {\n (function() {\n var openChunksEntry = connectionManager._openChunks[id] || [];\n openChunksEntry.push(chunkIdx);\n connectionManager._openChunks[id] = openChunksEntry;\n })();\n }\n return true;\n }\n return false;\n },\n reset: function() {\n connectionManager._waiting = [];\n connectionManager._open = [];\n }\n }, simple = {\n send: function(id, name) {\n var fileState = handler._getFileState(id);\n if (!fileState) {\n log(\"Ignoring send request as this upload may have been cancelled, File ID \" + id, \"warn\");\n return;\n }\n fileState.loaded = 0;\n log(\"Sending simple upload request for \" + id);\n handler.uploadFile(id).then(function(response, optXhr) {\n log(\"Simple upload request succeeded for \" + id);\n var responseToReport = upload.normalizeResponse(response, true), size = options.getSize(id);\n options.onProgress(id, name, size, size);\n upload.maybeNewUuid(id, responseToReport);\n upload.cleanup(id, responseToReport, optXhr);\n }, function(response, optXhr) {\n log(\"Simple upload request failed for \" + id);\n var responseToReport = upload.normalizeResponse(response, false);\n if (!options.onAutoRetry(id, name, responseToReport, optXhr)) {\n upload.cleanup(id, responseToReport, optXhr);\n }\n });\n }\n }, upload = {\n cancel: function(id) {\n log(\"Cancelling \" + id);\n options.paramsStore.remove(id);\n connectionManager.free(id);\n },\n cleanup: function(id, response, optXhr) {\n var name = options.getName(id);\n options.onComplete(id, name, response, optXhr);\n if (handler._getFileState(id)) {\n handler._clearXhrs && handler._clearXhrs(id);\n }\n connectionManager.free(id);\n },\n getProxyOrBlob: function(id) {\n return handler.getProxy && handler.getProxy(id) || handler.getFile && handler.getFile(id);\n },\n initHandler: function() {\n var handlerType = namespace ? qq[namespace] : qq.traditional, handlerModuleSubtype = qq.supportedFeatures.ajaxUploading ? \"Xhr\" : \"Form\";\n handler = new handlerType[handlerModuleSubtype + \"UploadHandler\"](options, {\n getCustomResumeData: options.getCustomResumeData,\n getDataByUuid: options.getDataByUuid,\n getName: options.getName,\n getSize: options.getSize,\n getUuid: options.getUuid,\n log: log,\n onCancel: options.onCancel,\n onProgress: options.onProgress,\n onUuidChanged: options.onUuidChanged,\n onFinalizing: function(id) {\n options.setStatus(id, qq.status.UPLOAD_FINALIZING);\n }\n });\n if (handler._removeExpiredChunkingRecords) {\n handler._removeExpiredChunkingRecords();\n }\n },\n isDeferredEligibleForUpload: function(id) {\n return options.isQueued(id);\n },\n maybeDefer: function(id, blob) {\n if (blob && !handler.getFile(id) && blob instanceof qq.BlobProxy) {\n options.onUploadPrep(id);\n log(\"Attempting to generate a blob on-demand for \" + id);\n blob.create().then(function(generatedBlob) {\n log(\"Generated an on-demand blob for \" + id);\n handler.updateBlob(id, generatedBlob);\n options.setSize(id, generatedBlob.size);\n handler.reevaluateChunking(id);\n upload.maybeSendDeferredFiles(id);\n }, function(errorMessage) {\n var errorResponse = {};\n if (errorMessage) {\n errorResponse.error = errorMessage;\n }\n log(qq.format(\"Failed to generate blob for ID {}. Error message: {}.\", id, errorMessage), \"error\");\n options.onComplete(id, options.getName(id), qq.extend(errorResponse, preventRetryResponse), null);\n upload.maybeSendDeferredFiles(id);\n connectionManager.free(id);\n });\n } else {\n return upload.maybeSendDeferredFiles(id);\n }\n return false;\n },\n maybeSendDeferredFiles: function(id) {\n var idsInGroup = options.getIdsInProxyGroup(id), uploadedThisId = false;\n if (idsInGroup && idsInGroup.length) {\n log(\"Maybe ready to upload proxy group file \" + id);\n qq.each(idsInGroup, function(idx, idInGroup) {\n if (upload.isDeferredEligibleForUpload(idInGroup) && !!handler.getFile(idInGroup)) {\n uploadedThisId = idInGroup === id;\n upload.now(idInGroup);\n } else if (upload.isDeferredEligibleForUpload(idInGroup)) {\n return false;\n }\n });\n } else {\n uploadedThisId = true;\n upload.now(id);\n }\n return uploadedThisId;\n },\n maybeNewUuid: function(id, response) {\n if (response.newUuid !== undefined) {\n options.onUuidChanged(id, response.newUuid);\n }\n },\n normalizeResponse: function(originalResponse, successful) {\n var response = originalResponse;\n if (!qq.isObject(originalResponse)) {\n response = {};\n if (qq.isString(originalResponse) && !successful) {\n response.error = originalResponse;\n }\n }\n response.success = successful;\n return response;\n },\n now: function(id) {\n var name = options.getName(id);\n if (!controller.isValid(id)) {\n throw new qq.Error(id + \" is not a valid file ID to upload!\");\n }\n options.onUpload(id, name).then(function(response) {\n if (response && response.pause) {\n options.setStatus(id, qq.status.PAUSED);\n handler.pause(id);\n connectionManager.free(id);\n } else {\n if (chunkingPossible && handler._shouldChunkThisFile(id)) {\n chunked.sendNext(id);\n } else {\n simple.send(id, name);\n }\n }\n }, function(error) {\n error = error || {};\n log(id + \" upload start aborted due to rejected onUpload Promise - details: \" + error, \"error\");\n if (!options.onAutoRetry(id, name, error.responseJSON || {})) {\n var response = upload.normalizeResponse(error.responseJSON, false);\n upload.cleanup(id, response);\n }\n });\n },\n start: function(id) {\n var blobToUpload = upload.getProxyOrBlob(id);\n if (blobToUpload) {\n return upload.maybeDefer(id, blobToUpload);\n } else {\n upload.now(id);\n return true;\n }\n }\n };\n qq.extend(this, {\n add: function(id, file) {\n handler.add.apply(this, arguments);\n },\n upload: function(id) {\n if (connectionManager.open(id)) {\n return upload.start(id);\n }\n return false;\n },\n retry: function(id) {\n if (concurrentChunkingPossible) {\n handler._getFileState(id).temp.ignoreFailure = false;\n }\n if (connectionManager.isUsingConnection(id)) {\n return upload.start(id);\n } else {\n return controller.upload(id);\n }\n },\n cancel: function(id) {\n var cancelRetVal = handler.cancel(id);\n if (qq.isGenericPromise(cancelRetVal)) {\n cancelRetVal.then(function() {\n upload.cancel(id);\n });\n } else if (cancelRetVal !== false) {\n upload.cancel(id);\n }\n },\n cancelAll: function() {\n var waitingOrConnected = connectionManager.getWaitingOrConnected(), i;\n if (waitingOrConnected.length) {\n for (i = waitingOrConnected.length - 1; i >= 0; i--) {\n controller.cancel(waitingOrConnected[i]);\n }\n }\n connectionManager.reset();\n },\n getFile: function(id) {\n if (handler.getProxy && handler.getProxy(id)) {\n return handler.getProxy(id).referenceBlob;\n }\n return handler.getFile && handler.getFile(id);\n },\n isProxied: function(id) {\n return !!(handler.getProxy && handler.getProxy(id));\n },\n getInput: function(id) {\n if (handler.getInput) {\n return handler.getInput(id);\n }\n },\n reset: function() {\n log(\"Resetting upload handler\");\n controller.cancelAll();\n connectionManager.reset();\n handler.reset();\n },\n expunge: function(id) {\n if (controller.isValid(id)) {\n return handler.expunge(id);\n }\n },\n isValid: function(id) {\n return handler.isValid(id);\n },\n hasResumeRecord: function(id) {\n var key = handler.isValid(id) && handler._getLocalStorageId && handler._getLocalStorageId(id);\n if (key) {\n return !!localStorage.getItem(key);\n }\n return false;\n },\n getResumableFilesData: function() {\n if (handler.getResumableFilesData) {\n return handler.getResumableFilesData();\n }\n return [];\n },\n getThirdPartyFileId: function(id) {\n if (controller.isValid(id)) {\n return handler.getThirdPartyFileId(id);\n }\n },\n pause: function(id) {\n if (controller.isResumable(id) && handler.pause && controller.isValid(id) && handler.pause(id)) {\n connectionManager.free(id);\n handler.moveInProgressToRemaining(id);\n return true;\n }\n return false;\n },\n isAttemptingResume: function(id) {\n return !!handler.isAttemptingResume && handler.isAttemptingResume(id);\n },\n isResumable: function(id) {\n return !!handler.isResumable && handler.isResumable(id);\n }\n });\n qq.extend(options, o);\n log = options.log;\n chunkingPossible = options.chunking.enabled && qq.supportedFeatures.chunking;\n concurrentChunkingPossible = chunkingPossible && options.chunking.concurrent.enabled;\n preventRetryResponse = function() {\n var response = {};\n response[options.preventRetryParam] = true;\n return response;\n }();\n upload.initHandler();\n };\n qq.WindowReceiveMessage = function(o) {\n \"use strict\";\n var options = {\n log: function(message, level) {}\n }, callbackWrapperDetachers = {};\n qq.extend(options, o);\n qq.extend(this, {\n receiveMessage: function(id, callback) {\n var onMessageCallbackWrapper = function(event) {\n callback(event.data);\n };\n if (window.postMessage) {\n callbackWrapperDetachers[id] = qq(window).attach(\"message\", onMessageCallbackWrapper);\n } else {\n log(\"iframe message passing not supported in this browser!\", \"error\");\n }\n },\n stopReceivingMessages: function(id) {\n if (window.postMessage) {\n var detacher = callbackWrapperDetachers[id];\n if (detacher) {\n detacher();\n }\n }\n }\n });\n };\n qq.FormUploadHandler = function(spec) {\n \"use strict\";\n var options = spec.options, handler = this, proxy = spec.proxy, formHandlerInstanceId = qq.getUniqueId(), onloadCallbacks = {}, detachLoadEvents = {}, postMessageCallbackTimers = {}, isCors = options.isCors, inputName = options.inputName, getUuid = proxy.getUuid, log = proxy.log, corsMessageReceiver = new qq.WindowReceiveMessage({\n log: log\n });\n function expungeFile(id) {\n delete detachLoadEvents[id];\n if (isCors) {\n clearTimeout(postMessageCallbackTimers[id]);\n delete postMessageCallbackTimers[id];\n corsMessageReceiver.stopReceivingMessages(id);\n }\n var iframe = document.getElementById(handler._getIframeName(id));\n if (iframe) {\n iframe.setAttribute(\"src\", \"javascript:false;\");\n qq(iframe).remove();\n }\n }\n function getFileIdForIframeName(iframeName) {\n return iframeName.split(\"_\")[0];\n }\n function initIframeForUpload(name) {\n var iframe = qq.toElement(\"\");\n iframe.setAttribute(\"id\", name);\n iframe.style.display = \"none\";\n document.body.appendChild(iframe);\n return iframe;\n }\n function registerPostMessageCallback(iframe, callback) {\n var iframeName = iframe.id, fileId = getFileIdForIframeName(iframeName), uuid = getUuid(fileId);\n onloadCallbacks[uuid] = callback;\n detachLoadEvents[fileId] = qq(iframe).attach(\"load\", function() {\n if (handler.getInput(fileId)) {\n log(\"Received iframe load event for CORS upload request (iframe name \" + iframeName + \")\");\n postMessageCallbackTimers[iframeName] = setTimeout(function() {\n var errorMessage = \"No valid message received from loaded iframe for iframe name \" + iframeName;\n log(errorMessage, \"error\");\n callback({\n error: errorMessage\n });\n }, 1e3);\n }\n });\n corsMessageReceiver.receiveMessage(iframeName, function(message) {\n log(\"Received the following window message: '\" + message + \"'\");\n var fileId = getFileIdForIframeName(iframeName), response = handler._parseJsonResponse(message), uuid = response.uuid, onloadCallback;\n if (uuid && onloadCallbacks[uuid]) {\n log(\"Handling response for iframe name \" + iframeName);\n clearTimeout(postMessageCallbackTimers[iframeName]);\n delete postMessageCallbackTimers[iframeName];\n handler._detachLoadEvent(iframeName);\n onloadCallback = onloadCallbacks[uuid];\n delete onloadCallbacks[uuid];\n corsMessageReceiver.stopReceivingMessages(iframeName);\n onloadCallback(response);\n } else if (!uuid) {\n log(\"'\" + message + \"' does not contain a UUID - ignoring.\");\n }\n });\n }\n qq.extend(this, new qq.UploadHandler(spec));\n qq.override(this, function(super_) {\n return {\n add: function(id, fileInput) {\n super_.add(id, {\n input: fileInput\n });\n fileInput.setAttribute(\"name\", inputName);\n if (fileInput.parentNode) {\n qq(fileInput).remove();\n }\n },\n expunge: function(id) {\n expungeFile(id);\n super_.expunge(id);\n },\n isValid: function(id) {\n return super_.isValid(id) && handler._getFileState(id).input !== undefined;\n }\n };\n });\n qq.extend(this, {\n getInput: function(id) {\n return handler._getFileState(id).input;\n },\n _attachLoadEvent: function(iframe, callback) {\n var responseDescriptor;\n if (isCors) {\n registerPostMessageCallback(iframe, callback);\n } else {\n detachLoadEvents[iframe.id] = qq(iframe).attach(\"load\", function() {\n log(\"Received response for \" + iframe.id);\n if (!iframe.parentNode) {\n return;\n }\n try {\n if (iframe.contentDocument && iframe.contentDocument.body && iframe.contentDocument.body.innerHTML == \"false\") {\n return;\n }\n } catch (error) {\n log(\"Error when attempting to access iframe during handling of upload response (\" + error.message + \")\", \"error\");\n responseDescriptor = {\n success: false\n };\n }\n callback(responseDescriptor);\n });\n }\n },\n _createIframe: function(id) {\n var iframeName = handler._getIframeName(id);\n return initIframeForUpload(iframeName);\n },\n _detachLoadEvent: function(id) {\n if (detachLoadEvents[id] !== undefined) {\n detachLoadEvents[id]();\n delete detachLoadEvents[id];\n }\n },\n _getIframeName: function(fileId) {\n return fileId + \"_\" + formHandlerInstanceId;\n },\n _initFormForUpload: function(spec) {\n var method = spec.method, endpoint = spec.endpoint, params = spec.params, paramsInBody = spec.paramsInBody, targetName = spec.targetName, form = qq.toElement(\"
\"), url = endpoint;\n if (paramsInBody) {\n qq.obj2Inputs(params, form);\n } else {\n url = qq.obj2url(params, endpoint);\n }\n form.setAttribute(\"action\", url);\n form.setAttribute(\"target\", targetName);\n form.style.display = \"none\";\n document.body.appendChild(form);\n return form;\n },\n _parseJsonResponse: function(innerHtmlOrMessage) {\n var response = {};\n try {\n response = qq.parseJson(innerHtmlOrMessage);\n } catch (error) {\n log(\"Error when attempting to parse iframe upload response (\" + error.message + \")\", \"error\");\n }\n return response;\n }\n });\n };\n qq.XhrUploadHandler = function(spec) {\n \"use strict\";\n var handler = this, namespace = spec.options.namespace, proxy = spec.proxy, chunking = spec.options.chunking, getChunkSize = function(id) {\n var fileState = handler._getFileState(id);\n if (fileState.chunkSize) {\n return fileState.chunkSize;\n } else {\n var chunkSize = chunking.partSize;\n if (qq.isFunction(chunkSize)) {\n chunkSize = chunkSize(id, getSize(id));\n }\n fileState.chunkSize = chunkSize;\n return chunkSize;\n }\n }, resume = spec.options.resume, chunkFiles = chunking && spec.options.chunking.enabled && qq.supportedFeatures.chunking, resumeEnabled = resume && spec.options.resume.enabled && chunkFiles && qq.supportedFeatures.resume, getName = proxy.getName, getSize = proxy.getSize, getUuid = proxy.getUuid, getEndpoint = proxy.getEndpoint, getDataByUuid = proxy.getDataByUuid, onUuidChanged = proxy.onUuidChanged, onProgress = proxy.onProgress, log = proxy.log, getCustomResumeData = proxy.getCustomResumeData;\n function abort(id) {\n qq.each(handler._getXhrs(id), function(xhrId, xhr) {\n var ajaxRequester = handler._getAjaxRequester(id, xhrId);\n xhr.onreadystatechange = null;\n xhr.upload.onprogress = null;\n xhr.abort();\n ajaxRequester && ajaxRequester.canceled && ajaxRequester.canceled(id);\n });\n }\n qq.extend(this, new qq.UploadHandler(spec));\n qq.override(this, function(super_) {\n return {\n add: function(id, blobOrProxy) {\n if (qq.isFile(blobOrProxy) || qq.isBlob(blobOrProxy)) {\n super_.add(id, {\n file: blobOrProxy\n });\n } else if (blobOrProxy instanceof qq.BlobProxy) {\n super_.add(id, {\n proxy: blobOrProxy\n });\n } else {\n throw new Error(\"Passed obj is not a File, Blob, or proxy\");\n }\n handler._initTempState(id);\n resumeEnabled && handler._maybePrepareForResume(id);\n },\n expunge: function(id) {\n abort(id);\n handler._maybeDeletePersistedChunkData(id);\n handler._clearXhrs(id);\n super_.expunge(id);\n }\n };\n });\n qq.extend(this, {\n clearCachedChunk: function(id, chunkIdx) {\n var fileState = handler._getFileState(id);\n if (fileState) {\n delete fileState.temp.cachedChunks[chunkIdx];\n }\n },\n clearXhr: function(id, chunkIdx) {\n var tempState = handler._getFileState(id).temp;\n if (tempState.xhrs) {\n delete tempState.xhrs[chunkIdx];\n }\n if (tempState.ajaxRequesters) {\n delete tempState.ajaxRequesters[chunkIdx];\n }\n },\n finalizeChunks: function(id, responseParser) {\n var lastChunkIdx = handler._getTotalChunks(id) - 1, xhr = handler._getXhr(id, lastChunkIdx);\n if (responseParser) {\n return new qq.Promise().success(responseParser(xhr), xhr);\n }\n return new qq.Promise().success({}, xhr);\n },\n getFile: function(id) {\n return handler.isValid(id) && handler._getFileState(id).file;\n },\n getProxy: function(id) {\n return handler.isValid(id) && handler._getFileState(id).proxy;\n },\n getResumableFilesData: function() {\n var resumableFilesData = [];\n handler._iterateResumeRecords(function(key, uploadData) {\n handler.moveInProgressToRemaining(null, uploadData.chunking.inProgress, uploadData.chunking.remaining);\n var data = {\n name: uploadData.name,\n remaining: uploadData.chunking.remaining,\n size: uploadData.size,\n uuid: uploadData.uuid\n };\n if (uploadData.key) {\n data.key = uploadData.key;\n }\n if (uploadData.customResumeData) {\n data.customResumeData = uploadData.customResumeData;\n }\n resumableFilesData.push(data);\n });\n return resumableFilesData;\n },\n isAttemptingResume: function(id) {\n return handler._getFileState(id).attemptingResume;\n },\n isResumable: function(id) {\n return !!chunking && handler.isValid(id) && !handler._getFileState(id).notResumable;\n },\n moveInProgressToRemaining: function(id, optInProgress, optRemaining) {\n var fileState = handler._getFileState(id) || {}, chunkingState = fileState.chunking || {}, inProgress = optInProgress || chunkingState.inProgress, remaining = optRemaining || chunkingState.remaining;\n if (inProgress) {\n log(qq.format(\"Moving these chunks from in-progress {}, to remaining.\", JSON.stringify(inProgress)));\n inProgress.reverse();\n qq.each(inProgress, function(idx, chunkIdx) {\n remaining.unshift(chunkIdx);\n });\n inProgress.length = 0;\n }\n },\n pause: function(id) {\n if (handler.isValid(id)) {\n log(qq.format(\"Aborting XHR upload for {} '{}' due to pause instruction.\", id, getName(id)));\n handler._getFileState(id).paused = true;\n abort(id);\n return true;\n }\n },\n reevaluateChunking: function(id) {\n if (chunking && handler.isValid(id)) {\n var state = handler._getFileState(id), totalChunks, i;\n delete state.chunking;\n state.chunking = {};\n totalChunks = handler._getTotalChunks(id);\n if (totalChunks > 1 || chunking.mandatory) {\n state.chunking.enabled = true;\n state.chunking.parts = totalChunks;\n state.chunking.remaining = [];\n for (i = 0; i < totalChunks; i++) {\n state.chunking.remaining.push(i);\n }\n handler._initTempState(id);\n } else {\n state.chunking.enabled = false;\n }\n }\n },\n updateBlob: function(id, newBlob) {\n if (handler.isValid(id)) {\n handler._getFileState(id).file = newBlob;\n }\n },\n _clearXhrs: function(id) {\n var tempState = handler._getFileState(id).temp;\n qq.each(tempState.ajaxRequesters, function(chunkId) {\n delete tempState.ajaxRequesters[chunkId];\n });\n qq.each(tempState.xhrs, function(chunkId) {\n delete tempState.xhrs[chunkId];\n });\n },\n _createXhr: function(id, optChunkIdx) {\n return handler._registerXhr(id, optChunkIdx, qq.createXhrInstance());\n },\n _getAjaxRequester: function(id, optChunkIdx) {\n var chunkIdx = optChunkIdx == null ? -1 : optChunkIdx;\n return handler._getFileState(id).temp.ajaxRequesters[chunkIdx];\n },\n _getChunkData: function(id, chunkIndex) {\n var chunkSize = getChunkSize(id), fileSize = getSize(id), fileOrBlob = handler.getFile(id), startBytes = chunkSize * chunkIndex, endBytes = startBytes + chunkSize >= fileSize ? fileSize : startBytes + chunkSize, totalChunks = handler._getTotalChunks(id), cachedChunks = this._getFileState(id).temp.cachedChunks, blob = cachedChunks[chunkIndex] || qq.sliceBlob(fileOrBlob, startBytes, endBytes);\n cachedChunks[chunkIndex] = blob;\n return {\n part: chunkIndex,\n start: startBytes,\n end: endBytes,\n count: totalChunks,\n blob: blob,\n size: endBytes - startBytes\n };\n },\n _getChunkDataForCallback: function(chunkData) {\n return {\n partIndex: chunkData.part,\n startByte: chunkData.start + 1,\n endByte: chunkData.end,\n totalParts: chunkData.count\n };\n },\n _getLocalStorageId: function(id) {\n var formatVersion = \"5.0\", name = getName(id), size = getSize(id), chunkSize = getChunkSize(id), endpoint = getEndpoint(id), customKeys = resume.customKeys(id), localStorageId = qq.format(\"qq{}resume{}-{}-{}-{}-{}\", namespace, formatVersion, name, size, chunkSize, endpoint);\n customKeys.forEach(function(key) {\n localStorageId += \"-\" + key;\n });\n return localStorageId;\n },\n _getMimeType: function(id) {\n return handler.getFile(id).type;\n },\n _getPersistableData: function(id) {\n return handler._getFileState(id).chunking;\n },\n _getTotalChunks: function(id) {\n if (chunking) {\n var fileSize = getSize(id), chunkSize = getChunkSize(id);\n return Math.ceil(fileSize / chunkSize);\n }\n },\n _getXhr: function(id, optChunkIdx) {\n var chunkIdx = optChunkIdx == null ? -1 : optChunkIdx;\n return handler._getFileState(id).temp.xhrs[chunkIdx];\n },\n _getXhrs: function(id) {\n return handler._getFileState(id).temp.xhrs;\n },\n _iterateResumeRecords: function(callback) {\n if (resumeEnabled) {\n qq.each(localStorage, function(key, item) {\n if (key.indexOf(qq.format(\"qq{}resume\", namespace)) === 0) {\n var uploadData = JSON.parse(item);\n callback(key, uploadData);\n }\n });\n }\n },\n _initTempState: function(id) {\n handler._getFileState(id).temp = {\n ajaxRequesters: {},\n chunkProgress: {},\n xhrs: {},\n cachedChunks: {}\n };\n },\n _markNotResumable: function(id) {\n handler._getFileState(id).notResumable = true;\n },\n _maybeDeletePersistedChunkData: function(id) {\n var localStorageId;\n if (resumeEnabled && handler.isResumable(id)) {\n localStorageId = handler._getLocalStorageId(id);\n if (localStorageId && localStorage.getItem(localStorageId)) {\n localStorage.removeItem(localStorageId);\n return true;\n }\n }\n return false;\n },\n _maybePrepareForResume: function(id) {\n var state = handler._getFileState(id), localStorageId, persistedData;\n if (resumeEnabled && state.key === undefined) {\n localStorageId = handler._getLocalStorageId(id);\n persistedData = localStorage.getItem(localStorageId);\n if (persistedData) {\n persistedData = JSON.parse(persistedData);\n if (getDataByUuid(persistedData.uuid)) {\n handler._markNotResumable(id);\n } else {\n log(qq.format(\"Identified file with ID {} and name of {} as resumable.\", id, getName(id)));\n onUuidChanged(id, persistedData.uuid);\n state.key = persistedData.key;\n state.chunking = persistedData.chunking;\n state.loaded = persistedData.loaded;\n state.customResumeData = persistedData.customResumeData;\n state.attemptingResume = true;\n handler.moveInProgressToRemaining(id);\n }\n }\n }\n },\n _maybePersistChunkedState: function(id) {\n var state = handler._getFileState(id), localStorageId, persistedData;\n if (resumeEnabled && handler.isResumable(id)) {\n var customResumeData = getCustomResumeData(id);\n localStorageId = handler._getLocalStorageId(id);\n persistedData = {\n name: getName(id),\n size: getSize(id),\n uuid: getUuid(id),\n key: state.key,\n chunking: state.chunking,\n loaded: state.loaded,\n lastUpdated: Date.now()\n };\n if (customResumeData) {\n persistedData.customResumeData = customResumeData;\n }\n try {\n localStorage.setItem(localStorageId, JSON.stringify(persistedData));\n } catch (error) {\n log(qq.format(\"Unable to save resume data for '{}' due to error: '{}'.\", id, error.toString()), \"warn\");\n }\n }\n },\n _registerProgressHandler: function(id, chunkIdx, chunkSize) {\n var xhr = handler._getXhr(id, chunkIdx), name = getName(id), progressCalculator = {\n simple: function(loaded, total) {\n var fileSize = getSize(id);\n if (loaded === total) {\n onProgress(id, name, fileSize, fileSize);\n } else {\n onProgress(id, name, loaded >= fileSize ? fileSize - 1 : loaded, fileSize);\n }\n },\n chunked: function(loaded, total) {\n var chunkProgress = handler._getFileState(id).temp.chunkProgress, totalSuccessfullyLoadedForFile = handler._getFileState(id).loaded, loadedForRequest = loaded, totalForRequest = total, totalFileSize = getSize(id), estActualChunkLoaded = loadedForRequest - (totalForRequest - chunkSize), totalLoadedForFile = totalSuccessfullyLoadedForFile;\n chunkProgress[chunkIdx] = estActualChunkLoaded;\n qq.each(chunkProgress, function(chunkIdx, chunkLoaded) {\n totalLoadedForFile += chunkLoaded;\n });\n onProgress(id, name, totalLoadedForFile, totalFileSize);\n }\n };\n xhr.upload.onprogress = function(e) {\n if (e.lengthComputable) {\n var type = chunkSize == null ? \"simple\" : \"chunked\";\n progressCalculator[type](e.loaded, e.total);\n }\n };\n },\n _registerXhr: function(id, optChunkIdx, xhr, optAjaxRequester) {\n var xhrsId = optChunkIdx == null ? -1 : optChunkIdx, tempState = handler._getFileState(id).temp;\n tempState.xhrs = tempState.xhrs || {};\n tempState.ajaxRequesters = tempState.ajaxRequesters || {};\n tempState.xhrs[xhrsId] = xhr;\n if (optAjaxRequester) {\n tempState.ajaxRequesters[xhrsId] = optAjaxRequester;\n }\n return xhr;\n },\n _removeExpiredChunkingRecords: function() {\n var expirationDays = resume.recordsExpireIn;\n handler._iterateResumeRecords(function(key, uploadData) {\n var expirationDate = new Date(uploadData.lastUpdated);\n expirationDate.setDate(expirationDate.getDate() + expirationDays);\n if (expirationDate.getTime() <= Date.now()) {\n log(\"Removing expired resume record with key \" + key);\n localStorage.removeItem(key);\n }\n });\n },\n _shouldChunkThisFile: function(id) {\n var state = handler._getFileState(id);\n if (state) {\n if (!state.chunking) {\n handler.reevaluateChunking(id);\n }\n return state.chunking.enabled;\n }\n }\n });\n };\n qq.DeleteFileAjaxRequester = function(o) {\n \"use strict\";\n var requester, options = {\n method: \"DELETE\",\n uuidParamName: \"qquuid\",\n endpointStore: {},\n maxConnections: 3,\n customHeaders: function(id) {\n return {};\n },\n paramsStore: {},\n cors: {\n expected: false,\n sendCredentials: false\n },\n log: function(str, level) {},\n onDelete: function(id) {},\n onDeleteComplete: function(id, xhrOrXdr, isError) {}\n };\n qq.extend(options, o);\n function getMandatedParams() {\n if (options.method.toUpperCase() === \"POST\") {\n return {\n _method: \"DELETE\"\n };\n }\n return {};\n }\n requester = qq.extend(this, new qq.AjaxRequester({\n acceptHeader: \"application/json\",\n validMethods: [ \"POST\", \"DELETE\" ],\n method: options.method,\n endpointStore: options.endpointStore,\n paramsStore: options.paramsStore,\n mandatedParams: getMandatedParams(),\n maxConnections: options.maxConnections,\n customHeaders: function(id) {\n return options.customHeaders.get(id);\n },\n log: options.log,\n onSend: options.onDelete,\n onComplete: options.onDeleteComplete,\n cors: options.cors\n }));\n qq.extend(this, {\n sendDelete: function(id, uuid, additionalMandatedParams) {\n var additionalOptions = additionalMandatedParams || {};\n options.log(\"Submitting delete file request for \" + id);\n if (options.method === \"DELETE\") {\n requester.initTransport(id).withPath(uuid).withParams(additionalOptions).send();\n } else {\n additionalOptions[options.uuidParamName] = uuid;\n requester.initTransport(id).withParams(additionalOptions).send();\n }\n }\n });\n };\n (function() {\n function detectSubsampling(img) {\n var iw = img.naturalWidth, ih = img.naturalHeight, canvas = document.createElement(\"canvas\"), ctx;\n if (iw * ih > 1024 * 1024) {\n canvas.width = canvas.height = 1;\n ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, -iw + 1, 0);\n return ctx.getImageData(0, 0, 1, 1).data[3] === 0;\n } else {\n return false;\n }\n }\n function detectVerticalSquash(img, iw, ih) {\n var canvas = document.createElement(\"canvas\"), sy = 0, ey = ih, py = ih, ctx, data, alpha, ratio;\n canvas.width = 1;\n canvas.height = ih;\n ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n data = ctx.getImageData(0, 0, 1, ih).data;\n while (py > sy) {\n alpha = data[(py - 1) * 4 + 3];\n if (alpha === 0) {\n ey = py;\n } else {\n sy = py;\n }\n py = ey + sy >> 1;\n }\n ratio = py / ih;\n return ratio === 0 ? 1 : ratio;\n }\n function renderImageToDataURL(img, blob, options, doSquash) {\n var canvas = document.createElement(\"canvas\"), mime = options.mime || \"image/jpeg\", promise = new qq.Promise();\n renderImageToCanvas(img, blob, canvas, options, doSquash).then(function() {\n promise.success(canvas.toDataURL(mime, options.quality || .8));\n });\n return promise;\n }\n function maybeCalculateDownsampledDimensions(spec) {\n var maxPixels = 5241e3;\n if (!qq.ios()) {\n throw new qq.Error(\"Downsampled dimensions can only be reliably calculated for iOS!\");\n }\n if (spec.origHeight * spec.origWidth > maxPixels) {\n return {\n newHeight: Math.round(Math.sqrt(maxPixels * (spec.origHeight / spec.origWidth))),\n newWidth: Math.round(Math.sqrt(maxPixels * (spec.origWidth / spec.origHeight)))\n };\n }\n }\n function renderImageToCanvas(img, blob, canvas, options, doSquash) {\n var iw = img.naturalWidth, ih = img.naturalHeight, width = options.width, height = options.height, ctx = canvas.getContext(\"2d\"), promise = new qq.Promise(), modifiedDimensions;\n ctx.save();\n if (options.resize) {\n return renderImageToCanvasWithCustomResizer({\n blob: blob,\n canvas: canvas,\n image: img,\n imageHeight: ih,\n imageWidth: iw,\n orientation: options.orientation,\n resize: options.resize,\n targetHeight: height,\n targetWidth: width\n });\n }\n if (!qq.supportedFeatures.unlimitedScaledImageSize) {\n modifiedDimensions = maybeCalculateDownsampledDimensions({\n origWidth: width,\n origHeight: height\n });\n if (modifiedDimensions) {\n qq.log(qq.format(\"Had to reduce dimensions due to device limitations from {}w / {}h to {}w / {}h\", width, height, modifiedDimensions.newWidth, modifiedDimensions.newHeight), \"warn\");\n width = modifiedDimensions.newWidth;\n height = modifiedDimensions.newHeight;\n }\n }\n transformCoordinate(canvas, width, height, options.orientation);\n if (qq.ios()) {\n (function() {\n if (detectSubsampling(img)) {\n iw /= 2;\n ih /= 2;\n }\n var d = 1024, tmpCanvas = document.createElement(\"canvas\"), vertSquashRatio = doSquash ? detectVerticalSquash(img, iw, ih) : 1, dw = Math.ceil(d * width / iw), dh = Math.ceil(d * height / ih / vertSquashRatio), sy = 0, dy = 0, tmpCtx, sx, dx;\n tmpCanvas.width = tmpCanvas.height = d;\n tmpCtx = tmpCanvas.getContext(\"2d\");\n while (sy < ih) {\n sx = 0;\n dx = 0;\n while (sx < iw) {\n tmpCtx.clearRect(0, 0, d, d);\n tmpCtx.drawImage(img, -sx, -sy);\n ctx.drawImage(tmpCanvas, 0, 0, d, d, dx, dy, dw, dh);\n sx += d;\n dx += dw;\n }\n sy += d;\n dy += dh;\n }\n ctx.restore();\n tmpCanvas = tmpCtx = null;\n })();\n } else {\n ctx.drawImage(img, 0, 0, width, height);\n }\n canvas.qqImageRendered && canvas.qqImageRendered();\n promise.success();\n return promise;\n }\n function renderImageToCanvasWithCustomResizer(resizeInfo) {\n var blob = resizeInfo.blob, image = resizeInfo.image, imageHeight = resizeInfo.imageHeight, imageWidth = resizeInfo.imageWidth, orientation = resizeInfo.orientation, promise = new qq.Promise(), resize = resizeInfo.resize, sourceCanvas = document.createElement(\"canvas\"), sourceCanvasContext = sourceCanvas.getContext(\"2d\"), targetCanvas = resizeInfo.canvas, targetHeight = resizeInfo.targetHeight, targetWidth = resizeInfo.targetWidth;\n transformCoordinate(sourceCanvas, imageWidth, imageHeight, orientation);\n targetCanvas.height = targetHeight;\n targetCanvas.width = targetWidth;\n sourceCanvasContext.drawImage(image, 0, 0);\n resize({\n blob: blob,\n height: targetHeight,\n image: image,\n sourceCanvas: sourceCanvas,\n targetCanvas: targetCanvas,\n width: targetWidth\n }).then(function success() {\n targetCanvas.qqImageRendered && targetCanvas.qqImageRendered();\n promise.success();\n }, promise.failure);\n return promise;\n }\n function transformCoordinate(canvas, width, height, orientation) {\n switch (orientation) {\n case 5:\n case 6:\n case 7:\n case 8:\n canvas.width = height;\n canvas.height = width;\n break;\n\n default:\n canvas.width = width;\n canvas.height = height;\n }\n var ctx = canvas.getContext(\"2d\");\n switch (orientation) {\n case 2:\n ctx.translate(width, 0);\n ctx.scale(-1, 1);\n break;\n\n case 3:\n ctx.translate(width, height);\n ctx.rotate(Math.PI);\n break;\n\n case 4:\n ctx.translate(0, height);\n ctx.scale(1, -1);\n break;\n\n case 5:\n ctx.rotate(.5 * Math.PI);\n ctx.scale(1, -1);\n break;\n\n case 6:\n ctx.rotate(.5 * Math.PI);\n ctx.translate(0, -height);\n break;\n\n case 7:\n ctx.rotate(.5 * Math.PI);\n ctx.translate(width, -height);\n ctx.scale(-1, 1);\n break;\n\n case 8:\n ctx.rotate(-.5 * Math.PI);\n ctx.translate(-width, 0);\n break;\n\n default:\n break;\n }\n }\n function MegaPixImage(srcImage, errorCallback) {\n var self = this;\n if (window.Blob && srcImage instanceof Blob) {\n (function() {\n var img = new Image(), URL = window.URL && window.URL.createObjectURL ? window.URL : window.webkitURL && window.webkitURL.createObjectURL ? window.webkitURL : null;\n if (!URL) {\n throw Error(\"No createObjectURL function found to create blob url\");\n }\n img.src = URL.createObjectURL(srcImage);\n self.blob = srcImage;\n srcImage = img;\n })();\n }\n if (!srcImage.naturalWidth && !srcImage.naturalHeight) {\n srcImage.onload = function() {\n var listeners = self.imageLoadListeners;\n if (listeners) {\n self.imageLoadListeners = null;\n setTimeout(function() {\n for (var i = 0, len = listeners.length; i < len; i++) {\n listeners[i]();\n }\n }, 0);\n }\n };\n srcImage.onerror = errorCallback;\n this.imageLoadListeners = [];\n }\n this.srcImage = srcImage;\n }\n MegaPixImage.prototype.render = function(target, options) {\n options = options || {};\n var self = this, imgWidth = this.srcImage.naturalWidth, imgHeight = this.srcImage.naturalHeight, width = options.width, height = options.height, maxWidth = options.maxWidth, maxHeight = options.maxHeight, doSquash = !this.blob || this.blob.type === \"image/jpeg\", tagName = target.tagName.toLowerCase(), opt;\n if (this.imageLoadListeners) {\n this.imageLoadListeners.push(function() {\n self.render(target, options);\n });\n return;\n }\n if (width && !height) {\n height = imgHeight * width / imgWidth << 0;\n } else if (height && !width) {\n width = imgWidth * height / imgHeight << 0;\n } else {\n width = imgWidth;\n height = imgHeight;\n }\n if (maxWidth && width > maxWidth) {\n width = maxWidth;\n height = imgHeight * width / imgWidth << 0;\n }\n if (maxHeight && height > maxHeight) {\n height = maxHeight;\n width = imgWidth * height / imgHeight << 0;\n }\n opt = {\n width: width,\n height: height\n }, qq.each(options, function(optionsKey, optionsValue) {\n opt[optionsKey] = optionsValue;\n });\n if (tagName === \"img\") {\n (function() {\n var oldTargetSrc = target.src;\n renderImageToDataURL(self.srcImage, self.blob, opt, doSquash).then(function(dataUri) {\n target.src = dataUri;\n oldTargetSrc === target.src && target.onload();\n });\n })();\n } else if (tagName === \"canvas\") {\n renderImageToCanvas(this.srcImage, this.blob, target, opt, doSquash);\n }\n if (typeof this.onrender === \"function\") {\n this.onrender(target);\n }\n };\n qq.MegaPixImage = MegaPixImage;\n })();\n qq.ImageGenerator = function(log) {\n \"use strict\";\n function isImg(el) {\n return el.tagName.toLowerCase() === \"img\";\n }\n function isCanvas(el) {\n return el.tagName.toLowerCase() === \"canvas\";\n }\n function isImgCorsSupported() {\n return new Image().crossOrigin !== undefined;\n }\n function isCanvasSupported() {\n var canvas = document.createElement(\"canvas\");\n return canvas.getContext && canvas.getContext(\"2d\");\n }\n function determineMimeOfFileName(nameWithPath) {\n var pathSegments = nameWithPath.split(\"/\"), name = pathSegments[pathSegments.length - 1].split(\"?\")[0], extension = qq.getExtension(name);\n extension = extension && extension.toLowerCase();\n switch (extension) {\n case \"jpeg\":\n case \"jpg\":\n return \"image/jpeg\";\n\n case \"png\":\n return \"image/png\";\n\n case \"bmp\":\n return \"image/bmp\";\n\n case \"gif\":\n return \"image/gif\";\n\n case \"tiff\":\n case \"tif\":\n return \"image/tiff\";\n }\n }\n function isCrossOrigin(url) {\n var targetAnchor = document.createElement(\"a\"), targetProtocol, targetHostname, targetPort;\n targetAnchor.href = url;\n targetProtocol = targetAnchor.protocol;\n targetPort = targetAnchor.port;\n targetHostname = targetAnchor.hostname;\n if (targetProtocol.toLowerCase() !== window.location.protocol.toLowerCase()) {\n return true;\n }\n if (targetHostname.toLowerCase() !== window.location.hostname.toLowerCase()) {\n return true;\n }\n if (targetPort !== window.location.port && !qq.ie()) {\n return true;\n }\n return false;\n }\n function registerImgLoadListeners(img, promise) {\n img.onload = function() {\n img.onload = null;\n img.onerror = null;\n promise.success(img);\n };\n img.onerror = function() {\n img.onload = null;\n img.onerror = null;\n log(\"Problem drawing thumbnail!\", \"error\");\n promise.failure(img, \"Problem drawing thumbnail!\");\n };\n }\n function registerCanvasDrawImageListener(canvas, promise) {\n canvas.qqImageRendered = function() {\n promise.success(canvas);\n };\n }\n function registerThumbnailRenderedListener(imgOrCanvas, promise) {\n var registered = isImg(imgOrCanvas) || isCanvas(imgOrCanvas);\n if (isImg(imgOrCanvas)) {\n registerImgLoadListeners(imgOrCanvas, promise);\n } else if (isCanvas(imgOrCanvas)) {\n registerCanvasDrawImageListener(imgOrCanvas, promise);\n } else {\n promise.failure(imgOrCanvas);\n log(qq.format(\"Element container of type {} is not supported!\", imgOrCanvas.tagName), \"error\");\n }\n return registered;\n }\n function draw(fileOrBlob, container, options) {\n var drawPreview = new qq.Promise(), identifier = new qq.Identify(fileOrBlob, log), maxSize = options.maxSize, orient = options.orient == null ? true : options.orient, megapixErrorHandler = function() {\n container.onerror = null;\n container.onload = null;\n log(\"Could not render preview, file may be too large!\", \"error\");\n drawPreview.failure(container, \"Browser cannot render image!\");\n };\n identifier.isPreviewable().then(function(mime) {\n var dummyExif = {\n parse: function() {\n return new qq.Promise().success();\n }\n }, exif = orient ? new qq.Exif(fileOrBlob, log) : dummyExif, mpImg = new qq.MegaPixImage(fileOrBlob, megapixErrorHandler);\n if (registerThumbnailRenderedListener(container, drawPreview)) {\n exif.parse().then(function(exif) {\n var orientation = exif && exif.Orientation;\n mpImg.render(container, {\n maxWidth: maxSize,\n maxHeight: maxSize,\n orientation: orientation,\n mime: mime,\n resize: options.customResizeFunction\n });\n }, function(failureMsg) {\n log(qq.format(\"EXIF data could not be parsed ({}). Assuming orientation = 1.\", failureMsg));\n mpImg.render(container, {\n maxWidth: maxSize,\n maxHeight: maxSize,\n mime: mime,\n resize: options.customResizeFunction\n });\n });\n }\n }, function() {\n log(\"Not previewable\");\n drawPreview.failure(container, \"Not previewable\");\n });\n return drawPreview;\n }\n function drawOnCanvasOrImgFromUrl(url, canvasOrImg, draw, maxSize, customResizeFunction) {\n var tempImg = new Image(), tempImgRender = new qq.Promise();\n registerThumbnailRenderedListener(tempImg, tempImgRender);\n if (isCrossOrigin(url)) {\n tempImg.crossOrigin = \"anonymous\";\n }\n tempImg.src = url;\n tempImgRender.then(function rendered() {\n registerThumbnailRenderedListener(canvasOrImg, draw);\n var mpImg = new qq.MegaPixImage(tempImg);\n mpImg.render(canvasOrImg, {\n maxWidth: maxSize,\n maxHeight: maxSize,\n mime: determineMimeOfFileName(url),\n resize: customResizeFunction\n });\n }, draw.failure);\n }\n function drawOnImgFromUrlWithCssScaling(url, img, draw, maxSize) {\n registerThumbnailRenderedListener(img, draw);\n qq(img).css({\n maxWidth: maxSize + \"px\",\n maxHeight: maxSize + \"px\"\n });\n img.src = url;\n }\n function drawFromUrl(url, container, options) {\n var draw = new qq.Promise(), scale = options.scale, maxSize = scale ? options.maxSize : null;\n if (scale && isImg(container)) {\n if (isCanvasSupported()) {\n if (isCrossOrigin(url) && !isImgCorsSupported()) {\n drawOnImgFromUrlWithCssScaling(url, container, draw, maxSize);\n } else {\n drawOnCanvasOrImgFromUrl(url, container, draw, maxSize);\n }\n } else {\n drawOnImgFromUrlWithCssScaling(url, container, draw, maxSize);\n }\n } else if (isCanvas(container)) {\n drawOnCanvasOrImgFromUrl(url, container, draw, maxSize);\n } else if (registerThumbnailRenderedListener(container, draw)) {\n container.src = url;\n }\n return draw;\n }\n qq.extend(this, {\n generate: function(fileBlobOrUrl, container, options) {\n if (qq.isString(fileBlobOrUrl)) {\n log(\"Attempting to update thumbnail based on server response.\");\n return drawFromUrl(fileBlobOrUrl, container, options || {});\n } else {\n log(\"Attempting to draw client-side image preview.\");\n return draw(fileBlobOrUrl, container, options || {});\n }\n }\n });\n this._testing = {};\n this._testing.isImg = isImg;\n this._testing.isCanvas = isCanvas;\n this._testing.isCrossOrigin = isCrossOrigin;\n this._testing.determineMimeOfFileName = determineMimeOfFileName;\n };\n qq.Exif = function(fileOrBlob, log) {\n \"use strict\";\n var TAG_IDS = [ 274 ], TAG_INFO = {\n 274: {\n name: \"Orientation\",\n bytes: 2\n }\n };\n function parseLittleEndian(hex) {\n var result = 0, pow = 0;\n while (hex.length > 0) {\n result += parseInt(hex.substring(0, 2), 16) * Math.pow(2, pow);\n hex = hex.substring(2, hex.length);\n pow += 8;\n }\n return result;\n }\n function seekToApp1(offset, promise) {\n var theOffset = offset, thePromise = promise;\n if (theOffset === undefined) {\n theOffset = 2;\n thePromise = new qq.Promise();\n }\n qq.readBlobToHex(fileOrBlob, theOffset, 4).then(function(hex) {\n var match = /^ffe([0-9])/.exec(hex), segmentLength;\n if (match) {\n if (match[1] !== \"1\") {\n segmentLength = parseInt(hex.slice(4, 8), 16);\n seekToApp1(theOffset + segmentLength + 2, thePromise);\n } else {\n thePromise.success(theOffset);\n }\n } else {\n thePromise.failure(\"No EXIF header to be found!\");\n }\n });\n return thePromise;\n }\n function getApp1Offset() {\n var promise = new qq.Promise();\n qq.readBlobToHex(fileOrBlob, 0, 6).then(function(hex) {\n if (hex.indexOf(\"ffd8\") !== 0) {\n promise.failure(\"Not a valid JPEG!\");\n } else {\n seekToApp1().then(function(offset) {\n promise.success(offset);\n }, function(error) {\n promise.failure(error);\n });\n }\n });\n return promise;\n }\n function isLittleEndian(app1Start) {\n var promise = new qq.Promise();\n qq.readBlobToHex(fileOrBlob, app1Start + 10, 2).then(function(hex) {\n promise.success(hex === \"4949\");\n });\n return promise;\n }\n function getDirEntryCount(app1Start, littleEndian) {\n var promise = new qq.Promise();\n qq.readBlobToHex(fileOrBlob, app1Start + 18, 2).then(function(hex) {\n if (littleEndian) {\n return promise.success(parseLittleEndian(hex));\n } else {\n promise.success(parseInt(hex, 16));\n }\n });\n return promise;\n }\n function getIfd(app1Start, dirEntries) {\n var offset = app1Start + 20, bytes = dirEntries * 12;\n return qq.readBlobToHex(fileOrBlob, offset, bytes);\n }\n function getDirEntries(ifdHex) {\n var entries = [], offset = 0;\n while (offset + 24 <= ifdHex.length) {\n entries.push(ifdHex.slice(offset, offset + 24));\n offset += 24;\n }\n return entries;\n }\n function getTagValues(littleEndian, dirEntries) {\n var TAG_VAL_OFFSET = 16, tagsToFind = qq.extend([], TAG_IDS), vals = {};\n qq.each(dirEntries, function(idx, entry) {\n var idHex = entry.slice(0, 4), id = littleEndian ? parseLittleEndian(idHex) : parseInt(idHex, 16), tagsToFindIdx = tagsToFind.indexOf(id), tagValHex, tagName, tagValLength;\n if (tagsToFindIdx >= 0) {\n tagName = TAG_INFO[id].name;\n tagValLength = TAG_INFO[id].bytes;\n tagValHex = entry.slice(TAG_VAL_OFFSET, TAG_VAL_OFFSET + tagValLength * 2);\n vals[tagName] = littleEndian ? parseLittleEndian(tagValHex) : parseInt(tagValHex, 16);\n tagsToFind.splice(tagsToFindIdx, 1);\n }\n if (tagsToFind.length === 0) {\n return false;\n }\n });\n return vals;\n }\n qq.extend(this, {\n parse: function() {\n var parser = new qq.Promise(), onParseFailure = function(message) {\n log(qq.format(\"EXIF header parse failed: '{}' \", message));\n parser.failure(message);\n };\n getApp1Offset().then(function(app1Offset) {\n log(qq.format(\"Moving forward with EXIF header parsing for '{}'\", fileOrBlob.name === undefined ? \"blob\" : fileOrBlob.name));\n isLittleEndian(app1Offset).then(function(littleEndian) {\n log(qq.format(\"EXIF Byte order is {} endian\", littleEndian ? \"little\" : \"big\"));\n getDirEntryCount(app1Offset, littleEndian).then(function(dirEntryCount) {\n log(qq.format(\"Found {} APP1 directory entries\", dirEntryCount));\n getIfd(app1Offset, dirEntryCount).then(function(ifdHex) {\n var dirEntries = getDirEntries(ifdHex), tagValues = getTagValues(littleEndian, dirEntries);\n log(\"Successfully parsed some EXIF tags\");\n parser.success(tagValues);\n }, onParseFailure);\n }, onParseFailure);\n }, onParseFailure);\n }, onParseFailure);\n return parser;\n }\n });\n this._testing = {};\n this._testing.parseLittleEndian = parseLittleEndian;\n };\n qq.Identify = function(fileOrBlob, log) {\n \"use strict\";\n function isIdentifiable(magicBytes, questionableBytes) {\n var identifiable = false, magicBytesEntries = [].concat(magicBytes);\n qq.each(magicBytesEntries, function(idx, magicBytesArrayEntry) {\n if (questionableBytes.indexOf(magicBytesArrayEntry) === 0) {\n identifiable = true;\n return false;\n }\n });\n return identifiable;\n }\n qq.extend(this, {\n isPreviewable: function() {\n var self = this, identifier = new qq.Promise(), previewable = false, name = fileOrBlob.name === undefined ? \"blob\" : fileOrBlob.name;\n log(qq.format(\"Attempting to determine if {} can be rendered in this browser\", name));\n log(\"First pass: check type attribute of blob object.\");\n if (this.isPreviewableSync()) {\n log(\"Second pass: check for magic bytes in file header.\");\n qq.readBlobToHex(fileOrBlob, 0, 4).then(function(hex) {\n qq.each(self.PREVIEWABLE_MIME_TYPES, function(mime, bytes) {\n if (isIdentifiable(bytes, hex)) {\n if (mime !== \"image/tiff\" || qq.supportedFeatures.tiffPreviews) {\n previewable = true;\n identifier.success(mime);\n }\n return false;\n }\n });\n log(qq.format(\"'{}' is {} able to be rendered in this browser\", name, previewable ? \"\" : \"NOT\"));\n if (!previewable) {\n identifier.failure();\n }\n }, function() {\n log(\"Error reading file w/ name '\" + name + \"'. Not able to be rendered in this browser.\");\n identifier.failure();\n });\n } else {\n identifier.failure();\n }\n return identifier;\n },\n isPreviewableSync: function() {\n var fileMime = fileOrBlob.type, isRecognizedImage = qq.indexOf(Object.keys(this.PREVIEWABLE_MIME_TYPES), fileMime) >= 0, previewable = false, name = fileOrBlob.name === undefined ? \"blob\" : fileOrBlob.name;\n if (isRecognizedImage) {\n if (fileMime === \"image/tiff\") {\n previewable = qq.supportedFeatures.tiffPreviews;\n } else {\n previewable = true;\n }\n }\n !previewable && log(name + \" is not previewable in this browser per the blob's type attr\");\n return previewable;\n }\n });\n };\n qq.Identify.prototype.PREVIEWABLE_MIME_TYPES = {\n \"image/jpeg\": \"ffd8ff\",\n \"image/gif\": \"474946\",\n \"image/png\": \"89504e\",\n \"image/bmp\": \"424d\",\n \"image/tiff\": [ \"49492a00\", \"4d4d002a\" ]\n };\n qq.ImageValidation = function(blob, log) {\n \"use strict\";\n function hasNonZeroLimits(limits) {\n var atLeastOne = false;\n qq.each(limits, function(limit, value) {\n if (value > 0) {\n atLeastOne = true;\n return false;\n }\n });\n return atLeastOne;\n }\n function getWidthHeight() {\n var sizeDetermination = new qq.Promise();\n new qq.Identify(blob, log).isPreviewable().then(function() {\n var image = new Image(), url = window.URL && window.URL.createObjectURL ? window.URL : window.webkitURL && window.webkitURL.createObjectURL ? window.webkitURL : null;\n if (url) {\n image.onerror = function() {\n log(\"Cannot determine dimensions for image. May be too large.\", \"error\");\n sizeDetermination.failure();\n };\n image.onload = function() {\n sizeDetermination.success({\n width: this.width,\n height: this.height\n });\n };\n image.src = url.createObjectURL(blob);\n } else {\n log(\"No createObjectURL function available to generate image URL!\", \"error\");\n sizeDetermination.failure();\n }\n }, sizeDetermination.failure);\n return sizeDetermination;\n }\n function getFailingLimit(limits, dimensions) {\n var failingLimit;\n qq.each(limits, function(limitName, limitValue) {\n if (limitValue > 0) {\n var limitMatcher = /(max|min)(Width|Height)/.exec(limitName), dimensionPropName = limitMatcher[2].charAt(0).toLowerCase() + limitMatcher[2].slice(1), actualValue = dimensions[dimensionPropName];\n switch (limitMatcher[1]) {\n case \"min\":\n if (actualValue < limitValue) {\n failingLimit = limitName;\n return false;\n }\n break;\n\n case \"max\":\n if (actualValue > limitValue) {\n failingLimit = limitName;\n return false;\n }\n break;\n }\n }\n });\n return failingLimit;\n }\n this.validate = function(limits) {\n var validationEffort = new qq.Promise();\n log(\"Attempting to validate image.\");\n if (hasNonZeroLimits(limits)) {\n getWidthHeight().then(function(dimensions) {\n var failingLimit = getFailingLimit(limits, dimensions);\n if (failingLimit) {\n validationEffort.failure(failingLimit);\n } else {\n validationEffort.success();\n }\n }, validationEffort.success);\n } else {\n validationEffort.success();\n }\n return validationEffort;\n };\n };\n qq.Session = function(spec) {\n \"use strict\";\n var options = {\n endpoint: null,\n params: {},\n customHeaders: {},\n cors: {},\n addFileRecord: function(sessionData) {},\n log: function(message, level) {}\n };\n qq.extend(options, spec, true);\n function isJsonResponseValid(response) {\n if (qq.isArray(response)) {\n return true;\n }\n options.log(\"Session response is not an array.\", \"error\");\n }\n function handleFileItems(fileItems, success, xhrOrXdr, promise) {\n var someItemsIgnored = false;\n success = success && isJsonResponseValid(fileItems);\n if (success) {\n qq.each(fileItems, function(idx, fileItem) {\n if (fileItem.uuid == null) {\n someItemsIgnored = true;\n options.log(qq.format(\"Session response item {} did not include a valid UUID - ignoring.\", idx), \"error\");\n } else if (fileItem.name == null) {\n someItemsIgnored = true;\n options.log(qq.format(\"Session response item {} did not include a valid name - ignoring.\", idx), \"error\");\n } else {\n try {\n options.addFileRecord(fileItem);\n return true;\n } catch (err) {\n someItemsIgnored = true;\n options.log(err.message, \"error\");\n }\n }\n return false;\n });\n }\n promise[success && !someItemsIgnored ? \"success\" : \"failure\"](fileItems, xhrOrXdr);\n }\n this.refresh = function() {\n var refreshEffort = new qq.Promise(), refreshCompleteCallback = function(response, success, xhrOrXdr) {\n handleFileItems(response, success, xhrOrXdr, refreshEffort);\n }, requesterOptions = qq.extend({}, options), requester = new qq.SessionAjaxRequester(qq.extend(requesterOptions, {\n onComplete: refreshCompleteCallback\n }));\n requester.queryServer();\n return refreshEffort;\n };\n };\n qq.SessionAjaxRequester = function(spec) {\n \"use strict\";\n var requester, options = {\n endpoint: null,\n customHeaders: {},\n params: {},\n cors: {\n expected: false,\n sendCredentials: false\n },\n onComplete: function(response, success, xhrOrXdr) {},\n log: function(str, level) {}\n };\n qq.extend(options, spec);\n function onComplete(id, xhrOrXdr, isError) {\n var response = null;\n if (xhrOrXdr.responseText != null) {\n try {\n response = qq.parseJson(xhrOrXdr.responseText);\n } catch (err) {\n options.log(\"Problem parsing session response: \" + err.message, \"error\");\n isError = true;\n }\n }\n options.onComplete(response, !isError, xhrOrXdr);\n }\n requester = qq.extend(this, new qq.AjaxRequester({\n acceptHeader: \"application/json\",\n validMethods: [ \"GET\" ],\n method: \"GET\",\n endpointStore: {\n get: function() {\n return options.endpoint;\n }\n },\n customHeaders: options.customHeaders,\n log: options.log,\n onComplete: onComplete,\n cors: options.cors\n }));\n qq.extend(this, {\n queryServer: function() {\n var params = qq.extend({}, options.params);\n options.log(\"Session query request.\");\n requester.initTransport(\"sessionRefresh\").withParams(params).withCacheBuster().send();\n }\n });\n };\n qq.Scaler = function(spec, log) {\n \"use strict\";\n var self = this, customResizeFunction = spec.customResizer, includeOriginal = spec.sendOriginal, orient = spec.orient, defaultType = spec.defaultType, defaultQuality = spec.defaultQuality / 100, failedToScaleText = spec.failureText, includeExif = spec.includeExif, sizes = this._getSortedSizes(spec.sizes);\n qq.extend(this, {\n enabled: qq.supportedFeatures.scaling && sizes.length > 0,\n getFileRecords: function(originalFileUuid, originalFileName, originalBlobOrBlobData) {\n var self = this, records = [], originalBlob = originalBlobOrBlobData.blob ? originalBlobOrBlobData.blob : originalBlobOrBlobData, identifier = new qq.Identify(originalBlob, log);\n if (identifier.isPreviewableSync()) {\n qq.each(sizes, function(idx, sizeRecord) {\n var outputType = self._determineOutputType({\n defaultType: defaultType,\n requestedType: sizeRecord.type,\n refType: originalBlob.type\n });\n records.push({\n uuid: qq.getUniqueId(),\n name: self._getName(originalFileName, {\n name: sizeRecord.name,\n type: outputType,\n refType: originalBlob.type\n }),\n blob: new qq.BlobProxy(originalBlob, qq.bind(self._generateScaledImage, self, {\n customResizeFunction: customResizeFunction,\n maxSize: sizeRecord.maxSize,\n orient: orient,\n type: outputType,\n quality: defaultQuality,\n failedText: failedToScaleText,\n includeExif: includeExif,\n log: log\n }))\n });\n });\n records.push({\n uuid: originalFileUuid,\n name: originalFileName,\n size: originalBlob.size,\n blob: includeOriginal ? originalBlob : null\n });\n } else {\n records.push({\n uuid: originalFileUuid,\n name: originalFileName,\n size: originalBlob.size,\n blob: originalBlob\n });\n }\n return records;\n },\n handleNewFile: function(file, name, uuid, size, fileList, batchId, uuidParamName, api) {\n var self = this, buttonId = file.qqButtonId || file.blob && file.blob.qqButtonId, scaledIds = [], originalId = null, addFileToHandler = api.addFileToHandler, uploadData = api.uploadData, paramsStore = api.paramsStore, proxyGroupId = qq.getUniqueId();\n qq.each(self.getFileRecords(uuid, name, file), function(idx, record) {\n var blobSize = record.size, id;\n if (record.blob instanceof qq.BlobProxy) {\n blobSize = -1;\n }\n id = uploadData.addFile({\n uuid: record.uuid,\n name: record.name,\n size: blobSize,\n batchId: batchId,\n proxyGroupId: proxyGroupId\n });\n if (record.blob instanceof qq.BlobProxy) {\n scaledIds.push(id);\n } else {\n originalId = id;\n }\n if (record.blob) {\n addFileToHandler(id, record.blob);\n fileList.push({\n id: id,\n file: record.blob\n });\n } else {\n uploadData.setStatus(id, qq.status.REJECTED);\n }\n });\n if (originalId !== null) {\n qq.each(scaledIds, function(idx, scaledId) {\n var params = {\n qqparentuuid: uploadData.retrieve({\n id: originalId\n }).uuid,\n qqparentsize: uploadData.retrieve({\n id: originalId\n }).size\n };\n params[uuidParamName] = uploadData.retrieve({\n id: scaledId\n }).uuid;\n uploadData.setParentId(scaledId, originalId);\n paramsStore.addReadOnly(scaledId, params);\n });\n if (scaledIds.length) {\n (function() {\n var param = {};\n param[uuidParamName] = uploadData.retrieve({\n id: originalId\n }).uuid;\n paramsStore.addReadOnly(originalId, param);\n })();\n }\n }\n }\n });\n };\n qq.extend(qq.Scaler.prototype, {\n scaleImage: function(id, specs, api) {\n \"use strict\";\n if (!qq.supportedFeatures.scaling) {\n throw new qq.Error(\"Scaling is not supported in this browser!\");\n }\n var scalingEffort = new qq.Promise(), log = api.log, file = api.getFile(id), uploadData = api.uploadData.retrieve({\n id: id\n }), name = uploadData && uploadData.name, uuid = uploadData && uploadData.uuid, scalingOptions = {\n customResizer: specs.customResizer,\n sendOriginal: false,\n orient: specs.orient,\n defaultType: specs.type || null,\n defaultQuality: specs.quality,\n failedToScaleText: \"Unable to scale\",\n sizes: [ {\n name: \"\",\n maxSize: specs.maxSize\n } ]\n }, scaler = new qq.Scaler(scalingOptions, log);\n if (!qq.Scaler || !qq.supportedFeatures.imagePreviews || !file) {\n scalingEffort.failure();\n log(\"Could not generate requested scaled image for \" + id + \". \" + \"Scaling is either not possible in this browser, or the file could not be located.\", \"error\");\n } else {\n qq.bind(function() {\n var record = scaler.getFileRecords(uuid, name, file)[0];\n if (record && record.blob instanceof qq.BlobProxy) {\n record.blob.create().then(scalingEffort.success, scalingEffort.failure);\n } else {\n log(id + \" is not a scalable image!\", \"error\");\n scalingEffort.failure();\n }\n }, this)();\n }\n return scalingEffort;\n },\n _determineOutputType: function(spec) {\n \"use strict\";\n var requestedType = spec.requestedType, defaultType = spec.defaultType, referenceType = spec.refType;\n if (!defaultType && !requestedType) {\n if (referenceType !== \"image/jpeg\") {\n return \"image/png\";\n }\n return referenceType;\n }\n if (!requestedType) {\n return defaultType;\n }\n if (qq.indexOf(Object.keys(qq.Identify.prototype.PREVIEWABLE_MIME_TYPES), requestedType) >= 0) {\n if (requestedType === \"image/tiff\") {\n return qq.supportedFeatures.tiffPreviews ? requestedType : defaultType;\n }\n return requestedType;\n }\n return defaultType;\n },\n _getName: function(originalName, scaledVersionProperties) {\n \"use strict\";\n var startOfExt = originalName.lastIndexOf(\".\"), versionType = scaledVersionProperties.type || \"image/png\", referenceType = scaledVersionProperties.refType, scaledName = \"\", scaledExt = qq.getExtension(originalName), nameAppendage = \"\";\n if (scaledVersionProperties.name && scaledVersionProperties.name.trim().length) {\n nameAppendage = \" (\" + scaledVersionProperties.name + \")\";\n }\n if (startOfExt >= 0) {\n scaledName = originalName.substr(0, startOfExt);\n if (referenceType !== versionType) {\n scaledExt = versionType.split(\"/\")[1];\n }\n scaledName += nameAppendage + \".\" + scaledExt;\n } else {\n scaledName = originalName + nameAppendage;\n }\n return scaledName;\n },\n _getSortedSizes: function(sizes) {\n \"use strict\";\n sizes = qq.extend([], sizes);\n return sizes.sort(function(a, b) {\n if (a.maxSize > b.maxSize) {\n return 1;\n }\n if (a.maxSize < b.maxSize) {\n return -1;\n }\n return 0;\n });\n },\n _generateScaledImage: function(spec, sourceFile) {\n \"use strict\";\n var self = this, customResizeFunction = spec.customResizeFunction, log = spec.log, maxSize = spec.maxSize, orient = spec.orient, type = spec.type, quality = spec.quality, failedText = spec.failedText, includeExif = spec.includeExif && sourceFile.type === \"image/jpeg\" && type === \"image/jpeg\", scalingEffort = new qq.Promise(), imageGenerator = new qq.ImageGenerator(log), canvas = document.createElement(\"canvas\");\n log(\"Attempting to generate scaled version for \" + sourceFile.name);\n imageGenerator.generate(sourceFile, canvas, {\n maxSize: maxSize,\n orient: orient,\n customResizeFunction: customResizeFunction\n }).then(function() {\n var scaledImageDataUri = canvas.toDataURL(type, quality), signalSuccess = function() {\n log(\"Success generating scaled version for \" + sourceFile.name);\n var blob = qq.dataUriToBlob(scaledImageDataUri);\n scalingEffort.success(blob);\n };\n if (includeExif) {\n self._insertExifHeader(sourceFile, scaledImageDataUri, log).then(function(scaledImageDataUriWithExif) {\n scaledImageDataUri = scaledImageDataUriWithExif;\n signalSuccess();\n }, function() {\n log(\"Problem inserting EXIF header into scaled image. Using scaled image w/out EXIF data.\", \"error\");\n signalSuccess();\n });\n } else {\n signalSuccess();\n }\n }, function() {\n log(\"Failed attempt to generate scaled version for \" + sourceFile.name, \"error\");\n scalingEffort.failure(failedText);\n });\n return scalingEffort;\n },\n _insertExifHeader: function(originalImage, scaledImageDataUri, log) {\n \"use strict\";\n var reader = new FileReader(), insertionEffort = new qq.Promise(), originalImageDataUri = \"\";\n reader.onload = function() {\n originalImageDataUri = reader.result;\n insertionEffort.success(qq.ExifRestorer.restore(originalImageDataUri, scaledImageDataUri));\n };\n reader.onerror = function() {\n log(\"Problem reading \" + originalImage.name + \" during attempt to transfer EXIF data to scaled version.\", \"error\");\n insertionEffort.failure();\n };\n reader.readAsDataURL(originalImage);\n return insertionEffort;\n },\n _dataUriToBlob: function(dataUri) {\n \"use strict\";\n var byteString, mimeString, arrayBuffer, intArray;\n if (dataUri.split(\",\")[0].indexOf(\"base64\") >= 0) {\n byteString = atob(dataUri.split(\",\")[1]);\n } else {\n byteString = decodeURI(dataUri.split(\",\")[1]);\n }\n mimeString = dataUri.split(\",\")[0].split(\":\")[1].split(\";\")[0];\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n qq.each(byteString, function(idx, character) {\n intArray[idx] = character.charCodeAt(0);\n });\n return this._createBlob(arrayBuffer, mimeString);\n },\n _createBlob: function(data, mime) {\n \"use strict\";\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder, blobBuilder = BlobBuilder && new BlobBuilder();\n if (blobBuilder) {\n blobBuilder.append(data);\n return blobBuilder.getBlob(mime);\n } else {\n return new Blob([ data ], {\n type: mime\n });\n }\n }\n });\n qq.ExifRestorer = function() {\n var ExifRestorer = {};\n ExifRestorer.KEY_STR = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n ExifRestorer.encode64 = function(input) {\n var output = \"\", chr1, chr2, chr3 = \"\", enc1, enc2, enc3, enc4 = \"\", i = 0;\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n enc1 = chr1 >> 2;\n enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = \"\";\n enc1 = enc2 = enc3 = enc4 = \"\";\n } while (i < input.length);\n return output;\n };\n ExifRestorer.restore = function(origFileBase64, resizedFileBase64) {\n var expectedBase64Header = \"data:image/jpeg;base64,\";\n if (!origFileBase64.match(expectedBase64Header)) {\n return resizedFileBase64;\n }\n var rawImage = this.decode64(origFileBase64.replace(expectedBase64Header, \"\"));\n var segments = this.slice2Segments(rawImage);\n var image = this.exifManipulation(resizedFileBase64, segments);\n return expectedBase64Header + this.encode64(image);\n };\n ExifRestorer.exifManipulation = function(resizedFileBase64, segments) {\n var exifArray = this.getExifArray(segments), newImageArray = this.insertExif(resizedFileBase64, exifArray), aBuffer = new Uint8Array(newImageArray);\n return aBuffer;\n };\n ExifRestorer.getExifArray = function(segments) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] == 255 & seg[1] == 225) {\n return seg;\n }\n }\n return [];\n };\n ExifRestorer.insertExif = function(resizedFileBase64, exifArray) {\n var imageData = resizedFileBase64.replace(\"data:image/jpeg;base64,\", \"\"), buf = this.decode64(imageData), separatePoint = buf.indexOf(255, 3), mae = buf.slice(0, separatePoint), ato = buf.slice(separatePoint), array = mae;\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n ExifRestorer.slice2Segments = function(rawImageArray) {\n var head = 0, segments = [];\n while (1) {\n if (rawImageArray[head] == 255 & rawImageArray[head + 1] == 218) {\n break;\n }\n if (rawImageArray[head] == 255 & rawImageArray[head + 1] == 216) {\n head += 2;\n } else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3], endPoint = head + length + 2, seg = rawImageArray.slice(head, endPoint);\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n return segments;\n };\n ExifRestorer.decode64 = function(input) {\n var output = \"\", chr1, chr2, chr3 = \"\", enc1, enc2, enc3, enc4 = \"\", i = 0, buf = [];\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n throw new Error(\"There were invalid base64 characters in the input text. \" + \"Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\");\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n chr1 = enc1 << 2 | enc2 >> 4;\n chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n chr3 = (enc3 & 3) << 6 | enc4;\n buf.push(chr1);\n if (enc3 != 64) {\n buf.push(chr2);\n }\n if (enc4 != 64) {\n buf.push(chr3);\n }\n chr1 = chr2 = chr3 = \"\";\n enc1 = enc2 = enc3 = enc4 = \"\";\n } while (i < input.length);\n return buf;\n };\n return ExifRestorer;\n }();\n qq.TotalProgress = function(callback, getSize) {\n \"use strict\";\n var perFileProgress = {}, totalLoaded = 0, totalSize = 0, lastLoadedSent = -1, lastTotalSent = -1, callbackProxy = function(loaded, total) {\n if (loaded !== lastLoadedSent || total !== lastTotalSent) {\n callback(loaded, total);\n }\n lastLoadedSent = loaded;\n lastTotalSent = total;\n }, noRetryableFiles = function(failed, retryable) {\n var none = true;\n qq.each(failed, function(idx, failedId) {\n if (qq.indexOf(retryable, failedId) >= 0) {\n none = false;\n return false;\n }\n });\n return none;\n }, onCancel = function(id) {\n updateTotalProgress(id, -1, -1);\n delete perFileProgress[id];\n }, onAllComplete = function(successful, failed, retryable) {\n if (failed.length === 0 || noRetryableFiles(failed, retryable)) {\n callbackProxy(totalSize, totalSize);\n this.reset();\n }\n }, onNew = function(id) {\n var size = getSize(id);\n if (size > 0) {\n updateTotalProgress(id, 0, size);\n perFileProgress[id] = {\n loaded: 0,\n total: size\n };\n }\n }, updateTotalProgress = function(id, newLoaded, newTotal) {\n var oldLoaded = perFileProgress[id] ? perFileProgress[id].loaded : 0, oldTotal = perFileProgress[id] ? perFileProgress[id].total : 0;\n if (newLoaded === -1 && newTotal === -1) {\n totalLoaded -= oldLoaded;\n totalSize -= oldTotal;\n } else {\n if (newLoaded) {\n totalLoaded += newLoaded - oldLoaded;\n }\n if (newTotal) {\n totalSize += newTotal - oldTotal;\n }\n }\n callbackProxy(totalLoaded, totalSize);\n };\n qq.extend(this, {\n onAllComplete: onAllComplete,\n onStatusChange: function(id, oldStatus, newStatus) {\n if (newStatus === qq.status.CANCELED || newStatus === qq.status.REJECTED) {\n onCancel(id);\n } else if (newStatus === qq.status.SUBMITTING) {\n onNew(id);\n }\n },\n onIndividualProgress: function(id, loaded, total) {\n updateTotalProgress(id, loaded, total);\n perFileProgress[id] = {\n loaded: loaded,\n total: total\n };\n },\n onNewSize: function(id) {\n onNew(id);\n },\n reset: function() {\n perFileProgress = {};\n totalLoaded = 0;\n totalSize = 0;\n }\n });\n };\n qq.PasteSupport = function(o) {\n \"use strict\";\n var options, detachPasteHandler;\n options = {\n targetElement: null,\n callbacks: {\n log: function(message, level) {},\n pasteReceived: function(blob) {}\n }\n };\n function isImage(item) {\n return item.type && item.type.indexOf(\"image/\") === 0;\n }\n function registerPasteHandler() {\n detachPasteHandler = qq(options.targetElement).attach(\"paste\", function(event) {\n var clipboardData = event.clipboardData;\n if (clipboardData) {\n qq.each(clipboardData.items, function(idx, item) {\n if (isImage(item)) {\n var blob = item.getAsFile();\n options.callbacks.pasteReceived(blob);\n }\n });\n }\n });\n }\n function unregisterPasteHandler() {\n if (detachPasteHandler) {\n detachPasteHandler();\n }\n }\n qq.extend(options, o);\n registerPasteHandler();\n qq.extend(this, {\n reset: function() {\n unregisterPasteHandler();\n }\n });\n };\n qq.FormSupport = function(options, startUpload, log) {\n \"use strict\";\n var self = this, interceptSubmit = options.interceptSubmit, formEl = options.element, autoUpload = options.autoUpload;\n qq.extend(this, {\n newEndpoint: null,\n newAutoUpload: autoUpload,\n attachedToForm: false,\n getFormInputsAsObject: function() {\n if (formEl == null) {\n return null;\n }\n return self._form2Obj(formEl);\n }\n });\n function determineNewEndpoint(formEl) {\n if (formEl.getAttribute(\"action\")) {\n self.newEndpoint = formEl.getAttribute(\"action\");\n }\n }\n function validateForm(formEl, nativeSubmit) {\n if (formEl.checkValidity && !formEl.checkValidity()) {\n log(\"Form did not pass validation checks - will not upload.\", \"error\");\n nativeSubmit();\n } else {\n return true;\n }\n }\n function maybeUploadOnSubmit(formEl) {\n var nativeSubmit = formEl.submit;\n qq(formEl).attach(\"submit\", function(event) {\n event = event || window.event;\n if (event.preventDefault) {\n event.preventDefault();\n } else {\n event.returnValue = false;\n }\n validateForm(formEl, nativeSubmit) && startUpload();\n });\n formEl.submit = function() {\n validateForm(formEl, nativeSubmit) && startUpload();\n };\n }\n function determineFormEl(formEl) {\n if (formEl) {\n if (qq.isString(formEl)) {\n formEl = document.getElementById(formEl);\n }\n if (formEl) {\n log(\"Attaching to form element.\");\n determineNewEndpoint(formEl);\n interceptSubmit && maybeUploadOnSubmit(formEl);\n }\n }\n return formEl;\n }\n formEl = determineFormEl(formEl);\n this.attachedToForm = !!formEl;\n };\n qq.extend(qq.FormSupport.prototype, {\n _form2Obj: function(form) {\n \"use strict\";\n var obj = {}, notIrrelevantType = function(type) {\n var irrelevantTypes = [ \"button\", \"image\", \"reset\", \"submit\" ];\n return qq.indexOf(irrelevantTypes, type.toLowerCase()) < 0;\n }, radioOrCheckbox = function(type) {\n return qq.indexOf([ \"checkbox\", \"radio\" ], type.toLowerCase()) >= 0;\n }, ignoreValue = function(el) {\n if (radioOrCheckbox(el.type) && !el.checked) {\n return true;\n }\n return el.disabled && el.type.toLowerCase() !== \"hidden\";\n }, selectValue = function(select) {\n var value = null;\n qq.each(qq(select).children(), function(idx, child) {\n if (child.tagName.toLowerCase() === \"option\" && child.selected) {\n value = child.value;\n return false;\n }\n });\n return value;\n };\n qq.each(form.elements, function(idx, el) {\n if ((qq.isInput(el, true) || el.tagName.toLowerCase() === \"textarea\") && notIrrelevantType(el.type) && !ignoreValue(el)) {\n obj[el.name] = el.value;\n } else if (el.tagName.toLowerCase() === \"select\" && !ignoreValue(el)) {\n var value = selectValue(el);\n if (value !== null) {\n obj[el.name] = value;\n }\n }\n });\n return obj;\n }\n });\n qq.traditional = qq.traditional || {};\n qq.traditional.FormUploadHandler = function(options, proxy) {\n \"use strict\";\n var handler = this, getName = proxy.getName, getUuid = proxy.getUuid, log = proxy.log;\n function getIframeContentJson(id, iframe) {\n var response, doc, innerHtml;\n try {\n doc = iframe.contentDocument || iframe.contentWindow.document;\n innerHtml = doc.body.innerHTML;\n log(\"converting iframe's innerHTML to JSON\");\n log(\"innerHTML = \" + innerHtml);\n if (innerHtml && innerHtml.match(/^1 && !options.allowMultipleItems) {\n options.callbacks.processingDroppedFilesComplete([]);\n options.callbacks.dropError(\"tooManyFilesError\", \"\");\n uploadDropZone.dropDisabled(false);\n handleDataTransferPromise.failure();\n } else {\n droppedFiles = [];\n if (qq.isFolderDropSupported(dataTransfer)) {\n qq.each(dataTransfer.items, function(idx, item) {\n var entry = item.webkitGetAsEntry();\n if (entry) {\n if (entry.isFile) {\n droppedFiles.push(item.getAsFile());\n } else {\n pendingFolderPromises.push(traverseFileTree(entry).done(function() {\n pendingFolderPromises.pop();\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }));\n }\n }\n });\n } else {\n droppedFiles = dataTransfer.files;\n }\n if (pendingFolderPromises.length === 0) {\n handleDataTransferPromise.success();\n }\n }\n return handleDataTransferPromise;\n }\n function setupDropzone(dropArea) {\n var dropZone = new qq.UploadDropZone({\n HIDE_ZONES_EVENT_NAME: HIDE_ZONES_EVENT_NAME,\n element: dropArea,\n onEnter: function(e) {\n qq(dropArea).addClass(options.classes.dropActive);\n e.stopPropagation();\n },\n onLeaveNotDescendants: function(e) {\n qq(dropArea).removeClass(options.classes.dropActive);\n },\n onDrop: function(e) {\n handleDataTransfer(e.dataTransfer, dropZone).then(function() {\n uploadDroppedFiles(droppedFiles, dropZone);\n }, function() {\n options.callbacks.dropLog(\"Drop event DataTransfer parsing failed. No files will be uploaded.\", \"error\");\n });\n }\n });\n disposeSupport.addDisposer(function() {\n dropZone.dispose();\n });\n qq(dropArea).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropArea).hide();\n uploadDropZones.push(dropZone);\n return dropZone;\n }\n function isFileDrag(dragEvent) {\n var fileDrag;\n qq.each(dragEvent.dataTransfer.types, function(key, val) {\n if (val === \"Files\") {\n fileDrag = true;\n return false;\n }\n });\n return fileDrag;\n }\n function leavingDocumentOut(e) {\n if (qq.safari()) {\n return e.x < 0 || e.y < 0;\n }\n return e.x === 0 && e.y === 0;\n }\n function setupDragDrop() {\n var dropZones = options.dropZoneElements, maybeHideDropZones = function() {\n setTimeout(function() {\n qq.each(dropZones, function(idx, dropZone) {\n qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR) && qq(dropZone).hide();\n qq(dropZone).removeClass(options.classes.dropActive);\n });\n }, 10);\n };\n qq.each(dropZones, function(idx, dropZone) {\n var uploadDropZone = setupDropzone(dropZone);\n if (dropZones.length && qq.supportedFeatures.fileDrop) {\n disposeSupport.attach(document, \"dragenter\", function(e) {\n if (!uploadDropZone.dropDisabled() && isFileDrag(e)) {\n qq.each(dropZones, function(idx, dropZone) {\n if (dropZone instanceof HTMLElement && qq(dropZone).hasAttribute(HIDE_BEFORE_ENTER_ATTR)) {\n qq(dropZone).css({\n display: \"block\"\n });\n }\n });\n }\n });\n }\n });\n disposeSupport.attach(document, \"dragleave\", function(e) {\n if (leavingDocumentOut(e)) {\n maybeHideDropZones();\n }\n });\n disposeSupport.attach(qq(document).children()[0], \"mouseenter\", function(e) {\n maybeHideDropZones();\n });\n disposeSupport.attach(document, \"drop\", function(e) {\n if (isFileDrag(e)) {\n e.preventDefault();\n maybeHideDropZones();\n }\n });\n disposeSupport.attach(document, HIDE_ZONES_EVENT_NAME, maybeHideDropZones);\n }\n setupDragDrop();\n qq.extend(this, {\n setupExtraDropzone: function(element) {\n options.dropZoneElements.push(element);\n setupDropzone(element);\n },\n removeDropzone: function(element) {\n var i, dzs = options.dropZoneElements;\n for (i in dzs) {\n if (dzs[i] === element) {\n return dzs.splice(i, 1);\n }\n }\n },\n dispose: function() {\n disposeSupport.dispose();\n qq.each(uploadDropZones, function(idx, dropZone) {\n dropZone.dispose();\n });\n }\n });\n this._testing = {};\n this._testing.extractDirectoryPath = extractDirectoryPath;\n };\n qq.DragAndDrop.callbacks = function() {\n \"use strict\";\n return {\n processingDroppedFiles: function() {},\n processingDroppedFilesComplete: function(files, targetEl) {},\n dropError: function(code, errorSpecifics) {\n qq.log(\"Drag & drop error code '\" + code + \" with these specifics: '\" + errorSpecifics + \"'\", \"error\");\n },\n dropLog: function(message, level) {\n qq.log(message, level);\n }\n };\n };\n qq.UploadDropZone = function(o) {\n \"use strict\";\n var disposeSupport = new qq.DisposeSupport(), options, element, preventDrop, dropOutsideDisabled;\n options = {\n element: null,\n onEnter: function(e) {},\n onLeave: function(e) {},\n onLeaveNotDescendants: function(e) {},\n onDrop: function(e) {}\n };\n qq.extend(options, o);\n element = options.element;\n function dragoverShouldBeCanceled() {\n return qq.safari() || qq.firefox() && qq.windows();\n }\n function disableDropOutside(e) {\n if (!dropOutsideDisabled) {\n if (dragoverShouldBeCanceled) {\n disposeSupport.attach(document, \"dragover\", function(e) {\n e.preventDefault();\n });\n } else {\n disposeSupport.attach(document, \"dragover\", function(e) {\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = \"none\";\n e.preventDefault();\n }\n });\n }\n dropOutsideDisabled = true;\n }\n }\n function isValidFileDrag(e) {\n if (!qq.supportedFeatures.fileDrop) {\n return false;\n }\n var effectTest, dt = e.dataTransfer, isSafari = qq.safari();\n effectTest = qq.ie() && qq.supportedFeatures.fileDrop ? true : dt.effectAllowed !== \"none\";\n return dt && effectTest && (dt.files && dt.files.length || !isSafari && dt.types.contains && dt.types.contains(\"Files\") || dt.types.includes && dt.types.includes(\"Files\"));\n }\n function isOrSetDropDisabled(isDisabled) {\n if (isDisabled !== undefined) {\n preventDrop = isDisabled;\n }\n return preventDrop;\n }\n function triggerHidezonesEvent() {\n var hideZonesEvent;\n function triggerUsingOldApi() {\n hideZonesEvent = document.createEvent(\"Event\");\n hideZonesEvent.initEvent(options.HIDE_ZONES_EVENT_NAME, true, true);\n }\n if (window.CustomEvent) {\n try {\n hideZonesEvent = new CustomEvent(options.HIDE_ZONES_EVENT_NAME);\n } catch (err) {\n triggerUsingOldApi();\n }\n } else {\n triggerUsingOldApi();\n }\n document.dispatchEvent(hideZonesEvent);\n }\n function attachEvents() {\n disposeSupport.attach(element, \"dragover\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n var effect = qq.ie() && qq.supportedFeatures.fileDrop ? null : e.dataTransfer.effectAllowed;\n if (effect === \"move\" || effect === \"linkMove\") {\n e.dataTransfer.dropEffect = \"move\";\n } else {\n e.dataTransfer.dropEffect = \"copy\";\n }\n e.stopPropagation();\n e.preventDefault();\n });\n disposeSupport.attach(element, \"dragenter\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n options.onEnter(e);\n }\n });\n disposeSupport.attach(element, \"dragleave\", function(e) {\n if (!isValidFileDrag(e)) {\n return;\n }\n options.onLeave(e);\n var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);\n if (qq(this).contains(relatedTarget)) {\n return;\n }\n options.onLeaveNotDescendants(e);\n });\n disposeSupport.attach(element, \"drop\", function(e) {\n if (!isOrSetDropDisabled()) {\n if (!isValidFileDrag(e)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n options.onDrop(e);\n triggerHidezonesEvent();\n }\n });\n }\n disableDropOutside();\n attachEvents();\n qq.extend(this, {\n dropDisabled: function(isDisabled) {\n return isOrSetDropDisabled(isDisabled);\n },\n dispose: function() {\n disposeSupport.dispose();\n },\n getElement: function() {\n return element;\n }\n });\n this._testing = {};\n this._testing.isValidFileDrag = isValidFileDrag;\n };\n (function() {\n \"use strict\";\n qq.uiPublicApi = {\n addInitialFiles: function(cannedFileList) {\n this._parent.prototype.addInitialFiles.apply(this, arguments);\n this._templating.addCacheToDom();\n },\n clearStoredFiles: function() {\n this._parent.prototype.clearStoredFiles.apply(this, arguments);\n this._templating.clearFiles();\n },\n addExtraDropzone: function(element) {\n this._dnd && this._dnd.setupExtraDropzone(element);\n },\n removeExtraDropzone: function(element) {\n if (this._dnd) {\n return this._dnd.removeDropzone(element);\n }\n },\n getItemByFileId: function(id) {\n if (!this._templating.isHiddenForever(id)) {\n return this._templating.getFileContainer(id);\n }\n },\n reset: function() {\n this._parent.prototype.reset.apply(this, arguments);\n this._templating.reset();\n if (!this._options.button && this._templating.getButton()) {\n this._defaultButtonId = this._createUploadButton({\n element: this._templating.getButton(),\n title: this._options.text.fileInputTitle\n }).getButtonId();\n }\n if (this._dnd) {\n this._dnd.dispose();\n this._dnd = this._setupDragAndDrop();\n }\n this._totalFilesInBatch = 0;\n this._filesInBatchAddedToUi = 0;\n this._setupClickAndEditEventHandlers();\n },\n setName: function(id, newName) {\n var formattedFilename = this._options.formatFileName(newName);\n this._parent.prototype.setName.apply(this, arguments);\n this._templating.updateFilename(id, formattedFilename);\n },\n pauseUpload: function(id) {\n var paused = this._parent.prototype.pauseUpload.apply(this, arguments);\n paused && this._templating.uploadPaused(id);\n return paused;\n },\n continueUpload: function(id) {\n var continued = this._parent.prototype.continueUpload.apply(this, arguments);\n continued && this._templating.uploadContinued(id);\n return continued;\n },\n getId: function(fileContainerOrChildEl) {\n return this._templating.getFileId(fileContainerOrChildEl);\n },\n getDropTarget: function(fileId) {\n var file = this.getFile(fileId);\n return file.qqDropTarget;\n }\n };\n qq.uiPrivateApi = {\n _getButton: function(buttonId) {\n var button = this._parent.prototype._getButton.apply(this, arguments);\n if (!button) {\n if (buttonId === this._defaultButtonId) {\n button = this._templating.getButton();\n }\n }\n return button;\n },\n _removeFileItem: function(fileId) {\n this._templating.removeFile(fileId);\n },\n _setupClickAndEditEventHandlers: function() {\n this._fileButtonsClickHandler = qq.FileButtonsClickHandler && this._bindFileButtonsClickEvent();\n this._focusinEventSupported = !qq.firefox();\n if (this._isEditFilenameEnabled()) {\n this._filenameClickHandler = this._bindFilenameClickEvent();\n this._filenameInputFocusInHandler = this._bindFilenameInputFocusInEvent();\n this._filenameInputFocusHandler = this._bindFilenameInputFocusEvent();\n }\n },\n _setupDragAndDrop: function() {\n var self = this, dropZoneElements = this._options.dragAndDrop.extraDropzones, templating = this._templating, defaultDropZone = templating.getDropZone();\n defaultDropZone && dropZoneElements.push(defaultDropZone);\n return new qq.DragAndDrop({\n dropZoneElements: dropZoneElements,\n allowMultipleItems: this._options.multiple,\n classes: {\n dropActive: this._options.classes.dropActive\n },\n callbacks: {\n processingDroppedFiles: function() {\n templating.showDropProcessing();\n },\n processingDroppedFilesComplete: function(files, targetEl) {\n templating.hideDropProcessing();\n qq.each(files, function(idx, file) {\n file.qqDropTarget = targetEl;\n });\n if (files.length) {\n self.addFiles(files, null, null);\n }\n },\n dropError: function(code, errorData) {\n self._itemError(code, errorData);\n },\n dropLog: function(message, level) {\n self.log(message, level);\n }\n }\n });\n },\n _bindFileButtonsClickEvent: function() {\n var self = this;\n return new qq.FileButtonsClickHandler({\n templating: this._templating,\n log: function(message, lvl) {\n self.log(message, lvl);\n },\n onDeleteFile: function(fileId) {\n self.deleteFile(fileId);\n },\n onCancel: function(fileId) {\n self.cancel(fileId);\n },\n onRetry: function(fileId) {\n self.retry(fileId);\n },\n onPause: function(fileId) {\n self.pauseUpload(fileId);\n },\n onContinue: function(fileId) {\n self.continueUpload(fileId);\n },\n onGetName: function(fileId) {\n return self.getName(fileId);\n }\n });\n },\n _isEditFilenameEnabled: function() {\n return this._templating.isEditFilenamePossible() && !this._options.autoUpload && qq.FilenameClickHandler && qq.FilenameInputFocusHandler && qq.FilenameInputFocusHandler;\n },\n _filenameEditHandler: function() {\n var self = this, templating = this._templating;\n return {\n templating: templating,\n log: function(message, lvl) {\n self.log(message, lvl);\n },\n onGetUploadStatus: function(fileId) {\n return self.getUploads({\n id: fileId\n }).status;\n },\n onGetName: function(fileId) {\n return self.getName(fileId);\n },\n onSetName: function(id, newName) {\n self.setName(id, newName);\n },\n onEditingStatusChange: function(id, isEditing) {\n var qqInput = qq(templating.getEditInput(id)), qqFileContainer = qq(templating.getFileContainer(id));\n if (isEditing) {\n qqInput.addClass(\"qq-editing\");\n templating.hideFilename(id);\n templating.hideEditIcon(id);\n } else {\n qqInput.removeClass(\"qq-editing\");\n templating.showFilename(id);\n templating.showEditIcon(id);\n }\n qqFileContainer.addClass(\"qq-temp\").removeClass(\"qq-temp\");\n }\n };\n },\n _onUploadStatusChange: function(id, oldStatus, newStatus) {\n this._parent.prototype._onUploadStatusChange.apply(this, arguments);\n if (this._isEditFilenameEnabled()) {\n if (this._templating.getFileContainer(id) && newStatus !== qq.status.SUBMITTED) {\n this._templating.markFilenameEditable(id);\n this._templating.hideEditIcon(id);\n }\n }\n if (oldStatus === qq.status.UPLOAD_RETRYING && newStatus === qq.status.UPLOADING) {\n this._templating.hideRetry(id);\n this._templating.setStatusText(id);\n qq(this._templating.getFileContainer(id)).removeClass(this._classes.retrying);\n } else if (newStatus === qq.status.UPLOAD_FAILED) {\n this._templating.hidePause(id);\n }\n },\n _bindFilenameInputFocusInEvent: function() {\n var spec = qq.extend({}, this._filenameEditHandler());\n return new qq.FilenameInputFocusInHandler(spec);\n },\n _bindFilenameInputFocusEvent: function() {\n var spec = qq.extend({}, this._filenameEditHandler());\n return new qq.FilenameInputFocusHandler(spec);\n },\n _bindFilenameClickEvent: function() {\n var spec = qq.extend({}, this._filenameEditHandler());\n return new qq.FilenameClickHandler(spec);\n },\n _storeForLater: function(id) {\n this._parent.prototype._storeForLater.apply(this, arguments);\n this._templating.hideSpinner(id);\n },\n _onAllComplete: function(successful, failed) {\n this._parent.prototype._onAllComplete.apply(this, arguments);\n this._templating.resetTotalProgress();\n },\n _onSubmit: function(id, name) {\n var file = this.getFile(id);\n if (file && file.qqPath && this._options.dragAndDrop.reportDirectoryPaths) {\n this._paramsStore.addReadOnly(id, {\n qqpath: file.qqPath\n });\n }\n this._parent.prototype._onSubmit.apply(this, arguments);\n this._addToList(id, name);\n },\n _onSubmitted: function(id) {\n if (this._isEditFilenameEnabled()) {\n this._templating.markFilenameEditable(id);\n this._templating.showEditIcon(id);\n if (!this._focusinEventSupported) {\n this._filenameInputFocusHandler.addHandler(this._templating.getEditInput(id));\n }\n }\n },\n _onProgress: function(id, name, loaded, total) {\n this._parent.prototype._onProgress.apply(this, arguments);\n this._templating.updateProgress(id, loaded, total);\n if (total === 0 || Math.round(loaded / total * 100) === 100) {\n this._templating.hideCancel(id);\n this._templating.hidePause(id);\n this._templating.hideProgress(id);\n this._templating.setStatusText(id, this._options.text.waitingForResponse);\n this._displayFileSize(id);\n } else {\n this._displayFileSize(id, loaded, total);\n }\n },\n _onTotalProgress: function(loaded, total) {\n this._parent.prototype._onTotalProgress.apply(this, arguments);\n this._templating.updateTotalProgress(loaded, total);\n },\n _onComplete: function(id, name, result, xhr) {\n var parentRetVal = this._parent.prototype._onComplete.apply(this, arguments), templating = this._templating, fileContainer = templating.getFileContainer(id), self = this;\n function completeUpload(result) {\n if (!fileContainer) {\n return;\n }\n templating.setStatusText(id);\n qq(fileContainer).removeClass(self._classes.retrying);\n templating.hideProgress(id);\n if (self.getUploads({\n id: id\n }).status !== qq.status.UPLOAD_FAILED) {\n templating.hideCancel(id);\n }\n templating.hideSpinner(id);\n if (result.success) {\n self._markFileAsSuccessful(id);\n } else {\n qq(fileContainer).addClass(self._classes.fail);\n templating.showCancel(id);\n if (templating.isRetryPossible() && !self._preventRetries[id]) {\n qq(fileContainer).addClass(self._classes.retryable);\n templating.showRetry(id);\n }\n self._controlFailureTextDisplay(id, result);\n }\n }\n if (parentRetVal instanceof qq.Promise) {\n parentRetVal.done(function(newResult) {\n completeUpload(newResult);\n });\n } else {\n completeUpload(result);\n }\n return parentRetVal;\n },\n _markFileAsSuccessful: function(id) {\n var templating = this._templating;\n if (this._isDeletePossible()) {\n templating.showDeleteButton(id);\n }\n qq(templating.getFileContainer(id)).addClass(this._classes.success);\n this._maybeUpdateThumbnail(id);\n },\n _onUploadPrep: function(id) {\n this._parent.prototype._onUploadPrep.apply(this, arguments);\n this._templating.showSpinner(id);\n },\n _onUpload: function(id, name) {\n var parentRetVal = this._parent.prototype._onUpload.apply(this, arguments);\n this._templating.showSpinner(id);\n return parentRetVal;\n },\n _onUploadChunk: function(id, chunkData) {\n this._parent.prototype._onUploadChunk.apply(this, arguments);\n if (chunkData.partIndex > 0 && this._handler.isResumable(id)) {\n this._templating.allowPause(id);\n }\n },\n _onCancel: function(id, name) {\n this._parent.prototype._onCancel.apply(this, arguments);\n this._removeFileItem(id);\n if (this._getNotFinished() === 0) {\n this._templating.resetTotalProgress();\n }\n },\n _onBeforeAutoRetry: function(id) {\n var retryNumForDisplay, maxAuto, retryNote;\n this._parent.prototype._onBeforeAutoRetry.apply(this, arguments);\n this._showCancelLink(id);\n if (this._options.retry.showAutoRetryNote) {\n retryNumForDisplay = this._autoRetries[id];\n maxAuto = this._options.retry.maxAutoAttempts;\n retryNote = this._options.retry.autoRetryNote.replace(/\\{retryNum\\}/g, retryNumForDisplay);\n retryNote = retryNote.replace(/\\{maxAuto\\}/g, maxAuto);\n this._templating.setStatusText(id, retryNote);\n qq(this._templating.getFileContainer(id)).addClass(this._classes.retrying);\n }\n },\n _onBeforeManualRetry: function(id) {\n if (this._parent.prototype._onBeforeManualRetry.apply(this, arguments)) {\n this._templating.resetProgress(id);\n qq(this._templating.getFileContainer(id)).removeClass(this._classes.fail);\n this._templating.setStatusText(id);\n this._templating.showSpinner(id);\n this._showCancelLink(id);\n return true;\n } else {\n qq(this._templating.getFileContainer(id)).addClass(this._classes.retryable);\n this._templating.showRetry(id);\n return false;\n }\n },\n _onSubmitDelete: function(id) {\n var onSuccessCallback = qq.bind(this._onSubmitDeleteSuccess, this);\n this._parent.prototype._onSubmitDelete.call(this, id, onSuccessCallback);\n },\n _onSubmitDeleteSuccess: function(id, uuid, additionalMandatedParams) {\n if (this._options.deleteFile.forceConfirm) {\n this._showDeleteConfirm.apply(this, arguments);\n } else {\n this._sendDeleteRequest.apply(this, arguments);\n }\n },\n _onDeleteComplete: function(id, xhr, isError) {\n this._parent.prototype._onDeleteComplete.apply(this, arguments);\n this._templating.hideSpinner(id);\n if (isError) {\n this._templating.setStatusText(id, this._options.deleteFile.deletingFailedText);\n this._templating.showDeleteButton(id);\n } else {\n this._removeFileItem(id);\n }\n },\n _sendDeleteRequest: function(id, uuid, additionalMandatedParams) {\n this._templating.hideDeleteButton(id);\n this._templating.showSpinner(id);\n this._templating.setStatusText(id, this._options.deleteFile.deletingStatusText);\n this._deleteHandler.sendDelete.apply(this, arguments);\n },\n _showDeleteConfirm: function(id, uuid, mandatedParams) {\n var fileName = this.getName(id), confirmMessage = this._options.deleteFile.confirmMessage.replace(/\\{filename\\}/g, fileName), uuid = this.getUuid(id), deleteRequestArgs = arguments, self = this, retVal;\n retVal = this._options.showConfirm(confirmMessage);\n if (qq.isGenericPromise(retVal)) {\n retVal.then(function() {\n self._sendDeleteRequest.apply(self, deleteRequestArgs);\n });\n } else if (retVal !== false) {\n self._sendDeleteRequest.apply(self, deleteRequestArgs);\n }\n },\n _addToList: function(id, name, canned) {\n var prependData, prependIndex = 0, dontDisplay = this._handler.isProxied(id) && this._options.scaling.hideScaled, record;\n if (this._options.display.prependFiles) {\n if (this._totalFilesInBatch > 1 && this._filesInBatchAddedToUi > 0) {\n prependIndex = this._filesInBatchAddedToUi - 1;\n }\n prependData = {\n index: prependIndex\n };\n }\n if (!canned) {\n if (this._options.disableCancelForFormUploads && !qq.supportedFeatures.ajaxUploading) {\n this._templating.disableCancel();\n }\n if (!this._options.multiple) {\n record = this.getUploads({\n id: id\n });\n this._handledProxyGroup = this._handledProxyGroup || record.proxyGroupId;\n if (record.proxyGroupId !== this._handledProxyGroup || !record.proxyGroupId) {\n this._handler.cancelAll();\n this._clearList();\n this._handledProxyGroup = null;\n }\n }\n }\n if (canned) {\n this._templating.addFileToCache(id, this._options.formatFileName(name), prependData, dontDisplay);\n this._templating.updateThumbnail(id, this._thumbnailUrls[id], true, this._options.thumbnails.customResizer);\n } else {\n this._templating.addFile(id, this._options.formatFileName(name), prependData, dontDisplay);\n this._templating.generatePreview(id, this.getFile(id), this._options.thumbnails.customResizer);\n }\n this._filesInBatchAddedToUi += 1;\n if (canned || this._options.display.fileSizeOnSubmit && qq.supportedFeatures.ajaxUploading) {\n this._displayFileSize(id);\n }\n },\n _clearList: function() {\n this._templating.clearFiles();\n this.clearStoredFiles();\n },\n _displayFileSize: function(id, loadedSize, totalSize) {\n var size = this.getSize(id), sizeForDisplay = this._formatSize(size);\n if (size >= 0) {\n if (loadedSize !== undefined && totalSize !== undefined) {\n sizeForDisplay = this._formatProgress(loadedSize, totalSize);\n }\n this._templating.updateSize(id, sizeForDisplay);\n }\n },\n _formatProgress: function(uploadedSize, totalSize) {\n var message = this._options.text.formatProgress;\n function r(name, replacement) {\n message = message.replace(name, replacement);\n }\n r(\"{percent}\", Math.round(uploadedSize / totalSize * 100));\n r(\"{total_size}\", this._formatSize(totalSize));\n return message;\n },\n _controlFailureTextDisplay: function(id, response) {\n var mode, responseProperty, failureReason;\n mode = this._options.failedUploadTextDisplay.mode;\n responseProperty = this._options.failedUploadTextDisplay.responseProperty;\n if (mode === \"custom\") {\n failureReason = response[responseProperty];\n if (!failureReason) {\n failureReason = this._options.text.failUpload;\n }\n this._templating.setStatusText(id, failureReason);\n if (this._options.failedUploadTextDisplay.enableTooltip) {\n this._showTooltip(id, failureReason);\n }\n } else if (mode === \"default\") {\n this._templating.setStatusText(id, this._options.text.failUpload);\n } else if (mode !== \"none\") {\n this.log(\"failedUploadTextDisplay.mode value of '\" + mode + \"' is not valid\", \"warn\");\n }\n },\n _showTooltip: function(id, text) {\n this._templating.getFileContainer(id).title = text;\n },\n _showCancelLink: function(id) {\n if (!this._options.disableCancelForFormUploads || qq.supportedFeatures.ajaxUploading) {\n this._templating.showCancel(id);\n }\n },\n _itemError: function(code, name, item) {\n var message = this._parent.prototype._itemError.apply(this, arguments);\n this._options.showMessage(message);\n },\n _batchError: function(message) {\n this._parent.prototype._batchError.apply(this, arguments);\n this._options.showMessage(message);\n },\n _setupPastePrompt: function() {\n var self = this;\n this._options.callbacks.onPasteReceived = function() {\n var message = self._options.paste.namePromptMessage, defaultVal = self._options.paste.defaultName;\n return self._options.showPrompt(message, defaultVal);\n };\n },\n _fileOrBlobRejected: function(id, name) {\n this._totalFilesInBatch -= 1;\n this._parent.prototype._fileOrBlobRejected.apply(this, arguments);\n },\n _prepareItemsForUpload: function(items, params, endpoint) {\n this._totalFilesInBatch = items.length;\n this._filesInBatchAddedToUi = 0;\n this._parent.prototype._prepareItemsForUpload.apply(this, arguments);\n },\n _maybeUpdateThumbnail: function(fileId) {\n var thumbnailUrl = this._thumbnailUrls[fileId], fileStatus = this.getUploads({\n id: fileId\n }).status;\n if (fileStatus !== qq.status.DELETED && (thumbnailUrl || this._options.thumbnails.placeholders.waitUntilResponse || !qq.supportedFeatures.imagePreviews)) {\n this._templating.updateThumbnail(fileId, thumbnailUrl, this._options.thumbnails.customResizer);\n }\n },\n _addCannedFile: function(sessionData) {\n var id = this._parent.prototype._addCannedFile.apply(this, arguments);\n this._addToList(id, this.getName(id), true);\n this._templating.hideSpinner(id);\n this._templating.hideCancel(id);\n this._markFileAsSuccessful(id);\n return id;\n },\n _setSize: function(id, newSize) {\n this._parent.prototype._setSize.apply(this, arguments);\n this._templating.updateSize(id, this._formatSize(newSize));\n },\n _sessionRequestComplete: function() {\n this._templating.addCacheToDom();\n this._parent.prototype._sessionRequestComplete.apply(this, arguments);\n }\n };\n })();\n qq.FineUploader = function(o, namespace) {\n \"use strict\";\n var self = this;\n this._parent = namespace ? qq[namespace].FineUploaderBasic : qq.FineUploaderBasic;\n this._parent.apply(this, arguments);\n qq.extend(this._options, {\n element: null,\n button: null,\n listElement: null,\n dragAndDrop: {\n extraDropzones: [],\n reportDirectoryPaths: false\n },\n text: {\n formatProgress: \"{percent}% of {total_size}\",\n failUpload: \"Upload failed\",\n waitingForResponse: \"Processing...\",\n paused: \"Paused\"\n },\n template: \"qq-template\",\n classes: {\n retrying: \"qq-upload-retrying\",\n retryable: \"qq-upload-retryable\",\n success: \"qq-upload-success\",\n fail: \"qq-upload-fail\",\n editable: \"qq-editable\",\n hide: \"qq-hide\",\n dropActive: \"qq-upload-drop-area-active\"\n },\n failedUploadTextDisplay: {\n mode: \"default\",\n responseProperty: \"error\",\n enableTooltip: true\n },\n messages: {\n tooManyFilesError: \"You may only drop one file\",\n unsupportedBrowser: \"Unrecoverable error - this browser does not permit file uploading of any kind.\"\n },\n retry: {\n showAutoRetryNote: true,\n autoRetryNote: \"Retrying {retryNum}/{maxAuto}...\"\n },\n deleteFile: {\n forceConfirm: false,\n confirmMessage: \"Are you sure you want to delete {filename}?\",\n deletingStatusText: \"Deleting...\",\n deletingFailedText: \"Delete failed\"\n },\n display: {\n fileSizeOnSubmit: false,\n prependFiles: false\n },\n paste: {\n promptForName: false,\n namePromptMessage: \"Please name this image\"\n },\n thumbnails: {\n customResizer: null,\n maxCount: 0,\n placeholders: {\n waitUntilResponse: false,\n notAvailablePath: null,\n waitingPath: null\n },\n timeBetweenThumbs: 750\n },\n scaling: {\n hideScaled: false\n },\n showMessage: function(message) {\n if (self._templating.hasDialog(\"alert\")) {\n return self._templating.showDialog(\"alert\", message);\n } else {\n setTimeout(function() {\n window.alert(message);\n }, 0);\n }\n },\n showConfirm: function(message) {\n if (self._templating.hasDialog(\"confirm\")) {\n return self._templating.showDialog(\"confirm\", message);\n } else {\n return window.confirm(message);\n }\n },\n showPrompt: function(message, defaultValue) {\n if (self._templating.hasDialog(\"prompt\")) {\n return self._templating.showDialog(\"prompt\", message, defaultValue);\n } else {\n return window.prompt(message, defaultValue);\n }\n }\n }, true);\n qq.extend(this._options, o, true);\n this._templating = new qq.Templating({\n log: qq.bind(this.log, this),\n templateIdOrEl: this._options.template,\n containerEl: this._options.element,\n fileContainerEl: this._options.listElement,\n button: this._options.button,\n imageGenerator: this._imageGenerator,\n classes: {\n hide: this._options.classes.hide,\n editable: this._options.classes.editable\n },\n limits: {\n maxThumbs: this._options.thumbnails.maxCount,\n timeBetweenThumbs: this._options.thumbnails.timeBetweenThumbs\n },\n placeholders: {\n waitUntilUpdate: this._options.thumbnails.placeholders.waitUntilResponse,\n thumbnailNotAvailable: this._options.thumbnails.placeholders.notAvailablePath,\n waitingForThumbnail: this._options.thumbnails.placeholders.waitingPath\n },\n text: this._options.text\n });\n if (this._options.workarounds.ios8SafariUploads && qq.ios800() && qq.iosSafari()) {\n this._templating.renderFailure(this._options.messages.unsupportedBrowserIos8Safari);\n } else if (!qq.supportedFeatures.uploading || this._options.cors.expected && !qq.supportedFeatures.uploadCors) {\n this._templating.renderFailure(this._options.messages.unsupportedBrowser);\n } else {\n this._wrapCallbacks();\n this._templating.render();\n this._classes = this._options.classes;\n if (!this._options.button && this._templating.getButton()) {\n this._defaultButtonId = this._createUploadButton({\n element: this._templating.getButton(),\n title: this._options.text.fileInputTitle\n }).getButtonId();\n }\n this._setupClickAndEditEventHandlers();\n if (qq.DragAndDrop && qq.supportedFeatures.fileDrop) {\n this._dnd = this._setupDragAndDrop();\n }\n if (this._options.paste.targetElement && this._options.paste.promptForName) {\n if (qq.PasteSupport) {\n this._setupPastePrompt();\n } else {\n this.log(\"Paste support module not found.\", \"error\");\n }\n }\n this._totalFilesInBatch = 0;\n this._filesInBatchAddedToUi = 0;\n }\n };\n qq.extend(qq.FineUploader.prototype, qq.basePublicApi);\n qq.extend(qq.FineUploader.prototype, qq.basePrivateApi);\n qq.extend(qq.FineUploader.prototype, qq.uiPublicApi);\n qq.extend(qq.FineUploader.prototype, qq.uiPrivateApi);\n qq.Templating = function(spec) {\n \"use strict\";\n var FILE_ID_ATTR = \"qq-file-id\", FILE_CLASS_PREFIX = \"qq-file-id-\", THUMBNAIL_MAX_SIZE_ATTR = \"qq-max-size\", THUMBNAIL_SERVER_SCALE_ATTR = \"qq-server-scale\", HIDE_DROPZONE_ATTR = \"qq-hide-dropzone\", DROPZPONE_TEXT_ATTR = \"qq-drop-area-text\", IN_PROGRESS_CLASS = \"qq-in-progress\", HIDDEN_FOREVER_CLASS = \"qq-hidden-forever\", fileBatch = {\n content: document.createDocumentFragment(),\n map: {}\n }, isCancelDisabled = false, generatedThumbnails = 0, thumbnailQueueMonitorRunning = false, thumbGenerationQueue = [], thumbnailMaxSize = -1, options = {\n log: null,\n limits: {\n maxThumbs: 0,\n timeBetweenThumbs: 750\n },\n templateIdOrEl: \"qq-template\",\n containerEl: null,\n fileContainerEl: null,\n button: null,\n imageGenerator: null,\n classes: {\n hide: \"qq-hide\",\n editable: \"qq-editable\"\n },\n placeholders: {\n waitUntilUpdate: false,\n thumbnailNotAvailable: null,\n waitingForThumbnail: null\n },\n text: {\n paused: \"Paused\"\n }\n }, selectorClasses = {\n button: \"qq-upload-button-selector\",\n alertDialog: \"qq-alert-dialog-selector\",\n dialogCancelButton: \"qq-cancel-button-selector\",\n confirmDialog: \"qq-confirm-dialog-selector\",\n dialogMessage: \"qq-dialog-message-selector\",\n dialogOkButton: \"qq-ok-button-selector\",\n promptDialog: \"qq-prompt-dialog-selector\",\n uploader: \"qq-uploader-selector\",\n drop: \"qq-upload-drop-area-selector\",\n list: \"qq-upload-list-selector\",\n progressBarContainer: \"qq-progress-bar-container-selector\",\n progressBar: \"qq-progress-bar-selector\",\n totalProgressBarContainer: \"qq-total-progress-bar-container-selector\",\n totalProgressBar: \"qq-total-progress-bar-selector\",\n file: \"qq-upload-file-selector\",\n spinner: \"qq-upload-spinner-selector\",\n size: \"qq-upload-size-selector\",\n cancel: \"qq-upload-cancel-selector\",\n pause: \"qq-upload-pause-selector\",\n continueButton: \"qq-upload-continue-selector\",\n deleteButton: \"qq-upload-delete-selector\",\n retry: \"qq-upload-retry-selector\",\n statusText: \"qq-upload-status-text-selector\",\n editFilenameInput: \"qq-edit-filename-selector\",\n editNameIcon: \"qq-edit-filename-icon-selector\",\n dropText: \"qq-upload-drop-area-text-selector\",\n dropProcessing: \"qq-drop-processing-selector\",\n dropProcessingSpinner: \"qq-drop-processing-spinner-selector\",\n thumbnail: \"qq-thumbnail-selector\"\n }, previewGeneration = {}, cachedThumbnailNotAvailableImg = new qq.Promise(), cachedWaitingForThumbnailImg = new qq.Promise(), log, isEditElementsExist, isRetryElementExist, templateDom, container, fileList, showThumbnails, serverScale, cacheThumbnailPlaceholders = function() {\n var notAvailableUrl = options.placeholders.thumbnailNotAvailable, waitingUrl = options.placeholders.waitingForThumbnail, spec = {\n maxSize: thumbnailMaxSize,\n scale: serverScale\n };\n if (showThumbnails) {\n if (notAvailableUrl) {\n options.imageGenerator.generate(notAvailableUrl, new Image(), spec).then(function(updatedImg) {\n cachedThumbnailNotAvailableImg.success(updatedImg);\n }, function() {\n cachedThumbnailNotAvailableImg.failure();\n log(\"Problem loading 'not available' placeholder image at \" + notAvailableUrl, \"error\");\n });\n } else {\n cachedThumbnailNotAvailableImg.failure();\n }\n if (waitingUrl) {\n options.imageGenerator.generate(waitingUrl, new Image(), spec).then(function(updatedImg) {\n cachedWaitingForThumbnailImg.success(updatedImg);\n }, function() {\n cachedWaitingForThumbnailImg.failure();\n log(\"Problem loading 'waiting for thumbnail' placeholder image at \" + waitingUrl, \"error\");\n });\n } else {\n cachedWaitingForThumbnailImg.failure();\n }\n }\n }, displayWaitingImg = function(thumbnail) {\n var waitingImgPlacement = new qq.Promise();\n cachedWaitingForThumbnailImg.then(function(img) {\n maybeScalePlaceholderViaCss(img, thumbnail);\n if (!thumbnail.src) {\n thumbnail.src = img.src;\n thumbnail.onload = function() {\n thumbnail.onload = null;\n show(thumbnail);\n waitingImgPlacement.success();\n };\n } else {\n waitingImgPlacement.success();\n }\n }, function() {\n hide(thumbnail);\n waitingImgPlacement.success();\n });\n return waitingImgPlacement;\n }, generateNewPreview = function(id, blob, spec) {\n var thumbnail = getThumbnail(id);\n log(\"Generating new thumbnail for \" + id);\n blob.qqThumbnailId = id;\n return options.imageGenerator.generate(blob, thumbnail, spec).then(function() {\n generatedThumbnails++;\n show(thumbnail);\n previewGeneration[id].success();\n }, function() {\n previewGeneration[id].failure();\n if (!options.placeholders.waitUntilUpdate) {\n maybeSetDisplayNotAvailableImg(id, thumbnail);\n }\n });\n }, generateNextQueuedPreview = function() {\n if (thumbGenerationQueue.length) {\n thumbnailQueueMonitorRunning = true;\n var queuedThumbRequest = thumbGenerationQueue.shift();\n if (queuedThumbRequest.update) {\n processUpdateQueuedPreviewRequest(queuedThumbRequest);\n } else {\n processNewQueuedPreviewRequest(queuedThumbRequest);\n }\n } else {\n thumbnailQueueMonitorRunning = false;\n }\n }, getCancel = function(id) {\n return getTemplateEl(getFile(id), selectorClasses.cancel);\n }, getContinue = function(id) {\n return getTemplateEl(getFile(id), selectorClasses.continueButton);\n }, getDialog = function(type) {\n return getTemplateEl(container, selectorClasses[type + \"Dialog\"]);\n }, getDelete = function(id) {\n return getTemplateEl(getFile(id), selectorClasses.deleteButton);\n }, getDropProcessing = function() {\n return getTemplateEl(container, selectorClasses.dropProcessing);\n }, getEditIcon = function(id) {\n return getTemplateEl(getFile(id), selectorClasses.editNameIcon);\n }, getFile = function(id) {\n return fileBatch.map[id] || qq(fileList).getFirstByClass(FILE_CLASS_PREFIX + id);\n }, getFilename = function(id) {\n return getTemplateEl(getFile(id), selectorClasses.file);\n }, getPause = function(id) {\n return getTemplateEl(getFile(id), selectorClasses.pause);\n }, getProgress = function(id) {\n if (id == null) {\n return getTemplateEl(container, selectorClasses.totalProgressBarContainer) || getTemplateEl(container, selectorClasses.totalProgressBar);\n }\n return getTemplateEl(getFile(id), selectorClasses.progressBarContainer) || getTemplateEl(getFile(id), selectorClasses.progressBar);\n }, getRetry = function(id) {\n return getTemplateEl(getFile(id), selectorClasses.retry);\n }, getSize = function(id) {\n return getTemplateEl(getFile(id), selectorClasses.size);\n }, getSpinner = function(id) {\n return getTemplateEl(getFile(id), selectorClasses.spinner);\n }, getTemplateEl = function(context, cssClass) {\n return context && qq(context).getFirstByClass(cssClass);\n }, getThumbnail = function(id) {\n return showThumbnails && getTemplateEl(getFile(id), selectorClasses.thumbnail);\n }, hide = function(el) {\n el && qq(el).addClass(options.classes.hide);\n }, maybeScalePlaceholderViaCss = function(placeholder, thumbnail) {\n var maxWidth = placeholder.style.maxWidth, maxHeight = placeholder.style.maxHeight;\n if (maxHeight && maxWidth && !thumbnail.style.maxWidth && !thumbnail.style.maxHeight) {\n qq(thumbnail).css({\n maxWidth: maxWidth,\n maxHeight: maxHeight\n });\n }\n }, maybeSetDisplayNotAvailableImg = function(id, thumbnail) {\n var previewing = previewGeneration[id] || new qq.Promise().failure(), notAvailableImgPlacement = new qq.Promise();\n cachedThumbnailNotAvailableImg.then(function(img) {\n previewing.then(function() {\n notAvailableImgPlacement.success();\n }, function() {\n maybeScalePlaceholderViaCss(img, thumbnail);\n thumbnail.onload = function() {\n thumbnail.onload = null;\n notAvailableImgPlacement.success();\n };\n thumbnail.src = img.src;\n show(thumbnail);\n });\n });\n return notAvailableImgPlacement;\n }, parseAndGetTemplate = function() {\n var scriptEl, scriptHtml, fileListNode, tempTemplateEl, fileListEl, defaultButton, dropArea, thumbnail, dropProcessing, dropTextEl, uploaderEl;\n log(\"Parsing template\");\n if (options.templateIdOrEl == null) {\n throw new Error(\"You MUST specify either a template element or ID!\");\n }\n if (qq.isString(options.templateIdOrEl)) {\n scriptEl = document.getElementById(options.templateIdOrEl);\n if (scriptEl === null) {\n throw new Error(qq.format(\"Cannot find template script at ID '{}'!\", options.templateIdOrEl));\n }\n scriptHtml = scriptEl.innerHTML;\n } else {\n if (options.templateIdOrEl.innerHTML === undefined) {\n throw new Error(\"You have specified an invalid value for the template option! \" + \"It must be an ID or an Element.\");\n }\n scriptHtml = options.templateIdOrEl.innerHTML;\n }\n scriptHtml = qq.trimStr(scriptHtml);\n tempTemplateEl = document.createElement(\"div\");\n tempTemplateEl.appendChild(qq.toElement(scriptHtml));\n uploaderEl = qq(tempTemplateEl).getFirstByClass(selectorClasses.uploader);\n if (options.button) {\n defaultButton = qq(tempTemplateEl).getFirstByClass(selectorClasses.button);\n if (defaultButton) {\n qq(defaultButton).remove();\n }\n }\n if (!qq.DragAndDrop || !qq.supportedFeatures.fileDrop) {\n dropProcessing = qq(tempTemplateEl).getFirstByClass(selectorClasses.dropProcessing);\n if (dropProcessing) {\n qq(dropProcessing).remove();\n }\n }\n dropArea = qq(tempTemplateEl).getFirstByClass(selectorClasses.drop);\n if (dropArea && !qq.DragAndDrop) {\n log(\"DnD module unavailable.\", \"info\");\n qq(dropArea).remove();\n }\n if (!qq.supportedFeatures.fileDrop) {\n uploaderEl.removeAttribute(DROPZPONE_TEXT_ATTR);\n if (dropArea && qq(dropArea).hasAttribute(HIDE_DROPZONE_ATTR)) {\n qq(dropArea).css({\n display: \"none\"\n });\n }\n } else if (qq(uploaderEl).hasAttribute(DROPZPONE_TEXT_ATTR) && dropArea) {\n dropTextEl = qq(dropArea).getFirstByClass(selectorClasses.dropText);\n dropTextEl && qq(dropTextEl).remove();\n }\n thumbnail = qq(tempTemplateEl).getFirstByClass(selectorClasses.thumbnail);\n if (!showThumbnails) {\n thumbnail && qq(thumbnail).remove();\n } else if (thumbnail) {\n thumbnailMaxSize = parseInt(thumbnail.getAttribute(THUMBNAIL_MAX_SIZE_ATTR));\n thumbnailMaxSize = thumbnailMaxSize > 0 ? thumbnailMaxSize : null;\n serverScale = qq(thumbnail).hasAttribute(THUMBNAIL_SERVER_SCALE_ATTR);\n }\n showThumbnails = showThumbnails && thumbnail;\n isEditElementsExist = qq(tempTemplateEl).getByClass(selectorClasses.editFilenameInput).length > 0;\n isRetryElementExist = qq(tempTemplateEl).getByClass(selectorClasses.retry).length > 0;\n fileListNode = qq(tempTemplateEl).getFirstByClass(selectorClasses.list);\n if (fileListNode == null) {\n throw new Error(\"Could not find the file list container in the template!\");\n }\n fileListEl = fileListNode.children[0].cloneNode(true);\n fileListNode.innerHTML = \"\";\n if (tempTemplateEl.getElementsByTagName(\"DIALOG\").length) {\n document.createElement(\"dialog\");\n }\n log(\"Template parsing complete\");\n return {\n template: tempTemplateEl,\n fileTemplate: fileListEl\n };\n }, prependFile = function(el, index, fileList) {\n var parentEl = fileList, beforeEl = parentEl.firstChild;\n if (index > 0) {\n beforeEl = qq(parentEl).children()[index].nextSibling;\n }\n parentEl.insertBefore(el, beforeEl);\n }, processNewQueuedPreviewRequest = function(queuedThumbRequest) {\n var id = queuedThumbRequest.id, optFileOrBlob = queuedThumbRequest.optFileOrBlob, relatedThumbnailId = optFileOrBlob && optFileOrBlob.qqThumbnailId, thumbnail = getThumbnail(id), spec = {\n customResizeFunction: queuedThumbRequest.customResizeFunction,\n maxSize: thumbnailMaxSize,\n orient: true,\n scale: true\n };\n if (qq.supportedFeatures.imagePreviews) {\n if (thumbnail) {\n if (options.limits.maxThumbs && options.limits.maxThumbs <= generatedThumbnails) {\n maybeSetDisplayNotAvailableImg(id, thumbnail);\n generateNextQueuedPreview();\n } else {\n displayWaitingImg(thumbnail).done(function() {\n previewGeneration[id] = new qq.Promise();\n previewGeneration[id].done(function() {\n setTimeout(generateNextQueuedPreview, options.limits.timeBetweenThumbs);\n });\n if (relatedThumbnailId != null) {\n useCachedPreview(id, relatedThumbnailId);\n } else {\n generateNewPreview(id, optFileOrBlob, spec);\n }\n });\n }\n } else {\n generateNextQueuedPreview();\n }\n } else if (thumbnail) {\n displayWaitingImg(thumbnail);\n generateNextQueuedPreview();\n }\n }, processUpdateQueuedPreviewRequest = function(queuedThumbRequest) {\n var id = queuedThumbRequest.id, thumbnailUrl = queuedThumbRequest.thumbnailUrl, showWaitingImg = queuedThumbRequest.showWaitingImg, thumbnail = getThumbnail(id), spec = {\n customResizeFunction: queuedThumbRequest.customResizeFunction,\n scale: serverScale,\n maxSize: thumbnailMaxSize\n };\n if (thumbnail) {\n if (thumbnailUrl) {\n if (options.limits.maxThumbs && options.limits.maxThumbs <= generatedThumbnails) {\n maybeSetDisplayNotAvailableImg(id, thumbnail);\n generateNextQueuedPreview();\n } else {\n if (showWaitingImg) {\n displayWaitingImg(thumbnail);\n }\n return options.imageGenerator.generate(thumbnailUrl, thumbnail, spec).then(function() {\n show(thumbnail);\n generatedThumbnails++;\n setTimeout(generateNextQueuedPreview, options.limits.timeBetweenThumbs);\n }, function() {\n maybeSetDisplayNotAvailableImg(id, thumbnail);\n setTimeout(generateNextQueuedPreview, options.limits.timeBetweenThumbs);\n });\n }\n } else {\n maybeSetDisplayNotAvailableImg(id, thumbnail);\n generateNextQueuedPreview();\n }\n }\n }, setProgressBarWidth = function(id, percent) {\n var bar = getProgress(id), progressBarSelector = id == null ? selectorClasses.totalProgressBar : selectorClasses.progressBar;\n if (bar && !qq(bar).hasClass(progressBarSelector)) {\n bar = qq(bar).getFirstByClass(progressBarSelector);\n }\n if (bar) {\n qq(bar).css({\n width: percent + \"%\"\n });\n bar.setAttribute(\"aria-valuenow\", percent);\n }\n }, show = function(el) {\n el && qq(el).removeClass(options.classes.hide);\n }, useCachedPreview = function(targetThumbnailId, cachedThumbnailId) {\n var targetThumbnail = getThumbnail(targetThumbnailId), cachedThumbnail = getThumbnail(cachedThumbnailId);\n log(qq.format(\"ID {} is the same file as ID {}. Will use generated thumbnail from ID {} instead.\", targetThumbnailId, cachedThumbnailId, cachedThumbnailId));\n previewGeneration[cachedThumbnailId].then(function() {\n generatedThumbnails++;\n previewGeneration[targetThumbnailId].success();\n log(qq.format(\"Now using previously generated thumbnail created for ID {} on ID {}.\", cachedThumbnailId, targetThumbnailId));\n targetThumbnail.src = cachedThumbnail.src;\n show(targetThumbnail);\n }, function() {\n previewGeneration[targetThumbnailId].failure();\n if (!options.placeholders.waitUntilUpdate) {\n maybeSetDisplayNotAvailableImg(targetThumbnailId, targetThumbnail);\n }\n });\n };\n qq.extend(options, spec);\n log = options.log;\n if (!qq.supportedFeatures.imagePreviews) {\n options.limits.timeBetweenThumbs = 0;\n options.limits.maxThumbs = 0;\n }\n container = options.containerEl;\n showThumbnails = options.imageGenerator !== undefined;\n templateDom = parseAndGetTemplate();\n cacheThumbnailPlaceholders();\n qq.extend(this, {\n render: function() {\n log(\"Rendering template in DOM.\");\n generatedThumbnails = 0;\n container.appendChild(templateDom.template.cloneNode(true));\n hide(getDropProcessing());\n this.hideTotalProgress();\n fileList = options.fileContainerEl || getTemplateEl(container, selectorClasses.list);\n log(\"Template rendering complete\");\n },\n renderFailure: function(message) {\n var cantRenderEl = qq.toElement(message);\n container.innerHTML = \"\";\n container.appendChild(cantRenderEl);\n },\n reset: function() {\n container.innerHTML = \"\";\n this.render();\n },\n clearFiles: function() {\n fileList.innerHTML = \"\";\n },\n disableCancel: function() {\n isCancelDisabled = true;\n },\n addFile: function(id, name, prependInfo, hideForever, batch) {\n var fileEl = templateDom.fileTemplate.cloneNode(true), fileNameEl = getTemplateEl(fileEl, selectorClasses.file), uploaderEl = getTemplateEl(container, selectorClasses.uploader), fileContainer = batch ? fileBatch.content : fileList, thumb;\n if (batch) {\n fileBatch.map[id] = fileEl;\n }\n qq(fileEl).addClass(FILE_CLASS_PREFIX + id);\n uploaderEl.removeAttribute(DROPZPONE_TEXT_ATTR);\n if (fileNameEl) {\n qq(fileNameEl).setText(name);\n fileNameEl.setAttribute(\"title\", name);\n }\n fileEl.setAttribute(FILE_ID_ATTR, id);\n if (prependInfo) {\n prependFile(fileEl, prependInfo.index, fileContainer);\n } else {\n fileContainer.appendChild(fileEl);\n }\n if (hideForever) {\n fileEl.style.display = \"none\";\n qq(fileEl).addClass(HIDDEN_FOREVER_CLASS);\n } else {\n hide(getProgress(id));\n hide(getSize(id));\n hide(getDelete(id));\n hide(getRetry(id));\n hide(getPause(id));\n hide(getContinue(id));\n if (isCancelDisabled) {\n this.hideCancel(id);\n }\n thumb = getThumbnail(id);\n if (thumb && !thumb.src) {\n cachedWaitingForThumbnailImg.then(function(waitingImg) {\n thumb.src = waitingImg.src;\n if (waitingImg.style.maxHeight && waitingImg.style.maxWidth) {\n qq(thumb).css({\n maxHeight: waitingImg.style.maxHeight,\n maxWidth: waitingImg.style.maxWidth\n });\n }\n show(thumb);\n });\n }\n }\n },\n addFileToCache: function(id, name, prependInfo, hideForever) {\n this.addFile(id, name, prependInfo, hideForever, true);\n },\n addCacheToDom: function() {\n fileList.appendChild(fileBatch.content);\n fileBatch.content = document.createDocumentFragment();\n fileBatch.map = {};\n },\n removeFile: function(id) {\n qq(getFile(id)).remove();\n },\n getFileId: function(el) {\n var currentNode = el;\n if (currentNode) {\n while (currentNode.getAttribute(FILE_ID_ATTR) == null) {\n currentNode = currentNode.parentNode;\n }\n return parseInt(currentNode.getAttribute(FILE_ID_ATTR));\n }\n },\n getFileList: function() {\n return fileList;\n },\n markFilenameEditable: function(id) {\n var filename = getFilename(id);\n filename && qq(filename).addClass(options.classes.editable);\n },\n updateFilename: function(id, name) {\n var filenameEl = getFilename(id);\n if (filenameEl) {\n qq(filenameEl).setText(name);\n filenameEl.setAttribute(\"title\", name);\n }\n },\n hideFilename: function(id) {\n hide(getFilename(id));\n },\n showFilename: function(id) {\n show(getFilename(id));\n },\n isFileName: function(el) {\n return qq(el).hasClass(selectorClasses.file);\n },\n getButton: function() {\n return options.button || getTemplateEl(container, selectorClasses.button);\n },\n hideDropProcessing: function() {\n hide(getDropProcessing());\n },\n showDropProcessing: function() {\n show(getDropProcessing());\n },\n getDropZone: function() {\n return getTemplateEl(container, selectorClasses.drop);\n },\n isEditFilenamePossible: function() {\n return isEditElementsExist;\n },\n hideRetry: function(id) {\n hide(getRetry(id));\n },\n isRetryPossible: function() {\n return isRetryElementExist;\n },\n showRetry: function(id) {\n show(getRetry(id));\n },\n getFileContainer: function(id) {\n return getFile(id);\n },\n showEditIcon: function(id) {\n var icon = getEditIcon(id);\n icon && qq(icon).addClass(options.classes.editable);\n },\n isHiddenForever: function(id) {\n return qq(getFile(id)).hasClass(HIDDEN_FOREVER_CLASS);\n },\n hideEditIcon: function(id) {\n var icon = getEditIcon(id);\n icon && qq(icon).removeClass(options.classes.editable);\n },\n isEditIcon: function(el) {\n return qq(el).hasClass(selectorClasses.editNameIcon, true);\n },\n getEditInput: function(id) {\n return getTemplateEl(getFile(id), selectorClasses.editFilenameInput);\n },\n isEditInput: function(el) {\n return qq(el).hasClass(selectorClasses.editFilenameInput, true);\n },\n updateProgress: function(id, loaded, total) {\n var bar = getProgress(id), percent;\n if (bar && total > 0) {\n percent = Math.round(loaded / total * 100);\n if (percent === 100) {\n hide(bar);\n } else {\n show(bar);\n }\n setProgressBarWidth(id, percent);\n }\n },\n updateTotalProgress: function(loaded, total) {\n this.updateProgress(null, loaded, total);\n },\n hideProgress: function(id) {\n var bar = getProgress(id);\n bar && hide(bar);\n },\n hideTotalProgress: function() {\n this.hideProgress();\n },\n resetProgress: function(id) {\n setProgressBarWidth(id, 0);\n this.hideTotalProgress(id);\n },\n resetTotalProgress: function() {\n this.resetProgress();\n },\n showCancel: function(id) {\n if (!isCancelDisabled) {\n var cancel = getCancel(id);\n cancel && qq(cancel).removeClass(options.classes.hide);\n }\n },\n hideCancel: function(id) {\n hide(getCancel(id));\n },\n isCancel: function(el) {\n return qq(el).hasClass(selectorClasses.cancel, true);\n },\n allowPause: function(id) {\n show(getPause(id));\n hide(getContinue(id));\n },\n uploadPaused: function(id) {\n this.setStatusText(id, options.text.paused);\n this.allowContinueButton(id);\n hide(getSpinner(id));\n },\n hidePause: function(id) {\n hide(getPause(id));\n },\n isPause: function(el) {\n return qq(el).hasClass(selectorClasses.pause, true);\n },\n isContinueButton: function(el) {\n return qq(el).hasClass(selectorClasses.continueButton, true);\n },\n allowContinueButton: function(id) {\n show(getContinue(id));\n hide(getPause(id));\n },\n uploadContinued: function(id) {\n this.setStatusText(id, \"\");\n this.allowPause(id);\n show(getSpinner(id));\n },\n showDeleteButton: function(id) {\n show(getDelete(id));\n },\n hideDeleteButton: function(id) {\n hide(getDelete(id));\n },\n isDeleteButton: function(el) {\n return qq(el).hasClass(selectorClasses.deleteButton, true);\n },\n isRetry: function(el) {\n return qq(el).hasClass(selectorClasses.retry, true);\n },\n updateSize: function(id, text) {\n var size = getSize(id);\n if (size) {\n show(size);\n qq(size).setText(text);\n }\n },\n setStatusText: function(id, text) {\n var textEl = getTemplateEl(getFile(id), selectorClasses.statusText);\n if (textEl) {\n if (text == null) {\n qq(textEl).clearText();\n } else {\n qq(textEl).setText(text);\n }\n }\n },\n hideSpinner: function(id) {\n qq(getFile(id)).removeClass(IN_PROGRESS_CLASS);\n hide(getSpinner(id));\n },\n showSpinner: function(id) {\n qq(getFile(id)).addClass(IN_PROGRESS_CLASS);\n show(getSpinner(id));\n },\n generatePreview: function(id, optFileOrBlob, customResizeFunction) {\n if (!this.isHiddenForever(id)) {\n thumbGenerationQueue.push({\n id: id,\n customResizeFunction: customResizeFunction,\n optFileOrBlob: optFileOrBlob\n });\n !thumbnailQueueMonitorRunning && generateNextQueuedPreview();\n }\n },\n updateThumbnail: function(id, thumbnailUrl, showWaitingImg, customResizeFunction) {\n if (!this.isHiddenForever(id)) {\n thumbGenerationQueue.push({\n customResizeFunction: customResizeFunction,\n update: true,\n id: id,\n thumbnailUrl: thumbnailUrl,\n showWaitingImg: showWaitingImg\n });\n !thumbnailQueueMonitorRunning && generateNextQueuedPreview();\n }\n },\n hasDialog: function(type) {\n return qq.supportedFeatures.dialogElement && !!getDialog(type);\n },\n showDialog: function(type, message, defaultValue) {\n var dialog = getDialog(type), messageEl = getTemplateEl(dialog, selectorClasses.dialogMessage), inputEl = dialog.getElementsByTagName(\"INPUT\")[0], cancelBtn = getTemplateEl(dialog, selectorClasses.dialogCancelButton), okBtn = getTemplateEl(dialog, selectorClasses.dialogOkButton), promise = new qq.Promise(), closeHandler = function() {\n cancelBtn.removeEventListener(\"click\", cancelClickHandler);\n okBtn && okBtn.removeEventListener(\"click\", okClickHandler);\n promise.failure();\n }, cancelClickHandler = function() {\n cancelBtn.removeEventListener(\"click\", cancelClickHandler);\n dialog.close();\n }, okClickHandler = function() {\n dialog.removeEventListener(\"close\", closeHandler);\n okBtn.removeEventListener(\"click\", okClickHandler);\n dialog.close();\n promise.success(inputEl && inputEl.value);\n };\n dialog.addEventListener(\"close\", closeHandler);\n cancelBtn.addEventListener(\"click\", cancelClickHandler);\n okBtn && okBtn.addEventListener(\"click\", okClickHandler);\n if (inputEl) {\n inputEl.value = defaultValue;\n }\n messageEl.textContent = message;\n dialog.showModal();\n return promise;\n }\n });\n };\n qq.UiEventHandler = function(s, protectedApi) {\n \"use strict\";\n var disposer = new qq.DisposeSupport(), spec = {\n eventType: \"click\",\n attachTo: null,\n onHandled: function(target, event) {}\n };\n qq.extend(this, {\n addHandler: function(element) {\n addHandler(element);\n },\n dispose: function() {\n disposer.dispose();\n }\n });\n function addHandler(element) {\n disposer.attach(element, spec.eventType, function(event) {\n event = event || window.event;\n var target = event.target || event.srcElement;\n spec.onHandled(target, event);\n });\n }\n qq.extend(protectedApi, {\n getFileIdFromItem: function(item) {\n return item.qqFileId;\n },\n getDisposeSupport: function() {\n return disposer;\n }\n });\n qq.extend(spec, s);\n if (spec.attachTo) {\n addHandler(spec.attachTo);\n }\n };\n qq.FileButtonsClickHandler = function(s) {\n \"use strict\";\n var inheritedInternalApi = {}, spec = {\n templating: null,\n log: function(message, lvl) {},\n onDeleteFile: function(fileId) {},\n onCancel: function(fileId) {},\n onRetry: function(fileId) {},\n onPause: function(fileId) {},\n onContinue: function(fileId) {},\n onGetName: function(fileId) {}\n }, buttonHandlers = {\n cancel: function(id) {\n spec.onCancel(id);\n },\n retry: function(id) {\n spec.onRetry(id);\n },\n deleteButton: function(id) {\n spec.onDeleteFile(id);\n },\n pause: function(id) {\n spec.onPause(id);\n },\n continueButton: function(id) {\n spec.onContinue(id);\n }\n };\n function examineEvent(target, event) {\n qq.each(buttonHandlers, function(buttonType, handler) {\n var firstLetterCapButtonType = buttonType.charAt(0).toUpperCase() + buttonType.slice(1), fileId;\n if (spec.templating[\"is\" + firstLetterCapButtonType](target)) {\n fileId = spec.templating.getFileId(target);\n qq.preventDefault(event);\n spec.log(qq.format(\"Detected valid file button click event on file '{}', ID: {}.\", spec.onGetName(fileId), fileId));\n handler(fileId);\n return false;\n }\n });\n }\n qq.extend(spec, s);\n spec.eventType = \"click\";\n spec.onHandled = examineEvent;\n spec.attachTo = spec.templating.getFileList();\n qq.extend(this, new qq.UiEventHandler(spec, inheritedInternalApi));\n };\n qq.FilenameClickHandler = function(s) {\n \"use strict\";\n var inheritedInternalApi = {}, spec = {\n templating: null,\n log: function(message, lvl) {},\n classes: {\n file: \"qq-upload-file\",\n editNameIcon: \"qq-edit-filename-icon\"\n },\n onGetUploadStatus: function(fileId) {},\n onGetName: function(fileId) {}\n };\n qq.extend(spec, s);\n function examineEvent(target, event) {\n if (spec.templating.isFileName(target) || spec.templating.isEditIcon(target)) {\n var fileId = spec.templating.getFileId(target), status = spec.onGetUploadStatus(fileId);\n if (status === qq.status.SUBMITTED) {\n spec.log(qq.format(\"Detected valid filename click event on file '{}', ID: {}.\", spec.onGetName(fileId), fileId));\n qq.preventDefault(event);\n inheritedInternalApi.handleFilenameEdit(fileId, target, true);\n }\n }\n }\n spec.eventType = \"click\";\n spec.onHandled = examineEvent;\n qq.extend(this, new qq.FilenameEditHandler(spec, inheritedInternalApi));\n };\n qq.FilenameInputFocusInHandler = function(s, inheritedInternalApi) {\n \"use strict\";\n var spec = {\n templating: null,\n onGetUploadStatus: function(fileId) {},\n log: function(message, lvl) {}\n };\n if (!inheritedInternalApi) {\n inheritedInternalApi = {};\n }\n function handleInputFocus(target, event) {\n if (spec.templating.isEditInput(target)) {\n var fileId = spec.templating.getFileId(target), status = spec.onGetUploadStatus(fileId);\n if (status === qq.status.SUBMITTED) {\n spec.log(qq.format(\"Detected valid filename input focus event on file '{}', ID: {}.\", spec.onGetName(fileId), fileId));\n inheritedInternalApi.handleFilenameEdit(fileId, target);\n }\n }\n }\n spec.eventType = \"focusin\";\n spec.onHandled = handleInputFocus;\n qq.extend(spec, s);\n qq.extend(this, new qq.FilenameEditHandler(spec, inheritedInternalApi));\n };\n qq.FilenameInputFocusHandler = function(spec) {\n \"use strict\";\n spec.eventType = \"focus\";\n spec.attachTo = null;\n qq.extend(this, new qq.FilenameInputFocusInHandler(spec, {}));\n };\n qq.FilenameEditHandler = function(s, inheritedInternalApi) {\n \"use strict\";\n var spec = {\n templating: null,\n log: function(message, lvl) {},\n onGetUploadStatus: function(fileId) {},\n onGetName: function(fileId) {},\n onSetName: function(fileId, newName) {},\n onEditingStatusChange: function(fileId, isEditing) {}\n };\n function getFilenameSansExtension(fileId) {\n var filenameSansExt = spec.onGetName(fileId), extIdx = filenameSansExt.lastIndexOf(\".\");\n if (extIdx > 0) {\n filenameSansExt = filenameSansExt.substr(0, extIdx);\n }\n return filenameSansExt;\n }\n function getOriginalExtension(fileId) {\n var origName = spec.onGetName(fileId);\n return qq.getExtension(origName);\n }\n function handleNameUpdate(newFilenameInputEl, fileId) {\n var newName = newFilenameInputEl.value, origExtension;\n if (newName !== undefined && qq.trimStr(newName).length > 0) {\n origExtension = getOriginalExtension(fileId);\n if (origExtension !== undefined) {\n newName = newName + \".\" + origExtension;\n }\n spec.onSetName(fileId, newName);\n }\n spec.onEditingStatusChange(fileId, false);\n }\n function registerInputBlurHandler(inputEl, fileId) {\n inheritedInternalApi.getDisposeSupport().attach(inputEl, \"blur\", function() {\n handleNameUpdate(inputEl, fileId);\n });\n }\n function registerInputEnterKeyHandler(inputEl, fileId) {\n inheritedInternalApi.getDisposeSupport().attach(inputEl, \"keyup\", function(event) {\n var code = event.keyCode || event.which;\n if (code === 13) {\n handleNameUpdate(inputEl, fileId);\n }\n });\n }\n qq.extend(spec, s);\n spec.attachTo = spec.templating.getFileList();\n qq.extend(this, new qq.UiEventHandler(spec, inheritedInternalApi));\n qq.extend(inheritedInternalApi, {\n handleFilenameEdit: function(id, target, focusInput) {\n var newFilenameInputEl = spec.templating.getEditInput(id);\n spec.onEditingStatusChange(id, true);\n newFilenameInputEl.value = getFilenameSansExtension(id);\n if (focusInput) {\n newFilenameInputEl.focus();\n }\n registerInputBlurHandler(newFilenameInputEl, id);\n registerInputEnterKeyHandler(newFilenameInputEl, id);\n }\n });\n };\n})(window);\n//# sourceMappingURL=fine-uploader.js.map","\"use strict\";\n\nmodule.exports = require(\"../fine-uploader/fine-uploader\");\n","/*!\n * jQuery Validation Plugin v1.21.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2024 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tcustomElements: [],\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar focusListeners = [ \":text\", \"[type='password']\", \"[type='file']\", \"select\", \"textarea\", \"[type='number']\", \"[type='search']\",\n\t\t\t\t\t\t\t\t\"[type='tel']\", \"[type='url']\", \"[type='email']\", \"[type='datetime']\", \"[type='date']\", \"[type='month']\",\n\t\t\t\t\t\t\t\t\"[type='week']\", \"[type='time']\", \"[type='datetime-local']\", \"[type='range']\", \"[type='color']\",\n\t\t\t\t\t\t\t\t\"[type='radio']\", \"[type='checkbox']\", \"[contenteditable]\", \"[type='button']\" ];\n\t\t\tvar clickListeners = [ \"select\", \"option\", \"[type='radio']\", \"[type='checkbox']\" ];\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\", focusListeners.concat( this.settings.customElements ).join( \", \" ), delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", clickListeners.concat( this.settings.customElements ).join( \", \" ), delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {},\n\t\t\t\tselectors = [ \"input\", \"select\", \"textarea\", \"[contenteditable]\" ];\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( selectors.concat( this.settings.customElements ).join( \", \" ) )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Abort any pending Ajax request from a previous call to this method.\n\t\t\tthis.abortRequest( element );\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass );\n\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\tif ( string === undefined ) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\telementAjaxPort: function( element ) {\n\t\t\treturn \"validate\" + element.name;\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() && this.pendingRequest === 0 ) {\n\t\t\t\t$( this.currentForm ).trigger( \"submit\" );\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tabortRequest: function( element ) {\n\t\t\tvar port;\n\n\t\t\tif ( this.pending[ element.name ] ) {\n\t\t\t\tport = this.elementAjaxPort( element );\n\t\t\t\t$.ajaxAbort( port );\n\n\t\t\t\tthis.pendingRequest--;\n\n\t\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\t\tthis.pendingRequest = 0;\n\t\t\t\t}\n\n\t\t\t\tdelete this.pending[ element.name ];\n\t\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ type === \"date\" ? \"dateISO\" : method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = typeof parameter === \"function\" && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( Array.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:-?\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.valid !== null && previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tprevious.valid = null;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: this.elementAjaxPort( element ),\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// $.ajaxAbort( port );\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\n\n// Abort the previous request without sending a new one\n$.ajaxAbort = function( port ) {\n\tif ( pendingRequests[ port ] ) {\n\t\tpendingRequests[ port ].abort();\n\t\tdelete pendingRequests[ port ];\n\t}\n};\nreturn $;\n}));","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"help\": 0,\n\t\"modernizr\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkecommerce\"] = self[\"webpackChunkecommerce\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"lodash\",\"translations\",\"jquery\"], function() { return __webpack_require__(13406); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["module","exports","debug","realtime","tokenUrl","paymentHubUrl","username","password","useCdn","cdnImagesUrl","cdnImagesFallbackUrl","cdnCmsAssetsUrl","supportedCultures","cms","cmsUrl","tracingUrl","config","lordgun","development","require","staging","production","runkd","inwild","environment","NODE_ENV","toLowerCase","trim","configObj","getConfig","SITE","trimTrailingSlash","virtualdir","arguments","length","undefined","slice","getSiteUrl","window","$pathBase","Error","location","port","protocol","hostname","document","documentElement","lang","_extends","Object","assign","target","i","source","key","prototype","hasOwnProperty","call","consoleLogger","type","log","args","this","output","warn","error","_console","console","apply","arr","Array","isArray","arr2","from","_toConsumableArray","Logger","concreteLogger","options","instance","Constructor","TypeError","_classCallCheck","init","prefix","logger","setDebug","bool","_len","_key","forward","_len2","_key2","_len3","_key3","deprecate","_len4","_key4","lvl","debugOnly","create","moduleName","EventEmitter","observers","on","events","listener","_this","split","forEach","event","push","off","_this2","index","indexOf","splice","emit","concat","observer","makeString","object","getLastOfPath","path","Empty","cleanKey","replace","canNotTraverseDeeper","stack","shift","obj","k","setPath","newValue","_getLastOfPath","getPath","_getLastOfPath3","deepExtend","overwrite","prop","String","regexEscape","str","_entityMap","data","s","_inherits","subClass","superClass","constructor","value","enumerable","writable","configurable","setPrototypeOf","defaults","keys","getOwnPropertyNames","getOwnPropertyDescriptor","defineProperty","_defaults","ResourceStore","_EventEmitter","ns","defaultNS","self","ReferenceError","_possibleConstructorReturn","keySeparator","addNamespaces","removeNamespaces","getResource","lng","addResource","silent","addResources","resources","m","addResourceBundle","deep","pack","removeResourceBundle","hasResourceBundle","getResourceBundle","compatibilityAPI","getDataByLanguage","toJSON","processors","addPostProcessor","name","handle","translator","processor","process","_typeof","Symbol","iterator","Translator","services","a","t","changeLanguage","language","exists","interpolation","resolved","resolve","res","extractFromKey","nsSeparator","namespaces","parts","join","translate","overloadTranslationOptionHandler","_extractFromKey","namespace","appendNamespaceToCIMode","resUsedKey","usedKey","resType","toString","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","copy","deepKey","extendTranslation","usedDefault","isValidLookup","defaultValue","count","suffix","pluralResolver","getSuffix","updateMissing","lngs","fallbackLngs","languageUtils","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","send","l","missingKeyHandler","backendConnector","saveMissing","needsPluralHandling","saveMissingPlurals","getPluralFormsOfKey","p","appendNamespaceToMissingKey","parseMissingKeyHandler","_this3","parse","usedLng","usedNS","skipInterpolation","interpolator","defaultVariables","interpolate","nest","reset","postProcess","postProcessorNames","applyPostProcessor","postProcessor","_this4","found","extracted","fallbackNS","needsContextHandling","context","codes","code","finalKey","finalKeys","addLookupKeys","pluralSuffix","contextSeparator","possibleKey","pop","returnNull","returnEmptyString","resourceStore","capitalize","string","charAt","toUpperCase","LanguageUtil","whitelist","getScriptPartFromCode","formatLanguageCode","getLanguagePartFromCode","specialCases","lowerCaseLng","map","part","cleanCode","isWhitelisted","load","nonExplicitWhitelist","fallbacks","default","fallbackCode","fallbackCodes","addCode","c","fc","sets","nr","_rulesPluralsTypes","n","Number","PluralResolver","rules","set","numbers","plurals","addRule","getRule","needsPlural","rule","ret","idx","noAbs","Math","abs","simplifyPluralSuffix","returnSuffix","prepend","compatibilityJSON","Interpolator","format","escapeValue","iOpts","escape","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","maxReplaces","resetRegExp","regexpStr","regexp","RegExp","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","nestingRegexp","match","replaces","regexSafe","val","handleFormat","f","missingInterpolationHandler","exec","lastIndex","temp","clonedOptions","handleHasOptions","inheritedOptions","optionsString","JSON","e","_slicedToArray","_arr","_n","_d","_e","_s","_i","next","done","err","sliceIterator","Connector","backend","store","state","queue","queueLoad","languages","callback","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","loaded","errors","_name$split","_name$split2","q","_getLastOfPath2","what","remove","filter","read","fcName","tried","wait","setTimeout","prepareLoading","loadOne","_this5","_name$split3","_name$split4","fallbackValue","isUpdate","transformOptions","noop","translations","I18n","modules","external","isInitialized","isClone","_ret","initImmediate","createClassOnDemand","ClassOrObject","preload","pluralSeparator","tDescription","_format","lu","LanguageUtils","BackendConnector","languageDetector","detection","_store","loadResources","append","reloadResources","use","setLng","cacheUserLanguage","async","detect","getFixedT","fixedT","opts","rest","_translator","_translator2","setDefaultNamespace","loadNamespaces","_this6","loadLanguages","preloaded","newLngs","dir","createInstance","cloneInstance","_this7","mergedOptions","clone","i18next","bind","configHelper","initialized","commonTranslations","reviewImages","common","commonTranslation","cartStep1","reassortmentNotification","nicknameValidator","disbursementSimulator","paymentInfo","socialLinks","blog","productCard","recentlyViewedProducts","carousel","topBrands","cartRightSummary","topBlogPosts","serviceLinks","productDetail","reviews","questions","feedbacks","form","home","orders","returns","search","newsletter","lowerPrice","translationsForLordgun","customFees","customFeesLordgun","cookieConsent","cookieConsentLordgun","bannerRedirect","bannerRedirectLordgun","cartStep2","cartStep2Lordgun","translationsForRunkd","customFeesRunkd","cookieConsentRunkd","bannerRedirectRunkd","cartStep2Runkd","translationsForInwild","customFeesInwild","cookieConsentInwild","bannerRedirectInwild","cartStep2Inwild","getMappedTranslation","culture","reduce","acc","translation","staticResources","_ref","id","onComplete","onDeleteComplete","onSubmitDelete","sizeLimit","qq","element","getElementById","template","text","request","endpoint","messages","typeError","translateService","sizeError","emptyError","tooManyItemsError","validation","allowedExtensions","itemLimit","deleteFile","enabled","forceConfirm","confirmMessage","callbacks","identifier","imageUploader","response","$","after","fileSystemId","xhr","isError","item","setDeleteFileParams","attr","onload","helpUploader","tests","ModernizrProto","_version","_config","_q","test","cb","addTest","fn","addAsyncTest","Modernizr","classes","docElement","isSVG","nodeName","createElement","createElementNS","injectElementWithStyles","nodes","testnames","style","node","docOverflow","mod","div","body","fake","getBody","parseInt","appendChild","styleSheet","cssText","createTextNode","background","overflow","parentNode","removeChild","offsetHeight","matchMedia","mq","msMatchMedia","mql","matches","getComputedStyle","currentStyle","position","featureNames","feature","aliasIdx","result","nameIdx","featureNameSplit","featureIdx","aliases","Boolean","testRunner","global","hide","display","attach","addEventListener","attachEvent","detach","removeEventListener","detachEvent","contains","descendant","compareDocumentPosition","insertBefore","elementB","css","styles","opacity","filters","round","extend","hasClass","considerParent","re","className","addClass","removeClass","getByClass","first","candidates","querySelector","querySelectorAll","getElementsByTagName","each","getFirstByClass","children","child","firstChild","nodeType","nextSibling","setText","innerText","textContent","clearText","hasAttribute","attrName","attrVal","getAttribute","ExifRestorer","canvasToBlob","canvas","mime","quality","dataUriToBlob","toDataURL","dataUri","arrayBuffer","byteString","intArray","mimeString","BlobBuilder","blobBuilder","atob","decodeURI","ArrayBuffer","Uint8Array","character","charCodeAt","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","Blob","message","level","isObject","variable","isFunction","buffer","isItemList","maybeItemList","isNodeList","maybeNodeList","namedItem","isString","maybeString","trimStr","newStr","nextIdxToReplace","strBefore","substring","strAfter","isFile","maybeFile","File","isFileList","maybeFileList","FileList","isFileOrInput","maybeFileOrInput","isInput","maybeInput","notFile","evaluateType","normalizedType","HTMLInputElement","tagName","isBlob","maybeBlob","isXhrUploadSupported","input","multiple","FormData","createXhrInstance","upload","XMLHttpRequest","ActiveXObject","isFolderDropSupported","dataTransfer","items","webkitGetAsEntry","isFileChunkingSupported","androidStock","webkitSlice","mozSlice","sliceBlob","fileOrBlob","start","end","arrayBufferToHex","bytesAsHex","bytes","byt","byteAsHexStr","readBlobToHex","blob","startOffset","initialBlob","fileReader","FileReader","promise","Promise","success","onerror","failure","readAsArrayBuffer","second","extendNested","override","sourceFn","super_","srcPropName","srcPropVal","elt","len","getUniqueId","r","random","ie","navigator","userAgent","ie7","ie8","ie10","ie11","edge","safari","vendor","chrome","opera","firefox","windows","platform","android","ios6","ios","ios7","ios8","ios800","iosChrome","iosSafari","iosSafariWebView","preventDefault","returnValue","toElement","html","innerHTML","iterableItem","keyOrIndex","Storage","getItem","oldFunc","newArgs","obj2url","prefixDone","uristrings","add","nextObj","nextTemp","encodeURIComponent","obj2FormData","formData","arrayKeyName","obj2Inputs","setAttribute","parseJson","json","eval","getExtension","filename","extIdx","lastIndexOf","substr","getFilename","blobOrFileInput","fileName","DisposeSupport","disposers","dispose","disposer","addDisposer","disposeFunction","version","supportedFeatures","supportsUploading","supportsUploadingBlobs","supportsFileDrop","supportsAjaxFileUploading","supportsFolderDrop","supportsChunking","supportsResume","supportsUploadViaPaste","supportsUploadCors","supportsDeleteFileXdr","supportsDeleteFileCorsXhr","supportsDeleteFileCors","supportsFolderSelection","supportsImagePreviews","supportsUploadProgress","span","isCrossOriginXhrSupported","withCredentials","isXdrSupported","XDomainRequest","tempInput","supported","disabled","ex","testSupportsFileInputElement","localStorage","setItem","isLocalStorageSupported","postMessage","webkitdirectory","ajaxUploading","blobUploading","canDetermineSize","chunking","deleteFileCors","deleteFileCorsXdr","deleteFileCorsXhr","dialogElement","HTMLDialogElement","fileDrop","folderDrop","folderSelection","imagePreviews","imageValidation","itemSizeValidation","pause","progressBar","resume","scaling","tiffPreviews","unlimitedScaledImageSize","uploading","uploadCors","uploadCustomHeaders","uploadNonMultipart","uploadViaPaste","isGenericPromise","maybePromise","then","successArgs","failureArgs","successCallbacks","failureCallbacks","doneCallbacks","onSuccess","onFailure","BlobProxy","referenceBlob","onCreate","UploadButton","o","buttonId","disposeSupport","acceptFiles","focusClass","folders","hoverClass","ios8BrowserCrashWorkaround","onChange","title","createInput","BUTTON_ID_ATTR_NAME","setMultiple","right","top","fontFamily","fontSize","margin","padding","cursor","height","direction","getInput","getButtonId","isMultiple","optInput","removeAttribute","setAcceptFiles","UploadData","uploaderProxy","byUuid","byStatus","byProxyGroupId","byBatchId","getDataByIds","idOrIds","entries","addFile","spec","status","SUBMITTING","originalName","uuid","size","file","batchId","proxyGroupId","onBeforeStatusChange","onStatusChange","retrieve","optionalFilter","uuids","getDataByUuids","statusResults","statuses","statusEnum","statusResultIndexes","dataIndex","removeFileRef","record","setStatus","newStatus","oldStatus","byStatusOldStatusIndex","uuidChanged","newUuid","oldUuid","updateName","newName","updateSize","newSize","setParentId","targetId","parentId","getIdsInProxyGroup","getIdsInBatch","SUBMITTED","REJECTED","QUEUED","CANCELED","PAUSED","UPLOADING","UPLOAD_FINALIZING","UPLOAD_RETRYING","UPLOAD_SUCCESSFUL","UPLOAD_FAILED","DELETE_FAILED","DELETING","DELETED","basePublicApi","addBlobs","blobDataOrArray","params","addFiles","addInitialFiles","cannedFileList","cannedFile","_addCannedFile","_maybeHandleIos8SafariWorkaround","_storedIds","_currentBatchId","processBlob","_handleNewFile","_options","blobs","defaultName","verifiedFiles","processBlobData","blobData","processCanvas","processCanvasData","canvasData","normalizedQuality","processFileOrInput","fileOrInput","files","fileContainer","_prepareItemsForUpload","cancel","uploadData","_uploadData","getName","_handler","cancelAll","storedIdsCopy","storedFileId","clearStoredFiles","continueUpload","_uploadFile","_onSubmitDelete","doesExist","fileOrBlobId","isValid","drawThumbnail","fileId","imgOrCanvas","maxSize","fromServer","customResizeFunction","fileOrUrl","promiseToReturn","_imageGenerator","_thumbnailUrls","scale","getFile","container","generate","modifiedContainer","reason","getButton","_getButton","_buttonIdsForFileIds","getEndpoint","_endpointStore","get","uploadDataRecord","getInProgress","getParentId","uploadDataEntry","getUploads","getResumableFilesData","getSize","getNetUploads","_netUploaded","getRemainingAllowedItems","allowedItems","_currentItemLimit","_netUploadedOrQueued","getUuid","isResumable","hasResumeRecord","pauseUpload","expunge","_autoRetries","_retryTimeouts","_preventRetries","_buttons","button","_paramsStore","_pasteHandler","session","refreshOnReset","_refreshSessionData","_succeededSinceLastAllComplete","_failedSinceLastAllComplete","_totalProgress","_customResumeDataStore","retry","_manualRetry","scaleImage","specs","Scaler","setCustomHeaders","headers","_customHeadersStore","setCustomResumeData","setDeleteFileCustomHeaders","_deleteFileCustomHeadersStore","setDeleteFileEndpoint","_deleteFileEndpointStore","_deleteFileParamsStore","setEndpoint","setForm","elementOrId","_updateFormSupportAndParams","setItemLimit","newItemLimit","setName","setParams","setUuid","_onDeleteComplete","errorMessage","uploadStoredFiles","_itemError","_uploadStoredFiles","basePrivateApi","sessionData","deleteFileEndpoint","deleteFileParams","thumbnailUrl","_annotateWithButtonId","associatedInput","qqButtonId","_getButtonId","_batchError","onError","_createDeleteHandler","DeleteFileAjaxRequester","method","maxConnections","uuidParamName","uuidName","customHeaders","paramsStore","endpointStore","cors","onDelete","_onDelete","xhrOrXdr","_createPasteHandler","PasteSupport","targetElement","paste","pasteReceived","_handleCheckedCallback","onPasteReceived","_handlePasteSuccess","_createStore","initialValue","_readOnlyValues_","catchall","perIdReadOnlyValues","readOnlyValues","orig","includeReadOnlyValues","existing","values","addReadOnly","_createUploadDataTracker","_onUploadStatusChange","_maybeAllComplete","_createUploadButton","accept","buttonFocus","buttonHover","workarounds","ios8BrowserCrash","iosEmptyVideos","_isAllowedExtension","inputName","_onInputChange","fileInputTitle","_disposeSupport","_createUploadHandler","additionalOptions","lastOnProgress","preventRetryParam","preventRetryResponseProperty","onProgress","total","_onProgress","retVal","_onComplete","onCancel","cancelFinalizationEffort","_onCancel","onUploadPrep","_onUploadPrep","onUpload","_onUpload","onUploadResult","onUploadChunk","chunkData","_onUploadChunk","onUploadChunkResult","partIndex","onUploadChunkSuccess","_onUploadChunkSuccess","onResume","customResumeData","onAutoRetry","responseJSON","_onAutoRetry","onUuidChanged","setSize","_setSize","getDataByUuid","isQueued","isInProgress","getCustomResumeData","_getCustomResumeData","UploadHandlerController","_fileOrBlobRejected","_formatSize","sizeSymbols","max","toFixed","_generateExtraButtonSpecs","_extraButtonSpecs","extraButtons","extraButtonOptionEntry","extraButtonSpec","_initExtraButton","extraButtonsSpec","_defaultButtonId","buttonOrFileInputOrFile","inputs","fileInput","fileBlobOrInput","_getNotFinished","_getValidationBase","_getValidationDescriptor","fileWrapper","_getValidationDescriptors","fileWrappers","fileDescriptors","_handleCameraAccess","camera","acceptIosCamera","optionRoot","details","callbackRetVal","successParam","newFileWrapperList","actualFile","handler","_customNewFileHandler","_handleNewFileGeneric","addFileToHandler","_trackButton","fileList","extSuppliedName","extension","_handleDeleteSuccess","_handleDeleteFailed","_initFormSupportAndParams","_formSupport","FormSupport","attachedToForm","getFormInputsAsObject","autoUpload","newAutoUpload","newEndpoint","_isDeletePossible","expected","allowXdr","allowed","valid","allowedExt","extRegex","maybeNameOrNames","extensionsForMessage","placeholderMatch","names","validationBase","replacement","allowedExtension","formatFileName","minSizeLimit","placeholder","_onBeforeManualRetry","notFinished","_onAllComplete","ios8SafariUploads","alert","unsupportedBrowserIos8Safari","_maybeParseAndSendUploadError","errorReason","defaultResponseError","_maybeProcessNextItemAfterOnValidateCallback","validItem","stopOnFirstInvalidFile","validationDescriptor","onValidate","_onValidateCallbackSuccess","_onValidateCallbackFailure","successful","failed","onAllComplete","_shouldAutoRetry","retryWaitPeriod","autoAttemptDelay","_onBeforeAutoRetry","onManualRetry","clearTimeout","storedItemIndex","fileIndex","onIndividualProgress","_onSubmit","_onSubmitCallbackSuccess","_onSubmitted","onSubmitted","_storeForLater","onSuccessCallback","additionalMandatedParams","adjustedOnSuccessCallback","_deleteHandler","sendDelete","_onTotalProgress","onTotalProgress","enableAuto","_onValidateBatchCallbackFailure","_onValidateBatchCallbackSuccess","validationDescriptors","proposedNetFilesUploadedOrQueued","nextIndex","_validateFileOrBlobData","_upload","onValidateBatch","_preventLeaveInProgress","onLeave","Session","_session","addFileRecord","refresh","_sessionRequestComplete","onSessionRequestComplete","onNewSize","maxAutoAttempts","formElementOrId","onSubmit","idToUpload","stillSubmitting","validityChecker","allowEmpty","ImageValidation","validate","image","errorCode","_wrapCallbacks","safeCallback","errorMsg","exception","callbackName","callbackFunc","FineUploaderBasic","disableCancelForFormUploads","warnBeforeUnload","filenameParam","forceMultipart","omitDefaultParams","paramsInBody","requireSuccessJson","totalFileSizeName","maxHeight","maxWidth","minHeight","minWidth","maybeXhr","maybeXhrOrXdr","attemptNumber","fileOrBlobData","minSizeError","noFilesError","maxHeightImageError","maxWidthImageError","minHeightImageError","minWidthImageError","retryFailTooManyItems","concurrent","mandatory","paramNames","partByteOffset","chunkSize","totalFileSize","totalParts","partSize","jsonPayload","resetOnStatus","recordsExpireIn","resuming","customKeys","fileOrBlobName","sendCredentials","interceptSubmit","customResizer","sendOriginal","orient","defaultType","defaultQuality","failureText","includeExif","sizes","ImageGenerator","_scaler","handleNewFile","TotalProgress","entry","AjaxRequester","shouldParamsBeInQueryString","requestData","acceptHeader","validMethods","contentType","mandatedParams","allowXRequestedWithAndCacheControl","successfulResponseCodes","DELETE","PATCH","POST","PUT","GET","onSend","isXdr","getXhrOrXdr","suppliedXhr","ontimeout","onprogress","getCorsAjaxTransport","dequeue","sendRequest","xdrError","responseCode","optXhr","url","onDemandParams","additionalParams","getParams","payload","additionalQueryParams","addToPath","createUrl","getXdrLoadHandler","getXdrErrorHandler","onreadystatechange","readyState","getXhrReadyStateChangeHandler","lengthComputable","registerForUploadProgress","open","onDemandHeaders","additionalHeaders","allHeaders","setRequestHeader","containsNonSimple","header","setHeaders","stringify","initTransport","cacheBuster","withPath","appendToPath","withParams","withQueryParams","_additionalQueryParams_","withHeaders","withPayload","thePayload","withCacheBuster","qqtimestamp","Date","getTime","prepareToSend","canceled","UploadHandler","proxy","fileState","fileItem","getThirdPartyFileId","_getFileState","_setThirdPartyFileId","thirdPartyFileId","_wasCanceled","preventRetryResponse","controller","chunkingPossible","concurrentChunkingPossible","chunked","chunkIdx","_getChunkData","attemptingResume","chunkProgress","_getChunkDataForCallback","finalize","finalizeChunks","normaizedResponse","normalizeResponse","_maybeDeletePersistedChunkData","cleanup","normalizedResponse","handleFailure","clearCachedChunk","inProgressIdx","responseToReport","inProgressChunksArray","inProgress","remaining","unshift","ignoreFailure","_getXhrs","ckid","ckXhr","abort","_cancelled","moveInProgressToRemaining","connectionManager","free","hasMoreParts","nextPart","nextIdx","_getTotalChunks","reevaluateChunking","sendNext","inProgressChunks","available","requestOverrides","uploadChunkData","overrides","uploadChunk","inProgressChunkIdx","_maybePersistChunkedState","clearXhr","_open","_openChunks","_waiting","openChunkEntriesCount","openChunksCount","openChunkIndexes","dontAllowNext","nextId","allowNext","waitingIndex","connectionsIndex","getProxyOrBlob","getWaitingOrConnected","waitingOrConnected","chunks","isUsingConnection","openChunksEntry","simple","uploadFile","maybeNewUuid","_clearXhrs","getProxy","initHandler","handlerType","traditional","handlerModuleSubtype","onFinalizing","_removeExpiredChunkingRecords","isDeferredEligibleForUpload","maybeDefer","generatedBlob","updateBlob","maybeSendDeferredFiles","errorResponse","idsInGroup","uploadedThisId","idInGroup","now","originalResponse","_shouldChunkThisFile","blobToUpload","cancelRetVal","isProxied","_getLocalStorageId","isAttemptingResume","WindowReceiveMessage","callbackWrapperDetachers","receiveMessage","stopReceivingMessages","detacher","FormUploadHandler","formHandlerInstanceId","onloadCallbacks","detachLoadEvents","postMessageCallbackTimers","isCors","corsMessageReceiver","getFileIdForIframeName","iframeName","iframe","_getIframeName","expungeFile","_attachLoadEvent","responseDescriptor","onloadCallback","_parseJsonResponse","_detachLoadEvent","registerPostMessageCallback","contentDocument","_createIframe","initIframeForUpload","_initFormForUpload","targetName","innerHtmlOrMessage","XhrUploadHandler","getChunkSize","chunkFiles","resumeEnabled","xhrId","ajaxRequester","_getAjaxRequester","blobOrProxy","_initTempState","_maybePrepareForResume","cachedChunks","tempState","xhrs","ajaxRequesters","responseParser","lastChunkIdx","_getXhr","resumableFilesData","_iterateResumeRecords","notResumable","optInProgress","optRemaining","chunkingState","reverse","paused","totalChunks","newBlob","chunkId","_createXhr","optChunkIdx","_registerXhr","chunkIndex","fileSize","startBytes","endBytes","startByte","endByte","localStorageId","_getMimeType","_getPersistableData","ceil","_markNotResumable","removeItem","persistedData","lastUpdated","_registerProgressHandler","progressCalculator","totalSuccessfullyLoadedForFile","loadedForRequest","totalForRequest","estActualChunkLoaded","totalLoadedForFile","chunkLoaded","optAjaxRequester","xhrsId","expirationDays","expirationDate","setDate","getDate","requester","_method","renderImageToCanvas","img","doSquash","modifiedDimensions","iw","naturalWidth","ih","naturalHeight","width","ctx","getContext","save","resize","resizeInfo","imageHeight","imageWidth","orientation","sourceCanvas","sourceCanvasContext","targetCanvas","targetHeight","targetWidth","transformCoordinate","drawImage","qqImageRendered","renderImageToCanvasWithCustomResizer","maxPixels","origHeight","origWidth","newHeight","sqrt","newWidth","maybeCalculateDownsampledDimensions","getImageData","detectSubsampling","tmpCtx","sx","dx","d","tmpCanvas","vertSquashRatio","ratio","sy","ey","py","detectVerticalSquash","dw","dh","dy","clearRect","restore","rotate","PI","MegaPixImage","srcImage","errorCallback","Image","URL","createObjectURL","webkitURL","src","listeners","imageLoadListeners","render","opt","oldTargetSrc","imgWidth","imgHeight","optionsKey","optionsValue","renderImageToDataURL","onrender","isImg","el","isCanvas","determineMimeOfFileName","nameWithPath","pathSegments","isCrossOrigin","targetProtocol","targetHostname","targetPort","targetAnchor","href","registerThumbnailRenderedListener","registered","registerImgLoadListeners","registerCanvasDrawImageListener","drawOnCanvasOrImgFromUrl","canvasOrImg","draw","tempImg","tempImgRender","crossOrigin","drawOnImgFromUrlWithCssScaling","drawFromUrl","fileBlobOrUrl","drawPreview","Identify","megapixErrorHandler","isPreviewable","dummyExif","exif","Exif","mpImg","Orientation","failureMsg","_testing","TAG_IDS","TAG_INFO","parseLittleEndian","hex","pow","seekToApp1","offset","theOffset","thePromise","segmentLength","getApp1Offset","parser","onParseFailure","app1Offset","app1Start","littleEndian","getDirEntryCount","dirEntryCount","dirEntries","getIfd","ifdHex","getDirEntries","tagValues","tagsToFind","vals","tagValHex","tagValLength","idHex","tagsToFindIdx","getTagValues","previewable","isPreviewableSync","PREVIEWABLE_MIME_TYPES","questionableBytes","identifiable","magicBytesEntries","magicBytesArrayEntry","fileMime","isRecognizedImage","limits","sizeDetermination","validationEffort","atLeastOne","limit","hasNonZeroLimits","dimensions","failingLimit","limitName","limitValue","limitMatcher","dimensionPropName","actualValue","getFailingLimit","handleFileItems","fileItems","someItemsIgnored","isJsonResponseValid","refreshEffort","requesterOptions","SessionAjaxRequester","queryServer","responseText","includeOriginal","failedToScaleText","_getSortedSizes","getFileRecords","originalFileUuid","originalFileName","originalBlobOrBlobData","records","originalBlob","sizeRecord","outputType","_determineOutputType","requestedType","refType","_getName","_generateScaledImage","failedText","api","param","scaledIds","originalId","blobSize","scaledId","qqparentuuid","qqparentsize","scalingEffort","scalingOptions","scaler","referenceType","scaledVersionProperties","startOfExt","versionType","scaledName","scaledExt","nameAppendage","sort","b","sourceFile","imageGenerator","scaledImageDataUri","signalSuccess","_insertExifHeader","scaledImageDataUriWithExif","originalImage","reader","insertionEffort","originalImageDataUri","readAsDataURL","_dataUriToBlob","_createBlob","chr1","chr2","enc1","enc2","enc3","chr3","enc4","isNaN","KEY_STR","origFileBase64","resizedFileBase64","expectedBase64Header","rawImage","decode64","segments","slice2Segments","exifManipulation","encode64","exifArray","getExifArray","newImageArray","insertExif","seg","x","imageData","buf","separatePoint","mae","ato","array","rawImageArray","head","endPoint","perFileProgress","totalLoaded","totalSize","lastLoadedSent","lastTotalSent","callbackProxy","onNew","updateTotalProgress","newLoaded","newTotal","oldLoaded","oldTotal","retryable","none","failedId","noRetryableFiles","detachPasteHandler","clipboardData","isImage","getAsFile","startUpload","formEl","validateForm","nativeSubmit","checkValidity","_form2Obj","determineNewEndpoint","submit","maybeUploadOnSubmit","determineFormEl","ignoreValue","checked","elements","select","selected","selectValue","createForm","responseFromMessage","doc","innerHtml","contentWindow","nodeValue","getIframeContentJson","multipart","allChunksDoneRequester","AllChunksDoneAjaxRequester","createReadyStateChangedHandler","onUploadOrChunkComplete","isErrorUploadResponse","parseResponse","sendChunksCompleteRequest","complete","getChunksCompleteParams","setParamsAndGetEntityToSend","entityToSendParams","xhrOverrides","customParams","defaultParams","xhrOverrideParams","setUploadHeaders","headersOptions","headerOverrides","headerName","headerValue","extraHeaders","uploadChunkParams","toSend","addChunkingSpecificParams","promises","endpointHandler","DragAndDrop","dropZones","maybeHideDropZones","HIDE_ZONES_EVENT_NAME","HIDE_BEFORE_ENTER_ATTR","uploadDropZones","droppedFiles","traverseFileTree","parseEntryPromise","qqPath","extractDirectoryPath","fileError","dropLog","fullPath","isDirectory","getFilesInDirectory","entriesLeft","indexOfNameInFullPath","accumEntries","existingPromise","dirReader","createReader","readEntries","newEntries","setupDropzone","dropArea","dropZone","UploadDropZone","onEnter","dropActive","stopPropagation","onLeaveNotDescendants","onDrop","uploadDropZone","pendingFolderPromises","handleDataTransferPromise","processingDroppedFiles","dropDisabled","allowMultipleItems","processingDroppedFilesComplete","dropError","filesAsArray","getElement","uploadDroppedFiles","isFileDrag","dragEvent","fileDrag","types","dropZoneElements","HTMLElement","y","leavingDocumentOut","setupExtraDropzone","removeDropzone","dzs","targetEl","errorSpecifics","preventDrop","dropOutsideDisabled","dragoverShouldBeCanceled","isValidFileDrag","effectTest","dt","isSafari","effectAllowed","includes","isOrSetDropDisabled","isDisabled","dropEffect","effect","relatedTarget","elementFromPoint","clientX","clientY","hideZonesEvent","triggerUsingOldApi","createEvent","initEvent","CustomEvent","dispatchEvent","triggerHidezonesEvent","uiPublicApi","_parent","_templating","addCacheToDom","clearFiles","addExtraDropzone","_dnd","removeExtraDropzone","getItemByFileId","isHiddenForever","getFileContainer","_setupDragAndDrop","_totalFilesInBatch","_filesInBatchAddedToUi","_setupClickAndEditEventHandlers","formattedFilename","updateFilename","uploadPaused","continued","uploadContinued","getId","fileContainerOrChildEl","getFileId","getDropTarget","qqDropTarget","uiPrivateApi","_removeFileItem","removeFile","_fileButtonsClickHandler","FileButtonsClickHandler","_bindFileButtonsClickEvent","_focusinEventSupported","_isEditFilenameEnabled","_filenameClickHandler","_bindFilenameClickEvent","_filenameInputFocusInHandler","_bindFilenameInputFocusInEvent","_filenameInputFocusHandler","_bindFilenameInputFocusEvent","dragAndDrop","extraDropzones","templating","defaultDropZone","getDropZone","showDropProcessing","hideDropProcessing","errorData","onDeleteFile","onRetry","onPause","onContinue","onGetName","isEditFilenamePossible","FilenameClickHandler","FilenameInputFocusHandler","_filenameEditHandler","onGetUploadStatus","onSetName","onEditingStatusChange","isEditing","qqInput","getEditInput","qqFileContainer","hideFilename","hideEditIcon","showFilename","showEditIcon","markFilenameEditable","hideRetry","setStatusText","_classes","retrying","hidePause","FilenameInputFocusInHandler","hideSpinner","resetTotalProgress","reportDirectoryPaths","qqpath","_addToList","addHandler","updateProgress","hideCancel","hideProgress","waitingForResponse","_displayFileSize","parentRetVal","completeUpload","_markFileAsSuccessful","fail","showCancel","isRetryPossible","showRetry","_controlFailureTextDisplay","newResult","showDeleteButton","_maybeUpdateThumbnail","showSpinner","allowPause","retryNumForDisplay","maxAuto","retryNote","_showCancelLink","showAutoRetryNote","autoRetryNote","resetProgress","_onSubmitDeleteSuccess","_showDeleteConfirm","_sendDeleteRequest","deletingFailedText","hideDeleteButton","deletingStatusText","deleteRequestArgs","showConfirm","canned","prependData","prependIndex","dontDisplay","hideScaled","prependFiles","disableCancel","_handledProxyGroup","_clearList","addFileToCache","updateThumbnail","thumbnails","generatePreview","fileSizeOnSubmit","loadedSize","sizeForDisplay","_formatProgress","uploadedSize","formatProgress","mode","responseProperty","failureReason","failedUploadTextDisplay","failUpload","enableTooltip","_showTooltip","showMessage","_setupPastePrompt","namePromptMessage","defaultVal","showPrompt","placeholders","waitUntilResponse","FineUploader","listElement","editable","tooManyFilesError","unsupportedBrowser","promptForName","maxCount","notAvailablePath","waitingPath","timeBetweenThumbs","hasDialog","showDialog","confirm","prompt","Templating","templateIdOrEl","containerEl","fileContainerEl","maxThumbs","waitUntilUpdate","thumbnailNotAvailable","waitingForThumbnail","renderFailure","isEditElementsExist","isRetryElementExist","templateDom","showThumbnails","serverScale","FILE_ID_ATTR","FILE_CLASS_PREFIX","DROPZPONE_TEXT_ATTR","IN_PROGRESS_CLASS","HIDDEN_FOREVER_CLASS","fileBatch","content","createDocumentFragment","isCancelDisabled","generatedThumbnails","thumbnailQueueMonitorRunning","thumbGenerationQueue","thumbnailMaxSize","selectorClasses","alertDialog","dialogCancelButton","confirmDialog","dialogMessage","dialogOkButton","promptDialog","uploader","drop","list","progressBarContainer","totalProgressBarContainer","totalProgressBar","spinner","continueButton","deleteButton","statusText","editFilenameInput","editNameIcon","dropText","dropProcessing","dropProcessingSpinner","thumbnail","previewGeneration","cachedThumbnailNotAvailableImg","cachedWaitingForThumbnailImg","displayWaitingImg","waitingImgPlacement","maybeScalePlaceholderViaCss","show","generateNextQueuedPreview","queuedThumbRequest","update","processUpdateQueuedPreviewRequest","processNewQueuedPreviewRequest","getCancel","getTemplateEl","getContinue","getDialog","getDelete","getDropProcessing","getEditIcon","getPause","getProgress","getRetry","getSpinner","cssClass","getThumbnail","maybeSetDisplayNotAvailableImg","previewing","notAvailableImgPlacement","optFileOrBlob","relatedThumbnailId","qqThumbnailId","useCachedPreview","generateNewPreview","showWaitingImg","setProgressBarWidth","percent","bar","progressBarSelector","targetThumbnailId","cachedThumbnailId","targetThumbnail","cachedThumbnail","scriptEl","scriptHtml","fileListNode","tempTemplateEl","fileListEl","defaultButton","dropTextEl","uploaderEl","cloneNode","fileTemplate","parseAndGetTemplate","notAvailableUrl","waitingUrl","updatedImg","cacheThumbnailPlaceholders","hideTotalProgress","cantRenderEl","prependInfo","hideForever","batch","thumb","fileEl","fileNameEl","parentEl","beforeEl","prependFile","waitingImg","currentNode","getFileList","filenameEl","isFileName","icon","isEditIcon","isEditInput","isCancel","allowContinueButton","isPause","isContinueButton","isDeleteButton","isRetry","textEl","dialog","messageEl","inputEl","cancelBtn","okBtn","closeHandler","cancelClickHandler","okClickHandler","close","showModal","UiEventHandler","protectedApi","eventType","attachTo","onHandled","srcElement","getFileIdFromItem","qqFileId","getDisposeSupport","buttonHandlers","buttonType","firstLetterCapButtonType","inheritedInternalApi","handleFilenameEdit","FilenameEditHandler","handleNameUpdate","newFilenameInputEl","origExtension","origName","getOriginalExtension","focusInput","filenameSansExt","focus","registerInputBlurHandler","keyCode","which","registerInputEnterKeyHandler","validator","settings","onsubmit","submitButton","currentTarget","cancelSubmit","hidden","submitHandler","formSubmitted","appendTo","currentForm","pendingRequest","focusInvalid","errorList","is","command","argument","staticRules","existingRules","filtered","isContentEditable","closest","normalizeRule","normalizeRules","classRules","attributeRules","dataRules","required","remote","called","expr","pseudos","blank","filled","unchecked","makeArray","groups","errorClass","pendingClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","customElements","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","excludedKeys","elementValue","inArray","invalid","onclick","highlight","findByName","setDefaults","email","date","dateISO","number","digits","equalTo","maxlength","minlength","rangelength","range","min","step","autoCreateRanges","labelContainer","errorContext","containers","valueCache","delegate","focusListeners","clickListeners","invalidHandler","checkForm","errorMap","triggerHandler","showErrors","prepareForm","currentElements","check","rs","group","cleanElement","clean","checkElement","validationTargetFor","v","prepareElement","testgroup","numberOfInvalids","toHide","successList","grep","defaultShowErrors","resetForm","hideErrors","removeData","removeAttr","resetElements","objectLength","not","addWrapper","findLastActive","trigger","rulesCache","selectors","find","selector","resetInternals","toShow","$element","validity","badInput","normalizer","rulesCount","dependencyMismatch","abortRequest","parameters","methods","formatAndAdd","customDataMessage","customMessage","findDefined","defaultMessage","theregex","toToggle","wrapper","parent","showLabel","validElements","invalidElements","place","errorID","elementID","idOrName","describedBy","escapeHtml","wrap","errorPlacement","insertAfter","parents","escapeCssMeta","describer","getLength","depend","dependTypes","elementAjaxPort","startRequest","stopRequest","ajaxAbort","previousValue","old","destroy","classRuleSettings","creditcard","addClassRules","normalizeAttributeRule","depends","keepRule","parameter","transformed","addMethod","decimals","supportedTypes","decimalPlaces","num","toInt","optionDataString","previous","originalMessage","ajax","dataType","pendingRequests","ajaxPrefilter","_","ajaxSettings","__webpack_module_cache__","deferred","__webpack_require__","moduleId","cachedModule","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","definition","g","globalThis","Function","toStringTag","nmd","paths","installedChunks","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}