{"version":3,"file":"../../bower_components/aui-dist/aui/js/aui-experimental.min.js","mappings":"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EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,EAAS,KAAK,EAAS,KAAK,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,IAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,IAAI,EAAS,KAAK,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","sources":["webpack:///./node_modules/@atlassian/aui/dist/aui/js/aui-experimental-exposed.js","webpack:///./node_modules/expose-loader/dist/runtime/getGlobalThis.js","webpack:///./node_modules/@atlassian/aui/dist/aui/js/aui-experimental.js"],"sourcesContent":["var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../../../../../source-map-loader/dist/cjs.js!./aui-experimental.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../../../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nvar ___EXPOSE_LOADER_IMPORT_MODULE_LOCAL_NAME___ = ___EXPOSE_LOADER_IMPORT___.Spinner\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"window\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"window\"] = {};\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"window\"][\"Spinner\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"window\"][\"Spinner\"] = ___EXPOSE_LOADER_IMPORT_MODULE_LOCAL_NAME___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","\"use strict\";\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n if (typeof globalThis === \"object\") {\n return globalThis;\n }\n var g;\n try {\n // This works if eval is allowed (see CSP)\n // eslint-disable-next-line no-new-func\n g = this || new Function(\"return this\")();\n } catch (e) {\n // This works if the window reference is available\n if (typeof window === \"object\") {\n return window;\n }\n\n // This works if the self reference is available\n if (typeof self === \"object\") {\n return self;\n }\n\n // This works if the global reference is available\n if (typeof global !== \"undefined\") {\n return global;\n }\n }\n return g;\n}();","/*!\n * @atlassian/aui - Atlassian User Interface Framework\n * @version v5.10.1\n * @link https://docs.atlassian.com/aui/latest/\n * @license Apache-2.0\n * @author Atlassian Pty Ltd.\n */\n// src/js/aui/polyfills/placeholder.js\n(typeof window === 'undefined' ? global : window).__d43bb5bbcba9370c1cd18a8f0b57292c = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n (function () {\n if ('placeholder' in document.createElement('input')) {\n return;\n }\n \n function applyDefaultText(input) {\n var value = String(input.value).trim();\n if (!value.length) {\n input.value = input.getAttribute('placeholder');\n (0, _jquery2.default)(input).addClass('aui-placeholder-shown');\n }\n }\n \n (0, _skate2.default)('placeholder', {\n type: _skate2.default.type.ATTRIBUTE,\n events: {\n blur: applyDefaultText,\n focus: function focus(input) {\n if (input.value === input.getAttribute('placeholder')) {\n input.value = '';\n (0, _jquery2.default)(input).removeClass('aui-placeholder-shown');\n }\n }\n },\n created: applyDefaultText\n });\n })();\n \n return module.exports;\n}).call(this);\n// src/js/aui/banner.js\n(typeof window === 'undefined' ? global : window).__609f21323c567295806a2ec47cc10ec5 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _animation = __f6a37357e17b1533fdd5dde2eaedcc72;\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n var _template = __3773bbd056232d2fe3825056a334a52f;\n \n var _template2 = _interopRequireDefault(_template);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var ID_BANNER_CONTAINER = 'header';\n \n function banner(options) {\n var $banner = renderBannerElement(options);\n \n pruneBannerContainer();\n insertBanner($banner);\n \n return $banner[0];\n }\n \n function renderBannerElement(options) {\n var html = '<div class=\"aui-banner aui-banner-{type}\" role=\"banner\">' + '{body}' + '</div>';\n \n var $banner = (0, _jquery2.default)((0, _template2.default)(html).fill({\n 'type': 'error',\n 'body:html': options.body || ''\n }).toString());\n \n return $banner;\n }\n \n function pruneBannerContainer() {\n var $container = findContainer();\n var $allBanners = $container.find('.aui-banner');\n \n $allBanners.get().forEach(function (banner) {\n var isBannerAriaHidden = banner.getAttribute('aria-hidden') === 'true';\n if (isBannerAriaHidden) {\n (0, _jquery2.default)(banner).remove();\n }\n });\n }\n \n function findContainer() {\n return (0, _jquery2.default)('#' + ID_BANNER_CONTAINER);\n }\n \n function insertBanner($banner) {\n var $bannerContainer = findContainer();\n if (!$bannerContainer.length) {\n throw new Error('You must implement the application header');\n }\n \n $banner.prependTo($bannerContainer);\n (0, _animation.recomputeStyle)($banner);\n $banner.attr('aria-hidden', 'false');\n }\n \n (0, _amdify2.default)('aui/banner', banner);\n (0, _globalize2.default)('banner', banner);\n exports.default = banner;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/button.js\n(typeof window === 'undefined' ? global : window).__1adf9c254cbd3d35b8e8f9ab44be8819 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _log = __16a4a3246fcb7206cb3ce72a302f68ce;\n \n var logger = _interopRequireWildcard(_log);\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n function _isBusy(button) {\n return button.hasAttribute('aria-busy') && button.getAttribute('aria-busy') === 'true';\n }\n \n function isInputNode(button) {\n return button.nodeName === 'INPUT';\n }\n \n (0, _skate2.default)('aui-button', {\n type: _skate2.default.type.CLASSNAME,\n prototype: {\n /**\n * Adds a spinner to the button and hides the text\n *\n * @returns {HTMLElement}\n */\n busy: function busy() {\n if (isInputNode(this) || _isBusy(this)) {\n logger.warn('It is not valid to call busy() on an input button.');\n return this;\n }\n \n (0, _jquery2.default)(this).spin();\n this.setAttribute('aria-busy', true);\n this.setAttribute('busy', '');\n \n return this;\n },\n \n /**\n * Removes the spinner and shows the tick on the button\n *\n * @returns {HTMLElement}\n */\n idle: function idle() {\n if (isInputNode(this) || !_isBusy(this)) {\n logger.warn('It is not valid to call idle() on an input button.');\n return this;\n }\n \n (0, _jquery2.default)(this).spinStop();\n this.removeAttribute('aria-busy');\n this.removeAttribute('busy');\n \n return this;\n },\n \n /**\n * Removes the spinner and shows the tick on the button\n *\n * @returns {Boolean}\n */\n isBusy: function isBusy() {\n if (isInputNode(this)) {\n logger.warn('It is not valid to call isBusy() on an input button.');\n return false;\n }\n \n return _isBusy(this);\n }\n }\n });\n \n (0, _amdify2.default)('aui/button');\n \n return module.exports;\n}).call(this);\n// src/js-vendor/jquery/jquery.tipsy.js\n(typeof window === 'undefined' ? global : window).__6492faf4ee244aaf97c0784c457d08ae = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n // tipsy, facebook style tooltips for jquery\n // version 1.0.0a\n // (c) 2008-2010 jason frame [jason@onehackoranother.com]\n // released under the MIT license\n //\n // Modified by Atlassian\n // https://github.com/atlassian/tipsy/tree/d1d360c881dc58bfebbed449739189b35895a5be\n \n (function($) {\n \n function maybeCall(thing, ctx) {\n return (typeof thing == 'function') ? (thing.call(ctx)) : thing;\n };\n \n function isElementInDOM(ele) {\n while (ele = ele.parentNode) {\n if (ele == document) return true;\n }\n return false;\n };\n \n var tipsyIDcounter = 0;\n function tipsyID() {\n var tipsyID = tipsyIDcounter++;\n return \"tipsyuid\" + tipsyID;\n };\n \n function Tipsy(element, options) {\n this.$element = $(element);\n this.options = options;\n this.enabled = true;\n this.fixTitle();\n };\n \n Tipsy.prototype = {\n show: function() {\n // if element is not in the DOM then don't show the Tipsy and return early\n if (!isElementInDOM(this.$element[0])) {\n return;\n }\n \n var title = this.getTitle();\n if (title && this.enabled) {\n var $tip = this.tip();\n \n $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);\n $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity\n $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);\n \n \n var that = this;\n function tipOver() {\n that.hoverTooltip = true;\n }\n function tipOut() {\n if (that.hoverState == 'in') return; // If field is still focused.\n that.hoverTooltip = false;\n if (that.options.trigger != 'manual') {\n var eventOut = that.options.trigger == 'hover' ? 'mouseleave.tipsy' : 'blur.tipsy';\n that.$element.trigger(eventOut);\n }\n }\n \n if (this.options.hoverable) {\n $tip.hover(tipOver, tipOut);\n }\n \n if (this.options.className) {\n $tip.addClass(maybeCall(this.options.className, this.$element[0]));\n }\n \n var pos = $.extend({}, this.$element.offset(), {\n width: this.$element[0].getBoundingClientRect().width,\n height: this.$element[0].getBoundingClientRect().height\n });\n \n var actualWidth = $tip[0].offsetWidth,\n actualHeight = $tip[0].offsetHeight,\n gravity = maybeCall(this.options.gravity, this.$element[0]);\n \n var tp;\n switch (gravity.charAt(0)) {\n case 'n':\n tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};\n break;\n case 's':\n tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};\n break;\n case 'e':\n tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset};\n break;\n case 'w':\n tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset};\n break;\n }\n \n if (gravity.length == 2) {\n if (gravity.charAt(1) == 'w') {\n tp.left = pos.left + pos.width / 2 - 15;\n } else {\n tp.left = pos.left + pos.width / 2 - actualWidth + 15;\n }\n }\n \n $tip.css(tp).addClass('tipsy-' + gravity);\n $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);\n \n if (this.options.fade) {\n $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});\n } else {\n $tip.css({visibility: 'visible', opacity: this.options.opacity});\n }\n \n if (this.options.aria) {\n var $tipID = tipsyID();\n $tip.attr(\"id\", $tipID);\n this.$element.attr(\"aria-describedby\", $tipID);\n }\n }\n },\n \n destroy: function(){\n this.$element.removeData('tipsy');\n \n this.unbindHandlers();\n this.hide();\n },\n \n unbindHandlers: function() {\n if(this.options.live){\n $(this.$element.context).off('.tipsy');\n } else {\n this.$element.unbind('.tipsy');\n }\n },\n \n hide: function() {\n if (this.options.fade) {\n this.tip().stop().fadeOut(function() { $(this).remove(); });\n } else {\n this.tip().remove();\n }\n if (this.options.aria) {\n this.$element.removeAttr(\"aria-describedby\");\n }\n },\n \n fixTitle: function() {\n var $e = this.$element;\n if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {\n $e.attr('original-title', $e.attr('title') || '').removeAttr('title');\n }\n },\n \n getTitle: function() {\n var title, $e = this.$element, o = this.options;\n this.fixTitle();\n var title, o = this.options;\n if (typeof o.title == 'string') {\n title = $e.attr(o.title == 'title' ? 'original-title' : o.title);\n } else if (typeof o.title == 'function') {\n title = o.title.call($e[0]);\n }\n title = ('' + title).replace(/(^\\s*|\\s*$)/, \"\");\n return title || o.fallback;\n },\n \n tip: function() {\n if (!this.$tip) {\n this.$tip = $('<div class=\"tipsy\"></div>').html('<div class=\"tipsy-arrow\"></div><div class=\"tipsy-inner\"></div>').attr(\"role\",\"tooltip\");\n this.$tip.data('tipsy-pointee', this.$element[0]);\n }\n return this.$tip;\n },\n \n validate: function() {\n if (!this.$element[0].parentNode) {\n this.hide();\n this.$element = null;\n this.options = null;\n }\n },\n \n enable: function() { this.enabled = true; },\n disable: function() { this.enabled = false; },\n toggleEnabled: function() { this.enabled = !this.enabled; }\n };\n \n $.fn.tipsy = function(options) {\n \n if (options === true) {\n return this.data('tipsy');\n } else if (typeof options == 'string') {\n var tipsy = this.data('tipsy');\n if (tipsy) tipsy[options]();\n return this;\n }\n \n options = $.extend({}, $.fn.tipsy.defaults, options);\n if (options.hoverable) {\n options.delayOut = options.delayOut || 20;\n }\n \n function get(ele) {\n var tipsy = $.data(ele, 'tipsy');\n if (!tipsy) {\n tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));\n $.data(ele, 'tipsy', tipsy);\n }\n return tipsy;\n }\n \n function enter() {\n var tipsy = get(this);\n tipsy.hoverState = 'in';\n if (options.delayIn == 0) {\n tipsy.show();\n } else {\n tipsy.fixTitle();\n setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);\n }\n };\n \n function leave() {\n var tipsy = get(this);\n tipsy.hoverState = 'out';\n if (options.delayOut == 0) {\n tipsy.hide();\n } else {\n setTimeout(function() { if (tipsy.hoverState == 'out' && !tipsy.hoverTooltip) tipsy.hide(); }, options.delayOut);\n }\n };\n \n if (!options.live) this.each(function() { get(this); });\n \n if (options.trigger != 'manual') {\n var eventIn = options.trigger == 'hover' ? 'mouseenter.tipsy focus.tipsy' : 'focus.tipsy',\n eventOut = options.trigger == 'hover' ? 'mouseleave.tipsy blur.tipsy' : 'blur.tipsy';\n if (options.live) {\n $(this.context).on(eventIn, this.selector, enter).on(eventOut, this.selector, leave);\n } else {\n this.bind(eventIn, enter).bind(eventOut, leave);\n }\n }\n \n return this;\n \n };\n \n $.fn.tipsy.defaults = {\n aria: false,\n className: null,\n delayIn: 0,\n delayOut: 0,\n fade: false,\n fallback: '',\n gravity: 'n',\n html: false,\n live: false,\n hoverable: false,\n offset: 0,\n opacity: 0.8,\n title: 'title',\n trigger: 'hover'\n };\n \n $.fn.tipsy.revalidate = function() {\n $('.tipsy').each(function() {\n var pointee = $.data(this, 'tipsy-pointee');\n if (!pointee || !isElementInDOM(pointee)) {\n $(this).remove();\n }\n });\n };\n \n // Overwrite this method to provide options on a per-element basis.\n // For example, you could store the gravity in a 'tipsy-gravity' attribute:\n // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });\n // (remember - do not modify 'options' in place!)\n $.fn.tipsy.elementOptions = function(ele, options) {\n return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;\n };\n \n $.fn.tipsy.autoNS = function() {\n return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';\n };\n \n $.fn.tipsy.autoWE = function() {\n return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';\n };\n \n /**\n * yields a closure of the supplied parameters, producing a function that takes\n * no arguments and is suitable for use as an autogravity function like so:\n *\n * @param margin (int) - distance from the viewable region edge that an\n * element should be before setting its tooltip's gravity to be away\n * from that edge.\n * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer\n * if there are no viewable region edges effecting the tooltip's\n * gravity. It will try to vary from this minimally, for example,\n * if 'sw' is preferred and an element is near the right viewable\n * region edge, but not the top edge, it will set the gravity for\n * that element's tooltip to be 'se', preserving the southern\n * component.\n */\n $.fn.tipsy.autoBounds = function(margin, prefer) {\n return function() {\n var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},\n boundTop = $(document).scrollTop() + margin,\n boundLeft = $(document).scrollLeft() + margin,\n $this = $(this);\n \n if ($this.offset().top < boundTop) dir.ns = 'n';\n if ($this.offset().left < boundLeft) dir.ew = 'w';\n if ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e';\n if ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's';\n \n return dir.ns + (dir.ew ? dir.ew : '');\n }\n };\n \n })(jQuery);\n \n \n return module.exports;\n}).call(this);\n// src/js/aui/tooltip.js\n(typeof window === 'undefined' ? global : window).__e689aa744aa5d955e83ea261c152658e = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __6492faf4ee244aaf97c0784c457d08ae;\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n function handleStringOption($self, options, stringOption) {\n // Pass string values straight to tipsy\n $self.tipsy(stringOption);\n \n if (stringOption === 'destroy') {\n if (options.live) {\n (0, _jquery2.default)($self.context).off('.tipsy', $self.selector);\n } else {\n $self.unbind('.tipsy');\n }\n }\n \n return $self;\n }\n \n function bindTooltip($self, options) {\n $self.tipsy(options);\n \n var hideOnClick = options && options.hideOnClick && (options.trigger === 'hover' || !options.trigger && $self.tipsy.defaults.trigger === 'hover');\n if (hideOnClick) {\n var onClick = function onClick() {\n (0, _jquery2.default)(this).tipsy('hide');\n };\n if (options.live) {\n (0, _jquery2.default)($self.context).on('click.tipsy', $self.selector, onClick);\n } else {\n $self.bind('click.tipsy', onClick);\n }\n }\n return $self;\n }\n \n _jquery2.default.fn.tooltip = function (options) {\n var allOptions = _jquery2.default.extend({}, _jquery2.default.fn.tooltip.defaults, options);\n \n // Handle live option\n if (allOptions.live) {\n if (typeof options === 'string') {\n handleStringOption(this, allOptions, options);\n } else {\n bindTooltip(this, allOptions);\n }\n return this;\n }\n \n // If not live, bind each object in the collection\n return this.each(function () {\n var $this = (0, _jquery2.default)(this);\n if (typeof options === 'string') {\n handleStringOption($this, allOptions, options);\n } else {\n bindTooltip($this, allOptions);\n }\n return $this;\n });\n };\n \n _jquery2.default.fn.tooltip.defaults = {\n opacity: 1.0,\n offset: 1,\n delayIn: 500,\n hoverable: true,\n hideOnClick: true,\n aria: true\n };\n \n return module.exports;\n}).call(this);\n// src/js/aui/checkbox-multiselect.js\n(typeof window === 'undefined' ? global : window).__4975dba2b21736f125d2d31f5fb32772 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __fbf8552025aec9d643c7c2e8651ac871;\n \n __e689aa744aa5d955e83ea261c152658e;\n \n __2a8f02ddf948a2241e4b1ac8618d2015;\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var templates = {\n dropdown: function dropdown(items) {\n function createSection() {\n return (0, _jquery2.default)('<div class=\"aui-dropdown2-section\">');\n }\n \n // clear items section\n var $clearItemsSection = createSection();\n \n (0, _jquery2.default)('<button />').attr({\n type: 'button',\n 'data-aui-checkbox-multiselect-clear': '',\n class: 'aui-button aui-button-link'\n }).text(AJS.I18n.getText('aui.checkboxmultiselect.clear.selected')).appendTo($clearItemsSection);\n \n // list of items\n var $section = createSection();\n var $itemList = (0, _jquery2.default)('<ul />').appendTo($section);\n \n _jquery2.default.each(items, function (idx, item) {\n var $li = (0, _jquery2.default)('<li />').attr({\n class: item.styleClass || ''\n }).appendTo($itemList);\n \n var $a = (0, _jquery2.default)('<a />').text(item.label).attr('data-value', item.value).addClass('aui-dropdown2-checkbox aui-dropdown2-interactive').appendTo($li);\n \n if (item.icon) {\n (0, _jquery2.default)('<span />').addClass('aui-icon').css('backgroundImage', 'url(' + item.icon + ')\")').appendTo($a);\n }\n \n if (item.selected) {\n $a.addClass('aui-dropdown2-checked');\n }\n });\n \n return (0, _jquery2.default)('<div />').append($clearItemsSection).append($section).html();\n },\n \n furniture: function furniture(name, optionsHtml) {\n var dropdownId = name + '-dropdown';\n \n var $select = (0, _jquery2.default)('<select />').attr({\n name: name,\n multiple: 'multiple'\n }).html(optionsHtml);\n \n var $dropdown = (0, _jquery2.default)('<div>').attr({\n id: dropdownId,\n class: 'aui-checkbox-multiselect-dropdown aui-dropdown2 aui-style-default'\n });\n \n var $button = (0, _jquery2.default)('<button />').attr({\n class: 'aui-checkbox-multiselect-btn aui-button aui-dropdown2-trigger',\n type: 'button',\n 'aria-owns': dropdownId,\n 'aria-haspopup': true\n });\n \n return (0, _jquery2.default)('<div />').append($select).append($button).append($dropdown).html();\n }\n };\n \n /**\n * Handles when user clicks an item in the dropdown list. Either selects or unselects the corresponding\n * option in the <select>.\n * @private\n */\n function handleDropdownSelection(e) {\n var $a = (0, _jquery2.default)(e.target);\n var value = $a.attr('data-value');\n updateOption(this, value, $a.hasClass('aui-dropdown2-checked'));\n }\n \n /**\n * Selects or unselects the <option> corresponding the given value.\n * @private\n * @param component - Checkbox MultiSelect web component\n * @param value - value of option to update\n * @param {Boolean} selected - select or unselect it.\n */\n function updateOption(component, value, selected) {\n var $toUpdate = component.$select.find('option').filter(function () {\n var $this = (0, _jquery2.default)(this);\n return $this.attr('value') === value && $this.prop('selected') !== selected;\n });\n if ($toUpdate.length) {\n $toUpdate.prop('selected', selected);\n component.$select.trigger('change');\n }\n }\n \n /**\n * Enables 'clear all' button if there are any selected <option>s, otherwise disables it.\n * @private\n */\n function updateClearAll(component) {\n component.$dropdown.find('[data-aui-checkbox-multiselect-clear]').prop('disabled', function () {\n return getSelectedDescriptors(component).length < 1;\n });\n }\n \n /**\n * Gets button title used for tipsy. Is blank when dropdown is open so we don't get tipsy hanging over options.\n * @private\n * @param component\n * @returns {string}\n */\n function getButtonTitle(component) {\n return component.$dropdown.is('[aria-hidden=false]') ? '' : getSelectedLabels(component).join(', ');\n }\n \n /**\n * Converts a jQuery collection of <option> elements into an object that describes them.\n * @param {jQuery} $options\n * @returns {Array<Object>}\n * @private\n */\n function mapOptionDescriptors($options) {\n return $options.map(function () {\n var $option = (0, _jquery2.default)(this);\n return {\n value: $option.val(),\n label: $option.text(),\n icon: $option.data('icon'),\n styleClass: $option.data('styleClass'),\n title: $option.attr('title'),\n disabled: $option.attr('disabled'),\n selected: $option.attr('selected')\n };\n });\n }\n \n /**\n * Gets label for when nothing is selected\n * @returns {string}\n * @private\n */\n function getImplicitAllLabel(component) {\n return (0, _jquery2.default)(component).data('allLabel') || 'All';\n }\n \n /**\n * Renders dropdown with list of items representing the selected or unselect state of the <option>s in <select>\n * @private\n */\n function renderDropdown(component) {\n component.$dropdown.html(templates.dropdown(getDescriptors(component)));\n updateClearAll(component);\n }\n \n /**\n * Renders button with the selected <option>'s innerText in a comma seperated list. If nothing is selected 'All'\n * is displayed.\n * @private\n */\n function renderButton(component) {\n var selectedLabels = getSelectedLabels(component);\n var label = isImplicitAll(component) ? getImplicitAllLabel(component) : selectedLabels.join(', ');\n component.$btn.text(label);\n }\n \n /**\n * Gets descriptor for selected options, the descriptor is an object that contains meta information about\n * the option, such as value, label, icon etc.\n * @private\n * @returns Array<Object>\n */\n function getDescriptors(component) {\n return mapOptionDescriptors(component.getOptions());\n }\n \n /**\n * Gets descriptor for selected options, the descriptor is an object that contains meta information about\n * the option, such as value, label, icon etc.\n * @private\n * @returns Array<Object>\n */\n function getSelectedDescriptors(component) {\n return mapOptionDescriptors(component.getSelectedOptions());\n }\n \n /**\n * Gets the innerText of the selected options\n * @private\n * @returns Array<String>\n */\n function getSelectedLabels(component) {\n return _jquery2.default.map(getSelectedDescriptors(component), function (descriptor) {\n return descriptor.label;\n });\n }\n \n /**\n * If nothing is selected, we take this to mean that everything is selected.\n * @returns Boolean\n */\n function isImplicitAll(component) {\n return getSelectedDescriptors(component).length === 0;\n }\n \n var checkboxMultiselect = (0, _skate2.default)('aui-checkbox-multiselect', {\n attached: function attached(component) {\n // This used to be template logic, however, it breaks tests if we\n // keep it there after starting to use native custom elements. This\n // should be refactored.\n //\n // Ideally we should be templating the element within the \"template\"\n // hook which will ensure it's templated prior to calling the\n // \"attached\" callback.\n var name = component.getAttribute('name') || AJS.id('aui-checkbox-multiselect-');\n component.innerHTML = templates.furniture(name, component.innerHTML);\n \n component.$select = (0, _jquery2.default)('select', component).change(function () {\n renderButton(component);\n updateClearAll(component);\n });\n \n component.$dropdown = (0, _jquery2.default)('.aui-checkbox-multiselect-dropdown', component).on('aui-dropdown2-item-check', handleDropdownSelection.bind(component)).on('aui-dropdown2-item-uncheck', handleDropdownSelection.bind(component)).on('click', 'button[data-aui-checkbox-multiselect-clear]', component.deselectAllOptions.bind(component));\n \n component.$btn = (0, _jquery2.default)('.aui-checkbox-multiselect-btn', component).tooltip({\n title: function title() {\n return getButtonTitle(component);\n }\n });\n \n renderButton(component);\n renderDropdown(component);\n },\n prototype: {\n \n /**\n * Gets all options regardless of selected or unselected\n * @returns {jQuery}\n */\n getOptions: function getOptions() {\n return this.$select.find('option');\n },\n \n /**\n * Gets all selected options\n * @returns {jQuery}\n */\n getSelectedOptions: function getSelectedOptions() {\n return this.$select.find('option:selected');\n },\n \n /**\n * Sets <option> elements matching given value to selected\n */\n selectOption: function selectOption(value) {\n updateOption(this, value, true);\n },\n \n /**\n * Sets <option> elements matching given value to unselected\n */\n unselectOption: function unselectOption(value) {\n updateOption(this, value, false);\n },\n \n /**\n * Gets value of <select>\n * @returns Array\n */\n getValue: function getValue() {\n return this.$select.val();\n },\n \n /**\n * Unchecks all items in the dropdown and in the <select>\n */\n deselectAllOptions: function deselectAllOptions() {\n this.$select.val([]).trigger('change');\n this.$dropdown.find('.aui-dropdown2-checked,.checked').removeClass('aui-dropdown2-checked checked');\n },\n \n /**\n * Adds an option to the <select>\n * @param descriptor\n */\n addOption: function addOption(descriptor) {\n (0, _jquery2.default)('<option />').attr({\n value: descriptor.value,\n icon: descriptor.icon,\n disabled: descriptor.disabled,\n selected: descriptor.selected,\n title: descriptor.title\n }).text(descriptor.label).appendTo(this.$select);\n renderButton(this);\n renderDropdown(this);\n },\n \n /**\n * Removes options matching value from <select>\n * @param value\n */\n removeOption: function removeOption(value) {\n this.$select.find(\"[value='\" + value + \"']\").remove();\n renderButton(this);\n renderDropdown(this);\n }\n }\n });\n \n (0, _amdify2.default)('aui/checkbox-multiselect');\n exports.default = checkboxMultiselect;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/dialog2.js\n(typeof window === 'undefined' ? global : window).__38870a60a3b38ce21890fdbd6f0a0c3f = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n var _layer = __e0d3e833c519cf116c3cdd59e52f030e;\n \n var _layer2 = _interopRequireDefault(_layer);\n \n var _widget = __3c371c7383bcae3d89fbc3cf8cbdc2ff;\n \n var _widget2 = _interopRequireDefault(_widget);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var defaults = {\n 'aui-focus': 'false', // do not focus by default as it's overridden below\n 'aui-blanketed': 'true'\n };\n \n function applyDefaults($el) {\n _jquery2.default.each(defaults, function (key, value) {\n var dataKey = 'data-' + key;\n if (!$el[0].hasAttribute(dataKey)) {\n $el.attr(dataKey, value);\n }\n });\n }\n \n function Dialog2(selector) {\n if (selector) {\n this.$el = (0, _jquery2.default)(selector);\n } else {\n this.$el = (0, _jquery2.default)(aui.dialog.dialog2({}));\n }\n applyDefaults(this.$el);\n }\n \n Dialog2.prototype.on = function (event, fn) {\n (0, _layer2.default)(this.$el).on(event, fn);\n return this;\n };\n \n Dialog2.prototype.off = function (event, fn) {\n (0, _layer2.default)(this.$el).off(event, fn);\n return this;\n };\n \n Dialog2.prototype.show = function () {\n (0, _layer2.default)(this.$el).show();\n return this;\n };\n \n Dialog2.prototype.hide = function () {\n (0, _layer2.default)(this.$el).hide();\n return this;\n };\n \n Dialog2.prototype.remove = function () {\n (0, _layer2.default)(this.$el).remove();\n return this;\n };\n \n Dialog2.prototype.isVisible = function () {\n return (0, _layer2.default)(this.$el).isVisible();\n };\n \n var dialog2Widget = (0, _widget2.default)('dialog2', Dialog2);\n \n dialog2Widget.on = function (eventName, fn) {\n _layer2.default.on(eventName, '.aui-dialog2', fn);\n return this;\n };\n \n dialog2Widget.off = function (eventName, fn) {\n _layer2.default.off(eventName, '.aui-dialog2', fn);\n return this;\n };\n \n /* Live events */\n \n (0, _jquery2.default)(document).on('click', '.aui-dialog2-header-close', function (e) {\n e.preventDefault();\n dialog2Widget((0, _jquery2.default)(this).closest('.aui-dialog2')).hide();\n });\n \n dialog2Widget.on('show', function (e, $el) {\n var selectors = ['.aui-dialog2-content', '.aui-dialog2-footer', '.aui-dialog2-header'];\n var $selected;\n selectors.some(function (selector) {\n $selected = $el.find(selector + ' :aui-tabbable');\n return $selected.length;\n });\n $selected && $selected.first().focus();\n });\n \n dialog2Widget.on('hide', function (e, $el) {\n var layer = (0, _layer2.default)($el);\n \n if ($el.data('aui-remove-on-hide')) {\n layer.remove();\n }\n });\n \n (0, _amdify2.default)('aui/dialog2', dialog2Widget);\n (0, _globalize2.default)('dialog2', dialog2Widget);\n exports.default = dialog2Widget;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/expander.js\n(typeof window === 'undefined' ? global : window).__c30b0586d036f99efe41f2c93d89100e = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var $document = (0, _jquery2.default)(document),\n \n \n //convenience function because this needs to be run for all the events.\n getExpanderProperties = function getExpanderProperties(event) {\n var properties = {};\n \n properties.$trigger = (0, _jquery2.default)(event.currentTarget);\n properties.$content = $document.find('#' + properties.$trigger.attr('aria-controls'));\n properties.triggerIsParent = properties.$content.parent().filter(properties.$trigger).length !== 0;\n properties.$shortContent = properties.triggerIsParent ? properties.$trigger.find('.aui-expander-short-content') : null;\n properties.height = properties.$content.css('min-height');\n properties.isCollapsible = properties.$trigger.data('collapsible') !== false;\n properties.replaceText = properties.$trigger.attr('data-replace-text'); //can't use .data here because it doesn't update after the first call\n properties.replaceSelector = properties.$trigger.data('replace-selector');\n \n return properties;\n },\n replaceText = function replaceText(properties) {\n if (properties.replaceText) {\n var $replaceElement = properties.replaceSelector ? properties.$trigger.find(properties.replaceSelector) : properties.$trigger;\n \n properties.$trigger.attr('data-replace-text', $replaceElement.text());\n $replaceElement.text(properties.replaceText);\n }\n };\n //events that the expander listens to\n var EXPANDER_EVENTS = {\n 'aui-expander-invoke': function auiExpanderInvoke(event) {\n var $trigger = (0, _jquery2.default)(event.currentTarget);\n var $content = $document.find('#' + $trigger.attr('aria-controls'));\n var isCollapsible = $trigger.data('collapsible') !== false;\n \n //determine if content should be expanded or collapsed\n if ($content.attr('aria-expanded') === 'true' && isCollapsible) {\n $trigger.trigger('aui-expander-collapse');\n } else {\n $trigger.trigger('aui-expander-expand');\n }\n },\n \n 'aui-expander-expand': function auiExpanderExpand(event) {\n var properties = getExpanderProperties(event);\n \n // If the expander is already expanded, do nothing.\n if (properties.$content.attr('aria-expanded') === 'true') {\n return;\n }\n \n properties.$content.attr('aria-expanded', 'true');\n properties.$trigger.attr('aria-expanded', 'true');\n \n if (properties.$content.outerHeight() > 0) {\n properties.$content.attr('aria-hidden', 'false');\n }\n \n //handle replace text\n replaceText(properties);\n \n //if the trigger is the parent also hide the short-content (default)\n if (properties.triggerIsParent) {\n properties.$shortContent.hide();\n }\n properties.$trigger.trigger('aui-expander-expanded');\n },\n \n 'aui-expander-collapse': function auiExpanderCollapse(event) {\n var properties = getExpanderProperties(event);\n \n // If the expander is already collapsed, do nothing.\n if (properties.$content.attr('aria-expanded') !== 'true') {\n return;\n }\n \n //handle replace text\n replaceText(properties);\n \n //collapse the expander\n properties.$content.attr('aria-expanded', 'false');\n properties.$trigger.attr('aria-expanded', 'false');\n \n //if the trigger is the parent also hide the short-content (default)\n if (properties.triggerIsParent) {\n properties.$shortContent.show();\n }\n \n //handle the height option\n if (properties.$content.outerHeight() === 0) {\n properties.$content.attr('aria-hidden', 'true');\n }\n \n properties.$trigger.trigger('aui-expander-collapsed');\n },\n \n 'click.aui-expander': function clickAuiExpander(event) {\n var $target = (0, _jquery2.default)(event.currentTarget);\n $target.trigger('aui-expander-invoke', event.currentTarget);\n }\n };\n \n //delegate events to the triggers on the page\n $document.on(EXPANDER_EVENTS, '.aui-expander-trigger');\n \n return module.exports;\n}).call(this);\n// src/js/aui/flag.js\n(typeof window === 'undefined' ? global : window).__06f55795e224cd10740a8237fd449032 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _animation = __f6a37357e17b1533fdd5dde2eaedcc72;\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n var _keyCode = __0feafabcd51357b770acdddb85e8e6f3;\n \n var _keyCode2 = _interopRequireDefault(_keyCode);\n \n var _template = __3773bbd056232d2fe3825056a334a52f;\n \n var _template2 = _interopRequireDefault(_template);\n \n var _customEvent = __751cf3000e6bd63337afe446f5edef9b;\n \n var _customEvent2 = _interopRequireDefault(_customEvent);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var AUTO_CLOSE_TIME = 5000;\n var ID_FLAG_CONTAINER = 'aui-flag-container';\n var defaultOptions = {\n body: '',\n close: 'manual',\n title: '',\n type: 'info'\n };\n \n function flag(options) {\n options = _jquery2.default.extend({}, defaultOptions, options);\n \n var $flag = renderFlagElement(options);\n extendFlagElement($flag);\n \n if (options.close === 'auto') {\n makeCloseable($flag);\n makeAutoClosable($flag);\n } else if (options.close === 'manual') {\n makeCloseable($flag);\n }\n \n pruneFlagContainer();\n \n return insertFlag($flag);\n }\n \n function extendFlagElement($flag) {\n var flag = $flag[0];\n \n flag.close = function () {\n closeFlag($flag);\n };\n }\n \n function renderFlagElement(options) {\n var html = '<div class=\"aui-flag\">' + '<div class=\"aui-message aui-message-{type} {type} {closeable} shadowed\">' + '<p class=\"title\">' + '<strong>{title}</strong>' + '</p>' + '{body}<!-- .aui-message -->' + '</div>' + '</div>';\n var rendered = (0, _template2.default)(html).fill({\n 'body:html': options.body || '',\n closeable: options.close === 'never' ? '' : 'closeable',\n title: options.title || '',\n type: options.type\n }).toString();\n \n return (0, _jquery2.default)(rendered);\n }\n \n function makeCloseable($flag) {\n var $icon = (0, _jquery2.default)('<span class=\"aui-icon icon-close\" role=\"button\" tabindex=\"0\"></span>');\n \n $icon.click(function () {\n closeFlag($flag);\n });\n \n $icon.keypress(function (e) {\n if (e.which === _keyCode2.default.ENTER || e.which === _keyCode2.default.SPACE) {\n closeFlag($flag);\n e.preventDefault();\n }\n });\n \n return $flag.find('.aui-message').append($icon)[0];\n }\n \n function makeAutoClosable($flag) {\n $flag.find('.aui-message').addClass('aui-will-close');\n setTimeout(function () {\n $flag[0].close();\n }, AUTO_CLOSE_TIME);\n }\n \n function closeFlag($flagToClose) {\n var flag = $flagToClose.get(0);\n \n flag.setAttribute('aria-hidden', 'true');\n flag.dispatchEvent(new _customEvent2.default('aui-flag-close', { bubbles: true }));\n \n return flag;\n }\n \n function pruneFlagContainer() {\n var $container = findContainer();\n var $allFlags = $container.find('.aui-flag');\n \n $allFlags.get().forEach(function (flag) {\n var isFlagAriaHidden = flag.getAttribute('aria-hidden') === 'true';\n \n if (isFlagAriaHidden) {\n (0, _jquery2.default)(flag).remove();\n }\n });\n }\n \n function findContainer() {\n return (0, _jquery2.default)('#' + ID_FLAG_CONTAINER);\n }\n \n function insertFlag($flag) {\n var $flagContainer = findContainer();\n \n if (!$flagContainer.length) {\n $flagContainer = (0, _jquery2.default)('<div id=\"' + ID_FLAG_CONTAINER + '\"></div>');\n (0, _jquery2.default)('body').prepend($flagContainer);\n }\n \n $flag.appendTo($flagContainer);\n (0, _animation.recomputeStyle)($flag);\n \n return $flag.attr('aria-hidden', 'false')[0];\n }\n \n (0, _amdify2.default)('aui/flag', flag);\n (0, _globalize2.default)('flag', flag);\n exports.default = flag;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/form-notification.js\n(typeof window === 'undefined' ? global : window).__7a040c461c30a0396a3f29085e136d08 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __6492faf4ee244aaf97c0784c457d08ae;\n \n var _log = __16a4a3246fcb7206cb3ce72a302f68ce;\n \n var logger = _interopRequireWildcard(_log);\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _keyCode = __0feafabcd51357b770acdddb85e8e6f3;\n \n var _keyCode2 = _interopRequireDefault(_keyCode);\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var NOTIFICATION_NAMESPACE = 'aui-form-notification';\n \n var CLASS_NOTIFICATION_INITIALISED = '_aui-form-notification-initialised';\n var CLASS_NOTIFICATION_ICON = 'aui-icon-notification';\n var CLASS_TOOLTIP = NOTIFICATION_NAMESPACE + '-tooltip';\n var CLASS_TOOLTIP_ERROR = CLASS_TOOLTIP + '-error';\n var CLASS_TOOLTIP_INFO = CLASS_TOOLTIP + '-info';\n \n var ATTRIBUTE_NOTIFICATION_PREFIX = 'data-aui-notification-';\n var ATTRIBUTE_NOTIFICATION_WAIT = ATTRIBUTE_NOTIFICATION_PREFIX + 'wait';\n var ATTRIBUTE_NOTIFICATION_INFO = ATTRIBUTE_NOTIFICATION_PREFIX + 'info';\n var ATTRIBUTE_NOTIFICATION_ERROR = ATTRIBUTE_NOTIFICATION_PREFIX + 'error';\n var ATTRIBUTE_NOTIFICATION_SUCCESS = ATTRIBUTE_NOTIFICATION_PREFIX + 'success';\n var ATTRIBUTE_TOOLTIP_POSITION = NOTIFICATION_NAMESPACE + '-position';\n \n var NOTIFICATION_PRIORITY = [ATTRIBUTE_NOTIFICATION_ERROR, ATTRIBUTE_NOTIFICATION_SUCCESS, ATTRIBUTE_NOTIFICATION_WAIT, ATTRIBUTE_NOTIFICATION_INFO];\n \n var notificationFields = [];\n \n /* --- Tipsy configuration --- */\n var TIPSY_OPACITY = 1;\n var TIPSY_OFFSET_INSIDE_FIELD = 9; //offset in px from the icon to the start of the tipsy\n var TIPSY_OFFSET_OUTSIDE_FIELD = 3;\n \n function initialiseNotification($field) {\n if (!isFieldInitialised($field)) {\n prepareFieldMarkup($field);\n initialiseTooltip($field);\n bindFieldEvents($field);\n synchroniseNotificationDisplay($field);\n }\n \n notificationFields.push($field);\n }\n \n function isFieldInitialised($field) {\n return $field.hasClass(CLASS_NOTIFICATION_INITIALISED);\n }\n \n function constructFieldIcon() {\n return (0, _jquery2.default)('<span class=\"aui-icon aui-icon-small ' + CLASS_NOTIFICATION_ICON + '\"/>');\n }\n \n function prepareFieldMarkup($field) {\n $field.addClass(CLASS_NOTIFICATION_INITIALISED);\n appendIconToField($field);\n }\n \n function appendIconToField($field) {\n var $icon = constructFieldIcon();\n $field.after($icon);\n }\n \n function initialiseTooltip($field) {\n getTooltipAnchor($field).tipsy({\n gravity: getTipsyGravity($field),\n title: function title() {\n return getNotificationMessage($field);\n },\n trigger: 'manual',\n offset: canContainIcon($field) ? TIPSY_OFFSET_INSIDE_FIELD : TIPSY_OFFSET_OUTSIDE_FIELD,\n opacity: TIPSY_OPACITY,\n className: function className() {\n return 'aui-form-notification-tooltip ' + getNotificationClass($field);\n },\n html: true\n });\n }\n \n // A list of HTML5 input types that don't typically get augmented by the browser, so are safe to put icons inside of.\n var unadornedInputFields = ['text', 'url', 'email', 'tel', 'password'];\n \n function canContainIcon($field) {\n return unadornedInputFields.indexOf($field.attr('type')) !== -1;\n }\n \n function getNotificationMessage($field) {\n var notificationType = getFieldNotificationType($field);\n var message = notificationType ? $field.attr(notificationType) : '';\n return formatMessage(message);\n }\n \n function formatMessage(message) {\n if (message === '') {\n return message;\n }\n \n var messageArray = jsonToArray(message);\n \n if (messageArray.length === 1) {\n return messageArray[0];\n } else {\n return '<ul><li>' + messageArray.join('</li><li>') + '</li></ul>';\n }\n }\n \n function jsonToArray(jsonOrString) {\n var jsonArray;\n try {\n jsonArray = JSON.parse(jsonOrString);\n } catch (exception) {\n jsonArray = [jsonOrString];\n }\n return jsonArray;\n }\n \n function getNotificationClass($field) {\n var notificationType = getFieldNotificationType($field);\n \n if (notificationType === ATTRIBUTE_NOTIFICATION_ERROR) {\n return CLASS_TOOLTIP_ERROR;\n } else if (notificationType === ATTRIBUTE_NOTIFICATION_INFO) {\n return CLASS_TOOLTIP_INFO;\n }\n }\n \n function getFieldNotificationType($field) {\n var fieldNotificationType;\n NOTIFICATION_PRIORITY.some(function (prioritisedNotification) {\n if ($field.is('[' + prioritisedNotification + ']')) {\n fieldNotificationType = prioritisedNotification;\n return true;\n }\n });\n \n return fieldNotificationType;\n }\n \n function bindFieldEvents($field) {\n if (focusTogglesTooltip($field)) {\n bindFieldTabEvents($field);\n }\n }\n \n function focusTogglesTooltip($field) {\n return $field.is(':aui-focusable');\n }\n \n function fieldHasTooltip($field) {\n return getNotificationMessage($field) !== '';\n }\n \n function showTooltip($field) {\n getTooltipAnchor($field).tipsy('show');\n if (focusTogglesTooltip($field)) {\n bindTooltipTabEvents($field);\n }\n }\n \n function hideTooltip($field) {\n getTooltipAnchor($field).tipsy('hide');\n }\n \n function bindFocusTooltipInteractions() {\n document.addEventListener('focus', function (e) {\n notificationFields.forEach(function (field) {\n var $field = (0, _jquery2.default)(field);\n var $tooltip = getTooltip($field);\n \n if (!focusTogglesTooltip($field)) {\n return;\n }\n \n var isFocusInTooltip = $tooltip && _jquery2.default.contains($tooltip[0], e.target);\n var isFocusTargetField = $field.is(e.target);\n var isFocusTargetChildOfField = isFocusEventTargetInElement(e, $field);\n \n if (isFocusTargetField || isFocusTargetChildOfField) {\n showTooltip($field);\n } else if ($tooltip && !isFocusInTooltip) {\n hideTooltip($field);\n }\n });\n }, true);\n }\n \n bindFocusTooltipInteractions();\n \n function isFocusEventTargetInElement(event, $element) {\n return (0, _jquery2.default)(event.target).closest($element).length > 0;\n }\n \n function bindFieldTabEvents($field) {\n $field.on('keydown', function (e) {\n if (isNormalTab(e) && fieldHasTooltip($field)) {\n var $firstTooltipLink = getFirstTooltipLink($field);\n if ($firstTooltipLink.length) {\n $firstTooltipLink.focus();\n e.preventDefault();\n }\n }\n });\n }\n \n function isNormalTab(e) {\n return e.keyCode === _keyCode2.default.TAB && !e.shiftKey && !e.altKey;\n }\n \n function isShiftTab(e) {\n return e.keyCode === _keyCode2.default.TAB && e.shiftKey;\n }\n \n function getFirstTooltipLink($field) {\n return getTooltip($field).find(':aui-tabbable').first();\n }\n \n function getLastTooltipLink($field) {\n return getTooltip($field).find(':aui-tabbable').last();\n }\n \n function getTooltip($field) {\n var $anchor = getTooltipAnchor($field);\n if ($anchor.data('tipsy')) {\n return $anchor.data('tipsy').$tip;\n }\n }\n \n function bindTooltipTabEvents($field) {\n var $tooltip = getTooltip($field);\n $tooltip.on('keydown', function (e) {\n var leavingTooltipForwards = elementIsActive(getLastTooltipLink($field));\n var leavingTooltipBackwards = elementIsActive(getFirstTooltipLink($field));\n \n if (isNormalTab(e) && leavingTooltipForwards) {\n if (leavingTooltipForwards) {\n $field.focus();\n }\n }\n if (isShiftTab(e) && leavingTooltipBackwards) {\n if (leavingTooltipBackwards) {\n $field.focus();\n e.preventDefault();\n }\n }\n });\n }\n \n function getTipsyGravity($field) {\n var position = $field.data(ATTRIBUTE_TOOLTIP_POSITION) || 'side';\n var gravityMap = {\n side: 'w',\n top: 'se',\n bottom: 'ne'\n };\n var gravity = gravityMap[position];\n if (!gravity) {\n gravity = 'w';\n logger.warn('Invalid notification position: \"' + position + '\". Valid options are \"side\", \"bottom, \"top\"');\n }\n return gravity;\n }\n \n function getTooltipAnchor($field) {\n return getFieldIcon($field);\n }\n \n function getFieldIcon($field) {\n return $field.next('.' + CLASS_NOTIFICATION_ICON);\n }\n \n function elementIsActive($el) {\n var el = $el instanceof _jquery2.default ? $el[0] : $el;\n return el && el === document.activeElement;\n }\n \n function synchroniseNotificationDisplay(field) {\n var $field = (0, _jquery2.default)(field);\n \n if (!isFieldInitialised($field)) {\n return;\n }\n \n var notificationType = getFieldNotificationType($field);\n \n var showSpinner = notificationType === ATTRIBUTE_NOTIFICATION_WAIT;\n setFieldSpinner($field, showSpinner);\n var noNotificationOnField = !notificationType;\n if (noNotificationOnField) {\n hideTooltip($field);\n return;\n }\n \n var message = getNotificationMessage($field);\n \n var fieldContainsActiveElement = _jquery2.default.contains($field[0], document.activeElement);\n var tooltipShouldBeVisible = fieldContainsActiveElement || elementIsActive($field) || !focusTogglesTooltip($field);\n if (tooltipShouldBeVisible && message) {\n showTooltip($field);\n } else {\n hideTooltip($field);\n }\n }\n \n function setFieldSpinner($field, isSpinnerVisible) {\n if (isSpinnerVisible) {\n getFieldIcon($field).addClass('aui-icon-wait');\n } else {\n getFieldIcon($field).removeClass('aui-icon-wait');\n }\n }\n \n document.addEventListener('mousedown', function (e) {\n var isTargetLink = (0, _jquery2.default)(e.target).is('a');\n if (isTargetLink) {\n return;\n }\n \n var isTargetTooltip = (0, _jquery2.default)(e.target).closest('.aui-form-notification-tooltip').length > 0;\n if (isTargetTooltip) {\n return;\n }\n \n var $allNotificationFields = (0, _jquery2.default)('[data-aui-notification-field]');\n $allNotificationFields.each(function () {\n var $notificationField = (0, _jquery2.default)(this);\n \n var targetIsThisField = $notificationField.is(e.target);\n var isFocusTargetChildOfField = isFocusEventTargetInElement(e, $notificationField);\n \n if (!targetIsThisField && !isFocusTargetChildOfField) {\n hideTooltip($notificationField);\n }\n if (focusTogglesTooltip($notificationField)) {\n hideTooltip($notificationField);\n }\n });\n });\n \n (0, _skate2.default)('data-aui-notification-field', {\n attached: function attached(element) {\n initialiseNotification((0, _jquery2.default)(element));\n },\n attributes: function () {\n var attrs = {};\n NOTIFICATION_PRIORITY.forEach(function (type) {\n attrs[type] = synchroniseNotificationDisplay;\n });\n return attrs;\n }(),\n type: _skate2.default.type.ATTRIBUTE\n });\n \n (0, _amdify2.default)('aui/form-notification');\n \n return module.exports;\n}).call(this);\n// src/js/aui/form-validation/validator-register.js\n(typeof window === 'undefined' ? global : window).__59ae152b0222f9eb90c78a5dad47191f = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _log = __16a4a3246fcb7206cb3ce72a302f68ce;\n \n var logger = _interopRequireWildcard(_log);\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var ATTRIBUTE_RESERVED_ARGUMENTS = ['displayfield', 'watchfield', 'when', 'novalidate', 'state'];\n var _validators = [];\n \n function getReservedArgument(validatorArguments) {\n var reservedArgument = false;\n \n validatorArguments.some(function (arg) {\n var isReserved = _jquery2.default.inArray(arg, ATTRIBUTE_RESERVED_ARGUMENTS) !== -1;\n \n if (isReserved) {\n reservedArgument = arg;\n }\n \n return isReserved;\n });\n \n return reservedArgument;\n }\n \n /**\n * Register a validator that can be used to validate fields. The main entry point for validator plugins.\n * @param trigger - when to run the validator. Can be an array of arguments, or a selector\n * @param validatorFunction - the function that will be called on the field to determine validation. Receives\n * field - the field that is being validated\n * args - the arguments that have been specified in HTML markup.\n */\n function registerValidator(trigger, validatorFunction) {\n var triggerSelector;\n \n if (typeof trigger === 'string') {\n triggerSelector = trigger;\n } else {\n var reservedArgument = getReservedArgument(trigger);\n \n if (reservedArgument) {\n logger.warn('Validators cannot be registered with the argument \"' + reservedArgument + '\", as it is a reserved argument.');\n return false;\n }\n \n triggerSelector = '[data-aui-validation-' + trigger.join('],[data-aui-validation-') + ']';\n }\n \n var validator = {\n validatorFunction: validatorFunction,\n validatorTrigger: triggerSelector\n };\n \n _validators.push(validator);\n \n return validator;\n }\n \n var validatorRegister = {\n register: registerValidator,\n validators: function validators() {\n return _validators;\n }\n };\n \n (0, _amdify2.default)('aui/form-validation/validator-register', validatorRegister);\n \n exports.default = validatorRegister;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/form-validation/basic-validators.js\n(typeof window === 'undefined' ? global : window).__5559603b4663c4ed93cb3b28a1f03968 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _format = __bd950d9487bdce968e9f27772530b69d;\n \n var _format2 = _interopRequireDefault(_format);\n \n var _i18n = __2a8f02ddf948a2241e4b1ac8618d2015;\n \n var _i18n2 = _interopRequireDefault(_i18n);\n \n var _validatorRegister = __59ae152b0222f9eb90c78a5dad47191f;\n \n var _validatorRegister2 = _interopRequireDefault(_validatorRegister);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n //Input length\n // eslint-disable-line no-unused-vars\n function minMaxLength(field) {\n var fieldValueLength = field.el.value.length;\n var fieldIsEmpty = fieldValueLength === 0;\n var minlength = parseInt(field.args('minlength'), 10);\n var maxlength = parseInt(field.args('maxlength'), 10);\n \n if (minlength && maxlength && minlength === maxlength && !fieldIsEmpty && fieldValueLength !== minlength) {\n var exactlengthMessage = makeMessage('exactlength', field.args, [minlength]);\n field.invalidate(exactlengthMessage);\n } else if (minlength && fieldValueLength < minlength && !fieldIsEmpty) {\n var minlengthMessage = makeMessage('minlength', field.args);\n field.invalidate(minlengthMessage);\n } else if (maxlength && fieldValueLength > maxlength) {\n var maxlengthMessage = makeMessage('maxlength', field.args);\n field.invalidate(maxlengthMessage);\n } else {\n field.validate();\n }\n } // eslint-disable-line no-unused-vars\n \n _validatorRegister2.default.register(['maxlength', 'minlength'], minMaxLength); //AUI-prefixed attribute is deprecated as of 5.9.0\n _validatorRegister2.default.register('[maxlength],[minlength]', minMaxLength);\n \n //Field matching\n _validatorRegister2.default.register(['matchingfield'], function (field) {\n var thisFieldValue = field.el.value;\n var matchingField = document.getElementById(field.args('matchingfield'));\n var matchingFieldValue = matchingField.value;\n \n var matchingFieldMessage = makeMessage('matchingfield', field.args, [thisFieldValue, matchingFieldValue]);\n \n var shouldHidePasswords = isPasswordField(field.el) || isPasswordField(matchingField);\n if (shouldHidePasswords) {\n matchingFieldMessage = makeMessage('matchingfield-novalue', field.args);\n }\n \n if (!thisFieldValue || !matchingFieldValue) {\n field.validate();\n } else if (matchingFieldValue !== thisFieldValue) {\n field.invalidate(matchingFieldMessage);\n } else {\n field.validate();\n }\n });\n \n function isPasswordField(field) {\n return field.getAttribute('type') === 'password';\n }\n \n //Banned words\n _validatorRegister2.default.register(['doesnotcontain'], function (field) {\n var doesNotContainMessage = makeMessage('doesnotcontain', field.args);\n \n if (field.el.value.indexOf(field.args('doesnotcontain')) === -1) {\n field.validate();\n } else {\n field.invalidate(doesNotContainMessage);\n }\n });\n \n //Matches regex\n \n function matchesRegex(val, regex) {\n var matches = val.match(regex);\n if (!matches) {\n return false;\n }\n var isExactMatch = val === matches[0];\n return isExactMatch;\n }\n \n function pattern(field) {\n var patternMessage = makeMessage('pattern', field.args);\n \n if (matchesRegex(field.el.value, new RegExp(field.args('pattern')))) {\n field.validate();\n } else {\n field.invalidate(patternMessage);\n }\n }\n \n _validatorRegister2.default.register(['pattern'], pattern); //AUI-prefixed attribute is deprecated as of 5.9.0\n _validatorRegister2.default.register('[pattern]', pattern);\n \n //Native Required\n function required(field) {\n var requiredMessage = makeMessage('required', field.args);\n if (field.el.value) {\n field.validate();\n } else {\n field.invalidate(requiredMessage);\n }\n }\n _validatorRegister2.default.register(['required'], required); //AUI-prefixed attribute is deprecated as of 5.9.0\n _validatorRegister2.default.register('[required]', required);\n \n //Field value range (between min and max)\n \n function minOrMax(field) {\n var validNumberMessage = makeMessage('validnumber', field.args);\n \n var fieldValue = parseInt(field.el.value, 10);\n if (isNaN(fieldValue)) {\n field.invalidate(validNumberMessage);\n return;\n }\n \n var minValue = field.args('min');\n var maxValue = field.args('max');\n \n if (minValue && fieldValue < parseInt(minValue, 10)) {\n field.invalidate(makeMessage('min', field.args));\n } else if (maxValue && fieldValue > parseInt(maxValue, 10)) {\n field.invalidate(makeMessage('max', field.args));\n } else {\n field.validate();\n }\n }\n _validatorRegister2.default.register(['min', 'max'], minOrMax); //AUI-prefixed attribute is deprecated as of 5.9.0\n _validatorRegister2.default.register('[min],[max]', minOrMax);\n \n //Date format\n _validatorRegister2.default.register(['dateformat'], function (field) {\n var dateFormatSymbolic = field.args('dateformat');\n var dateFormatMessage = makeMessage('dateformat', field.args);\n \n var symbolRegexMap = {\n 'Y': '[0-9]{4}',\n 'y': '[0-9]{2}',\n 'm': '(0?[1-9]|10|11|12)',\n 'M': '[Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec]',\n 'D': '[Mon|Tue|Wed|Thu|Fri|Sat|Sun]',\n 'd': '([0-2]?[1-9]|10|20|30|31)'\n };\n \n var dateFormatSymbolArray = dateFormatSymbolic.split('');\n var dateFormatRegexString = '';\n \n dateFormatSymbolArray.forEach(function (dateSymbol) {\n var isRecognisedSymbol = symbolRegexMap.hasOwnProperty(dateSymbol);\n if (isRecognisedSymbol) {\n dateFormatRegexString += symbolRegexMap[dateSymbol];\n } else {\n dateFormatRegexString += dateSymbol;\n }\n });\n \n var dateFormatRegex = new RegExp(dateFormatRegexString + '$', 'i');\n var isValidDate = matchesRegex(field.el.value, dateFormatRegex);\n \n if (isValidDate) {\n field.validate();\n } else {\n field.invalidate(dateFormatMessage);\n }\n });\n \n //Checkbox count\n _validatorRegister2.default.register(['minchecked', 'maxchecked'], function (field) {\n var amountChecked = (0, _jquery2.default)(field.el).find(':checked').length;\n var aboveMin = !field.args('minchecked') || amountChecked >= field.args('minchecked');\n var belowMax = !field.args('maxchecked') || amountChecked <= field.args('maxchecked');\n \n var belowMinMessage = makeMessage('minchecked', field.args);\n var aboveMaxMessage = makeMessage('maxchecked', field.args);\n \n if (aboveMin && belowMax) {\n field.validate();\n } else if (!aboveMin) {\n field.invalidate(belowMinMessage);\n } else if (!belowMax) {\n field.invalidate(aboveMaxMessage);\n }\n });\n \n /*\n Retrieves a message for a plugin validator through the data attributes or the default (which is in the i18n file)\n */\n function makeMessage(key, accessorFunction, customTokens) {\n var inFlatpackMode = AJS.I18n.keys !== undefined;\n var defaultMessage;\n if (inFlatpackMode) {\n defaultMessage = AJS.I18n.keys['aui.validation.message.' + key];\n } else {\n defaultMessage = pluginI18nMessages[key];\n }\n \n var messageTokens = customTokens;\n if (!customTokens) {\n messageTokens = [accessorFunction(key)];\n }\n \n var customMessageUnformatted = accessorFunction(key + '-msg');\n var formattingArguments;\n \n if (customMessageUnformatted) {\n formattingArguments = [customMessageUnformatted].concat(messageTokens);\n } else {\n formattingArguments = [defaultMessage].concat(messageTokens);\n }\n \n return AJS.format.apply(null, formattingArguments);\n }\n \n /*\n The value AJS.I18n.getText('aui.validation.message...') (defaultMessage) cannot be refactored as it\n must appear verbatim for the plugin I18n transformation to pick it up\n */\n var pluginI18nMessages = {\n minlength: AJS.I18n.getText('aui.validation.message.minlength'),\n maxlength: AJS.I18n.getText('aui.validation.message.maxlength'),\n exactlength: AJS.I18n.getText('aui.validation.message.exactlength'),\n matchingfield: AJS.I18n.getText('aui.validation.message.matchingfield'),\n 'matchingfield-novalue': AJS.I18n.getText('aui.validation.message.matchingfield-novalue'),\n doesnotcontain: AJS.I18n.getText('aui.validation.message.doesnotcontain'),\n pattern: AJS.I18n.getText('aui.validation.message.pattern'),\n required: AJS.I18n.getText('aui.validation.message.required'),\n validnumber: AJS.I18n.getText('aui.validation.message.validnumber'),\n min: AJS.I18n.getText('aui.validation.message.min'),\n max: AJS.I18n.getText('aui.validation.message.max'),\n dateformat: AJS.I18n.getText('aui.validation.message.dateformat'),\n minchecked: AJS.I18n.getText('aui.validation.message.minchecked'),\n maxchecked: AJS.I18n.getText('aui.validation.message.maxchecked')\n };\n \n (0, _amdify2.default)('aui/form-validation/basic-validators');\n \n return module.exports;\n}).call(this);\n// src/js/aui/form-validation.js\n(typeof window === 'undefined' ? global : window).__9add8c98b7cba85765bc8e5d14372105 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __7a040c461c30a0396a3f29085e136d08;\n \n __5559603b4663c4ed93cb3b28a1f03968;\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n var _validatorRegister = __59ae152b0222f9eb90c78a5dad47191f;\n \n var _validatorRegister2 = _interopRequireDefault(_validatorRegister);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n //Attributes\n var ATTRIBUTE_VALIDATION_OPTION_PREFIX = 'aui-validation-';\n var ATTRIBUTE_NOTIFICATION_PREFIX = 'data-aui-notification-';\n \n var ATTRIBUTE_FIELD_STATE = 'aui-validation-state';\n var INVALID = 'invalid';\n var VALID = 'valid';\n var VALIDATING = 'validating';\n var UNVALIDATED = 'unvalidated';\n \n var ATTRIBUTE_VALIDATION_FIELD_COMPONENT = 'data-aui-validation-field';\n \n //Classes\n var CLASS_VALIDATION_INITIALISED = '_aui-form-validation-initialised';\n \n //Events\n var EVENT_FIELD_STATE_CHANGED = '_aui-internal-field-state-changed';\n \n function isFieldInitialised($field) {\n return $field.hasClass(CLASS_VALIDATION_INITIALISED);\n }\n \n function initValidation($field) {\n if (!isFieldInitialised($field)) {\n initialiseDisplayField($field);\n prepareFieldMarkup($field);\n bindFieldEvents($field);\n changeFieldState($field, UNVALIDATED);\n }\n }\n \n function initialiseDisplayField($field) {\n getDisplayField($field).attr('data-aui-notification-field', '');\n }\n \n function prepareFieldMarkup($field) {\n $field.addClass(CLASS_VALIDATION_INITIALISED);\n }\n \n function bindFieldEvents($field) {\n bindStopTypingEvent($field);\n bindValidationEvent($field);\n }\n \n function bindStopTypingEvent($field) {\n var keyUpTimer;\n \n var triggerStopTypingEvent = function triggerStopTypingEvent() {\n $field.trigger('aui-stop-typing');\n };\n \n $field.on('keyup', function () {\n clearTimeout(keyUpTimer);\n keyUpTimer = setTimeout(triggerStopTypingEvent, 1500);\n });\n }\n \n function bindValidationEvent($field) {\n var validateWhen = getValidationOption($field, 'when');\n var watchedFieldID = getValidationOption($field, 'watchfield');\n \n var elementsToWatch = watchedFieldID ? $field.add('#' + watchedFieldID) : $field;\n \n elementsToWatch.on(validateWhen, function startValidation() {\n validationTriggeredHandler($field);\n });\n }\n \n function validationTriggeredHandler($field) {\n var noValidate = getValidationOption($field, 'novalidate');\n \n if (noValidate) {\n changeFieldState($field, VALID);\n return;\n }\n \n return startValidating($field);\n }\n \n function getValidationOption($field, option) {\n var defaults = {\n 'when': 'change'\n };\n var optionValue = $field.attr('data-' + ATTRIBUTE_VALIDATION_OPTION_PREFIX + option);\n if (!optionValue) {\n optionValue = defaults[option];\n }\n \n return optionValue;\n }\n \n function startValidating($field) {\n clearFieldMessages($field);\n \n var validatorsToRun = getActivatedValidators($field);\n \n changeFieldState($field, VALIDATING);\n \n var deferreds = runValidatorsAndGetDeferred($field, validatorsToRun);\n var fieldValidators = _jquery2.default.when.apply(_jquery2.default, deferreds);\n fieldValidators.done(function () {\n changeFieldState($field, VALID);\n });\n \n return fieldValidators;\n }\n \n function clearFieldMessages($field) {\n setFieldNotification(getDisplayField($field), 'none');\n }\n \n function getValidators() {\n return _validatorRegister2.default.validators();\n }\n \n function getActivatedValidators($field) {\n var callList = [];\n getValidators().forEach(function (validator, index) {\n var validatorTrigger = validator.validatorTrigger;\n var runThisValidator = $field.is(validatorTrigger);\n if (runThisValidator) {\n callList.push(index);\n }\n });\n \n return callList;\n }\n \n function runValidatorsAndGetDeferred($field, validatorsToRun) {\n var allDeferreds = [];\n \n validatorsToRun.forEach(function (validatorIndex) {\n var validatorFunction = getValidators()[validatorIndex].validatorFunction;\n var deferred = new _jquery2.default.Deferred();\n var validatorContext = createValidatorContext($field, deferred);\n validatorFunction(validatorContext);\n \n allDeferreds.push(deferred);\n });\n \n return allDeferreds;\n }\n \n function createValidatorContext($field, validatorDeferred) {\n var context = {\n validate: function validate() {\n validatorDeferred.resolve();\n },\n invalidate: function invalidate(message) {\n changeFieldState($field, INVALID, message);\n validatorDeferred.reject();\n },\n args: createArgumentAccessorFunction($field),\n el: $field[0],\n $el: $field\n };\n \n AJS.deprecate.prop(context, '$el', {\n sinceVersion: '5.9.0',\n removeInVersion: '5.10.0',\n alternativeName: 'el',\n extraInfo: 'See https://ecosystem.atlassian.net/browse/AUI-3263.'\n });\n \n return context;\n }\n \n function createArgumentAccessorFunction($field) {\n return function (arg) {\n return $field.attr('data-' + ATTRIBUTE_VALIDATION_OPTION_PREFIX + arg) || $field.attr(arg);\n };\n }\n \n function changeFieldState($field, state, message) {\n $field.attr('data-' + ATTRIBUTE_FIELD_STATE, state);\n \n if (state === UNVALIDATED) {\n return;\n }\n \n $field.trigger(_jquery2.default.Event(EVENT_FIELD_STATE_CHANGED));\n \n var $displayField = getDisplayField($field);\n \n var stateToNotificationTypeMap = {};\n stateToNotificationTypeMap[VALIDATING] = 'wait';\n stateToNotificationTypeMap[INVALID] = 'error';\n stateToNotificationTypeMap[VALID] = 'success';\n \n var notificationType = stateToNotificationTypeMap[state];\n \n if (state === VALIDATING) {\n showSpinnerIfSlow($field);\n } else {\n setFieldNotification($displayField, notificationType, message);\n }\n }\n \n function showSpinnerIfSlow($field) {\n setTimeout(function () {\n var stillValidating = getFieldState($field) === VALIDATING;\n if (stillValidating) {\n setFieldNotification($field, 'wait');\n }\n }, 500);\n }\n \n function setFieldNotification($field, type, message) {\n var spinnerWasVisible = isSpinnerVisible($field);\n removeIconOnlyNotifications($field);\n var skipShowingSuccessNotification = type === 'success' && !spinnerWasVisible;\n if (skipShowingSuccessNotification) {\n return;\n }\n \n if (type === 'none') {\n removeFieldNotification($field, 'error');\n } else {\n var previousMessage = $field.attr(ATTRIBUTE_NOTIFICATION_PREFIX + type) || '[]';\n var newMessage = message ? combineJSONMessages(message, previousMessage) : '';\n $field.attr(ATTRIBUTE_NOTIFICATION_PREFIX + type, newMessage);\n }\n }\n \n function removeIconOnlyNotifications($field) {\n removeFieldNotification($field, 'wait');\n removeFieldNotification($field, 'success');\n }\n \n function removeFieldNotification($field, type) {\n $field.removeAttr(ATTRIBUTE_NOTIFICATION_PREFIX + type);\n }\n \n function isSpinnerVisible($field) {\n return $field.is('[' + ATTRIBUTE_NOTIFICATION_PREFIX + 'wait]');\n }\n \n function combineJSONMessages(newString, previousString) {\n var previousStackedMessageList = JSON.parse(previousString);\n var newStackedMessageList = previousStackedMessageList.concat([newString]);\n var newStackedMessage = JSON.stringify(newStackedMessageList);\n return newStackedMessage;\n }\n \n function getDisplayField($field) {\n var displayFieldID = getValidationOption($field, 'displayfield');\n var notifyOnSelf = displayFieldID === undefined;\n return notifyOnSelf ? $field : (0, _jquery2.default)('#' + displayFieldID);\n }\n \n function getFieldState($field) {\n return $field.attr('data-' + ATTRIBUTE_FIELD_STATE);\n }\n \n /**\n * Trigger validation on a field manually\n * @param $field the field that validation should be triggered for\n */\n function validateField($field) {\n $field = (0, _jquery2.default)($field);\n validationTriggeredHandler($field);\n }\n \n /**\n * Form scrolling and submission prevent based on validation state\n * -If the form is unvalidated, validate all fields\n * -If the form is invalid, go to the first invalid element\n * -If the form is validating, wait for them to validate and then try submitting again\n * -If the form is valid, allow form submission\n */\n (0, _jquery2.default)(document).on('submit', function (e) {\n var form = e.target;\n var $form = (0, _jquery2.default)(form);\n \n var formState = getFormStateName($form);\n if (formState === UNVALIDATED) {\n delaySubmitUntilStateChange($form, e);\n validateUnvalidatedFields($form);\n } else if (formState === VALIDATING) {\n delaySubmitUntilStateChange($form, e);\n } else if (formState === INVALID) {\n e.preventDefault();\n selectFirstInvalid($form);\n } else if (formState === VALID) {\n var validSubmitEvent = _jquery2.default.Event('aui-valid-submit');\n $form.trigger(validSubmitEvent);\n var preventNormalSubmit = validSubmitEvent.isDefaultPrevented();\n if (preventNormalSubmit) {\n e.preventDefault(); //users can bind to aui-valid-submit for ajax forms\n }\n }\n });\n \n function delaySubmitUntilStateChange($form, event) {\n event.preventDefault();\n $form.one(EVENT_FIELD_STATE_CHANGED, function () {\n $form.trigger('submit');\n });\n }\n \n function getFormStateName($form) {\n var $fieldCollection = $form.find('.' + CLASS_VALIDATION_INITIALISED);\n var fieldStates = getFieldCollectionStateNames($fieldCollection);\n var wholeFormState = mergeStates(fieldStates);\n return wholeFormState;\n }\n \n function getFieldCollectionStateNames($fields) {\n var states = _jquery2.default.map($fields, function (field) {\n return getFieldState((0, _jquery2.default)(field));\n });\n return states;\n }\n \n function mergeStates(stateNames) {\n var containsInvalidState = stateNames.indexOf(INVALID) !== -1;\n var containsUnvalidatedState = stateNames.indexOf(UNVALIDATED) !== -1;\n var containsValidatingState = stateNames.indexOf(VALIDATING) !== -1;\n \n if (containsInvalidState) {\n return INVALID;\n } else if (containsUnvalidatedState) {\n return UNVALIDATED;\n } else if (containsValidatingState) {\n return VALIDATING;\n } else {\n return VALID;\n }\n }\n \n function validateUnvalidatedFields($form) {\n var $unvalidatedElements = getFieldsInFormWithState($form, UNVALIDATED);\n $unvalidatedElements.each(function (index, el) {\n validator.validate((0, _jquery2.default)(el));\n });\n }\n \n function selectFirstInvalid($form) {\n var $firstInvalidField = getFieldsInFormWithState($form, INVALID).first();\n $firstInvalidField.focus();\n }\n \n function getFieldsInFormWithState($form, state) {\n var selector = '[data-' + ATTRIBUTE_FIELD_STATE + '=' + state + ']';\n return $form.find(selector);\n }\n \n var validator = {\n register: _validatorRegister2.default.register,\n validate: validateField\n };\n \n (0, _skate2.default)(ATTRIBUTE_VALIDATION_FIELD_COMPONENT, {\n attached: function attached(field) {\n if (field.form) {\n field.form.setAttribute('novalidate', 'novalidate');\n }\n var $field = (0, _jquery2.default)(field);\n initValidation($field);\n _skate2.default.init(field); //needed to kick off form notification skate initialisation\n },\n type: _skate2.default.type.ATTRIBUTE\n });\n \n (0, _amdify2.default)('aui/form-validation', validator);\n (0, _globalize2.default)('formValidation', validator);\n exports.default = validator;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/internal/constants.js\n(typeof window === 'undefined' ? global : window).__1093885dd5cd006c191f1952eec9f3f5 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n var INPUT_SUFFIX = '-input';\n \n exports.default = {\n INPUT_SUFFIX: INPUT_SUFFIX\n };\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/label.js\n(typeof window === 'undefined' ? global : window).__039ddb3cd0d125fa3fd993d48f3f61d9 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n var _skatejsTemplateHtml = __16b630aaa86c62c7ef629cfa7bab499e;\n \n var _skatejsTemplateHtml2 = _interopRequireDefault(_skatejsTemplateHtml);\n \n var _enforcer = __fcef6c85f04d040b520e6625d1397941;\n \n var _enforcer2 = _interopRequireDefault(_enforcer);\n \n var _constants = __1093885dd5cd006c191f1952eec9f3f5;\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n function getLabel(element) {\n return element.querySelector('label');\n }\n \n function updateLabelFor(element, change) {\n if (element.hasAttribute('for')) {\n getLabel(element).setAttribute('for', '' + change.newValue + _constants.INPUT_SUFFIX);\n } else {\n getLabel(element).removeAttribute('for');\n }\n }\n \n function updateLabelForm(element, change) {\n if (element.hasAttribute('form')) {\n getLabel(element).setAttribute('form', change.newValue);\n } else {\n getLabel(element).removeAttribute('form');\n }\n }\n \n var Label = (0, _skate2.default)('aui-label', {\n template: (0, _skatejsTemplateHtml2.default)('<label><content></content></label>'),\n created: function created(element) {\n element._label = getLabel(element); // required for quick access from test\n },\n attached: function attached(element) {\n (0, _enforcer2.default)(element).attributeExists('for');\n },\n attributes: {\n 'for': updateLabelFor,\n form: updateLabelForm\n },\n prototype: {\n get disabled() {\n return this.hasAttribute('disabled');\n },\n set disabled(value) {\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n },\n events: {\n click: function click(element, e) {\n if (element.disabled) {\n e.preventDefault();\n }\n }\n }\n });\n \n exports.default = Label;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/progress-indicator.js\n(typeof window === 'undefined' ? global : window).__909352e3355986f377ab7bfb75023fbf = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _animation = __f6a37357e17b1533fdd5dde2eaedcc72;\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n function updateProgress($progressBar, $progressBarContainer, progressValue) {\n (0, _animation.recomputeStyle)($progressBar);\n $progressBar.css('width', progressValue * 100 + '%');\n $progressBarContainer.attr('data-value', progressValue);\n }\n \n var progressBars = {\n update: function update(element, value) {\n var $progressBarContainer = (0, _jquery2.default)(element).first();\n var $progressBar = $progressBarContainer.children('.aui-progress-indicator-value');\n var valueAttribute = $progressBarContainer.attr('data-value');\n var currentProgress = parseFloat(valueAttribute) || 0;\n var isProgressNotChanged = valueAttribute && currentProgress === value;\n \n if (isProgressNotChanged) {\n return;\n }\n \n var afterTransitionEvent = 'aui-progress-indicator-after-update';\n var beforeTransitionEvent = 'aui-progress-indicator-before-update';\n var transitionEnd = 'transitionend webkitTransitionEnd';\n \n var isIndeterminate = !valueAttribute;\n \n //if the progress bar is indeterminate switch it.\n if (isIndeterminate) {\n $progressBar.css('width', 0);\n }\n \n if (typeof value === 'number' && value <= 1 && value >= 0) {\n $progressBarContainer.trigger(beforeTransitionEvent, [currentProgress, value]);\n \n //detect whether transitions are supported\n var documentBody = document.body || document.documentElement;\n var style = documentBody.style;\n var isTransitionSupported = typeof style.transition === 'string' || typeof style.WebkitTransition === 'string';\n \n //trigger the event after transition end if supported, otherwise just trigger it\n if (isTransitionSupported) {\n $progressBar.one(transitionEnd, function () {\n $progressBarContainer.trigger(afterTransitionEvent, [currentProgress, value]);\n });\n updateProgress($progressBar, $progressBarContainer, value);\n } else {\n updateProgress($progressBar, $progressBarContainer, value);\n $progressBarContainer.trigger(afterTransitionEvent, [currentProgress, value]);\n }\n }\n return $progressBarContainer;\n },\n \n setIndeterminate: function setIndeterminate(element) {\n var $progressBarContainer = (0, _jquery2.default)(element).first();\n var $progressBar = $progressBarContainer.children('.aui-progress-indicator-value');\n \n $progressBarContainer.removeAttr('data-value');\n (0, _animation.recomputeStyle)($progressBarContainer);\n $progressBar.css('width', '100%');\n }\n };\n \n (0, _globalize2.default)('progressBars', progressBars);\n \n exports.default = progressBars;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js-vendor/underscorejs/underscore.js\n(typeof window === 'undefined' ? global : window).__fca95d046e0f2f1586bf39d6ee6238b5 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n var defineDependencies = {\n \"module\": module,\n \"exports\": exports\n };\n var define = function defineReplacementWrapper(generatedModuleName) {\n return function defineReplacement(name, deps, func) {\n var root = (typeof window === 'undefined' ? global : window);\n var defineGlobal = root.define;\n var rval;\n var type;\n \n func = [func, deps, name].filter(function (cur) {\n return typeof cur === 'function';\n })[0];\n deps = [deps, name, []].filter(Array.isArray)[0];\n rval = func.apply(null, deps.map(function (value) {\n return defineDependencies[value];\n }));\n type = typeof rval;\n \n // Support existing AMD libs.\n if (typeof defineGlobal === 'function') {\n // Almond always expects a name so resolve one (#29).\n defineGlobal(typeof name === 'string' ? name : generatedModuleName, deps, func);\n }\n \n // Some processors like Babel don't check to make sure that the module value\n // is not a primitive before calling Object.defineProperty() on it. We ensure\n // it is an instance so that it can.\n if (type === 'string') {\n rval = String(rval);\n } else if (type === 'number') {\n rval = Number(rval);\n } else if (type === 'boolean') {\n rval = Boolean(rval);\n }\n \n // Reset the exports to the defined module. This is how we convert AMD to\n // CommonJS and ensures both can either co-exist, or be used separately. We\n // only set it if it is not defined because there is no object representation\n // of undefined, thus calling Object.defineProperty() on it would fail.\n if (rval !== undefined) {\n exports = module.exports = rval;\n }\n };\n }(\"__fca95d046e0f2f1586bf39d6ee6238b5\");\n define.amd = true;\n \n // Underscore.js 1.5.2\n // http://underscorejs.org\n // (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n // Underscore may be freely distributed under the MIT license.\n \n (function() {\n \n // Baseline setup\n // --------------\n \n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n \n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n \n // Establish the object that gets returned to break out of a loop iteration.\n var breaker = {};\n \n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n \n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n concat = ArrayProto.concat,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n \n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeForEach = ArrayProto.forEach,\n nativeMap = ArrayProto.map,\n nativeReduce = ArrayProto.reduce,\n nativeReduceRight = ArrayProto.reduceRight,\n nativeFilter = ArrayProto.filter,\n nativeEvery = ArrayProto.every,\n nativeSome = ArrayProto.some,\n nativeIndexOf = ArrayProto.indexOf,\n nativeLastIndexOf = ArrayProto.lastIndexOf,\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind;\n \n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n \n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object via a string identifier,\n // for Closure Compiler \"advanced\" mode.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n \n // Current version.\n _.VERSION = '1.5.2';\n \n // Collection Functions\n // --------------------\n \n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles objects with the built-in `forEach`, arrays, and raw objects.\n // Delegates to **ECMAScript 5**'s native `forEach` if available.\n var each = _.each = _.forEach = function(obj, iterator, context) {\n if (obj == null) return;\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;\n }\n }\n };\n \n // Return the results of applying the iterator to each element.\n // Delegates to **ECMAScript 5**'s native `map` if available.\n _.map = _.collect = function(obj, iterator, context) {\n var results = [];\n if (obj == null) return results;\n if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n each(obj, function(value, index, list) {\n results.push(iterator.call(context, value, index, list));\n });\n return results;\n };\n \n var reduceError = 'Reduce of empty array with no initial value';\n \n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n var initial = arguments.length > 2;\n if (obj == null) obj = [];\n if (nativeReduce && obj.reduce === nativeReduce) {\n if (context) iterator = _.bind(iterator, context);\n return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n }\n each(obj, function(value, index, list) {\n if (!initial) {\n memo = value;\n initial = true;\n } else {\n memo = iterator.call(context, memo, value, index, list);\n }\n });\n if (!initial) throw new TypeError(reduceError);\n return memo;\n };\n \n // The right-associative version of reduce, also known as `foldr`.\n // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n var initial = arguments.length > 2;\n if (obj == null) obj = [];\n if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n if (context) iterator = _.bind(iterator, context);\n return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n }\n var length = obj.length;\n if (length !== +length) {\n var keys = _.keys(obj);\n length = keys.length;\n }\n each(obj, function(value, index, list) {\n index = keys ? keys[--length] : --length;\n if (!initial) {\n memo = obj[index];\n initial = true;\n } else {\n memo = iterator.call(context, memo, obj[index], index, list);\n }\n });\n if (!initial) throw new TypeError(reduceError);\n return memo;\n };\n \n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, iterator, context) {\n var result;\n any(obj, function(value, index, list) {\n if (iterator.call(context, value, index, list)) {\n result = value;\n return true;\n }\n });\n return result;\n };\n \n // Return all the elements that pass a truth test.\n // Delegates to **ECMAScript 5**'s native `filter` if available.\n // Aliased as `select`.\n _.filter = _.select = function(obj, iterator, context) {\n var results = [];\n if (obj == null) return results;\n if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n each(obj, function(value, index, list) {\n if (iterator.call(context, value, index, list)) results.push(value);\n });\n return results;\n };\n \n // Return all the elements for which a truth test fails.\n _.reject = function(obj, iterator, context) {\n return _.filter(obj, function(value, index, list) {\n return !iterator.call(context, value, index, list);\n }, context);\n };\n \n // Determine whether all of the elements match a truth test.\n // Delegates to **ECMAScript 5**'s native `every` if available.\n // Aliased as `all`.\n _.every = _.all = function(obj, iterator, context) {\n iterator || (iterator = _.identity);\n var result = true;\n if (obj == null) return result;\n if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n each(obj, function(value, index, list) {\n if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n });\n return !!result;\n };\n \n // Determine if at least one element in the object matches a truth test.\n // Delegates to **ECMAScript 5**'s native `some` if available.\n // Aliased as `any`.\n var any = _.some = _.any = function(obj, iterator, context) {\n iterator || (iterator = _.identity);\n var result = false;\n if (obj == null) return result;\n if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n each(obj, function(value, index, list) {\n if (result || (result = iterator.call(context, value, index, list))) return breaker;\n });\n return !!result;\n };\n \n // Determine if the array or object contains a given value (using `===`).\n // Aliased as `include`.\n _.contains = _.include = function(obj, target) {\n if (obj == null) return false;\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n return any(obj, function(value) {\n return value === target;\n });\n };\n \n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n return (isFunc ? method : value[method]).apply(value, args);\n });\n };\n \n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, function(value){ return value[key]; });\n };\n \n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs, first) {\n if (_.isEmpty(attrs)) return first ? void 0 : [];\n return _[first ? 'find' : 'filter'](obj, function(value) {\n for (var key in attrs) {\n if (attrs[key] !== value[key]) return false;\n }\n return true;\n });\n };\n \n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.where(obj, attrs, true);\n };\n \n // Return the maximum element or (element-based computation).\n // Can't optimize arrays of integers longer than 65,535 elements.\n // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797)\n _.max = function(obj, iterator, context) {\n if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n return Math.max.apply(Math, obj);\n }\n if (!iterator && _.isEmpty(obj)) return -Infinity;\n var result = {computed : -Infinity, value: -Infinity};\n each(obj, function(value, index, list) {\n var computed = iterator ? iterator.call(context, value, index, list) : value;\n computed > result.computed && (result = {value : value, computed : computed});\n });\n return result.value;\n };\n \n // Return the minimum element (or element-based computation).\n _.min = function(obj, iterator, context) {\n if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n return Math.min.apply(Math, obj);\n }\n if (!iterator && _.isEmpty(obj)) return Infinity;\n var result = {computed : Infinity, value: Infinity};\n each(obj, function(value, index, list) {\n var computed = iterator ? iterator.call(context, value, index, list) : value;\n computed < result.computed && (result = {value : value, computed : computed});\n });\n return result.value;\n };\n \n // Shuffle an array, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var rand;\n var index = 0;\n var shuffled = [];\n each(obj, function(value) {\n rand = _.random(index++);\n shuffled[index - 1] = shuffled[rand];\n shuffled[rand] = value;\n });\n return shuffled;\n };\n \n // Sample **n** random values from an array.\n // If **n** is not specified, returns a single random element from the array.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (arguments.length < 2 || guard) {\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n \n // An internal function to generate lookup iterators.\n var lookupIterator = function(value) {\n return _.isFunction(value) ? value : function(obj){ return obj[value]; };\n };\n \n // Sort the object's values by a criterion produced by an iterator.\n _.sortBy = function(obj, value, context) {\n var iterator = lookupIterator(value);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iterator.call(context, value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n \n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, value, context) {\n var result = {};\n var iterator = value == null ? _.identity : lookupIterator(value);\n each(obj, function(value, index) {\n var key = iterator.call(context, value, index, obj);\n behavior(result, key, value);\n });\n return result;\n };\n };\n \n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, key, value) {\n (_.has(result, key) ? result[key] : (result[key] = [])).push(value);\n });\n \n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, key, value) {\n result[key] = value;\n });\n \n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, key) {\n _.has(result, key) ? result[key]++ : result[key] = 1;\n });\n \n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iterator, context) {\n iterator = iterator == null ? _.identity : lookupIterator(iterator);\n var value = iterator.call(context, obj);\n var low = 0, high = array.length;\n while (low < high) {\n var mid = (low + high) >>> 1;\n iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;\n }\n return low;\n };\n \n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (obj.length === +obj.length) return _.map(obj, _.identity);\n return _.values(obj);\n };\n \n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;\n };\n \n // Array Functions\n // ---------------\n \n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n return (n == null) || guard ? array[0] : slice.call(array, 0, n);\n };\n \n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N. The **guard** check allows it to work with\n // `_.map`.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n };\n \n // Get the last element of an array. Passing **n** will return the last N\n // values in the array. The **guard** check allows it to work with `_.map`.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if ((n == null) || guard) {\n return array[array.length - 1];\n } else {\n return slice.call(array, Math.max(array.length - n, 0));\n }\n };\n \n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array. The **guard**\n // check allows it to work with `_.map`.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, (n == null) || guard ? 1 : n);\n };\n \n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n \n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, output) {\n if (shallow && _.every(input, _.isArray)) {\n return concat.apply(output, input);\n }\n each(input, function(value) {\n if (_.isArray(value) || _.isArguments(value)) {\n shallow ? push.apply(output, value) : flatten(value, shallow, output);\n } else {\n output.push(value);\n }\n });\n return output;\n };\n \n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, []);\n };\n \n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n \n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iterator, context) {\n if (_.isFunction(isSorted)) {\n context = iterator;\n iterator = isSorted;\n isSorted = false;\n }\n var initial = iterator ? _.map(array, iterator, context) : array;\n var results = [];\n var seen = [];\n each(initial, function(value, index) {\n if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {\n seen.push(value);\n results.push(array[index]);\n }\n });\n return results;\n };\n \n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(_.flatten(arguments, true));\n };\n \n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var rest = slice.call(arguments, 1);\n return _.filter(_.uniq(array), function(item) {\n return _.every(rest, function(other) {\n return _.indexOf(other, item) >= 0;\n });\n });\n };\n \n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = concat.apply(ArrayProto, slice.call(arguments, 1));\n return _.filter(array, function(value){ return !_.contains(rest, value); });\n };\n \n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n var length = _.max(_.pluck(arguments, \"length\").concat(0));\n var results = new Array(length);\n for (var i = 0; i < length; i++) {\n results[i] = _.pluck(arguments, '' + i);\n }\n return results;\n };\n \n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n if (list == null) return {};\n var result = {};\n for (var i = 0, length = list.length; i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n \n // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n // we need this function. Return the position of the first occurrence of an\n // item in an array, or -1 if the item is not included in the array.\n // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = function(array, item, isSorted) {\n if (array == null) return -1;\n var i = 0, length = array.length;\n if (isSorted) {\n if (typeof isSorted == 'number') {\n i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted);\n } else {\n i = _.sortedIndex(array, item);\n return array[i] === item ? i : -1;\n }\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);\n for (; i < length; i++) if (array[i] === item) return i;\n return -1;\n };\n \n // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n _.lastIndexOf = function(array, item, from) {\n if (array == null) return -1;\n var hasIndex = from != null;\n if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {\n return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);\n }\n var i = (hasIndex ? from : array.length);\n while (i--) if (array[i] === item) return i;\n return -1;\n };\n \n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (arguments.length <= 1) {\n stop = start || 0;\n start = 0;\n }\n step = arguments[2] || 1;\n \n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var idx = 0;\n var range = new Array(length);\n \n while(idx < length) {\n range[idx++] = start;\n start += step;\n }\n \n return range;\n };\n \n // Function (ahem) Functions\n // ------------------\n \n // Reusable constructor function for prototype setting.\n var ctor = function(){};\n \n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n var args, bound;\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError;\n args = slice.call(arguments, 2);\n return bound = function() {\n if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));\n ctor.prototype = func.prototype;\n var self = new ctor;\n ctor.prototype = null;\n var result = func.apply(self, args.concat(slice.call(arguments)));\n if (Object(result) === result) return result;\n return self;\n };\n };\n \n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context.\n _.partial = function(func) {\n var args = slice.call(arguments, 1);\n return function() {\n return func.apply(this, args.concat(slice.call(arguments)));\n };\n };\n \n // Bind all of an object's methods to that object. Useful for ensuring that\n // all callbacks defined on an object belong to it.\n _.bindAll = function(obj) {\n var funcs = slice.call(arguments, 1);\n if (funcs.length === 0) throw new Error(\"bindAll must be passed function names\");\n each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n return obj;\n };\n \n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memo = {};\n hasher || (hasher = _.identity);\n return function() {\n var key = hasher.apply(this, arguments);\n return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n };\n };\n \n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){ return func.apply(null, args); }, wait);\n };\n \n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = function(func) {\n return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n };\n \n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n options || (options = {});\n var later = function() {\n previous = options.leading === false ? 0 : new Date;\n timeout = null;\n result = func.apply(context, args);\n };\n return function() {\n var now = new Date;\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n \n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n return function() {\n context = this;\n args = arguments;\n timestamp = new Date();\n var later = function() {\n var last = (new Date()) - timestamp;\n if (last < wait) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n }\n };\n var callNow = immediate && !timeout;\n if (!timeout) {\n timeout = setTimeout(later, wait);\n }\n if (callNow) result = func.apply(context, args);\n return result;\n };\n };\n \n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = function(func) {\n var ran = false, memo;\n return function() {\n if (ran) return memo;\n ran = true;\n memo = func.apply(this, arguments);\n func = null;\n return memo;\n };\n };\n \n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return function() {\n var args = [func];\n push.apply(args, arguments);\n return wrapper.apply(this, args);\n };\n };\n \n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var funcs = arguments;\n return function() {\n var args = arguments;\n for (var i = funcs.length - 1; i >= 0; i--) {\n args = [funcs[i].apply(this, args)];\n }\n return args[0];\n };\n };\n \n // Returns a function that will only be executed after being called N times.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n \n // Object Functions\n // ----------------\n \n // Retrieve the names of an object's properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = nativeKeys || function(obj) {\n if (obj !== Object(obj)) throw new TypeError('Invalid object');\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n return keys;\n };\n \n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = new Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n \n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = new Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n \n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n \n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n \n // Extend a given object with all the properties in passed-in object(s).\n _.extend = function(obj) {\n each(slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n obj[prop] = source[prop];\n }\n }\n });\n return obj;\n };\n \n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(obj) {\n var copy = {};\n var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n each(keys, function(key) {\n if (key in obj) copy[key] = obj[key];\n });\n return copy;\n };\n \n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj) {\n var copy = {};\n var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n for (var key in obj) {\n if (!_.contains(keys, key)) copy[key] = obj[key];\n }\n return copy;\n };\n \n // Fill in a given object with default properties.\n _.defaults = function(obj) {\n each(slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === void 0) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n };\n \n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n \n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n \n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a == 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className != toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, dates, and booleans are compared by value.\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return a == String(b);\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n // other numeric values.\n return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a == +b;\n // RegExps are compared by their source patterns and flags.\n case '[object RegExp]':\n return a.source == b.source &&\n a.global == b.global &&\n a.multiline == b.multiline &&\n a.ignoreCase == b.ignoreCase;\n }\n if (typeof a != 'object' || typeof b != 'object') return false;\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] == a) return bStack[length] == b;\n }\n // Objects with different constructors are not equivalent, but `Object`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&\n _.isFunction(bCtor) && (bCtor instanceof bCtor))) {\n return false;\n }\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n var size = 0, result = true;\n // Recursively compare objects and arrays.\n if (className == '[object Array]') {\n // Compare array lengths to determine if a deep comparison is necessary.\n size = a.length;\n result = size == b.length;\n if (result) {\n // Deep compare the contents, ignoring non-numeric properties.\n while (size--) {\n if (!(result = eq(a[size], b[size], aStack, bStack))) break;\n }\n }\n } else {\n // Deep compare objects.\n for (var key in a) {\n if (_.has(a, key)) {\n // Count the expected number of properties.\n size++;\n // Deep compare each member.\n if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;\n }\n }\n // Ensure that both objects contain the same number of properties.\n if (result) {\n for (key in b) {\n if (_.has(b, key) && !(size--)) break;\n }\n result = !size;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return result;\n };\n \n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b, [], []);\n };\n \n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n for (var key in obj) if (_.has(obj, key)) return false;\n return true;\n };\n \n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n \n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) == '[object Array]';\n };\n \n // Is a given variable an object?\n _.isObject = function(obj) {\n return obj === Object(obj);\n };\n \n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.\n each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) == '[object ' + name + ']';\n };\n });\n \n // Define a fallback version of the method in browsers (ahem, IE), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return !!(obj && _.has(obj, 'callee'));\n };\n }\n \n // Optimize `isFunction` if appropriate.\n if (typeof (/./) !== 'function') {\n _.isFunction = function(obj) {\n return typeof obj === 'function';\n };\n }\n \n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n \n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj != +obj;\n };\n \n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n };\n \n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n \n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n \n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n \n // Utility Functions\n // -----------------\n \n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n \n // Keep the identity function around for default iterators.\n _.identity = function(value) {\n return value;\n };\n \n // Run a function **n** times.\n _.times = function(n, iterator, context) {\n var accum = Array(Math.max(0, n));\n for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);\n return accum;\n };\n \n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n \n // List of HTML entities for escaping.\n var entityMap = {\n escape: {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n }\n };\n entityMap.unescape = _.invert(entityMap.escape);\n \n // Regexes containing the keys and values listed immediately above.\n var entityRegexes = {\n escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),\n unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')\n };\n \n // Functions for escaping and unescaping strings to/from HTML interpolation.\n _.each(['escape', 'unescape'], function(method) {\n _[method] = function(string) {\n if (string == null) return '';\n return ('' + string).replace(entityRegexes[method], function(match) {\n return entityMap[method][match];\n });\n };\n });\n \n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property) {\n if (object == null) return void 0;\n var value = object[property];\n return _.isFunction(value) ? value.call(object) : value;\n };\n \n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result.call(this, func.apply(_, args));\n };\n });\n };\n \n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n \n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n \n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n \n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\t': 't',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n \n var escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\n \n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n _.template = function(text, data, settings) {\n var render;\n settings = _.defaults({}, settings, _.templateSettings);\n \n // Combine delimiters into one regular expression via alternation.\n var matcher = new RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n \n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset)\n .replace(escaper, function(match) { return '\\\\' + escapes[match]; });\n \n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n }\n if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n }\n if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n index = offset + match.length;\n return match;\n });\n source += \"';\\n\";\n \n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n \n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + \"return __p;\\n\";\n \n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n \n if (data) return render(data, _);\n var template = function(data) {\n return render.call(this, data, _);\n };\n \n // Provide the compiled function source as a convenience for precompilation.\n template.source = 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n \n return template;\n };\n \n // Add a \"chain\" function, which will delegate to the wrapper.\n _.chain = function(obj) {\n return _(obj).chain();\n };\n \n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n \n // Helper function to continue chaining intermediate results.\n var result = function(obj) {\n return this._chain ? _(obj).chain() : obj;\n };\n \n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n \n // Add all mutator Array functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];\n return result.call(this, obj);\n };\n });\n \n // Add all accessor Array functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result.call(this, method.apply(this._wrapped, arguments));\n };\n });\n \n _.extend(_.prototype, {\n \n // Start chaining a wrapped Underscore object.\n chain: function() {\n this._chain = true;\n return this;\n },\n \n // Extracts the result from a wrapped and chained object.\n value: function() {\n return this._wrapped;\n }\n \n });\n \n }).call(this);\n \n /**\n * FOLLOWING LINES MODIFIED BY ATLASSIAN\n * @see https://ecosystem.atlassian.net/browse/AUI-2989\n */\n if (typeof window.define === 'function') {\n define('underscore', [], function(){\n return window._;\n })\n }\n /** END ATLASSIAN */\n \n \n return module.exports;\n}).call(this);\n// src/js/aui/underscore.js\n(typeof window === 'undefined' ? global : window).__1816fd18477a65e315273fac20d1a521 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _underscore = __fca95d046e0f2f1586bf39d6ee6238b5;\n \n var _underscore2 = _interopRequireDefault(_underscore);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n if (!window._) {\n window._ = _underscore2.default;\n }\n \n exports.default = window._;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js-vendor/backbone/backbone.js\n(typeof window === 'undefined' ? global : window).__3b229fbcfafc9447ff048a0ffea793f6 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n var defineDependencies = {\n \"module\": module,\n \"exports\": exports,\n \"underscore\": __fca95d046e0f2f1586bf39d6ee6238b5,\n \"jquery\": __d931c30d7068216ce2c2064d08fd424c,\n \"underscore\": __fca95d046e0f2f1586bf39d6ee6238b5,\n \"jquery\": __d931c30d7068216ce2c2064d08fd424c\n };\n var define = function defineReplacementWrapper(generatedModuleName) {\n return function defineReplacement(name, deps, func) {\n var root = (typeof window === 'undefined' ? global : window);\n var defineGlobal = root.define;\n var rval;\n var type;\n \n func = [func, deps, name].filter(function (cur) {\n return typeof cur === 'function';\n })[0];\n deps = [deps, name, []].filter(Array.isArray)[0];\n rval = func.apply(null, deps.map(function (value) {\n return defineDependencies[value];\n }));\n type = typeof rval;\n \n // Support existing AMD libs.\n if (typeof defineGlobal === 'function') {\n // Almond always expects a name so resolve one (#29).\n defineGlobal(typeof name === 'string' ? name : generatedModuleName, deps, func);\n }\n \n // Some processors like Babel don't check to make sure that the module value\n // is not a primitive before calling Object.defineProperty() on it. We ensure\n // it is an instance so that it can.\n if (type === 'string') {\n rval = String(rval);\n } else if (type === 'number') {\n rval = Number(rval);\n } else if (type === 'boolean') {\n rval = Boolean(rval);\n }\n \n // Reset the exports to the defined module. This is how we convert AMD to\n // CommonJS and ensures both can either co-exist, or be used separately. We\n // only set it if it is not defined because there is no object representation\n // of undefined, thus calling Object.defineProperty() on it would fail.\n if (rval !== undefined) {\n exports = module.exports = rval;\n }\n };\n }(\"__3b229fbcfafc9447ff048a0ffea793f6\");\n define.amd = true;\n \n /*! THIS FILE HAS BEEN MODIFIED BY ATLASSIAN. Modified lines are marked below, search \"ATLASSIAN\" */\n // Backbone.js 1.0.0\n \n // (c) 2010-2013 Jeremy Ashkenas, DocumentCloud Inc.\n // Backbone may be freely distributed under the MIT license.\n // For all details and documentation:\n // http://backbonejs.org\n \n /**\n * FOLLOWING LINES MODIFIED BY ATLASSIAN\n * This is a modification of the UMD wrapper used in Backbone 1.1.x\n * @see https://ecosystem.atlassian.net/browse/AUI-2989\n */\n (function(root, factory) {\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n \n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = __fca95d046e0f2f1586bf39d6ee6238b5, $;\n try { $ = __d931c30d7068216ce2c2064d08fd424c; } catch(e) {}\n factory(root, exports, _, $);\n \n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n }\n \n }(this, function(root, Backbone, _, $) {\n /** END ATLASSIAN */\n \n // Initial Setup\n // -------------\n \n // Save a reference to the global object (`window` in the browser, `exports`\n // on the server).\n var root = this;\n \n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n \n // Create local references to array methods we'll want to use later.\n var array = [];\n var push = array.push;\n var slice = array.slice;\n var splice = array.splice;\n \n /**\n * FOLLOWING LINES REMOVED BY ATLASSIAN\n * These are superseded by the UMD wrapper above.\n * @see https://ecosystem.atlassian.net/browse/AUI-2989\n *\n * // The top-level namespace. All public Backbone classes and modules will\n * // be attached to this. Exported for both the browser and the server.\n * var Backbone;\n * if (typeof exports !== 'undefined') {\n * Backbone = exports;\n * } else {\n * Backbone = root.Backbone = {};\n * }\n *\n */\n \n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.0.0';\n \n /**\n * FOLLOWING LINES REMOVED BY ATLASSIAN\n * These are superseded by the UMD wrapper above.\n * @see https://ecosystem.atlassian.net/browse/AUI-2989\n *\n *\n * // Require Underscore, if we're on the server, and it's not already present.\n * var _ = root._;\n *\n * if (!_ && (typeof require !== 'undefined')) _ = __fca95d046e0f2f1586bf39d6ee6238b5;\n *\n /** END ATLASSIAN */\n \n /*\n * FOLLOWING LINES MODIFIED BY ATLASSIAN\n * These are superseded by the UMD wrapper above.\n */\n \n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n \n /** END ATLASSIAN */\n \n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n \n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n \n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n \n // Backbone.Events\n // ---------------\n \n // A module that can be mixed in to *any object* in order to provide it with\n // custom events. You may bind with `on` or remove with `off` callback\n // functions to an event; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {\n \n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n on: function(name, callback, context) {\n if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;\n this._events || (this._events = {});\n var events = this._events[name] || (this._events[name] = []);\n events.push({callback: callback, context: context, ctx: context || this});\n return this;\n },\n \n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, it will be removed.\n once: function(name, callback, context) {\n if (!eventsApi(this, 'once', name, [callback, context]) || !callback) return this;\n var self = this;\n var once = _.once(function() {\n self.off(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n return this.on(name, once, context);\n },\n \n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n off: function(name, callback, context) {\n var retain, ev, events, names, i, l, j, k;\n if (!this._events || !eventsApi(this, 'off', name, [callback, context])) return this;\n if (!name && !callback && !context) {\n this._events = {};\n return this;\n }\n \n names = name ? [name] : _.keys(this._events);\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (events = this._events[name]) {\n this._events[name] = retain = [];\n if (callback || context) {\n for (j = 0, k = events.length; j < k; j++) {\n ev = events[j];\n if ((callback && callback !== ev.callback && callback !== ev.callback._callback) ||\n (context && context !== ev.context)) {\n retain.push(ev);\n }\n }\n }\n if (!retain.length) delete this._events[name];\n }\n }\n \n return this;\n },\n \n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n trigger: function(name) {\n if (!this._events) return this;\n var args = slice.call(arguments, 1);\n if (!eventsApi(this, 'trigger', name, args)) return this;\n var events = this._events[name];\n var allEvents = this._events.all;\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, arguments);\n return this;\n },\n \n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n stopListening: function(obj, name, callback) {\n var listeners = this._listeners;\n if (!listeners) return this;\n var deleteListener = !name && !callback;\n if (typeof name === 'object') callback = this;\n if (obj) (listeners = {})[obj._listenerId] = obj;\n for (var id in listeners) {\n listeners[id].off(name, callback, this);\n if (deleteListener) delete this._listeners[id];\n }\n return this;\n }\n \n };\n \n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n \n // Implement fancy features of the Events API such as multiple event\n // names `\"change blur\"` and jQuery-style event maps `{change: action}`\n // in terms of the existing API.\n var eventsApi = function(obj, action, name, rest) {\n if (!name) return true;\n \n // Handle event maps.\n if (typeof name === 'object') {\n for (var key in name) {\n obj[action].apply(obj, [key, name[key]].concat(rest));\n }\n return false;\n }\n \n // Handle space separated event names.\n if (eventSplitter.test(name)) {\n var names = name.split(eventSplitter);\n for (var i = 0, l = names.length; i < l; i++) {\n obj[action].apply(obj, [names[i]].concat(rest));\n }\n return false;\n }\n \n return true;\n };\n \n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);\n }\n };\n \n var listenMethods = {listenTo: 'on', listenToOnce: 'once'};\n \n // Inversion-of-control versions of `on` and `once`. Tell *this* object to\n // listen to an event in another object ... keeping track of what it's\n // listening to.\n _.each(listenMethods, function(implementation, method) {\n Events[method] = function(obj, name, callback) {\n var listeners = this._listeners || (this._listeners = {});\n var id = obj._listenerId || (obj._listenerId = _.uniqueId('l'));\n listeners[id] = obj;\n if (typeof name === 'object') callback = this;\n obj[implementation](name, callback, this);\n return this;\n };\n });\n \n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n \n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n \n // Backbone.Model\n // --------------\n \n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n \n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var defaults;\n var attrs = attributes || {};\n options || (options = {});\n this.cid = _.uniqueId('c');\n this.attributes = {};\n _.extend(this, _.pick(options, modelOptions));\n if (options.parse) attrs = this.parse(attrs, options) || {};\n if (defaults = _.result(this, 'defaults')) {\n attrs = _.defaults({}, attrs, defaults);\n }\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n \n // A list of options to be attached directly to the model, if provided.\n var modelOptions = ['url', 'urlRoot', 'collection'];\n \n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n \n // A hash of attributes whose current and previous value differ.\n changed: null,\n \n // The value returned during the last failed validation.\n validationError: null,\n \n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n \n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n \n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n \n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n \n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n \n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n \n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n \n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n var attr, attrs, unset, changes, silent, changing, prev, current;\n if (key == null) return this;\n \n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n \n options || (options = {});\n \n // Run validation.\n if (!this._validate(attrs, options)) return false;\n \n // Extract attributes and options.\n unset = options.unset;\n silent = options.silent;\n changes = [];\n changing = this._changing;\n this._changing = true;\n \n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n current = this.attributes, prev = this._previousAttributes;\n \n // Check for changes of `id`.\n if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];\n \n // For each `set` attribute, update or delete the current value.\n for (attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n this.changed[attr] = val;\n } else {\n delete this.changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n \n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = true;\n for (var i = 0, l = changes.length; i < l; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n \n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n \n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n \n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n \n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n \n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var val, changed = false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n for (var attr in diff) {\n if (_.isEqual(old[attr], (val = diff[attr]))) continue;\n (changed || (changed = {}))[attr] = val;\n }\n return changed;\n },\n \n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n \n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n \n // Fetch the model from the server. If the server's representation of the\n // model differs from its current attributes, they will be overridden,\n // triggering a `\"change\"` event.\n fetch: function(options) {\n options = options ? _.clone(options) : {};\n if (options.parse === void 0) options.parse = true;\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n if (!model.set(model.parse(resp, options), options)) return false;\n if (success) success(model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n \n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n var attrs, method, xhr, attributes = this.attributes;\n \n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n \n // If we're not waiting and attributes exist, save acts as `set(attr).save(null, opts)`.\n if (attrs && (!options || !options.wait) && !this.set(attrs, options)) return false;\n \n options = _.extend({validate: true}, options);\n \n // Do not persist invalid models.\n if (!this._validate(attrs, options)) return false;\n \n // Set temporary attributes if `{wait: true}`.\n if (attrs && options.wait) {\n this.attributes = _.extend({}, attributes, attrs);\n }\n \n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n if (options.parse === void 0) options.parse = true;\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = model.parse(resp, options);\n if (options.wait) serverAttrs = _.extend(attrs || {}, serverAttrs);\n if (_.isObject(serverAttrs) && !model.set(serverAttrs, options)) {\n return false;\n }\n if (success) success(model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n \n method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n if (method === 'patch') options.attrs = attrs;\n xhr = this.sync(method, this, options);\n \n // Restore attributes.\n if (attrs && options.wait) this.attributes = attributes;\n \n return xhr;\n },\n \n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n \n var destroy = function() {\n model.trigger('destroy', model, model.collection, options);\n };\n \n options.success = function(resp) {\n if (options.wait || model.isNew()) destroy();\n if (success) success(model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n \n if (this.isNew()) {\n options.success();\n return false;\n }\n wrapError(this, options);\n \n var xhr = this.sync('delete', this, options);\n if (!options.wait) destroy();\n return xhr;\n },\n \n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError();\n if (this.isNew()) return base;\n return base + (base.charAt(base.length - 1) === '/' ? '' : '/') + encodeURIComponent(this.id);\n },\n \n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n \n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n \n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return this.id == null;\n },\n \n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend(options || {}, { validate: true }));\n },\n \n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options || {}, {validationError: error}));\n return false;\n }\n \n });\n \n // Underscore methods that we want to implement on the Model.\n var modelMethods = ['keys', 'values', 'pairs', 'invert', 'pick', 'omit'];\n \n // Mix in each Underscore method as a proxy to `Model#attributes`.\n _.each(modelMethods, function(method) {\n Model.prototype[method] = function() {\n var args = slice.call(arguments);\n args.unshift(this.attributes);\n return _[method].apply(_, args);\n };\n });\n \n // Backbone.Collection\n // -------------------\n \n // If models tend to represent a single row of data, a Backbone Collection is\n // more analagous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n \n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n if (options.url) this.url = options.url;\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n \n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, merge: false, remove: false};\n \n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n \n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n \n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n \n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model){ return model.toJSON(options); });\n },\n \n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n \n // Add a model, or list of models to the set.\n add: function(models, options) {\n return this.set(models, _.defaults(options || {}, addOptions));\n },\n \n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n models = _.isArray(models) ? models.slice() : [models];\n options || (options = {});\n var i, l, index, model;\n for (i = 0, l = models.length; i < l; i++) {\n model = this.get(models[i]);\n if (!model) continue;\n delete this._byId[model.id];\n delete this._byId[model.cid];\n index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n this._removeReference(model);\n }\n return this;\n },\n \n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n options = _.defaults(options || {}, setOptions);\n if (options.parse) models = this.parse(models, options);\n if (!_.isArray(models)) models = models ? [models] : [];\n var i, l, model, attrs, existing, sort;\n var at = options.at;\n var sortable = this.comparator && (at == null) && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n var toAdd = [], toRemove = [], modelMap = {};\n \n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n for (i = 0, l = models.length; i < l; i++) {\n if (!(model = this._prepareModel(models[i], options))) continue;\n \n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n if (existing = this.get(model)) {\n if (options.remove) modelMap[existing.cid] = true;\n if (options.merge) {\n existing.set(model.attributes, options);\n if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true;\n }\n \n // This is a new model, push it to the `toAdd` list.\n } else if (options.add) {\n toAdd.push(model);\n \n // Listen to added models' events, and index models for lookup by\n // `id` and by `cid`.\n model.on('all', this._onModelEvent, this);\n this._byId[model.cid] = model;\n if (model.id != null) this._byId[model.id] = model;\n }\n }\n \n // Remove nonexistent models if appropriate.\n if (options.remove) {\n for (i = 0, l = this.length; i < l; ++i) {\n if (!modelMap[(model = this.models[i]).cid]) toRemove.push(model);\n }\n if (toRemove.length) this.remove(toRemove, options);\n }\n \n // See if sorting is needed, update `length` and splice in new models.\n if (toAdd.length) {\n if (sortable) sort = true;\n this.length += toAdd.length;\n if (at != null) {\n splice.apply(this.models, [at, 0].concat(toAdd));\n } else {\n push.apply(this.models, toAdd);\n }\n }\n \n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n \n if (options.silent) return this;\n \n // Trigger `add` events.\n for (i = 0, l = toAdd.length; i < l; i++) {\n (model = toAdd[i]).trigger('add', model, this, options);\n }\n \n // Trigger `sort` if the collection was sorted.\n if (sort) this.trigger('sort', this, options);\n return this;\n },\n \n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options || (options = {});\n for (var i = 0, l = this.models.length; i < l; i++) {\n this._removeReference(this.models[i]);\n }\n options.previousModels = this.models;\n this._reset();\n this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return this;\n },\n \n // Add a model to the end of the collection.\n push: function(model, options) {\n model = this._prepareModel(model, options);\n this.add(model, _.extend({at: this.length}, options));\n return model;\n },\n \n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n this.remove(model, options);\n return model;\n },\n \n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n model = this._prepareModel(model, options);\n this.add(model, _.extend({at: 0}, options));\n return model;\n },\n \n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n this.remove(model, options);\n return model;\n },\n \n // Slice out a sub-array of models from the collection.\n slice: function(begin, end) {\n return this.models.slice(begin, end);\n },\n \n // Get a model from the set by id.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj.id != null ? obj.id : obj.cid || obj];\n },\n \n // Get the model at the given index.\n at: function(index) {\n return this.models[index];\n },\n \n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n if (_.isEmpty(attrs)) return first ? void 0 : [];\n return this[first ? 'find' : 'filter'](function(model) {\n for (var key in attrs) {\n if (attrs[key] !== model.get(key)) return false;\n }\n return true;\n });\n },\n \n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n \n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n if (!this.comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n \n // Run sort based on type of `comparator`.\n if (_.isString(this.comparator) || this.comparator.length === 1) {\n this.models = this.sortBy(this.comparator, this);\n } else {\n this.models.sort(_.bind(this.comparator, this));\n }\n \n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n \n // Figure out the smallest index at which a model should be inserted so as\n // to maintain order.\n sortedIndex: function(model, value, context) {\n value || (value = this.comparator);\n var iterator = _.isFunction(value) ? value : function(model) {\n return model.get(value);\n };\n return _.sortedIndex(this.models, model, iterator, context);\n },\n \n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return _.invoke(this.models, 'get', attr);\n },\n \n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = options ? _.clone(options) : {};\n if (options.parse === void 0) options.parse = true;\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success(collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n \n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n if (!(model = this._prepareModel(model, options))) return false;\n if (!options.wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n // ATLASSIAN CHANGES DUE TO: https://ecosystem.atlassian.net/browse/AUI-1787\n // FOLLOWING LINE REMOVED BY ATLASSIAN\n // options.success = function(resp) {\n // FOLLOWING LINE ADDED BY ATLASSIAN\n options.success = function(model, resp, options) {\n if (options.wait) collection.add(model, options);\n if (success) success(model, resp, options);\n };\n model.save(null, options);\n return model;\n },\n \n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n \n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models);\n },\n \n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n \n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (attrs instanceof Model) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options || (options = {});\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model._validate(attrs, options)) {\n this.trigger('invalid', this, attrs, options);\n return false;\n }\n return model;\n },\n \n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model) {\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n \n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (model && event === 'change:' + model.idAttribute) {\n delete this._byId[model.previous(model.idAttribute)];\n if (model.id != null) this._byId[model.id] = model;\n }\n this.trigger.apply(this, arguments);\n }\n \n });\n \n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var methods = ['forEach', 'each', 'map', 'collect', 'reduce', 'foldl',\n 'inject', 'reduceRight', 'foldr', 'find', 'detect', 'filter', 'select',\n 'reject', 'every', 'all', 'some', 'any', 'include', 'contains', 'invoke',\n 'max', 'min', 'toArray', 'size', 'first', 'head', 'take', 'initial', 'rest',\n 'tail', 'drop', 'last', 'without', 'indexOf', 'shuffle', 'lastIndexOf',\n 'isEmpty', 'chain'];\n \n // Mix in each Underscore method as a proxy to `Collection#models`.\n _.each(methods, function(method) {\n Collection.prototype[method] = function() {\n var args = slice.call(arguments);\n args.unshift(this.models);\n return _[method].apply(_, args);\n };\n });\n \n // Underscore methods that take a property name as an argument.\n var attributeMethods = ['groupBy', 'countBy', 'sortBy'];\n \n // Use attributes instead of properties.\n _.each(attributeMethods, function(method) {\n Collection.prototype[method] = function(value, context) {\n var iterator = _.isFunction(value) ? value : function(model) {\n return model.get(value);\n };\n return _[method](this.models, iterator, context);\n };\n });\n \n // Backbone.View\n // -------------\n \n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n \n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this._configure(options || {});\n this._ensureElement();\n this.initialize.apply(this, arguments);\n this.delegateEvents();\n };\n \n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n \n // List of view options to be merged as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n \n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n \n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n \n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be prefered to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n \n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n \n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n \n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this.$el.remove();\n this.stopListening();\n return this;\n },\n \n // Change the view's element (`this.el` property), including event\n // re-delegation.\n setElement: function(element, delegate) {\n if (this.$el) this.undelegateEvents();\n this.$el = element instanceof Backbone.$ ? element : Backbone.$(element);\n this.el = this.$el[0];\n if (delegate !== false) this.delegateEvents();\n return this;\n },\n \n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save'\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n // This only works for delegate-able events: not `focus`, `blur`, and\n // not `change`, `submit`, and `reset` in Internet Explorer.\n delegateEvents: function(events) {\n if (!(events || (events = _.result(this, 'events')))) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[events[key]];\n if (!method) continue;\n \n var match = key.match(delegateEventSplitter);\n var eventName = match[1], selector = match[2];\n method = _.bind(method, this);\n eventName += '.delegateEvents' + this.cid;\n if (selector === '') {\n this.$el.on(eventName, method);\n } else {\n this.$el.on(eventName, selector, method);\n }\n }\n return this;\n },\n \n // Clears all callbacks previously bound to the view with `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n \n // Performs the initial configuration of a View with a set of options.\n // Keys with special meaning *(e.g. model, collection, id, className)* are\n // attached directly to the view. See `viewOptions` for an exhaustive\n // list.\n _configure: function(options) {\n if (this.options) options = _.extend({}, _.result(this, 'options'), options);\n _.extend(this, _.pick(options, viewOptions));\n this.options = options;\n },\n \n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n var $el = Backbone.$('<' + _.result(this, 'tagName') + '>').attr(attrs);\n this.setElement($el, false);\n } else {\n this.setElement(_.result(this, 'el'), false);\n }\n }\n \n });\n \n // Backbone.sync\n // -------------\n \n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n \n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n \n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n \n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n \n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n \n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n \n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n \n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n \n // If we're sending a `PATCH` request, and we're in an old Internet Explorer\n // that still has ActiveX enabled by default, override jQuery to use that\n // for XHR instead. Remove this line when jQuery supports `PATCH` on IE8.\n if (params.type === 'PATCH' && window.ActiveXObject &&\n !(window.external && window.external.msActiveXFilteringEnabled)) {\n params.xhr = function() {\n return new ActiveXObject(\"Microsoft.XMLHTTP\");\n };\n }\n \n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n \n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n \n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n \n // Backbone.Router\n // ---------------\n \n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n \n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n \n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n \n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n \n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n callback && callback.apply(router, args);\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n });\n return this;\n },\n \n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n \n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n \n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional){\n return optional ? match : '([^\\/]+)';\n })\n .replace(splatParam, '(.*?)');\n return new RegExp('^' + route + '$');\n },\n \n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param) {\n return param ? decodeURIComponent(param) : null;\n });\n }\n \n });\n \n // Backbone.History\n // ----------------\n \n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n _.bindAll(this, 'checkUrl');\n \n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n \n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n \n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n \n // Cached regex for detecting MSIE.\n var isExplorer = /msie [\\w.]+/;\n \n // Cached regex for removing a trailing slash.\n var trailingSlash = /\\/$/;\n \n // Has the history handling already been started?\n History.started = false;\n \n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n \n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n \n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n \n // Get the cross-browser normalized URL fragment, either from the URL,\n // the hash, or the override.\n getFragment: function(fragment, forcePushState) {\n if (fragment == null) {\n if (this._hasPushState || !this._wantsHashChange || forcePushState) {\n fragment = this.location.pathname;\n var root = this.root.replace(trailingSlash, '');\n if (!fragment.indexOf(root)) fragment = fragment.substr(root.length);\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n \n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error(\"Backbone.history has already been started\");\n History.started = true;\n \n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({}, {root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.options.pushState && this.history && this.history.pushState);\n var fragment = this.getFragment();\n var docMode = document.documentMode;\n var oldIE = (isExplorer.exec(navigator.userAgent.toLowerCase()) && (!docMode || docMode <= 7));\n \n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n \n if (oldIE && this._wantsHashChange) {\n this.iframe = Backbone.$('<iframe src=\"javascript:0\" tabindex=\"-1\" />').hide().appendTo('body')[0].contentWindow;\n this.navigate(fragment);\n }\n \n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._hasPushState) {\n Backbone.$(window).on('popstate', this.checkUrl);\n } else if (this._wantsHashChange && ('onhashchange' in window) && !oldIE) {\n Backbone.$(window).on('hashchange', this.checkUrl);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n \n // Determine if we need to change the base url, for a pushState link\n // opened by a non-pushState browser.\n this.fragment = fragment;\n var loc = this.location;\n var atRoot = loc.pathname.replace(/[^\\/]$/, '$&/') === this.root;\n \n // If we've started off with a route from a `pushState`-enabled browser,\n // but we're currently in a browser that doesn't support it...\n if (this._wantsHashChange && this._wantsPushState && !this._hasPushState && !atRoot) {\n this.fragment = this.getFragment(null, true);\n this.location.replace(this.root + this.location.search + '#' + this.fragment);\n // Return immediately as browser will do redirect to new url\n return true;\n \n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._wantsPushState && this._hasPushState && atRoot && loc.hash) {\n this.fragment = this.getHash().replace(routeStripper, '');\n this.history.replaceState({}, document.title, this.root + this.fragment + loc.search);\n }\n \n if (!this.options.silent) return this.loadUrl();\n },\n \n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n Backbone.$(window).off('popstate', this.checkUrl).off('hashchange', this.checkUrl);\n clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n \n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n \n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n if (current === this.fragment && this.iframe) {\n current = this.getFragment(this.getHash(this.iframe));\n }\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl() || this.loadUrl(this.getHash());\n },\n \n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragmentOverride) {\n var fragment = this.fragment = this.getFragment(fragmentOverride);\n var matched = _.any(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n return matched;\n },\n \n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: options};\n fragment = this.getFragment(fragment || '');\n if (this.fragment === fragment) return;\n this.fragment = fragment;\n var url = this.root + fragment;\n \n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._hasPushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n \n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && (fragment !== this.getFragment(this.getHash(this.iframe)))) {\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if(!options.replace) this.iframe.document.open().close();\n this._updateHash(this.iframe.location, fragment, options.replace);\n }\n \n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) this.loadUrl(fragment);\n },\n \n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n \n });\n \n // Create the default Backbone.history.\n Backbone.history = new History;\n \n // Helpers\n // -------\n \n // Helper function to correctly set up the prototype chain, for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n \n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent's constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n \n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n \n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function.\n var Surrogate = function(){ this.constructor = child; };\n Surrogate.prototype = parent.prototype;\n child.prototype = new Surrogate;\n \n // Add prototype properties (instance properties) to the subclass,\n // if supplied.\n if (protoProps) _.extend(child.prototype, protoProps);\n \n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n \n return child;\n };\n \n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n \n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n \n // Wrap an optional error callback with a fallback error event.\n var wrapError = function (model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error(model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n \n /**\n * FOLLOWING LINES MODIFIED BY ATLASSIAN\n * This is a modification of the UMD wrapper used in Backbone 1.1.x\n * @see https://ecosystem.atlassian.net/browse/AUI-2989\n */\n return Backbone;\n /** END ATLASSIAN */\n \n }));\n \n \n return module.exports;\n}).call(this);\n// src/js/aui/backbone.js\n(typeof window === 'undefined' ? global : window).__f6766346ba0156e0f5df37462b77c757 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _underscore = __1816fd18477a65e315273fac20d1a521;\n \n var _underscore2 = _interopRequireDefault(_underscore);\n \n var _backbone = __3b229fbcfafc9447ff048a0ffea793f6;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n // BEWARE: The following is an unused import with side-effects\n \n \n if (!window.Backbone) {\n window.Backbone = _backbone2.default;\n } // eslint-disable-line no-unused-vars\n \n \n exports.default = window.Backbone;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/progressive-data-set.js\n(typeof window === 'undefined' ? global : window).__a03b25e4ce5f598de7c115490c1f7f77 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _underscore = __1816fd18477a65e315273fac20d1a521;\n \n var _underscore2 = _interopRequireDefault(_underscore);\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n /**\n * @fileOverview describes a ProgressiveDataSet object.\n *\n * This object serves as part of a series of components to handle the various aspects of autocomplete controls.\n */\n var ProgressiveDataSet = _backbone2.default.Collection.extend({\n /**\n * A queryable set of data that optimises the speed at which responses can be provided.\n *\n * ProgressiveDataSet should be given a matcher function so that it may filter results for queries locally.\n *\n * ProgressiveDataSet can be given a remote query endpoint to fetch data from. Should a remote endpoint\n * be provided, ProgressiveDataSet will leverage both client-side matching and query caching to reduce\n * the number of times the remote source need be queried.\n *\n * @example\n * var source = new ProgressiveDataSet([], {\n * model: Backbone.Model.extend({ idAttribute: \"username\" }),\n * queryEndpoint: \"/jira/rest/latest/users\",\n * queryParamKey: \"username\",\n * matcher: function(model, query) {\n * return _.startsWith(model.get('username'), query);\n * }\n * });\n * source.on('respond', doStuffWithMatchingResults);\n * source.query('john');\n *\n * @property {String} value the latest query for which the ProgressiveDataSet is responding to.\n * @property {Number} activeQueryCount the number of queries being run remotely.\n */\n initialize: function initialize(models, options) {\n options || (options = {});\n if (options.matcher) {\n this.matcher = options.matcher;\n }\n if (options.model) {\n this.model = options.model; // Fixed in backbone 0.9.2\n }\n this._idAttribute = new this.model().idAttribute;\n this._maxResults = options.maxResults || 5;\n this._queryData = options.queryData || {};\n this._queryParamKey = options.queryParamKey || 'q';\n this._queryEndpoint = options.queryEndpoint || '';\n this.value = null;\n this.queryCache = {};\n this.activeQueryCount = 0;\n _underscore2.default.bindAll(this, 'query', 'respond');\n },\n \n url: function url() {\n return this._queryEndpoint;\n },\n \n /**\n * Sets and runs a query against the ProgressiveDataSet.\n *\n * Bind to ProgressiveDataSet's 'respond' event to receive the results that match the latest query.\n *\n * @param {String} query the query to run.\n */\n query: function query(_query) {\n var remote;\n var results;\n \n this.value = _query;\n results = this.getFilteredResults(_query);\n this.respond(_query, results);\n \n if (!_query || !this._queryEndpoint || this.hasQueryCache(_query) || !this.shouldGetMoreResults(results)) {\n return;\n }\n \n remote = this.fetch(_query);\n \n this.activeQueryCount++;\n this.trigger('activity', { activity: true });\n remote.always(_underscore2.default.bind(function () {\n this.activeQueryCount--;\n this.trigger('activity', { activity: !!this.activeQueryCount });\n }, this));\n \n remote.done(_underscore2.default.bind(function (resp, succ, xhr) {\n this.addQueryCache(_query, resp, xhr);\n }, this));\n remote.done(_underscore2.default.bind(function () {\n _query = this.value;\n results = this.getFilteredResults(_query);\n this.respond(_query, results);\n }, this));\n },\n \n /**\n * Gets all the data that should be sent in a remote request for data.\n * @param {String} query the value of the query to be run.\n * @return {Object} the data to to be sent to the remote when querying it.\n * @private\n */\n getQueryData: function getQueryData(query) {\n var params = _underscore2.default.isFunction(this._queryData) ? this._queryData(query) : this._queryData;\n var data = _underscore2.default.extend({}, params);\n data[this._queryParamKey] = query;\n return data;\n },\n \n /**\n * Get data from a remote source that matches the query, and add it to this ProgressiveDataSet's set.\n *\n * @param {String} query the value of the query to be run.\n * @return {jQuery.Deferred} a deferred object representing the remote request.\n */\n fetch: function fetch(query) {\n var data = this.getQueryData(query);\n // {add: true} for Backbone <= 0.9.2\n // {update: true, remove: false} for Backbone >= 0.9.9\n var params = { add: true, update: true, remove: false, data: data };\n var remote = _backbone2.default.Collection.prototype.fetch.call(this, params);\n return remote;\n },\n \n /**\n * Triggers the 'respond' event on this ProgressiveDataSet for the given query and associated results.\n *\n * @param {String} query the query that was run\n * @param {Array} results a set of results that matched the query.\n * @return {Array} the results.\n * @private\n */\n respond: function respond(query, results) {\n this.trigger('respond', {\n query: query,\n results: results\n });\n return results;\n },\n \n /**\n * A hook-point to define a function that tests whether a model matches a query or not.\n *\n * This will be called by getFilteredResults in order to generate the list of results for a query.\n *\n * (For you java folks, it's essentially a predicate.)\n *\n * @param {Backbone.Model} item a model of the data to check for a match in.\n * @param {String} query the value to test against the item.\n * @returns {Boolean} true if the model matches the query, otherwise false.\n * @function\n */\n matcher: function matcher(item, query) {}, // eslint-disable-line no-unused-vars\n \n /**\n * Filters the set of data contained by the ProgressiveDataSet down to a smaller set of results.\n *\n * The set will only consist of Models that \"match\" the query -- i.e., only Models where\n * a call to ProgressiveDataSet#matcher returns true.\n *\n * @param query {String} the value that results should match (according to the matcher function)\n * @return {Array} A set of Backbone Models that match the query.\n */\n getFilteredResults: function getFilteredResults(query) {\n var results = [];\n if (!query) {\n return results;\n }\n results = this.filter(function (item) {\n return !!this.matcher(item, query);\n }, this);\n if (this._maxResults) {\n results = _underscore2.default.first(results, this._maxResults);\n }\n return results;\n },\n \n /**\n * Store a response in the query cache for a given query.\n *\n * @param {String} query the value to cache a response for.\n * @param {Object} response the data of the response from the server.\n * @param {XMLHttpRequest} xhr\n * @private\n */\n addQueryCache: function addQueryCache(query, response, xhr) {\n var cache = this.queryCache;\n var results = this.parse(response, xhr);\n cache[query] = _underscore2.default.pluck(results, this._idAttribute);\n },\n \n /**\n * Check if there is a query cache entry for a given query.\n *\n * @param query the value to check in the cache\n * @return {Boolean} true if the cache contains a response for the query, false otherwise.\n */\n hasQueryCache: function hasQueryCache(query) {\n return this.queryCache.hasOwnProperty(query);\n },\n \n /**\n * Get the query cache entry for a given query.\n *\n * @param query the value to check in the cache\n * @return {Object[]} an array of values representing the IDs of the models the response for this query contained.\n */\n findQueryCache: function findQueryCache(query) {\n return this.queryCache[query];\n },\n \n /**\n *\n * @param {Array} results the set of results we know about right now.\n * @return {Boolean} true if the ProgressiveDataSet should look for more results.\n * @private\n */\n shouldGetMoreResults: function shouldGetMoreResults(results) {\n return results.length < this._maxResults;\n },\n \n /**\n *\n * @note Changing this value will trigger ProgressiveDataSet#event:respond if there is a query.\n * @param {Number} number how many results should the ProgressiveDataSet aim to retrieve for a query.\n */\n setMaxResults: function setMaxResults(number) {\n this._maxResults = number;\n this.value && this.respond(this.value, this.getFilteredResults(this.value));\n }\n });\n \n (0, _globalize2.default)('ProgressiveDataSet', ProgressiveDataSet);\n \n exports.default = ProgressiveDataSet;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/query-input.js\n(typeof window === 'undefined' ? global : window).__665570ba732d53931c48c1932daa79b3 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _underscore = __1816fd18477a65e315273fac20d1a521;\n \n var _underscore2 = _interopRequireDefault(_underscore);\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var QueryInput = _backbone2.default.View.extend({\n initialize: function initialize() {\n _underscore2.default.bindAll(this, 'changed', 'val');\n this._lastValue = this.val();\n this.$el.bind('keyup focus', this.changed);\n },\n \n val: function val() {\n return this.$el.val.apply(this.$el, arguments);\n },\n \n changed: function changed() {\n if (this._lastValue !== this.val()) {\n this.trigger('change', this.val());\n this._lastValue = this.val();\n }\n }\n });\n \n (0, _globalize2.default)('QueryInput', QueryInput);\n \n exports.default = QueryInput;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/class-names.js\n(typeof window === 'undefined' ? global : window).__d8ac1814d07f8a2adba730caeaf06f0c = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.default = {\n NO_VALUE: 'aui-restfultable-editable-no-value',\n NO_ENTRIES: 'aui-restfultable-no-entires',\n RESTFUL_TABLE: 'aui-restfultable',\n ROW: 'aui-restfultable-row',\n READ_ONLY: 'aui-restfultable-readonly',\n ACTIVE: 'aui-restfultable-active',\n ALLOW_HOVER: 'aui-restfultable-allowhover',\n FOCUSED: 'aui-restfultable-focused',\n MOVEABLE: 'aui-restfultable-movable',\n DISABLED: 'aui-restfultable-disabled',\n SUBMIT: 'aui-restfultable-submit',\n CANCEL: 'aui-restfultable-cancel',\n EDIT_ROW: 'aui-restfultable-editrow',\n CREATE: 'aui-restfultable-create',\n DRAG_HANDLE: 'aui-restfultable-draghandle',\n ORDER: 'aui-restfultable-order',\n EDITABLE: 'aui-restfultable-editable',\n ERROR: 'error',\n DELETE: 'aui-restfultable-delete',\n LOADING: 'loading'\n };\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/custom-create-view.js\n(typeof window === 'undefined' ? global : window).__3d3ee2d5f078603e7827662e6100a1e3 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n exports.default = _backbone2.default.View;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/custom-edit-view.js\n(typeof window === 'undefined' ? global : window).__cb8a9c5f34bd5d986e16e83ccabf13f6 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n exports.default = _backbone2.default.View;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/custom-read-view.js\n(typeof window === 'undefined' ? global : window).__13c9d24e0a422b9e76894cf8a78895c4 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n exports.default = _backbone2.default.View;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/data-keys.js\n(typeof window === 'undefined' ? global : window).__d51574a21b407cffa327c40f8b943e4f = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.default = {\n ENABLED_SUBMIT: 'enabledSubmit',\n ROW_VIEW: 'RestfulTable_Row_View'\n };\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js-vendor/jquery/serializetoobject.js\n(typeof window === 'undefined' ? global : window).__7caa2633dbde714d8fb6843d7a667791 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n /**\n * Serializes form fields within the given element to a JSON object\n *\n * {\n * fieldName: \"fieldValue\"\n * }\n *\n * @returns {Object}\n */\n jQuery.fn.serializeObject = function () {\n \n var data = {};\n \n this.find(\":input:not(:button):not(:submit):not(:radio):not('select[multiple]')\").each(function () {\n \n if (this.name === \"\") {\n return;\n }\n \n if (this.value === null) {\n this.value = \"\";\n }\n \n data[this.name] = this.value.match(/^(tru|fals)e$/i) ?\n this.value.toLowerCase() == \"true\" : this.value;\n });\n \n this.find(\"input:radio:checked\").each(function(){\n data[this.name] = this.value;\n });\n \n this.find(\"select[multiple]\").each(function(){\n \n var $select = jQuery(this),\n val = $select.val();\n \n if ($select.data(\"aui-ss\")) {\n if (val) {\n data[this.name] = val[0];\n } else {\n data[this.name] = \"\";\n }\n } else {\n \n if (val !== null) {\n data[this.name] = val;\n } else {\n data[this.name] = [];\n }\n }\n });\n \n return data;\n };\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/events.js\n(typeof window === 'undefined' ? global : window).__466e8a577c51260162a1ef88604d874c = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.default = {\n // AJS\n REORDER_SUCCESS: 'RestfulTable.reorderSuccess',\n ROW_ADDED: 'RestfulTable.rowAdded',\n ROW_REMOVED: 'RestfulTable.rowRemoved',\n EDIT_ROW: 'RestfulTable.switchedToEditMode',\n SERVER_ERROR: 'RestfulTable.serverError',\n \n // Backbone\n CREATED: 'created',\n UPDATED: 'updated',\n FOCUS: 'focus',\n BLUR: 'blur',\n SUBMIT: 'submit',\n SAVE: 'save',\n MODAL: 'modal',\n MODELESS: 'modeless',\n CANCEL: 'cancel',\n CONTENT_REFRESHED: 'contentRefreshed',\n RENDER: 'render',\n FINISHED_EDITING: 'finishedEditing',\n VALIDATION_ERROR: 'validationError',\n SUBMIT_STARTED: 'submitStarted',\n SUBMIT_FINISHED: 'submitFinished',\n INITIALIZED: 'initialized',\n ROW_INITIALIZED: 'rowInitialized',\n ROW_EDIT: 'editRow'\n };\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/throbber.js\n(typeof window === 'undefined' ? global : window).__2c5db2a670bf43ad84b2ff6a773c8a0f = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n exports.default = function () {\n return '<span class=\"aui-restfultable-throbber\"></span>';\n };\n \n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/edit-row.js\n(typeof window === 'undefined' ? global : window).__29b3d9b9ab02b1fc53efb0ad43cc5a69 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \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 ? \"symbol\" : typeof obj; };\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __7caa2633dbde714d8fb6843d7a667791;\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n var _classNames = __d8ac1814d07f8a2adba730caeaf06f0c;\n \n var _classNames2 = _interopRequireDefault(_classNames);\n \n var _dataKeys = __d51574a21b407cffa327c40f8b943e4f;\n \n var _dataKeys2 = _interopRequireDefault(_dataKeys);\n \n var _events = __466e8a577c51260162a1ef88604d874c;\n \n var _events2 = _interopRequireDefault(_events);\n \n var _i18n = __2a8f02ddf948a2241e4b1ac8618d2015;\n \n var _i18n2 = _interopRequireDefault(_i18n);\n \n var _throbber = __2c5db2a670bf43ad84b2ff6a773c8a0f;\n \n var _throbber2 = _interopRequireDefault(_throbber);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n /**\n * An abstract class that gives the required behaviour for the creating and editing entries. Extend this class and pass\n * it as the {views.row} property of the options passed to RestfulTable in construction.\n */\n exports.default = _backbone2.default.View.extend({\n tagName: 'tr',\n \n // delegate events\n events: {\n 'focusin': '_focus',\n 'click': '_focus',\n 'keyup': '_handleKeyUpEvent'\n },\n \n /**\n * @constructor\n * @param {Object} options\n */\n initialize: function initialize(options) {\n this.$el = (0, _jquery2.default)(this.el);\n \n // faster lookup\n this._event = _events2.default;\n this.classNames = _classNames2.default;\n this.dataKeys = _dataKeys2.default;\n this.columns = options.columns;\n this.isCreateRow = options.isCreateRow;\n this.allowReorder = options.allowReorder;\n \n // Allow cancelling an edit with support for setting a new element.\n this.events['click .' + this.classNames.CANCEL] = '_cancel';\n this.delegateEvents();\n \n if (options.isUpdateMode) {\n this.isUpdateMode = true;\n } else {\n this._modelClass = options.model;\n this.model = new this._modelClass();\n }\n \n this.fieldFocusSelector = options.fieldFocusSelector;\n this.bind(this._event.CANCEL, function () {\n this.disabled = true;\n }).bind(this._event.SAVE, function (focusUpdated) {\n if (!this.disabled) {\n this.submit(focusUpdated);\n }\n }).bind(this._event.FOCUS, function (name) {\n this.focus(name);\n }).bind(this._event.BLUR, function () {\n this.$el.removeClass(this.classNames.FOCUSED);\n this.disable();\n }).bind(this._event.SUBMIT_STARTED, function () {\n this._submitStarted();\n }).bind(this._event.SUBMIT_FINISHED, function () {\n this._submitFinished();\n });\n },\n \n /**\n * Renders default cell contents\n *\n * @param data\n */\n defaultColumnRenderer: function defaultColumnRenderer(data) {\n if (data.allowEdit !== false) {\n return (0, _jquery2.default)(\"<input type='text' />\").addClass('text').attr({\n name: data.name,\n value: data.value\n });\n } else if (data.value) {\n return document.createTextNode(data.value);\n }\n },\n \n /**\n * Renders drag handle\n * @return jQuery\n */\n renderDragHandle: function renderDragHandle() {\n return '<span class=\"' + this.classNames.DRAG_HANDLE + '\"></span></td>';\n },\n \n /**\n * Executes cancel event if ESC is pressed\n *\n * @param {Event} e\n */\n _handleKeyUpEvent: function _handleKeyUpEvent(e) {\n if (e.keyCode === 27) {\n this.trigger(this._event.CANCEL);\n }\n },\n \n /**\n * Fires cancel event\n *\n * @param {Event} e\n *\n * @return EditRow\n */\n _cancel: function _cancel(e) {\n this.trigger(this._event.CANCEL);\n e.preventDefault();\n return this;\n },\n \n /**\n * Disables events/fields and adds safe guard against double submitting\n *\n * @return EditRow\n */\n _submitStarted: function _submitStarted() {\n this.submitting = true;\n this.showLoading().disable().delegateEvents({});\n \n return this;\n },\n \n /**\n * Enables events & fields\n *\n * @return EditRow\n */\n _submitFinished: function _submitFinished() {\n this.submitting = false;\n this.hideLoading().enable().delegateEvents(this.events);\n \n return this;\n },\n \n /**\n * Handles dom focus event, by only focusing row if it isn't already\n *\n * @param {Event} e\n *\n * @return EditRow\n */\n _focus: function _focus(e) {\n if (!this.hasFocus()) {\n this.trigger(this._event.FOCUS, e.target.name);\n }\n return this;\n },\n \n /**\n * Returns true if row has focused class\n *\n * @return Boolean\n */\n hasFocus: function hasFocus() {\n return this.$el.hasClass(this.classNames.FOCUSED);\n },\n \n /**\n * Focus specified field (by name or id - first argument), first field with an error or first field (DOM order)\n *\n * @param name\n *\n * @return EditRow\n */\n focus: function focus(name) {\n var $focus;\n var $error;\n \n this.enable();\n \n if (name) {\n $focus = this.$el.find(this.fieldFocusSelector(name));\n } else {\n \n $error = this.$el.find(this.classNames.ERROR + ':first');\n \n if ($error.length === 0) {\n $focus = this.$el.find(':input:text:first');\n } else {\n $focus = $error.parent().find(':input');\n }\n }\n \n this.$el.addClass(this.classNames.FOCUSED);\n $focus.focus().trigger('select');\n \n return this;\n },\n \n /**\n * Disables all fields\n *\n * @return EditRow\n */\n disable: function disable() {\n var $replacementSubmit;\n var $submit;\n \n // firefox does not allow you to submit a form if there are 2 or more submit buttons in a form, even if all but\n // one is disabled. It also does not let you change the type=\"submit' to type=\"button\". Therfore he lies the hack.\n if (_jquery2.default.browser.mozilla) {\n $submit = this.$el.find(':submit');\n \n if ($submit.length) {\n $replacementSubmit = (0, _jquery2.default)(\"<input type='submit' class='\" + this.classNames.SUBMIT + \"' />\").addClass($submit.attr('class')).val($submit.val()).data(this.dataKeys.ENABLED_SUBMIT, $submit);\n \n $submit.replaceWith($replacementSubmit);\n }\n }\n \n this.$el.addClass(this.classNames.DISABLED).find(':submit').attr('disabled', 'disabled');\n \n return this;\n },\n \n /**\n * Enables all fields\n *\n * @return EditRow\n */\n enable: function enable() {\n var $placeholderSubmit;\n var $submit;\n \n // firefox does not allow you to submit a form if there are 2 or more submit buttons in a form, even if all but\n // one is disabled. It also does not let you change the type=\"submit' to type=\"button\". Therfore he lies the hack.\n if (_jquery2.default.browser.mozilla) {\n $placeholderSubmit = this.$el.find(this.classNames.SUBMIT);\n $submit = $placeholderSubmit.data(this.dataKeys.ENABLED_SUBMIT);\n \n if ($submit && $placeholderSubmit.length) {\n $placeholderSubmit.replaceWith($submit);\n }\n }\n \n this.$el.removeClass(this.classNames.DISABLED).find(':submit').removeAttr('disabled');\n \n return this;\n },\n \n /**\n * Shows loading indicator\n *\n * @return EditRow\n */\n showLoading: function showLoading() {\n this.$el.addClass(this.classNames.LOADING);\n return this;\n },\n \n /**\n * Hides loading indicator\n *\n * @return EditRow\n */\n hideLoading: function hideLoading() {\n this.$el.removeClass(this.classNames.LOADING);\n return this;\n },\n \n /**\n * If any of the fields have changed\n *\n * @return {Boolean}\n */\n hasUpdates: function hasUpdates() {\n return !!this.mapSubmitParams(this.serializeObject());\n },\n \n /**\n * Serializes the view into model representation.\n * Default implementation uses simple jQuery plugin to serialize form fields into object\n *\n * @return Object\n */\n serializeObject: function serializeObject() {\n var $el = this.$el;\n return $el.serializeObject ? $el.serializeObject() : $el.serialize();\n },\n \n mapSubmitParams: function mapSubmitParams(params) {\n return this.model.changedAttributes(params);\n },\n \n /**\n * Handle submission of new entries and editing of old.\n *\n * @param {Boolean} focusUpdated - flag of whether to focus read-only view after succssful submission\n *\n * @return EditRow\n */\n submit: function submit(focusUpdated) {\n var instance = this;\n var values;\n \n // IE doesnt like it when the focused element is removed\n if (document.activeElement !== window) {\n (0, _jquery2.default)(document.activeElement).blur();\n }\n \n if (this.isUpdateMode) {\n values = this.mapSubmitParams(this.serializeObject()); // serialize form fields into JSON\n \n if (!values) {\n return instance.trigger(instance._event.CANCEL);\n }\n } else {\n this.model.clear();\n values = this.mapSubmitParams(this.serializeObject()); // serialize form fields into JSON\n }\n \n this.trigger(this._event.SUBMIT_STARTED);\n \n /* Attempt to add to server model. If fail delegate to createView to render errors etc. Otherwise,\n add a new model to this._models and render a row to represent it. */\n this.model.save(values, {\n success: function success() {\n if (instance.isUpdateMode) {\n instance.trigger(instance._event.UPDATED, instance.model, focusUpdated);\n } else {\n instance.trigger(instance._event.CREATED, instance.model.toJSON());\n \n instance.model = new instance._modelClass(); // reset\n \n instance.render({ errors: {}, values: {} }); // pulls in instance's model for create row\n instance.trigger(instance._event.FOCUS);\n }\n \n instance.trigger(instance._event.SUBMIT_FINISHED);\n },\n \n error: function error(model, data, xhr) {\n if (xhr.status === 400) {\n instance.renderErrors(data.errors);\n instance.trigger(instance._event.VALIDATION_ERROR, data.errors);\n }\n \n instance.trigger(instance._event.SUBMIT_FINISHED);\n },\n \n silent: true\n });\n \n return this;\n },\n \n /**\n * Render an error message\n *\n * @param msg\n *\n * @return {jQuery}\n */\n renderError: function renderError(name, msg) {\n return (0, _jquery2.default)('<div />').attr('data-field', name).addClass(this.classNames.ERROR).text(msg);\n },\n \n /**\n * Render and append error messages. The property name will be matched to the input name to determine which cell to\n * append the error message to. If this does not meet your needs please extend this method.\n *\n * @param errors\n */\n renderErrors: function renderErrors(errors) {\n var instance = this;\n \n this.$('.' + this.classNames.ERROR).remove(); // avoid duplicates\n \n if (errors) {\n _jquery2.default.each(errors, function (name, msg) {\n instance.$el.find(\"[name='\" + name + \"']\").closest('td').append(instance.renderError(name, msg));\n });\n }\n \n return this;\n },\n \n /**\n * Handles rendering of row\n *\n * @param {Object} renderData\n * ... {Object} vales - Values of fields\n */\n render: function render(renderData) {\n var instance = this;\n \n this.$el.empty();\n \n if (this.allowReorder) {\n (0, _jquery2.default)('<td class=\"' + this.classNames.ORDER + '\" />').append(this.renderDragHandle()).appendTo(instance.$el);\n }\n \n _jquery2.default.each(this.columns, function (i, column) {\n var contents;\n var $cell;\n var value = renderData.values[column.id];\n var args = [{ name: column.id, value: value, allowEdit: column.allowEdit }, renderData.values, instance.model];\n \n if (value) {\n instance.$el.attr('data-' + column.id, value); // helper for webdriver testing\n }\n \n if (instance.isCreateRow && column.createView) {\n // TODO AUI-1058 - The row's model should be guaranteed to be in the correct state by this point.\n contents = new column.createView({\n model: instance.model\n }).render(args[0]);\n } else if (column.editView) {\n contents = new column.editView({\n model: instance.model\n }).render(args[0]);\n } else {\n contents = instance.defaultColumnRenderer.apply(instance, args);\n }\n \n $cell = (0, _jquery2.default)('<td />');\n \n if ((typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) === 'object' && contents.done) {\n contents.done(function (contents) {\n $cell.append(contents);\n });\n } else {\n $cell.append(contents);\n }\n \n if (column.styleClass) {\n $cell.addClass(column.styleClass);\n }\n \n $cell.appendTo(instance.$el);\n });\n \n this.$el.append(this.renderOperations(renderData.update, renderData.values)) // add submit/cancel buttons\n .addClass(this.classNames.ROW + ' ' + this.classNames.EDIT_ROW);\n \n this.trigger(this._event.RENDER, this.$el, renderData.values);\n this.$el.trigger(this._event.CONTENT_REFRESHED, [this.$el]);\n \n return this;\n },\n \n /**\n * Gets markup for add/update and cancel buttons\n *\n * @param {Boolean} update\n */\n renderOperations: function renderOperations(update) {\n var $operations = (0, _jquery2.default)('<td class=\"aui-restfultable-operations\" />');\n \n if (update) {\n $operations.append((0, _jquery2.default)('<input class=\"aui-button\" type=\"submit\" />').attr({\n accesskey: this.submitAccessKey,\n value: AJS.I18n.getText('aui.words.update')\n })).append((0, _jquery2.default)('<a class=\"aui-button aui-button-link\" href=\"#\" />').addClass(this.classNames.CANCEL).text(AJS.I18n.getText('aui.words.cancel')).attr({\n accesskey: this.cancelAccessKey\n }));\n } else {\n $operations.append((0, _jquery2.default)('<input class=\"aui-button\" type=\"submit\" />').attr({\n accesskey: this.submitAccessKey,\n value: AJS.I18n.getText('aui.words.add')\n }));\n }\n \n return $operations.add((0, _jquery2.default)('<td class=\"aui-restfultable-status\" />').append((0, _throbber2.default)()));\n }\n });\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/entry-model.js\n(typeof window === 'undefined' ? global : window).__ac231380c319c9eb5354cb5160e3c277 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \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 ? \"symbol\" : typeof obj; };\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _events = __447bfcc202d6ec6c1f91299e76dbd27c;\n \n var _underscore = __1816fd18477a65e315273fac20d1a521;\n \n var _underscore2 = _interopRequireDefault(_underscore);\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n var _events2 = __466e8a577c51260162a1ef88604d874c;\n \n var _events3 = _interopRequireDefault(_events2);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n /**\n * A class provided to fill some gaps with the out of the box Backbone.Model class. Most notiably the inability\n * to send ONLY modified attributes back to the server.\n */\n var EntryModel = _backbone2.default.Model.extend({\n sync: function sync(method, model, options) {\n var instance = this;\n var oldError = options.error;\n \n options.error = function (xhr) {\n instance._serverErrorHandler(xhr, this);\n if (oldError) {\n oldError.apply(this, arguments);\n }\n };\n \n return _backbone2.default.sync.apply(_backbone2.default, arguments);\n },\n \n /**\n * Overrides default save handler to only save (send to server) attributes that have changed.\n * Also provides some default error handling.\n *\n * @override\n * @param attributes\n * @param options\n */\n save: function save(attributes, options) {\n options = options || {};\n \n var instance = this,\n Model,\n syncModel,\n error = options.error,\n // we override, so store original\n success = options.success;\n \n // override error handler to provide some defaults\n options.error = function (model, xhr) {\n \n var data = _jquery2.default.parseJSON(xhr.responseText || xhr.data);\n \n // call original error handler\n if (error) {\n error.call(instance, instance, data, xhr);\n }\n };\n \n // if it is a new model, we don't have to worry about updating only changed attributes because they are all new\n if (this.isNew()) {\n \n // call super\n _backbone2.default.Model.prototype.save.call(this, attributes, options);\n \n // only go to server if something has changed\n } else if (attributes) {\n // create temporary model\n Model = EntryModel.extend({\n url: this.url()\n });\n \n syncModel = new Model({\n id: this.id\n });\n \n syncModel.save = _backbone2.default.Model.prototype.save;\n \n options.success = function (model, xhr) {\n \n // update original model with saved attributes\n instance.clear().set(model.toJSON());\n \n // call original success handler\n if (success) {\n success.call(instance, instance, xhr);\n }\n };\n \n // update temporary model with the changed attributes\n syncModel.save(attributes, options);\n }\n },\n \n /**\n * Destroys the model on the server. We need to override the default method as it does not support sending of\n * query paramaters.\n *\n * @override\n * @param options\n * ... {function} success - Server success callback\n * ... {function} error - Server error callback\n * ... {object} data\n *\n * @return EntryModel\n */\n destroy: function destroy(options) {\n options = options || {};\n \n var instance = this,\n url = this.url(),\n data;\n \n if (options.data) {\n data = _jquery2.default.param(options.data);\n }\n \n if (data !== '') {\n // we need to add to the url as the data param does not work for jQuery DELETE requests\n url = url + '?' + data;\n }\n \n _jquery2.default.ajax({\n url: url,\n type: 'DELETE',\n dataType: 'json',\n contentType: 'application/json',\n success: function success(data) {\n if (instance.collection) {\n instance.collection.remove(instance);\n }\n if (options.success) {\n options.success.call(instance, data);\n }\n },\n error: function error(xhr) {\n instance._serverErrorHandler(xhr, this);\n if (options.error) {\n options.error.call(instance, xhr);\n }\n }\n });\n \n return this;\n },\n \n /**\n * A more complex lookup for changed attributes then default backbone one.\n *\n * @param attributes\n */\n changedAttributes: function changedAttributes(attributes) {\n var changed = {};\n var current = this.toJSON();\n \n _jquery2.default.each(attributes, function (name, value) {\n \n if (!current[name]) {\n if (typeof value === 'string') {\n if (_jquery2.default.trim(value) !== '') {\n changed[name] = value;\n }\n } else if (_jquery2.default.isArray(value)) {\n if (value.length !== 0) {\n changed[name] = value;\n }\n } else {\n changed[name] = value;\n }\n } else if (current[name] && current[name] !== value) {\n \n if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n if (!_underscore2.default.isEqual(value, current[name])) {\n changed[name] = value;\n }\n } else {\n changed[name] = value;\n }\n }\n });\n \n if (!_underscore2.default.isEmpty(changed)) {\n this.addExpand(changed);\n return changed;\n }\n },\n \n /**\n * Useful point to override if you always want to add an expand to your rest calls.\n *\n * @param changed attributes that have already changed\n */\n addExpand: function addExpand(changed) {},\n \n /**\n * Throws a server error event unless user input validation error (status 400)\n *\n * @param xhr\n */\n _serverErrorHandler: function _serverErrorHandler(xhr, ajaxOptions) {\n var data;\n if (xhr.status !== 400) {\n data = _jquery2.default.parseJSON(xhr.responseText || xhr.data);\n (0, _events.triggerEvtForInst)(_events3.default.SERVER_ERROR, this, [data, xhr, ajaxOptions]);\n }\n },\n \n /**\n * Fetches values, with some generic error handling\n *\n * @override\n * @param options\n */\n fetch: function fetch(options) {\n options = options || {};\n \n // clear the model, so we do not merge the old with the new\n this.clear();\n \n // call super\n _backbone2.default.Model.prototype.fetch.call(this, options);\n }\n });\n \n exports.default = EntryModel;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table/row.js\n(typeof window === 'undefined' ? global : window).__f70a09da4b2f8e8eb8b6ffd2f15ee69b = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _dialog = __629e244af2a4d0f7896df9c6eda85934;\n \n var dialog = _interopRequireWildcard(_dialog);\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n var _classNames = __d8ac1814d07f8a2adba730caeaf06f0c;\n \n var _classNames2 = _interopRequireDefault(_classNames);\n \n var _dataKeys = __d51574a21b407cffa327c40f8b943e4f;\n \n var _dataKeys2 = _interopRequireDefault(_dataKeys);\n \n var _events = __466e8a577c51260162a1ef88604d874c;\n \n var _events2 = _interopRequireDefault(_events);\n \n var _i18n = __2a8f02ddf948a2241e4b1ac8618d2015;\n \n var _i18n2 = _interopRequireDefault(_i18n);\n \n var _throbber = __2c5db2a670bf43ad84b2ff6a773c8a0f;\n \n var _throbber2 = _interopRequireDefault(_throbber);\n \n function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n /**\n * An abstract class that gives the required behaviour for RestfulTable rows.\n * Extend this class and pass it as the {views.row} property of the options passed to RestfulTable in construction.\n */\n exports.default = _backbone2.default.View.extend({\n tagName: 'tr',\n \n events: {\n 'click .aui-restfultable-editable': 'edit'\n },\n \n initialize: function initialize(options) {\n var instance = this;\n \n options = options || {};\n \n this._event = _events2.default;\n this.classNames = _classNames2.default;\n this.dataKeys = _dataKeys2.default;\n this.columns = options.columns;\n this.allowEdit = options.allowEdit;\n this.allowDelete = options.allowDelete;\n \n if (!this.events['click .aui-restfultable-editable']) {\n throw new Error('It appears you have overridden the events property. To add events you will need to use' + 'a work around. https://github.com/documentcloud/backbone/issues/244');\n }\n \n this.index = options.index || 0;\n this.deleteConfirmation = options.deleteConfirmation;\n this.allowReorder = options.allowReorder;\n this.$el = (0, _jquery2.default)(this.el);\n \n this.bind(this._event.CANCEL, function () {\n this.disabled = true;\n }).bind(this._event.FOCUS, function (field) {\n this.focus(field);\n }).bind(this._event.BLUR, function () {\n this.unfocus();\n }).bind(this._event.MODAL, function () {\n this.$el.addClass(this.classNames.ACTIVE);\n }).bind(this._event.MODELESS, function () {\n this.$el.removeClass(this.classNames.ACTIVE);\n });\n },\n \n /**\n * Renders drag handle\n *\n * @return jQuery\n */\n renderDragHandle: function renderDragHandle() {\n return '<span class=\"' + this.classNames.DRAG_HANDLE + '\"></span></td>';\n },\n \n /**\n * Renders default cell contents\n *\n * @param data\n *\n * @return {undefiend, String}\n */\n defaultColumnRenderer: function defaultColumnRenderer(data) {\n if (data.value) {\n return document.createTextNode(data.value.toString());\n }\n },\n \n /**\n * Save changed attributes back to server and re-render\n *\n * @param attr\n *\n * @return {Row}\n */\n sync: function sync(attr) {\n var instance = this;\n \n this.model.addExpand(attr);\n this.showLoading();\n this.model.save(attr, {\n success: function success() {\n instance.hideLoading().render();\n instance.trigger(instance._event.UPDATED);\n },\n error: function error() {\n instance.hideLoading();\n }\n });\n \n return this;\n },\n \n /**\n * Get model from server and re-render\n *\n * @return {Row}\n */\n refresh: function refresh(_success, _error) {\n var instance = this;\n \n this.showLoading();\n this.model.fetch({\n success: function success() {\n instance.hideLoading().render();\n if (_success) {\n _success.apply(this, arguments);\n }\n },\n error: function error() {\n instance.hideLoading();\n if (_error) {\n _error.apply(this, arguments);\n }\n }\n });\n \n return this;\n },\n \n /**\n * Returns true if row has focused class\n *\n * @return Boolean\n */\n hasFocus: function hasFocus() {\n return this.$el.hasClass(this.classNames.FOCUSED);\n },\n \n /**\n * Adds focus class (Item has been recently updated)\n *\n * @return Row\n */\n focus: function focus() {\n (0, _jquery2.default)(this.el).addClass(this.classNames.FOCUSED);\n return this;\n },\n \n /**\n * Removes focus class\n *\n * @return Row\n */\n unfocus: function unfocus() {\n (0, _jquery2.default)(this.el).removeClass(this.classNames.FOCUSED);\n return this;\n },\n \n /**\n * Adds loading class (to show server activity)\n *\n * @return Row\n */\n showLoading: function showLoading() {\n this.$el.addClass(this.classNames.LOADING);\n return this;\n },\n \n /**\n * Hides loading class (to show server activity)\n *\n * @return Row\n */\n hideLoading: function hideLoading() {\n this.$el.removeClass(this.classNames.LOADING);\n return this;\n },\n \n /**\n * Switches row into edit mode\n *\n * @param e\n */\n edit: function edit(e) {\n var field;\n if ((0, _jquery2.default)(e.target).is('.' + this.classNames.EDITABLE)) {\n field = (0, _jquery2.default)(e.target).attr('data-field-name');\n } else {\n field = (0, _jquery2.default)(e.target).closest('.' + this.classNames.EDITABLE).attr('data-field-name');\n }\n this.trigger(this._event.ROW_EDIT, field);\n return this;\n },\n \n /**\n * Can be overriden to add custom options.\n *\n * @returns {jQuery}\n */\n renderOperations: function renderOperations() {\n var instance = this;\n if (this.allowDelete !== false) {\n return (0, _jquery2.default)(\"<a href='#' class='aui-button' />\").addClass(this.classNames.DELETE).text(AJS.I18n.getText('aui.words.delete')).click(function (e) {\n e.preventDefault();\n instance.destroy();\n });\n }\n },\n \n /**\n * Removes entry from table.\n *\n * @returns {undefined}\n */\n destroy: function destroy() {\n if (this.deleteConfirmation) {\n var popup = dialog.popup(400, 200, 'delete-entity-' + this.model.get('id'));\n popup.element.html(this.deleteConfirmation(this.model.toJSON()));\n popup.show();\n popup.element.find('.cancel').click(function () {\n popup.hide();\n });\n popup.element.find('form').submit(_.bind(function (e) {\n popup.hide();\n this.model.destroy();\n e.preventDefault();\n }, this));\n } else {\n this.model.destroy();\n }\n },\n \n /**\n * Renders a generic edit row. You probably want to override this in a sub class.\n *\n * @return Row\n */\n render: function render() {\n var instance = this;\n var renderData = this.model.toJSON();\n var $opsCell = (0, _jquery2.default)(\"<td class='aui-restfultable-operations' />\").append(this.renderOperations({}, renderData));\n var $throbberCell = (0, _jquery2.default)(\"<td class='aui-restfultable-status' />\").append((0, _throbber2.default)());\n \n // restore state\n this.$el.removeClass(this.classNames.DISABLED + ' ' + this.classNames.FOCUSED + ' ' + this.classNames.LOADING + ' ' + this.classNames.EDIT_ROW).addClass(this.classNames.READ_ONLY).empty();\n \n if (this.allowReorder) {\n (0, _jquery2.default)('<td class=\"' + this.classNames.ORDER + '\" />').append(this.renderDragHandle()).appendTo(instance.$el);\n }\n \n this.$el.attr('data-id', this.model.id); // helper for webdriver testing\n \n _jquery2.default.each(this.columns, function (i, column) {\n var contents;\n var $cell = (0, _jquery2.default)('<td />');\n var value = renderData[column.id];\n var fieldName = column.fieldName || column.id;\n var args = [{ name: fieldName, value: value, allowEdit: column.allowEdit }, renderData, instance.model];\n \n if (value) {\n instance.$el.attr('data-' + column.id, value); // helper for webdriver testing\n }\n \n if (column.readView) {\n contents = new column.readView({\n model: instance.model\n }).render(args[0]);\n } else {\n contents = instance.defaultColumnRenderer.apply(instance, args);\n }\n \n if (instance.allowEdit !== false && column.allowEdit !== false) {\n var $editableRegion = (0, _jquery2.default)('<span />').addClass(instance.classNames.EDITABLE).append('<span class=\"aui-icon aui-icon-small aui-iconfont-edit\"></span>').append(contents).attr('data-field-name', fieldName);\n \n $cell = (0, _jquery2.default)('<td />').append($editableRegion).appendTo(instance.$el);\n \n if (!contents || _jquery2.default.trim(contents) == '') {\n $cell.addClass(instance.classNames.NO_VALUE);\n $editableRegion.html((0, _jquery2.default)('<em />').text(this.emptyText || AJS.I18n.getText('aui.enter.value')));\n }\n } else {\n $cell.append(contents);\n }\n \n if (column.styleClass) {\n $cell.addClass(column.styleClass);\n }\n \n $cell.appendTo(instance.$el);\n });\n \n this.$el.append($opsCell).append($throbberCell).addClass(this.classNames.ROW + ' ' + this.classNames.READ_ONLY);\n \n this.trigger(this._event.RENDER, this.$el, renderData);\n this.$el.trigger(this._event.CONTENT_REFRESHED, [this.$el]);\n \n return this;\n }\n });\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/restful-table.js\n(typeof window === 'undefined' ? global : window).__2b21d3fff14905e110654619a006c7cb = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _log = __16a4a3246fcb7206cb3ce72a302f68ce;\n \n var logger = _interopRequireWildcard(_log);\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n var _classNames = __d8ac1814d07f8a2adba730caeaf06f0c;\n \n var _classNames2 = _interopRequireDefault(_classNames);\n \n var _customCreateView = __3d3ee2d5f078603e7827662e6100a1e3;\n \n var _customCreateView2 = _interopRequireDefault(_customCreateView);\n \n var _customEditView = __cb8a9c5f34bd5d986e16e83ccabf13f6;\n \n var _customEditView2 = _interopRequireDefault(_customEditView);\n \n var _customReadView = __13c9d24e0a422b9e76894cf8a78895c4;\n \n var _customReadView2 = _interopRequireDefault(_customReadView);\n \n var _dataKeys = __d51574a21b407cffa327c40f8b943e4f;\n \n var _dataKeys2 = _interopRequireDefault(_dataKeys);\n \n var _editRow = __29b3d9b9ab02b1fc53efb0ad43cc5a69;\n \n var _editRow2 = _interopRequireDefault(_editRow);\n \n var _entryModel = __ac231380c319c9eb5354cb5160e3c277;\n \n var _entryModel2 = _interopRequireDefault(_entryModel);\n \n var _events = __466e8a577c51260162a1ef88604d874c;\n \n var _events2 = _interopRequireDefault(_events);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n var _i18n = __2a8f02ddf948a2241e4b1ac8618d2015;\n \n var _i18n2 = _interopRequireDefault(_i18n);\n \n var _row = __f70a09da4b2f8e8eb8b6ffd2f15ee69b;\n \n var _row2 = _interopRequireDefault(_row);\n \n var _throbber = __2c5db2a670bf43ad84b2ff6a773c8a0f;\n \n var _throbber2 = _interopRequireDefault(_throbber);\n \n function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n /**\n * Triggers a custom event on the document object\n *\n * @param {String} name - name of event\n * @param {Array} args - args for event handler\n */\n function triggerEvt(name, args) {\n (0, _jquery2.default)(document).trigger(name, args);\n }\n \n /**\n * Some generic error handling that fires event in multiple contexts\n * - on document\n * - on Instance\n * - on document with prefixed id.\n *\n * @param evt\n * @param inst\n * @param args\n */\n function triggerEvtForInst(evt, inst, args) {\n (0, _jquery2.default)(inst).trigger(evt, args);\n triggerEvt(evt, args);\n if (inst.id) {\n triggerEvt(inst.id + '_' + evt, args);\n }\n }\n \n /**\n * A table whose entries/rows can be retrieved, added and updated via REST (CRUD).\n * It uses backbone.js to sync the table's state back to the server, avoiding page refreshes.\n *\n * @class RestfulTable\n */\n var RestfulTable = _backbone2.default.View.extend({\n /**\n * @param {!Object} options\n * ... {!Object} resources\n * ... ... {(string|function(function(Array.<Object>)))} all - URL of REST resource OR function that retrieves all entities.\n * ... ... {string} self - URL of REST resource to sync a single entities state (CRUD).\n * ... {!(selector|Element|jQuery)} el - Table element or selector of the table element to populate.\n * ... {!Array.<Object>} columns - Which properties of the entities to render. The id of a column maps to the property of an entity.\n * ... {Object} views\n * ... ... {RestfulTable.EditRow} editRow - Backbone view that renders the edit & create row. Your view MUST extend RestfulTable.EditRow.\n * ... ... {RestfulTable.Row} row - Backbone view that renders the readonly row. Your view MUST extend RestfulTable.Row.\n * ... {boolean} allowEdit - Is the table editable. If true, clicking row will switch it to edit state. Default true.\n * ... {boolean} allowDelete - Can entries be removed from the table, default true.\n * ... {boolean} allowCreate - Can new entries be added to the table, default true.\n * ... {boolean} allowReorder - Can we drag rows to reorder them, default false.\n * ... {boolean} autoFocus - Automatically set focus to first field on init, default false.\n * ... {boolean} reverseOrder - Reverse the order of rows, default false.\n * ... {boolean} silent - Do not trigger a \"refresh\" event on sort, default false.\n * ... {String} id - The id for the table. This id will be used to fire events specific to this instance.\n * ... {string} createPosition - If set to \"bottom\", place the create form at the bottom of the table instead of the top.\n * ... {string} addPosition - If set to \"bottom\", add new rows at the bottom of the table instead of the top. If undefined, createPosition will be used to define where to add the new row.\n * ... {string} noEntriesMsg - Text to display under the table header if it is empty, default empty.\n * ... {string} loadingMsg - Text/HTML to display while loading, default \"Loading\".\n * ... {string} submitAccessKey - Access key for submitting.\n * ... {string} cancelAccessKey - Access key for canceling.\n * ... {function(Object): (string|function(number, string): string)} deleteConfirmation - HTML to display in popup to confirm deletion.\n * ... {function(string): (selector|jQuery|Element)} fieldFocusSelector - Element to focus on given a name.\n * ... {EntryModel} model - Backbone model representing a row, default EntryModel.\n * ... {Backbone.Collection} Collection - Backbone collection representing the entire table, default Backbone.Collection.\n */\n initialize: function initialize(options) {\n var instance = this;\n \n // combine default and user options\n instance.options = _jquery2.default.extend(true, instance._getDefaultOptions(options), options);\n \n // Prefix events for this instance with this id.\n instance.id = this.options.id;\n \n // faster lookup\n instance._event = _events2.default;\n instance.classNames = _classNames2.default;\n instance.dataKeys = _dataKeys2.default;\n \n // shortcuts to popular elements\n this.$table = (0, _jquery2.default)(options.el).addClass(this.classNames.RESTFUL_TABLE).addClass(this.classNames.ALLOW_HOVER).addClass('aui').addClass(instance.classNames.LOADING);\n \n this.$table.wrapAll(\"<form class='aui' action='#' />\");\n \n this.$thead = (0, _jquery2.default)('<thead/>');\n this.$theadRow = (0, _jquery2.default)('<tr />').appendTo(this.$thead);\n this.$tbody = (0, _jquery2.default)('<tbody/>');\n \n if (!this.$table.length) {\n throw new Error('RestfulTable: Init failed! The table you have specified [' + this.$table.selector + '] cannot be found.');\n }\n \n if (!this.options.columns) {\n throw new Error(\"RestfulTable: Init failed! You haven't provided any columns to render.\");\n }\n \n // Let user know the table is loading\n this.showGlobalLoading();\n this.options.columns.forEach(function (column) {\n var header = _jquery2.default.isFunction(column.header) ? column.header() : column.header;\n if (typeof header === 'undefined') {\n logger.warn('You have not specified [header] for column [' + column.id + ']. Using id for now...');\n header = column.id;\n }\n \n instance.$theadRow.append('<th>' + header + '</th>');\n });\n \n // columns for submit buttons and loading indicator used when editing\n instance.$theadRow.append('<th></th><th></th>');\n \n // create a new Backbone collection to represent rows (http://documentcloud.github.com/backbone/#Collection)\n this._models = this._createCollection();\n \n // shortcut to the class we use to create rows\n this._rowClass = this.options.views.row;\n \n this.editRows = []; // keep track of rows that are being edited concurrently\n \n this.$table.closest('form').submit(function (e) {\n if (instance.focusedRow) {\n // Delegates saving of row. See EditRow.submit\n instance.focusedRow.trigger(instance._event.SAVE);\n }\n e.preventDefault();\n });\n \n if (this.options.allowReorder) {\n // Add allowance for another cell to the <thead>\n this.$theadRow.prepend('<th />');\n \n // Allow drag and drop reordering of rows\n this.$tbody.sortable({\n handle: '.' + this.classNames.DRAG_HANDLE,\n helper: function helper(e, elt) {\n var helper = (0, _jquery2.default)('<div/>').attr('class', elt.attr('class')).addClass(instance.classNames.MOVEABLE);\n elt.children().each(function (i) {\n var $td = (0, _jquery2.default)(this);\n \n // .offsetWidth/.outerWidth() is broken in webkit for tables, so we do .clientWidth + borders\n // Need to coerce the border-left-width to an in because IE - http://bugs.jquery.com/ticket/10855\n var borderLeft = parseInt(0 + $td.css('border-left-width'), 10);\n var borderRight = parseInt(0 + $td.css('border-right-width'), 10);\n var width = $td[0].clientWidth + borderLeft + borderRight;\n \n helper.append((0, _jquery2.default)('<div/>').html($td.html()).attr('class', $td.attr('class')).width(width));\n });\n \n helper = (0, _jquery2.default)(\"<div class='aui-restfultable-readonly'/>\").append(helper); // Basically just to get the styles.\n helper.css({ left: elt.offset().left }); // To align with the other table rows, since we've locked scrolling on x.\n helper.appendTo(document.body);\n \n return helper;\n },\n start: function start(event, ui) {\n var cachedHeight = ui.helper[0].clientHeight;\n var $this = ui.placeholder.find('td');\n \n // Make sure that when we start dragging widths do not change\n ui.item.addClass(instance.classNames.MOVEABLE).children().each(function (i) {\n (0, _jquery2.default)(this).width($this.eq(i).width());\n });\n \n // Create a <td> to add to the placeholder <tr> to inherit CSS styles.\n var td = '<td colspan=\"' + instance.getColumnCount() + '\"> </td>';\n \n ui.placeholder.html(td).css({\n height: cachedHeight,\n visibility: 'visible'\n });\n \n // Stop hover effects etc from occuring as we move the mouse (while dragging) over other rows\n instance.getRowFromElement(ui.item[0]).trigger(instance._event.MODAL);\n },\n stop: function stop(event, ui) {\n if ((0, _jquery2.default)(ui.item[0]).is(':visible')) {\n ui.item.removeClass(instance.classNames.MOVEABLE).children().attr('style', '');\n \n ui.placeholder.removeClass(instance.classNames.ROW);\n \n // Return table to a normal state\n instance.getRowFromElement(ui.item[0]).trigger(instance._event.MODELESS);\n }\n },\n update: function update(event, ui) {\n var context = {\n row: instance.getRowFromElement(ui.item[0]),\n item: ui.item,\n nextItem: ui.item.next(),\n prevItem: ui.item.prev()\n };\n \n instance.move(context);\n },\n axis: 'y',\n delay: 0,\n containment: 'document',\n cursor: 'move',\n scroll: true,\n zIndex: 8000\n });\n \n // Prevent text selection while reordering.\n this.$tbody.bind('selectstart mousedown', function (event) {\n return !(0, _jquery2.default)(event.target).is('.' + instance.classNames.DRAG_HANDLE);\n });\n }\n \n if (this.options.allowCreate !== false) {\n \n // Create row responsible for adding new entries ...\n this._createRow = new this.options.views.editRow({\n columns: this.options.columns,\n isCreateRow: true,\n model: this.options.model.extend({\n url: function url() {\n return instance.options.resources.self;\n }\n }),\n cancelAccessKey: this.options.cancelAccessKey,\n submitAccessKey: this.options.submitAccessKey,\n allowReorder: this.options.allowReorder,\n fieldFocusSelector: this.options.fieldFocusSelector\n }).bind(this._event.CREATED, function (values) {\n if (instance.options.addPosition == undefined && instance.options.createPosition === 'bottom' || instance.options.addPosition === 'bottom') {\n instance.addRow(values);\n } else {\n instance.addRow(values, 0);\n }\n }).bind(this._event.VALIDATION_ERROR, function () {\n this.trigger(instance._event.FOCUS);\n }).render({\n errors: {},\n values: {}\n });\n \n // ... and appends it as the first row\n this.$create = (0, _jquery2.default)('<tbody class=\"' + this.classNames.CREATE + '\" />').append(this._createRow.el);\n \n // Manage which row has focus\n this._applyFocusCoordinator(this._createRow);\n \n // focus create row\n this._createRow.trigger(this._event.FOCUS);\n }\n \n // when a model is removed from the collection, remove it from the viewport also\n this._models.bind('remove', function (model) {\n instance.getRows().forEach(function (row) {\n if (row.model === model) {\n if (row.hasFocus() && instance._createRow) {\n instance._createRow.trigger(instance._event.FOCUS);\n }\n instance.removeRow(row);\n }\n });\n });\n \n this.fetchInitialResources();\n },\n \n fetchInitialResources: function fetchInitialResources() {\n var instance = this;\n if (_jquery2.default.isFunction(this.options.resources.all)) {\n this.options.resources.all(function (entries) {\n instance.populate(entries);\n });\n } else {\n _jquery2.default.get(this.options.resources.all, function (entries) {\n instance.populate(entries);\n });\n }\n },\n \n move: function move(context) {\n \n var instance = this;\n \n var createRequest = function createRequest(afterElement) {\n if (!afterElement.length) {\n return {\n position: 'First'\n };\n } else {\n var afterModel = instance.getRowFromElement(afterElement).model;\n return {\n after: afterModel.url()\n };\n }\n };\n \n if (context.row) {\n \n var data = instance.options.reverseOrder ? createRequest(context.nextItem) : createRequest(context.prevItem);\n \n _jquery2.default.ajax({\n url: context.row.model.url() + '/move',\n type: 'POST',\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n complete: function complete() {\n // hides loading indicator (spinner)\n context.row.hideLoading();\n },\n success: function success(xhr) {\n AJS.triggerEvtForInst(instance._event.REORDER_SUCCESS, instance, [xhr]);\n },\n error: function error(xhr) {\n var responseData = _jquery2.default.parseJSON(xhr.responseText || xhr.data);\n AJS.triggerEvtForInst(instance._event.SERVER_ERROR, instance, [responseData, xhr, this]);\n }\n });\n \n // shows loading indicator (spinner)\n context.row.showLoading();\n }\n },\n \n _createCollection: function _createCollection() {\n var instance = this;\n \n // create a new Backbone collection to represent rows (http://documentcloud.github.com/backbone/#Collection)\n var RowsAwareCollection = this.options.Collection.extend({\n // Force the collection to re-sort itself. You don't need to call this under normal\n // circumstances, as the set will maintain sort order as each item is added.\n sort: function sort(options) {\n options || (options = {});\n if (!this.comparator) {\n throw new Error('Cannot sort a set without a comparator');\n }\n this.tableRows = instance.getRows();\n this.models = this.sortBy(this.comparator);\n this.tableRows = undefined;\n if (!options.silent) {\n this.trigger('refresh', this, options);\n }\n return this;\n },\n remove: function remove(models, options) {\n this.tableRows = instance.getRows();\n _backbone2.default.Collection.prototype.remove.apply(this, arguments);\n this.tableRows = undefined;\n return this;\n }\n });\n \n return new RowsAwareCollection([], {\n comparator: function comparator(row) {\n // sort models in collection based on dom ordering\n var index,\n currentTableRows = this.tableRows !== undefined ? this.tableRows : instance.getRows();\n currentTableRows.some(function (item, i) {\n if (item.model.id === row.id) {\n index = i;\n return true;\n }\n });\n return index;\n }\n });\n },\n \n /**\n * Refreshes table with entries\n *\n * @param entries\n */\n populate: function populate(entries) {\n if (this.options.reverseOrder) {\n entries.reverse();\n }\n \n this.hideGlobalLoading();\n if (entries && entries.length) {\n // Empty the models collection\n this._models.reset([], { silent: true });\n // Add all the entries to collection and render them\n this.renderRows(entries);\n // show message to user if we have no entries\n if (this.isEmpty()) {\n this.showNoEntriesMsg();\n }\n } else {\n this.showNoEntriesMsg();\n }\n \n // Ok, lets let everyone know that we are done...\n this.$table.append(this.$thead);\n \n if (this.options.createPosition === 'bottom') {\n this.$table.append(this.$tbody).append(this.$create);\n } else {\n this.$table.append(this.$create).append(this.$tbody);\n }\n \n this.$table.removeClass(this.classNames.LOADING).trigger(this._event.INITIALIZED, [this]);\n \n triggerEvtForInst(this._event.INITIALIZED, this, [this]);\n \n if (this.options.autoFocus) {\n this.$table.find(':input:text:first').focus(); // set focus to first field\n }\n },\n \n /**\n * Shows loading indicator and text\n *\n * @return {RestfulTable}\n */\n showGlobalLoading: function showGlobalLoading() {\n if (!this.$loading) {\n this.$loading = (0, _jquery2.default)('<div class=\"aui-restfultable-init\">' + (0, _throbber2.default)() + '<span class=\"aui-restfultable-loading\">' + this.options.loadingMsg + '</span></div>');\n }\n \n if (!this.$loading.is(':visible')) {\n this.$loading.insertAfter(this.$table);\n }\n \n return this;\n },\n \n /**\n * Hides loading indicator and text\n * @return {RestfulTable}\n */\n hideGlobalLoading: function hideGlobalLoading() {\n if (this.$loading) {\n this.$loading.remove();\n }\n return this;\n },\n \n /**\n * Adds row to collection and renders it\n *\n * @param {Object} values\n * @param {number} index\n * @return {RestfulTable}\n */\n addRow: function addRow(values, index) {\n var view;\n var model;\n \n if (!values.id) {\n throw new Error('RestfulTable.addRow: to add a row values object must contain an id. ' + 'Maybe you are not returning it from your restend point?' + 'Recieved:' + JSON.stringify(values));\n }\n \n model = new this.options.model(values);\n \n view = this._renderRow(model, index);\n \n this._models.add(model);\n this.removeNoEntriesMsg();\n \n // Let everyone know we added a row\n triggerEvtForInst(this._event.ROW_ADDED, this, [view, this]);\n return this;\n },\n \n /**\n * Provided a view, removes it from display and backbone collection\n *\n * @param row {Row} The row to remove.\n */\n removeRow: function removeRow(row) {\n this._models.remove(row.model);\n row.remove();\n \n if (this.isEmpty()) {\n this.showNoEntriesMsg();\n }\n \n // Let everyone know we removed a row\n triggerEvtForInst(this._event.ROW_REMOVED, this, [row, this]);\n },\n \n /**\n * Is there any entries in the table\n *\n * @return {Boolean}\n */\n isEmpty: function isEmpty() {\n return this._models.length === 0;\n },\n \n /**\n * Gets all models\n *\n * @return {Backbone.Collection}\n */\n getModels: function getModels() {\n return this._models;\n },\n \n /**\n * Gets table body\n *\n * @return {jQuery}\n */\n getTable: function getTable() {\n return this.$table;\n },\n \n /**\n * Gets table body\n *\n * @return {jQuery}\n */\n getTableBody: function getTableBody() {\n return this.$tbody;\n },\n \n /**\n * Gets create Row\n *\n * @return {EditRow}\n */\n getCreateRow: function getCreateRow() {\n return this._createRow;\n },\n \n /**\n * Gets the number of table columns, accounting for the number of\n * additional columns added by RestfulTable itself\n * (such as the drag handle column, buttons and actions columns)\n *\n * @return {Number}\n */\n getColumnCount: function getColumnCount() {\n var staticFieldCount = 2; // accounts for the columns allocated to submit buttons and loading indicator\n if (this.allowReorder) {\n ++staticFieldCount;\n }\n return this.options.columns.length + staticFieldCount;\n },\n \n /**\n * Get the Row that corresponds to the given <tr> element.\n *\n * @param {HTMLElement} tr\n *\n * @return {Row}\n */\n getRowFromElement: function getRowFromElement(tr) {\n return (0, _jquery2.default)(tr).data(this.dataKeys.ROW_VIEW);\n },\n \n /**\n * Shows message {options.noEntriesMsg} to the user if there are no entries\n *\n * @return {RestfulTable}\n */\n showNoEntriesMsg: function showNoEntriesMsg() {\n \n if (this.$noEntries) {\n this.$noEntries.remove();\n }\n \n this.$noEntries = (0, _jquery2.default)('<tr>').addClass(this.classNames.NO_ENTRIES).append((0, _jquery2.default)('<td>').attr('colspan', this.getColumnCount()).text(this.options.noEntriesMsg)).appendTo(this.$tbody);\n \n return this;\n },\n \n /**\n * Removes message {options.noEntriesMsg} to the user if there ARE entries\n *\n * @return {RestfulTable}\n */\n removeNoEntriesMsg: function removeNoEntriesMsg() {\n if (this.$noEntries && this._models.length > 0) {\n this.$noEntries.remove();\n }\n return this;\n },\n \n /**\n * Gets the Row from their associated <tr> elements\n *\n * @return {Array}\n */\n getRows: function getRows() {\n \n var instance = this,\n views = [];\n \n this.$tbody.find('.' + this.classNames.READ_ONLY).each(function () {\n \n var $row = (0, _jquery2.default)(this),\n view = $row.data(instance.dataKeys.ROW_VIEW);\n \n if (view) {\n views.push(view);\n }\n });\n \n return views;\n },\n \n /**\n * Appends entry to end or specified index of table\n *\n * @param {EntryModel} model\n * @param index\n *\n * @return {jQuery}\n */\n _renderRow: function _renderRow(model, index) {\n \n var instance = this,\n $rows = this.$tbody.find('.' + this.classNames.READ_ONLY),\n $row,\n view;\n \n view = new this._rowClass({\n model: model,\n columns: this.options.columns,\n allowEdit: this.options.allowEdit,\n allowDelete: this.options.allowDelete,\n allowReorder: this.options.allowReorder,\n deleteConfirmation: this.options.deleteConfirmation\n });\n \n this.removeNoEntriesMsg();\n \n view.bind(this._event.ROW_EDIT, function (field) {\n triggerEvtForInst(this._event.EDIT_ROW, {}, [this, instance]);\n instance.edit(this, field);\n });\n \n $row = view.render().$el;\n \n if (index !== -1) {\n \n if (typeof index === 'number' && $rows.length !== 0) {\n $row.insertBefore($rows[index]);\n } else {\n this.$tbody.append($row);\n }\n }\n \n $row.data(this.dataKeys.ROW_VIEW, view);\n \n // deactivate all rows - used in the cases, such as opening a dropdown where you do not want the table editable\n // or any interactions\n view.bind(this._event.MODAL, function () {\n instance.$table.removeClass(instance.classNames.ALLOW_HOVER);\n instance.$tbody.sortable('disable');\n instance.getRows().forEach(function (row) {\n if (!instance.isRowBeingEdited(row)) {\n row.delegateEvents({}); // clear all events\n }\n });\n });\n \n // activate all rows - used in the cases, such as opening a dropdown where you do not want the table editable\n // or any interactions\n view.bind(this._event.MODELESS, function () {\n instance.$table.addClass(instance.classNames.ALLOW_HOVER);\n instance.$tbody.sortable('enable');\n instance.getRows().forEach(function (row) {\n if (!instance.isRowBeingEdited(row)) {\n row.delegateEvents(); // rebind all events\n }\n });\n });\n \n // ensure that when this row is focused no other are\n this._applyFocusCoordinator(view);\n \n this.trigger(this._event.ROW_INITIALIZED, view);\n \n return view;\n },\n \n /**\n * Returns if the row is edit mode or note.\n *\n * @param {Row} row Read-only row to check if being edited.\n *\n * @return {Boolean}\n */\n isRowBeingEdited: function isRowBeingEdited(row) {\n \n var isBeingEdited = false;\n \n this.editRows.some(function (editRow) {\n if (editRow.el === row.el) {\n isBeingEdited = true;\n return true;\n }\n });\n \n return isBeingEdited;\n },\n \n /**\n * Ensures that when supplied view is focused no others are\n *\n * @param {Backbone.View} view\n * @return {RestfulTable}\n */\n _applyFocusCoordinator: function _applyFocusCoordinator(view) {\n var instance = this;\n \n if (!view.hasFocusBound) {\n view.hasFocusBound = true;\n \n view.bind(this._event.FOCUS, function () {\n if (instance.focusedRow && instance.focusedRow !== view) {\n instance.focusedRow.trigger(instance._event.BLUR);\n }\n instance.focusedRow = view;\n if (view instanceof _row2.default && instance._createRow) {\n instance._createRow.enable();\n }\n });\n }\n \n return this;\n },\n \n /**\n * Remove specified row from collection holding rows being concurrently edited\n *\n * @param {EditRow} editView\n *\n * @return {RestfulTable}\n */\n _removeEditRow: function _removeEditRow(editView) {\n var index = _jquery2.default.inArray(editView, this.editRows);\n this.editRows.splice(index, 1);\n return this;\n },\n \n /**\n * Focuses last row still being edited or create row (if it exists)\n *\n * @return {RestfulTable}\n */\n _shiftFocusAfterEdit: function _shiftFocusAfterEdit() {\n \n if (this.editRows.length > 0) {\n this.editRows[this.editRows.length - 1].trigger(this._event.FOCUS);\n } else if (this._createRow) {\n this._createRow.trigger(this._event.FOCUS);\n }\n \n return this;\n },\n \n /**\n * Evaluate if we save row when we blur. We can only do this when there is one row being edited at a time, otherwise\n * it causes an infinite loop JRADEV-5325\n *\n * @return {boolean}\n */\n _saveEditRowOnBlur: function _saveEditRowOnBlur() {\n return this.editRows.length <= 1;\n },\n \n /**\n * Dismisses rows being edited concurrently that have no changes\n */\n dismissEditRows: function dismissEditRows() {\n this.editRows.forEach(function (editRow) {\n if (!editRow.hasUpdates()) {\n editRow.trigger(this._event.FINISHED_EDITING);\n }\n }, this);\n },\n \n /**\n * Converts readonly row to editable view\n *\n * @param {Backbone.View} row\n * @param {String} field - field name to focus\n * @return {Backbone.View} editRow\n */\n edit: function edit(row, field) {\n var instance = this;\n var editRow = new this.options.views.editRow({\n el: row.el,\n columns: this.options.columns,\n isUpdateMode: true,\n allowReorder: this.options.allowReorder,\n fieldFocusSelector: this.options.fieldFocusSelector,\n model: row.model,\n cancelAccessKey: this.options.cancelAccessKey,\n submitAccessKey: this.options.submitAccessKey\n });\n var values = row.model.toJSON();\n \n values.update = true;\n editRow.render({\n errors: {},\n update: true,\n values: values\n }).bind(instance._event.UPDATED, function (model, focusUpdated) {\n instance._removeEditRow(this);\n this.unbind();\n row.render().delegateEvents(); // render and rebind events\n row.trigger(instance._event.UPDATED); // trigger blur fade out\n if (focusUpdated !== false) {\n instance._shiftFocusAfterEdit();\n }\n }).bind(instance._event.VALIDATION_ERROR, function () {\n this.trigger(instance._event.FOCUS);\n }).bind(instance._event.FINISHED_EDITING, function () {\n instance._removeEditRow(this);\n row.render().delegateEvents();\n this.unbind(); // avoid any other updating, blurring, finished editing, cancel events being fired\n }).bind(instance._event.CANCEL, function () {\n instance._removeEditRow(this);\n this.unbind(); // avoid any other updating, blurring, finished editing, cancel events being fired\n row.render().delegateEvents(); // render and rebind events\n instance._shiftFocusAfterEdit();\n }).bind(instance._event.BLUR, function () {\n instance.dismissEditRows(); // dismiss edit rows that have no changes\n if (instance._saveEditRowOnBlur()) {\n this.trigger(instance._event.SAVE, false); // save row, which if successful will call the updated event above\n }\n });\n \n // Ensure that if focus is pulled to another row, we blur the edit row\n this._applyFocusCoordinator(editRow);\n \n // focus edit row, which has the flow on effect of blurring current focused row\n editRow.trigger(instance._event.FOCUS, field);\n \n // disables form fields\n if (instance._createRow) {\n instance._createRow.disable();\n }\n \n this.editRows.push(editRow);\n \n return editRow;\n },\n \n /**\n * Renders all specified rows\n *\n * @param rows {Array<Backbone.Model>} array of objects describing Backbone.Model's to render\n * @return {RestfulTable}\n */\n renderRows: function renderRows(rows) {\n var comparator = this._models.comparator;\n var els = [];\n \n this._models.comparator = undefined; // disable temporarily, assume rows are sorted\n \n var models = _.map(rows, function (row) {\n var model = new this.options.model(row);\n els.push(this._renderRow(model, -1).el);\n return model;\n }, this);\n \n this._models.add(models, { silent: true });\n this._models.comparator = comparator;\n this.removeNoEntriesMsg();\n this.$tbody.append(els);\n \n return this;\n },\n \n /**\n * Gets default options\n *\n * @param {Object} options\n */\n _getDefaultOptions: function _getDefaultOptions(options) {\n return {\n model: options.model || _entryModel2.default,\n allowEdit: true,\n views: {\n editRow: _editRow2.default,\n row: _row2.default\n },\n Collection: _backbone2.default.Collection.extend({\n url: options.resources.self,\n model: options.model || _entryModel2.default\n }),\n allowReorder: false,\n fieldFocusSelector: function fieldFocusSelector(name) {\n return ':input[name=' + name + '], #' + name;\n },\n loadingMsg: options.loadingMsg || AJS.I18n.getText('aui.words.loading')\n };\n }\n });\n \n RestfulTable.ClassNames = _classNames2.default;\n RestfulTable.CustomCreateView = _customCreateView2.default;\n RestfulTable.CustomEditView = _customEditView2.default;\n RestfulTable.CustomReadView = _customReadView2.default;\n RestfulTable.DataKeys = _dataKeys2.default;\n RestfulTable.EditRow = _editRow2.default;\n RestfulTable.EntryModel = _entryModel2.default;\n RestfulTable.Events = _events2.default;\n RestfulTable.Row = _row2.default;\n RestfulTable.Throbber = _throbber2.default;\n \n (0, _globalize2.default)('RestfulTable', RestfulTable);\n \n exports.default = RestfulTable;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/result-set.js\n(typeof window === 'undefined' ? global : window).__e3fbbf890609b6db46a82b7be9126574 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var ResultSet = _backbone2.default.Model.extend({\n initialize: function initialize(options) {\n this.set('active', null, { silent: true });\n this.collection = new _backbone2.default.Collection();\n this.collection.bind('reset', this.setActive, this);\n this.source = options.source;\n this.source.bind('respond', this.process, this);\n },\n \n url: false,\n \n process: function process(response) {\n this.set('query', response.query);\n this.collection.reset(response.results);\n this.set('length', response.results.length);\n this.trigger('update', this);\n },\n \n setActive: function setActive() {\n var id = arguments[0] instanceof _backbone2.default.Collection ? false : arguments[0];\n var model = id ? this.collection.get(id) : this.collection.first();\n this.set('active', model || null);\n return this.get('active');\n },\n \n next: function next() {\n var current = this.collection.indexOf(this.get('active'));\n var i = (current + 1) % this.get('length');\n var next = this.collection.at(i);\n return this.setActive(next && next.id);\n },\n \n prev: function prev() {\n var current = this.collection.indexOf(this.get('active'));\n var i = (current === 0 ? this.get('length') : current) - 1;\n var prev = this.collection.at(i);\n return this.setActive(prev && prev.id);\n },\n \n each: function each() {\n return this.collection.each.apply(this.collection, arguments);\n }\n });\n \n (0, _globalize2.default)('ResultSet', ResultSet);\n \n exports.default = ResultSet;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/results-list.js\n(typeof window === 'undefined' ? global : window).__356ffd37129515ca6816aae037e6b597 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _underscore = __1816fd18477a65e315273fac20d1a521;\n \n var _underscore2 = _interopRequireDefault(_underscore);\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n var _resultSet = __e3fbbf890609b6db46a82b7be9126574;\n \n var _resultSet2 = _interopRequireDefault(_resultSet);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var ResultsList = _backbone2.default.View.extend({\n events: {\n 'click [data-id]': 'setSelection'\n },\n \n initialize: function initialize(options) {\n if (!this.model) {\n this.model = new _resultSet2.default({ source: options.source });\n }\n \n if (!(this.model instanceof _resultSet2.default)) {\n throw new Error('model must be set to a ResultSet');\n }\n \n this.model.bind('update', this.process, this);\n \n this.render = _underscore2.default.wrap(this.render, function (func) {\n this.trigger('rendering');\n func.apply(this, arguments);\n this.trigger('rendered');\n });\n },\n \n process: function process() {\n if (!this._shouldShow(this.model.get('query'))) {\n return;\n }\n this.show();\n },\n \n render: function render() {\n var ul = _backbone2.default.$('<ul/>');\n this.model.each(function (model) {\n var li = _backbone2.default.$('<li/>').attr('data-id', model.id).html(this.renderItem(model)).appendTo(ul);\n }, this);\n this.$el.html(ul);\n return this;\n },\n \n renderItem: function renderItem() {\n return;\n },\n \n setSelection: function setSelection(event) {\n var id = event.target.getAttribute('data-id');\n var selected = this.model.setActive(id);\n this.trigger('selected', selected);\n },\n \n show: function show() {\n this.lastQuery = this.model.get('query');\n this._hiddenQuery = null;\n this.render();\n this.$el.show();\n },\n \n hide: function hide() {\n this.$el.hide();\n this._hiddenQuery = this.lastQuery;\n },\n \n size: function size() {\n return this.model.get('length');\n },\n \n _shouldShow: function _shouldShow(query) {\n return query === '' || !(this._hiddenQuery && this._hiddenQuery === query);\n }\n });\n \n (0, _globalize2.default)('ResultsList', ResultsList);\n \n exports.default = ResultsList;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js-vendor/spin/spin.js\n(typeof window === 'undefined' ? global : window).__1c026f5ea1c486e1b4539210ed320325 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n var defineDependencies = {\n \"module\": module,\n \"exports\": exports\n };\n var define = function defineReplacementWrapper(generatedModuleName) {\n return function defineReplacement(name, deps, func) {\n var root = (typeof window === 'undefined' ? global : window);\n var defineGlobal = root.define;\n var rval;\n var type;\n \n func = [func, deps, name].filter(function (cur) {\n return typeof cur === 'function';\n })[0];\n deps = [deps, name, []].filter(Array.isArray)[0];\n rval = func.apply(null, deps.map(function (value) {\n return defineDependencies[value];\n }));\n type = typeof rval;\n \n // Support existing AMD libs.\n if (typeof defineGlobal === 'function') {\n // Almond always expects a name so resolve one (#29).\n defineGlobal(typeof name === 'string' ? name : generatedModuleName, deps, func);\n }\n \n // Some processors like Babel don't check to make sure that the module value\n // is not a primitive before calling Object.defineProperty() on it. We ensure\n // it is an instance so that it can.\n if (type === 'string') {\n rval = String(rval);\n } else if (type === 'number') {\n rval = Number(rval);\n } else if (type === 'boolean') {\n rval = Boolean(rval);\n }\n \n // Reset the exports to the defined module. This is how we convert AMD to\n // CommonJS and ensures both can either co-exist, or be used separately. We\n // only set it if it is not defined because there is no object representation\n // of undefined, thus calling Object.defineProperty() on it would fail.\n if (rval !== undefined) {\n exports = module.exports = rval;\n }\n };\n }(\"__1c026f5ea1c486e1b4539210ed320325\");\n define.amd = true;\n \n //fgnass.github.com/spin.js#v1.3.3\n /*\n Modified by Atlassian\n */\n \n /**\n * Copyright (c) 2011-2013 Felix Gnass\n * Licensed under the MIT license\n */\n (function(root, factory) {\n \n /* CommonJS */\n if (typeof exports == 'object') module.exports = factory()\n \n /* AMD module */\n // ATLASSIAN - don't check define.amd for products who deleted it.\n else if (typeof define == 'function') define('aui/internal/spin', factory)\n \n /* Browser global */\n // ATLASSIAN - always expose Spinner globally\n root.Spinner = factory()\n }\n (this, function() {\n \n var prefixes = ['webkit', 'Moz', 'ms', 'O'] /* Vendor prefixes */\n , animations = {} /* Animation rules keyed by their name */\n , useCssAnimations /* Whether to use CSS animations or setTimeout */\n \n /**\n * Utility function to create elements. If no tag name is given,\n * a DIV is created. Optionally properties can be passed.\n */\n function createEl(tag, prop) {\n var el = document.createElement(tag || 'div')\n , n\n \n for(n in prop) el[n] = prop[n]\n return el\n }\n \n /**\n * Appends children and returns the parent.\n */\n function ins(parent /* child1, child2, ...*/) {\n for (var i=1, n=arguments.length; i<n; i++)\n parent.appendChild(arguments[i])\n \n return parent\n }\n \n /**\n * Insert a new stylesheet to hold the @keyframe or VML rules.\n */\n var sheet = (function() {\n var el = createEl('style', {type : 'text/css'})\n ins(document.getElementsByTagName('head')[0], el)\n return el.sheet || el.styleSheet\n }())\n \n /**\n * Creates an opacity keyframe animation rule and returns its name.\n * Since most mobile Webkits have timing issues with animation-delay,\n * we create separate rules for each line/segment.\n */\n function addAnimation(alpha, trail, i, lines) {\n var name = ['opacity', trail, ~~(alpha*100), i, lines].join('-')\n , start = 0.01 + i/lines * 100\n , z = Math.max(1 - (1-alpha) / trail * (100-start), alpha)\n , prefix = useCssAnimations.substring(0, useCssAnimations.indexOf('Animation')).toLowerCase()\n , pre = prefix && '-' + prefix + '-' || ''\n \n if (!animations[name]) {\n sheet.insertRule(\n '@' + pre + 'keyframes ' + name + '{' +\n '0%{opacity:' + z + '}' +\n start + '%{opacity:' + alpha + '}' +\n (start+0.01) + '%{opacity:1}' +\n (start+trail) % 100 + '%{opacity:' + alpha + '}' +\n '100%{opacity:' + z + '}' +\n '}', sheet.cssRules.length)\n \n animations[name] = 1\n }\n \n return name\n }\n \n /**\n * Tries various vendor prefixes and returns the first supported property.\n */\n function vendor(el, prop) {\n var s = el.style\n , pp\n , i\n \n prop = prop.charAt(0).toUpperCase() + prop.slice(1)\n for(i=0; i<prefixes.length; i++) {\n pp = prefixes[i]+prop\n if(s[pp] !== undefined) return pp\n }\n if(s[prop] !== undefined) return prop\n }\n \n /**\n * Sets multiple style properties at once.\n */\n function css(el, prop) {\n for (var n in prop)\n el.style[vendor(el, n)||n] = prop[n]\n \n return el\n }\n \n /**\n * Fills in default values.\n */\n function merge(obj) {\n for (var i=1; i < arguments.length; i++) {\n var def = arguments[i]\n for (var n in def)\n if (obj[n] === undefined) obj[n] = def[n]\n }\n return obj\n }\n \n /**\n * Returns the absolute page-offset of the given element.\n */\n function pos(el) {\n var o = { x:el.offsetLeft, y:el.offsetTop }\n while((el = el.offsetParent))\n // ATLASSIAN - AUI-3542 - add border width to the calculation of o.x and o.y\n o.x+=el.offsetLeft+el.clientLeft, o.y+=el.offsetTop+el.clientTop\n \n return o\n }\n \n /**\n * Returns the line color from the given string or array.\n */\n function getColor(color, idx) {\n return typeof color == 'string' ? color : color[idx % color.length]\n }\n \n // Built-in defaults\n \n var defaults = {\n lines: 12, // The number of lines to draw\n length: 7, // The length of each line\n width: 5, // The line thickness\n radius: 10, // The radius of the inner circle\n rotate: 0, // Rotation offset\n corners: 1, // Roundness (0..1)\n color: '#000', // #rgb or #rrggbb\n direction: 1, // 1: clockwise, -1: counterclockwise\n speed: 1, // Rounds per second\n trail: 100, // Afterglow percentage\n opacity: 1/4, // Opacity of the lines\n fps: 20, // Frames per second when using setTimeout()\n zIndex: 2e9, // Use a high z-index by default\n className: 'spinner', // CSS class to assign to the element\n top: 'auto', // center vertically\n left: 'auto', // center horizontally\n position: 'relative' // element position\n }\n \n /** The constructor */\n function Spinner(o) {\n if (typeof this == 'undefined') return new Spinner(o)\n this.opts = merge(o || {}, Spinner.defaults, defaults)\n }\n \n // Global defaults that override the built-ins:\n Spinner.defaults = {}\n \n merge(Spinner.prototype, {\n \n /**\n * Adds the spinner to the given target element. If this instance is already\n * spinning, it is automatically removed from its previous target b calling\n * stop() internally.\n */\n spin: function(target) {\n this.stop()\n \n var self = this\n , o = self.opts\n , el = self.el = css(createEl(0, {className: o.className}), {position: o.position, width: 0, zIndex: o.zIndex})\n , mid = o.radius+o.length+o.width\n , ep // element position\n , tp // target position\n \n if (target) {\n target.insertBefore(el, target.firstChild||null)\n tp = pos(target)\n ep = pos(el)\n css(el, {\n left: (o.left == 'auto' ? tp.x-ep.x + (target.offsetWidth >> 1) : parseInt(o.left, 10) + mid) + 'px',\n top: (o.top == 'auto' ? tp.y-ep.y + (target.offsetHeight >> 1) : parseInt(o.top, 10) + mid) + 'px'\n })\n }\n \n el.setAttribute('role', 'progressbar')\n self.lines(el, self.opts)\n \n if (!useCssAnimations) {\n // No CSS animation support, use setTimeout() instead\n var i = 0\n , start = (o.lines - 1) * (1 - o.direction) / 2\n , alpha\n , fps = o.fps\n , f = fps/o.speed\n , ostep = (1-o.opacity) / (f*o.trail / 100)\n , astep = f/o.lines\n \n ;(function anim() {\n i++;\n for (var j = 0; j < o.lines; j++) {\n alpha = Math.max(1 - (i + (o.lines - j) * astep) % f * ostep, o.opacity)\n \n self.opacity(el, j * o.direction + start, alpha, o)\n }\n self.timeout = self.el && setTimeout(anim, ~~(1000/fps))\n })()\n }\n return self\n },\n \n /**\n * Stops and removes the Spinner.\n */\n stop: function() {\n var el = this.el\n if (el) {\n clearTimeout(this.timeout)\n if (el.parentNode) el.parentNode.removeChild(el)\n this.el = undefined\n }\n return this\n },\n \n /**\n * Internal method that draws the individual lines. Will be overwritten\n * in VML fallback mode below.\n */\n lines: function(el, o) {\n var i = 0\n , start = (o.lines - 1) * (1 - o.direction) / 2\n , seg\n \n function fill(color, shadow) {\n return css(createEl(), {\n position: 'absolute',\n width: (o.length+o.width) + 'px',\n height: o.width + 'px',\n background: color,\n boxShadow: shadow,\n transformOrigin: 'left',\n transform: 'rotate(' + ~~(360/o.lines*i+o.rotate) + 'deg) translate(' + o.radius+'px' +',0)',\n borderRadius: (o.corners * o.width>>1) + 'px'\n })\n }\n \n for (; i < o.lines; i++) {\n seg = css(createEl(), {\n position: 'absolute',\n top: 1+~(o.width/2) + 'px',\n transform: o.hwaccel ? 'translate3d(0,0,0)' : '',\n opacity: o.opacity,\n animation: useCssAnimations && addAnimation(o.opacity, o.trail, start + i * o.direction, o.lines) + ' ' + 1/o.speed + 's linear infinite'\n })\n \n if (o.shadow) ins(seg, css(fill('#000', '0 0 4px ' + '#000'), {top: 2+'px'}))\n ins(el, ins(seg, fill(getColor(o.color, i), '0 0 1px rgba(0,0,0,.1)')))\n }\n return el\n },\n \n /**\n * Internal method that adjusts the opacity of a single line.\n * Will be overwritten in VML fallback mode below.\n */\n opacity: function(el, i, val) {\n if (i < el.childNodes.length) el.childNodes[i].style.opacity = val\n }\n \n })\n \n \n function initVML() {\n \n /* Utility function to create a VML tag */\n function vml(tag, attr) {\n return createEl('<' + tag + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"spin-vml\">', attr)\n }\n \n // No CSS transforms but VML support, add a CSS rule for VML elements:\n sheet.addRule('.spin-vml', 'behavior:url(#default#VML)')\n \n Spinner.prototype.lines = function(el, o) {\n var r = o.length+o.width\n , s = 2*r\n \n function grp() {\n return css(\n vml('group', {\n coordsize: s + ' ' + s,\n coordorigin: -r + ' ' + -r\n }),\n { width: s, height: s }\n )\n }\n \n var margin = -(o.width+o.length)*2 + 'px'\n , g = css(grp(), {position: 'absolute', top: margin, left: margin})\n , i\n \n function seg(i, dx, filter) {\n ins(g,\n ins(css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx}),\n ins(css(vml('roundrect', {arcsize: o.corners}), {\n width: r,\n height: o.width,\n left: o.radius,\n top: -o.width>>1,\n filter: filter\n }),\n vml('fill', {color: getColor(o.color, i), opacity: o.opacity}),\n vml('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change\n )\n )\n )\n }\n \n if (o.shadow)\n for (i = 1; i <= o.lines; i++)\n seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)')\n \n for (i = 1; i <= o.lines; i++) seg(i)\n return ins(el, g)\n }\n \n Spinner.prototype.opacity = function(el, i, val, o) {\n var c = el.firstChild\n o = o.shadow && o.lines || 0\n if (c && i+o < c.childNodes.length) {\n c = c.childNodes[i+o]; c = c && c.firstChild; c = c && c.firstChild\n if (c) c.opacity = val\n }\n }\n }\n \n var probe = css(createEl('group'), {behavior: 'url(#default#VML)'})\n \n if (!vendor(probe, 'transform') && probe.adj) initVML()\n else useCssAnimations = vendor(probe, 'animation')\n \n return Spinner\n \n }));\n \n \n return module.exports;\n}).call(this);\n// src/js-vendor/jquery/jquery.spin.js\n(typeof window === 'undefined' ? global : window).__fefff8d03cd4e42ee1989eb9d2262cd8 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n /*\n * Ideas from https://gist.github.com/its-florida/1290439 are acknowledged and used here.\n * Resulting file is heavily modified from that gist so is licensed under AUI's license.\n *\n * You can now create a spinner using any of the variants below:\n *\n * $(\"#el\").spin(); // Produces default Spinner using the text color of #el.\n * $(\"#el\").spin(\"small\"); // Produces a 'small' Spinner using the text color of #el.\n * $(\"#el\").spin(\"large\", { ... }); // Produces a 'large' Spinner with your custom settings.\n * $(\"#el\").spin({ ... }); // Produces a Spinner using your custom settings.\n *\n * $(\"#el\").spin(false); // Kills the spinner.\n * $(\"#el\").spinStop(); // Also kills the spinner.\n *\n */\n (function($) {\n $.fn.spin = function(optsOrPreset, opts) {\n var preset, options;\n \n if (typeof optsOrPreset === 'string') {\n if (! optsOrPreset in $.fn.spin.presets) {\n throw new Error(\"Preset '\" + optsOrPreset + \"' isn't defined\");\n }\n preset = $.fn.spin.presets[optsOrPreset];\n options = opts || {};\n } else {\n if (opts) {\n throw new Error('Invalid arguments. Accepted arguments:\\n' +\n '$.spin([String preset[, Object options]]),\\n' +\n '$.spin(Object options),\\n' +\n '$.spin(Boolean shouldSpin)');\n }\n preset = $.fn.spin.presets.small;\n options = $.isPlainObject(optsOrPreset) ? optsOrPreset : {};\n }\n \n if (window.Spinner) {\n return this.each(function() {\n var $this = $(this),\n data = $this.data();\n \n if (data.spinner) {\n data.spinner.stop();\n delete data.spinner;\n }\n \n if (optsOrPreset === false) { // just stop it spinning.\n return;\n }\n \n options = $.extend({ color: $this.css('color') }, preset, options);\n data.spinner = new Spinner(options).spin(this);\n });\n } else {\n throw \"Spinner class not available.\";\n }\n };\n $.fn.spin.presets = {\n \"small\": { lines: 12, length: 3, width: 2, radius: 3, trail: 60, speed: 1.5 },\n \"medium\": { lines: 12, length: 5, width: 3, radius: 8, trail: 60, speed: 1.5 },\n \"large\": { lines: 12, length: 8, width: 4, radius: 10, trail: 60, speed: 1.5 }\n };\n \n $.fn.spinStop = function() {\n if (window.Spinner) {\n return this.each(function() {\n var $this = $(this),\n data = $this.data();\n \n if (data.spinner) {\n data.spinner.stop();\n delete data.spinner;\n }\n \n });\n } else {\n throw \"Spinner class not available.\";\n }\n };\n })(jQuery);\n \n return module.exports;\n}).call(this);\n// src/js/aui/spin.js\n(typeof window === 'undefined' ? global : window).__cfdf267b6fbf78d55c9426e604b18f15 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n __1c026f5ea1c486e1b4539210ed320325;\n \n __fefff8d03cd4e42ee1989eb9d2262cd8;\n \n return module.exports;\n}).call(this);\n// src/js/aui/internal/select/option.js\n(typeof window === 'undefined' ? global : window).__b4954444d8156140d9ea75a1e5a3e11d = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n exports.default = (0, _skate2.default)('aui-option', {\n created: function created(element) {\n Object.defineProperty(element, 'value', {\n get: function get() {\n return element.getAttribute('value') || element.textContent;\n },\n set: function set(value) {\n element.setAttribute('value', value);\n }\n });\n },\n prototype: {\n serialize: function serialize() {\n var json = {};\n if (this.hasAttribute('img-src')) {\n json['img-src'] = this.getAttribute('img-src');\n }\n json.value = this.value;\n json.label = this.textContent;\n \n return json;\n }\n }\n });\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/internal/select/suggestion-model.js\n(typeof window === 'undefined' ? global : window).__305fbbb070fe250906b5460582113339 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _backbone = __f6766346ba0156e0f5df37462b77c757;\n \n var _backbone2 = _interopRequireDefault(_backbone);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n exports.default = _backbone2.default.Model.extend({\n idAttribute: 'label',\n getLabel: function getLabel() {\n return this.get('label') || this.get('value');\n }\n });\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/internal/select/suggestions-model.js\n(typeof window === 'undefined' ? global : window).__01eabc5411ada2a444b0130909d5c9f0 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n function SuggestionsModel() {\n this._suggestions = [];\n this._activeIndex = -1;\n }\n \n SuggestionsModel.prototype = {\n onChange: function onChange() {},\n \n onHighlightChange: function onHighlightChange() {},\n \n get: function get(index) {\n return this._suggestions[index];\n },\n \n set: function set(suggestions) {\n var oldSuggestions = this._suggestions;\n this._suggestions = suggestions || [];\n this.onChange(oldSuggestions);\n return this;\n },\n \n getNumberOfResults: function getNumberOfResults() {\n return this._suggestions.length;\n },\n \n setHighlighted: function setHighlighted(toHighlight) {\n if (toHighlight) {\n for (var i = 0; i < this._suggestions.length; i++) {\n if (this._suggestions[i].id === toHighlight.id) {\n this.highlight(i);\n }\n }\n }\n \n return this;\n },\n \n highlight: function highlight(index) {\n this._activeIndex = index;\n this.onHighlightChange();\n return this;\n },\n \n highlightPrevious: function highlightPrevious() {\n var current = this._activeIndex;\n var previousActiveIndex = current === 0 ? current : current - 1;\n this.highlight(previousActiveIndex);\n return this;\n },\n \n highlightNext: function highlightNext() {\n var current = this._activeIndex;\n var nextActiveIndex = current === this._suggestions.length - 1 ? current : current + 1;\n this.highlight(nextActiveIndex);\n return this;\n },\n \n highlighted: function highlighted() {\n return this.get(this._activeIndex);\n },\n \n highlightedIndex: function highlightedIndex() {\n return this._activeIndex;\n }\n };\n \n exports.default = SuggestionsModel;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/internal/select/suggestions-view.js\n(typeof window === 'undefined' ? global : window).__6e10beb025feee8368cf40a8ec8ba1b9 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __2a8f02ddf948a2241e4b1ac8618d2015;\n \n var _alignment = __1c8b45ce15e2aedaf2079a51e1071300;\n \n var _alignment2 = _interopRequireDefault(_alignment);\n \n var _layer = __e0d3e833c519cf116c3cdd59e52f030e;\n \n var _layer2 = _interopRequireDefault(_layer);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n function generateListItemID(listId, index) {\n return listId + '-' + index;\n }\n \n /**\n *\n * @param view SuggestionsView\n */\n function enableAlignment(view) {\n if (view.anchor && !view.auiAlignment) {\n view.auiAlignment = new _alignment2.default(view.el, view.anchor);\n }\n \n if (view.auiAlignment) {\n view.auiAlignment.enable();\n }\n }\n \n function destroyAlignment(view) {\n if (view.auiAlignment) {\n view.auiAlignment.destroy();\n }\n }\n \n function matchWidth(view) {\n (0, _jquery2.default)(view.el).css('min-width', (0, _jquery2.default)(view.anchor).outerWidth());\n }\n \n function SuggestionsView(element, anchor) {\n this.el = element;\n this.anchor = anchor;\n }\n \n function clearActive(element) {\n (0, _jquery2.default)(element).find('.aui-select-active').removeClass('aui-select-active');\n }\n \n SuggestionsView.prototype = {\n render: function render(suggestions, currentLength, listId) {\n this.currListId = listId;\n var html = '';\n \n // Do nothing if we have no new suggestions, otherwise append anything else we find.\n if (suggestions.length) {\n var i = currentLength;\n suggestions.forEach(function (sugg) {\n var label = sugg.getLabel();\n var imageSrc = sugg.get('img-src');\n var image = imageSrc ? '<img src=\"' + imageSrc + '\"/>' : '';\n var newValueText = sugg.get('new-value') ? ' (<em>' + AJS.I18n.getText('aui.select.new.value') + '</em>)' : '';\n html += '<li role=\"option\" class=\"aui-select-suggestion\" id=\"' + generateListItemID(listId, i) + '\">' + image + label + newValueText + '</li>';\n i++;\n });\n \n // If the old suggestions were empty, a <li> of 'No suggestions' will be appended, we need to remove it\n if (currentLength) {\n this.el.querySelector('ul').innerHTML += html;\n } else {\n this.el.querySelector('ul').innerHTML = html;\n }\n } else if (!currentLength) {\n this.el.querySelector('ul').innerHTML = '<li role=\"option\" class=\"aui-select-no-suggestions\">' + AJS.I18n.getText('aui.select.no.suggestions') + '</li>';\n }\n \n return this;\n },\n setActive: function setActive(active) {\n clearActive(this.el);\n (0, _jquery2.default)(this.el).find('#' + generateListItemID(this.currListId, active)).addClass('aui-select-active');\n },\n getActive: function getActive() {\n return this.el.querySelector('.aui-select-active');\n },\n show: function show() {\n matchWidth(this);\n (0, _layer2.default)(this.el).show();\n enableAlignment(this);\n },\n hide: function hide() {\n clearActive(this.el);\n (0, _layer2.default)(this.el).hide();\n destroyAlignment(this);\n },\n isVisible: function isVisible() {\n return (0, _jquery2.default)(this.el).is(':visible');\n }\n };\n \n exports.default = SuggestionsView;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/internal/select/template.js\n(typeof window === 'undefined' ? global : window).__80d9027610178e18da1343f9771bbb1a = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _skatejsTemplateHtml = __16b630aaa86c62c7ef629cfa7bab499e;\n \n var _skatejsTemplateHtml2 = _interopRequireDefault(_skatejsTemplateHtml);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n exports.default = (0, _skatejsTemplateHtml2.default)('\\n <input type=\"text\" class=\"text\" autocomplete=\"off\" role=\"combobox\" aria-autocomplete=\"list\" aria-haspopup=\"true\" aria-expanded=\"false\">\\n <select></select>\\n <datalist>\\n <content select=\"aui-option\"></content>\\n </datalist>\\n <button class=\"aui-button\" role=\"button\" tabindex=\"-1\" type=\"button\"></button>\\n <div class=\"aui-popover\" role=\"listbox\" data-aui-alignment=\"bottom left\">\\n <ul class=\"aui-optionlist\" role=\"presentation\"></ul>\\n </div>\\n <div class=\"aui-select-status assistive\" aria-live=\"polite\" role=\"status\"></div>\\n');\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/select.js\n(typeof window === 'undefined' ? global : window).__42cebde5118ca832014cf5271dd03f11 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __1adf9c254cbd3d35b8e8f9ab44be8819;\n \n __2a8f02ddf948a2241e4b1ac8618d2015;\n \n __cfdf267b6fbf78d55c9426e604b18f15;\n \n var _option = __b4954444d8156140d9ea75a1e5a3e11d;\n \n var _option2 = _interopRequireDefault(_option);\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _customEvent = __751cf3000e6bd63337afe446f5edef9b;\n \n var _customEvent2 = _interopRequireDefault(_customEvent);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n var _keyCode = __0feafabcd51357b770acdddb85e8e6f3;\n \n var _keyCode2 = _interopRequireDefault(_keyCode);\n \n var _progressiveDataSet = __a03b25e4ce5f598de7c115490c1f7f77;\n \n var _progressiveDataSet2 = _interopRequireDefault(_progressiveDataSet);\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n var _state = __0dd0fdb33ed7640afe4a12f58deb4456;\n \n var _state2 = _interopRequireDefault(_state);\n \n var _suggestionModel = __305fbbb070fe250906b5460582113339;\n \n var _suggestionModel2 = _interopRequireDefault(_suggestionModel);\n \n var _suggestionsModel = __01eabc5411ada2a444b0130909d5c9f0;\n \n var _suggestionsModel2 = _interopRequireDefault(_suggestionsModel);\n \n var _suggestionsView = __6e10beb025feee8368cf40a8ec8ba1b9;\n \n var _suggestionsView2 = _interopRequireDefault(_suggestionsView);\n \n var _template = __80d9027610178e18da1343f9771bbb1a;\n \n var _template2 = _interopRequireDefault(_template);\n \n var _uniqueId = __5a7881cf02ab93624b2d44b3514c2d6a;\n \n var _uniqueId2 = _interopRequireDefault(_uniqueId);\n \n var _constants = __1093885dd5cd006c191f1952eec9f3f5;\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var DESELECTED = -1;\n var NO_HIGHLIGHT = -1;\n var DEFAULT_SS_PDS_SIZE = 20;\n \n function clearElementImage(element) {\n element._input.removeAttribute('style');\n (0, _jquery2.default)(element._input).removeClass('aui-select-has-inline-image');\n }\n \n function deselect(element) {\n element._select.selectedIndex = DESELECTED;\n clearElementImage(element);\n }\n \n function hasResults(element) {\n return element._suggestionModel.getNumberOfResults();\n }\n \n function waitForAssistive(callback) {\n setTimeout(callback, 50);\n }\n \n function setBusyState(element) {\n if (!element._button.isBusy()) {\n element._button.busy();\n element._input.setAttribute('aria-busy', 'true');\n element._dropdown.setAttribute('aria-busy', 'true');\n }\n }\n \n function setIdleState(element) {\n element._button.idle();\n element._input.setAttribute('aria-busy', 'false');\n element._dropdown.setAttribute('aria-busy', 'false');\n }\n \n function matchPrefix(model, query) {\n var value = model.get('label').toLowerCase();\n return value.indexOf(query.toLowerCase()) === 0;\n }\n \n function hideDropdown(element) {\n element._suggestionsView.hide();\n element._input.setAttribute('aria-expanded', 'false');\n }\n \n function setInitialVisualState(element) {\n var initialHighlightedItem = hasResults(element) ? 0 : NO_HIGHLIGHT;\n \n element._suggestionModel.highlight(initialHighlightedItem);\n \n hideDropdown(element);\n }\n \n function setElementImage(element, imageSource) {\n (0, _jquery2.default)(element._input).addClass('aui-select-has-inline-image');\n element._input.setAttribute('style', 'background-image: url(' + imageSource + ')');\n }\n \n function suggest(element, autoHighlight, query) {\n element._autoHighlight = autoHighlight;\n \n if (query === undefined) {\n query = element._input.value;\n }\n \n element._progressiveDataSet.query(query);\n }\n \n function setInputImageToHighlightedSuggestion(element) {\n var imageSource = element._suggestionModel.highlighted() && element._suggestionModel.highlighted().get('img-src');\n if (imageSource) {\n setElementImage(element, imageSource);\n }\n }\n \n function setValueAndDisplayFromModel(element, model) {\n if (!model) {\n return;\n }\n \n var option = document.createElement('option');\n var select = element._select;\n var value = model.get('value') || model.get('label');\n \n option.setAttribute('selected', '');\n option.setAttribute('value', value);\n option.textContent = model.getLabel();\n \n // Sync element value.\n element._input.value = option.textContent;\n \n select.innerHTML = '';\n select.options.add(option);\n select.dispatchEvent(new _customEvent2.default('change', { bubbles: true }));\n }\n \n function clearValue(element) {\n element._input.value = '';\n element._select.innerHTML = '';\n }\n \n function selectHighlightedSuggestion(element) {\n setValueAndDisplayFromModel(element, element._suggestionModel.highlighted());\n setInputImageToHighlightedSuggestion(element);\n setInitialVisualState(element);\n }\n \n function convertOptionToModel(option) {\n return new _suggestionModel2.default(option.serialize());\n }\n \n function convertOptionsToModels(element) {\n var models = [];\n \n for (var i = 0; i < element._datalist.children.length; i++) {\n var option = element._datalist.children[i];\n models.push(convertOptionToModel(option));\n }\n \n return models;\n }\n \n function clearAndSet(element, data) {\n element._suggestionModel.set();\n element._suggestionModel.set(data.results);\n }\n \n function getActiveId(select) {\n var active = select._dropdown.querySelector('.aui-select-active');\n return active && active.id;\n }\n \n function getIndexInResults(id, results) {\n var resultsIds = _jquery2.default.map(results, function (result) {\n return result.id;\n });\n \n return resultsIds.indexOf(id);\n }\n \n function createNewValueModel(element) {\n var option = new _option2.default();\n option.setAttribute('value', element._input.value);\n var newValueSuggestionModel = convertOptionToModel(option);\n newValueSuggestionModel.set('new-value', true);\n return newValueSuggestionModel;\n }\n \n function initialiseProgressiveDataSet(element) {\n element._progressiveDataSet = new _progressiveDataSet2.default(convertOptionsToModels(element), {\n model: _suggestionModel2.default,\n matcher: matchPrefix,\n queryEndpoint: element._queryEndpoint,\n maxResults: DEFAULT_SS_PDS_SIZE\n });\n \n element._isSync = element._queryEndpoint ? false : true;\n \n // Progressive data set should indicate whether or not it is busy when processing any async requests.\n // Check if there's any active queries left, if so: set spinner and state to busy, else set to idle and remove\n // the spinner.\n element._progressiveDataSet.on('activity', function () {\n if (element._progressiveDataSet.activeQueryCount && !element._isSync) {\n setBusyState(element);\n (0, _state2.default)(element).set('should-flag-new-suggestions', false);\n } else {\n setIdleState(element);\n (0, _state2.default)(element).set('should-flag-new-suggestions', true);\n }\n });\n \n // Progressive data set doesn't do anything if the query is empty so we\n // must manually convert all data list options into models.\n //\n // Otherwise progressive data set can do everything else for us:\n // 1. Sync matching\n // 2. Async fetching and matching\n element._progressiveDataSet.on('respond', function (data) {\n var optionToHighlight;\n \n // This means that a query was made before the input was cleared and\n // we should cancel the response.\n if (data.query && !element._input.value) {\n return;\n }\n \n if ((0, _state2.default)(element).get('should-cancel-response')) {\n if (!element._progressiveDataSet.activeQueryCount) {\n (0, _state2.default)(element).set('should-cancel-response', false);\n }\n \n return;\n }\n \n if (!data.query) {\n data.results = convertOptionsToModels(element);\n }\n \n var isInputExactMatch = getIndexInResults(element._input.value, data.results) !== -1;\n var isInputEmpty = !element._input.value;\n \n if (element.hasAttribute('can-create-values') && !isInputExactMatch && !isInputEmpty) {\n data.results.push(createNewValueModel(element));\n }\n \n if (!(0, _state2.default)(element).get('should-include-selected')) {\n var indexOfValueInResults = getIndexInResults(element.value, data.results);\n \n if (indexOfValueInResults >= 0) {\n data.results.splice(indexOfValueInResults, 1);\n }\n }\n \n clearAndSet(element, data);\n optionToHighlight = element._suggestionModel.highlighted() || data.results[0];\n \n if (element._autoHighlight) {\n element._suggestionModel.setHighlighted(optionToHighlight);\n waitForAssistive(function () {\n element._input.setAttribute('aria-activedescendant', getActiveId(element));\n });\n }\n \n element._input.setAttribute('aria-expanded', 'true');\n \n // If the response is async (append operation), has elements to append and has a highlighted element, we need to update the status.\n if (!element._isSync && element._suggestionsView.getActive() && (0, _state2.default)(element).get('should-flag-new-suggestions')) {\n element.querySelector('.aui-select-status').innerHTML = AJS.I18n.getText('aui.select.new.suggestions');\n }\n \n element._suggestionsView.show();\n \n if (element._autoHighlight) {\n waitForAssistive(function () {\n element._input.setAttribute('aria-activedescendant', getActiveId(element));\n });\n }\n });\n }\n \n function associateDropdownAndTrigger(element) {\n element._dropdown.id = element._listId;\n element.querySelector('button').setAttribute('aria-controls', element._listId);\n }\n \n function bindHighlightMouseover(element) {\n (0, _jquery2.default)(element._dropdown).on('mouseover', 'li', function (e) {\n if (hasResults(element)) {\n element._suggestionModel.highlight((0, _jquery2.default)(e.target).index());\n }\n });\n }\n \n function bindSelectMousedown(element) {\n (0, _jquery2.default)(element._dropdown).on('mousedown', 'li', function (e) {\n if (hasResults(element)) {\n element._suggestionModel.highlight((0, _jquery2.default)(e.target).index());\n selectHighlightedSuggestion(element);\n element._suggestionsView.hide();\n element._input.removeAttribute('aria-activedescendant');\n } else {\n return false;\n }\n });\n }\n \n function initialiseValue(element) {\n var option = element._datalist.querySelector('aui-option[selected]');\n \n if (option) {\n setValueAndDisplayFromModel(element, convertOptionToModel(option));\n }\n }\n \n function isQueryInProgress(element) {\n return element._progressiveDataSet.activeQueryCount > 0;\n }\n \n function focusInHandler(element) {\n //if there is a selected value the single select should do an empty\n //search and return everything\n var searchValue = element.value ? '' : element._input.value;\n var isInputEmpty = element._input.value === '';\n (0, _state2.default)(element).set('should-include-selected', isInputEmpty);\n suggest(element, true, searchValue);\n }\n \n function cancelInProgressQueries(element) {\n if (isQueryInProgress(element)) {\n (0, _state2.default)(element).set('should-cancel-response', true);\n }\n }\n \n function getSelectedLabel(element) {\n if (element._select.selectedIndex >= 0) {\n return element._select.options[element._select.selectedIndex].textContent;\n }\n }\n \n function handleInvalidInputOnFocusOut(element) {\n var selectCanBeEmpty = !element.hasAttribute('no-empty-values');\n var selectionIsEmpty = !element._input.value;\n var selectionNotExact = element._input.value !== getSelectedLabel(element);\n var selectionNotValid = selectionIsEmpty || selectionNotExact;\n \n if (selectionNotValid) {\n if (selectCanBeEmpty) {\n deselect(element);\n } else {\n element._input.value = getSelectedLabel(element);\n }\n }\n }\n \n function handleHighlightOnFocusOut(element) {\n // Forget the highlighted suggestion.\n element._suggestionModel.highlight(NO_HIGHLIGHT);\n }\n \n function focusOutHandler(element) {\n cancelInProgressQueries(element);\n handleInvalidInputOnFocusOut(element);\n handleHighlightOnFocusOut(element);\n hideDropdown(element);\n }\n \n function handleTabOut(element) {\n var isSuggestionViewVisible = element._suggestionsView.isVisible();\n if (isSuggestionViewVisible) {\n selectHighlightedSuggestion(element);\n }\n }\n \n var select = (0, _skate2.default)('aui-select', {\n template: _template2.default,\n created: function created(element) {\n element._listId = (0, _uniqueId2.default)();\n element._input = element.querySelector('input');\n element._select = element.querySelector('select');\n element._dropdown = element.querySelector('.aui-popover');\n element._datalist = element.querySelector('datalist');\n element._button = element.querySelector('button');\n element._suggestionsView = new _suggestionsView2.default(element._dropdown, element._input);\n element._suggestionModel = new _suggestionsModel2.default();\n \n element._suggestionModel.onChange = function (oldSuggestions) {\n var suggestionsToAdd = [];\n \n element._suggestionModel._suggestions.forEach(function (newSuggestion) {\n var inArray = oldSuggestions.some(function (oldSuggestion) {\n return newSuggestion.id === oldSuggestion.id;\n });\n \n if (!inArray) {\n suggestionsToAdd.push(newSuggestion);\n }\n });\n \n element._suggestionsView.render(suggestionsToAdd, oldSuggestions.length, element._listId);\n };\n \n element._suggestionModel.onHighlightChange = function () {\n var active = element._suggestionModel.highlightedIndex();\n element._suggestionsView.setActive(active);\n element._input.setAttribute('aria-activedescendant', getActiveId(element));\n };\n },\n \n attached: function attached(element) {\n _skate2.default.init(element);\n initialiseProgressiveDataSet(element);\n associateDropdownAndTrigger(element);\n element._input.setAttribute('aria-controls', element._listId);\n element.setAttribute('tabindex', '-1');\n bindHighlightMouseover(element);\n bindSelectMousedown(element);\n initialiseValue(element);\n setInitialVisualState(element);\n setInputImageToHighlightedSuggestion(element);\n },\n \n attributes: {\n id: function id(element, data) {\n if (element.id) {\n element.querySelector('input').id = data.newValue + _constants.INPUT_SUFFIX;\n }\n },\n name: function name(element, data) {\n element.querySelector('select').setAttribute('name', data.newValue);\n },\n placeholder: function placeholder(element, data) {\n element.querySelector('input').setAttribute('placeholder', data.newValue);\n },\n src: function src(element, data) {\n element._queryEndpoint = data.newValue;\n }\n },\n \n events: {\n 'blur input': function blurInput(element) {\n focusOutHandler(element);\n },\n \n 'mousedown button': function mousedownButton(element) {\n if (document.activeElement === element._input && element._dropdown.getAttribute('aria-hidden') === 'false') {\n (0, _state2.default)(element).set('prevent-open-on-button-click', true);\n }\n },\n \n 'click input': function clickInput(element) {\n focusInHandler(element);\n },\n \n 'click button': function clickButton(element) {\n var data = (0, _state2.default)(element);\n \n if (data.get('prevent-open-on-button-click')) {\n data.set('prevent-open-on-button-click', false);\n } else {\n element.focus();\n }\n },\n \n input: function input(element) {\n if (!element._input.value) {\n hideDropdown(element);\n } else {\n (0, _state2.default)(element).set('should-include-selected', true);\n suggest(element, true);\n }\n },\n \n 'keydown input': function keydownInput(element, e) {\n var currentValue = element._input.value;\n var handled = false;\n \n if (e.keyCode === _keyCode2.default.ESCAPE) {\n cancelInProgressQueries(element);\n hideDropdown(element);\n return;\n }\n \n var isSuggestionViewVisible = element._suggestionsView.isVisible();\n \n if (isSuggestionViewVisible && hasResults(element)) {\n if (e.keyCode === _keyCode2.default.ENTER) {\n cancelInProgressQueries(element);\n selectHighlightedSuggestion(element);\n e.preventDefault();\n } else if (e.keyCode === _keyCode2.default.TAB) {\n handleTabOut(element);\n handled = true;\n } else if (e.keyCode === _keyCode2.default.UP) {\n element._suggestionModel.highlightPrevious();\n e.preventDefault();\n } else if (e.keyCode === _keyCode2.default.DOWN) {\n element._suggestionModel.highlightNext();\n e.preventDefault();\n }\n } else if (e.keyCode === _keyCode2.default.UP || e.keyCode === _keyCode2.default.DOWN) {\n focusInHandler(element);\n e.preventDefault();\n }\n \n handled = handled || e.defaultPrevented;\n setTimeout(function emulateCrossBrowserInputEvent() {\n if (element._input.value !== currentValue && !handled) {\n element.dispatchEvent(new _customEvent2.default('input', { bubbles: true }));\n }\n }, 0);\n }\n },\n \n prototype: {\n get value() {\n var selected = this._select.options[this._select.selectedIndex];\n return selected ? selected.value : '';\n },\n \n set value(value) {\n if (value === '') {\n clearValue(this);\n } else if (value) {\n var data = this._progressiveDataSet;\n var model = data.findWhere({\n value: value\n }) || data.findWhere({\n label: value\n });\n \n // Create a new value if allowed and the value doesn't exist.\n if (!model && this.hasAttribute('can-create-values')) {\n model = new _suggestionModel2.default({ value: value, label: value });\n }\n \n setValueAndDisplayFromModel(this, model);\n }\n return this;\n },\n \n get displayValue() {\n return this._input.value;\n },\n \n blur: function blur() {\n this._input.blur();\n focusOutHandler(this);\n return this;\n },\n \n focus: function focus() {\n this._input.focus();\n focusInHandler(this);\n return this;\n }\n }\n });\n \n (0, _amdify2.default)('aui/select', select);\n (0, _globalize2.default)('select', select);\n exports.default = select;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js-vendor/jquery/plugins/jquery.select2.js\n(typeof window === 'undefined' ? global : window).__7492747913568b3ee996b7d99354f7ed = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n /*\n Copyright 2012 Igor Vaynberg\n \n Version: 3.4.5 Timestamp: Mon Nov 4 08:22:42 PST 2013\n \n This software is licensed under the Apache License, Version 2.0 (the \"Apache License\") or the GNU\n General Public License version 2 (the \"GPL License\"). You may choose either license to govern your\n use of this software only upon the condition that you accept all of the terms of either the Apache\n License or the GPL License.\n \n You may obtain a copy of the Apache License and the GPL License at:\n \n http://www.apache.org/licenses/LICENSE-2.0\n http://www.gnu.org/licenses/gpl-2.0.html\n \n Unless required by applicable law or agreed to in writing, software distributed under the\n Apache License or the GPL Licesnse is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for\n the specific language governing permissions and limitations under the Apache License and the GPL License.\n */\n (function ($) {\n if(typeof $.fn.each2 == \"undefined\") {\n $.extend($.fn, {\n /*\n * 4-10 times faster .each replacement\n * use it carefully, as it overrides jQuery context of element on each iteration\n */\n each2 : function (c) {\n var j = $([0]), i = -1, l = this.length;\n while (\n ++i < l\n && (j.context = j[0] = this[i])\n && c.call(j[0], i, j) !== false //\"this\"=DOM, i=index, j=jQuery object\n );\n return this;\n }\n });\n }\n })(jQuery);\n \n (function ($, undefined) {\n /*global document, window, jQuery, console */\n \n if (window.Select2 !== undefined) {\n return;\n }\n \n var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer,\n lastMousePosition={x:0,y:0}, $document, scrollBarDimensions,\n \n KEY = {\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n SPACE: 32,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n SHIFT: 16,\n CTRL: 17,\n ALT: 18,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n HOME: 36,\n END: 35,\n BACKSPACE: 8,\n DELETE: 46,\n isArrow: function (k) {\n k = k.which ? k.which : k;\n switch (k) {\n case KEY.LEFT:\n case KEY.RIGHT:\n case KEY.UP:\n case KEY.DOWN:\n return true;\n }\n return false;\n },\n isControl: function (e) {\n var k = e.which;\n switch (k) {\n case KEY.SHIFT:\n case KEY.CTRL:\n case KEY.ALT:\n return true;\n }\n \n if (e.metaKey) return true;\n \n return false;\n },\n isFunctionKey: function (k) {\n k = k.which ? k.which : k;\n return k >= 112 && k <= 123;\n }\n },\n MEASURE_SCROLLBAR_TEMPLATE = \"<div class='select2-measure-scrollbar'></div>\",\n \n DIACRITICS = {\"\\u24B6\":\"A\",\"\\uFF21\":\"A\",\"\\u00C0\":\"A\",\"\\u00C1\":\"A\",\"\\u00C2\":\"A\",\"\\u1EA6\":\"A\",\"\\u1EA4\":\"A\",\"\\u1EAA\":\"A\",\"\\u1EA8\":\"A\",\"\\u00C3\":\"A\",\"\\u0100\":\"A\",\"\\u0102\":\"A\",\"\\u1EB0\":\"A\",\"\\u1EAE\":\"A\",\"\\u1EB4\":\"A\",\"\\u1EB2\":\"A\",\"\\u0226\":\"A\",\"\\u01E0\":\"A\",\"\\u00C4\":\"A\",\"\\u01DE\":\"A\",\"\\u1EA2\":\"A\",\"\\u00C5\":\"A\",\"\\u01FA\":\"A\",\"\\u01CD\":\"A\",\"\\u0200\":\"A\",\"\\u0202\":\"A\",\"\\u1EA0\":\"A\",\"\\u1EAC\":\"A\",\"\\u1EB6\":\"A\",\"\\u1E00\":\"A\",\"\\u0104\":\"A\",\"\\u023A\":\"A\",\"\\u2C6F\":\"A\",\"\\uA732\":\"AA\",\"\\u00C6\":\"AE\",\"\\u01FC\":\"AE\",\"\\u01E2\":\"AE\",\"\\uA734\":\"AO\",\"\\uA736\":\"AU\",\"\\uA738\":\"AV\",\"\\uA73A\":\"AV\",\"\\uA73C\":\"AY\",\"\\u24B7\":\"B\",\"\\uFF22\":\"B\",\"\\u1E02\":\"B\",\"\\u1E04\":\"B\",\"\\u1E06\":\"B\",\"\\u0243\":\"B\",\"\\u0182\":\"B\",\"\\u0181\":\"B\",\"\\u24B8\":\"C\",\"\\uFF23\":\"C\",\"\\u0106\":\"C\",\"\\u0108\":\"C\",\"\\u010A\":\"C\",\"\\u010C\":\"C\",\"\\u00C7\":\"C\",\"\\u1E08\":\"C\",\"\\u0187\":\"C\",\"\\u023B\":\"C\",\"\\uA73E\":\"C\",\"\\u24B9\":\"D\",\"\\uFF24\":\"D\",\"\\u1E0A\":\"D\",\"\\u010E\":\"D\",\"\\u1E0C\":\"D\",\"\\u1E10\":\"D\",\"\\u1E12\":\"D\",\"\\u1E0E\":\"D\",\"\\u0110\":\"D\",\"\\u018B\":\"D\",\"\\u018A\":\"D\",\"\\u0189\":\"D\",\"\\uA779\":\"D\",\"\\u01F1\":\"DZ\",\"\\u01C4\":\"DZ\",\"\\u01F2\":\"Dz\",\"\\u01C5\":\"Dz\",\"\\u24BA\":\"E\",\"\\uFF25\":\"E\",\"\\u00C8\":\"E\",\"\\u00C9\":\"E\",\"\\u00CA\":\"E\",\"\\u1EC0\":\"E\",\"\\u1EBE\":\"E\",\"\\u1EC4\":\"E\",\"\\u1EC2\":\"E\",\"\\u1EBC\":\"E\",\"\\u0112\":\"E\",\"\\u1E14\":\"E\",\"\\u1E16\":\"E\",\"\\u0114\":\"E\",\"\\u0116\":\"E\",\"\\u00CB\":\"E\",\"\\u1EBA\":\"E\",\"\\u011A\":\"E\",\"\\u0204\":\"E\",\"\\u0206\":\"E\",\"\\u1EB8\":\"E\",\"\\u1EC6\":\"E\",\"\\u0228\":\"E\",\"\\u1E1C\":\"E\",\"\\u0118\":\"E\",\"\\u1E18\":\"E\",\"\\u1E1A\":\"E\",\"\\u0190\":\"E\",\"\\u018E\":\"E\",\"\\u24BB\":\"F\",\"\\uFF26\":\"F\",\"\\u1E1E\":\"F\",\"\\u0191\":\"F\",\"\\uA77B\":\"F\",\"\\u24BC\":\"G\",\"\\uFF27\":\"G\",\"\\u01F4\":\"G\",\"\\u011C\":\"G\",\"\\u1E20\":\"G\",\"\\u011E\":\"G\",\"\\u0120\":\"G\",\"\\u01E6\":\"G\",\"\\u0122\":\"G\",\"\\u01E4\":\"G\",\"\\u0193\":\"G\",\"\\uA7A0\":\"G\",\"\\uA77D\":\"G\",\"\\uA77E\":\"G\",\"\\u24BD\":\"H\",\"\\uFF28\":\"H\",\"\\u0124\":\"H\",\"\\u1E22\":\"H\",\"\\u1E26\":\"H\",\"\\u021E\":\"H\",\"\\u1E24\":\"H\",\"\\u1E28\":\"H\",\"\\u1E2A\":\"H\",\"\\u0126\":\"H\",\"\\u2C67\":\"H\",\"\\u2C75\":\"H\",\"\\uA78D\":\"H\",\"\\u24BE\":\"I\",\"\\uFF29\":\"I\",\"\\u00CC\":\"I\",\"\\u00CD\":\"I\",\"\\u00CE\":\"I\",\"\\u0128\":\"I\",\"\\u012A\":\"I\",\"\\u012C\":\"I\",\"\\u0130\":\"I\",\"\\u00CF\":\"I\",\"\\u1E2E\":\"I\",\"\\u1EC8\":\"I\",\"\\u01CF\":\"I\",\"\\u0208\":\"I\",\"\\u020A\":\"I\",\"\\u1ECA\":\"I\",\"\\u012E\":\"I\",\"\\u1E2C\":\"I\",\"\\u0197\":\"I\",\"\\u24BF\":\"J\",\"\\uFF2A\":\"J\",\"\\u0134\":\"J\",\"\\u0248\":\"J\",\"\\u24C0\":\"K\",\"\\uFF2B\":\"K\",\"\\u1E30\":\"K\",\"\\u01E8\":\"K\",\"\\u1E32\":\"K\",\"\\u0136\":\"K\",\"\\u1E34\":\"K\",\"\\u0198\":\"K\",\"\\u2C69\":\"K\",\"\\uA740\":\"K\",\"\\uA742\":\"K\",\"\\uA744\":\"K\",\"\\uA7A2\":\"K\",\"\\u24C1\":\"L\",\"\\uFF2C\":\"L\",\"\\u013F\":\"L\",\"\\u0139\":\"L\",\"\\u013D\":\"L\",\"\\u1E36\":\"L\",\"\\u1E38\":\"L\",\"\\u013B\":\"L\",\"\\u1E3C\":\"L\",\"\\u1E3A\":\"L\",\"\\u0141\":\"L\",\"\\u023D\":\"L\",\"\\u2C62\":\"L\",\"\\u2C60\":\"L\",\"\\uA748\":\"L\",\"\\uA746\":\"L\",\"\\uA780\":\"L\",\"\\u01C7\":\"LJ\",\"\\u01C8\":\"Lj\",\"\\u24C2\":\"M\",\"\\uFF2D\":\"M\",\"\\u1E3E\":\"M\",\"\\u1E40\":\"M\",\"\\u1E42\":\"M\",\"\\u2C6E\":\"M\",\"\\u019C\":\"M\",\"\\u24C3\":\"N\",\"\\uFF2E\":\"N\",\"\\u01F8\":\"N\",\"\\u0143\":\"N\",\"\\u00D1\":\"N\",\"\\u1E44\":\"N\",\"\\u0147\":\"N\",\"\\u1E46\":\"N\",\"\\u0145\":\"N\",\"\\u1E4A\":\"N\",\"\\u1E48\":\"N\",\"\\u0220\":\"N\",\"\\u019D\":\"N\",\"\\uA790\":\"N\",\"\\uA7A4\":\"N\",\"\\u01CA\":\"NJ\",\"\\u01CB\":\"Nj\",\"\\u24C4\":\"O\",\"\\uFF2F\":\"O\",\"\\u00D2\":\"O\",\"\\u00D3\":\"O\",\"\\u00D4\":\"O\",\"\\u1ED2\":\"O\",\"\\u1ED0\":\"O\",\"\\u1ED6\":\"O\",\"\\u1ED4\":\"O\",\"\\u00D5\":\"O\",\"\\u1E4C\":\"O\",\"\\u022C\":\"O\",\"\\u1E4E\":\"O\",\"\\u014C\":\"O\",\"\\u1E50\":\"O\",\"\\u1E52\":\"O\",\"\\u014E\":\"O\",\"\\u022E\":\"O\",\"\\u0230\":\"O\",\"\\u00D6\":\"O\",\"\\u022A\":\"O\",\"\\u1ECE\":\"O\",\"\\u0150\":\"O\",\"\\u01D1\":\"O\",\"\\u020C\":\"O\",\"\\u020E\":\"O\",\"\\u01A0\":\"O\",\"\\u1EDC\":\"O\",\"\\u1EDA\":\"O\",\"\\u1EE0\":\"O\",\"\\u1EDE\":\"O\",\"\\u1EE2\":\"O\",\"\\u1ECC\":\"O\",\"\\u1ED8\":\"O\",\"\\u01EA\":\"O\",\"\\u01EC\":\"O\",\"\\u00D8\":\"O\",\"\\u01FE\":\"O\",\"\\u0186\":\"O\",\"\\u019F\":\"O\",\"\\uA74A\":\"O\",\"\\uA74C\":\"O\",\"\\u01A2\":\"OI\",\"\\uA74E\":\"OO\",\"\\u0222\":\"OU\",\"\\u24C5\":\"P\",\"\\uFF30\":\"P\",\"\\u1E54\":\"P\",\"\\u1E56\":\"P\",\"\\u01A4\":\"P\",\"\\u2C63\":\"P\",\"\\uA750\":\"P\",\"\\uA752\":\"P\",\"\\uA754\":\"P\",\"\\u24C6\":\"Q\",\"\\uFF31\":\"Q\",\"\\uA756\":\"Q\",\"\\uA758\":\"Q\",\"\\u024A\":\"Q\",\"\\u24C7\":\"R\",\"\\uFF32\":\"R\",\"\\u0154\":\"R\",\"\\u1E58\":\"R\",\"\\u0158\":\"R\",\"\\u0210\":\"R\",\"\\u0212\":\"R\",\"\\u1E5A\":\"R\",\"\\u1E5C\":\"R\",\"\\u0156\":\"R\",\"\\u1E5E\":\"R\",\"\\u024C\":\"R\",\"\\u2C64\":\"R\",\"\\uA75A\":\"R\",\"\\uA7A6\":\"R\",\"\\uA782\":\"R\",\"\\u24C8\":\"S\",\"\\uFF33\":\"S\",\"\\u1E9E\":\"S\",\"\\u015A\":\"S\",\"\\u1E64\":\"S\",\"\\u015C\":\"S\",\"\\u1E60\":\"S\",\"\\u0160\":\"S\",\"\\u1E66\":\"S\",\"\\u1E62\":\"S\",\"\\u1E68\":\"S\",\"\\u0218\":\"S\",\"\\u015E\":\"S\",\"\\u2C7E\":\"S\",\"\\uA7A8\":\"S\",\"\\uA784\":\"S\",\"\\u24C9\":\"T\",\"\\uFF34\":\"T\",\"\\u1E6A\":\"T\",\"\\u0164\":\"T\",\"\\u1E6C\":\"T\",\"\\u021A\":\"T\",\"\\u0162\":\"T\",\"\\u1E70\":\"T\",\"\\u1E6E\":\"T\",\"\\u0166\":\"T\",\"\\u01AC\":\"T\",\"\\u01AE\":\"T\",\"\\u023E\":\"T\",\"\\uA786\":\"T\",\"\\uA728\":\"TZ\",\"\\u24CA\":\"U\",\"\\uFF35\":\"U\",\"\\u00D9\":\"U\",\"\\u00DA\":\"U\",\"\\u00DB\":\"U\",\"\\u0168\":\"U\",\"\\u1E78\":\"U\",\"\\u016A\":\"U\",\"\\u1E7A\":\"U\",\"\\u016C\":\"U\",\"\\u00DC\":\"U\",\"\\u01DB\":\"U\",\"\\u01D7\":\"U\",\"\\u01D5\":\"U\",\"\\u01D9\":\"U\",\"\\u1EE6\":\"U\",\"\\u016E\":\"U\",\"\\u0170\":\"U\",\"\\u01D3\":\"U\",\"\\u0214\":\"U\",\"\\u0216\":\"U\",\"\\u01AF\":\"U\",\"\\u1EEA\":\"U\",\"\\u1EE8\":\"U\",\"\\u1EEE\":\"U\",\"\\u1EEC\":\"U\",\"\\u1EF0\":\"U\",\"\\u1EE4\":\"U\",\"\\u1E72\":\"U\",\"\\u0172\":\"U\",\"\\u1E76\":\"U\",\"\\u1E74\":\"U\",\"\\u0244\":\"U\",\"\\u24CB\":\"V\",\"\\uFF36\":\"V\",\"\\u1E7C\":\"V\",\"\\u1E7E\":\"V\",\"\\u01B2\":\"V\",\"\\uA75E\":\"V\",\"\\u0245\":\"V\",\"\\uA760\":\"VY\",\"\\u24CC\":\"W\",\"\\uFF37\":\"W\",\"\\u1E80\":\"W\",\"\\u1E82\":\"W\",\"\\u0174\":\"W\",\"\\u1E86\":\"W\",\"\\u1E84\":\"W\",\"\\u1E88\":\"W\",\"\\u2C72\":\"W\",\"\\u24CD\":\"X\",\"\\uFF38\":\"X\",\"\\u1E8A\":\"X\",\"\\u1E8C\":\"X\",\"\\u24CE\":\"Y\",\"\\uFF39\":\"Y\",\"\\u1EF2\":\"Y\",\"\\u00DD\":\"Y\",\"\\u0176\":\"Y\",\"\\u1EF8\":\"Y\",\"\\u0232\":\"Y\",\"\\u1E8E\":\"Y\",\"\\u0178\":\"Y\",\"\\u1EF6\":\"Y\",\"\\u1EF4\":\"Y\",\"\\u01B3\":\"Y\",\"\\u024E\":\"Y\",\"\\u1EFE\":\"Y\",\"\\u24CF\":\"Z\",\"\\uFF3A\":\"Z\",\"\\u0179\":\"Z\",\"\\u1E90\":\"Z\",\"\\u017B\":\"Z\",\"\\u017D\":\"Z\",\"\\u1E92\":\"Z\",\"\\u1E94\":\"Z\",\"\\u01B5\":\"Z\",\"\\u0224\":\"Z\",\"\\u2C7F\":\"Z\",\"\\u2C6B\":\"Z\",\"\\uA762\":\"Z\",\"\\u24D0\":\"a\",\"\\uFF41\":\"a\",\"\\u1E9A\":\"a\",\"\\u00E0\":\"a\",\"\\u00E1\":\"a\",\"\\u00E2\":\"a\",\"\\u1EA7\":\"a\",\"\\u1EA5\":\"a\",\"\\u1EAB\":\"a\",\"\\u1EA9\":\"a\",\"\\u00E3\":\"a\",\"\\u0101\":\"a\",\"\\u0103\":\"a\",\"\\u1EB1\":\"a\",\"\\u1EAF\":\"a\",\"\\u1EB5\":\"a\",\"\\u1EB3\":\"a\",\"\\u0227\":\"a\",\"\\u01E1\":\"a\",\"\\u00E4\":\"a\",\"\\u01DF\":\"a\",\"\\u1EA3\":\"a\",\"\\u00E5\":\"a\",\"\\u01FB\":\"a\",\"\\u01CE\":\"a\",\"\\u0201\":\"a\",\"\\u0203\":\"a\",\"\\u1EA1\":\"a\",\"\\u1EAD\":\"a\",\"\\u1EB7\":\"a\",\"\\u1E01\":\"a\",\"\\u0105\":\"a\",\"\\u2C65\":\"a\",\"\\u0250\":\"a\",\"\\uA733\":\"aa\",\"\\u00E6\":\"ae\",\"\\u01FD\":\"ae\",\"\\u01E3\":\"ae\",\"\\uA735\":\"ao\",\"\\uA737\":\"au\",\"\\uA739\":\"av\",\"\\uA73B\":\"av\",\"\\uA73D\":\"ay\",\"\\u24D1\":\"b\",\"\\uFF42\":\"b\",\"\\u1E03\":\"b\",\"\\u1E05\":\"b\",\"\\u1E07\":\"b\",\"\\u0180\":\"b\",\"\\u0183\":\"b\",\"\\u0253\":\"b\",\"\\u24D2\":\"c\",\"\\uFF43\":\"c\",\"\\u0107\":\"c\",\"\\u0109\":\"c\",\"\\u010B\":\"c\",\"\\u010D\":\"c\",\"\\u00E7\":\"c\",\"\\u1E09\":\"c\",\"\\u0188\":\"c\",\"\\u023C\":\"c\",\"\\uA73F\":\"c\",\"\\u2184\":\"c\",\"\\u24D3\":\"d\",\"\\uFF44\":\"d\",\"\\u1E0B\":\"d\",\"\\u010F\":\"d\",\"\\u1E0D\":\"d\",\"\\u1E11\":\"d\",\"\\u1E13\":\"d\",\"\\u1E0F\":\"d\",\"\\u0111\":\"d\",\"\\u018C\":\"d\",\"\\u0256\":\"d\",\"\\u0257\":\"d\",\"\\uA77A\":\"d\",\"\\u01F3\":\"dz\",\"\\u01C6\":\"dz\",\"\\u24D4\":\"e\",\"\\uFF45\":\"e\",\"\\u00E8\":\"e\",\"\\u00E9\":\"e\",\"\\u00EA\":\"e\",\"\\u1EC1\":\"e\",\"\\u1EBF\":\"e\",\"\\u1EC5\":\"e\",\"\\u1EC3\":\"e\",\"\\u1EBD\":\"e\",\"\\u0113\":\"e\",\"\\u1E15\":\"e\",\"\\u1E17\":\"e\",\"\\u0115\":\"e\",\"\\u0117\":\"e\",\"\\u00EB\":\"e\",\"\\u1EBB\":\"e\",\"\\u011B\":\"e\",\"\\u0205\":\"e\",\"\\u0207\":\"e\",\"\\u1EB9\":\"e\",\"\\u1EC7\":\"e\",\"\\u0229\":\"e\",\"\\u1E1D\":\"e\",\"\\u0119\":\"e\",\"\\u1E19\":\"e\",\"\\u1E1B\":\"e\",\"\\u0247\":\"e\",\"\\u025B\":\"e\",\"\\u01DD\":\"e\",\"\\u24D5\":\"f\",\"\\uFF46\":\"f\",\"\\u1E1F\":\"f\",\"\\u0192\":\"f\",\"\\uA77C\":\"f\",\"\\u24D6\":\"g\",\"\\uFF47\":\"g\",\"\\u01F5\":\"g\",\"\\u011D\":\"g\",\"\\u1E21\":\"g\",\"\\u011F\":\"g\",\"\\u0121\":\"g\",\"\\u01E7\":\"g\",\"\\u0123\":\"g\",\"\\u01E5\":\"g\",\"\\u0260\":\"g\",\"\\uA7A1\":\"g\",\"\\u1D79\":\"g\",\"\\uA77F\":\"g\",\"\\u24D7\":\"h\",\"\\uFF48\":\"h\",\"\\u0125\":\"h\",\"\\u1E23\":\"h\",\"\\u1E27\":\"h\",\"\\u021F\":\"h\",\"\\u1E25\":\"h\",\"\\u1E29\":\"h\",\"\\u1E2B\":\"h\",\"\\u1E96\":\"h\",\"\\u0127\":\"h\",\"\\u2C68\":\"h\",\"\\u2C76\":\"h\",\"\\u0265\":\"h\",\"\\u0195\":\"hv\",\"\\u24D8\":\"i\",\"\\uFF49\":\"i\",\"\\u00EC\":\"i\",\"\\u00ED\":\"i\",\"\\u00EE\":\"i\",\"\\u0129\":\"i\",\"\\u012B\":\"i\",\"\\u012D\":\"i\",\"\\u00EF\":\"i\",\"\\u1E2F\":\"i\",\"\\u1EC9\":\"i\",\"\\u01D0\":\"i\",\"\\u0209\":\"i\",\"\\u020B\":\"i\",\"\\u1ECB\":\"i\",\"\\u012F\":\"i\",\"\\u1E2D\":\"i\",\"\\u0268\":\"i\",\"\\u0131\":\"i\",\"\\u24D9\":\"j\",\"\\uFF4A\":\"j\",\"\\u0135\":\"j\",\"\\u01F0\":\"j\",\"\\u0249\":\"j\",\"\\u24DA\":\"k\",\"\\uFF4B\":\"k\",\"\\u1E31\":\"k\",\"\\u01E9\":\"k\",\"\\u1E33\":\"k\",\"\\u0137\":\"k\",\"\\u1E35\":\"k\",\"\\u0199\":\"k\",\"\\u2C6A\":\"k\",\"\\uA741\":\"k\",\"\\uA743\":\"k\",\"\\uA745\":\"k\",\"\\uA7A3\":\"k\",\"\\u24DB\":\"l\",\"\\uFF4C\":\"l\",\"\\u0140\":\"l\",\"\\u013A\":\"l\",\"\\u013E\":\"l\",\"\\u1E37\":\"l\",\"\\u1E39\":\"l\",\"\\u013C\":\"l\",\"\\u1E3D\":\"l\",\"\\u1E3B\":\"l\",\"\\u017F\":\"l\",\"\\u0142\":\"l\",\"\\u019A\":\"l\",\"\\u026B\":\"l\",\"\\u2C61\":\"l\",\"\\uA749\":\"l\",\"\\uA781\":\"l\",\"\\uA747\":\"l\",\"\\u01C9\":\"lj\",\"\\u24DC\":\"m\",\"\\uFF4D\":\"m\",\"\\u1E3F\":\"m\",\"\\u1E41\":\"m\",\"\\u1E43\":\"m\",\"\\u0271\":\"m\",\"\\u026F\":\"m\",\"\\u24DD\":\"n\",\"\\uFF4E\":\"n\",\"\\u01F9\":\"n\",\"\\u0144\":\"n\",\"\\u00F1\":\"n\",\"\\u1E45\":\"n\",\"\\u0148\":\"n\",\"\\u1E47\":\"n\",\"\\u0146\":\"n\",\"\\u1E4B\":\"n\",\"\\u1E49\":\"n\",\"\\u019E\":\"n\",\"\\u0272\":\"n\",\"\\u0149\":\"n\",\"\\uA791\":\"n\",\"\\uA7A5\":\"n\",\"\\u01CC\":\"nj\",\"\\u24DE\":\"o\",\"\\uFF4F\":\"o\",\"\\u00F2\":\"o\",\"\\u00F3\":\"o\",\"\\u00F4\":\"o\",\"\\u1ED3\":\"o\",\"\\u1ED1\":\"o\",\"\\u1ED7\":\"o\",\"\\u1ED5\":\"o\",\"\\u00F5\":\"o\",\"\\u1E4D\":\"o\",\"\\u022D\":\"o\",\"\\u1E4F\":\"o\",\"\\u014D\":\"o\",\"\\u1E51\":\"o\",\"\\u1E53\":\"o\",\"\\u014F\":\"o\",\"\\u022F\":\"o\",\"\\u0231\":\"o\",\"\\u00F6\":\"o\",\"\\u022B\":\"o\",\"\\u1ECF\":\"o\",\"\\u0151\":\"o\",\"\\u01D2\":\"o\",\"\\u020D\":\"o\",\"\\u020F\":\"o\",\"\\u01A1\":\"o\",\"\\u1EDD\":\"o\",\"\\u1EDB\":\"o\",\"\\u1EE1\":\"o\",\"\\u1EDF\":\"o\",\"\\u1EE3\":\"o\",\"\\u1ECD\":\"o\",\"\\u1ED9\":\"o\",\"\\u01EB\":\"o\",\"\\u01ED\":\"o\",\"\\u00F8\":\"o\",\"\\u01FF\":\"o\",\"\\u0254\":\"o\",\"\\uA74B\":\"o\",\"\\uA74D\":\"o\",\"\\u0275\":\"o\",\"\\u01A3\":\"oi\",\"\\u0223\":\"ou\",\"\\uA74F\":\"oo\",\"\\u24DF\":\"p\",\"\\uFF50\":\"p\",\"\\u1E55\":\"p\",\"\\u1E57\":\"p\",\"\\u01A5\":\"p\",\"\\u1D7D\":\"p\",\"\\uA751\":\"p\",\"\\uA753\":\"p\",\"\\uA755\":\"p\",\"\\u24E0\":\"q\",\"\\uFF51\":\"q\",\"\\u024B\":\"q\",\"\\uA757\":\"q\",\"\\uA759\":\"q\",\"\\u24E1\":\"r\",\"\\uFF52\":\"r\",\"\\u0155\":\"r\",\"\\u1E59\":\"r\",\"\\u0159\":\"r\",\"\\u0211\":\"r\",\"\\u0213\":\"r\",\"\\u1E5B\":\"r\",\"\\u1E5D\":\"r\",\"\\u0157\":\"r\",\"\\u1E5F\":\"r\",\"\\u024D\":\"r\",\"\\u027D\":\"r\",\"\\uA75B\":\"r\",\"\\uA7A7\":\"r\",\"\\uA783\":\"r\",\"\\u24E2\":\"s\",\"\\uFF53\":\"s\",\"\\u00DF\":\"s\",\"\\u015B\":\"s\",\"\\u1E65\":\"s\",\"\\u015D\":\"s\",\"\\u1E61\":\"s\",\"\\u0161\":\"s\",\"\\u1E67\":\"s\",\"\\u1E63\":\"s\",\"\\u1E69\":\"s\",\"\\u0219\":\"s\",\"\\u015F\":\"s\",\"\\u023F\":\"s\",\"\\uA7A9\":\"s\",\"\\uA785\":\"s\",\"\\u1E9B\":\"s\",\"\\u24E3\":\"t\",\"\\uFF54\":\"t\",\"\\u1E6B\":\"t\",\"\\u1E97\":\"t\",\"\\u0165\":\"t\",\"\\u1E6D\":\"t\",\"\\u021B\":\"t\",\"\\u0163\":\"t\",\"\\u1E71\":\"t\",\"\\u1E6F\":\"t\",\"\\u0167\":\"t\",\"\\u01AD\":\"t\",\"\\u0288\":\"t\",\"\\u2C66\":\"t\",\"\\uA787\":\"t\",\"\\uA729\":\"tz\",\"\\u24E4\":\"u\",\"\\uFF55\":\"u\",\"\\u00F9\":\"u\",\"\\u00FA\":\"u\",\"\\u00FB\":\"u\",\"\\u0169\":\"u\",\"\\u1E79\":\"u\",\"\\u016B\":\"u\",\"\\u1E7B\":\"u\",\"\\u016D\":\"u\",\"\\u00FC\":\"u\",\"\\u01DC\":\"u\",\"\\u01D8\":\"u\",\"\\u01D6\":\"u\",\"\\u01DA\":\"u\",\"\\u1EE7\":\"u\",\"\\u016F\":\"u\",\"\\u0171\":\"u\",\"\\u01D4\":\"u\",\"\\u0215\":\"u\",\"\\u0217\":\"u\",\"\\u01B0\":\"u\",\"\\u1EEB\":\"u\",\"\\u1EE9\":\"u\",\"\\u1EEF\":\"u\",\"\\u1EED\":\"u\",\"\\u1EF1\":\"u\",\"\\u1EE5\":\"u\",\"\\u1E73\":\"u\",\"\\u0173\":\"u\",\"\\u1E77\":\"u\",\"\\u1E75\":\"u\",\"\\u0289\":\"u\",\"\\u24E5\":\"v\",\"\\uFF56\":\"v\",\"\\u1E7D\":\"v\",\"\\u1E7F\":\"v\",\"\\u028B\":\"v\",\"\\uA75F\":\"v\",\"\\u028C\":\"v\",\"\\uA761\":\"vy\",\"\\u24E6\":\"w\",\"\\uFF57\":\"w\",\"\\u1E81\":\"w\",\"\\u1E83\":\"w\",\"\\u0175\":\"w\",\"\\u1E87\":\"w\",\"\\u1E85\":\"w\",\"\\u1E98\":\"w\",\"\\u1E89\":\"w\",\"\\u2C73\":\"w\",\"\\u24E7\":\"x\",\"\\uFF58\":\"x\",\"\\u1E8B\":\"x\",\"\\u1E8D\":\"x\",\"\\u24E8\":\"y\",\"\\uFF59\":\"y\",\"\\u1EF3\":\"y\",\"\\u00FD\":\"y\",\"\\u0177\":\"y\",\"\\u1EF9\":\"y\",\"\\u0233\":\"y\",\"\\u1E8F\":\"y\",\"\\u00FF\":\"y\",\"\\u1EF7\":\"y\",\"\\u1E99\":\"y\",\"\\u1EF5\":\"y\",\"\\u01B4\":\"y\",\"\\u024F\":\"y\",\"\\u1EFF\":\"y\",\"\\u24E9\":\"z\",\"\\uFF5A\":\"z\",\"\\u017A\":\"z\",\"\\u1E91\":\"z\",\"\\u017C\":\"z\",\"\\u017E\":\"z\",\"\\u1E93\":\"z\",\"\\u1E95\":\"z\",\"\\u01B6\":\"z\",\"\\u0225\":\"z\",\"\\u0240\":\"z\",\"\\u2C6C\":\"z\",\"\\uA763\":\"z\"};\n \n $document = $(document);\n \n nextUid=(function() { var counter=1; return function() { return counter++; }; }());\n \n \n function stripDiacritics(str) {\n var ret, i, l, c;\n \n if (!str || str.length < 1) return str;\n \n ret = \"\";\n for (i = 0, l = str.length; i < l; i++) {\n c = str.charAt(i);\n ret += DIACRITICS[c] || c;\n }\n return ret;\n }\n \n function indexOf(value, array) {\n var i = 0, l = array.length;\n for (; i < l; i = i + 1) {\n if (equal(value, array[i])) return i;\n }\n return -1;\n }\n \n function measureScrollbar () {\n var $template = $( MEASURE_SCROLLBAR_TEMPLATE );\n $template.appendTo('body');\n \n var dim = {\n width: $template.width() - $template[0].clientWidth,\n height: $template.height() - $template[0].clientHeight\n };\n $template.remove();\n \n return dim;\n }\n \n /**\n * Compares equality of a and b\n * @param a\n * @param b\n */\n function equal(a, b) {\n if (a === b) return true;\n if (a === undefined || b === undefined) return false;\n if (a === null || b === null) return false;\n // Check whether 'a' or 'b' is a string (primitive or object).\n // The concatenation of an empty string (+'') converts its argument to a string's primitive.\n if (a.constructor === String) return a+'' === b+''; // a+'' - in case 'a' is a String object\n if (b.constructor === String) return b+'' === a+''; // b+'' - in case 'b' is a String object\n return false;\n }\n \n /**\n * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty\n * strings\n * @param string\n * @param separator\n */\n function splitVal(string, separator) {\n var val, i, l;\n if (string === null || string.length < 1) return [];\n val = string.split(separator);\n for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]);\n return val;\n }\n \n function getSideBorderPadding(element) {\n return element.outerWidth(false) - element.width();\n }\n \n function installKeyUpChangeEvent(element) {\n var key=\"keyup-change-value\";\n element.on(\"keydown\", function () {\n if ($.data(element, key) === undefined) {\n $.data(element, key, element.val());\n }\n });\n element.on(\"keyup\", function () {\n var val= $.data(element, key);\n if (val !== undefined && element.val() !== val) {\n $.removeData(element, key);\n element.trigger(\"keyup-change\");\n }\n });\n }\n \n $document.on(\"mousemove\", function (e) {\n lastMousePosition.x = e.pageX;\n lastMousePosition.y = e.pageY;\n });\n \n /**\n * filters mouse events so an event is fired only if the mouse moved.\n *\n * filters out mouse events that occur when mouse is stationary but\n * the elements under the pointer are scrolled.\n */\n function installFilteredMouseMove(element) {\n element.on(\"mousemove\", function (e) {\n var lastpos = lastMousePosition;\n if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {\n $(e.target).trigger(\"mousemove-filtered\", e);\n }\n });\n }\n \n /**\n * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made\n * within the last quietMillis milliseconds.\n *\n * @param quietMillis number of milliseconds to wait before invoking fn\n * @param fn function to be debounced\n * @param ctx object to be used as this reference within fn\n * @return debounced version of fn\n */\n function debounce(quietMillis, fn, ctx) {\n ctx = ctx || undefined;\n var timeout;\n return function () {\n var args = arguments;\n window.clearTimeout(timeout);\n timeout = window.setTimeout(function() {\n fn.apply(ctx, args);\n }, quietMillis);\n };\n }\n \n /**\n * A simple implementation of a thunk\n * @param formula function used to lazily initialize the thunk\n * @return {Function}\n */\n function thunk(formula) {\n var evaluated = false,\n value;\n return function() {\n if (evaluated === false) { value = formula(); evaluated = true; }\n return value;\n };\n };\n \n function installDebouncedScroll(threshold, element) {\n var notify = debounce(threshold, function (e) { element.trigger(\"scroll-debounced\", e);});\n element.on(\"scroll\", function (e) {\n if (indexOf(e.target, element.get()) >= 0) notify(e);\n });\n }\n \n function focus($el) {\n if ($el[0] === document.activeElement) return;\n \n /* set the focus in a 0 timeout - that way the focus is set after the processing\n of the current event has finished - which seems like the only reliable way\n to set focus */\n window.setTimeout(function() {\n var el=$el[0], pos=$el.val().length, range;\n \n $el.focus();\n \n /* make sure el received focus so we do not error out when trying to manipulate the caret.\n sometimes modals or others listeners may steal it after its set */\n if ($el.is(\":visible\") && el === document.activeElement) {\n \n /* after the focus is set move the caret to the end, necessary when we val()\n just before setting focus */\n if(el.setSelectionRange)\n {\n el.setSelectionRange(pos, pos);\n }\n else if (el.createTextRange) {\n range = el.createTextRange();\n range.collapse(false);\n range.select();\n }\n }\n }, 0);\n }\n \n function getCursorInfo(el) {\n el = $(el)[0];\n var offset = 0;\n var length = 0;\n if ('selectionStart' in el) {\n offset = el.selectionStart;\n length = el.selectionEnd - offset;\n } else if ('selection' in document) {\n el.focus();\n var sel = document.selection.createRange();\n length = document.selection.createRange().text.length;\n sel.moveStart('character', -el.value.length);\n offset = sel.text.length - length;\n }\n return { offset: offset, length: length };\n }\n \n function killEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n }\n function killEventImmediately(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n \n function measureTextWidth(e) {\n if (!sizer){\n var style = e[0].currentStyle || window.getComputedStyle(e[0], null);\n sizer = $(document.createElement(\"div\")).css({\n position: \"absolute\",\n left: \"-10000px\",\n top: \"-10000px\",\n display: \"none\",\n fontSize: style.fontSize,\n fontFamily: style.fontFamily,\n fontStyle: style.fontStyle,\n fontWeight: style.fontWeight,\n letterSpacing: style.letterSpacing,\n textTransform: style.textTransform,\n whiteSpace: \"nowrap\"\n });\n sizer.attr(\"class\",\"select2-sizer\");\n $(\"body\").append(sizer);\n }\n sizer.text(e.val());\n return sizer.width();\n }\n \n function syncCssClasses(dest, src, adapter) {\n var classes, replacements = [], adapted;\n \n classes = dest.attr(\"class\");\n if (classes) {\n classes = '' + classes; // for IE which returns object\n $(classes.split(\" \")).each2(function() {\n if (this.indexOf(\"select2-\") === 0) {\n replacements.push(this);\n }\n });\n }\n classes = src.attr(\"class\");\n if (classes) {\n classes = '' + classes; // for IE which returns object\n $(classes.split(\" \")).each2(function() {\n if (this.indexOf(\"select2-\") !== 0) {\n adapted = adapter(this);\n if (adapted) {\n replacements.push(adapted);\n }\n }\n });\n }\n dest.attr(\"class\", replacements.join(\" \"));\n }\n \n \n function markMatch(text, term, markup, escapeMarkup) {\n var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())),\n tl=term.length;\n \n if (match<0) {\n markup.push(escapeMarkup(text));\n return;\n }\n \n markup.push(escapeMarkup(text.substring(0, match)));\n markup.push(\"<span class='select2-match'>\");\n markup.push(escapeMarkup(text.substring(match, match + tl)));\n markup.push(\"</span>\");\n markup.push(escapeMarkup(text.substring(match + tl, text.length)));\n }\n \n function defaultEscapeMarkup(markup) {\n var replace_map = {\n '\\\\': '\',\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n \"/\": '/'\n };\n \n return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n return replace_map[match];\n });\n }\n \n /**\n * Produces an ajax-based query function\n *\n * @param options object containing configuration paramters\n * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax\n * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax\n * @param options.url url for the data\n * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url.\n * @param options.dataType request data type: ajax, jsonp, other datatatypes supported by jQuery's $.ajax function or the transport function if specified\n * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often\n * @param options.results a function(remoteData, pageNumber) that converts data returned form the remote request to the format expected by Select2.\n * The expected format is an object containing the following keys:\n * results array of objects that will be used as choices\n * more (optional) boolean indicating whether there are more results available\n * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true}\n */\n function ajax(options) {\n var timeout, // current scheduled but not yet executed request\n handler = null,\n quietMillis = options.quietMillis || 100,\n ajaxUrl = options.url,\n self = this;\n \n return function (query) {\n window.clearTimeout(timeout);\n timeout = window.setTimeout(function () {\n var data = options.data, // ajax data function\n url = ajaxUrl, // ajax url string or function\n transport = options.transport || $.fn.select2.ajaxDefaults.transport,\n // deprecated - to be removed in 4.0 - use params instead\n deprecated = {\n type: options.type || 'GET', // set type of request (GET or POST)\n cache: options.cache || false,\n jsonpCallback: options.jsonpCallback||undefined,\n dataType: options.dataType||\"json\"\n },\n params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);\n \n data = data ? data.call(self, query.term, query.page, query.context) : null;\n url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;\n \n if (handler) { handler.abort(); }\n \n if (options.params) {\n if ($.isFunction(options.params)) {\n $.extend(params, options.params.call(self));\n } else {\n $.extend(params, options.params);\n }\n }\n \n $.extend(params, {\n url: url,\n dataType: options.dataType,\n data: data,\n success: function (data) {\n // TODO - replace query.page with query so users have access to term, page, etc.\n var results = options.results(data, query.page);\n query.callback(results);\n }\n });\n handler = transport.call(self, params);\n }, quietMillis);\n };\n }\n \n /**\n * Produces a query function that works with a local array\n *\n * @param options object containing configuration parameters. The options parameter can either be an array or an\n * object.\n *\n * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.\n *\n * If the object form is used ti is assumed that it contains 'data' and 'text' keys. The 'data' key should contain\n * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'\n * key can either be a String in which case it is expected that each element in the 'data' array has a key with the\n * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract\n * the text.\n */\n function local(options) {\n var data = options, // data elements\n dataText,\n tmp,\n text = function (item) { return \"\"+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search\n \n if ($.isArray(data)) {\n tmp = data;\n data = { results: tmp };\n }\n \n if ($.isFunction(data) === false) {\n tmp = data;\n data = function() { return tmp; };\n }\n \n var dataItem = data();\n if (dataItem.text) {\n text = dataItem.text;\n // if text is not a function we assume it to be a key name\n if (!$.isFunction(text)) {\n dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available\n text = function (item) { return item[dataText]; };\n }\n }\n \n return function (query) {\n var t = query.term, filtered = { results: [] }, process;\n if (t === \"\") {\n query.callback(data());\n return;\n }\n \n process = function(datum, collection) {\n var group, attr;\n datum = datum[0];\n if (datum.children) {\n group = {};\n for (attr in datum) {\n if (datum.hasOwnProperty(attr)) group[attr]=datum[attr];\n }\n group.children=[];\n $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); });\n if (group.children.length || query.matcher(t, text(group), datum)) {\n collection.push(group);\n }\n } else {\n if (query.matcher(t, text(datum), datum)) {\n collection.push(datum);\n }\n }\n };\n \n $(data().results).each2(function(i, datum) { process(datum, filtered.results); });\n query.callback(filtered);\n };\n }\n \n // TODO javadoc\n function tags(data) {\n var isFunc = $.isFunction(data);\n return function (query) {\n var t = query.term, filtered = {results: []};\n $(isFunc ? data() : data).each(function () {\n var isObject = this.text !== undefined,\n text = isObject ? this.text : this;\n if (t === \"\" || query.matcher(t, text)) {\n filtered.results.push(isObject ? this : {id: this, text: this});\n }\n });\n query.callback(filtered);\n };\n }\n \n /**\n * Checks if the formatter function should be used.\n *\n * Throws an error if it is not a function. Returns true if it should be used,\n * false if no formatting should be performed.\n *\n * @param formatter\n */\n function checkFormatter(formatter, formatterName) {\n if ($.isFunction(formatter)) return true;\n if (!formatter) return false;\n throw new Error(formatterName +\" must be a function or a falsy value\");\n }\n \n function evaluate(val) {\n return $.isFunction(val) ? val() : val;\n }\n \n function countResults(results) {\n var count = 0;\n $.each(results, function(i, item) {\n if (item.children) {\n count += countResults(item.children);\n } else {\n count++;\n }\n });\n return count;\n }\n \n /**\n * Default tokenizer. This function uses breaks the input on substring match of any string from the\n * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those\n * two options have to be defined in order for the tokenizer to work.\n *\n * @param input text user has typed so far or pasted into the search field\n * @param selection currently selected choices\n * @param selectCallback function(choice) callback tho add the choice to selection\n * @param opts select2's opts\n * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value\n */\n function defaultTokenizer(input, selection, selectCallback, opts) {\n var original = input, // store the original so we can compare and know if we need to tell the search to update its text\n dupe = false, // check for whether a token we extracted represents a duplicate selected choice\n token, // token\n index, // position at which the separator was found\n i, l, // looping variables\n separator; // the matched separator\n \n if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined;\n \n while (true) {\n index = -1;\n \n for (i = 0, l = opts.tokenSeparators.length; i < l; i++) {\n separator = opts.tokenSeparators[i];\n index = input.indexOf(separator);\n if (index >= 0) break;\n }\n \n if (index < 0) break; // did not find any token separator in the input string, bail\n \n token = input.substring(0, index);\n input = input.substring(index + separator.length);\n \n if (token.length > 0) {\n token = opts.createSearchChoice.call(this, token, selection);\n if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) {\n dupe = false;\n for (i = 0, l = selection.length; i < l; i++) {\n if (equal(opts.id(token), opts.id(selection[i]))) {\n dupe = true; break;\n }\n }\n \n if (!dupe) selectCallback(token);\n }\n }\n }\n \n if (original!==input) return input;\n }\n \n /**\n * Creates a new class\n *\n * @param superClass\n * @param methods\n */\n function clazz(SuperClass, methods) {\n var constructor = function () {};\n constructor.prototype = new SuperClass;\n constructor.prototype.constructor = constructor;\n constructor.prototype.parent = SuperClass.prototype;\n constructor.prototype = $.extend(constructor.prototype, methods);\n return constructor;\n }\n \n AbstractSelect2 = clazz(Object, {\n \n // abstract\n bind: function (func) {\n var self = this;\n return function () {\n func.apply(self, arguments);\n };\n },\n \n // abstract\n init: function (opts) {\n var results, search, resultsSelector = \".select2-results\";\n \n // prepare options\n this.opts = opts = this.prepareOpts(opts);\n \n this.id=opts.id;\n \n // destroy if called on an existing component\n if (opts.element.data(\"select2\") !== undefined &&\n opts.element.data(\"select2\") !== null) {\n opts.element.data(\"select2\").destroy();\n }\n \n this.container = this.createContainer();\n \n this.containerId=\"s2id_\"+(opts.element.attr(\"id\") || \"autogen\"+nextUid());\n this.containerSelector=\"#\"+this.containerId.replace(/([;&,\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1');\n this.container.attr(\"id\", this.containerId);\n \n // cache the body so future lookups are cheap\n this.body = thunk(function() { return opts.element.closest(\"body\"); });\n \n syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);\n \n this.container.attr(\"style\", opts.element.attr(\"style\"));\n this.container.css(evaluate(opts.containerCss));\n this.container.addClass(evaluate(opts.containerCssClass));\n \n this.elementTabIndex = this.opts.element.attr(\"tabindex\");\n \n // swap container for the element\n this.opts.element\n .data(\"select2\", this)\n .attr(\"tabindex\", \"-1\")\n .before(this.container)\n .on(\"click.select2\", killEvent); // do not leak click events\n \n this.container.data(\"select2\", this);\n \n this.dropdown = this.container.find(\".select2-drop\");\n \n syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);\n \n this.dropdown.addClass(evaluate(opts.dropdownCssClass));\n this.dropdown.data(\"select2\", this);\n this.dropdown.on(\"click\", killEvent);\n \n this.results = results = this.container.find(resultsSelector);\n this.search = search = this.container.find(\"input.select2-input\");\n \n this.queryCount = 0;\n this.resultsPage = 0;\n this.context = null;\n \n // initialize the container\n this.initContainer();\n \n this.container.on(\"click\", killEvent);\n \n installFilteredMouseMove(this.results);\n this.dropdown.on(\"mousemove-filtered touchstart touchmove touchend\", resultsSelector, this.bind(this.highlightUnderEvent));\n \n installDebouncedScroll(80, this.results);\n this.dropdown.on(\"scroll-debounced\", resultsSelector, this.bind(this.loadMoreIfNeeded));\n \n // do not propagate change event from the search field out of the component\n $(this.container).on(\"change\", \".select2-input\", function(e) {e.stopPropagation();});\n $(this.dropdown).on(\"change\", \".select2-input\", function(e) {e.stopPropagation();});\n \n // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel\n if ($.fn.mousewheel) {\n results.mousewheel(function (e, delta, deltaX, deltaY) {\n var top = results.scrollTop();\n if (deltaY > 0 && top - deltaY <= 0) {\n results.scrollTop(0);\n killEvent(e);\n } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {\n results.scrollTop(results.get(0).scrollHeight - results.height());\n killEvent(e);\n }\n });\n }\n \n installKeyUpChangeEvent(search);\n search.on(\"keyup-change input paste\", this.bind(this.updateResults));\n search.on(\"focus\", function () { search.addClass(\"select2-focused\"); });\n search.on(\"blur\", function () { search.removeClass(\"select2-focused\");});\n \n this.dropdown.on(\"mouseup\", resultsSelector, this.bind(function (e) {\n if ($(e.target).closest(\".select2-result-selectable\").length > 0) {\n this.highlightUnderEvent(e);\n this.selectHighlighted(e);\n }\n }));\n \n // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening\n // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's\n // dom it will trigger the popup close, which is not what we want\n this.dropdown.on(\"click mouseup mousedown\", function (e) { e.stopPropagation(); });\n \n if ($.isFunction(this.opts.initSelection)) {\n // initialize selection based on the current value of the source element\n this.initSelection();\n \n // if the user has provided a function that can set selection based on the value of the source element\n // we monitor the change event on the element and trigger it, allowing for two way synchronization\n this.monitorSource();\n }\n \n if (opts.maximumInputLength !== null) {\n this.search.attr(\"maxlength\", opts.maximumInputLength);\n }\n \n var disabled = opts.element.prop(\"disabled\");\n if (disabled === undefined) disabled = false;\n this.enable(!disabled);\n \n var readonly = opts.element.prop(\"readonly\");\n if (readonly === undefined) readonly = false;\n this.readonly(readonly);\n \n // Calculate size of scrollbar\n scrollBarDimensions = scrollBarDimensions || measureScrollbar();\n \n this.autofocus = opts.element.prop(\"autofocus\");\n opts.element.prop(\"autofocus\", false);\n if (this.autofocus) this.focus();\n \n this.nextSearchTerm = undefined;\n },\n \n // abstract\n destroy: function () {\n var element=this.opts.element, select2 = element.data(\"select2\");\n \n this.close();\n \n if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }\n \n if (select2 !== undefined) {\n select2.container.remove();\n select2.dropdown.remove();\n element\n .removeClass(\"select2-offscreen\")\n .removeData(\"select2\")\n .off(\".select2\")\n .prop(\"autofocus\", this.autofocus || false);\n if (this.elementTabIndex) {\n element.attr({tabindex: this.elementTabIndex});\n } else {\n element.removeAttr(\"tabindex\");\n }\n element.show();\n }\n },\n \n // abstract\n optionToData: function(element) {\n if (element.is(\"option\")) {\n return {\n id:element.prop(\"value\"),\n text:element.text(),\n element: element.get(),\n css: element.attr(\"class\"),\n disabled: element.prop(\"disabled\"),\n locked: equal(element.attr(\"locked\"), \"locked\") || equal(element.data(\"locked\"), true)\n };\n } else if (element.is(\"optgroup\")) {\n return {\n text:element.attr(\"label\"),\n children:[],\n element: element.get(),\n css: element.attr(\"class\")\n };\n }\n },\n \n // abstract\n prepareOpts: function (opts) {\n var element, select, idKey, ajaxUrl, self = this;\n \n element = opts.element;\n \n if (element.get(0).tagName.toLowerCase() === \"select\") {\n this.select = select = opts.element;\n }\n \n if (select) {\n // these options are not allowed when attached to a select because they are picked up off the element itself\n $.each([\"id\", \"multiple\", \"ajax\", \"query\", \"createSearchChoice\", \"initSelection\", \"data\", \"tags\"], function () {\n if (this in opts) {\n throw new Error(\"Option '\" + this + \"' is not allowed for Select2 when attached to a <select> element.\");\n }\n });\n }\n \n opts = $.extend({}, {\n populateResults: function(container, results, query) {\n var populate, id=this.opts.id;\n \n populate=function(results, container, depth) {\n \n var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted;\n \n results = opts.sortResults(results, container, query);\n \n for (i = 0, l = results.length; i < l; i = i + 1) {\n \n result=results[i];\n \n disabled = (result.disabled === true);\n selectable = (!disabled) && (id(result) !== undefined);\n \n compound=result.children && result.children.length > 0;\n \n node=$(\"<li></li>\");\n node.addClass(\"select2-results-dept-\"+depth);\n node.addClass(\"select2-result\");\n node.addClass(selectable ? \"select2-result-selectable\" : \"select2-result-unselectable\");\n if (disabled) { node.addClass(\"select2-disabled\"); }\n if (compound) { node.addClass(\"select2-result-with-children\"); }\n node.addClass(self.opts.formatResultCssClass(result));\n \n label=$(document.createElement(\"div\"));\n label.addClass(\"select2-result-label\");\n \n formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup);\n if (formatted!==undefined) {\n label.html(formatted);\n }\n \n node.append(label);\n \n if (compound) {\n \n innerContainer=$(\"<ul></ul>\");\n innerContainer.addClass(\"select2-result-sub\");\n populate(result.children, innerContainer, depth+1);\n node.append(innerContainer);\n }\n \n node.data(\"select2-data\", result);\n container.append(node);\n }\n };\n \n populate(results, container, 0);\n }\n }, $.fn.select2.defaults, opts);\n \n if (typeof(opts.id) !== \"function\") {\n idKey = opts.id;\n opts.id = function (e) { return e[idKey]; };\n }\n \n if ($.isArray(opts.element.data(\"select2Tags\"))) {\n if (\"tags\" in opts) {\n throw \"tags specified as both an attribute 'data-select2-tags' and in options of Select2 \" + opts.element.attr(\"id\");\n }\n opts.tags=opts.element.data(\"select2Tags\");\n }\n \n if (select) {\n opts.query = this.bind(function (query) {\n var data = { results: [], more: false },\n term = query.term,\n children, placeholderOption, process;\n \n process=function(element, collection) {\n var group;\n if (element.is(\"option\")) {\n if (query.matcher(term, element.text(), element)) {\n collection.push(self.optionToData(element));\n }\n } else if (element.is(\"optgroup\")) {\n group=self.optionToData(element);\n element.children().each2(function(i, elm) { process(elm, group.children); });\n if (group.children.length>0) {\n collection.push(group);\n }\n }\n };\n \n children=element.children();\n \n // ignore the placeholder option if there is one\n if (this.getPlaceholder() !== undefined && children.length > 0) {\n placeholderOption = this.getPlaceholderOption();\n if (placeholderOption) {\n children=children.not(placeholderOption);\n }\n }\n \n children.each2(function(i, elm) { process(elm, data.results); });\n \n query.callback(data);\n });\n // this is needed because inside val() we construct choices from options and there id is hardcoded\n opts.id=function(e) { return e.id; };\n opts.formatResultCssClass = function(data) { return data.css; };\n } else {\n if (!(\"query\" in opts)) {\n \n if (\"ajax\" in opts) {\n ajaxUrl = opts.element.data(\"ajax-url\");\n if (ajaxUrl && ajaxUrl.length > 0) {\n opts.ajax.url = ajaxUrl;\n }\n opts.query = ajax.call(opts.element, opts.ajax);\n } else if (\"data\" in opts) {\n opts.query = local(opts.data);\n } else if (\"tags\" in opts) {\n opts.query = tags(opts.tags);\n if (opts.createSearchChoice === undefined) {\n opts.createSearchChoice = function (term) { return {id: $.trim(term), text: $.trim(term)}; };\n }\n if (opts.initSelection === undefined) {\n opts.initSelection = function (element, callback) {\n var data = [];\n $(splitVal(element.val(), opts.separator)).each(function () {\n var obj = { id: this, text: this },\n tags = opts.tags;\n if ($.isFunction(tags)) tags=tags();\n $(tags).each(function() { if (equal(this.id, obj.id)) { obj = this; return false; } });\n data.push(obj);\n });\n \n callback(data);\n };\n }\n }\n }\n }\n if (typeof(opts.query) !== \"function\") {\n throw \"query function not defined for Select2 \" + opts.element.attr(\"id\");\n }\n \n return opts;\n },\n \n /**\n * Monitor the original element for changes and update select2 accordingly\n */\n // abstract\n monitorSource: function () {\n var el = this.opts.element, sync, observer;\n \n el.on(\"change.select2\", this.bind(function (e) {\n if (this.opts.element.data(\"select2-change-triggered\") !== true) {\n this.initSelection();\n }\n }));\n \n sync = this.bind(function () {\n \n // sync enabled state\n var disabled = el.prop(\"disabled\");\n if (disabled === undefined) disabled = false;\n this.enable(!disabled);\n \n var readonly = el.prop(\"readonly\");\n if (readonly === undefined) readonly = false;\n this.readonly(readonly);\n \n syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);\n this.container.addClass(evaluate(this.opts.containerCssClass));\n \n syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);\n this.dropdown.addClass(evaluate(this.opts.dropdownCssClass));\n \n });\n \n // IE8-10\n el.on(\"propertychange.select2\", sync);\n \n // hold onto a reference of the callback to work around a chromium bug\n if (this.mutationCallback === undefined) {\n this.mutationCallback = function (mutations) {\n mutations.forEach(sync);\n }\n }\n \n // safari, chrome, firefox, IE11\n observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver;\n if (observer !== undefined) {\n if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }\n this.propertyObserver = new observer(this.mutationCallback);\n this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });\n }\n },\n \n // abstract\n triggerSelect: function(data) {\n var evt = $.Event(\"select2-selecting\", { val: this.id(data), object: data });\n this.opts.element.trigger(evt);\n return !evt.isDefaultPrevented();\n },\n \n /**\n * Triggers the change event on the source element\n */\n // abstract\n triggerChange: function (details) {\n \n details = details || {};\n details= $.extend({}, details, { type: \"change\", val: this.val() });\n // prevents recursive triggering\n this.opts.element.data(\"select2-change-triggered\", true);\n this.opts.element.trigger(details);\n this.opts.element.data(\"select2-change-triggered\", false);\n \n // some validation frameworks ignore the change event and listen instead to keyup, click for selects\n // so here we trigger the click event manually\n this.opts.element.click();\n \n // ValidationEngine ignorea the change event and listens instead to blur\n // so here we trigger the blur event manually if so desired\n if (this.opts.blurOnChange)\n this.opts.element.blur();\n },\n \n //abstract\n isInterfaceEnabled: function()\n {\n return this.enabledInterface === true;\n },\n \n // abstract\n enableInterface: function() {\n var enabled = this._enabled && !this._readonly,\n disabled = !enabled;\n \n if (enabled === this.enabledInterface) return false;\n \n this.container.toggleClass(\"select2-container-disabled\", disabled);\n this.close();\n this.enabledInterface = enabled;\n \n return true;\n },\n \n // abstract\n enable: function(enabled) {\n if (enabled === undefined) enabled = true;\n if (this._enabled === enabled) return;\n this._enabled = enabled;\n \n this.opts.element.prop(\"disabled\", !enabled);\n this.enableInterface();\n },\n \n // abstract\n disable: function() {\n this.enable(false);\n },\n \n // abstract\n readonly: function(enabled) {\n if (enabled === undefined) enabled = false;\n if (this._readonly === enabled) return false;\n this._readonly = enabled;\n \n this.opts.element.prop(\"readonly\", enabled);\n this.enableInterface();\n return true;\n },\n \n // abstract\n opened: function () {\n return this.container.hasClass(\"select2-dropdown-open\");\n },\n \n // abstract\n positionDropdown: function() {\n var $dropdown = this.dropdown,\n offset = this.container.offset(),\n height = this.container.outerHeight(false),\n width = this.container.outerWidth(false),\n dropHeight = $dropdown.outerHeight(false),\n $window = $(window),\n windowWidth = $window.width(),\n windowHeight = $window.height(),\n viewPortRight = $window.scrollLeft() + windowWidth,\n viewportBottom = $window.scrollTop() + windowHeight,\n dropTop = offset.top + height,\n dropLeft = offset.left,\n enoughRoomBelow = dropTop + dropHeight <= viewportBottom,\n enoughRoomAbove = (offset.top - dropHeight) >= this.body().scrollTop(),\n dropWidth = $dropdown.outerWidth(false),\n enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight,\n aboveNow = $dropdown.hasClass(\"select2-drop-above\"),\n bodyOffset,\n above,\n changeDirection,\n css,\n resultsListNode;\n \n // always prefer the current above/below alignment, unless there is not enough room\n if (aboveNow) {\n above = true;\n if (!enoughRoomAbove && enoughRoomBelow) {\n changeDirection = true;\n above = false;\n }\n } else {\n above = false;\n if (!enoughRoomBelow && enoughRoomAbove) {\n changeDirection = true;\n above = true;\n }\n }\n \n //if we are changing direction we need to get positions when dropdown is hidden;\n if (changeDirection) {\n $dropdown.hide();\n offset = this.container.offset();\n height = this.container.outerHeight(false);\n width = this.container.outerWidth(false);\n dropHeight = $dropdown.outerHeight(false);\n viewPortRight = $window.scrollLeft() + windowWidth;\n viewportBottom = $window.scrollTop() + windowHeight;\n dropTop = offset.top + height;\n dropLeft = offset.left;\n dropWidth = $dropdown.outerWidth(false);\n enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;\n $dropdown.show();\n }\n \n if (this.opts.dropdownAutoWidth) {\n resultsListNode = $('.select2-results', $dropdown)[0];\n $dropdown.addClass('select2-drop-auto-width');\n $dropdown.css('width', '');\n // Add scrollbar width to dropdown if vertical scrollbar is present\n dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);\n dropWidth > width ? width = dropWidth : dropWidth = width;\n enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;\n }\n else {\n this.container.removeClass('select2-drop-auto-width');\n }\n \n //console.log(\"below/ droptop:\", dropTop, \"dropHeight\", dropHeight, \"sum\", (dropTop+dropHeight)+\" viewport bottom\", viewportBottom, \"enough?\", enoughRoomBelow);\n //console.log(\"above/ offset.top\", offset.top, \"dropHeight\", dropHeight, \"top\", (offset.top-dropHeight), \"scrollTop\", this.body().scrollTop(), \"enough?\", enoughRoomAbove);\n \n // fix positioning when body has an offset and is not position: static\n if (this.body().css('position') !== 'static') {\n bodyOffset = this.body().offset();\n dropTop -= bodyOffset.top;\n dropLeft -= bodyOffset.left;\n }\n \n if (!enoughRoomOnRight) {\n dropLeft = offset.left + width - dropWidth;\n }\n \n css = {\n left: dropLeft,\n width: width\n };\n \n if (above) {\n css.bottom = windowHeight - offset.top;\n css.top = 'auto';\n this.container.addClass(\"select2-drop-above\");\n $dropdown.addClass(\"select2-drop-above\");\n }\n else {\n css.top = dropTop;\n css.bottom = 'auto';\n this.container.removeClass(\"select2-drop-above\");\n $dropdown.removeClass(\"select2-drop-above\");\n }\n css = $.extend(css, evaluate(this.opts.dropdownCss));\n \n $dropdown.css(css);\n },\n \n // abstract\n shouldOpen: function() {\n var event;\n \n if (this.opened()) return false;\n \n if (this._enabled === false || this._readonly === true) return false;\n \n event = $.Event(\"select2-opening\");\n this.opts.element.trigger(event);\n return !event.isDefaultPrevented();\n },\n \n // abstract\n clearDropdownAlignmentPreference: function() {\n // clear the classes used to figure out the preference of where the dropdown should be opened\n this.container.removeClass(\"select2-drop-above\");\n this.dropdown.removeClass(\"select2-drop-above\");\n },\n \n /**\n * Opens the dropdown\n *\n * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example,\n * the dropdown is already open, or if the 'open' event listener on the element called preventDefault().\n */\n // abstract\n open: function () {\n \n if (!this.shouldOpen()) return false;\n \n this.opening();\n \n return true;\n },\n \n /**\n * Performs the opening of the dropdown\n */\n // abstract\n opening: function() {\n var cid = this.containerId,\n scroll = \"scroll.\" + cid,\n resize = \"resize.\"+cid,\n orient = \"orientationchange.\"+cid,\n mask;\n \n this.container.addClass(\"select2-dropdown-open\").addClass(\"select2-container-active\");\n \n this.clearDropdownAlignmentPreference();\n \n if(this.dropdown[0] !== this.body().children().last()[0]) {\n this.dropdown.detach().appendTo(this.body());\n }\n \n // create the dropdown mask if doesnt already exist\n mask = $(\"#select2-drop-mask\");\n if (mask.length == 0) {\n mask = $(document.createElement(\"div\"));\n mask.attr(\"id\",\"select2-drop-mask\").attr(\"class\",\"select2-drop-mask\");\n mask.hide();\n mask.appendTo(this.body());\n mask.on(\"mousedown touchstart click\", function (e) {\n var dropdown = $(\"#select2-drop\"), self;\n if (dropdown.length > 0) {\n self=dropdown.data(\"select2\");\n if (self.opts.selectOnBlur) {\n self.selectHighlighted({noFocus: true});\n }\n self.close({focus:true});\n e.preventDefault();\n e.stopPropagation();\n }\n });\n }\n \n // ensure the mask is always right before the dropdown\n if (this.dropdown.prev()[0] !== mask[0]) {\n this.dropdown.before(mask);\n }\n \n // move the global id to the correct dropdown\n $(\"#select2-drop\").removeAttr(\"id\");\n this.dropdown.attr(\"id\", \"select2-drop\");\n \n // show the elements\n mask.show();\n \n this.positionDropdown();\n this.dropdown.show();\n this.positionDropdown();\n \n this.dropdown.addClass(\"select2-drop-active\");\n \n // attach listeners to events that can change the position of the container and thus require\n // the position of the dropdown to be updated as well so it does not come unglued from the container\n var that = this;\n this.container.parents().add(window).each(function () {\n $(this).on(resize+\" \"+scroll+\" \"+orient, function (e) {\n that.positionDropdown();\n });\n });\n \n \n },\n \n // abstract\n close: function () {\n if (!this.opened()) return;\n \n var cid = this.containerId,\n scroll = \"scroll.\" + cid,\n resize = \"resize.\"+cid,\n orient = \"orientationchange.\"+cid;\n \n // unbind event listeners\n this.container.parents().add(window).each(function () { $(this).off(scroll).off(resize).off(orient); });\n \n this.clearDropdownAlignmentPreference();\n \n $(\"#select2-drop-mask\").hide();\n this.dropdown.removeAttr(\"id\"); // only the active dropdown has the select2-drop id\n this.dropdown.hide();\n this.container.removeClass(\"select2-dropdown-open\").removeClass(\"select2-container-active\");\n this.results.empty();\n \n \n this.clearSearch();\n this.search.removeClass(\"select2-active\");\n this.opts.element.trigger($.Event(\"select2-close\"));\n },\n \n /**\n * Opens control, sets input value, and updates results.\n */\n // abstract\n externalSearch: function (term) {\n this.open();\n this.search.val(term);\n this.updateResults(false);\n },\n \n // abstract\n clearSearch: function () {\n \n },\n \n //abstract\n getMaximumSelectionSize: function() {\n return evaluate(this.opts.maximumSelectionSize);\n },\n \n // abstract\n ensureHighlightVisible: function () {\n var results = this.results, children, index, child, hb, rb, y, more;\n \n index = this.highlight();\n \n if (index < 0) return;\n \n if (index == 0) {\n \n // if the first element is highlighted scroll all the way to the top,\n // that way any unselectable headers above it will also be scrolled\n // into view\n \n results.scrollTop(0);\n return;\n }\n \n children = this.findHighlightableChoices().find('.select2-result-label');\n \n child = $(children[index]);\n \n hb = child.offset().top + child.outerHeight(true);\n \n // if this is the last child lets also make sure select2-more-results is visible\n if (index === children.length - 1) {\n more = results.find(\"li.select2-more-results\");\n if (more.length > 0) {\n hb = more.offset().top + more.outerHeight(true);\n }\n }\n \n rb = results.offset().top + results.outerHeight(true);\n if (hb > rb) {\n results.scrollTop(results.scrollTop() + (hb - rb));\n }\n y = child.offset().top - results.offset().top;\n \n // make sure the top of the element is visible\n if (y < 0 && child.css('display') != 'none' ) {\n results.scrollTop(results.scrollTop() + y); // y is negative\n }\n },\n \n // abstract\n findHighlightableChoices: function() {\n return this.results.find(\".select2-result-selectable:not(.select2-disabled, .select2-selected)\");\n },\n \n // abstract\n moveHighlight: function (delta) {\n var choices = this.findHighlightableChoices(),\n index = this.highlight();\n \n while (index > -1 && index < choices.length) {\n index += delta;\n var choice = $(choices[index]);\n if (choice.hasClass(\"select2-result-selectable\") && !choice.hasClass(\"select2-disabled\") && !choice.hasClass(\"select2-selected\")) {\n this.highlight(index);\n break;\n }\n }\n },\n \n // abstract\n highlight: function (index) {\n var choices = this.findHighlightableChoices(),\n choice,\n data;\n \n if (arguments.length === 0) {\n return indexOf(choices.filter(\".select2-highlighted\")[0], choices.get());\n }\n \n if (index >= choices.length) index = choices.length - 1;\n if (index < 0) index = 0;\n \n this.removeHighlight();\n \n choice = $(choices[index]);\n choice.addClass(\"select2-highlighted\");\n \n this.ensureHighlightVisible();\n \n data = choice.data(\"select2-data\");\n if (data) {\n this.opts.element.trigger({ type: \"select2-highlight\", val: this.id(data), choice: data });\n }\n },\n \n removeHighlight: function() {\n this.results.find(\".select2-highlighted\").removeClass(\"select2-highlighted\");\n },\n \n // abstract\n countSelectableResults: function() {\n return this.findHighlightableChoices().length;\n },\n \n // abstract\n highlightUnderEvent: function (event) {\n var el = $(event.target).closest(\".select2-result-selectable\");\n if (el.length > 0 && !el.is(\".select2-highlighted\")) {\n var choices = this.findHighlightableChoices();\n this.highlight(choices.index(el));\n } else if (el.length == 0) {\n // if we are over an unselectable item remove all highlights\n this.removeHighlight();\n }\n },\n \n // abstract\n loadMoreIfNeeded: function () {\n var results = this.results,\n more = results.find(\"li.select2-more-results\"),\n below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible\n page = this.resultsPage + 1,\n self=this,\n term=this.search.val(),\n context=this.context;\n \n if (more.length === 0) return;\n below = more.offset().top - results.offset().top - results.height();\n \n if (below <= this.opts.loadMorePadding) {\n more.addClass(\"select2-active\");\n this.opts.query({\n element: this.opts.element,\n term: term,\n page: page,\n context: context,\n matcher: this.opts.matcher,\n callback: this.bind(function (data) {\n \n // ignore a response if the select2 has been closed before it was received\n if (!self.opened()) return;\n \n \n self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context});\n self.postprocessResults(data, false, false);\n \n if (data.more===true) {\n more.detach().appendTo(results).text(self.opts.formatLoadMore(page+1));\n window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);\n } else {\n more.remove();\n }\n self.positionDropdown();\n self.resultsPage = page;\n self.context = data.context;\n this.opts.element.trigger({ type: \"select2-loaded\", items: data });\n })});\n }\n },\n \n /**\n * Default tokenizer function which does nothing\n */\n tokenize: function() {\n \n },\n \n /**\n * @param initial whether or not this is the call to this method right after the dropdown has been opened\n */\n // abstract\n updateResults: function (initial) {\n var search = this.search,\n results = this.results,\n opts = this.opts,\n data,\n self = this,\n input,\n term = search.val(),\n lastTerm = $.data(this.container, \"select2-last-term\"),\n // sequence number used to drop out-of-order responses\n queryNumber;\n \n // prevent duplicate queries against the same term\n if (initial !== true && lastTerm && equal(term, lastTerm)) return;\n \n $.data(this.container, \"select2-last-term\", term);\n \n // if the search is currently hidden we do not alter the results\n if (initial !== true && (this.showSearchInput === false || !this.opened())) {\n return;\n }\n \n function postRender() {\n search.removeClass(\"select2-active\");\n self.positionDropdown();\n }\n \n function render(html) {\n results.html(html);\n postRender();\n }\n \n queryNumber = ++this.queryCount;\n \n var maxSelSize = this.getMaximumSelectionSize();\n if (maxSelSize >=1) {\n data = this.data();\n if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, \"formatSelectionTooBig\")) {\n render(\"<li class='select2-selection-limit'>\" + opts.formatSelectionTooBig(maxSelSize) + \"</li>\");\n return;\n }\n }\n \n if (search.val().length < opts.minimumInputLength) {\n if (checkFormatter(opts.formatInputTooShort, \"formatInputTooShort\")) {\n render(\"<li class='select2-no-results'>\" + opts.formatInputTooShort(search.val(), opts.minimumInputLength) + \"</li>\");\n } else {\n render(\"\");\n }\n if (initial && this.showSearch) this.showSearch(true);\n return;\n }\n \n if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) {\n if (checkFormatter(opts.formatInputTooLong, \"formatInputTooLong\")) {\n render(\"<li class='select2-no-results'>\" + opts.formatInputTooLong(search.val(), opts.maximumInputLength) + \"</li>\");\n } else {\n render(\"\");\n }\n return;\n }\n \n if (opts.formatSearching && this.findHighlightableChoices().length === 0) {\n render(\"<li class='select2-searching'>\" + opts.formatSearching() + \"</li>\");\n }\n \n search.addClass(\"select2-active\");\n \n this.removeHighlight();\n \n // give the tokenizer a chance to pre-process the input\n input = this.tokenize();\n if (input != undefined && input != null) {\n search.val(input);\n }\n \n this.resultsPage = 1;\n \n opts.query({\n element: opts.element,\n term: search.val(),\n page: this.resultsPage,\n context: null,\n matcher: opts.matcher,\n callback: this.bind(function (data) {\n var def; // default choice\n \n // ignore old responses\n if (queryNumber != this.queryCount) {\n return;\n }\n \n // ignore a response if the select2 has been closed before it was received\n if (!this.opened()) {\n this.search.removeClass(\"select2-active\");\n return;\n }\n \n // save context, if any\n this.context = (data.context===undefined) ? null : data.context;\n // create a default choice and prepend it to the list\n if (this.opts.createSearchChoice && search.val() !== \"\") {\n def = this.opts.createSearchChoice.call(self, search.val(), data.results);\n if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) {\n if ($(data.results).filter(\n function () {\n return equal(self.id(this), self.id(def));\n }).length === 0) {\n data.results.unshift(def);\n }\n }\n }\n \n if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, \"formatNoMatches\")) {\n render(\"<li class='select2-no-results'>\" + opts.formatNoMatches(search.val()) + \"</li>\");\n return;\n }\n \n results.empty();\n self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null});\n \n if (data.more === true && checkFormatter(opts.formatLoadMore, \"formatLoadMore\")) {\n results.append(\"<li class='select2-more-results'>\" + self.opts.escapeMarkup(opts.formatLoadMore(this.resultsPage)) + \"</li>\");\n window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);\n }\n \n this.postprocessResults(data, initial);\n \n postRender();\n \n this.opts.element.trigger({ type: \"select2-loaded\", items: data });\n })});\n },\n \n // abstract\n cancel: function () {\n this.close();\n },\n \n // abstract\n blur: function () {\n // if selectOnBlur == true, select the currently highlighted option\n if (this.opts.selectOnBlur)\n this.selectHighlighted({noFocus: true});\n \n this.close();\n this.container.removeClass(\"select2-container-active\");\n // synonymous to .is(':focus'), which is available in jquery >= 1.6\n if (this.search[0] === document.activeElement) { this.search.blur(); }\n this.clearSearch();\n this.selection.find(\".select2-search-choice-focus\").removeClass(\"select2-search-choice-focus\");\n },\n \n // abstract\n focusSearch: function () {\n focus(this.search);\n },\n \n // abstract\n selectHighlighted: function (options) {\n var index=this.highlight(),\n highlighted=this.results.find(\".select2-highlighted\"),\n data = highlighted.closest('.select2-result').data(\"select2-data\");\n \n if (data) {\n this.highlight(index);\n this.onSelect(data, options);\n } else if (options && options.noFocus) {\n this.close();\n }\n },\n \n // abstract\n getPlaceholder: function () {\n var placeholderOption;\n return this.opts.element.attr(\"placeholder\") ||\n this.opts.element.attr(\"data-placeholder\") || // jquery 1.4 compat\n this.opts.element.data(\"placeholder\") ||\n this.opts.placeholder ||\n ((placeholderOption = this.getPlaceholderOption()) !== undefined ? placeholderOption.text() : undefined);\n },\n \n // abstract\n getPlaceholderOption: function() {\n if (this.select) {\n var firstOption = this.select.children('option').first();\n if (this.opts.placeholderOption !== undefined ) {\n //Determine the placeholder option based on the specified placeholderOption setting\n return (this.opts.placeholderOption === \"first\" && firstOption) ||\n (typeof this.opts.placeholderOption === \"function\" && this.opts.placeholderOption(this.select));\n } else if (firstOption.text() === \"\" && firstOption.val() === \"\") {\n //No explicit placeholder option specified, use the first if it's blank\n return firstOption;\n }\n }\n },\n \n /**\n * Get the desired width for the container element. This is\n * derived first from option `width` passed to select2, then\n * the inline 'style' on the original element, and finally\n * falls back to the jQuery calculated element width.\n */\n // abstract\n initContainerWidth: function () {\n function resolveContainerWidth() {\n var style, attrs, matches, i, l, attr;\n \n if (this.opts.width === \"off\") {\n return null;\n } else if (this.opts.width === \"element\"){\n return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px';\n } else if (this.opts.width === \"copy\" || this.opts.width === \"resolve\") {\n // check if there is inline style on the element that contains width\n style = this.opts.element.attr('style');\n if (style !== undefined) {\n attrs = style.split(';');\n for (i = 0, l = attrs.length; i < l; i = i + 1) {\n attr = attrs[i].replace(/\\s/g, '');\n matches = attr.match(/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);\n if (matches !== null && matches.length >= 1)\n return matches[1];\n }\n }\n \n if (this.opts.width === \"resolve\") {\n // next check if css('width') can resolve a width that is percent based, this is sometimes possible\n // when attached to input type=hidden or elements hidden via css\n style = this.opts.element.css('width');\n if (style.indexOf(\"%\") > 0) return style;\n \n // finally, fallback on the calculated width of the element\n return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px');\n }\n \n return null;\n } else if ($.isFunction(this.opts.width)) {\n return this.opts.width();\n } else {\n return this.opts.width;\n }\n };\n \n var width = resolveContainerWidth.call(this);\n if (width !== null) {\n this.container.css(\"width\", width);\n }\n }\n });\n \n SingleSelect2 = clazz(AbstractSelect2, {\n \n // single\n \n createContainer: function () {\n var container = $(document.createElement(\"div\")).attr({\n \"class\": \"select2-container\"\n }).html([\n \"<a href='javascript:void(0)' onclick='return false;' class='select2-choice' tabindex='-1'>\",\n \" <span class='select2-chosen'> </span><abbr class='select2-search-choice-close'></abbr>\",\n \" <span class='select2-arrow'><b></b></span>\",\n \"</a>\",\n \"<input class='select2-focusser select2-offscreen' type='text'/>\",\n \"<div class='select2-drop select2-display-none'>\",\n \" <div class='select2-search'>\",\n \" <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'/>\",\n \" </div>\",\n \" <ul class='select2-results'>\",\n \" </ul>\",\n \"</div>\"].join(\"\"));\n return container;\n },\n \n // single\n enableInterface: function() {\n if (this.parent.enableInterface.apply(this, arguments)) {\n this.focusser.prop(\"disabled\", !this.isInterfaceEnabled());\n }\n },\n \n // single\n opening: function () {\n var el, range, len;\n \n if (this.opts.minimumResultsForSearch >= 0) {\n this.showSearch(true);\n }\n \n this.parent.opening.apply(this, arguments);\n \n if (this.showSearchInput !== false) {\n // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range\n // all other browsers handle this just fine\n \n this.search.val(this.focusser.val());\n }\n this.search.focus();\n // move the cursor to the end after focussing, otherwise it will be at the beginning and\n // new text will appear *before* focusser.val()\n el = this.search.get(0);\n if (el.createTextRange) {\n range = el.createTextRange();\n range.collapse(false);\n range.select();\n } else if (el.setSelectionRange) {\n len = this.search.val().length;\n el.setSelectionRange(len, len);\n }\n \n // initializes search's value with nextSearchTerm (if defined by user)\n // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter\n if(this.search.val() === \"\") {\n if(this.nextSearchTerm != undefined){\n this.search.val(this.nextSearchTerm);\n this.search.select();\n }\n }\n \n this.focusser.prop(\"disabled\", true).val(\"\");\n this.updateResults(true);\n this.opts.element.trigger($.Event(\"select2-open\"));\n },\n \n // single\n close: function (params) {\n if (!this.opened()) return;\n this.parent.close.apply(this, arguments);\n \n params = params || {focus: true};\n this.focusser.removeAttr(\"disabled\");\n \n if (params.focus) {\n this.focusser.focus();\n }\n },\n \n // single\n focus: function () {\n if (this.opened()) {\n this.close();\n } else {\n this.focusser.removeAttr(\"disabled\");\n this.focusser.focus();\n }\n },\n \n // single\n isFocused: function () {\n return this.container.hasClass(\"select2-container-active\");\n },\n \n // single\n cancel: function () {\n this.parent.cancel.apply(this, arguments);\n this.focusser.removeAttr(\"disabled\");\n this.focusser.focus();\n },\n \n // single\n destroy: function() {\n $(\"label[for='\" + this.focusser.attr('id') + \"']\")\n .attr('for', this.opts.element.attr(\"id\"));\n this.parent.destroy.apply(this, arguments);\n },\n \n // single\n initContainer: function () {\n \n var selection,\n container = this.container,\n dropdown = this.dropdown;\n \n if (this.opts.minimumResultsForSearch < 0) {\n this.showSearch(false);\n } else {\n this.showSearch(true);\n }\n \n this.selection = selection = container.find(\".select2-choice\");\n \n this.focusser = container.find(\".select2-focusser\");\n \n // rewrite labels from original element to focusser\n this.focusser.attr(\"id\", \"s2id_autogen\"+nextUid());\n \n $(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\")\n .attr('for', this.focusser.attr('id'));\n \n this.focusser.attr(\"tabindex\", this.elementTabIndex);\n \n this.search.on(\"keydown\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n \n if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {\n // prevent the page from scrolling\n killEvent(e);\n return;\n }\n \n switch (e.which) {\n case KEY.UP:\n case KEY.DOWN:\n this.moveHighlight((e.which === KEY.UP) ? -1 : 1);\n killEvent(e);\n return;\n case KEY.ENTER:\n this.selectHighlighted();\n killEvent(e);\n return;\n case KEY.TAB:\n this.selectHighlighted({noFocus: true});\n return;\n case KEY.ESC:\n this.cancel(e);\n killEvent(e);\n return;\n }\n }));\n \n this.search.on(\"blur\", this.bind(function(e) {\n // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.\n // without this the search field loses focus which is annoying\n if (document.activeElement === this.body().get(0)) {\n window.setTimeout(this.bind(function() {\n this.search.focus();\n }), 0);\n }\n }));\n \n this.focusser.on(\"keydown\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n \n if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {\n return;\n }\n \n if (this.opts.openOnEnter === false && e.which === KEY.ENTER) {\n killEvent(e);\n return;\n }\n \n if (e.which == KEY.DOWN || e.which == KEY.UP\n || (e.which == KEY.ENTER && this.opts.openOnEnter)) {\n \n if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return;\n \n this.open();\n killEvent(e);\n return;\n }\n \n if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) {\n if (this.opts.allowClear) {\n this.clear();\n }\n killEvent(e);\n return;\n }\n }));\n \n \n installKeyUpChangeEvent(this.focusser);\n this.focusser.on(\"keyup-change input\", this.bind(function(e) {\n if (this.opts.minimumResultsForSearch >= 0) {\n e.stopPropagation();\n if (this.opened()) return;\n this.open();\n }\n }));\n \n selection.on(\"mousedown\", \"abbr\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n this.clear();\n killEventImmediately(e);\n this.close();\n this.selection.focus();\n }));\n \n selection.on(\"mousedown\", this.bind(function (e) {\n \n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n \n if (this.opened()) {\n this.close();\n } else if (this.isInterfaceEnabled()) {\n this.open();\n }\n \n killEvent(e);\n }));\n \n dropdown.on(\"mousedown\", this.bind(function() { this.search.focus(); }));\n \n selection.on(\"focus\", this.bind(function(e) {\n killEvent(e);\n }));\n \n this.focusser.on(\"focus\", this.bind(function(){\n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n this.container.addClass(\"select2-container-active\");\n })).on(\"blur\", this.bind(function() {\n if (!this.opened()) {\n this.container.removeClass(\"select2-container-active\");\n this.opts.element.trigger($.Event(\"select2-blur\"));\n }\n }));\n this.search.on(\"focus\", this.bind(function(){\n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n this.container.addClass(\"select2-container-active\");\n }));\n \n this.initContainerWidth();\n this.opts.element.addClass(\"select2-offscreen\");\n this.setPlaceholder();\n \n },\n \n // single\n clear: function(triggerChange) {\n var data=this.selection.data(\"select2-data\");\n if (data) { // guard against queued quick consecutive clicks\n var evt = $.Event(\"select2-clearing\");\n this.opts.element.trigger(evt);\n if (evt.isDefaultPrevented()) {\n return;\n }\n var placeholderOption = this.getPlaceholderOption();\n this.opts.element.val(placeholderOption ? placeholderOption.val() : \"\");\n this.selection.find(\".select2-chosen\").empty();\n this.selection.removeData(\"select2-data\");\n this.setPlaceholder();\n \n if (triggerChange !== false){\n this.opts.element.trigger({ type: \"select2-removed\", val: this.id(data), choice: data });\n this.triggerChange({removed:data});\n }\n }\n },\n \n /**\n * Sets selection based on source element's value\n */\n // single\n initSelection: function () {\n var selected;\n if (this.isPlaceholderOptionSelected()) {\n this.updateSelection(null);\n this.close();\n this.setPlaceholder();\n } else {\n var self = this;\n this.opts.initSelection.call(null, this.opts.element, function(selected){\n if (selected !== undefined && selected !== null) {\n self.updateSelection(selected);\n self.close();\n self.setPlaceholder();\n }\n });\n }\n },\n \n isPlaceholderOptionSelected: function() {\n var placeholderOption;\n if (!this.getPlaceholder()) return false; // no placeholder specified so no option should be considered\n return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop(\"selected\"))\n || (this.opts.element.val() === \"\")\n || (this.opts.element.val() === undefined)\n || (this.opts.element.val() === null);\n },\n \n // single\n prepareOpts: function () {\n var opts = this.parent.prepareOpts.apply(this, arguments),\n self=this;\n \n if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n // install the selection initializer\n opts.initSelection = function (element, callback) {\n var selected = element.find(\"option\").filter(function() { return this.selected });\n // a single select box always has a value, no need to null check 'selected'\n callback(self.optionToData(selected));\n };\n } else if (\"data\" in opts) {\n // install default initSelection when applied to hidden input and data is local\n opts.initSelection = opts.initSelection || function (element, callback) {\n var id = element.val();\n //search in data by id, storing the actual matching item\n var match = null;\n opts.query({\n matcher: function(term, text, el){\n var is_match = equal(id, opts.id(el));\n if (is_match) {\n match = el;\n }\n return is_match;\n },\n callback: !$.isFunction(callback) ? $.noop : function() {\n callback(match);\n }\n });\n };\n }\n \n return opts;\n },\n \n // single\n getPlaceholder: function() {\n // if a placeholder is specified on a single select without a valid placeholder option ignore it\n if (this.select) {\n if (this.getPlaceholderOption() === undefined) {\n return undefined;\n }\n }\n \n return this.parent.getPlaceholder.apply(this, arguments);\n },\n \n // single\n setPlaceholder: function () {\n var placeholder = this.getPlaceholder();\n \n if (this.isPlaceholderOptionSelected() && placeholder !== undefined) {\n \n // check for a placeholder option if attached to a select\n if (this.select && this.getPlaceholderOption() === undefined) return;\n \n this.selection.find(\".select2-chosen\").html(this.opts.escapeMarkup(placeholder));\n \n this.selection.addClass(\"select2-default\");\n \n this.container.removeClass(\"select2-allowclear\");\n }\n },\n \n // single\n postprocessResults: function (data, initial, noHighlightUpdate) {\n var selected = 0, self = this, showSearchInput = true;\n \n // find the selected element in the result list\n \n this.findHighlightableChoices().each2(function (i, elm) {\n if (equal(self.id(elm.data(\"select2-data\")), self.opts.element.val())) {\n selected = i;\n return false;\n }\n });\n \n // and highlight it\n if (noHighlightUpdate !== false) {\n if (initial === true && selected >= 0) {\n this.highlight(selected);\n } else {\n this.highlight(0);\n }\n }\n \n // hide the search box if this is the first we got the results and there are enough of them for search\n \n if (initial === true) {\n var min = this.opts.minimumResultsForSearch;\n if (min >= 0) {\n this.showSearch(countResults(data.results) >= min);\n }\n }\n },\n \n // single\n showSearch: function(showSearchInput) {\n if (this.showSearchInput === showSearchInput) return;\n \n this.showSearchInput = showSearchInput;\n \n this.dropdown.find(\".select2-search\").toggleClass(\"select2-search-hidden\", !showSearchInput);\n this.dropdown.find(\".select2-search\").toggleClass(\"select2-offscreen\", !showSearchInput);\n //add \"select2-with-searchbox\" to the container if search box is shown\n $(this.dropdown, this.container).toggleClass(\"select2-with-searchbox\", showSearchInput);\n },\n \n // single\n onSelect: function (data, options) {\n \n if (!this.triggerSelect(data)) { return; }\n \n var old = this.opts.element.val(),\n oldData = this.data();\n \n this.opts.element.val(this.id(data));\n this.updateSelection(data);\n \n this.opts.element.trigger({ type: \"select2-selected\", val: this.id(data), choice: data });\n \n this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());\n this.close();\n \n if (!options || !options.noFocus)\n this.focusser.focus();\n \n if (!equal(old, this.id(data))) { this.triggerChange({added:data,removed:oldData}); }\n },\n \n // single\n updateSelection: function (data) {\n \n var container=this.selection.find(\".select2-chosen\"), formatted, cssClass;\n \n this.selection.data(\"select2-data\", data);\n \n container.empty();\n if (data !== null) {\n formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup);\n }\n if (formatted !== undefined) {\n container.append(formatted);\n }\n cssClass=this.opts.formatSelectionCssClass(data, container);\n if (cssClass !== undefined) {\n container.addClass(cssClass);\n }\n \n this.selection.removeClass(\"select2-default\");\n \n if (this.opts.allowClear && this.getPlaceholder() !== undefined) {\n this.container.addClass(\"select2-allowclear\");\n }\n },\n \n // single\n val: function () {\n var val,\n triggerChange = false,\n data = null,\n self = this,\n oldData = this.data();\n \n if (arguments.length === 0) {\n return this.opts.element.val();\n }\n \n val = arguments[0];\n \n if (arguments.length > 1) {\n triggerChange = arguments[1];\n }\n \n if (this.select) {\n this.select\n .val(val)\n .find(\"option\").filter(function() { return this.selected }).each2(function (i, elm) {\n data = self.optionToData(elm);\n return false;\n });\n this.updateSelection(data);\n this.setPlaceholder();\n if (triggerChange) {\n this.triggerChange({added: data, removed:oldData});\n }\n } else {\n // val is an id. !val is true for [undefined,null,'',0] - 0 is legal\n if (!val && val !== 0) {\n this.clear(triggerChange);\n return;\n }\n if (this.opts.initSelection === undefined) {\n throw new Error(\"cannot call val() if initSelection() is not defined\");\n }\n this.opts.element.val(val);\n this.opts.initSelection(this.opts.element, function(data){\n self.opts.element.val(!data ? \"\" : self.id(data));\n self.updateSelection(data);\n self.setPlaceholder();\n if (triggerChange) {\n self.triggerChange({added: data, removed:oldData});\n }\n });\n }\n },\n \n // single\n clearSearch: function () {\n this.search.val(\"\");\n this.focusser.val(\"\");\n },\n \n // single\n data: function(value) {\n var data,\n triggerChange = false;\n \n if (arguments.length === 0) {\n data = this.selection.data(\"select2-data\");\n if (data == undefined) data = null;\n return data;\n } else {\n if (arguments.length > 1) {\n triggerChange = arguments[1];\n }\n if (!value) {\n this.clear(triggerChange);\n } else {\n data = this.data();\n this.opts.element.val(!value ? \"\" : this.id(value));\n this.updateSelection(value);\n if (triggerChange) {\n this.triggerChange({added: value, removed:data});\n }\n }\n }\n }\n });\n \n MultiSelect2 = clazz(AbstractSelect2, {\n \n // multi\n createContainer: function () {\n var container = $(document.createElement(\"div\")).attr({\n \"class\": \"select2-container select2-container-multi\"\n }).html([\n \"<ul class='select2-choices'>\",\n \" <li class='select2-search-field'>\",\n \" <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>\",\n \" </li>\",\n \"</ul>\",\n \"<div class='select2-drop select2-drop-multi select2-display-none'>\",\n \" <ul class='select2-results'>\",\n \" </ul>\",\n \"</div>\"].join(\"\"));\n return container;\n },\n \n // multi\n prepareOpts: function () {\n var opts = this.parent.prepareOpts.apply(this, arguments),\n self=this;\n \n // TODO validate placeholder is a string if specified\n \n if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n // install sthe selection initializer\n opts.initSelection = function (element, callback) {\n \n var data = [];\n \n element.find(\"option\").filter(function() { return this.selected }).each2(function (i, elm) {\n data.push(self.optionToData(elm));\n });\n callback(data);\n };\n } else if (\"data\" in opts) {\n // install default initSelection when applied to hidden input and data is local\n opts.initSelection = opts.initSelection || function (element, callback) {\n var ids = splitVal(element.val(), opts.separator);\n //search in data by array of ids, storing matching items in a list\n var matches = [];\n opts.query({\n matcher: function(term, text, el){\n var is_match = $.grep(ids, function(id) {\n return equal(id, opts.id(el));\n }).length;\n if (is_match) {\n matches.push(el);\n }\n return is_match;\n },\n callback: !$.isFunction(callback) ? $.noop : function() {\n // reorder matches based on the order they appear in the ids array because right now\n // they are in the order in which they appear in data array\n var ordered = [];\n for (var i = 0; i < ids.length; i++) {\n var id = ids[i];\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n if (equal(id, opts.id(match))) {\n ordered.push(match);\n matches.splice(j, 1);\n break;\n }\n }\n }\n callback(ordered);\n }\n });\n };\n }\n \n return opts;\n },\n \n // multi\n selectChoice: function (choice) {\n \n var selected = this.container.find(\".select2-search-choice-focus\");\n if (selected.length && choice && choice[0] == selected[0]) {\n \n } else {\n if (selected.length) {\n this.opts.element.trigger(\"choice-deselected\", selected);\n }\n selected.removeClass(\"select2-search-choice-focus\");\n if (choice && choice.length) {\n this.close();\n choice.addClass(\"select2-search-choice-focus\");\n this.opts.element.trigger(\"choice-selected\", choice);\n }\n }\n },\n \n // multi\n destroy: function() {\n $(\"label[for='\" + this.search.attr('id') + \"']\")\n .attr('for', this.opts.element.attr(\"id\"));\n this.parent.destroy.apply(this, arguments);\n },\n \n // multi\n initContainer: function () {\n \n var selector = \".select2-choices\", selection;\n \n this.searchContainer = this.container.find(\".select2-search-field\");\n this.selection = selection = this.container.find(selector);\n \n var _this = this;\n this.selection.on(\"click\", \".select2-search-choice:not(.select2-locked)\", function (e) {\n //killEvent(e);\n _this.search[0].focus();\n _this.selectChoice($(this));\n });\n \n // rewrite labels from original element to focusser\n this.search.attr(\"id\", \"s2id_autogen\"+nextUid());\n $(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\")\n .attr('for', this.search.attr('id'));\n \n this.search.on(\"input paste\", this.bind(function() {\n if (!this.isInterfaceEnabled()) return;\n if (!this.opened()) {\n this.open();\n }\n }));\n \n this.search.attr(\"tabindex\", this.elementTabIndex);\n \n this.keydowns = 0;\n this.search.on(\"keydown\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n \n ++this.keydowns;\n var selected = selection.find(\".select2-search-choice-focus\");\n var prev = selected.prev(\".select2-search-choice:not(.select2-locked)\");\n var next = selected.next(\".select2-search-choice:not(.select2-locked)\");\n var pos = getCursorInfo(this.search);\n \n if (selected.length &&\n (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) {\n var selectedChoice = selected;\n if (e.which == KEY.LEFT && prev.length) {\n selectedChoice = prev;\n }\n else if (e.which == KEY.RIGHT) {\n selectedChoice = next.length ? next : null;\n }\n else if (e.which === KEY.BACKSPACE) {\n this.unselect(selected.first());\n this.search.width(10);\n selectedChoice = prev.length ? prev : next;\n } else if (e.which == KEY.DELETE) {\n this.unselect(selected.first());\n this.search.width(10);\n selectedChoice = next.length ? next : null;\n } else if (e.which == KEY.ENTER) {\n selectedChoice = null;\n }\n \n this.selectChoice(selectedChoice);\n killEvent(e);\n if (!selectedChoice || !selectedChoice.length) {\n this.open();\n }\n return;\n } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1)\n || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) {\n \n this.selectChoice(selection.find(\".select2-search-choice:not(.select2-locked)\").last());\n killEvent(e);\n return;\n } else {\n this.selectChoice(null);\n }\n \n if (this.opened()) {\n switch (e.which) {\n case KEY.UP:\n case KEY.DOWN:\n this.moveHighlight((e.which === KEY.UP) ? -1 : 1);\n killEvent(e);\n return;\n case KEY.ENTER:\n this.selectHighlighted();\n killEvent(e);\n return;\n case KEY.TAB:\n this.selectHighlighted({noFocus:true});\n this.close();\n return;\n case KEY.ESC:\n this.cancel(e);\n killEvent(e);\n return;\n }\n }\n \n if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e)\n || e.which === KEY.BACKSPACE || e.which === KEY.ESC) {\n return;\n }\n \n if (e.which === KEY.ENTER) {\n if (this.opts.openOnEnter === false) {\n return;\n } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n return;\n }\n }\n \n this.open();\n \n if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {\n // prevent the page from scrolling\n killEvent(e);\n }\n \n if (e.which === KEY.ENTER) {\n // prevent form from being submitted\n killEvent(e);\n }\n \n }));\n \n this.search.on(\"keyup\", this.bind(function (e) {\n this.keydowns = 0;\n this.resizeSearch();\n })\n );\n \n this.search.on(\"blur\", this.bind(function(e) {\n this.container.removeClass(\"select2-container-active\");\n this.search.removeClass(\"select2-focused\");\n this.selectChoice(null);\n if (!this.opened()) this.clearSearch();\n e.stopImmediatePropagation();\n this.opts.element.trigger($.Event(\"select2-blur\"));\n }));\n \n this.container.on(\"click\", selector, this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n if ($(e.target).closest(\".select2-search-choice\").length > 0) {\n // clicked inside a select2 search choice, do not open\n return;\n }\n this.selectChoice(null);\n this.clearPlaceholder();\n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n this.open();\n this.focusSearch();\n e.preventDefault();\n }));\n \n this.container.on(\"focus\", selector, this.bind(function () {\n if (!this.isInterfaceEnabled()) return;\n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n this.container.addClass(\"select2-container-active\");\n this.dropdown.addClass(\"select2-drop-active\");\n this.clearPlaceholder();\n }));\n \n this.initContainerWidth();\n this.opts.element.addClass(\"select2-offscreen\");\n \n // set the placeholder if necessary\n this.clearSearch();\n },\n \n // multi\n enableInterface: function() {\n if (this.parent.enableInterface.apply(this, arguments)) {\n this.search.prop(\"disabled\", !this.isInterfaceEnabled());\n }\n },\n \n // multi\n initSelection: function () {\n var data;\n if (this.opts.element.val() === \"\" && this.opts.element.text() === \"\") {\n this.updateSelection([]);\n this.close();\n // set the placeholder if necessary\n this.clearSearch();\n }\n if (this.select || this.opts.element.val() !== \"\") {\n var self = this;\n this.opts.initSelection.call(null, this.opts.element, function(data){\n if (data !== undefined && data !== null) {\n self.updateSelection(data);\n self.close();\n // set the placeholder if necessary\n self.clearSearch();\n }\n });\n }\n },\n \n // multi\n clearSearch: function () {\n var placeholder = this.getPlaceholder(),\n maxWidth = this.getMaxSearchWidth();\n \n if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass(\"select2-focused\") === false) {\n this.search.val(placeholder).addClass(\"select2-default\");\n // stretch the search box to full width of the container so as much of the placeholder is visible as possible\n // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944\n this.search.width(maxWidth > 0 ? maxWidth : this.container.css(\"width\"));\n } else {\n this.search.val(\"\").width(10);\n }\n },\n \n // multi\n clearPlaceholder: function () {\n if (this.search.hasClass(\"select2-default\")) {\n this.search.val(\"\").removeClass(\"select2-default\");\n }\n },\n \n // multi\n opening: function () {\n this.clearPlaceholder(); // should be done before super so placeholder is not used to search\n this.resizeSearch();\n \n this.parent.opening.apply(this, arguments);\n \n this.focusSearch();\n \n this.updateResults(true);\n this.search.focus();\n this.opts.element.trigger($.Event(\"select2-open\"));\n },\n \n // multi\n close: function () {\n if (!this.opened()) return;\n this.parent.close.apply(this, arguments);\n },\n \n // multi\n focus: function () {\n this.close();\n this.search.focus();\n },\n \n // multi\n isFocused: function () {\n return this.search.hasClass(\"select2-focused\");\n },\n \n // multi\n updateSelection: function (data) {\n var ids = [], filtered = [], self = this;\n \n // filter out duplicates\n $(data).each(function () {\n if (indexOf(self.id(this), ids) < 0) {\n ids.push(self.id(this));\n filtered.push(this);\n }\n });\n data = filtered;\n \n this.selection.find(\".select2-search-choice\").remove();\n $(data).each(function () {\n self.addSelectedChoice(this);\n });\n self.postprocessResults();\n },\n \n // multi\n tokenize: function() {\n var input = this.search.val();\n input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts);\n if (input != null && input != undefined) {\n this.search.val(input);\n if (input.length > 0) {\n this.open();\n }\n }\n \n },\n \n // multi\n onSelect: function (data, options) {\n \n if (!this.triggerSelect(data)) { return; }\n \n this.addSelectedChoice(data);\n \n this.opts.element.trigger({ type: \"selected\", val: this.id(data), choice: data });\n \n if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true);\n \n if (this.opts.closeOnSelect) {\n this.close();\n this.search.width(10);\n } else {\n if (this.countSelectableResults()>0) {\n this.search.width(10);\n this.resizeSearch();\n if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) {\n // if we reached max selection size repaint the results so choices\n // are replaced with the max selection reached message\n this.updateResults(true);\n }\n this.positionDropdown();\n } else {\n // if nothing left to select close\n this.close();\n this.search.width(10);\n }\n }\n \n // since its not possible to select an element that has already been\n // added we do not need to check if this is a new element before firing change\n this.triggerChange({ added: data });\n \n if (!options || !options.noFocus)\n this.focusSearch();\n },\n \n // multi\n cancel: function () {\n this.close();\n this.focusSearch();\n },\n \n addSelectedChoice: function (data) {\n var enableChoice = !data.locked,\n enabledItem = $(\n \"<li class='select2-search-choice'>\" +\n \" <div></div>\" +\n \" <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a>\" +\n \"</li>\"),\n disabledItem = $(\n \"<li class='select2-search-choice select2-locked'>\" +\n \"<div></div>\" +\n \"</li>\");\n var choice = enableChoice ? enabledItem : disabledItem,\n id = this.id(data),\n val = this.getVal(),\n formatted,\n cssClass;\n \n formatted=this.opts.formatSelection(data, choice.find(\"div\"), this.opts.escapeMarkup);\n if (formatted != undefined) {\n choice.find(\"div\").replaceWith(\"<div>\"+formatted+\"</div>\");\n }\n cssClass=this.opts.formatSelectionCssClass(data, choice.find(\"div\"));\n if (cssClass != undefined) {\n choice.addClass(cssClass);\n }\n \n if(enableChoice){\n choice.find(\".select2-search-choice-close\")\n .on(\"mousedown\", killEvent)\n .on(\"click dblclick\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n \n $(e.target).closest(\".select2-search-choice\").fadeOut('fast', this.bind(function(){\n this.unselect($(e.target));\n this.selection.find(\".select2-search-choice-focus\").removeClass(\"select2-search-choice-focus\");\n this.close();\n this.focusSearch();\n })).dequeue();\n killEvent(e);\n })).on(\"focus\", this.bind(function () {\n if (!this.isInterfaceEnabled()) return;\n this.container.addClass(\"select2-container-active\");\n this.dropdown.addClass(\"select2-drop-active\");\n }));\n }\n \n choice.data(\"select2-data\", data);\n choice.insertBefore(this.searchContainer);\n \n val.push(id);\n this.setVal(val);\n },\n \n // multi\n unselect: function (selected) {\n var val = this.getVal(),\n data,\n index;\n selected = selected.closest(\".select2-search-choice\");\n \n if (selected.length === 0) {\n throw \"Invalid argument: \" + selected + \". Must be .select2-search-choice\";\n }\n \n data = selected.data(\"select2-data\");\n \n if (!data) {\n // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued\n // and invoked on an element already removed\n return;\n }\n \n while((index = indexOf(this.id(data), val)) >= 0) {\n val.splice(index, 1);\n this.setVal(val);\n if (this.select) this.postprocessResults();\n }\n \n var evt = $.Event(\"select2-removing\");\n evt.val = this.id(data);\n evt.choice = data;\n this.opts.element.trigger(evt);\n \n if (evt.isDefaultPrevented()) {\n return;\n }\n \n selected.remove();\n \n this.opts.element.trigger({ type: \"select2-removed\", val: this.id(data), choice: data });\n this.triggerChange({ removed: data });\n },\n \n // multi\n postprocessResults: function (data, initial, noHighlightUpdate) {\n var val = this.getVal(),\n choices = this.results.find(\".select2-result\"),\n compound = this.results.find(\".select2-result-with-children\"),\n self = this;\n \n choices.each2(function (i, choice) {\n var id = self.id(choice.data(\"select2-data\"));\n if (indexOf(id, val) >= 0) {\n choice.addClass(\"select2-selected\");\n // mark all children of the selected parent as selected\n choice.find(\".select2-result-selectable\").addClass(\"select2-selected\");\n }\n });\n \n compound.each2(function(i, choice) {\n // hide an optgroup if it doesnt have any selectable children\n if (!choice.is('.select2-result-selectable')\n && choice.find(\".select2-result-selectable:not(.select2-selected)\").length === 0) {\n choice.addClass(\"select2-selected\");\n }\n });\n \n if (this.highlight() == -1 && noHighlightUpdate !== false){\n self.highlight(0);\n }\n \n //If all results are chosen render formatNoMAtches\n if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){\n if(!data || data && !data.more && this.results.find(\".select2-no-results\").length === 0) {\n if (checkFormatter(self.opts.formatNoMatches, \"formatNoMatches\")) {\n this.results.append(\"<li class='select2-no-results'>\" + self.opts.formatNoMatches(self.search.val()) + \"</li>\");\n }\n }\n }\n \n },\n \n // multi\n getMaxSearchWidth: function() {\n return this.selection.width() - getSideBorderPadding(this.search);\n },\n \n // multi\n resizeSearch: function () {\n var minimumWidth, left, maxWidth, containerLeft, searchWidth,\n sideBorderPadding = getSideBorderPadding(this.search);\n \n minimumWidth = measureTextWidth(this.search) + 10;\n \n left = this.search.offset().left;\n \n maxWidth = this.selection.width();\n containerLeft = this.selection.offset().left;\n \n searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;\n \n if (searchWidth < minimumWidth) {\n searchWidth = maxWidth - sideBorderPadding;\n }\n \n if (searchWidth < 40) {\n searchWidth = maxWidth - sideBorderPadding;\n }\n \n if (searchWidth <= 0) {\n searchWidth = minimumWidth;\n }\n \n this.search.width(Math.floor(searchWidth));\n },\n \n // multi\n getVal: function () {\n var val;\n if (this.select) {\n val = this.select.val();\n return val === null ? [] : val;\n } else {\n val = this.opts.element.val();\n return splitVal(val, this.opts.separator);\n }\n },\n \n // multi\n setVal: function (val) {\n var unique;\n if (this.select) {\n this.select.val(val);\n } else {\n unique = [];\n // filter out duplicates\n $(val).each(function () {\n if (indexOf(this, unique) < 0) unique.push(this);\n });\n this.opts.element.val(unique.length === 0 ? \"\" : unique.join(this.opts.separator));\n }\n },\n \n // multi\n buildChangeDetails: function (old, current) {\n var current = current.slice(0),\n old = old.slice(0);\n \n // remove intersection from each array\n for (var i = 0; i < current.length; i++) {\n for (var j = 0; j < old.length; j++) {\n if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) {\n current.splice(i, 1);\n if(i>0){\n i--;\n }\n old.splice(j, 1);\n j--;\n }\n }\n }\n \n return {added: current, removed: old};\n },\n \n \n // multi\n val: function (val, triggerChange) {\n var oldData, self=this;\n \n if (arguments.length === 0) {\n return this.getVal();\n }\n \n oldData=this.data();\n if (!oldData.length) oldData=[];\n \n // val is an id. !val is true for [undefined,null,'',0] - 0 is legal\n if (!val && val !== 0) {\n this.opts.element.val(\"\");\n this.updateSelection([]);\n this.clearSearch();\n if (triggerChange) {\n this.triggerChange({added: this.data(), removed: oldData});\n }\n return;\n }\n \n // val is a list of ids\n this.setVal(val);\n \n if (this.select) {\n this.opts.initSelection(this.select, this.bind(this.updateSelection));\n if (triggerChange) {\n this.triggerChange(this.buildChangeDetails(oldData, this.data()));\n }\n } else {\n if (this.opts.initSelection === undefined) {\n throw new Error(\"val() cannot be called if initSelection() is not defined\");\n }\n \n this.opts.initSelection(this.opts.element, function(data){\n var ids=$.map(data, self.id);\n self.setVal(ids);\n self.updateSelection(data);\n self.clearSearch();\n if (triggerChange) {\n self.triggerChange(self.buildChangeDetails(oldData, self.data()));\n }\n });\n }\n this.clearSearch();\n },\n \n // multi\n onSortStart: function() {\n if (this.select) {\n throw new Error(\"Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.\");\n }\n \n // collapse search field into 0 width so its container can be collapsed as well\n this.search.width(0);\n // hide the container\n this.searchContainer.hide();\n },\n \n // multi\n onSortEnd:function() {\n \n var val=[], self=this;\n \n // show search and move it to the end of the list\n this.searchContainer.show();\n // make sure the search container is the last item in the list\n this.searchContainer.appendTo(this.searchContainer.parent());\n // since we collapsed the width in dragStarted, we resize it here\n this.resizeSearch();\n \n // update selection\n this.selection.find(\".select2-search-choice\").each(function() {\n val.push(self.opts.id($(this).data(\"select2-data\")));\n });\n this.setVal(val);\n this.triggerChange();\n },\n \n // multi\n data: function(values, triggerChange) {\n var self=this, ids, old;\n if (arguments.length === 0) {\n return this.selection\n .find(\".select2-search-choice\")\n .map(function() { return $(this).data(\"select2-data\"); })\n .get();\n } else {\n old = this.data();\n if (!values) { values = []; }\n ids = $.map(values, function(e) { return self.opts.id(e); });\n this.setVal(ids);\n this.updateSelection(values);\n this.clearSearch();\n if (triggerChange) {\n this.triggerChange(this.buildChangeDetails(old, this.data()));\n }\n }\n }\n });\n \n $.fn.select2 = function () {\n \n var args = Array.prototype.slice.call(arguments, 0),\n opts,\n select2,\n method, value, multiple,\n allowedMethods = [\"val\", \"destroy\", \"opened\", \"open\", \"close\", \"focus\", \"isFocused\", \"container\", \"dropdown\", \"onSortStart\", \"onSortEnd\", \"enable\", \"disable\", \"readonly\", \"positionDropdown\", \"data\", \"search\"],\n valueMethods = [\"opened\", \"isFocused\", \"container\", \"dropdown\"],\n propertyMethods = [\"val\", \"data\"],\n methodsMap = { search: \"externalSearch\" };\n \n this.each(function () {\n if (args.length === 0 || typeof(args[0]) === \"object\") {\n opts = args.length === 0 ? {} : $.extend({}, args[0]);\n opts.element = $(this);\n \n if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n multiple = opts.element.prop(\"multiple\");\n } else {\n multiple = opts.multiple || false;\n if (\"tags\" in opts) {opts.multiple = multiple = true;}\n }\n \n select2 = multiple ? new MultiSelect2() : new SingleSelect2();\n select2.init(opts);\n } else if (typeof(args[0]) === \"string\") {\n \n if (indexOf(args[0], allowedMethods) < 0) {\n throw \"Unknown method: \" + args[0];\n }\n \n value = undefined;\n select2 = $(this).data(\"select2\");\n if (select2 === undefined) return;\n \n method=args[0];\n \n if (method === \"container\") {\n value = select2.container;\n } else if (method === \"dropdown\") {\n value = select2.dropdown;\n } else {\n if (methodsMap[method]) method = methodsMap[method];\n \n value = select2[method].apply(select2, args.slice(1));\n }\n if (indexOf(args[0], valueMethods) >= 0\n || (indexOf(args[0], propertyMethods) && args.length == 1)) {\n return false; // abort the iteration, ready to return first matched value\n }\n } else {\n throw \"Invalid arguments to select2 plugin: \" + args;\n }\n });\n return (value === undefined) ? this : value;\n };\n \n // plugin defaults, accessible to users\n $.fn.select2.defaults = {\n width: \"copy\",\n loadMorePadding: 0,\n closeOnSelect: true,\n openOnEnter: true,\n containerCss: {},\n dropdownCss: {},\n containerCssClass: \"\",\n dropdownCssClass: \"\",\n formatResult: function(result, container, query, escapeMarkup) {\n var markup=[];\n markMatch(result.text, query.term, markup, escapeMarkup);\n return markup.join(\"\");\n },\n formatSelection: function (data, container, escapeMarkup) {\n return data ? escapeMarkup(data.text) : undefined;\n },\n sortResults: function (results, container, query) {\n return results;\n },\n formatResultCssClass: function(data) {return undefined;},\n formatSelectionCssClass: function(data, container) {return undefined;},\n formatNoMatches: function () { return \"No matches found\"; },\n formatInputTooShort: function (input, min) { var n = min - input.length; return \"Please enter \" + n + \" more character\" + (n == 1? \"\" : \"s\"); },\n formatInputTooLong: function (input, max) { var n = input.length - max; return \"Please delete \" + n + \" character\" + (n == 1? \"\" : \"s\"); },\n formatSelectionTooBig: function (limit) { return \"You can only select \" + limit + \" item\" + (limit == 1 ? \"\" : \"s\"); },\n formatLoadMore: function (pageNumber) { return \"Loading more results...\"; },\n formatSearching: function () { return \"Searching...\"; },\n minimumResultsForSearch: 0,\n minimumInputLength: 0,\n maximumInputLength: null,\n maximumSelectionSize: 0,\n id: function (e) { return e.id; },\n matcher: function(term, text) {\n return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >= 0;\n },\n separator: \",\",\n tokenSeparators: [],\n tokenizer: defaultTokenizer,\n escapeMarkup: defaultEscapeMarkup,\n blurOnChange: false,\n selectOnBlur: false,\n adaptContainerCssClass: function(c) { return c; },\n adaptDropdownCssClass: function(c) { return null; },\n nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; }\n };\n \n $.fn.select2.ajaxDefaults = {\n transport: $.ajax,\n params: {\n type: \"GET\",\n cache: false,\n dataType: \"json\"\n }\n };\n \n // exports\n window.Select2 = {\n query: {\n ajax: ajax,\n local: local,\n tags: tags\n }, util: {\n debounce: debounce,\n markMatch: markMatch,\n escapeMarkup: defaultEscapeMarkup,\n stripDiacritics: stripDiacritics\n }, \"class\": {\n \"abstract\": AbstractSelect2,\n \"single\": SingleSelect2,\n \"multi\": MultiSelect2\n }\n };\n \n }(jQuery));\n \n \n return module.exports;\n}).call(this);\n// src/js/aui/select2.js\n(typeof window === 'undefined' ? global : window).__51fb4aac01a40562c0d0d0767cafdf66 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __7492747913568b3ee996b7d99354f7ed;\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n /**\n * Wraps a vanilla Select2 with ADG _style_, as an auiSelect2 method on jQuery objects.\n *\n * @since 5.2\n */\n \n /**\n * We make a copy of the original select2 so that later we might re-specify $.fn.auiSelect2 as $.fn.select2. That\n * way, calling code will be able to call $thing.select2() as if they were calling the original library,\n * and ADG styling will just magically happen.\n */\n var originalSelect2 = _jquery2.default.fn.select2;\n \n // AUI-specific classes\n var auiContainer = 'aui-select2-container';\n var auiDropdown = 'aui-select2-drop aui-dropdown2 aui-style-default';\n var auiHasAvatar = 'aui-has-avatar';\n \n _jquery2.default.fn.auiSelect2 = function (first) {\n var updatedArgs;\n \n if (_jquery2.default.isPlainObject(first)) {\n var auiOpts = _jquery2.default.extend({}, first);\n var auiAvatarClass = auiOpts.hasAvatar ? ' ' + auiHasAvatar : '';\n //add our classes in addition to those the caller specified\n auiOpts.containerCssClass = auiContainer + auiAvatarClass + (auiOpts.containerCssClass ? ' ' + auiOpts.containerCssClass : '');\n auiOpts.dropdownCssClass = auiDropdown + auiAvatarClass + (auiOpts.dropdownCssClass ? ' ' + auiOpts.dropdownCssClass : '');\n updatedArgs = Array.prototype.slice.call(arguments, 1);\n updatedArgs.unshift(auiOpts);\n } else if (!arguments.length) {\n updatedArgs = [{\n containerCssClass: auiContainer,\n dropdownCssClass: auiDropdown\n }];\n } else {\n updatedArgs = arguments;\n }\n \n return originalSelect2.apply(this, updatedArgs);\n };\n \n return module.exports;\n}).call(this);\n// src/js-vendor/raf/raf.js\n(typeof window === 'undefined' ? global : window).__2f5a98423fd9aed894b87fadde70ccc7 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n /*\n * raf.js\n * https://github.com/ngryman/raf.js\n *\n * original requestAnimationFrame polyfill by Erik Möller\n * inspired from paul_irish gist and post\n *\n * Copyright (c) 2013 ngryman\n * Licensed under the MIT license.\n */\n \n (function(window) {\n \tvar lastTime = 0,\n \t\tvendors = ['webkit', 'moz'],\n \t\trequestAnimationFrame = window.requestAnimationFrame,\n \t\tcancelAnimationFrame = window.cancelAnimationFrame,\n \t\ti = vendors.length;\n \n \t// try to un-prefix existing raf\n \twhile (--i >= 0 && !requestAnimationFrame) {\n \t\trequestAnimationFrame = window[vendors[i] + 'RequestAnimationFrame'];\n \t\tcancelAnimationFrame = window[vendors[i] + 'CancelAnimationFrame'];\n \t}\n \n \t// polyfill with setTimeout fallback\n \t// heavily inspired from @darius gist mod: https://gist.github.com/paulirish/1579671#comment-837945\n \tif (!requestAnimationFrame || !cancelAnimationFrame) {\n \t\trequestAnimationFrame = function(callback) {\n \t\t\tvar now = Date.now(), nextTime = Math.max(lastTime + 16, now);\n \t\t\treturn setTimeout(function() {\n \t\t\t\tcallback(lastTime = nextTime);\n \t\t\t}, nextTime - now);\n \t\t};\n \n \t\tcancelAnimationFrame = clearTimeout;\n \t}\n \n \t// export to window\n \twindow.requestAnimationFrame = requestAnimationFrame;\n \twindow.cancelAnimationFrame = cancelAnimationFrame;\n }(window));\n \n return module.exports;\n}).call(this);\n// src/js/aui/internal/has-touch.js\n(typeof window === 'undefined' ? global : window).__ab0cb0d0db81c197057806678ff286d2 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n var DocumentTouch = window.DocumentTouch;\n var hasTouch = 'ontouchstart' in window || DocumentTouch && document instanceof DocumentTouch;\n exports.default = hasTouch;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/internal/is-input.js\n(typeof window === 'undefined' ? global : window).__8ff1a5126874ae997e949c3bfc2bd70d = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n exports.default = function (el) {\n return 'value' in el || el.isContentEditable;\n };\n \n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/internal/mediaQuery.js\n(typeof window === 'undefined' ? global : window).__5983f091862eda4fcb8c198d71ed52eb = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n /**\n * Inspired by matchMedia() polyfill\n * https://github.com/paulirish/matchMedia.js/blob/953faa1489284655ed9d6e03bf48d39df70612c4/matchMedia.js\n */\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.default = mediaQuery;\n function mediaQuery(mq) {\n if (window.matchMedia) {\n return window.matchMedia(mq).matches;\n }\n \n // fallback support for <=IE9 (remove this code if we don't want to support IE9 anymore)\n var style = document.createElement('style');\n style.type = 'text/css';\n style.id = 'testMedia';\n style.innerText = '@media ' + mq + ' { #testMedia { width: 1px; } }';\n document.head.appendChild(style);\n var info = window.getComputedStyle(style, null);\n var testMediaQuery = info.width === '1px';\n style.parentNode.removeChild(style);\n return testMediaQuery;\n };\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/sidebar.js\n(typeof window === 'undefined' ? global : window).__e01367eebdfe37c1d4b306c91a5d969c = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __6492faf4ee244aaf97c0784c457d08ae;\n \n __2f5a98423fd9aed894b87fadde70ccc7;\n \n __2a8f02ddf948a2241e4b1ac8618d2015;\n \n var _deprecation = __2283e259423cbf11e76a3bf5e9e47933;\n \n var deprecate = _interopRequireWildcard(_deprecation);\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n var _hasTouch = __ab0cb0d0db81c197057806678ff286d2;\n \n var _hasTouch2 = _interopRequireDefault(_hasTouch);\n \n var _isInput = __8ff1a5126874ae997e949c3bfc2bd70d;\n \n var _isInput2 = _interopRequireDefault(_isInput);\n \n var _mediaQuery = __5983f091862eda4fcb8c198d71ed52eb;\n \n var _mediaQuery2 = _interopRequireDefault(_mediaQuery);\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n var _uniqueId = __5a7881cf02ab93624b2d44b3514c2d6a;\n \n var _uniqueId2 = _interopRequireDefault(_uniqueId);\n \n var _widget = __3c371c7383bcae3d89fbc3cf8cbdc2ff;\n \n var _widget2 = _interopRequireDefault(_widget);\n \n function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var SUPPORTS_TRANSITIONS = typeof document.documentElement.style.transition !== 'undefined' || typeof document.documentElement.style.webkitTransition !== 'undefined';\n \n function sidebarOffset(sidebar) {\n return sidebar.offset().top;\n }\n \n function Sidebar(selector) {\n this.$el = (0, _jquery2.default)(selector);\n if (!this.$el.length) {\n return;\n }\n this.$body = (0, _jquery2.default)('body');\n this.$wrapper = this.$el.children('.aui-sidebar-wrapper');\n \n // Sidebar users should add class=\"aui-page-sidebar\" to the\n // <body> in the rendered markup (to prevent any potential flicker),\n // so we add it just in case they forgot.\n this.$body.addClass('aui-page-sidebar');\n \n this._previousScrollTop = null;\n this._previousViewportHeight = null;\n this._previousViewportWidth = null;\n this._previousOffsetTop = null;\n \n this.submenus = new SubmenuManager();\n \n initializeHandlers(this);\n constructAllSubmenus(this);\n }\n \n var FORCE_COLLAPSE_WIDTH = 1240;\n var EVENT_PREFIX = '_aui-internal-sidebar-';\n \n function namespaceEvents(events) {\n return _jquery2.default.map(events.split(' '), function (event) {\n return EVENT_PREFIX + event;\n }).join(' ');\n }\n \n Sidebar.prototype.on = function () {\n var events = arguments[0];\n var args = Array.prototype.slice.call(arguments, 1);\n var namespacedEvents = namespaceEvents(events);\n this.$el.on.apply(this.$el, [namespacedEvents].concat(args));\n return this;\n };\n \n Sidebar.prototype.off = function () {\n var events = arguments[0];\n var args = Array.prototype.slice.call(arguments, 1);\n var namespacedEvents = namespaceEvents(events);\n this.$el.off.apply(this.$el, [namespacedEvents].concat(args));\n return this;\n };\n \n Sidebar.prototype.setHeight = function (scrollTop, viewportHeight, headerHeight) {\n var visibleHeaderHeight = Math.max(0, headerHeight - scrollTop);\n this.$wrapper.height(viewportHeight - visibleHeaderHeight);\n return this;\n };\n \n Sidebar.prototype.setPosition = function (scrollTop) {\n scrollTop = scrollTop || window.pageYOffset;\n this.$wrapper.toggleClass('aui-is-docked', scrollTop > sidebarOffset(this.$el));\n return this;\n };\n \n Sidebar.prototype.setCollapsedState = function (viewportWidth) {\n // Reflow behaviour is implemented as a state machine (hence all\n // state transitions are enumerated). The rest of the state machine,\n // e.g., entering the expanded narrow (fly-out) state, is implemented\n // by the toggle() method.\n var transition = { collapsed: {}, expanded: {} };\n transition.collapsed.narrow = {\n narrow: _jquery2.default.noop,\n wide: function wide(s) {\n s._expand(viewportWidth, true);\n }\n };\n transition.collapsed.wide = {\n narrow: _jquery2.default.noop, // Becomes collapsed narrow (no visual change).\n wide: _jquery2.default.noop\n };\n transition.expanded.narrow = {\n narrow: _jquery2.default.noop,\n wide: function wide(s) {\n s.$body.removeClass('aui-sidebar-collapsed');\n s.$el.removeClass('aui-sidebar-fly-out');\n }\n };\n transition.expanded.wide = {\n narrow: function narrow(s) {\n s._collapse(true);\n },\n wide: _jquery2.default.noop\n };\n \n var collapseState = this.isCollapsed() ? 'collapsed' : 'expanded';\n var oldSize = this.isViewportNarrow(this._previousViewportWidth) ? 'narrow' : 'wide';\n var newSize = this.isViewportNarrow(viewportWidth) ? 'narrow' : 'wide';\n transition[collapseState][oldSize][newSize](this);\n return this;\n };\n \n Sidebar.prototype._collapse = function (isResponsive) {\n if (this.isCollapsed()) {\n return this;\n }\n \n var startEvent = _jquery2.default.Event(EVENT_PREFIX + 'collapse-start', { isResponsive: isResponsive });\n this.$el.trigger(startEvent);\n if (startEvent.isDefaultPrevented()) {\n return this;\n }\n \n this.$body.addClass('aui-sidebar-collapsed');\n this.$el.attr('aria-expanded', 'false');\n this.$el.removeClass('aui-sidebar-fly-out');\n this.$el.find(this.submenuTriggersSelector).attr('tabindex', 0);\n (0, _jquery2.default)(this.inlineDialogSelector).attr('responds-to', 'hover');\n \n if (!this.isAnimated()) {\n this.$el.trigger(_jquery2.default.Event(EVENT_PREFIX + 'collapse-end', { isResponsive: isResponsive }));\n }\n return this;\n };\n \n Sidebar.prototype.collapse = function () {\n return this._collapse(false);\n };\n \n Sidebar.prototype._expand = function (viewportWidth, isResponsive) {\n var startEvent = _jquery2.default.Event(EVENT_PREFIX + 'expand-start', { isResponsive: isResponsive });\n this.$el.trigger(startEvent);\n if (startEvent.isDefaultPrevented()) {\n return this;\n }\n \n var isViewportNarrow = this.isViewportNarrow(viewportWidth);\n this.$el.attr('aria-expanded', 'true');\n this.$body.toggleClass('aui-sidebar-collapsed', isViewportNarrow);\n this.$el.toggleClass('aui-sidebar-fly-out', isViewportNarrow);\n this.$el.find(this.submenuTriggersSelector).removeAttr('tabindex');\n (0, _jquery2.default)(this.inlineDialogSelector).removeAttr('responds-to');\n \n if (!this.isAnimated()) {\n this.$el.trigger(_jquery2.default.Event(EVENT_PREFIX + 'expand-end', { isResponsive: isResponsive }));\n }\n return this;\n };\n \n Sidebar.prototype.expand = function () {\n if (this.isCollapsed()) {\n this._expand(this._previousViewportWidth, false);\n }\n return this;\n };\n \n Sidebar.prototype.isAnimated = function () {\n return SUPPORTS_TRANSITIONS && this.$el.hasClass('aui-is-animated');\n };\n \n Sidebar.prototype.isCollapsed = function () {\n return this.$el.attr('aria-expanded') === 'false';\n };\n \n Sidebar.prototype.isViewportNarrow = function (viewportWidth) {\n viewportWidth = viewportWidth === undefined ? this._previousViewportWidth : viewportWidth;\n return viewportWidth < FORCE_COLLAPSE_WIDTH;\n };\n \n Sidebar.prototype._removeAllTooltips = function () {\n // tooltips are orphaned when sidebar is expanded, so if there are any visible on the page we remove them all.\n // Can't scope it to the Sidebar (this) because the tooltip div is a direct child of <body>\n (0, _jquery2.default)(this.tooltipSelector).remove();\n };\n \n Sidebar.prototype.responsiveReflow = function responsiveReflow(isInitialPageLoad, viewportWidth) {\n if (isInitialPageLoad) {\n if (!this.isCollapsed() && this.isViewportNarrow(viewportWidth)) {\n var isAnimated = this.isAnimated();\n if (isAnimated) {\n this.$el.removeClass('aui-is-animated');\n }\n // This will trigger the \"collapse\" event before non-sidebar\n // JS code has a chance to bind listeners; they'll need to\n // check isCollapsed() if they care about the value at that\n // time.\n this.collapse();\n if (isAnimated) {\n // We must trigger a CSS reflow (by accessing\n // offsetHeight) otherwise the transition still runs.\n // jshint expr:true\n this.$el[0].offsetHeight;\n this.$el.addClass('aui-is-animated');\n }\n }\n } else if (viewportWidth !== this._previousViewportWidth) {\n this.setCollapsedState(viewportWidth);\n }\n };\n \n Sidebar.prototype.reflow = function reflow(scrollTop, viewportHeight, viewportWidth, scrollHeight) {\n scrollTop = scrollTop === undefined ? window.pageYOffset : scrollTop;\n viewportHeight = viewportHeight === undefined ? document.documentElement.clientHeight : viewportHeight;\n scrollHeight = scrollHeight === undefined ? document.documentElement.scrollHeight : scrollHeight;\n viewportWidth = viewportWidth === undefined ? window.innerWidth : viewportWidth;\n \n // Header height needs to be checked because in Stash it changes when the CSS \"transform: translate3d\" is changed.\n // If you called reflow() after this change then nothing happened because the scrollTop and viewportHeight hadn't changed.\n var offsetTop = sidebarOffset(this.$el);\n var isInitialPageLoad = this._previousViewportWidth === null;\n \n if (!(scrollTop === this._previousScrollTop && viewportHeight === this._previousViewportHeight && offsetTop === this._previousOffsetTop)) {\n if (this.isCollapsed() && !isInitialPageLoad && scrollTop !== this._previousScrollTop) {\n // hide submenu and tooltips on scroll\n hideAllSubmenus();\n this._removeAllTooltips();\n }\n \n var isTouch = this.$body.hasClass('aui-page-sidebar-touch');\n var isTrackpadBounce = scrollTop !== this._previousScrollTop && (scrollTop < 0 || scrollTop + viewportHeight > scrollHeight);\n if (!isTouch && (isInitialPageLoad || !isTrackpadBounce)) {\n this.setHeight(scrollTop, viewportHeight, offsetTop);\n this.setPosition(scrollTop);\n }\n }\n \n var isResponsive = this.$el.attr('data-aui-responsive') !== 'false';\n if (isResponsive) {\n this.responsiveReflow(isInitialPageLoad, viewportWidth);\n } else {\n var isFlyOut = !this.isCollapsed() && this.isViewportNarrow(viewportWidth);\n this.$el.toggleClass('aui-sidebar-fly-out', isFlyOut);\n }\n \n this._previousScrollTop = scrollTop;\n this._previousViewportHeight = viewportHeight;\n this._previousViewportWidth = viewportWidth;\n this._previousOffsetTop = offsetTop;\n return this;\n };\n \n Sidebar.prototype.toggle = function () {\n if (this.isCollapsed()) {\n this.expand();\n this._removeAllTooltips();\n } else {\n this.collapse();\n }\n return this;\n };\n \n /**\n * Returns a jQuery selector string for the trigger elements when the\n * sidebar is in a collapsed state, useful for delegated event binding.\n *\n * When using this selector in event handlers, the element (\"this\") will\n * either be an <a> (when the trigger was a tier-one menu item) or an\n * element with class \"aui-sidebar-group\" (for non-tier-one items).\n *\n * For delegated event binding you should bind to $el and check the value\n * of isCollapsed(), e.g.,\n *\n * sidebar.$el.on('click', sidebar.collapsedTriggersSelector, function (e) {\n * if (!sidebar.isCollapsed()) {\n * return;\n * }\n * });\n *\n * @returns string\n */\n Sidebar.prototype.submenuTriggersSelector = '.aui-sidebar-group:not(.aui-sidebar-group-tier-one)';\n \n Sidebar.prototype.collapsedTriggersSelector = [Sidebar.prototype.submenuTriggersSelector, '.aui-sidebar-group.aui-sidebar-group-tier-one > .aui-nav > li > a', '.aui-sidebar-footer > .aui-sidebar-settings-button'].join(', ');\n \n Sidebar.prototype.toggleSelector = '.aui-sidebar-footer > .aui-sidebar-toggle';\n \n Sidebar.prototype.tooltipSelector = '.aui-sidebar-section-tooltip';\n \n Sidebar.prototype.inlineDialogClass = 'aui-sidebar-submenu-dialog';\n Sidebar.prototype.inlineDialogSelector = '.' + Sidebar.prototype.inlineDialogClass;\n \n function getAllSubmenuDialogs() {\n return document.querySelectorAll(Sidebar.prototype.inlineDialogSelector);\n }\n \n function SubmenuManager() {\n this.inlineDialog = null;\n }\n \n SubmenuManager.prototype.submenu = function ($trigger) {\n sidebarSubmenuDeprecationLogger();\n return getSubmenu($trigger);\n };\n \n SubmenuManager.prototype.hasSubmenu = function ($trigger) {\n sidebarSubmenuDeprecationLogger();\n return hasSubmenu($trigger);\n };\n \n SubmenuManager.prototype.submenuHeadingHeight = function () {\n sidebarSubmenuDeprecationLogger();\n return 34;\n };\n \n SubmenuManager.prototype.isShowing = function () {\n sidebarSubmenuDeprecationLogger();\n return Sidebar.prototype.isSubmenuVisible();\n };\n \n SubmenuManager.prototype.show = function (e, trigger) {\n sidebarSubmenuDeprecationLogger();\n showSubmenu(trigger);\n };\n \n SubmenuManager.prototype.hide = function () {\n sidebarSubmenuDeprecationLogger();\n hideAllSubmenus();\n };\n \n SubmenuManager.prototype.inlineDialogShowHandler = function () {\n sidebarSubmenuDeprecationLogger();\n };\n SubmenuManager.prototype.inlineDialogHideHandler = function () {\n sidebarSubmenuDeprecationLogger();\n };\n SubmenuManager.prototype.moveSubmenuToInlineDialog = function () {\n sidebarSubmenuDeprecationLogger();\n };\n SubmenuManager.prototype.restoreSubmenu = function () {\n sidebarSubmenuDeprecationLogger();\n };\n \n Sidebar.prototype.getVisibleSubmenus = function () {\n return Array.prototype.filter.call(getAllSubmenuDialogs(), function (inlineDialog2) {\n return inlineDialog2.open;\n });\n };\n \n Sidebar.prototype.isSubmenuVisible = function () {\n return this.getVisibleSubmenus().length > 0;\n };\n \n function getSubmenu($trigger) {\n return $trigger.is('a') ? $trigger.next('.aui-nav') : $trigger.children('.aui-nav, hr');\n }\n \n function getSubmenuInlineDialog(trigger) {\n var inlineDialogId = trigger.getAttribute('aria-controls');\n return document.getElementById(inlineDialogId);\n }\n \n function hasSubmenu($trigger) {\n return getSubmenu($trigger).length !== 0;\n }\n \n function hideAllSubmenus() {\n var allSubmenuDialogs = getAllSubmenuDialogs();\n Array.prototype.forEach.call(allSubmenuDialogs, function (inlineDialog2) {\n inlineDialog2.open = false;\n });\n }\n \n function showSubmenu(trigger) {\n getSubmenuInlineDialog(trigger).open = true;\n }\n \n function constructSubmenu(sidebar, $trigger) {\n if ($trigger.data('_aui-sidebar-submenu-constructed')) {\n return;\n } else {\n $trigger.data('_aui-sidebar-submenu-constructed', true);\n }\n \n if (!hasSubmenu($trigger)) {\n return;\n }\n \n var submenuInlineDialog = document.createElement('aui-inline-dialog');\n \n var uniqueId = (0, _uniqueId2.default)('sidebar-submenu');\n \n $trigger.attr('aria-controls', uniqueId);\n $trigger.attr('data-aui-trigger', '');\n _skate2.default.init($trigger); //Trigger doesn't listen to attribute modification\n \n submenuInlineDialog.setAttribute('id', uniqueId);\n submenuInlineDialog.setAttribute('alignment', 'right top');\n submenuInlineDialog.setAttribute('aria-hidden', 'true');\n if (sidebar.isCollapsed()) {\n submenuInlineDialog.setAttribute('responds-to', 'hover');\n }\n \n (0, _jquery2.default)(submenuInlineDialog).addClass(Sidebar.prototype.inlineDialogClass);\n \n document.body.appendChild(submenuInlineDialog);\n _skate2.default.init(submenuInlineDialog); //Needed so that sidebar.submenus.isShowing() will work on page load\n \n addHandlersToSubmenuInlineDialog(sidebar, $trigger, submenuInlineDialog);\n \n return submenuInlineDialog;\n }\n \n function addHandlersToSubmenuInlineDialog(sidebar, $trigger, submenuInlineDialog) {\n submenuInlineDialog.addEventListener('aui-layer-show', function (e) {\n if (!sidebar.isCollapsed()) {\n e.preventDefault();\n return;\n }\n inlineDialogShowHandler($trigger, submenuInlineDialog);\n });\n \n submenuInlineDialog.addEventListener('aui-layer-hide', function () {\n inlineDialogHideHandler($trigger);\n });\n }\n \n function inlineDialogShowHandler($trigger, submenuInlineDialog) {\n $trigger.addClass('active');\n submenuInlineDialog.innerHTML = SUBMENU_INLINE_DIALOG_CONTENTS_HTML;\n var title = $trigger.is('a') ? $trigger.text() : $trigger.children('.aui-nav-heading').text();\n \n var $container = (0, _jquery2.default)(submenuInlineDialog).find('.aui-navgroup-inner');\n $container.children('.aui-nav-heading').attr('title', title).children('strong').text(title);\n \n var $submenu = getSubmenu($trigger);\n cloneExpander($submenu).appendTo($container);\n \n /**\n * Workaround to show all contents in the expander.\n * This function should come from the expander component.\n */\n function cloneExpander(element) {\n var $clone = AJS.clone(element);\n if ($clone.hasClass('aui-expander-content')) {\n $clone.find('.aui-expander-cutoff').remove();\n $clone.removeClass('aui-expander-content');\n }\n return $clone;\n }\n }\n \n var SUBMENU_INLINE_DIALOG_CONTENTS_HTML = '<div class=\"aui-inline-dialog-contents\">' + '<div class=\"aui-sidebar-submenu\" >' + '<div class=\"aui-navgroup aui-navgroup-vertical\">' + '<div class=\"aui-navgroup-inner\">' + '<div class=\"aui-nav-heading\"><strong></strong></div>' + '</div>' + '</div>' + '</div>' + '</div>';\n \n function inlineDialogHideHandler($trigger) {\n $trigger.removeClass('active');\n }\n \n function constructAllSubmenus(sidebar) {\n (0, _jquery2.default)(sidebar.collapsedTriggersSelector).each(function () {\n var $trigger = (0, _jquery2.default)(this);\n constructSubmenu(sidebar, $trigger);\n });\n }\n \n var tipsyOpts = {\n trigger: 'manual',\n gravity: 'w',\n className: 'aui-sidebar-section-tooltip',\n title: function title() {\n var $item = (0, _jquery2.default)(this);\n if ($item.is('a')) {\n return $item.attr('title') || $item.find('.aui-nav-item-label').text() || $item.data('tooltip');\n } else {\n return $item.children('.aui-nav').attr('title') || $item.children('.aui-nav-heading').text();\n }\n }\n };\n \n function showTipsy($trigger) {\n $trigger.tipsy(tipsyOpts).tipsy('show');\n var $tip = $trigger.data('tipsy') && $trigger.data('tipsy').$tip;\n if ($tip) {\n // if .aui-sidebar-group does not have a title to display\n // Remove \"opacity\" inline style from Tipsy to allow the our own styles and transitions to be applied\n $tip.css({ opacity: '' }).addClass('tooltip-shown');\n }\n }\n \n function hideTipsy($trigger) {\n var $tip = $trigger.data('tipsy') && $trigger.data('tipsy').$tip;\n if ($tip) {\n var durationStr = $tip.css('transition-duration');\n \n if (durationStr) {\n // can be denominated in either s or ms\n var timeoutMs = durationStr.indexOf('ms') >= 0 ? parseInt(durationStr.substring(0, durationStr.length - 2), 10) : 1000 * parseInt(durationStr.substring(0, durationStr.length - 1), 10);\n \n // use a timeout because the transitionend event is not reliable (yet),\n // more details here: https://bitbucket.atlassian.net/browse/BB-11599\n // an example of this at http://labs.silverorange.com/files/webkit-bug/\n // further caveats here: https://developer.mozilla.org/en-US/docs/Web/Events/transitionend\n // \"In the case where a transition is removed before completion,\n // such as if the transition-property is removed, then the event will not fire.\"\n setTimeout(function () {\n $trigger.tipsy('hide');\n }, timeoutMs);\n }\n \n $tip.removeClass('tooltip-shown');\n }\n }\n \n function lazilyInitializeSubmenus(sidebar) {\n sidebar.$el.on('hover click focus', sidebar.collapsedTriggersSelector, function (e) {\n var $trigger = (0, _jquery2.default)(e.target);\n constructSubmenu(sidebar, $trigger);\n });\n }\n \n function initializeHandlers(sidebar) {\n var $sidebar = (0, _jquery2.default)('.aui-sidebar');\n if (!$sidebar.length) {\n return;\n }\n \n lazilyInitializeSubmenus(sidebar);\n \n // AUI-2542: only enter touch mode on small screen touchable devices\n if (_hasTouch2.default && (0, _mediaQuery2.default)('only screen and (max-device-width:1024px)')) {\n (0, _jquery2.default)('body').addClass('aui-page-sidebar-touch');\n }\n \n var pendingReflow = null;\n var onScrollResizeReflow = function onScrollResizeReflow() {\n if (pendingReflow === null) {\n pendingReflow = requestAnimationFrame(function () {\n sidebar.reflow();\n pendingReflow = null;\n });\n }\n };\n \n (0, _jquery2.default)(window).on('scroll resize', onScrollResizeReflow);\n sidebar.reflow();\n \n if (sidebar.isAnimated()) {\n sidebar.$el.on('transitionend webkitTransitionEnd', function () {\n sidebar.$el.trigger(_jquery2.default.Event(EVENT_PREFIX + (sidebar.isCollapsed() ? 'collapse-end' : 'expand-end')));\n });\n }\n \n sidebar.$el.on('click', '.aui-sidebar-toggle', function (e) {\n e.preventDefault();\n sidebar.toggle();\n });\n \n (0, _jquery2.default)('.aui-page-panel').click(function () {\n if (!sidebar.isCollapsed() && sidebar.isViewportNarrow()) {\n sidebar.collapse();\n }\n });\n \n var toggleShortcutHandler = function toggleShortcutHandler(e) {\n if (isNormalSquareBracket(e)) {\n sidebar.toggle();\n }\n };\n \n //We use keypress because it captures the actual character that was typed and not the physical key that was pressed.\n //This accounts for other keyboard layouts\n \n (0, _jquery2.default)(document).on('keypress', toggleShortcutHandler);\n \n sidebar._remove = function () {\n this._removeAllTooltips();\n (0, _jquery2.default)(this.inlineDialogSelector).remove();\n this.$el.off();\n this.$el.remove();\n (0, _jquery2.default)(document).off('keypress', toggleShortcutHandler);\n (0, _jquery2.default)(window).off('scroll resize', onScrollResizeReflow);\n };\n \n sidebar.$el.on('touchend', function (e) {\n if (sidebar.isCollapsed()) {\n sidebar.expand();\n e.preventDefault();\n }\n });\n \n sidebar.$el.on('mouseenter focus', sidebar.collapsedTriggersSelector, function () {\n if (!sidebar.isCollapsed()) {\n return;\n }\n \n var $trigger = (0, _jquery2.default)(this);\n \n if (!hasSubmenu($trigger)) {\n showTipsy($trigger);\n }\n });\n \n sidebar.$el.on('click blur mouseleave', sidebar.collapsedTriggersSelector, function () {\n if (!sidebar.isCollapsed()) {\n return;\n }\n hideTipsy((0, _jquery2.default)(this));\n });\n \n sidebar.$el.on('mouseenter focus', sidebar.toggleSelector, function () {\n var $trigger = (0, _jquery2.default)(this);\n if (sidebar.isCollapsed()) {\n $trigger.data('tooltip', AJS.I18n.getText('aui.sidebar.expand.tooltip'));\n } else {\n $trigger.data('tooltip', AJS.I18n.getText('aui.sidebar.collapse.tooltip'));\n }\n showTipsy($trigger);\n });\n \n sidebar.$el.on('click blur mouseleave', sidebar.toggleSelector, function () {\n hideTipsy((0, _jquery2.default)(this));\n });\n \n function isNormalTab(e) {\n return e.keyCode === AJS.keyCode.TAB && !e.shiftKey && !e.altKey;\n }\n \n function isNormalSquareBracket(e) {\n return e.which === AJS.keyCode.LEFT_SQUARE_BRACKET && !e.shiftKey && !e.ctrlKey && !e.metaKey && !(0, _isInput2.default)(e.target);\n }\n \n function isShiftTab(e) {\n return e.keyCode === AJS.keyCode.TAB && e.shiftKey;\n }\n \n function isFirstSubmenuItem(item, $submenuDialog) {\n return item === $submenuDialog.find(':aui-tabbable')[0];\n }\n \n function isLastSubmenuItem(item, $submenuDialog) {\n return item === $submenuDialog.find(':aui-tabbable').last()[0];\n }\n \n /**\n * Force to focus on the first tabbable item in inline dialog.\n * Reason: inline dialog will be hidden as soon as the trigger is out of focus (onBlur event)\n * This function should come directly from inline dialog component.\n */\n function focusFirstItemOfInlineDialog($inlineDialog) {\n $inlineDialog.attr('persistent', '');\n // don't use :aui-tabbable:first as it will select the first tabbable item in EACH nav group\n $inlineDialog.find(':aui-tabbable').first().focus();\n // workaround on IE:\n // delay the persistence of inline dialog to make sure onBlur event was triggered first\n setTimeout(function () {\n $inlineDialog.removeAttr('persistent');\n }, 100);\n }\n \n sidebar.$el.on('keydown', sidebar.collapsedTriggersSelector, function (e) {\n if (sidebar.isCollapsed()) {\n var triggerEl = e.target;\n var submenuInlineDialog = getSubmenuInlineDialog(triggerEl);\n if (!submenuInlineDialog) {\n return;\n }\n \n var $submenuInlineDialog = (0, _jquery2.default)(submenuInlineDialog);\n \n if (isNormalTab(e) && submenuInlineDialog.open) {\n e.preventDefault();\n focusFirstItemOfInlineDialog($submenuInlineDialog);\n \n $submenuInlineDialog.on('keydown', function (e) {\n if (isShiftTab(e) && isFirstSubmenuItem(e.target, $submenuInlineDialog) || isNormalTab(e) && isLastSubmenuItem(e.target, $submenuInlineDialog)) {\n triggerEl.focus();\n // unbind event and close submenu as the focus is out of the submenu\n (0, _jquery2.default)(this).off('keydown');\n hideAllSubmenus();\n }\n });\n }\n }\n });\n }\n \n var sidebar = (0, _widget2.default)('sidebar', Sidebar);\n \n (0, _jquery2.default)(function () {\n sidebar('.aui-sidebar');\n });\n \n var sidebarSubmenuDeprecationLogger = deprecate.getMessageLogger('Sidebar.submenus', {\n removeInVersion: '6.0',\n sinceVersion: '5.8'\n });\n \n (0, _globalize2.default)('sidebar', sidebar);\n \n exports.default = sidebar;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js-vendor/jquery/jquery.tablesorter.js\n(typeof window === 'undefined' ? global : window).__5115c324962984eb34b4f86a44067f93 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n /**!\n * TableSorter 2.17.7 - Client-side table sorting with ease!\n * @requires jQuery v1.2.6+\n *\n * Copyright (c) 2007 Christian Bach\n * Examples and docs at: http://tablesorter.com\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n * @type jQuery\n * @name tablesorter\n * @cat Plugins/Tablesorter\n * @author Christian Bach/christian.bach@polyester.se\n * @contributor Rob Garrison/https://github.com/Mottie/tablesorter\n */\n /*jshint browser:true, jquery:true, unused:false, expr: true */\n /*global console:false, alert:false */\n !(function($) {\n $.extend({\n /*jshint supernew:true */\n tablesorter: new function() {\n \n var ts = this;\n \n ts.version = \"2.17.7\";\n \n ts.parsers = [];\n ts.widgets = [];\n ts.defaults = {\n \n // *** appearance\n theme : 'default', // adds tablesorter-{theme} to the table for styling\n widthFixed : false, // adds colgroup to fix widths of columns\n showProcessing : false, // show an indeterminate timer icon in the header when the table is sorted or filtered.\n \n headerTemplate : '{content}',// header layout template (HTML ok); {content} = innerHTML, {icon} = <i/> (class from cssIcon)\n onRenderTemplate : null, // function(index, template){ return template; }, (template is a string)\n onRenderHeader : null, // function(index){}, (nothing to return)\n \n // *** functionality\n cancelSelection : true, // prevent text selection in the header\n tabIndex : true, // add tabindex to header for keyboard accessibility\n dateFormat : 'mmddyyyy', // other options: \"ddmmyyy\" or \"yyyymmdd\"\n sortMultiSortKey : 'shiftKey', // key used to select additional columns\n sortResetKey : 'ctrlKey', // key used to remove sorting on a column\n usNumberFormat : true, // false for German \"1.234.567,89\" or French \"1 234 567,89\"\n delayInit : false, // if false, the parsed table contents will not update until the first sort\n serverSideSorting: false, // if true, server-side sorting should be performed because client-side sorting will be disabled, but the ui and events will still be used.\n \n // *** sort options\n headers : {}, // set sorter, string, empty, locked order, sortInitialOrder, filter, etc.\n ignoreCase : true, // ignore case while sorting\n sortForce : null, // column(s) first sorted; always applied\n sortList : [], // Initial sort order; applied initially; updated when manually sorted\n sortAppend : null, // column(s) sorted last; always applied\n sortStable : false, // when sorting two rows with exactly the same content, the original sort order is maintained\n \n sortInitialOrder : 'asc', // sort direction on first click\n sortLocaleCompare: false, // replace equivalent character (accented characters)\n sortReset : false, // third click on the header will reset column to default - unsorted\n sortRestart : false, // restart sort to \"sortInitialOrder\" when clicking on previously unsorted columns\n \n emptyTo : 'bottom', // sort empty cell to bottom, top, none, zero\n stringTo : 'max', // sort strings in numerical column as max, min, top, bottom, zero\n textExtraction : 'basic', // text extraction method/function - function(node, table, cellIndex){}\n textAttribute : 'data-text',// data-attribute that contains alternate cell text (used in textExtraction function)\n textSorter : null, // choose overall or specific column sorter function(a, b, direction, table, columnIndex) [alt: ts.sortText]\n numberSorter : null, // choose overall numeric sorter function(a, b, direction, maxColumnValue)\n \n // *** widget options\n widgets: [], // method to add widgets, e.g. widgets: ['zebra']\n widgetOptions : {\n zebra : [ 'even', 'odd' ] // zebra widget alternating row class names\n },\n initWidgets : true, // apply widgets on tablesorter initialization\n \n // *** callbacks\n initialized : null, // function(table){},\n \n // *** extra css class names\n tableClass : '',\n cssAsc : '',\n cssDesc : '',\n cssNone : '',\n cssHeader : '',\n cssHeaderRow : '',\n cssProcessing : '', // processing icon applied to header during sort/filter\n \n cssChildRow : 'tablesorter-childRow', // class name indiciating that a row is to be attached to the its parent\n cssIcon : 'tablesorter-icon', // if this class exists, a <i> will be added to the header automatically\n cssInfoBlock : 'tablesorter-infoOnly', // don't sort tbody with this class name (only one class name allowed here!)\n \n // *** selectors\n selectorHeaders : '> thead th, > thead td',\n selectorSort : 'th, td', // jQuery selector of content within selectorHeaders that is clickable to trigger a sort\n selectorRemove : '.remove-me',\n \n // *** advanced\n debug : false,\n \n // *** Internal variables\n headerList: [],\n empties: {},\n strings: {},\n parsers: []\n \n // deprecated; but retained for backwards compatibility\n // widgetZebra: { css: [\"even\", \"odd\"] }\n \n };\n \n // internal css classes - these will ALWAYS be added to\n // the table and MUST only contain one class name - fixes #381\n ts.css = {\n table : 'tablesorter',\n cssHasChild: 'tablesorter-hasChildRow',\n childRow : 'tablesorter-childRow',\n header : 'tablesorter-header',\n headerRow : 'tablesorter-headerRow',\n headerIn : 'tablesorter-header-inner',\n icon : 'tablesorter-icon',\n info : 'tablesorter-infoOnly',\n processing : 'tablesorter-processing',\n sortAsc : 'tablesorter-headerAsc',\n sortDesc : 'tablesorter-headerDesc',\n sortNone : 'tablesorter-headerUnSorted'\n };\n \n // labels applied to sortable headers for accessibility (aria) support\n ts.language = {\n sortAsc : 'Ascending sort applied, ',\n sortDesc : 'Descending sort applied, ',\n sortNone : 'No sort applied, ',\n nextAsc : 'activate to apply an ascending sort',\n nextDesc : 'activate to apply a descending sort',\n nextNone : 'activate to remove the sort'\n };\n \n /* debuging utils */\n function log() {\n var a = arguments[0],\n s = arguments.length > 1 ? Array.prototype.slice.call(arguments) : a;\n if (typeof console !== \"undefined\" && typeof console.log !== \"undefined\") {\n console[ /error/i.test(a) ? 'error' : /warn/i.test(a) ? 'warn' : 'log' ](s);\n } else {\n alert(s);\n }\n }\n \n function benchmark(s, d) {\n log(s + \" (\" + (new Date().getTime() - d.getTime()) + \"ms)\");\n }\n \n ts.log = log;\n ts.benchmark = benchmark;\n \n // $.isEmptyObject from jQuery v1.4\n function isEmptyObject(obj) {\n /*jshint forin: false */\n for (var name in obj) {\n return false;\n }\n return true;\n }\n \n function getElementText(table, node, cellIndex) {\n if (!node) { return \"\"; }\n var te, c = table.config,\n t = c.textExtraction || '',\n text = \"\";\n if (t === \"basic\") {\n // check data-attribute first\n text = $(node).attr(c.textAttribute) || node.textContent || node.innerText || $(node).text() || \"\";\n } else {\n if (typeof(t) === \"function\") {\n text = t(node, table, cellIndex);\n } else if (typeof (te = ts.getColumnData( table, t, cellIndex )) === 'function') {\n text = te(node, table, cellIndex);\n } else {\n // previous \"simple\" method\n text = node.textContent || node.innerText || $(node).text() || \"\";\n }\n }\n return $.trim(text);\n }\n \n function detectParserForColumn(table, rows, rowIndex, cellIndex) {\n var cur,\n i = ts.parsers.length,\n node = false,\n nodeValue = '',\n keepLooking = true;\n while (nodeValue === '' && keepLooking) {\n rowIndex++;\n if (rows[rowIndex]) {\n node = rows[rowIndex].cells[cellIndex];\n nodeValue = getElementText(table, node, cellIndex);\n if (table.config.debug) {\n log('Checking if value was empty on row ' + rowIndex + ', column: ' + cellIndex + ': \"' + nodeValue + '\"');\n }\n } else {\n keepLooking = false;\n }\n }\n while (--i >= 0) {\n cur = ts.parsers[i];\n // ignore the default text parser because it will always be true\n if (cur && cur.id !== 'text' && cur.is && cur.is(nodeValue, table, node)) {\n return cur;\n }\n }\n // nothing found, return the generic parser (text)\n return ts.getParserById('text');\n }\n \n function buildParserCache(table) {\n var c = table.config,\n // update table bodies in case we start with an empty table\n tb = c.$tbodies = c.$table.children('tbody:not(.' + c.cssInfoBlock + ')'),\n rows, list, l, i, h, ch, np, p, e, time,\n j = 0,\n parsersDebug = \"\",\n len = tb.length;\n if ( len === 0) {\n return c.debug ? log('Warning: *Empty table!* Not building a parser cache') : '';\n } else if (c.debug) {\n time = new Date();\n log('Detecting parsers for each column');\n }\n list = {\n extractors: [],\n parsers: []\n };\n while (j < len) {\n rows = tb[j].rows;\n if (rows[j]) {\n l = c.columns; // rows[j].cells.length;\n for (i = 0; i < l; i++) {\n h = c.$headers.filter('[data-column=\"' + i + '\"]:last');\n // get column indexed table cell\n ch = ts.getColumnData( table, c.headers, i );\n // get column parser/extractor\n e = ts.getParserById( ts.getData(h, ch, 'extractor') );\n p = ts.getParserById( ts.getData(h, ch, 'sorter') );\n np = ts.getData(h, ch, 'parser') === 'false';\n // empty cells behaviour - keeping emptyToBottom for backwards compatibility\n c.empties[i] = ts.getData(h, ch, 'empty') || c.emptyTo || (c.emptyToBottom ? 'bottom' : 'top' );\n // text strings behaviour in numerical sorts\n c.strings[i] = ts.getData(h, ch, 'string') || c.stringTo || 'max';\n if (np) {\n p = ts.getParserById('no-parser');\n }\n if (!e) {\n // For now, maybe detect someday\n e = false;\n }\n if (!p) {\n p = detectParserForColumn(table, rows, -1, i);\n }\n if (c.debug) {\n parsersDebug += \"column:\" + i + \"; extractor:\" + e.id + \"; parser:\" + p.id + \"; string:\" + c.strings[i] + '; empty: ' + c.empties[i] + \"\\n\";\n }\n list.parsers[i] = p;\n list.extractors[i] = e;\n }\n }\n j += (list.parsers.length) ? len : 1;\n }\n if (c.debug) {\n log(parsersDebug ? parsersDebug : \"No parsers detected\");\n benchmark(\"Completed detecting parsers\", time);\n }\n c.parsers = list.parsers;\n c.extractors = list.extractors;\n }\n \n /* utils */\n function buildCache(table) {\n var cc, t, tx, v, i, j, k, $row, rows, cols, cacheTime,\n totalRows, rowData, colMax,\n c = table.config,\n $tb = c.$table.children('tbody'),\n extractors = c.extractors,\n parsers = c.parsers;\n c.cache = {};\n c.totalRows = 0;\n // if no parsers found, return - it's an empty table.\n if (!parsers) {\n return c.debug ? log('Warning: *Empty table!* Not building a cache') : '';\n }\n if (c.debug) {\n cacheTime = new Date();\n }\n // processing icon\n if (c.showProcessing) {\n ts.isProcessing(table, true);\n }\n for (k = 0; k < $tb.length; k++) {\n colMax = []; // column max value per tbody\n cc = c.cache[k] = {\n normalized: [] // array of normalized row data; last entry contains \"rowData\" above\n // colMax: # // added at the end\n };\n \n // ignore tbodies with class name from c.cssInfoBlock\n if (!$tb.eq(k).hasClass(c.cssInfoBlock)) {\n totalRows = ($tb[k] && $tb[k].rows.length) || 0;\n for (i = 0; i < totalRows; ++i) {\n rowData = {\n // order: original row order #\n // $row : jQuery Object[]\n child: [] // child row text (filter widget)\n };\n /** Add the table data to main data array */\n $row = $($tb[k].rows[i]);\n rows = [ new Array(c.columns) ];\n cols = [];\n // if this is a child row, add it to the last row's children and continue to the next row\n // ignore child row class, if it is the first row\n if ($row.hasClass(c.cssChildRow) && i !== 0) {\n t = cc.normalized.length - 1;\n cc.normalized[t][c.columns].$row = cc.normalized[t][c.columns].$row.add($row);\n // add \"hasChild\" class name to parent row\n if (!$row.prev().hasClass(c.cssChildRow)) {\n $row.prev().addClass(ts.css.cssHasChild);\n }\n // save child row content (un-parsed!)\n rowData.child[t] = $.trim( $row[0].textContent || $row[0].innerText || $row.text() || \"\" );\n // go to the next for loop\n continue;\n }\n rowData.$row = $row;\n rowData.order = i; // add original row position to rowCache\n for (j = 0; j < c.columns; ++j) {\n if (typeof parsers[j] === 'undefined') {\n if (c.debug) {\n log('No parser found for cell:', $row[0].cells[j], 'does it have a header?');\n }\n continue;\n }\n t = getElementText(table, $row[0].cells[j], j);\n // do extract before parsing if there is one\n if (typeof extractors[j].id === 'undefined') {\n tx = t;\n } else {\n tx = extractors[j].format(t, table, $row[0].cells[j], j);\n }\n // allow parsing if the string is empty, previously parsing would change it to zero,\n // in case the parser needs to extract data from the table cell attributes\n v = parsers[j].id === 'no-parser' ? '' : parsers[j].format(tx, table, $row[0].cells[j], j);\n cols.push( c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v );\n if ((parsers[j].type || '').toLowerCase() === \"numeric\") {\n // determine column max value (ignore sign)\n colMax[j] = Math.max(Math.abs(v) || 0, colMax[j] || 0);\n }\n }\n // ensure rowData is always in the same location (after the last column)\n cols[c.columns] = rowData;\n cc.normalized.push(cols);\n }\n cc.colMax = colMax;\n // total up rows, not including child rows\n c.totalRows += cc.normalized.length;\n }\n }\n if (c.showProcessing) {\n ts.isProcessing(table); // remove processing icon\n }\n if (c.debug) {\n benchmark(\"Building cache for \" + totalRows + \" rows\", cacheTime);\n }\n }\n \n // init flag (true) used by pager plugin to prevent widget application\n function appendToTable(table, init) {\n var c = table.config,\n wo = c.widgetOptions,\n b = table.tBodies,\n rows = [],\n cc = c.cache,\n n, totalRows, $bk, $tb,\n i, k, appendTime;\n // empty table - fixes #206/#346\n if (isEmptyObject(cc)) {\n // run pager appender in case the table was just emptied\n return c.appender ? c.appender(table, rows) :\n table.isUpdating ? c.$table.trigger(\"updateComplete\", table) : ''; // Fixes #532\n }\n if (c.debug) {\n appendTime = new Date();\n }\n for (k = 0; k < b.length; k++) {\n $bk = $(b[k]);\n if ($bk.length && !$bk.hasClass(c.cssInfoBlock)) {\n // get tbody\n $tb = ts.processTbody(table, $bk, true);\n n = cc[k].normalized;\n totalRows = n.length;\n for (i = 0; i < totalRows; i++) {\n rows.push(n[i][c.columns].$row);\n // removeRows used by the pager plugin; don't render if using ajax - fixes #411\n if (!c.appender || (c.pager && (!c.pager.removeRows || !wo.pager_removeRows) && !c.pager.ajax)) {\n $tb.append(n[i][c.columns].$row);\n }\n }\n // restore tbody\n ts.processTbody(table, $tb, false);\n }\n }\n if (c.appender) {\n c.appender(table, rows);\n }\n if (c.debug) {\n benchmark(\"Rebuilt table\", appendTime);\n }\n // apply table widgets; but not before ajax completes\n if (!init && !c.appender) { ts.applyWidget(table); }\n if (table.isUpdating) {\n c.$table.trigger(\"updateComplete\", table);\n }\n }\n \n function formatSortingOrder(v) {\n // look for \"d\" in \"desc\" order; return true\n return (/^d/i.test(v) || v === 1);\n }\n \n function buildHeaders(table) {\n var ch, $t,\n h, i, t, lock, time,\n c = table.config;\n c.headerList = [];\n c.headerContent = [];\n if (c.debug) {\n time = new Date();\n }\n // children tr in tfoot - see issue #196 & #547\n c.columns = ts.computeColumnIndex( c.$table.children('thead, tfoot').children('tr') );\n // add icon if cssIcon option exists\n i = c.cssIcon ? '<i class=\"' + ( c.cssIcon === ts.css.icon ? ts.css.icon : c.cssIcon + ' ' + ts.css.icon ) + '\"></i>' : '';\n // redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683\n c.$headers = $(table).find(c.selectorHeaders).each(function(index) {\n $t = $(this);\n // make sure to get header cell & not column indexed cell\n ch = ts.getColumnData( table, c.headers, index, true );\n // save original header content\n c.headerContent[index] = $(this).html();\n // set up header template\n t = c.headerTemplate.replace(/\\{content\\}/g, $(this).html()).replace(/\\{icon\\}/g, i);\n if (c.onRenderTemplate) {\n h = c.onRenderTemplate.apply($t, [index, t]);\n if (h && typeof h === 'string') { t = h; } // only change t if something is returned\n }\n $(this).html('<div class=\"' + ts.css.headerIn + '\">' + t + '</div>'); // faster than wrapInner\n \n if (c.onRenderHeader) { c.onRenderHeader.apply($t, [index]); }\n this.column = parseInt( $(this).attr('data-column'), 10);\n this.order = formatSortingOrder( ts.getData($t, ch, 'sortInitialOrder') || c.sortInitialOrder ) ? [1,0,2] : [0,1,2];\n this.count = -1; // set to -1 because clicking on the header automatically adds one\n this.lockedOrder = false;\n lock = ts.getData($t, ch, 'lockedOrder') || false;\n if (typeof lock !== 'undefined' && lock !== false) {\n this.order = this.lockedOrder = formatSortingOrder(lock) ? [1,1,1] : [0,0,0];\n }\n $t.addClass(ts.css.header + ' ' + c.cssHeader);\n // add cell to headerList\n c.headerList[index] = this;\n // add to parent in case there are multiple rows\n $t.parent().addClass(ts.css.headerRow + ' ' + c.cssHeaderRow).attr('role', 'row');\n // allow keyboard cursor to focus on element\n if (c.tabIndex) { $t.attr(\"tabindex\", 0); }\n }).attr({\n scope: 'col',\n role : 'columnheader'\n });\n // enable/disable sorting\n updateHeader(table);\n if (c.debug) {\n benchmark(\"Built headers:\", time);\n log(c.$headers);\n }\n }\n \n function commonUpdate(table, resort, callback) {\n var c = table.config;\n // remove rows/elements before update\n c.$table.find(c.selectorRemove).remove();\n // rebuild parsers\n buildParserCache(table);\n // rebuild the cache map\n buildCache(table);\n checkResort(c.$table, resort, callback);\n }\n \n function updateHeader(table) {\n var s, $th, col,\n c = table.config;\n c.$headers.each(function(index, th){\n $th = $(th);\n col = ts.getColumnData( table, c.headers, index, true );\n // add \"sorter-false\" class if \"parser-false\" is set\n s = ts.getData( th, col, 'sorter' ) === 'false' || ts.getData( th, col, 'parser' ) === 'false';\n th.sortDisabled = s;\n $th[ s ? 'addClass' : 'removeClass' ]('sorter-false').attr('aria-disabled', '' + s);\n // aria-controls - requires table ID\n if (table.id) {\n if (s) {\n $th.removeAttr('aria-controls');\n } else {\n $th.attr('aria-controls', table.id);\n }\n }\n });\n }\n \n function setHeadersCss(table) {\n var f, i, j,\n c = table.config,\n list = c.sortList,\n len = list.length,\n none = ts.css.sortNone + ' ' + c.cssNone,\n css = [ts.css.sortAsc + ' ' + c.cssAsc, ts.css.sortDesc + ' ' + c.cssDesc],\n aria = ['ascending', 'descending'],\n // find the footer\n $t = $(table).find('tfoot tr').children().add(c.$extraHeaders).removeClass(css.join(' '));\n // remove all header information\n c.$headers\n .removeClass(css.join(' '))\n .addClass(none).attr('aria-sort', 'none');\n for (i = 0; i < len; i++) {\n // direction = 2 means reset!\n if (list[i][1] !== 2) {\n // multicolumn sorting updating - choose the :last in case there are nested columns\n f = c.$headers.not('.sorter-false').filter('[data-column=\"' + list[i][0] + '\"]' + (len === 1 ? ':last' : '') );\n if (f.length) {\n for (j = 0; j < f.length; j++) {\n if (!f[j].sortDisabled) {\n f.eq(j).removeClass(none).addClass(css[list[i][1]]).attr('aria-sort', aria[list[i][1]]);\n }\n }\n // add sorted class to footer & extra headers, if they exist\n if ($t.length) {\n $t.filter('[data-column=\"' + list[i][0] + '\"]').removeClass(none).addClass(css[list[i][1]]);\n }\n }\n }\n }\n // add verbose aria labels\n c.$headers.not('.sorter-false').each(function(){\n var $this = $(this),\n nextSort = this.order[(this.count + 1) % (c.sortReset ? 3 : 2)],\n txt = $this.text() + ': ' +\n ts.language[ $this.hasClass(ts.css.sortAsc) ? 'sortAsc' : $this.hasClass(ts.css.sortDesc) ? 'sortDesc' : 'sortNone' ] +\n ts.language[ nextSort === 0 ? 'nextAsc' : nextSort === 1 ? 'nextDesc' : 'nextNone' ];\n $this.attr('aria-label', txt );\n });\n }\n \n // automatically add col group, and column sizes if set\n function fixColumnWidth(table) {\n if (table.config.widthFixed && $(table).find('colgroup').length === 0) {\n var colgroup = $('<colgroup>'),\n overallWidth = $(table).width();\n // only add col for visible columns - fixes #371\n $(table.tBodies[0]).find(\"tr:first\").children(\":visible\").each(function() {\n colgroup.append($('<col>').css('width', parseInt(($(this).width()/overallWidth)*1000, 10)/10 + '%'));\n });\n $(table).prepend(colgroup);\n }\n }\n \n function updateHeaderSortCount(table, list) {\n var s, t, o, col, primary,\n c = table.config,\n sl = list || c.sortList;\n c.sortList = [];\n $.each(sl, function(i,v){\n // ensure all sortList values are numeric - fixes #127\n col = parseInt(v[0], 10);\n // make sure header exists\n o = c.$headers.filter('[data-column=\"' + col + '\"]:last')[0];\n if (o) { // prevents error if sorton array is wrong\n // o.count = o.count + 1;\n t = ('' + v[1]).match(/^(1|d|s|o|n)/);\n t = t ? t[0] : '';\n // 0/(a)sc (default), 1/(d)esc, (s)ame, (o)pposite, (n)ext\n switch(t) {\n case '1': case 'd': // descending\n t = 1;\n break;\n case 's': // same direction (as primary column)\n // if primary sort is set to \"s\", make it ascending\n t = primary || 0;\n break;\n case 'o':\n s = o.order[(primary || 0) % (c.sortReset ? 3 : 2)];\n // opposite of primary column; but resets if primary resets\n t = s === 0 ? 1 : s === 1 ? 0 : 2;\n break;\n case 'n':\n o.count = o.count + 1;\n t = o.order[(o.count) % (c.sortReset ? 3 : 2)];\n break;\n default: // ascending\n t = 0;\n break;\n }\n primary = i === 0 ? t : primary;\n s = [ col, parseInt(t, 10) || 0 ];\n c.sortList.push(s);\n t = $.inArray(s[1], o.order); // fixes issue #167\n o.count = t >= 0 ? t : s[1] % (c.sortReset ? 3 : 2);\n }\n });\n }\n \n function getCachedSortType(parsers, i) {\n return (parsers && parsers[i]) ? parsers[i].type || '' : '';\n }\n \n function initSort(table, cell, event){\n if (table.isUpdating) {\n // let any updates complete before initializing a sort\n return setTimeout(function(){ initSort(table, cell, event); }, 50);\n }\n var arry, indx, col, order, s,\n c = table.config,\n key = !event[c.sortMultiSortKey],\n $table = c.$table;\n // Only call sortStart if sorting is enabled\n $table.trigger(\"sortStart\", table);\n // get current column sort order\n cell.count = event[c.sortResetKey] ? 2 : (cell.count + 1) % (c.sortReset ? 3 : 2);\n // reset all sorts on non-current column - issue #30\n if (c.sortRestart) {\n indx = cell;\n c.$headers.each(function() {\n // only reset counts on columns that weren't just clicked on and if not included in a multisort\n if (this !== indx && (key || !$(this).is('.' + ts.css.sortDesc + ',.' + ts.css.sortAsc))) {\n this.count = -1;\n }\n });\n }\n // get current column index\n indx = cell.column;\n // user only wants to sort on one column\n if (key) {\n // flush the sort list\n c.sortList = [];\n if (c.sortForce !== null) {\n arry = c.sortForce;\n for (col = 0; col < arry.length; col++) {\n if (arry[col][0] !== indx) {\n c.sortList.push(arry[col]);\n }\n }\n }\n // add column to sort list\n order = cell.order[cell.count];\n if (order < 2) {\n c.sortList.push([indx, order]);\n // add other columns if header spans across multiple\n if (cell.colSpan > 1) {\n for (col = 1; col < cell.colSpan; col++) {\n c.sortList.push([indx + col, order]);\n }\n }\n }\n // multi column sorting\n } else {\n // get rid of the sortAppend before adding more - fixes issue #115 & #523\n if (c.sortAppend && c.sortList.length > 1) {\n for (col = 0; col < c.sortAppend.length; col++) {\n s = ts.isValueInArray(c.sortAppend[col][0], c.sortList);\n if (s >= 0) {\n c.sortList.splice(s,1);\n }\n }\n }\n // the user has clicked on an already sorted column\n if (ts.isValueInArray(indx, c.sortList) >= 0) {\n // reverse the sorting direction\n for (col = 0; col < c.sortList.length; col++) {\n s = c.sortList[col];\n order = c.$headers.filter('[data-column=\"' + s[0] + '\"]:last')[0];\n if (s[0] === indx) {\n // order.count seems to be incorrect when compared to cell.count\n s[1] = order.order[cell.count];\n if (s[1] === 2) {\n c.sortList.splice(col,1);\n order.count = -1;\n }\n }\n }\n } else {\n // add column to sort list array\n order = cell.order[cell.count];\n if (order < 2) {\n c.sortList.push([indx, order]);\n // add other columns if header spans across multiple\n if (cell.colSpan > 1) {\n for (col = 1; col < cell.colSpan; col++) {\n c.sortList.push([indx + col, order]);\n }\n }\n }\n }\n }\n if (c.sortAppend !== null) {\n arry = c.sortAppend;\n for (col = 0; col < arry.length; col++) {\n if (arry[col][0] !== indx) {\n c.sortList.push(arry[col]);\n }\n }\n }\n // sortBegin event triggered immediately before the sort\n $table.trigger(\"sortBegin\", table);\n // setTimeout needed so the processing icon shows up\n setTimeout(function(){\n // set css for headers\n setHeadersCss(table);\n multisort(table);\n appendToTable(table);\n $table.trigger(\"sortEnd\", table);\n }, 1);\n }\n \n // sort multiple columns\n function multisort(table) { /*jshint loopfunc:true */\n var i, k, num, col, sortTime, colMax,\n cache, order, sort, x, y,\n dir = 0,\n c = table.config,\n cts = c.textSorter || '',\n sortList = c.sortList,\n l = sortList.length,\n bl = table.tBodies.length;\n if (c.serverSideSorting || isEmptyObject(c.cache)) { // empty table - fixes #206/#346\n return;\n }\n if (c.debug) { sortTime = new Date(); }\n for (k = 0; k < bl; k++) {\n colMax = c.cache[k].colMax;\n cache = c.cache[k].normalized;\n \n cache.sort(function(a, b) {\n // cache is undefined here in IE, so don't use it!\n for (i = 0; i < l; i++) {\n col = sortList[i][0];\n order = sortList[i][1];\n // sort direction, true = asc, false = desc\n dir = order === 0;\n \n if (c.sortStable && a[col] === b[col] && l === 1) {\n return a[c.columns].order - b[c.columns].order;\n }\n \n // fallback to natural sort since it is more robust\n num = /n/i.test(getCachedSortType(c.parsers, col));\n if (num && c.strings[col]) {\n // sort strings in numerical columns\n if (typeof (c.string[c.strings[col]]) === 'boolean') {\n num = (dir ? 1 : -1) * (c.string[c.strings[col]] ? -1 : 1);\n } else {\n num = (c.strings[col]) ? c.string[c.strings[col]] || 0 : 0;\n }\n // fall back to built-in numeric sort\n // var sort = $.tablesorter[\"sort\" + s](table, a[c], b[c], c, colMax[c], dir);\n sort = c.numberSorter ? c.numberSorter(a[col], b[col], dir, colMax[col], table) :\n ts[ 'sortNumeric' + (dir ? 'Asc' : 'Desc') ](a[col], b[col], num, colMax[col], col, table);\n } else {\n // set a & b depending on sort direction\n x = dir ? a : b;\n y = dir ? b : a;\n // text sort function\n if (typeof(cts) === 'function') {\n // custom OVERALL text sorter\n sort = cts(x[col], y[col], dir, col, table);\n } else if (typeof(cts) === 'object' && cts.hasOwnProperty(col)) {\n // custom text sorter for a SPECIFIC COLUMN\n sort = cts[col](x[col], y[col], dir, col, table);\n } else {\n // fall back to natural sort\n sort = ts[ 'sortNatural' + (dir ? 'Asc' : 'Desc') ](a[col], b[col], col, table, c);\n }\n }\n if (sort) { return sort; }\n }\n return a[c.columns].order - b[c.columns].order;\n });\n }\n if (c.debug) { benchmark(\"Sorting on \" + sortList.toString() + \" and dir \" + order + \" time\", sortTime); }\n }\n \n function resortComplete($table, callback){\n var table = $table[0];\n if (table.isUpdating) {\n $table.trigger('updateComplete');\n }\n if ($.isFunction(callback)) {\n callback($table[0]);\n }\n }\n \n function checkResort($table, flag, callback) {\n var sl = $table[0].config.sortList;\n // don't try to resort if the table is still processing\n // this will catch spamming of the updateCell method\n if (flag !== false && !$table[0].isProcessing && sl.length) {\n $table.trigger(\"sorton\", [sl, function(){\n resortComplete($table, callback);\n }, true]);\n } else {\n resortComplete($table, callback);\n ts.applyWidget($table[0], false);\n }\n }\n \n function bindMethods(table){\n var c = table.config,\n $table = c.$table;\n // apply easy methods that trigger bound events\n $table\n .unbind('sortReset update updateRows updateCell updateAll addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave '.split(' ').join(c.namespace + ' '))\n .bind(\"sortReset\" + c.namespace, function(e, callback){\n e.stopPropagation();\n c.sortList = [];\n setHeadersCss(table);\n multisort(table);\n appendToTable(table);\n if ($.isFunction(callback)) {\n callback(table);\n }\n })\n .bind(\"updateAll\" + c.namespace, function(e, resort, callback){\n e.stopPropagation();\n table.isUpdating = true;\n ts.refreshWidgets(table, true, true);\n ts.restoreHeaders(table);\n buildHeaders(table);\n ts.bindEvents(table, c.$headers, true);\n bindMethods(table);\n commonUpdate(table, resort, callback);\n })\n .bind(\"update\" + c.namespace + \" updateRows\" + c.namespace, function(e, resort, callback) {\n e.stopPropagation();\n table.isUpdating = true;\n // update sorting (if enabled/disabled)\n updateHeader(table);\n commonUpdate(table, resort, callback);\n })\n .bind(\"updateCell\" + c.namespace, function(e, cell, resort, callback) {\n e.stopPropagation();\n table.isUpdating = true;\n $table.find(c.selectorRemove).remove();\n // get position from the dom\n var v, t, row, icell,\n $tb = $table.find('tbody'),\n $cell = $(cell),\n // update cache - format: function(s, table, cell, cellIndex)\n // no closest in jQuery v1.2.6 - tbdy = $tb.index( $(cell).closest('tbody') ),$row = $(cell).closest('tr');\n tbdy = $tb.index( $.fn.closest ? $cell.closest('tbody') : $cell.parents('tbody').filter(':first') ),\n $row = $.fn.closest ? $cell.closest('tr') : $cell.parents('tr').filter(':first');\n cell = $cell[0]; // in case cell is a jQuery object\n // tbody may not exist if update is initialized while tbody is removed for processing\n if ($tb.length && tbdy >= 0) {\n row = $tb.eq(tbdy).find('tr').index( $row );\n icell = $cell.index();\n c.cache[tbdy].normalized[row][c.columns].$row = $row;\n if (typeof c.extractors[icell].id === 'undefined') {\n t = getElementText(table, cell, icell);\n } else {\n t = c.extractors[icell].format( getElementText(table, cell, icell), table, cell, icell );\n }\n v = c.parsers[icell].id === 'no-parser' ? '' :\n c.parsers[icell].format( t, table, cell, icell );\n c.cache[tbdy].normalized[row][icell] = c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v;\n if ((c.parsers[icell].type || '').toLowerCase() === \"numeric\") {\n // update column max value (ignore sign)\n c.cache[tbdy].colMax[icell] = Math.max(Math.abs(v) || 0, c.cache[tbdy].colMax[icell] || 0);\n }\n checkResort($table, resort, callback);\n }\n })\n .bind(\"addRows\" + c.namespace, function(e, $row, resort, callback) {\n e.stopPropagation();\n table.isUpdating = true;\n if (isEmptyObject(c.cache)) {\n // empty table, do an update instead - fixes #450\n updateHeader(table);\n commonUpdate(table, resort, callback);\n } else {\n $row = $($row).attr('role', 'row'); // make sure we're using a jQuery object\n var i, j, l, t, v, rowData, cells,\n rows = $row.filter('tr').length,\n tbdy = $table.find('tbody').index( $row.parents('tbody').filter(':first') );\n // fixes adding rows to an empty table - see issue #179\n if (!(c.parsers && c.parsers.length)) {\n buildParserCache(table);\n }\n // add each row\n for (i = 0; i < rows; i++) {\n l = $row[i].cells.length;\n cells = [];\n rowData = {\n child: [],\n $row : $row.eq(i),\n order: c.cache[tbdy].normalized.length\n };\n // add each cell\n for (j = 0; j < l; j++) {\n if (typeof c.extractors[j].id === 'undefined') {\n t = getElementText(table, $row[i].cells[j], j);\n } else {\n t = c.extractors[j].format( getElementText(table, $row[i].cells[j], j), table, $row[i].cells[j], j );\n }\n v = c.parsers[j].id === 'no-parser' ? '' :\n c.parsers[j].format( t, table, $row[i].cells[j], j );\n cells[j] = c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v;\n if ((c.parsers[j].type || '').toLowerCase() === \"numeric\") {\n // update column max value (ignore sign)\n c.cache[tbdy].colMax[j] = Math.max(Math.abs(cells[j]) || 0, c.cache[tbdy].colMax[j] || 0);\n }\n }\n // add the row data to the end\n cells.push(rowData);\n // update cache\n c.cache[tbdy].normalized.push(cells);\n }\n // resort using current settings\n checkResort($table, resort, callback);\n }\n })\n .bind(\"updateComplete\" + c.namespace, function(){\n table.isUpdating = false;\n })\n .bind(\"sorton\" + c.namespace, function(e, list, callback, init) {\n var c = table.config;\n e.stopPropagation();\n $table.trigger(\"sortStart\", this);\n // update header count index\n updateHeaderSortCount(table, list);\n // set css for headers\n setHeadersCss(table);\n // fixes #346\n if (c.delayInit && isEmptyObject(c.cache)) { buildCache(table); }\n $table.trigger(\"sortBegin\", this);\n // sort the table and append it to the dom\n multisort(table);\n appendToTable(table, init);\n $table.trigger(\"sortEnd\", this);\n ts.applyWidget(table);\n if ($.isFunction(callback)) {\n callback(table);\n }\n })\n .bind(\"appendCache\" + c.namespace, function(e, callback, init) {\n e.stopPropagation();\n appendToTable(table, init);\n if ($.isFunction(callback)) {\n callback(table);\n }\n })\n .bind(\"updateCache\" + c.namespace, function(e, callback){\n // rebuild parsers\n if (!(c.parsers && c.parsers.length)) {\n buildParserCache(table);\n }\n // rebuild the cache map\n buildCache(table);\n if ($.isFunction(callback)) {\n callback(table);\n }\n })\n .bind(\"applyWidgetId\" + c.namespace, function(e, id) {\n e.stopPropagation();\n ts.getWidgetById(id).format(table, c, c.widgetOptions);\n })\n .bind(\"applyWidgets\" + c.namespace, function(e, init) {\n e.stopPropagation();\n // apply widgets\n ts.applyWidget(table, init);\n })\n .bind(\"refreshWidgets\" + c.namespace, function(e, all, dontapply){\n e.stopPropagation();\n ts.refreshWidgets(table, all, dontapply);\n })\n .bind(\"destroy\" + c.namespace, function(e, c, cb){\n e.stopPropagation();\n ts.destroy(table, c, cb);\n })\n .bind(\"resetToLoadState\" + c.namespace, function(){\n // remove all widgets\n ts.refreshWidgets(table, true, true);\n // restore original settings; this clears out current settings, but does not clear\n // values saved to storage.\n c = $.extend(true, ts.defaults, c.originalSettings);\n table.hasInitialized = false;\n // setup the entire table again\n ts.setup( table, c );\n });\n }\n \n /* public methods */\n ts.construct = function(settings) {\n return this.each(function() {\n var table = this,\n // merge & extend config options\n c = $.extend(true, {}, ts.defaults, settings);\n // save initial settings\n c.originalSettings = settings;\n // create a table from data (build table widget)\n if (!table.hasInitialized && ts.buildTable && this.tagName !== 'TABLE') {\n // return the table (in case the original target is the table's container)\n ts.buildTable(table, c);\n } else {\n ts.setup(table, c);\n }\n });\n };\n \n ts.setup = function(table, c) {\n // if no thead or tbody, or tablesorter is already present, quit\n if (!table || !table.tHead || table.tBodies.length === 0 || table.hasInitialized === true) {\n return c.debug ? log('ERROR: stopping initialization! No table, thead, tbody or tablesorter has already been initialized') : '';\n }\n \n var k = '',\n $table = $(table),\n m = $.metadata;\n // initialization flag\n table.hasInitialized = false;\n // table is being processed flag\n table.isProcessing = true;\n // make sure to store the config object\n table.config = c;\n // save the settings where they read\n $.data(table, \"tablesorter\", c);\n if (c.debug) { $.data( table, 'startoveralltimer', new Date()); }\n \n // removing this in version 3 (only supports jQuery 1.7+)\n c.supportsDataObject = (function(version) {\n version[0] = parseInt(version[0], 10);\n return (version[0] > 1) || (version[0] === 1 && parseInt(version[1], 10) >= 4);\n })($.fn.jquery.split(\".\"));\n // digit sort text location; keeping max+/- for backwards compatibility\n c.string = { 'max': 1, 'min': -1, 'emptyMin': 1, 'emptyMax': -1, 'zero': 0, 'none': 0, 'null': 0, 'top': true, 'bottom': false };\n // add table theme class only if there isn't already one there\n if (!/tablesorter\\-/.test($table.attr('class'))) {\n k = (c.theme !== '' ? ' tablesorter-' + c.theme : '');\n }\n c.table = table;\n c.$table = $table\n .addClass(ts.css.table + ' ' + c.tableClass + k)\n .attr('role', 'grid');\n c.$headers = $table.find(c.selectorHeaders);\n \n // give the table a unique id, which will be used in namespace binding\n if (!c.namespace) {\n c.namespace = '.tablesorter' + Math.random().toString(16).slice(2);\n } else {\n // make sure namespace starts with a period & doesn't have weird characters\n c.namespace = '.' + c.namespace.replace(/\\W/g,'');\n }\n \n c.$table.children().children('tr').attr('role', 'row');\n c.$tbodies = $table.children('tbody:not(.' + c.cssInfoBlock + ')').attr({\n 'aria-live' : 'polite',\n 'aria-relevant' : 'all'\n });\n if (c.$table.find('caption').length) {\n c.$table.attr('aria-labelledby', 'theCaption');\n }\n c.widgetInit = {}; // keep a list of initialized widgets\n // change textExtraction via data-attribute\n c.textExtraction = c.$table.attr('data-text-extraction') || c.textExtraction || 'basic';\n // build headers\n buildHeaders(table);\n // fixate columns if the users supplies the fixedWidth option\n // do this after theme has been applied\n fixColumnWidth(table);\n // try to auto detect column type, and store in tables config\n buildParserCache(table);\n // start total row count at zero\n c.totalRows = 0;\n // build the cache for the tbody cells\n // delayInit will delay building the cache until the user starts a sort\n if (!c.delayInit) { buildCache(table); }\n // bind all header events and methods\n ts.bindEvents(table, c.$headers, true);\n bindMethods(table);\n // get sort list from jQuery data or metadata\n // in jQuery < 1.4, an error occurs when calling $table.data()\n if (c.supportsDataObject && typeof $table.data().sortlist !== 'undefined') {\n c.sortList = $table.data().sortlist;\n } else if (m && ($table.metadata() && $table.metadata().sortlist)) {\n c.sortList = $table.metadata().sortlist;\n }\n // apply widget init code\n ts.applyWidget(table, true);\n // if user has supplied a sort list to constructor\n if (c.sortList.length > 0) {\n $table.trigger(\"sorton\", [c.sortList, {}, !c.initWidgets, true]);\n } else {\n setHeadersCss(table);\n if (c.initWidgets) {\n // apply widget format\n ts.applyWidget(table, false);\n }\n }\n \n // show processesing icon\n if (c.showProcessing) {\n $table\n .unbind('sortBegin' + c.namespace + ' sortEnd' + c.namespace)\n .bind('sortBegin' + c.namespace + ' sortEnd' + c.namespace, function(e) {\n clearTimeout(c.processTimer);\n ts.isProcessing(table);\n if (e.type === 'sortBegin') {\n c.processTimer = setTimeout(function(){\n ts.isProcessing(table, true);\n }, 500);\n }\n });\n }\n \n // initialized\n table.hasInitialized = true;\n table.isProcessing = false;\n if (c.debug) {\n ts.benchmark(\"Overall initialization time\", $.data( table, 'startoveralltimer'));\n }\n $table.trigger('tablesorter-initialized', table);\n if (typeof c.initialized === 'function') { c.initialized(table); }\n };\n \n ts.getColumnData = function(table, obj, indx, getCell){\n if (typeof obj === 'undefined' || obj === null) { return; }\n table = $(table)[0];\n var result, $h, k,\n c = table.config;\n if (obj[indx]) {\n return getCell ? obj[indx] : obj[c.$headers.index( c.$headers.filter('[data-column=\"' + indx + '\"]:last') )];\n }\n for (k in obj) {\n if (typeof k === 'string') {\n if (getCell) {\n // get header cell\n $h = c.$headers.eq(indx).filter(k);\n } else {\n // get column indexed cell\n $h = c.$headers.filter('[data-column=\"' + indx + '\"]:last').filter(k);\n }\n if ($h.length) {\n return obj[k];\n }\n }\n }\n return result;\n };\n \n // computeTableHeaderCellIndexes from:\n // http://www.javascripttoolbox.com/lib/table/examples.php\n // http://www.javascripttoolbox.com/temp/table_cellindex.html\n ts.computeColumnIndex = function(trs) {\n var matrix = [],\n lookup = {},\n cols = 0, // determine the number of columns\n i, j, k, l, $cell, cell, cells, rowIndex, cellId, rowSpan, colSpan, firstAvailCol, matrixrow;\n for (i = 0; i < trs.length; i++) {\n cells = trs[i].cells;\n for (j = 0; j < cells.length; j++) {\n cell = cells[j];\n $cell = $(cell);\n rowIndex = cell.parentNode.rowIndex;\n cellId = rowIndex + \"-\" + $cell.index();\n rowSpan = cell.rowSpan || 1;\n colSpan = cell.colSpan || 1;\n if (typeof(matrix[rowIndex]) === \"undefined\") {\n matrix[rowIndex] = [];\n }\n // Find first available column in the first row\n for (k = 0; k < matrix[rowIndex].length + 1; k++) {\n if (typeof(matrix[rowIndex][k]) === \"undefined\") {\n firstAvailCol = k;\n break;\n }\n }\n lookup[cellId] = firstAvailCol;\n cols = Math.max(firstAvailCol, cols);\n // add data-column\n $cell.attr({ 'data-column' : firstAvailCol }); // 'data-row' : rowIndex\n for (k = rowIndex; k < rowIndex + rowSpan; k++) {\n if (typeof(matrix[k]) === \"undefined\") {\n matrix[k] = [];\n }\n matrixrow = matrix[k];\n for (l = firstAvailCol; l < firstAvailCol + colSpan; l++) {\n matrixrow[l] = \"x\";\n }\n }\n }\n }\n // may not be accurate if # header columns !== # tbody columns\n return cols + 1; // add one because it's a zero-based index\n };\n \n // *** Process table ***\n // add processing indicator\n ts.isProcessing = function(table, toggle, $ths) {\n table = $(table);\n var c = table[0].config,\n // default to all headers\n $h = $ths || table.find('.' + ts.css.header);\n if (toggle) {\n // don't use sortList if custom $ths used\n if (typeof $ths !== 'undefined' && c.sortList.length > 0) {\n // get headers from the sortList\n $h = $h.filter(function(){\n // get data-column from attr to keep compatibility with jQuery 1.2.6\n return this.sortDisabled ? false : ts.isValueInArray( parseFloat($(this).attr('data-column')), c.sortList) >= 0;\n });\n }\n table.add($h).addClass(ts.css.processing + ' ' + c.cssProcessing);\n } else {\n table.add($h).removeClass(ts.css.processing + ' ' + c.cssProcessing);\n }\n };\n \n // detach tbody but save the position\n // don't use tbody because there are portions that look for a tbody index (updateCell)\n ts.processTbody = function(table, $tb, getIt){\n table = $(table)[0];\n var holdr;\n if (getIt) {\n table.isProcessing = true;\n $tb.before('<span class=\"tablesorter-savemyplace\"/>');\n holdr = ($.fn.detach) ? $tb.detach() : $tb.remove();\n return holdr;\n }\n holdr = $(table).find('span.tablesorter-savemyplace');\n $tb.insertAfter( holdr );\n holdr.remove();\n table.isProcessing = false;\n };\n \n ts.clearTableBody = function(table) {\n $(table)[0].config.$tbodies.children().detach();\n };\n \n ts.bindEvents = function(table, $headers, core){\n table = $(table)[0];\n var downTime,\n c = table.config;\n if (core !== true) {\n c.$extraHeaders = c.$extraHeaders ? c.$extraHeaders.add($headers) : $headers;\n }\n // apply event handling to headers and/or additional headers (stickyheaders, scroller, etc)\n $headers\n // http://stackoverflow.com/questions/5312849/jquery-find-self;\n .find(c.selectorSort).add( $headers.filter(c.selectorSort) )\n .unbind('mousedown mouseup sort keyup '.split(' ').join(c.namespace + ' '))\n .bind('mousedown mouseup sort keyup '.split(' ').join(c.namespace + ' '), function(e, external) {\n var cell, type = e.type;\n // only recognize left clicks or enter\n if ( ((e.which || e.button) !== 1 && !/sort|keyup/.test(type)) || (type === 'keyup' && e.which !== 13) ) {\n return;\n }\n // ignore long clicks (prevents resizable widget from initializing a sort)\n if (type === 'mouseup' && external !== true && (new Date().getTime() - downTime > 250)) { return; }\n // set timer on mousedown\n if (type === 'mousedown') {\n downTime = new Date().getTime();\n return /(input|select|button|textarea)/i.test(e.target.tagName) ? '' : !c.cancelSelection;\n }\n if (c.delayInit && isEmptyObject(c.cache)) { buildCache(table); }\n // jQuery v1.2.6 doesn't have closest()\n cell = $.fn.closest ? $(this).closest('th, td')[0] : /TH|TD/.test(this.tagName) ? this : $(this).parents('th, td')[0];\n // reference original table headers and find the same cell\n cell = c.$headers[ $headers.index( cell ) ];\n if (!cell.sortDisabled) {\n initSort(table, cell, e);\n }\n });\n if (c.cancelSelection) {\n // cancel selection\n $headers\n .attr('unselectable', 'on')\n .bind('selectstart', false)\n .css({\n 'user-select': 'none',\n 'MozUserSelect': 'none' // not needed for jQuery 1.8+\n });\n }\n };\n \n // restore headers\n ts.restoreHeaders = function(table){\n var c = $(table)[0].config;\n // don't use c.$headers here in case header cells were swapped\n c.$table.find(c.selectorHeaders).each(function(i){\n // only restore header cells if it is wrapped\n // because this is also used by the updateAll method\n if ($(this).find('.' + ts.css.headerIn).length){\n $(this).html( c.headerContent[i] );\n }\n });\n };\n \n ts.destroy = function(table, removeClasses, callback){\n table = $(table)[0];\n if (!table.hasInitialized) { return; }\n // remove all widgets\n ts.refreshWidgets(table, true, true);\n var $t = $(table), c = table.config,\n $h = $t.find('thead:first'),\n $r = $h.find('tr.' + ts.css.headerRow).removeClass(ts.css.headerRow + ' ' + c.cssHeaderRow),\n $f = $t.find('tfoot:first > tr').children('th, td');\n if (removeClasses === false && $.inArray('uitheme', c.widgets) >= 0) {\n // reapply uitheme classes, in case we want to maintain appearance\n $t.trigger('applyWidgetId', ['uitheme']);\n $t.trigger('applyWidgetId', ['zebra']);\n }\n // remove widget added rows, just in case\n $h.find('tr').not($r).remove();\n // disable tablesorter\n $t\n .removeData('tablesorter')\n .unbind('sortReset update updateAll updateRows updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd resetToLoadState '.split(' ').join(c.namespace + ' '));\n c.$headers.add($f)\n .removeClass( [ts.css.header, c.cssHeader, c.cssAsc, c.cssDesc, ts.css.sortAsc, ts.css.sortDesc, ts.css.sortNone].join(' ') )\n .removeAttr('data-column')\n .removeAttr('aria-label')\n .attr('aria-disabled', 'true');\n $r.find(c.selectorSort).unbind('mousedown mouseup keypress '.split(' ').join(c.namespace + ' '));\n ts.restoreHeaders(table);\n $t.toggleClass(ts.css.table + ' ' + c.tableClass + ' tablesorter-' + c.theme, removeClasses === false);\n // clear flag in case the plugin is initialized again\n table.hasInitialized = false;\n delete table.config.cache;\n if (typeof callback === 'function') {\n callback(table);\n }\n };\n \n // *** sort functions ***\n // regex used in natural sort\n ts.regex = {\n chunk : /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi, // chunk/tokenize numbers & letters\n chunks: /(^\\\\0|\\\\0$)/, // replace chunks @ ends\n hex: /^0x[0-9a-f]+$/i // hex\n };\n \n // Natural sort - https://github.com/overset/javascript-natural-sort (date sorting removed)\n // this function will only accept strings, or you'll see \"TypeError: undefined is not a function\"\n // I could add a = a.toString(); b = b.toString(); but it'll slow down the sort overall\n ts.sortNatural = function(a, b) {\n if (a === b) { return 0; }\n var xN, xD, yN, yD, xF, yF, i, mx,\n r = ts.regex;\n // first try and sort Hex codes\n if (r.hex.test(b)) {\n xD = parseInt(a.match(r.hex), 16);\n yD = parseInt(b.match(r.hex), 16);\n if ( xD < yD ) { return -1; }\n if ( xD > yD ) { return 1; }\n }\n // chunk/tokenize\n xN = a.replace(r.chunk, '\\\\0$1\\\\0').replace(r.chunks, '').split('\\\\0');\n yN = b.replace(r.chunk, '\\\\0$1\\\\0').replace(r.chunks, '').split('\\\\0');\n mx = Math.max(xN.length, yN.length);\n // natural sorting through split numeric strings and default strings\n for (i = 0; i < mx; i++) {\n // find floats not starting with '0', string or 0 if not defined\n xF = isNaN(xN[i]) ? xN[i] || 0 : parseFloat(xN[i]) || 0;\n yF = isNaN(yN[i]) ? yN[i] || 0 : parseFloat(yN[i]) || 0;\n // handle numeric vs string comparison - number < string - (Kyle Adams)\n if (isNaN(xF) !== isNaN(yF)) { return (isNaN(xF)) ? 1 : -1; }\n // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\n if (typeof xF !== typeof yF) {\n xF += '';\n yF += '';\n }\n if (xF < yF) { return -1; }\n if (xF > yF) { return 1; }\n }\n return 0;\n };\n \n ts.sortNaturalAsc = function(a, b, col, table, c) {\n if (a === b) { return 0; }\n var e = c.string[ (c.empties[col] || c.emptyTo ) ];\n if (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : -e || -1; }\n if (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : e || 1; }\n return ts.sortNatural(a, b);\n };\n \n ts.sortNaturalDesc = function(a, b, col, table, c) {\n if (a === b) { return 0; }\n var e = c.string[ (c.empties[col] || c.emptyTo ) ];\n if (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : e || 1; }\n if (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : -e || -1; }\n return ts.sortNatural(b, a);\n };\n \n // basic alphabetical sort\n ts.sortText = function(a, b) {\n return a > b ? 1 : (a < b ? -1 : 0);\n };\n \n // return text string value by adding up ascii value\n // so the text is somewhat sorted when using a digital sort\n // this is NOT an alphanumeric sort\n ts.getTextValue = function(a, num, mx) {\n if (mx) {\n // make sure the text value is greater than the max numerical value (mx)\n var i, l = a ? a.length : 0, n = mx + num;\n for (i = 0; i < l; i++) {\n n += a.charCodeAt(i);\n }\n return num * n;\n }\n return 0;\n };\n \n ts.sortNumericAsc = function(a, b, num, mx, col, table) {\n if (a === b) { return 0; }\n var c = table.config,\n e = c.string[ (c.empties[col] || c.emptyTo ) ];\n if (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : -e || -1; }\n if (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : e || 1; }\n if (isNaN(a)) { a = ts.getTextValue(a, num, mx); }\n if (isNaN(b)) { b = ts.getTextValue(b, num, mx); }\n return a - b;\n };\n \n ts.sortNumericDesc = function(a, b, num, mx, col, table) {\n if (a === b) { return 0; }\n var c = table.config,\n e = c.string[ (c.empties[col] || c.emptyTo ) ];\n if (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : e || 1; }\n if (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : -e || -1; }\n if (isNaN(a)) { a = ts.getTextValue(a, num, mx); }\n if (isNaN(b)) { b = ts.getTextValue(b, num, mx); }\n return b - a;\n };\n \n ts.sortNumeric = function(a, b) {\n return a - b;\n };\n \n // used when replacing accented characters during sorting\n ts.characterEquivalents = {\n \"a\" : \"\\u00e1\\u00e0\\u00e2\\u00e3\\u00e4\\u0105\\u00e5\", // áà âãäąå\n \"A\" : \"\\u00c1\\u00c0\\u00c2\\u00c3\\u00c4\\u0104\\u00c5\", // ÃÀÂÃÄĄÅ\n \"c\" : \"\\u00e7\\u0107\\u010d\", // çćÄ\n \"C\" : \"\\u00c7\\u0106\\u010c\", // ÇĆČ\n \"e\" : \"\\u00e9\\u00e8\\u00ea\\u00eb\\u011b\\u0119\", // éèêëěę\n \"E\" : \"\\u00c9\\u00c8\\u00ca\\u00cb\\u011a\\u0118\", // ÉÈÊËĚĘ\n \"i\" : \"\\u00ed\\u00ec\\u0130\\u00ee\\u00ef\\u0131\", // Ãìİîïı\n \"I\" : \"\\u00cd\\u00cc\\u0130\\u00ce\\u00cf\", // ÃÌİÎÃ\n \"o\" : \"\\u00f3\\u00f2\\u00f4\\u00f5\\u00f6\", // óòôõö\n \"O\" : \"\\u00d3\\u00d2\\u00d4\\u00d5\\u00d6\", // ÓÒÔÕÖ\n \"ss\": \"\\u00df\", // ß (s sharp)\n \"SS\": \"\\u1e9e\", // ẞ (Capital sharp s)\n \"u\" : \"\\u00fa\\u00f9\\u00fb\\u00fc\\u016f\", // úùûüů\n \"U\" : \"\\u00da\\u00d9\\u00db\\u00dc\\u016e\" // ÚÙÛÜŮ\n };\n ts.replaceAccents = function(s) {\n var a, acc = '[', eq = ts.characterEquivalents;\n if (!ts.characterRegex) {\n ts.characterRegexArray = {};\n for (a in eq) {\n if (typeof a === 'string') {\n acc += eq[a];\n ts.characterRegexArray[a] = new RegExp('[' + eq[a] + ']', 'g');\n }\n }\n ts.characterRegex = new RegExp(acc + ']');\n }\n if (ts.characterRegex.test(s)) {\n for (a in eq) {\n if (typeof a === 'string') {\n s = s.replace( ts.characterRegexArray[a], a );\n }\n }\n }\n return s;\n };\n \n // *** utilities ***\n ts.isValueInArray = function(column, arry) {\n var indx, len = arry.length;\n for (indx = 0; indx < len; indx++) {\n if (arry[indx][0] === column) {\n return indx;\n }\n }\n return -1;\n };\n \n ts.addParser = function(parser) {\n var i, l = ts.parsers.length, a = true;\n for (i = 0; i < l; i++) {\n if (ts.parsers[i].id.toLowerCase() === parser.id.toLowerCase()) {\n a = false;\n }\n }\n if (a) {\n ts.parsers.push(parser);\n }\n };\n \n ts.getParserById = function(name) {\n /*jshint eqeqeq:false */\n if (name == 'false') { return false; }\n var i, l = ts.parsers.length;\n for (i = 0; i < l; i++) {\n if (ts.parsers[i].id.toLowerCase() === (name.toString()).toLowerCase()) {\n return ts.parsers[i];\n }\n }\n return false;\n };\n \n ts.addWidget = function(widget) {\n ts.widgets.push(widget);\n };\n \n ts.hasWidget = function(table, name){\n table = $(table);\n return table.length && table[0].config && table[0].config.widgetInit[name] || false;\n };\n \n ts.getWidgetById = function(name) {\n var i, w, l = ts.widgets.length;\n for (i = 0; i < l; i++) {\n w = ts.widgets[i];\n if (w && w.hasOwnProperty('id') && w.id.toLowerCase() === name.toLowerCase()) {\n return w;\n }\n }\n };\n \n ts.applyWidget = function(table, init) {\n table = $(table)[0]; // in case this is called externally\n var c = table.config,\n wo = c.widgetOptions,\n widgets = [],\n time, w, wd;\n // prevent numerous consecutive widget applications\n if (init !== false && table.hasInitialized && (table.isApplyingWidgets || table.isUpdating)) { return; }\n if (c.debug) { time = new Date(); }\n if (c.widgets.length) {\n table.isApplyingWidgets = true;\n // ensure unique widget ids\n c.widgets = $.grep(c.widgets, function(v, k){\n return $.inArray(v, c.widgets) === k;\n });\n // build widget array & add priority as needed\n $.each(c.widgets || [], function(i,n){\n wd = ts.getWidgetById(n);\n if (wd && wd.id) {\n // set priority to 10 if not defined\n if (!wd.priority) { wd.priority = 10; }\n widgets[i] = wd;\n }\n });\n // sort widgets by priority\n widgets.sort(function(a, b){\n return a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1;\n });\n // add/update selected widgets\n $.each(widgets, function(i,w){\n if (w) {\n if (init || !(c.widgetInit[w.id])) {\n // set init flag first to prevent calling init more than once (e.g. pager)\n c.widgetInit[w.id] = true;\n if (w.hasOwnProperty('options')) {\n wo = table.config.widgetOptions = $.extend( true, {}, w.options, wo );\n }\n if (w.hasOwnProperty('init')) {\n w.init(table, w, c, wo);\n }\n }\n if (!init && w.hasOwnProperty('format')) {\n w.format(table, c, wo, false);\n }\n }\n });\n }\n setTimeout(function(){\n table.isApplyingWidgets = false;\n }, 0);\n if (c.debug) {\n w = c.widgets.length;\n benchmark(\"Completed \" + (init === true ? \"initializing \" : \"applying \") + w + \" widget\" + (w !== 1 ? \"s\" : \"\"), time);\n }\n };\n \n ts.refreshWidgets = function(table, doAll, dontapply) {\n table = $(table)[0]; // see issue #243\n var i, c = table.config,\n cw = c.widgets,\n w = ts.widgets, l = w.length;\n // remove previous widgets\n for (i = 0; i < l; i++){\n if ( w[i] && w[i].id && (doAll || $.inArray( w[i].id, cw ) < 0) ) {\n if (c.debug) { log( 'Refeshing widgets: Removing \"' + w[i].id + '\"' ); }\n // only remove widgets that have been initialized - fixes #442\n if (w[i].hasOwnProperty('remove') && c.widgetInit[w[i].id]) {\n w[i].remove(table, c, c.widgetOptions);\n c.widgetInit[w[i].id] = false;\n }\n }\n }\n if (dontapply !== true) {\n ts.applyWidget(table, doAll);\n }\n };\n \n // get sorter, string, empty, etc options for each column from\n // jQuery data, metadata, header option or header class name (\"sorter-false\")\n // priority = jQuery data > meta > headers option > header class name\n ts.getData = function(h, ch, key) {\n var val = '', $h = $(h), m, cl;\n if (!$h.length) { return ''; }\n m = $.metadata ? $h.metadata() : false;\n cl = ' ' + ($h.attr('class') || '');\n if (typeof $h.data(key) !== 'undefined' || typeof $h.data(key.toLowerCase()) !== 'undefined'){\n // \"data-lockedOrder\" is assigned to \"lockedorder\"; but \"data-locked-order\" is assigned to \"lockedOrder\"\n // \"data-sort-initial-order\" is assigned to \"sortInitialOrder\"\n val += $h.data(key) || $h.data(key.toLowerCase());\n } else if (m && typeof m[key] !== 'undefined') {\n val += m[key];\n } else if (ch && typeof ch[key] !== 'undefined') {\n val += ch[key];\n } else if (cl !== ' ' && cl.match(' ' + key + '-')) {\n // include sorter class name \"sorter-text\", etc; now works with \"sorter-my-custom-parser\"\n val = cl.match( new RegExp('\\\\s' + key + '-([\\\\w-]+)') )[1] || '';\n }\n return $.trim(val);\n };\n \n ts.formatFloat = function(s, table) {\n if (typeof s !== 'string' || s === '') { return s; }\n // allow using formatFloat without a table; defaults to US number format\n var i,\n t = table && table.config ? table.config.usNumberFormat !== false :\n typeof table !== \"undefined\" ? table : true;\n if (t) {\n // US Format - 1,234,567.89 -> 1234567.89\n s = s.replace(/,/g,'');\n } else {\n // German Format = 1.234.567,89 -> 1234567.89\n // French Format = 1 234 567,89 -> 1234567.89\n s = s.replace(/[\\s|\\.]/g,'').replace(/,/g,'.');\n }\n if(/^\\s*\\([.\\d]+\\)/.test(s)) {\n // make (#) into a negative number -> (10) = -10\n s = s.replace(/^\\s*\\(([.\\d]+)\\)/, '-$1');\n }\n i = parseFloat(s);\n // return the text instead of zero\n return isNaN(i) ? $.trim(s) : i;\n };\n \n ts.isDigit = function(s) {\n // replace all unwanted chars and match\n return isNaN(s) ? (/^[\\-+(]?\\d+[)]?$/).test(s.toString().replace(/[,.'\"\\s]/g, '')) : true;\n };\n \n }()\n });\n \n // make shortcut\n var ts = $.tablesorter;\n \n // extend plugin scope\n $.fn.extend({\n tablesorter: ts.construct\n });\n \n // add default parsers\n ts.addParser({\n id: 'no-parser',\n is: function() {\n return false;\n },\n format: function() {\n return '';\n },\n type: 'text'\n });\n \n ts.addParser({\n id: \"text\",\n is: function() {\n return true;\n },\n format: function(s, table) {\n var c = table.config;\n if (s) {\n s = $.trim( c.ignoreCase ? s.toLocaleLowerCase() : s );\n s = c.sortLocaleCompare ? ts.replaceAccents(s) : s;\n }\n return s;\n },\n type: \"text\"\n });\n \n ts.addParser({\n id: \"digit\",\n is: function(s) {\n return ts.isDigit(s);\n },\n format: function(s, table) {\n var n = ts.formatFloat((s || '').replace(/[^\\w,. \\-()]/g, \"\"), table);\n return s && typeof n === 'number' ? n : s ? $.trim( s && table.config.ignoreCase ? s.toLocaleLowerCase() : s ) : s;\n },\n type: \"numeric\"\n });\n \n ts.addParser({\n id: \"currency\",\n is: function(s) {\n return (/^\\(?\\d+[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]|[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]\\d+\\)?$/).test((s || '').replace(/[+\\-,. ]/g,'')); // £$€¤¥¢\n },\n format: function(s, table) {\n var n = ts.formatFloat((s || '').replace(/[^\\w,. \\-()]/g, \"\"), table);\n return s && typeof n === 'number' ? n : s ? $.trim( s && table.config.ignoreCase ? s.toLocaleLowerCase() : s ) : s;\n },\n type: \"numeric\"\n });\n \n ts.addParser({\n id: \"ipAddress\",\n is: function(s) {\n return (/^\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}$/).test(s);\n },\n format: function(s, table) {\n var i, a = s ? s.split(\".\") : '',\n r = \"\",\n l = a.length;\n for (i = 0; i < l; i++) {\n r += (\"00\" + a[i]).slice(-3);\n }\n return s ? ts.formatFloat(r, table) : s;\n },\n type: \"numeric\"\n });\n \n ts.addParser({\n id: \"url\",\n is: function(s) {\n return (/^(https?|ftp|file):\\/\\//).test(s);\n },\n format: function(s) {\n return s ? $.trim(s.replace(/(https?|ftp|file):\\/\\//, '')) : s;\n },\n type: \"text\"\n });\n \n ts.addParser({\n id: \"isoDate\",\n is: function(s) {\n return (/^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}/).test(s);\n },\n format: function(s, table) {\n return s ? ts.formatFloat((s !== \"\") ? (new Date(s.replace(/-/g, \"/\")).getTime() || s) : \"\", table) : s;\n },\n type: \"numeric\"\n });\n \n ts.addParser({\n id: \"percent\",\n is: function(s) {\n return (/(\\d\\s*?%|%\\s*?\\d)/).test(s) && s.length < 15;\n },\n format: function(s, table) {\n return s ? ts.formatFloat(s.replace(/%/g, \"\"), table) : s;\n },\n type: \"numeric\"\n });\n \n ts.addParser({\n id: \"usLongDate\",\n is: function(s) {\n // two digit years are not allowed cross-browser\n // Jan 01, 2013 12:34:56 PM or 01 Jan 2013\n return (/^[A-Z]{3,10}\\.?\\s+\\d{1,2},?\\s+(\\d{4})(\\s+\\d{1,2}:\\d{2}(:\\d{2})?(\\s+[AP]M)?)?$/i).test(s) || (/^\\d{1,2}\\s+[A-Z]{3,10}\\s+\\d{4}/i).test(s);\n },\n format: function(s, table) {\n return s ? ts.formatFloat( (new Date(s.replace(/(\\S)([AP]M)$/i, \"$1 $2\")).getTime() || s), table) : s;\n },\n type: \"numeric\"\n });\n \n ts.addParser({\n id: \"shortDate\", // \"mmddyyyy\", \"ddmmyyyy\" or \"yyyymmdd\"\n is: function(s) {\n // testing for ##-##-#### or ####-##-##, so it's not perfect; time can be included\n return (/(^\\d{1,2}[\\/\\s]\\d{1,2}[\\/\\s]\\d{4})|(^\\d{4}[\\/\\s]\\d{1,2}[\\/\\s]\\d{1,2})/).test((s || '').replace(/\\s+/g,\" \").replace(/[\\-.,]/g, \"/\"));\n },\n format: function(s, table, cell, cellIndex) {\n if (s) {\n var c = table.config,\n ci = c.$headers.filter('[data-column=' + cellIndex + ']:last'),\n format = ci.length && ci[0].dateFormat || ts.getData( ci, ts.getColumnData( table, c.headers, cellIndex ), 'dateFormat') || c.dateFormat;\n s = s.replace(/\\s+/g,\" \").replace(/[\\-.,]/g, \"/\"); // escaped - because JSHint in Firefox was showing it as an error\n if (format === \"mmddyyyy\") {\n s = s.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/, \"$3/$1/$2\");\n } else if (format === \"ddmmyyyy\") {\n s = s.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/, \"$3/$2/$1\");\n } else if (format === \"yyyymmdd\") {\n s = s.replace(/(\\d{4})[\\/\\s](\\d{1,2})[\\/\\s](\\d{1,2})/, \"$1/$2/$3\");\n }\n }\n return s ? ts.formatFloat( (new Date(s).getTime() || s), table) : s;\n },\n type: \"numeric\"\n });\n \n ts.addParser({\n id: \"time\",\n is: function(s) {\n return (/^(([0-2]?\\d:[0-5]\\d)|([0-1]?\\d:[0-5]\\d\\s?([AP]M)))$/i).test(s);\n },\n format: function(s, table) {\n return s ? ts.formatFloat( (new Date(\"2000/01/01 \" + s.replace(/(\\S)([AP]M)$/i, \"$1 $2\")).getTime() || s), table) : s;\n },\n type: \"numeric\"\n });\n \n ts.addParser({\n id: \"metadata\",\n is: function() {\n return false;\n },\n format: function(s, table, cell) {\n var c = table.config,\n p = (!c.parserMetadataName) ? 'sortValue' : c.parserMetadataName;\n return $(cell).metadata()[p];\n },\n type: \"numeric\"\n });\n \n // add default widgets\n ts.addWidget({\n id: \"zebra\",\n priority: 90,\n format: function(table, c, wo) {\n var $tb, $tv, $tr, row, even, time, k, l,\n child = new RegExp(c.cssChildRow, 'i'),\n b = c.$tbodies;\n if (c.debug) {\n time = new Date();\n }\n for (k = 0; k < b.length; k++ ) {\n // loop through the visible rows\n $tb = b.eq(k);\n l = $tb.children('tr').length;\n if (l > 1) {\n row = 0;\n $tv = $tb.children('tr:visible').not(c.selectorRemove);\n // revered back to using jQuery each - strangely it's the fastest method\n /*jshint loopfunc:true */\n $tv.each(function(){\n $tr = $(this);\n // style children rows the same way the parent row was styled\n if (!child.test(this.className)) { row++; }\n even = (row % 2 === 0);\n $tr.removeClass(wo.zebra[even ? 1 : 0]).addClass(wo.zebra[even ? 0 : 1]);\n });\n }\n }\n if (c.debug) {\n ts.benchmark(\"Applying Zebra widget\", time);\n }\n },\n remove: function(table, c, wo){\n var k, $tb,\n b = c.$tbodies,\n rmv = (wo.zebra || [ \"even\", \"odd\" ]).join(' ');\n for (k = 0; k < b.length; k++ ){\n $tb = $.tablesorter.processTbody(table, b.eq(k), true); // remove tbody\n $tb.children().removeClass(rmv);\n $.tablesorter.processTbody(table, $tb, false); // restore tbody\n }\n }\n });\n \n })(jQuery);\n \n return module.exports;\n}).call(this);\n// src/js/aui/tables-sortable.js\n(typeof window === 'undefined' ? global : window).__d7e65d51e9473339d5164fafb9c99a16 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n __5115c324962984eb34b4f86a44067f93;\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var DEFAULT_SORT_OPTIONS = {\n sortMultiSortKey: '',\n headers: {},\n debug: false,\n tabIndex: false\n };\n \n function sortTable($table) {\n var options = DEFAULT_SORT_OPTIONS;\n $table.find('th').each(function (index, header) {\n \n var $header = (0, _jquery2.default)(header);\n options.headers[index] = {};\n if ($header.hasClass('aui-table-column-unsortable')) {\n options.headers[index].sorter = false;\n } else {\n $header.attr('tabindex', '0');\n $header.wrapInner(\"<span class='aui-table-header-content'/>\");\n if ($header.hasClass('aui-table-column-issue-key')) {\n options.headers[index].sorter = 'issue-key';\n }\n }\n });\n $table.tablesorter(options);\n }\n \n var tablessortable = {\n setup: function setup() {\n \n /*\n This parser is used for issue keys in the format <PROJECT_KEY>-<ISSUE_NUMBER>, where <PROJECT_KEY> is a maximum\n 10 character string with characters(A-Z). Assumes that issue number is no larger than 999,999. e.g. not more\n than a million issues.\n This pads the issue key to allow for proper string sorting so that the project key is always 10 characters and the\n issue number is always 6 digits. e.g. it appends the project key '.' until it is 10 characters long and prepends 0\n so that the issue number is 6 digits long. e.g. CONF-102 == CONF......000102. This is to allow proper string sorting.\n */\n _jquery2.default.tablesorter.addParser({\n id: 'issue-key',\n is: function is() {\n return false;\n },\n \n format: function format(s) {\n var keyComponents = s.split('-');\n var projectKey = keyComponents[0];\n var issueNumber = keyComponents[1];\n \n var PROJECT_KEY_TEMPLATE = '..........';\n var ISSUE_NUMBER_TEMPLATE = '000000';\n var stringRepresentation = (projectKey + PROJECT_KEY_TEMPLATE).slice(0, PROJECT_KEY_TEMPLATE.length);\n stringRepresentation += (ISSUE_NUMBER_TEMPLATE + issueNumber).slice(-ISSUE_NUMBER_TEMPLATE.length);\n \n return stringRepresentation;\n },\n \n type: 'text'\n });\n \n /*\n Text parser that uses the data-sort-value attribute for sorting if it is set and data-sort-type is not set\n or set to 'text'.\n */\n _jquery2.default.tablesorter.addParser({\n id: 'textSortAttributeParser',\n is: function is(nodeValue, table, node) {\n return node.hasAttribute('data-sort-value') && (!node.hasAttribute('data-sort-type') || node.getAttribute('data-sort-type') === 'text');\n },\n format: function format(nodeValue, table, node, offset) {\n return node.getAttribute('data-sort-value');\n },\n type: 'text'\n });\n \n /*\n Numeric parser that uses the data-sort-value attribute for sorting if it is set and data-sort-type is set\n to 'numeric'.\n */\n _jquery2.default.tablesorter.addParser({\n id: 'numericSortAttributeParser',\n is: function is(nodeValue, table, node) {\n return node.getAttribute('data-sort-type') === 'numeric' && node.hasAttribute('data-sort-value');\n },\n format: function format(nodeValue, table, node, offset) {\n return node.getAttribute('data-sort-value');\n },\n type: 'numeric'\n });\n \n (0, _jquery2.default)('.aui-table-sortable').each(function () {\n sortTable((0, _jquery2.default)(this));\n });\n },\n \n setTableSortable: function setTableSortable($table) {\n sortTable($table);\n }\n };\n \n (0, _jquery2.default)(tablessortable.setup);\n \n (0, _globalize2.default)('tablessortable', tablessortable);\n \n exports.default = tablessortable;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui/tipsy.js\n(typeof window === 'undefined' ? global : window).__a9e4a729adf5f5caa916283136db865e = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n __6492faf4ee244aaf97c0784c457d08ae;\n \n return module.exports;\n}).call(this);\n// src/js/aui/toggle.js\n(typeof window === 'undefined' ? global : window).__82cf746a7b34a88ac05b7d7522ee9696 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n __cfdf267b6fbf78d55c9426e604b18f15;\n \n var _attributes = __47153a78b0936470f7ca1127e29a148c;\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _enforcer = __fcef6c85f04d040b520e6625d1397941;\n \n var _enforcer2 = _interopRequireDefault(_enforcer);\n \n var _skatejsTemplateHtml = __16b630aaa86c62c7ef629cfa7bab499e;\n \n var _skatejsTemplateHtml2 = _interopRequireDefault(_skatejsTemplateHtml);\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n var _constants = __1093885dd5cd006c191f1952eec9f3f5;\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n function getInput(element) {\n return element._input || (element._input = element.querySelector('input'));\n }\n \n function removedAttributeHandler(attributeName, element) {\n getInput(element).removeAttribute(attributeName);\n }\n \n function fallbackAttributeHandler(attributeName, element, change) {\n getInput(element).setAttribute(attributeName, change.newValue);\n }\n \n function getAttributeHandler(attributeName) {\n return {\n removed: removedAttributeHandler.bind(this, attributeName),\n fallback: fallbackAttributeHandler.bind(this, attributeName)\n };\n }\n \n var formAttributeHandler = {\n removed: function removed(element) {\n removedAttributeHandler.call(this, 'form', element);\n element._formId = null;\n },\n fallback: function fallback(element, change) {\n fallbackAttributeHandler.call(this, 'form', element, change);\n element._formId = change.newValue;\n }\n };\n \n var idAttributeHandler = {\n removed: removedAttributeHandler.bind(undefined, 'id'),\n fallback: function fallback(element, change) {\n getInput(element).setAttribute('id', '' + change.newValue + _constants.INPUT_SUFFIX);\n }\n };\n \n var checkedAttributeHandler = {\n removed: function removed(element) {\n removedAttributeHandler.call(this, 'checked', element);\n getInput(element).checked = false;\n },\n fallback: function fallback(element, change) {\n fallbackAttributeHandler.call(this, 'checked', element, change);\n getInput(element).checked = true;\n }\n };\n \n var labelHandler = {\n removed: function removed(element) {\n getInput(element).removeAttribute('aria-label');\n },\n fallback: function fallback(element, change) {\n getInput(element).setAttribute('aria-label', change.newValue);\n }\n };\n \n function clickHandler(element, e) {\n if (!element.disabled && !element.busy && e.target !== element._input) {\n element._input.click();\n }\n (0, _attributes.setBooleanAttribute)(element, 'checked', getInput(element).checked);\n }\n \n function setDisabledForLabels(element, disabled) {\n if (!element.id) {\n return;\n }\n Array.prototype.forEach.call(document.querySelectorAll('aui-label[for=\"' + element.id + '\"]'), function (el) {\n el.disabled = disabled;\n });\n }\n \n /**\n * Workaround to prevent pressing SPACE on busy state.\n * Preventing click event still makes the toggle flip and revert back.\n * So on CSS side, the input has \"pointer-events: none\" on busy state.\n */\n function bindEventsToInput(element) {\n element._input.addEventListener('keydown', function (e) {\n if (element.busy && e.keyCode === AJS.keyCode.SPACE) {\n e.preventDefault();\n }\n });\n // prevent toggle can be trigger through SPACE key on Firefox\n if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {\n element._input.addEventListener('click', function (e) {\n if (element.busy) {\n e.preventDefault();\n }\n });\n }\n }\n \n (0, _skate2.default)('aui-toggle', {\n template: (0, _skatejsTemplateHtml2.default)('<input type=\"checkbox\" class=\"aui-toggle-input\">', '<span class=\"aui-toggle-view\">', '<span class=\"aui-toggle-tick aui-icon aui-icon-small aui-iconfont-success\"></span>', '<span class=\"aui-toggle-cross aui-icon aui-icon-small aui-iconfont-close-dialog\"></span>', '</span>'),\n created: function created(element) {\n element._input = getInput(element); // avoid using _input in attribute handlers\n element._tick = element.querySelector('.aui-toggle-tick');\n element._cross = element.querySelector('.aui-toggle-cross');\n \n (0, _jquery2.default)(element._input).tooltip({\n title: function title() {\n return this.checked ? this.getAttribute('tooltip-on') : this.getAttribute('tooltip-off');\n },\n gravity: 's',\n hoverable: false\n });\n bindEventsToInput(element);\n },\n attached: function attached(element) {\n (0, _enforcer2.default)(element).attributeExists('label');\n },\n events: {\n click: clickHandler\n },\n attributes: {\n id: idAttributeHandler,\n checked: checkedAttributeHandler,\n disabled: getAttributeHandler('disabled'),\n form: formAttributeHandler,\n name: getAttributeHandler('name'),\n value: getAttributeHandler('value'),\n 'tooltip-on': {\n value: AJS.I18n.getText('aui.toggle.on'),\n fallback: function fallback(element, change) {\n getInput(element).setAttribute('tooltip-on', change.newValue || AJS.I18n.getText('aui.toggle.on'));\n }\n },\n 'tooltip-off': {\n value: AJS.I18n.getText('aui.toggle.off'),\n fallback: function fallback(element, change) {\n getInput(element).setAttribute('tooltip-off', change.newValue || AJS.I18n.getText('aui.toggle.off'));\n }\n },\n label: labelHandler\n },\n prototype: {\n focus: function focus() {\n this._input.focus();\n return this;\n },\n get checked() {\n return this._input.checked;\n },\n set checked(value) {\n // Need to explicitly set the property on the checkbox because the\n // checkbox's property doesn't change with it's attribute after it\n // is clicked.\n this._input.checked = value;\n return (0, _attributes.setBooleanAttribute)(this, 'checked', value);\n },\n get disabled() {\n return this._input.disabled;\n },\n set disabled(value) {\n return (0, _attributes.setBooleanAttribute)(this, 'disabled', value);\n },\n get form() {\n return document.getElementById(this._formId);\n },\n set form(value) {\n formAttributeHandler.fallback.call(this, this, { newValue: value || null });\n return this.form;\n },\n get name() {\n return this._input.name;\n },\n set name(value) {\n this.setAttribute('name', value);\n return value;\n },\n get value() {\n return this._input.value;\n },\n set value(value) {\n // Setting the value of an input to null sets it to empty string.\n this.setAttribute('value', value === null ? '' : value);\n return value;\n },\n get busy() {\n return this._input.getAttribute('aria-busy') === 'true';\n },\n set busy(value) {\n (0, _attributes.setBooleanAttribute)(this, 'busy', value);\n if (value) {\n this._input.setAttribute('aria-busy', 'true');\n this._input.indeterminate = true;\n if (this.checked) {\n (0, _jquery2.default)(this._input).addClass('indeterminate-checked');\n (0, _jquery2.default)(this._tick).spin({ zIndex: null });\n } else {\n (0, _jquery2.default)(this._cross).spin({ zIndex: null, color: 'black' });\n }\n } else {\n (0, _jquery2.default)(this._input).removeClass('indeterminate-checked');\n this._input.indeterminate = false;\n this._input.removeAttribute('aria-busy');\n (0, _jquery2.default)(this._cross).spinStop();\n (0, _jquery2.default)(this._tick).spinStop();\n }\n setDisabledForLabels(this, !!value);\n return value;\n }\n }\n });\n \n return module.exports;\n}).call(this);\n// src/js/aui/trigger.js\n(typeof window === 'undefined' ? global : window).__f26768037ab6f29eab9bfa5fefcc1f13 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n var _jquery = __d931c30d7068216ce2c2064d08fd424c;\n \n var _jquery2 = _interopRequireDefault(_jquery);\n \n var _amdify = __be45a6ea1a54cc6fd0d790c9af8bc7fe;\n \n var _amdify2 = _interopRequireDefault(_amdify);\n \n var _skate = __0e8fe5f46f722f07c64d1f183c324dd8;\n \n var _skate2 = _interopRequireDefault(_skate);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n function isNestedAnchor(trigger, target) {\n var $closestAnchor = (0, _jquery2.default)(target).closest('a[href]', trigger);\n return !!$closestAnchor.length && $closestAnchor[0] !== trigger;\n }\n \n function findControlled(trigger) {\n return document.getElementById(trigger.getAttribute('aria-controls'));\n }\n \n function triggerMessage(trigger, e) {\n if (trigger.isEnabled()) {\n var component = findControlled(trigger);\n if (component && component.message) {\n component.message(e);\n }\n }\n }\n \n (0, _skate2.default)('data-aui-trigger', {\n type: _skate2.default.type.ATTRIBUTE,\n events: {\n click: function click(trigger, e) {\n if (!isNestedAnchor(trigger, e.target)) {\n triggerMessage(trigger, e);\n e.preventDefault();\n }\n },\n mouseenter: function mouseenter(trigger, e) {\n triggerMessage(trigger, e);\n },\n mouseleave: function mouseleave(trigger, e) {\n triggerMessage(trigger, e);\n },\n focus: function focus(trigger, e) {\n triggerMessage(trigger, e);\n },\n blur: function blur(trigger, e) {\n triggerMessage(trigger, e);\n }\n },\n prototype: {\n disable: function disable() {\n this.setAttribute('aria-disabled', 'true');\n },\n enable: function enable() {\n this.setAttribute('aria-disabled', 'false');\n },\n isEnabled: function isEnabled() {\n return this.getAttribute('aria-disabled') !== 'true';\n }\n }\n });\n \n (0, _amdify2.default)('aui/trigger');\n \n return module.exports;\n}).call(this);\n// src/js/aui/truncating-progressive-data-set.js\n(typeof window === 'undefined' ? global : window).__0f68046dd5cd267e2d42d1cbf9f84cd6 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n var _globalize = __58c75a0e7e2cf47e300bc2f2ecec24a2;\n \n var _globalize2 = _interopRequireDefault(_globalize);\n \n var _progressiveDataSet = __a03b25e4ce5f598de7c115490c1f7f77;\n \n var _progressiveDataSet2 = _interopRequireDefault(_progressiveDataSet);\n \n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n \n var TruncatingProgressiveDataSet = _progressiveDataSet2.default.extend({\n /**\n * This is a subclass of ProgressiveDataSet. It differs from the superclass\n * in that it works on large data sets where the server truncates results.\n *\n * Rather than determining whether to request more information based on its cache,\n * it uses the size of the response.\n *\n * @example\n * var source = new TruncatingProgressiveDataSet([], {\n * model: Backbone.Model.extend({ idAttribute: \"username\" }),\n * queryEndpoint: \"/jira/rest/latest/users\",\n * queryParamKey: \"username\",\n * matcher: function(model, query) {\n * return _.startsWith(model.get('username'), query);\n * },\n * maxResponseSize: 20\n * });\n * source.on('respond', doStuffWithMatchingResults);\n * source.query('john');\n */\n initialize: function initialize(models, options) {\n this._maxResponseSize = options.maxResponseSize;\n _progressiveDataSet2.default.prototype.initialize.call(this, models, options);\n },\n \n shouldGetMoreResults: function shouldGetMoreResults(results) {\n var response = this.findQueryResponse(this.value);\n return !response || response.length === this._maxResponseSize;\n },\n \n /**\n * Returns the response for the given query.\n *\n * The default implementation assumes that the endpoint's search algorithm is a prefix\n * matcher.\n *\n * @param query the value to find existing responses\n * @return {Object[]} an array of values representing the IDs of the models provided by the response for the given query.\n * Null is returned if no response is found.\n */\n findQueryResponse: function findQueryResponse(query) {\n while (query) {\n var response = this.findQueryCache(query);\n \n if (response) {\n return response;\n }\n \n query = query.substr(0, query.length - 1);\n }\n \n return null;\n }\n });\n \n (0, _globalize2.default)('TruncatingProgressiveDataSet', TruncatingProgressiveDataSet);\n \n exports.default = TruncatingProgressiveDataSet;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);\n// src/js/aui-experimental.js\n(typeof window === 'undefined' ? global : window).__bd8f38483ec276269c4239c27d27bae4 = (function () {\n var module = {\n exports: {}\n };\n var exports = module.exports;\n \n 'use strict';\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \n __d43bb5bbcba9370c1cd18a8f0b57292c;\n \n __609f21323c567295806a2ec47cc10ec5;\n \n __1adf9c254cbd3d35b8e8f9ab44be8819;\n \n __4975dba2b21736f125d2d31f5fb32772;\n \n __38870a60a3b38ce21890fdbd6f0a0c3f;\n \n __c30b0586d036f99efe41f2c93d89100e;\n \n __06f55795e224cd10740a8237fd449032;\n \n __9add8c98b7cba85765bc8e5d14372105;\n \n __039ddb3cd0d125fa3fd993d48f3f61d9;\n \n __909352e3355986f377ab7bfb75023fbf;\n \n __a03b25e4ce5f598de7c115490c1f7f77;\n \n __665570ba732d53931c48c1932daa79b3;\n \n __2b21d3fff14905e110654619a006c7cb;\n \n __e3fbbf890609b6db46a82b7be9126574;\n \n __356ffd37129515ca6816aae037e6b597;\n \n __42cebde5118ca832014cf5271dd03f11;\n \n __51fb4aac01a40562c0d0d0767cafdf66;\n \n __e01367eebdfe37c1d4b306c91a5d969c;\n \n __cfdf267b6fbf78d55c9426e604b18f15;\n \n __d7e65d51e9473339d5164fafb9c99a16;\n \n __a9e4a729adf5f5caa916283136db865e;\n \n __82cf746a7b34a88ac05b7d7522ee9696;\n \n __e689aa744aa5d955e83ea261c152658e;\n \n __f26768037ab6f29eab9bfa5fefcc1f13;\n \n __0f68046dd5cd267e2d42d1cbf9f84cd6;\n \n exports.default = window.AJS;\n module.exports = exports['default'];\n \n return module.exports;\n}).call(this);"],"names":["___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","___EXPOSE_LOADER_IMPORT_MODULE_LOCAL_NAME___","Spinner","module","exports","globalThis","g","this","Function","e","window","self","__d43bb5bbcba9370c1cd18a8f0b57292c","_jquery2","_interopRequireDefault","__d931c30d7068216ce2c2064d08fd424c","_skate2","__0e8fe5f46f722f07c64d1f183c324dd8","obj","__esModule","default","applyDefaultText","input","String","value","trim","length","getAttribute","addClass","document","createElement","type","ATTRIBUTE","events","blur","focus","removeClass","created","call","__609f21323c567295806a2ec47cc10ec5","Object","defineProperty","_animation","__f6a37357e17b1533fdd5dde2eaedcc72","_amdify2","__be45a6ea1a54cc6fd0d790c9af8bc7fe","_globalize2","__58c75a0e7e2cf47e300bc2f2ecec24a2","_template2","__3773bbd056232d2fe3825056a334a52f","ID_BANNER_CONTAINER","banner","options","$banner","fill","body","toString","renderBannerElement","findContainer","find","get","forEach","remove","$bannerContainer","Error","prependTo","recomputeStyle","attr","insertBanner","__1adf9c254cbd3d35b8e8f9ab44be8819","logger","newObj","key","prototype","hasOwnProperty","_interopRequireWildcard","__16a4a3246fcb7206cb3ce72a302f68ce","_isBusy","button","hasAttribute","isInputNode","nodeName","CLASSNAME","busy","warn","spin","setAttribute","idle","spinStop","removeAttribute","isBusy","__6492faf4ee244aaf97c0784c457d08ae","$","maybeCall","thing","ctx","isElementInDOM","ele","parentNode","tipsyIDcounter","Tipsy","element","$element","enabled","fixTitle","show","title","getTitle","$tip","tip","html","className","css","top","left","visibility","display","appendTo","that","hoverable","hover","hoverTooltip","hoverState","trigger","eventOut","tp","pos","extend","offset","width","getBoundingClientRect","height","actualWidth","offsetWidth","actualHeight","offsetHeight","gravity","charAt","fade","stop","opacity","animate","aria","$tipID","destroy","removeData","unbindHandlers","hide","live","context","off","unbind","fadeOut","removeAttr","$e","o","replace","fallback","data","validate","enable","disable","toggleEnabled","fn","tipsy","elementOptions","enter","delayIn","setTimeout","leave","delayOut","defaults","each","eventIn","on","selector","bind","revalidate","pointee","metadata","autoNS","scrollTop","autoWE","scrollLeft","autoBounds","margin","prefer","dir","ns","ew","boundTop","boundLeft","$this","jQuery","__e689aa744aa5d955e83ea261c152658e","handleStringOption","$self","stringOption","bindTooltip","hideOnClick","onClick","tooltip","allOptions","__4975dba2b21736f125d2d31f5fb32772","__fbf8552025aec9d643c7c2e8651ac871","__2a8f02ddf948a2241e4b1ac8618d2015","handleDropdownSelection","$a","target","updateOption","hasClass","component","selected","$toUpdate","$select","filter","prop","updateClearAll","$dropdown","getSelectedDescriptors","mapOptionDescriptors","$options","map","$option","val","label","text","icon","styleClass","disabled","renderDropdown","items","createSection","$clearItemsSection","class","AJS","I18n","getText","$section","$itemList","idx","item","$li","append","templates","getOptions","getDescriptors","renderButton","selectedLabels","getSelectedLabels","isImplicitAll","getImplicitAllLabel","join","$btn","getSelectedOptions","descriptor","checkboxMultiselect","attached","name","id","innerHTML","optionsHtml","dropdownId","multiple","$button","change","deselectAllOptions","is","getButtonTitle","selectOption","unselectOption","getValue","addOption","removeOption","__38870a60a3b38ce21890fdbd6f0a0c3f","_layer2","__e0d3e833c519cf116c3cdd59e52f030e","_widget2","__3c371c7383bcae3d89fbc3cf8cbdc2ff","Dialog2","$el","aui","dialog","dialog2","dataKey","event","isVisible","dialog2Widget","eventName","preventDefault","closest","$selected","some","first","layer","__c30b0586d036f99efe41f2c93d89100e","$document","getExpanderProperties","properties","$trigger","currentTarget","$content","triggerIsParent","parent","$shortContent","isCollapsible","replaceText","replaceSelector","$replaceElement","EXPANDER_EVENTS","outerHeight","__06f55795e224cd10740a8237fd449032","_keyCode2","__0feafabcd51357b770acdddb85e8e6f3","_customEvent2","__751cf3000e6bd63337afe446f5edef9b","ID_FLAG_CONTAINER","defaultOptions","close","flag","$flag","rendered","closeable","renderFlagElement","closeFlag","extendFlagElement","makeCloseable","makeAutoClosable","$flagContainer","prepend","insertFlag","$icon","click","keypress","which","ENTER","SPACE","$flagToClose","dispatchEvent","bubbles","__7a040c461c30a0396a3f29085e136d08","NOTIFICATION_NAMESPACE","CLASS_NOTIFICATION_INITIALISED","CLASS_NOTIFICATION_ICON","CLASS_TOOLTIP","CLASS_TOOLTIP_ERROR","CLASS_TOOLTIP_INFO","ATTRIBUTE_NOTIFICATION_PREFIX","ATTRIBUTE_NOTIFICATION_WAIT","ATTRIBUTE_NOTIFICATION_INFO","ATTRIBUTE_NOTIFICATION_ERROR","ATTRIBUTE_TOOLTIP_POSITION","NOTIFICATION_PRIORITY","notificationFields","isFieldInitialised","$field","attrs","unadornedInputFields","canContainIcon","indexOf","getNotificationMessage","notificationType","getFieldNotificationType","message","messageArray","jsonOrString","jsonArray","JSON","parse","exception","jsonToArray","formatMessage","fieldNotificationType","prioritisedNotification","focusTogglesTooltip","showTooltip","getTooltipAnchor","getTooltip","leavingTooltipForwards","elementIsActive","last","getLastTooltipLink","leavingTooltipBackwards","getFirstTooltipLink","isNormalTab","keyCode","TAB","shiftKey","isShiftTab","bindTooltipTabEvents","hideTooltip","isFocusEventTargetInElement","altKey","$anchor","getTipsyGravity","position","side","bottom","getFieldIcon","next","el","activeElement","synchroniseNotificationDisplay","field","isSpinnerVisible","setFieldSpinner","contains","addEventListener","$tooltip","isFocusInTooltip","isFocusTargetField","isFocusTargetChildOfField","$notificationField","targetIsThisField","after","appendIconToField","prepareFieldMarkup","getNotificationClass","initialiseTooltip","fieldHasTooltip","$firstTooltipLink","bindFieldTabEvents","bindFieldEvents","push","attributes","__59ae152b0222f9eb90c78a5dad47191f","ATTRIBUTE_RESERVED_ARGUMENTS","_validators","validatorRegister","register","validatorFunction","triggerSelector","reservedArgument","validatorArguments","arg","isReserved","inArray","getReservedArgument","validator","validatorTrigger","validators","__5559603b4663c4ed93cb3b28a1f03968","_validatorRegister2","__bd950d9487bdce968e9f27772530b69d","minMaxLength","fieldValueLength","fieldIsEmpty","minlength","parseInt","args","maxlength","exactlengthMessage","makeMessage","invalidate","minlengthMessage","maxlengthMessage","isPasswordField","matchesRegex","regex","matches","match","pattern","patternMessage","RegExp","required","requiredMessage","minOrMax","validNumberMessage","fieldValue","isNaN","minValue","maxValue","accessorFunction","customTokens","defaultMessage","undefined","keys","pluginI18nMessages","messageTokens","formattingArguments","customMessageUnformatted","concat","format","apply","thisFieldValue","matchingField","getElementById","matchingFieldValue","matchingFieldMessage","doesNotContainMessage","dateFormatSymbolic","dateFormatMessage","symbolRegexMap","dateFormatSymbolArray","split","dateFormatRegexString","dateSymbol","isRecognisedSymbol","dateFormatRegex","amountChecked","aboveMin","belowMax","belowMinMessage","aboveMaxMessage","exactlength","matchingfield","doesnotcontain","validnumber","min","max","dateformat","minchecked","maxchecked","__9add8c98b7cba85765bc8e5d14372105","ATTRIBUTE_VALIDATION_OPTION_PREFIX","ATTRIBUTE_FIELD_STATE","INVALID","VALID","VALIDATING","UNVALIDATED","CLASS_VALIDATION_INITIALISED","EVENT_FIELD_STATE_CHANGED","validationTriggeredHandler","getValidationOption","setFieldNotification","getDisplayField","clearFieldMessages","validatorsToRun","callList","getValidators","index","getActivatedValidators","changeFieldState","deferreds","allDeferreds","validatorIndex","deferred","Deferred","validatorContext","validatorDeferred","resolve","reject","createArgumentAccessorFunction","deprecate","sinceVersion","removeInVersion","alternativeName","extraInfo","createValidatorContext","runValidatorsAndGetDeferred","fieldValidators","when","done","startValidating","option","optionValue","state","Event","$displayField","stateToNotificationTypeMap","getFieldState","showSpinnerIfSlow","newString","previousString","newStackedMessageList","spinnerWasVisible","removeFieldNotification","removeIconOnlyNotifications","previousMessage","newMessage","stringify","displayFieldID","delaySubmitUntilStateChange","$form","one","getFieldsInFormWithState","form","formState","stateNames","containsInvalidState","containsUnvalidatedState","containsValidatingState","$fields","getFormStateName","validateUnvalidatedFields","selectFirstInvalid","validSubmitEvent","isDefaultPrevented","initialiseDisplayField","keyUpTimer","triggerStopTypingEvent","clearTimeout","bindStopTypingEvent","validateWhen","watchedFieldID","add","bindValidationEvent","init","__1093885dd5cd006c191f1952eec9f3f5","INPUT_SUFFIX","__039ddb3cd0d125fa3fd993d48f3f61d9","_skatejsTemplateHtml2","__16b630aaa86c62c7ef629cfa7bab499e","_enforcer2","__fcef6c85f04d040b520e6625d1397941","_constants","getLabel","querySelector","Label","template","_label","attributeExists","newValue","__909352e3355986f377ab7bfb75023fbf","updateProgress","$progressBar","$progressBarContainer","progressValue","progressBars","update","children","valueAttribute","currentProgress","parseFloat","afterTransitionEvent","style","documentElement","transition","WebkitTransition","setIndeterminate","__fca95d046e0f2f1586bf39d6ee6238b5","defineDependencies","define","deps","func","rval","defineGlobal","cur","Array","isArray","Number","Boolean","amd","root","previousUnderscore","_","breaker","ArrayProto","ObjProto","FuncProto","slice","nativeForEach","nativeMap","nativeReduce","reduce","nativeReduceRight","reduceRight","nativeFilter","nativeEvery","every","nativeSome","nativeIndexOf","nativeLastIndexOf","lastIndexOf","nativeIsArray","nativeKeys","nativeBind","_wrapped","VERSION","iterator","i","collect","results","list","reduceError","foldl","inject","memo","initial","arguments","TypeError","foldr","detect","result","any","select","all","identity","include","invoke","method","isFunc","isFunction","pluck","where","isEmpty","findWhere","Math","computed","Infinity","shuffle","rand","shuffled","random","sample","n","guard","lookupIterator","sortBy","criteria","sort","right","a","b","group","behavior","groupBy","has","indexBy","countBy","sortedIndex","array","low","high","mid","toArray","values","size","head","take","rest","tail","drop","compact","flatten","shallow","output","isArguments","without","difference","uniq","unique","isSorted","seen","union","intersection","other","zip","object","from","hasIndex","range","start","step","ceil","ctor","bound","partial","bindAll","funcs","f","memoize","hasher","delay","wait","defer","throttle","timeout","previous","later","leading","Date","now","remaining","trailing","debounce","immediate","timestamp","callNow","once","ran","wrap","wrapper","compose","times","pairs","invert","functions","methods","names","source","pick","copy","omit","clone","isObject","tap","interceptor","eq","aStack","bStack","global","multiline","ignoreCase","aCtor","constructor","bCtor","pop","isEqual","isString","isElement","nodeType","isFinite","isNumber","isBoolean","isNull","isUndefined","noConflict","accum","floor","entityMap","escape","unescape","entityRegexes","string","property","mixin","idCounter","uniqueId","prefix","templateSettings","evaluate","interpolate","noMatch","escapes","escaper","settings","render","matcher","variable","chain","_chain","__1816fd18477a65e315273fac20d1a521","_underscore2","__3b229fbcfafc9447ff048a0ffea793f6","factory","Backbone","Zepto","ender","previousBackbone","splice","emulateHTTP","emulateJSON","Events","callback","eventsApi","_events","_callback","retain","ev","l","j","k","allEvents","triggerEvents","stopListening","listeners","_listeners","deleteListener","_listenerId","eventSplitter","action","test","a1","a2","a3","listenTo","listenToOnce","implementation","Model","cid","modelOptions","set","changed","initialize","validationError","idAttribute","toJSON","sync","unset","changes","silent","changing","prev","current","_validate","_changing","_previousAttributes","_pending","clear","hasChanged","changedAttributes","diff","old","previousAttributes","fetch","model","success","resp","wrapError","save","xhr","serverAttrs","isNew","patch","collection","url","base","urlError","encodeURIComponent","isValid","error","unshift","Collection","models","comparator","_reset","reset","setOptions","merge","addOptions","_byId","_removeReference","existing","at","sortable","sortAttr","toAdd","toRemove","modelMap","_prepareModel","_onModelEvent","previousModels","shift","begin","end","create","View","_configure","_ensureElement","delegateEvents","delegateEventSplitter","viewOptions","tagName","setElement","delegate","undelegateEvents","methodMap","params","dataType","contentType","_method","beforeSend","setRequestHeader","processData","ActiveXObject","external","msActiveXFilteringEnabled","ajax","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","navigate","optional","exec","param","decodeURIComponent","History","handlers","location","routeStripper","rootStripper","isExplorer","trailingSlash","started","interval","getHash","href","getFragment","forcePushState","_hasPushState","_wantsHashChange","pathname","substr","hashChange","_wantsPushState","pushState","docMode","documentMode","oldIE","navigator","userAgent","toLowerCase","iframe","contentWindow","checkUrl","_checkUrlInterval","setInterval","loc","atRoot","search","hash","replaceState","loadUrl","clearInterval","fragmentOverride","handler","assign","_updateHash","open","protoProps","staticProps","child","Surrogate","__super__","__f6766346ba0156e0f5df37462b77c757","_backbone2","__a03b25e4ce5f598de7c115490c1f7f77","ProgressiveDataSet","_idAttribute","_maxResults","maxResults","_queryData","queryData","_queryParamKey","queryParamKey","_queryEndpoint","queryEndpoint","queryCache","activeQueryCount","query","_query","remote","getFilteredResults","respond","hasQueryCache","shouldGetMoreResults","activity","always","succ","addQueryCache","getQueryData","response","cache","findQueryCache","setMaxResults","number","__665570ba732d53931c48c1932daa79b3","QueryInput","_lastValue","__d8ac1814d07f8a2adba730caeaf06f0c","NO_VALUE","NO_ENTRIES","RESTFUL_TABLE","ROW","READ_ONLY","ACTIVE","ALLOW_HOVER","FOCUSED","MOVEABLE","DISABLED","SUBMIT","CANCEL","EDIT_ROW","CREATE","DRAG_HANDLE","ORDER","EDITABLE","ERROR","DELETE","LOADING","__3d3ee2d5f078603e7827662e6100a1e3","__cb8a9c5f34bd5d986e16e83ccabf13f6","__13c9d24e0a422b9e76894cf8a78895c4","__d51574a21b407cffa327c40f8b943e4f","ENABLED_SUBMIT","ROW_VIEW","__7caa2633dbde714d8fb6843d7a667791","serializeObject","__466e8a577c51260162a1ef88604d874c","REORDER_SUCCESS","ROW_ADDED","ROW_REMOVED","SERVER_ERROR","CREATED","UPDATED","FOCUS","BLUR","SAVE","MODAL","MODELESS","CONTENT_REFRESHED","RENDER","FINISHED_EDITING","VALIDATION_ERROR","SUBMIT_STARTED","SUBMIT_FINISHED","INITIALIZED","ROW_INITIALIZED","ROW_EDIT","__2c5db2a670bf43ad84b2ff6a773c8a0f","__29b3d9b9ab02b1fc53efb0ad43cc5a69","_typeof","Symbol","_classNames2","_dataKeys2","_events2","_throbber2","_event","classNames","dataKeys","columns","isCreateRow","allowReorder","isUpdateMode","_modelClass","fieldFocusSelector","focusUpdated","submit","_submitStarted","_submitFinished","defaultColumnRenderer","allowEdit","createTextNode","renderDragHandle","_handleKeyUpEvent","_cancel","submitting","showLoading","hideLoading","_focus","hasFocus","$focus","$error","$replacementSubmit","$submit","browser","mozilla","replaceWith","$placeholderSubmit","hasUpdates","mapSubmitParams","serialize","instance","errors","status","renderErrors","renderError","msg","renderData","empty","column","contents","$cell","createView","editView","renderOperations","$operations","accesskey","submitAccessKey","cancelAccessKey","__ac231380c319c9eb5354cb5160e3c277","__447bfcc202d6ec6c1f91299e76dbd27c","_events3","EntryModel","oldError","_serverErrorHandler","syncModel","parseJSON","responseText","addExpand","ajaxOptions","triggerEvtForInst","__f70a09da4b2f8e8eb8b6ffd2f15ee69b","__629e244af2a4d0f7896df9c6eda85934","allowDelete","deleteConfirmation","unfocus","refresh","_success","_error","edit","popup","$opsCell","$throbberCell","fieldName","readView","$editableRegion","emptyText","__2b21d3fff14905e110654619a006c7cb","_customCreateView2","_customEditView2","_customReadView2","_editRow2","_entryModel2","_row2","triggerEvt","evt","inst","RestfulTable","_getDefaultOptions","$table","wrapAll","$thead","$theadRow","$tbody","showGlobalLoading","header","_models","_createCollection","_rowClass","views","row","editRows","focusedRow","handle","helper","elt","$td","borderLeft","borderRight","clientWidth","ui","cachedHeight","clientHeight","placeholder","td","getColumnCount","getRowFromElement","nextItem","prevItem","move","axis","containment","cursor","scroll","zIndex","allowCreate","_createRow","editRow","resources","addPosition","createPosition","addRow","$create","_applyFocusCoordinator","getRows","removeRow","fetchInitialResources","entries","populate","createRequest","afterElement","reverseOrder","complete","responseData","RowsAwareCollection","tableRows","reverse","hideGlobalLoading","renderRows","showNoEntriesMsg","autoFocus","$loading","loadingMsg","insertAfter","view","_renderRow","removeNoEntriesMsg","getModels","getTable","getTableBody","getCreateRow","staticFieldCount","tr","$noEntries","noEntriesMsg","$row","$rows","insertBefore","isRowBeingEdited","isBeingEdited","hasFocusBound","_removeEditRow","_shiftFocusAfterEdit","_saveEditRowOnBlur","dismissEditRows","rows","els","ClassNames","CustomCreateView","CustomEditView","CustomReadView","DataKeys","EditRow","Row","Throbber","__e3fbbf890609b6db46a82b7be9126574","ResultSet","setActive","process","__356ffd37129515ca6816aae037e6b597","_resultSet2","ResultsList","_shouldShow","ul","renderItem","setSelection","lastQuery","_hiddenQuery","__1c026f5ea1c486e1b4539210ed320325","useCssAnimations","prefixes","animations","createEl","tag","ins","appendChild","sheet","getElementsByTagName","styleSheet","addAnimation","alpha","trail","lines","z","substring","pre","insertRule","cssRules","vendor","pp","s","toUpperCase","def","x","offsetLeft","y","offsetTop","offsetParent","clientLeft","clientTop","getColor","color","radius","rotate","corners","direction","speed","fps","opts","ep","firstChild","ostep","astep","anim","removeChild","seg","shadow","background","boxShadow","transformOrigin","transform","borderRadius","hwaccel","animation","childNodes","probe","adj","vml","addRule","r","grp","coordsize","coordorigin","dx","rotation","arcsize","c","initVML","__fefff8d03cd4e42ee1989eb9d2262cd8","optsOrPreset","preset","presets","small","isPlainObject","spinner","__cfdf267b6fbf78d55c9426e604b18f15","__b4954444d8156140d9ea75a1e5a3e11d","textContent","json","__305fbbb070fe250906b5460582113339","__01eabc5411ada2a444b0130909d5c9f0","SuggestionsModel","_suggestions","_activeIndex","onChange","onHighlightChange","suggestions","oldSuggestions","getNumberOfResults","setHighlighted","toHighlight","highlight","highlightPrevious","previousActiveIndex","highlightNext","nextActiveIndex","highlighted","highlightedIndex","__6e10beb025feee8368cf40a8ec8ba1b9","_alignment2","__1c8b45ce15e2aedaf2079a51e1071300","generateListItemID","listId","SuggestionsView","anchor","clearActive","currentLength","currListId","sugg","imageSrc","image","newValueText","active","getActive","outerWidth","auiAlignment","enableAlignment","__80d9027610178e18da1343f9771bbb1a","__42cebde5118ca832014cf5271dd03f11","_option2","_progressiveDataSet2","_state2","__0dd0fdb33ed7640afe4a12f58deb4456","_suggestionModel2","_suggestionsModel2","_suggestionsView2","_uniqueId2","__5a7881cf02ab93624b2d44b3514c2d6a","DESELECTED","NO_HIGHLIGHT","hasResults","_suggestionModel","waitForAssistive","matchPrefix","hideDropdown","_suggestionsView","_input","setInitialVisualState","initialHighlightedItem","suggest","autoHighlight","_autoHighlight","_progressiveDataSet","setInputImageToHighlightedSuggestion","imageSource","setElementImage","setValueAndDisplayFromModel","_select","selectHighlightedSuggestion","convertOptionToModel","convertOptionsToModels","_datalist","getActiveId","_dropdown","getIndexInResults","focusInHandler","searchValue","isInputEmpty","cancelInProgressQueries","isQueryInProgress","getSelectedLabel","selectedIndex","focusOutHandler","selectCanBeEmpty","selectionIsEmpty","selectionNotExact","clearElementImage","deselect","handleInvalidInputOnFocusOut","handleHighlightOnFocusOut","_listId","_button","suggestionsToAdd","newSuggestion","oldSuggestion","_isSync","setBusyState","setIdleState","optionToHighlight","isInputExactMatch","newValueSuggestionModel","createNewValueModel","indexOfValueInResults","clearAndSet","initialiseProgressiveDataSet","associateDropdownAndTrigger","bindHighlightMouseover","bindSelectMousedown","initialiseValue","src","currentValue","handled","ESCAPE","handleTabOut","UP","DOWN","defaultPrevented","displayValue","__7492747913568b3ee996b7d99354f7ed","each2","Select2","AbstractSelect2","SingleSelect2","MultiSelect2","nextUid","sizer","scrollBarDimensions","counter","lastMousePosition","KEY","ESC","LEFT","RIGHT","SHIFT","CTRL","ALT","PAGE_UP","PAGE_DOWN","HOME","END","BACKSPACE","isArrow","isControl","metaKey","isFunctionKey","DIACRITICS","pageX","pageY","clazz","formula","evaluated","notify","resultsSelector","prepareOpts","container","createContainer","containerId","containerSelector","syncCssClasses","adaptContainerCssClass","containerCss","containerCssClass","elementTabIndex","before","killEvent","dropdown","adaptDropdownCssClass","dropdownCssClass","queryCount","resultsPage","initContainer","lastpos","highlightUnderEvent","loadMoreIfNeeded","stopPropagation","mousewheel","delta","deltaX","deltaY","scrollHeight","installKeyUpChangeEvent","updateResults","selectHighlighted","initSelection","monitorSource","maximumInputLength","readonly","$template","dim","measureScrollbar","autofocus","nextSearchTerm","select2","propertyObserver","tabindex","optionToData","locked","equal","idKey","ajaxUrl","populateResults","depth","selectable","compound","node","innerContainer","formatted","sortResults","formatResultCssClass","formatResult","escapeMarkup","tags","placeholderOption","more","term","elm","getPlaceholder","getPlaceholderOption","not","local","createSearchChoice","splitVal","separator","observer","mutationCallback","mutations","MutationObserver","WebKitMutationObserver","MozMutationObserver","observe","subtree","triggerSelect","triggerChange","details","blurOnChange","isInterfaceEnabled","enabledInterface","enableInterface","_enabled","_readonly","toggleClass","opened","positionDropdown","bodyOffset","above","changeDirection","resultsListNode","dropHeight","$window","windowWidth","windowHeight","viewPortRight","viewportBottom","dropTop","dropLeft","enoughRoomBelow","enoughRoomAbove","dropWidth","enoughRoomOnRight","dropdownAutoWidth","dropdownCss","shouldOpen","clearDropdownAlignmentPreference","opening","mask","resize","orient","detach","selectOnBlur","noFocus","parents","clearSearch","externalSearch","getMaximumSelectionSize","maximumSelectionSize","ensureHighlightVisible","hb","rb","findHighlightableChoices","moveHighlight","choices","choice","removeHighlight","countSelectableResults","page","loadMorePadding","postprocessResults","formatLoadMore","tokenize","queryNumber","lastTerm","showSearchInput","maxSelSize","checkFormatter","formatSelectionTooBig","minimumInputLength","formatInputTooShort","showSearch","formatInputTooLong","formatSearching","formatNoMatches","postRender","cancel","selection","focusSearch","setSelectionRange","createTextRange","collapse","onSelect","firstOption","initContainerWidth","focusser","len","minimumResultsForSearch","isFocused","openOnEnter","ctrlKey","allowClear","stopImmediatePropagation","setPlaceholder","removed","isPlaceholderOptionSelected","updateSelection","is_match","noop","noHighlightUpdate","countResults","oldData","added","cssClass","formatSelection","formatSelectionCssClass","ids","grep","ordered","selectChoice","searchContainer","_this","keydowns","selectionStart","selectionEnd","sel","createRange","moveStart","getCursorInfo","selectedChoice","unselect","resizeSearch","clearPlaceholder","maxWidth","getMaxSearchWidth","getVal","filtered","addSelectedChoice","tokenizer","closeOnSelect","enableChoice","enabledItem","disabledItem","dequeue","setVal","getSideBorderPadding","minimumWidth","searchWidth","sideBorderPadding","currentStyle","getComputedStyle","fontSize","fontFamily","fontStyle","fontWeight","letterSpacing","textTransform","whiteSpace","measureTextWidth","buildChangeDetails","onSortStart","onSortEnd","allowedMethods","valueMethods","propertyMethods","methodsMap","markup","markMatch","limit","pageNumber","stripDiacritics","tokenSeparators","selectCallback","token","original","dupe","defaultEscapeMarkup","selectedObject","currentSearchTerm","ajaxDefaults","transport","util","str","ret","quietMillis","dest","adapter","classes","adapted","replacements","tl","replace_map","deprecated","jsonpCallback","abort","dataText","tmp","dataItem","t","datum","childDatum","formatter","formatterName","count","SuperClass","__51fb4aac01a40562c0d0d0767cafdf66","originalSelect2","auiContainer","auiDropdown","auiSelect2","updatedArgs","auiOpts","auiAvatarClass","hasAvatar","__2f5a98423fd9aed894b87fadde70ccc7","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","nextTime","__ab0cb0d0db81c197057806678ff286d2","DocumentTouch","hasTouch","__8ff1a5126874ae997e949c3bfc2bd70d","isContentEditable","__5983f091862eda4fcb8c198d71ed52eb","mq","matchMedia","innerText","testMediaQuery","__e01367eebdfe37c1d4b306c91a5d969c","__2283e259423cbf11e76a3bf5e9e47933","_hasTouch2","_isInput2","_mediaQuery2","SUPPORTS_TRANSITIONS","webkitTransition","sidebarOffset","sidebar","Sidebar","$body","$wrapper","_previousScrollTop","_previousViewportHeight","_previousViewportWidth","_previousOffsetTop","submenus","SubmenuManager","collapsedTriggersSelector","constructSubmenu","lazilyInitializeSubmenus","pendingReflow","onScrollResizeReflow","reflow","isAnimated","EVENT_PREFIX","isCollapsed","toggle","isViewportNarrow","toggleShortcutHandler","LEFT_SQUARE_BRACKET","isNormalSquareBracket","_remove","_removeAllTooltips","inlineDialogSelector","expand","hasSubmenu","showTipsy","hideTipsy","toggleSelector","triggerEl","submenuInlineDialog","getSubmenuInlineDialog","$submenuInlineDialog","$inlineDialog","$submenuDialog","isLastSubmenuItem","hideAllSubmenus","initializeHandlers","constructAllSubmenus","namespaceEvents","getAllSubmenuDialogs","querySelectorAll","inlineDialog","getSubmenu","inlineDialogId","allSubmenuDialogs","inlineDialog2","inlineDialogClass","SUBMENU_INLINE_DIALOG_CONTENTS_HTML","$container","$clone","$submenu","inlineDialogShowHandler","inlineDialogHideHandler","addHandlersToSubmenuInlineDialog","namespacedEvents","setHeight","viewportHeight","headerHeight","visibleHeaderHeight","setPosition","pageYOffset","setCollapsedState","viewportWidth","collapsed","expanded","narrow","wide","_expand","_collapse","collapseState","oldSize","newSize","isResponsive","startEvent","submenuTriggersSelector","tooltipSelector","responsiveReflow","isInitialPageLoad","innerWidth","isTouch","isTrackpadBounce","isFlyOut","submenu","sidebarSubmenuDeprecationLogger","submenuHeadingHeight","isShowing","isSubmenuVisible","showSubmenu","moveSubmenuToInlineDialog","restoreSubmenu","getVisibleSubmenus","tipsyOpts","$item","durationStr","timeoutMs","getMessageLogger","__5115c324962984eb34b4f86a44067f93","tablesorter","ts","log","console","alert","benchmark","d","getTime","isEmptyObject","getElementText","table","cellIndex","te","config","textExtraction","textAttribute","getColumnData","detectParserForColumn","rowIndex","parsers","nodeValue","keepLooking","cells","debug","getParserById","buildParserCache","h","ch","np","p","time","tb","$tbodies","cssInfoBlock","parsersDebug","extractors","$headers","headers","getData","empties","emptyTo","emptyToBottom","strings","stringTo","buildCache","cc","tx","v","cols","cacheTime","totalRows","rowData","colMax","$tb","showProcessing","isProcessing","normalized","cssChildRow","cssHasChild","order","abs","appendToTable","$bk","appendTime","wo","widgetOptions","tBodies","appender","isUpdating","processTbody","pager","removeRows","pager_removeRows","applyWidget","formatSortingOrder","buildHeaders","$t","lock","headerList","headerContent","computeColumnIndex","cssIcon","selectorHeaders","headerTemplate","onRenderTemplate","headerIn","onRenderHeader","sortInitialOrder","lockedOrder","cssHeader","headerRow","cssHeaderRow","tabIndex","scope","role","updateHeader","commonUpdate","resort","selectorRemove","checkResort","$th","col","th","sortDisabled","setHeadersCss","sortList","none","sortNone","cssNone","sortAsc","cssAsc","sortDesc","cssDesc","$extraHeaders","nextSort","sortReset","txt","language","getCachedSortType","initSort","cell","arry","indx","sortMultiSortKey","sortResetKey","sortRestart","sortForce","colSpan","sortAppend","isValueInArray","multisort","num","sortTime","cts","textSorter","bl","serverSideSorting","sortStable","numberSorter","resortComplete","sl","bindMethods","namespace","refreshWidgets","restoreHeaders","bindEvents","icell","tbdy","primary","updateHeaderSortCount","delayInit","getWidgetById","dontapply","cb","originalSettings","hasInitialized","setup","version","widgets","theme","widthFixed","cancelSelection","dateFormat","usNumberFormat","sortLocaleCompare","zebra","initWidgets","initialized","tableClass","cssProcessing","selectorSort","childRow","info","processing","nextAsc","nextDesc","nextNone","construct","buildTable","tHead","m","supportsDataObject","jquery","widgetInit","colgroup","overallWidth","fixColumnWidth","sortlist","processTimer","getCell","trs","cellId","rowSpan","firstAvailCol","matrixrow","matrix","lookup","$ths","$h","getIt","holdr","clearTableBody","core","downTime","removeClasses","$r","$f","chunk","chunks","hex","sortNatural","xN","xD","yN","yD","xF","yF","mx","sortNaturalAsc","sortNaturalDesc","sortText","getTextValue","charCodeAt","sortNumericAsc","sortNumericDesc","sortNumeric","characterEquivalents","replaceAccents","acc","characterRegex","characterRegexArray","addParser","parser","addWidget","widget","hasWidget","w","wd","isApplyingWidgets","priority","doAll","cw","cl","formatFloat","isDigit","toLocaleLowerCase","ci","parserMetadataName","$tr","even","rmv","__d7e65d51e9473339d5164fafb9c99a16","DEFAULT_SORT_OPTIONS","sortTable","$header","sorter","wrapInner","tablessortable","keyComponents","projectKey","issueNumber","PROJECT_KEY_TEMPLATE","ISSUE_NUMBER_TEMPLATE","setTableSortable","__a9e4a729adf5f5caa916283136db865e","__82cf746a7b34a88ac05b7d7522ee9696","_attributes","__47153a78b0936470f7ca1127e29a148c","getInput","removedAttributeHandler","attributeName","fallbackAttributeHandler","getAttributeHandler","formAttributeHandler","_formId","idAttributeHandler","checkedAttributeHandler","checked","labelHandler","_tick","_cross","bindEventsToInput","setBooleanAttribute","indeterminate","__f26768037ab6f29eab9bfa5fefcc1f13","triggerMessage","isEnabled","findControlled","$closestAnchor","isNestedAnchor","mouseenter","mouseleave","__0f68046dd5cd267e2d42d1cbf9f84cd6","TruncatingProgressiveDataSet","_maxResponseSize","maxResponseSize","findQueryResponse","__bd8f38483ec276269c4239c27d27bae4"],"sourceRoot":""}