UNPKG

1.87 MBSource Map (JSON)View Raw
1{"version":3,"file":"aui-prototyping.nodeps.js","mappings":"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,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,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,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,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,IAAS,EAAS,IAAS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","sources":["webpack://__auiPrototyping/webpack/universalModuleDefinition","webpack://__auiPrototyping/../src/js/aui/i18n-stub.js","webpack://__auiPrototyping/../src/js/jquery/jquery.hotkeys.js","webpack://__auiPrototyping/../src/js/jquery/jquery.moveto.js","webpack://__auiPrototyping/../../../node_modules/dompurify/dist/purify.js","webpack://__auiPrototyping/../../../node_modules/fancy-file-input/dist/fancy-file-input.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/core.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/data.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/ie.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/keycode.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/plugin.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/safe-active-element.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/safe-blur.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/scroll-parent.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/version.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/widget.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/widgets/datepicker.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/widgets/draggable.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/widgets/mouse.js","webpack://__auiPrototyping/../../../node_modules/jquery-ui/ui/widgets/sortable.js","webpack://__auiPrototyping/../../../node_modules/skatejs-template-html/dist/template-html.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/constants.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/data.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/document-observer.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/fix-ie-innerhtml.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/globals.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/lifecycle.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/mutation-observer.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/registry.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/skate.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/utils.js","webpack://__auiPrototyping/../../../node_modules/skatejs/lib/version.js","webpack://__auiPrototyping/../src/js-vendor/jquery/jquery.tablesorter.js","webpack://__auiPrototyping/../src/js-vendor/jquery/plugins/jquery.select2.js","webpack://__auiPrototyping/../src/js-vendor/jquery/serializetoobject.js","webpack://__auiPrototyping/external umd {\"commonjs\":\"backbone\",\"commonjs2\":\"backbone\",\"amd\":\"backbone\",\"root\":\"Backbone\",\"assign\":\"Backbone\",\"global\":\"Backbone\",\"var\":\"Backbone\"}","webpack://__auiPrototyping/external umd {\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\",\"amd\":\"jquery\",\"root\":\"jQuery\",\"assign\":\"jQuery\",\"global\":\"jQuery\",\"var\":\"jQuery\"}","webpack://__auiPrototyping/external umd {\"commonjs\":\"underscore\",\"commonjs2\":\"underscore\",\"amd\":\"underscore\",\"root\":\"_\",\"assign\":\"_\",\"global\":\"_\",\"var\":\"_\"}","webpack://__auiPrototyping/webpack/bootstrap","webpack://__auiPrototyping/webpack/runtime/compat get default export","webpack://__auiPrototyping/webpack/runtime/define property getters","webpack://__auiPrototyping/webpack/runtime/hasOwnProperty shorthand","webpack://__auiPrototyping/webpack/runtime/make namespace object","webpack://__auiPrototyping/../src/js/aui/jquery.js","webpack://__auiPrototyping/../src/js/aui/internal/globalize.js","webpack://__auiPrototyping/../src/js/aui/forms/create-forms-component-body.js","webpack://__auiPrototyping/../src/js/aui/internal/detect-children-change.js","webpack://__auiPrototyping/../src/js/aui/forms.js","webpack://__auiPrototyping/../src/js/aui/internal/log.js","webpack://__auiPrototyping/../src/js/aui/forms/custom-checkbox.js","webpack://__auiPrototyping/../src/js/aui/forms/custom-radio.js","webpack://__auiPrototyping/../src/js/aui/format.js","webpack://__auiPrototyping/../src/js/aui/version.js","webpack://__auiPrototyping/../src/js/aui/event.js","webpack://__auiPrototyping/../src/js/aui/escape-html.js","webpack://__auiPrototyping/../src/js/aui/internal/deprecation.js","webpack://__auiPrototyping/../src/js/aui/internal/animation.js","webpack://__auiPrototyping/../src/js/aui/blanket.js","webpack://__auiPrototyping/../src/js/aui/key-code.js","webpack://__auiPrototyping/../src/js/aui/internal/amdify.js","webpack://__auiPrototyping/../src/js/aui/internal/skate.js","webpack://__auiPrototyping/../src/js/aui/internal/state.js","webpack://__auiPrototyping/../src/js/aui/trigger.js","webpack://__auiPrototyping/../src/js/aui/focus-manager.js","webpack://__auiPrototyping/../src/js/aui/internal/widget.js","webpack://__auiPrototyping/../src/js/aui/polyfills/custom-event.js","webpack://__auiPrototyping/../src/js/aui/layer.js","webpack://__auiPrototyping/../src/js/aui/layer-manager.js","webpack://__auiPrototyping/../src/js/aui/params.js","webpack://__auiPrototyping/../src/js/aui/populate-parameters.js","webpack://__auiPrototyping/../src/js/aui/setup.js","webpack://__auiPrototyping/../src/js/aui/to-init.js","webpack://__auiPrototyping/../src/js/aui/internal/i18n/aui.js","webpack://__auiPrototyping/../src/js/aui/i18n.js","webpack://__auiPrototyping/../src/js/aui/avatar-badged.js","webpack://__auiPrototyping/../../docs/src/docs/images/avatar-person.svg","webpack://__auiPrototyping/../src/js/aui/avatar.js","webpack://__auiPrototyping/../../docs/src/docs/images/avatar-project.svg","webpack://__auiPrototyping/../src/js/aui/avatar-group.js","webpack://__auiPrototyping/../src/js/aui/banner.js","webpack://__auiPrototyping/../src/js/aui/spinner.js","webpack://__auiPrototyping/../src/js/aui/button.js","webpack://__auiPrototyping/../src/js/aui/close-button.js","webpack://__auiPrototyping/../src/js/aui/dialog2.js","webpack://__auiPrototyping/../src/js/aui/internal/browser.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/math.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/enums.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/createPopper.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/debounce.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/within.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/popper-lite.js","webpack://__auiPrototyping/../../../node_modules/@popperjs/core/lib/popper.js","webpack://__auiPrototyping/../src/js/aui/internal/alignment.js","webpack://__auiPrototyping/../src/js/aui/internal/elements.js","webpack://__auiPrototyping/../src/js/aui/unique-id.js","webpack://__auiPrototyping/../src/js/aui/dropdown2.js","webpack://__auiPrototyping/../src/js/aui/expander.js","webpack://__auiPrototyping/../src/js/aui/messages.js","webpack://__auiPrototyping/../src/js/aui/internal/a11y/focusable-query.js","webpack://__auiPrototyping/../src/js/aui/flag.js","webpack://__auiPrototyping/../src/js/aui/tooltip.js","webpack://__auiPrototyping/../src/js/aui/checkbox-multiselect.js","webpack://__auiPrototyping/../src/js/aui/fancy-file-input.js","webpack://__auiPrototyping/../src/js/aui/internal/enforcer.js","webpack://__auiPrototyping/../src/js/aui/internal/constants.js","webpack://__auiPrototyping/../src/js/aui/label.js","webpack://__auiPrototyping/../src/js/aui/select2.js","webpack://__auiPrototyping/../src/js/aui/spin.js","webpack://__auiPrototyping/../src/js/aui/internal/select/option.js","webpack://__auiPrototyping/../src/js/aui/progressive-data-set.js","webpack://__auiPrototyping/../src/js/aui/internal/select/suggestion-model.js","webpack://__auiPrototyping/../src/js/aui/internal/select/suggestions-model.js","webpack://__auiPrototyping/../src/js/aui/internal/select/suggestions-view.js","webpack://__auiPrototyping/../src/js/aui/internal/select/template.js","webpack://__auiPrototyping/../src/js/aui/select.js","webpack://__auiPrototyping/../src/js/aui/internal/attributes.js","webpack://__auiPrototyping/../src/js/aui/toggle.js","webpack://__auiPrototyping/../src/js/aui/inline-dialog2.js","webpack://__auiPrototyping/../src/js/aui/navigation.js","webpack://__auiPrototyping/../src/js/aui/progress-indicator.js","webpack://__auiPrototyping/../src/js/aui/tables-sortable.js","webpack://__auiPrototyping/../src/js/aui/internal/add-id.js","webpack://__auiPrototyping/../src/js/aui/is-clipped.js","webpack://__auiPrototyping/../src/js/aui/tabs.js","webpack://__auiPrototyping/../src/js/aui/form-notification.js","webpack://__auiPrototyping/../src/js/aui/form-validation/validator-register.js","webpack://__auiPrototyping/../src/js/aui/form-validation/basic-validators.js","webpack://__auiPrototyping/../src/js/aui/form-validation.js","webpack://__auiPrototyping/../src/js/aui/debounce.js","webpack://__auiPrototyping/../src/js/aui/internal/header/create-header.js","webpack://__auiPrototyping/../src/js/aui/header.js","webpack://__auiPrototyping/../src/js/aui/header-async.js","webpack://__auiPrototyping/../src/js/aui/date-picker.js","webpack://__auiPrototyping/../src/js/aui/restful-table/class-names.js","webpack://__auiPrototyping/../src/js/aui/restful-table/custom-create-view.js","webpack://__auiPrototyping/../src/js/aui/restful-table/custom-edit-view.js","webpack://__auiPrototyping/../src/js/aui/restful-table/custom-read-view.js","webpack://__auiPrototyping/../src/js/aui/restful-table/data-keys.js","webpack://__auiPrototyping/../src/js/aui/restful-table/event-names.js","webpack://__auiPrototyping/../src/js/aui/restful-table/spinner.js","webpack://__auiPrototyping/../src/js/aui/restful-table/edit-row.js","webpack://__auiPrototyping/../src/js/aui/restful-table/event-handlers.js","webpack://__auiPrototyping/../src/js/aui/restful-table/entry-model.js","webpack://__auiPrototyping/../src/js/aui/restful-table/row.js","webpack://__auiPrototyping/../src/js/aui/restful-table.js","webpack://__auiPrototyping/../src/js/aui/clone.js","webpack://__auiPrototyping/../src/js/aui/internal/has-touch.js","webpack://__auiPrototyping/../src/js/aui/internal/deduplicateIDs.js","webpack://__auiPrototyping/../src/js/aui/sidebar.js","webpack://__auiPrototyping/../src/js/aui/internal/mediaQuery.js","webpack://__auiPrototyping/../src/js/aui/internal/is-input.js","webpack://__auiPrototyping/../src/js/aui/dialog.js","webpack://__auiPrototyping/../src/js/aui/when-i-type.js","webpack://__auiPrototyping/./aui.batch.prototyping.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"backbone\"), require(\"jquery\"), require(\"underscore\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"@atlassian/aui\", [\"backbone\", \"jquery\", \"underscore\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@atlassian/aui\"] = factory(require(\"backbone\"), require(\"jquery\"), require(\"underscore\"));\n\telse\n\t\troot[\"AJS\"] = factory(root[\"Backbone\"], root[\"jQuery\"], root[\"_\"]);\n})(window, (__WEBPACK_EXTERNAL_MODULE__775__, __WEBPACK_EXTERNAL_MODULE__472__, __WEBPACK_EXTERNAL_MODULE__302__) => {\nreturn ","console.debug('AUI import for WRM I18n not loaded');\n","/*\n * Modified by Atlassian to allow chaining of keys\n *\n * jQuery Hotkeys Plugin\n * Copyright 2010, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Based upon the plugin by Tzury Bar Yochay:\n * http://github.com/tzuryby/hotkeys\n *\n * Original idea by:\n * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/\n*/\n\n(function(jQuery){\n\n jQuery.hotkeys = {\n version: \"0.8\",\n\n specialKeys: {\n 8: \"backspace\", 9: \"tab\", 13: \"return\", 16: \"shift\", 17: \"ctrl\", 18: \"alt\", 19: \"pause\",\n 20: \"capslock\", 27: \"esc\", 32: \"space\", 33: \"pageup\", 34: \"pagedown\", 35: \"end\", 36: \"home\",\n 37: \"left\", 38: \"up\", 39: \"right\", 40: \"down\", 45: \"insert\", 46: \"del\",\n 91 : \"meta\",\n 96: \"0\", 97: \"1\", 98: \"2\", 99: \"3\", 100: \"4\", 101: \"5\", 102: \"6\", 103: \"7\",\n 104: \"8\", 105: \"9\", 106: \"*\", 107: \"+\", 109: \"-\", 110: \".\", 111 : \"/\",\n 112: \"f1\", 113: \"f2\", 114: \"f3\", 115: \"f4\", 116: \"f5\", 117: \"f6\", 118: \"f7\", 119: \"f8\",\n 120: \"f9\", 121: \"f10\", 122: \"f11\", 123: \"f12\", 144: \"numlock\", 145: \"scroll\",\n 188: \",\", 190: \".\", 191: \"/\", 224: \"meta\", 219: '[', 221: ']'\n },\n\n // These only work under Mac Gecko when using keypress (see http://unixpapa.com/js/key.html).\n keypressKeys: [ \"<\", \">\", \"?\" ],\n\n shiftNums: {\n \"`\": \"~\", \"1\": \"!\", \"2\": \"@\", \"3\": \"#\", \"4\": \"$\", \"5\": \"%\", \"6\": \"^\", \"7\": \"&\",\n \"8\": \"*\", \"9\": \"(\", \"0\": \")\", \"-\": \"_\", \"=\": \"+\", \";\": \":\", \"'\": \"\\\"\", \",\": \"<\",\n \".\": \">\", \"/\": \"?\", \"\\\\\": \"|\"\n }\n };\n\n jQuery.each(jQuery.hotkeys.keypressKeys, function (_, key) {\n jQuery.hotkeys.shiftNums[ key ] = key;\n });\n\n function TimedNumber(timer) {\n this.num = 0;\n this.timer = timer > 0 ? timer : false;\n }\n TimedNumber.prototype.val = function () {\n return this.num;\n };\n TimedNumber.prototype.inc = function () {\n if (this.timer) {\n clearTimeout(this.timeout);\n this.timeout = setTimeout(jQuery.proxy(TimedNumber.prototype.reset, this), this.timer);\n }\n this.num++;\n };\n TimedNumber.prototype.reset = function () {\n if (this.timer) {\n clearTimeout(this.timeout);\n }\n this.num = 0;\n };\n\n function keyHandler( handleObj ) {\n // Only care when a possible input has been specified\n if ( !(jQuery.isPlainObject(handleObj.data) || jQuery.isArray(handleObj.data) || typeof handleObj.data === \"string\") ) {\n return;\n }\n\n var origHandler = handleObj.handler,\n options = {\n timer: 700,\n combo: []\n };\n\n (function (data) {\n if (typeof data === 'string') {\n options.combo = [ data ];\n } else if (jQuery.isArray(data)) {\n options.combo = data;\n } else {\n jQuery.extend(options, data);\n }\n options.combo = jQuery.map(options.combo, function (key) {\n return key.toLowerCase();\n });\n })(handleObj.data);\n\n handleObj.index = new TimedNumber(options.timer);\n handleObj.handler = function( event ) {\n // Don't fire in text-accepting inputs that we didn't directly bind to\n // important to note that jQuery.fn.prop is only available on jquery 1.6+\n if ( this !== event.target && (/textarea|select|input/i.test( event.target.nodeName ) ||\n jQuery(event.target).prop('contenteditable') === 'true' )) {\n return;\n }\n\n // Keypress represents characters, not special keys\n var special = event.type !== 'keypress' ? jQuery.hotkeys.specialKeys[ event.which ] : null,\n character = String.fromCharCode( event.which ).toLowerCase(),\n key, modif = \"\", possible = {};\n\n // check combinations (alt|ctrl|shift+anything)\n if ( event.altKey && special !== \"alt\" ) {\n modif += \"alt+\";\n }\n\n if ( event.ctrlKey && special !== \"ctrl\" ) {\n modif += \"ctrl+\";\n }\n\n // TODO: Need to make sure this works consistently across platforms\n if ( event.metaKey && !event.ctrlKey && special !== \"meta\" ) {\n modif += \"meta+\";\n }\n\n if ( event.shiftKey && special !== \"shift\" ) {\n modif += \"shift+\";\n }\n\n // Under Chrome and Safari, meta's keycode == '['s charcode\n // Even if they did type this key combo we could not use it because it is browser back in Chrome/Safari on OS X\n if (event.metaKey && character === '[') {\n character = null;\n }\n\n if (special) {\n possible[ modif + special ] = true;\n }\n if (character) {\n possible[ modif + character ] = true;\n }\n\n // \"$\" can be specified as \"shift+4\" or \"$\"\n if ( /shift+/.test(modif) ) {\n possible [ modif.replace('shift+', '') + jQuery.hotkeys.shiftNums[ (special || character) ] ] = true;\n }\n\n var index = handleObj.index,\n combo = options.combo;\n\n if ( pressed(combo[index.val()], possible) ) {\n if ( index.val() === combo.length - 1 ) {\n index.reset();\n return origHandler.apply(this, arguments);\n } else {\n index.inc();\n }\n } else {\n index.reset();\n // For mutli-key combinations, we might have restarted the key sequence.\n if ( pressed(combo[0], possible) ) {\n index.inc();\n }\n }\n };\n }\n\n function pressed(key, possible) {\n var keys = key.split(' ');\n for (var i = 0, len = keys.length; i < len; i++) {\n if ( possible[keys[i]] ) {\n return true;\n }\n }\n return false;\n }\n\n jQuery.each([ \"keydown\", \"keyup\", \"keypress\" ], function() {\n jQuery.event.special[ this ] = { add: keyHandler };\n });\n\n})( jQuery );\n","/**\n *\n * @module Controls\n * @requires AJS, jQuery\n */\n\n/**\n * If not visible, moves the scroll position of the screen to the element\n *\n * <pre>\n * <strong>Usage:</strong>\n * jQuery(\"li.item\").moveTo();\n * </pre>\n *\n * This plugin also supports options as an argument. The options\n * that can be defined are:\n * <ul>\n * <li>transition - if set to true will cause a smooth scrolling transition (false by default)</li>\n * <li>scrollOffset - defines an offset to scroll past the element to view in pixels such that\n * all of it can be viewed (35 pixels by default)</li>\n * </ul>\n *\n * @class moveTo\n * @constuctor moveTo\n * @namespace jQuery.fn\n * @param {Object} options\n */\njQuery.fn.moveTo = function (options) {\n var defaults = {\n transition: false,\n scrollOffset: 35\n };\n\n var opts = jQuery.extend(defaults, options);\n var instance = this;\n var topOffset = instance.offset().top;\n var scrollTarget;\n\n if ((jQuery(window).scrollTop() + jQuery(window).height() - this.outerHeight() < topOffset ||\n jQuery(window).scrollTop() + opts.scrollOffset > topOffset) &&\n jQuery(window).height() > opts.scrollOffset) {\n\n if (jQuery(window).scrollTop() + opts.scrollOffset > topOffset) {\n //move up\n scrollTarget = topOffset - (jQuery(window).height() - this.outerHeight()) + opts.scrollOffset;\n } else {\n //move down\n scrollTarget = topOffset - opts.scrollOffset;\n }\n\n if (!jQuery.fn.moveTo.animating && opts.transition) {\n jQuery(document).trigger('moveToStarted', this);\n jQuery.fn.moveTo.animating = true;\n jQuery('html,body').animate({\n scrollTop: scrollTarget\n }, 1000, function () {\n jQuery(document).trigger('moveToFinished', instance);\n delete jQuery.fn.moveTo.animating;\n });\n return this;\n } else {\n var jQueryCache = jQuery('html, body');\n if (jQueryCache.is(':animated')) {\n jQueryCache.stop();\n delete jQuery.fn.moveTo.animating;\n }\n\n jQuery(document).trigger('moveToStarted');\n jQuery(window).scrollTop(scrollTarget);\n //need to put a slight timeout for the moveToFinished event such that recipients of this event\n //have time to act on it.\n setTimeout(function () {\n jQuery(document).trigger('moveToFinished', instance);\n }, 100);\n return this;\n }\n }\n jQuery(document).trigger('moveToFinished', this);\n return this;\n};\n","/*! @license DOMPurify 2.5.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.5.0/LICENSE */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.DOMPurify = factory());\n})(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n }\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n }\n function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n function _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var hasOwnProperty = Object.hasOwnProperty,\n setPrototypeOf = Object.setPrototypeOf,\n isFrozen = Object.isFrozen,\n getPrototypeOf = Object.getPrototypeOf,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var freeze = Object.freeze,\n seal = Object.seal,\n create = Object.create; // eslint-disable-line import/no-mutable-exports\n var _ref = typeof Reflect !== 'undefined' && Reflect,\n apply = _ref.apply,\n construct = _ref.construct;\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return _construct(Func, _toConsumableArray(args));\n };\n }\n var arrayForEach = unapply(Array.prototype.forEach);\n var arrayPop = unapply(Array.prototype.pop);\n var arrayPush = unapply(Array.prototype.push);\n var stringToLowerCase = unapply(String.prototype.toLowerCase);\n var stringToString = unapply(String.prototype.toString);\n var stringMatch = unapply(String.prototype.match);\n var stringReplace = unapply(String.prototype.replace);\n var stringIndexOf = unapply(String.prototype.indexOf);\n var stringTrim = unapply(String.prototype.trim);\n var regExpTest = unapply(RegExp.prototype.test);\n var typeErrorCreate = unconstruct(TypeError);\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n\n /* Add properties to a lookup table */\n function addToSet(set, array, transformCaseFunc) {\n var _transformCaseFunc;\n transformCaseFunc = (_transformCaseFunc = transformCaseFunc) !== null && _transformCaseFunc !== void 0 ? _transformCaseFunc : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n var l = array.length;\n while (l--) {\n var element = array[l];\n if (typeof element === 'string') {\n var lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n\n /* Shallow clone an object */\n function clone(object) {\n var newObject = create(null);\n var property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property]) === true) {\n newObject[property] = object[property];\n }\n }\n return newObject;\n }\n\n /* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\n function lookupGetter(object, prop) {\n while (object !== null) {\n var desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n return fallbackValue;\n }\n\n var html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n // SVG\n var svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n var mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']);\n\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n var text = freeze(['#text']);\n\n var html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);\n var svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n var mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n var MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n var ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n var TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n var DOCTYPE_NAME = seal(/^html$/i);\n var CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n var getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\n var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html) {\n return html;\n },\n createScriptURL: function createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '2.5.0';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n var originalDocument = window.document;\n var document = window.document;\n var DocumentFragment = window.DocumentFragment,\n HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n Element = window.Element,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap,\n NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n HTMLFormElement = window.HTMLFormElement,\n DOMParser = window.DOMParser,\n trustedTypes = window.trustedTypes;\n var ElementPrototype = Element.prototype;\n var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n var getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n var _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n createDocumentFragment = _document.createDocumentFragment,\n getElementsByTagName = _document.getElementsByTagName;\n var importNode = originalDocument.importNode;\n var documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {}\n var hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined && documentMode !== 9;\n var MUSTACHE_EXPR$1 = MUSTACHE_EXPR,\n ERB_EXPR$1 = ERB_EXPR,\n TMPLIT_EXPR$1 = TMPLIT_EXPR,\n DATA_ATTR$1 = DATA_ATTR,\n ARIA_ATTR$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$1 = ATTR_WHITESPACE,\n CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;\n var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));\n\n /* Allowed attribute names */\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n var FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n var FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n var ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n var ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n var ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n var SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n var SAFE_FOR_XML = true;\n\n /* Decide if document with <html>... should be returned */\n var WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n var SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n var FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n var RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n var RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n var RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n var SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n var SANITIZE_NAMED_PROPS = false;\n var SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n var KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n var IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n var USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n var FORBID_CONTENTS = null;\n var DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n /* Tags that are safe for data: URIs */\n var DATA_URI_TAGS = null;\n var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n /* Attributes safe for values like \"javascript:\" */\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n var NAMESPACE = HTML_NAMESPACE;\n var IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n var ALLOWED_NAMESPACES = null;\n var DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\n /* Parsing of strict XHTML documents */\n var PARSER_MEDIA_TYPE;\n var SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n var transformCaseFunc;\n\n /* Keep a reference to config to pass to hooks */\n var CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n var formElement = document.createElement('form');\n var isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || _typeof(cfg) !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n var ALL_SVG_TAGS = addToSet({}, svg$1);\n addToSet(ALL_SVG_TAGS, svgFilters);\n addToSet(ALL_SVG_TAGS, svgDisallowed);\n var ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n var _checkValidNamespace = function _checkValidNamespace(element) {\n var parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n var tagName = stringToLowerCase(element.tagName);\n var parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n var _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n var _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n var doc;\n var leadingWhitespace;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n var body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null, false);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n var _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n var _isNode = function _isNode(object) {\n return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check if tagname contains Unicode */\n if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n var tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Mitigate a problem with templates inside select */\n if (tagName === 'select' && regExpTest(/<template/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any ocurrence of processing instructions */\n if (currentNode.nodeType === 7) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === 8 && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n var parentNode = getParentNode(currentNode) || currentNode.parentNode;\n var childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n var childCount = childNodes.length;\n for (var i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = stringReplace(content, MUSTACHE_EXPR$1, ' ');\n content = stringReplace(content, ERB_EXPR$1, ' ');\n content = stringReplace(content, TMPLIT_EXPR$1, ' ');\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n\n /**\n * _basicCustomElementCheck\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n * @param {string} tagName name of the tag of the node to sanitize\n */\n var _basicCustomElementTest = function _basicCustomElementTest(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT$1);\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n var attr;\n var value;\n var lcName;\n var l;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n var attributes = currentNode.attributes;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n var hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n var _attr = attr,\n name = _attr.name,\n namespaceURI = _attr.namespaceURI;\n value = name === 'value' ? attr.value : stringTrim(attr.value);\n lcName = transformCaseFunc(name);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = stringReplace(value, MUSTACHE_EXPR$1, ' ');\n value = stringReplace(value, ERB_EXPR$1, ' ');\n value = stringReplace(value, TMPLIT_EXPR$1, ' ');\n }\n\n /* Is `value` valid for this attribute? */\n var lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && _typeof(trustedTypes) === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n arrayPop(DOMPurify.removed);\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n var shadowNode;\n var shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n var cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var body;\n var importedNode;\n var currentNode;\n var oldNode;\n var returnNode;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n var tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n oldNode = currentNode;\n }\n oldNode = null;\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmod) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$1, ' ');\n serializedHTML = stringReplace(serializedHTML, ERB_EXPR$1, ' ');\n serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR$1, ' ');\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n var lcTag = transformCaseFunc(tag);\n var lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\n\n return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n","/*! jQuery Fancy File Input plugin - v2.0.4 - 2018-11-23\n* Copyright (c) 2018 Atlassian Pty Ltd; Licensed Apache-2.0 */\n(function (root, factory) {\n if (root === undefined && window !== undefined) root = window;\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module unless amdModuleId is set\n define([\"jquery\"], function (a0) {\n return (root['FancyFileInput'] = factory(a0));\n });\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require(\"jquery\"));\n } else {\n root['FancyFileInput'] = factory(root[\"jQuery\"]);\n }\n}(this, function ($) {\n\n/**\n * --------------------------------------------------------------------\n * jQuery Fancy File Input plugin\n * Author: Atlassian Pty Ltd\n * Copyright © 2012 - 2016 Atlassian Pty Ltd. Licensed under the\n * Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n * implied. See the License for the specific language governing\n * permissions and limitations under the License.\n * --------------------------------------------------------------------\n */\n\n/* jshint -W097 */\n'use strict';\n\nvar fakePathRegex = /^.*[\\\\\\/]/;\nvar multipleFileTextRegex = /\\{0\\}/gi;\nvar ie = (function() {\n var v = 3;\n var div = document.createElement( 'div' );\n var all = div.getElementsByTagName( 'i' );\n\n do {\n div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->';\n } while (all[0]);\n\n return v > 4 ? v : document.documentMode;\n}());\n\nfunction FancyFileInput(el, options) {\n var instance = $(el).data('FancyFileInput');\n if (instance) {\n return instance;\n }\n options = $.extend({}, FancyFileInput.defaults, options);\n this.el = el;\n this.$el = $(el);\n this.$label = this.createLabel(options.buttonText);\n this._addLabelText();\n this.$clearButton = $('<button>', {\n text: (this.$label.attr('data-ffi-clearButtonText') || options.clearButtonText),\n 'class': 'ffi-clear',\n type: 'button',\n 'tabindex': '-1'\n });\n this.multipleFileTextPattern = this.$label.attr('data-ffi-multipleFileTextPattern') || options.multipleFileTextPattern;\n this._eventNamespace = '.ffi';\n this.CLASSES = {\n disabled: 'is-disabled',\n focused: 'is-focused',\n active: 'is-active',\n valid: 'is-valid',\n invalid: 'is-invalid'\n };\n this[this.isDisabled() ? 'disable' : 'enable']();\n this.isFocused = false;\n}\n\nFancyFileInput.defaults = {\n buttonText: 'Browse\\u2026',\n clearButtonText: 'Clear',\n multipleFileTextPattern: '{0} files'\n};\n\nFancyFileInput.prototype._addLabelText = function attLabelText() {\n var $associatedLabel = $('label[for=\"' + this.el.id + '\"]');\n if ($associatedLabel.length) {\n this.$el.attr('aria-label', $associatedLabel.text());\n }\n};\n\nFancyFileInput.prototype.createLabel = function (buttonText) {\n var $label = this.$el.parent('.ffi[data-ffi-button-text]');\n if (!$label.length) {\n $label = this.$el.wrap($('<label>', { 'class': 'ffi', 'data-ffi-button-text': buttonText })).parent();\n }\n return $label;\n};\n\nFancyFileInput.prototype.isDisabled = function () {\n return this.$el.is(':disabled');\n};\n\nFancyFileInput.prototype.formatMultipleFileText = function (numFiles) {\n return this.multipleFileTextPattern.replace(multipleFileTextRegex, numFiles);\n};\n\nFancyFileInput.prototype.bindEvents = function () {\n this.$el\n .on('invalid' + this._eventNamespace, $.proxy(this.checkValidity, this))\n .on('change' + this._eventNamespace, $.proxy(this.change, this))\n .on('keydown' + this._eventNamespace, $.proxy(this.keydown, this))\n .on('mousedown' + this._eventNamespace, $.proxy(this.mousedown, this))\n .on('mouseup' + this._eventNamespace, $.proxy(this.mouseup, this))\n .on('focus' + this._eventNamespace, $.proxy(this.focus, this))\n .on('blur' + this._eventNamespace, $.proxy(this.blur, this));\n this.$clearButton.on('click' + this._eventNamespace, $.proxy(this.clear, this));\n};\n\nFancyFileInput.prototype.unbindEvents = function () {\n this.$el.off(this._eventNamespace);\n this.$clearButton.off(this._eventNamespace);\n};\n\nFancyFileInput.prototype.fireEvent = function (event) {\n this.$el.trigger(event + this._eventNamespace);\n};\n\nFancyFileInput.prototype.enable = function () {\n this.bindEvents();\n this.$el.prop('disabled', false);\n this.$label.removeClass(this.CLASSES.disabled);\n};\n\nFancyFileInput.prototype.disable = function () {\n this.unbindEvents();\n this.$el.prop('disabled', true);\n this.$label.addClass(this.CLASSES.disabled);\n};\n\nFancyFileInput.prototype.clear = function () {\n this.$el.wrap('<form>').closest('form').get(0).reset();\n this.$el.unwrap();\n this.el.value = '';\n this.change();\n return false;\n};\n\nFancyFileInput.prototype.focus = function () {\n var instance = this;\n\n this.$label.addClass(this.CLASSES.focused);\n\n // toggle focus so that the cursor appears back in the field instead of on the button\n if (ie && !this.isFocused) {\n this.isFocused = true;\n\n setTimeout(function() {\n instance.$el.blur();\n instance.$el.focus();\n }, 0);\n }\n};\n\nFancyFileInput.prototype.blur = function () {\n if (!ie || !this.isFocused) {\n this.$label.removeClass(this.CLASSES.focused);\n this.isFocused = false;\n }\n};\n\nFancyFileInput.prototype.mousedown = function () {\n this.$label.addClass(this.CLASSES.active);\n};\n\nFancyFileInput.prototype.mouseup = function () {\n this.$label.removeClass(this.CLASSES.active);\n};\n\nFancyFileInput.prototype.keydown = function (e) {\n var keyCode = e.which;\n var BACKSPACE = 8;\n var TAB = 9;\n var DELETE = 46;\n\n // Add clear behaviour for all browsers\n if (keyCode === BACKSPACE || keyCode === DELETE) {\n this.clear();\n e.preventDefault();\n }\n\n // This works around the IE double tab-stop - no events or blur/change occur when moving between\n // the field part of the input and the button part. This is dirty, but it works.\n if (ie && keyCode === TAB) {\n var instance = this;\n\n this.isFocused = false;\n this.$el.prop('disabled',true);\n\n setTimeout(function(){\n instance.$el.prop('disabled', false).blur();\n }, 0);\n }\n};\n\nFancyFileInput.prototype.checkValidity = function () {\n if (!this.el.required) {\n return;\n }\n var isInvalid = this.$el.is(':invalid');\n\n this.$label.toggleClass(this.CLASSES.invalid, isInvalid).toggleClass(this.CLASSES.valid, !isInvalid);\n};\n\nFancyFileInput.prototype.change = function () {\n var files;\n var val = '';\n\n this.checkValidity();\n\n // multiple file selection\n if (this.el.multiple && this.el.files.length > 1) {\n files = this.formatMultipleFileText(this.el.files.length); // '5 files'\n } else {\n files = this.el.value; // 'README.txt'\n }\n\n if (files.length) {\n val = files.replace(fakePathRegex, ''); // Strips off the C:\\fakepath nonsense\n this.$clearButton.appendTo(this.$label);\n } else {\n this.$clearButton.detach();\n }\n\n this.$el.focus();\n this.setFieldText(val);\n this.fireEvent('value-changed');\n};\n\nFancyFileInput.prototype.setFieldText = function (text) {\n var dataAttribute = 'data-ffi-value';\n if (text.length) {\n this.$label.attr(dataAttribute, text);\n this.fireEvent('value-added');\n } else {\n this.$label.removeAttr(dataAttribute);\n this.fireEvent('value-cleared');\n }\n};\n\n$.fn.fancyFileInput = function (options) {\n return this.each(function () {\n var ffi = new FancyFileInput(this, options);\n $(this).data('FancyFileInput', ffi);\n });\n};\n\nreturn FancyFileInput;\n\n}));\n","// This file is deprecated in 1.12.0 to be removed in 1.14\n( function() {\n\"use strict\";\n\ndefine( [\n\t\"jquery\",\n\t\"./data\",\n\t\"./disable-selection\",\n\t\"./focusable\",\n\t\"./form\",\n\t\"./ie\",\n\t\"./keycode\",\n\t\"./labels\",\n\t\"./jquery-patch.js\",\n\t\"./plugin\",\n\t\"./safe-active-element\",\n\t\"./safe-blur\",\n\t\"./scroll-parent\",\n\t\"./tabbable\",\n\t\"./unique-id\",\n\t\"./version\"\n] );\n} )();\n","/*!\n * jQuery UI :data 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: http://api.jqueryui.com/data-selector/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.extend( $.expr.pseudos, {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n} );\n","( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n// This file is deprecated\nreturn $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n} );\n","/*!\n * jQuery UI Keycode 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n} );\n","( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nreturn $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n} );\n","( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n} );\n","( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n} );\n","/*!\n * jQuery UI Scroll Parent 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n} );\n","( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.ui = $.ui || {};\n\nreturn $.ui.version = \"1.13.2\";\n\n} );\n","/*!\n * jQuery UI Widget 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nvar widgetUuid = 0;\nvar widgetHasOwnProperty = Array.prototype.hasOwnProperty;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\n\t\t\t// Only trigger remove when necessary to save time\n\t\t\tevents = $._data( elem, \"events\" );\n\t\t\tif ( events && events.remove ) {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( Array.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this || !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction bindRemoveEvent() {\n\t\t\tvar nodesToBind = [];\n\n\t\t\toptions.element.each( function( _, element ) {\n\t\t\t\tvar isTracked = $.map( that.classesElementLookup, function( elements ) {\n\t\t\t\t\treturn elements;\n\t\t\t\t} )\n\t\t\t\t\t.some( function( elements ) {\n\t\t\t\t\t\treturn elements.is( element );\n\t\t\t\t\t} );\n\n\t\t\t\tif ( !isTracked ) {\n\t\t\t\t\tnodesToBind.push( element );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthat._on( $( nodesToBind ), {\n\t\t\t\tremove: \"_untrackClassesElement\"\n\t\t\t} );\n\t\t}\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tbindRemoveEvent();\n\t\t\t\t\tcurrent = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\n\t\tthis._off( $( event.target ) );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( typeof callback === \"function\" &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t} else if ( options === true ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nreturn $.widget;\n\n} );\n","/* eslint-disable max-len, camelcase */\n/*!\n * jQuery UI Datepicker 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: http://api.jqueryui.com/datepicker/\n//>>demos: http://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../version\",\n\t\t\t\"../keycode\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.extend( $.ui, { datepicker: { version: \"1.13.2\" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n\n/* Date picker manager.\n Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n Settings for (groups of) date pickers are maintained in an instance object,\n allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ \"\" ] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n\t\t\t\"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ], // For formatting\n\t\tdayNames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ], // For formatting\n\t\tdayNamesShort: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ], // For formatting\n\t\tdayNamesMin: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\", // Additional text to append to the year in the month headers,\n\t\tselectMonthLabel: \"Select month\", // Invisible label for month selector\n\t\tselectYearLabel: \"Select year\" // Invisible label for year selector\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tonUpdateDatepicker: null, // Define a callback function when the datepicker is updated\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ \"\" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ] );\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( \"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param settings object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t * @param settings object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === \"div\" || nodeName === \"span\" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( \"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( \"keydown\", this._doKeyDown ).\n\t\t\ton( \"keypress\", this._doKeyPress ).on( \"keyup\", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, \"datepicker\", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, \"appendText\" ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( \"<span>\" )\n\t\t\t\t.addClass( this._appendClass )\n\t\t\t\t.text( appendText );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.append );\n\t\t}\n\n\t\tinput.off( \"focus\", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, \"showOn\" );\n\t\tif ( showOn === \"focus\" || showOn === \"both\" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( \"focus\", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === \"button\" || showOn === \"both\" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, \"buttonText\" );\n\t\t\tbuttonImage = this._get( inst, \"buttonImage\" );\n\n\t\t\tif ( this._get( inst, \"buttonImageOnly\" ) ) {\n\t\t\t\tinst.trigger = $( \"<img>\" )\n\t\t\t\t\t.addClass( this._triggerClass )\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\tsrc: buttonImage,\n\t\t\t\t\t\talt: buttonText,\n\t\t\t\t\t\ttitle: buttonText\n\t\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tinst.trigger = $( \"<button type='button'>\" )\n\t\t\t\t\t.addClass( this._triggerClass );\n\t\t\t\tif ( buttonImage ) {\n\t\t\t\t\tinst.trigger.html(\n\t\t\t\t\t\t$( \"<img>\" )\n\t\t\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\t\tsrc: buttonImage,\n\t\t\t\t\t\t\t\talt: buttonText,\n\t\t\t\t\t\t\t\ttitle: buttonText\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tinst.trigger.text( buttonText );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.trigger );\n\t\t\tinst.trigger.on( \"click\", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, \"autoSize\" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, \"dateFormat\" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( \"size\", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, \"datepicker\", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param input element - ignored\n\t * @param date\tstring or Date - the initial date to display\n\t * @param onSelect function - the function to call when a date is selected\n\t * @param settings object - update the dialog date picker instance's settings (anonymous object)\n\t * @param pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $( \"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\" );\n\t\t\tthis._dialogInput.on( \"keydown\", this._doKeyDown );\n\t\t\t$( \"body\" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( \"left\", ( this._pos[ 0 ] + 20 ) + \"px\" ).css( \"top\", this._pos[ 1 ] + \"px\" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, \"datepicker\" );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( \"focus\", this._showDatepicker ).\n\t\t\t\toff( \"keydown\", this._doKeyDown ).\n\t\t\t\toff( \"keypress\", this._doKeyPress ).\n\t\t\t\toff( \"keyup\", this._doKeyUp );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t\tthis._curInst = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() {\n\t\t\t\t\tthis.disabled = false;\n\t\t\t\t} ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"1.0\", cursor: \"\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().removeClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\n\t\t\t// Delete entry\n\t\t\tfunction( value ) {\n\t\t\t\treturn ( value === target ? null : value );\n\t\t\t} );\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() {\n\t\t\t\t\tthis.disabled = true;\n\t\t\t\t} ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"0.5\", cursor: \"default\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().addClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\n\t\t\t// Delete entry\n\t\t\tfunction( value ) {\n\t\t\t\treturn ( value === target ? null : value );\n\t\t\t} );\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param target element - the target input field or division or span\n\t * @return object - the associated instance data\n\t * @throws error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, \"datepicker\" );\n\t\t} catch ( err ) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param target element - the target input field or division or span\n\t * @param name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param value any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === \"string\" ) {\n\t\t\treturn ( name === \"defaults\" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === \"all\" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === \"string\" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param target element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param target element - the target input field or division or span\n\t * @param date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param target element - the target input field or division or span\n\t * @param noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( \".ui-datepicker-rtl\" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( \"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, \"onSelect\" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, \"constrainInput\" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, \"dateFormat\" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < \" \" || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t} catch ( err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param input element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== \"input\" ) { // find from button/image trigger\n\t\t\tinput = $( \"input\", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, \"beforeShow\" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( \"position\" ) === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: \"absolute\", display: \"block\", top: \"-1000px\" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : ( isFixed ? \"fixed\" : \"absolute\" ) ), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, \"showAnim\" );\n\t\t\tduration = $.datepicker._get( inst, \"duration\" );\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || \"show\" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" ),\n\t\t\tonUpdateDatepicker = $.datepicker._get( inst, \"onUpdateDatepicker\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( \"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\" ).width( \"\" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( \"ui-datepicker-multi-\" + cols ).css( \"width\", ( width * cols ) + \"em\" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-multi\" );\n\t\tinst.dpDiv[ ( this._get( inst, \"isRTL\" ) ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-rtl\" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( \"focus\" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( \"select.ui-datepicker-year\" ).first().replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\n\t\tif ( onUpdateDatepicker ) {\n\t\t\tonUpdateDatepicker.apply( ( inst.input ? inst.input[ 0 ] : null ), [ inst ] );\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, \"isRTL\" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\twhile ( obj && ( obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.pseudos.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? \"previousSibling\" : \"nextSibling\" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param input element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, \"datepicker\" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, \"showAnim\" );\n\t\t\tduration = this._get( inst, \"duration\" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t( showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, \"onClose\" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : \"\" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: \"absolute\", left: \"0\", top: \"-100px\" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( \"body\" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( \".ui-datepicker-calendar\" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( \"#\" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( \".\" + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset, period );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ \"selected\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\tinst[ \"draw\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = parseInt( $( \"a\", td ).attr( \"data-date\" ) );\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, \"\" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, \"onSelect\" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( \"change\" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== \"object\" ) {\n\t\t\t\tinst.input.trigger( \"focus\" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, \"altField\" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, \"altFormat\" ) || this._get( inst, \"dateFormat\" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( document ).find( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param date Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), \"\" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param date Date - the date to get the week for\n\t * @return number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param format string - the expected format of the date\n\t * @param value string - the date in the above format\n\t * @param settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = ( typeof value === \"object\" ? value.toString() : value + \"\" );\n\t\tif ( value === \"\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === \"@\" ? 14 : ( match === \"!\" ? 20 :\n\t\t\t\t\t( match === \"y\" && isDoubled ? 4 : ( match === \"o\" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === \"y\" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( \"^\\\\d{\" + minSize + \",\" + size + \"}\" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber( \"d\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName( \"D\", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber( \"o\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber( \"m\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName( \"M\", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber( \"y\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date( getNumber( \"@\" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date( ( getNumber( \"!\" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D - day name short\n\t * DD - day name long\n\t * m - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M - month name short\n\t * MM - month name long\n\t * y - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param format string - the desired format of the date\n\t * @param date Date - the date value to format\n\t * @param settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber( \"d\", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName( \"D\", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber( \"o\",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber( \"m\", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName( \"M\", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += ( lookAhead( \"y\" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? \"0\" : \"\" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, \"dateFormat\" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( event ) {\n\t\t\tdates = ( noDefault ? \"\" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, \"defaultDate\" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || \"d\" ) {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === \"\" ? defaultDate : ( typeof date === \"string\" ? offsetString( date ) :\n\t\t\t\t( typeof date === \"number\" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param date (Date) the date to check\n\t * @return (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? \"\" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === \"\" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers. These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find( \"[data-handler]\" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( \"data-month\" ), +this.getAttribute( \"data-year\" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"M\" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"Y\" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( \"data-event\" ), handler[ this.getAttribute( \"data-handler\" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, \"isRTL\" ),\n\t\t\tshowButtonPanel = this._get( inst, \"showButtonPanel\" ),\n\t\t\thideIfNoPrevNext = this._get( inst, \"hideIfNoPrevNext\" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, \"navigationAsDateFormat\" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, \"showCurrentAtPos\" ),\n\t\t\tstepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, \"prevText\" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tif ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ) {\n\t\t\tprev = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-prev ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"prev\",\n\t\t\t\t\t\"data-event\": \"click\",\n\t\t\t\t\ttitle: prevText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"e\" : \"w\" ) )\n\t\t\t\t\t\t.text( prevText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t} else if ( hideIfNoPrevNext ) {\n\t\t\tprev = \"\";\n\t\t} else {\n\t\t\tprev = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-prev ui-corner-all ui-state-disabled\",\n\t\t\t\t\ttitle: prevText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"e\" : \"w\" ) )\n\t\t\t\t\t\t.text( prevText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t}\n\n\t\tnextText = this._get( inst, \"nextText\" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tif ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ) {\n\t\t\tnext = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-next ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"next\",\n\t\t\t\t\t\"data-event\": \"click\",\n\t\t\t\t\ttitle: nextText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"w\" : \"e\" ) )\n\t\t\t\t\t\t.text( nextText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t} else if ( hideIfNoPrevNext ) {\n\t\t\tnext = \"\";\n\t\t} else {\n\t\t\tnext = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-next ui-corner-all ui-state-disabled\",\n\t\t\t\t\ttitle: nextText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.attr( \"class\", \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"w\" : \"e\" ) )\n\t\t\t\t\t\t.text( nextText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t}\n\n\t\tcurrentText = this._get( inst, \"currentText\" );\n\t\tgotoDate = ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = \"\";\n\t\tif ( !inst.inline ) {\n\t\t\tcontrols = $( \"<button>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\"class\": \"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"hide\",\n\t\t\t\t\t\"data-event\": \"click\"\n\t\t\t\t} )\n\t\t\t\t.text( this._get( inst, \"closeText\" ) )[ 0 ].outerHTML;\n\t\t}\n\n\t\tbuttonPanel = \"\";\n\t\tif ( showButtonPanel ) {\n\t\t\tbuttonPanel = $( \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" )\n\t\t\t\t.append( isRTL ? controls : \"\" )\n\t\t\t\t.append( this._isInRange( inst, gotoDate ) ?\n\t\t\t\t\t$( \"<button>\" )\n\t\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\"class\": \"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all\",\n\t\t\t\t\t\t\t\"data-handler\": \"today\",\n\t\t\t\t\t\t\t\"data-event\": \"click\"\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.text( currentText ) :\n\t\t\t\t\t\"\" )\n\t\t\t\t.append( isRTL ? \"\" : controls )[ 0 ].outerHTML;\n\t\t}\n\n\t\tfirstDay = parseInt( this._get( inst, \"firstDay\" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, \"showWeek\" );\n\t\tdayNames = this._get( inst, \"dayNames\" );\n\t\tdayNamesMin = this._get( inst, \"dayNamesMin\" );\n\t\tmonthNames = this._get( inst, \"monthNames\" );\n\t\tmonthNamesShort = this._get( inst, \"monthNamesShort\" );\n\t\tbeforeShowDay = this._get( inst, \"beforeShowDay\" );\n\t\tshowOtherMonths = this._get( inst, \"showOtherMonths\" );\n\t\tselectOtherMonths = this._get( inst, \"selectOtherMonths\" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = \"\";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"right\" : \"left\" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"left\" : \"right\" ); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : \"\" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : \"\" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = ( showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get( inst, \"weekHeader\" ) + \"</th>\" : \"\" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\" ) + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[ day ] + \"'>\" + dayNamesMin[ day ] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = ( !showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get( inst, \"calculateWeek\" )( printDate ) + \"</td>\" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, \"\" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? \" ui-datepicker-other-month\" : \"\" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\" : \"\" ) + // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\" ) ) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? \" title='\" + daySettings[ 2 ].replace( /'/g, \"&#39;\" ) + \"'\" : \"\" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\" ) + \">\" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? \" ui-priority-secondary\" : \"\" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#' aria-current='\" + ( printDate.getTime() === currentDate.getTime() ? \"true\" : \"false\" ) + // mark date as selected for screen reader\n\t\t\t\t\t\t\t\"' data-date='\" + printDate.getDate() + // store date as data\n\t\t\t\t\t\t\t\"'>\" + printDate.getDate() + \"</a>\" ) ) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + ( isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\" ) : \"\" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, \"changeMonth\" ),\n\t\t\tchangeYear = this._get( inst, \"changeYear\" ),\n\t\t\tshowMonthAfterYear = this._get( inst, \"showMonthAfterYear\" ),\n\t\t\tselectMonthLabel = this._get( inst, \"selectMonthLabel\" ),\n\t\t\tselectYearLabel = this._get( inst, \"selectYearLabel\" ),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[ drawMonth ] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' aria-label='\" + selectMonthLabel + \"' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t( month === drawMonth ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + monthNamesShort[ month ] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, \"yearRange\" ).split( \":\" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || \"\" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' aria-label='\" + selectYearLabel + \"' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t( year === drawYear ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, \"yearSuffix\" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" ) + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === \"Y\" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === \"M\" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === \"D\" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === \"M\" || period === \"Y\" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, \"onChangeMonthYear\" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, \"numberOfMonths\" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === \"number\" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + \"Date\" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, \"yearRange\" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( \":\" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, \"shortYearCutoff\" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, \"dayNamesShort\" ), dayNames: this._get( inst, \"dayNames\" ),\n\t\t\tmonthNamesShort: this._get( inst, \"monthNamesShort\" ), monthNames: this._get( inst, \"monthNames\" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, \"dateFormat\" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.on( \"mouseout\", selector, function() {\n\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-prev-hover\" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-next-hover\" );\n\t\t\t}\n\t\t} )\n\t\t.on( \"mouseover\", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( \".ui-datepicker-calendar\" ).find( \"a\" ).removeClass( \"ui-state-hover\" );\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-prev-hover\" );\n\t\t}\n\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-next-hover\" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n @param options string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n @return jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( \"mousedown\", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( \"#\" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( \"body\" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === \"string\" && ( options === \"isDisabled\" || options === \"getDate\" || options === \"widget\" ) ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === \"option\" && arguments.length === 2 && typeof arguments[ 1 ] === \"string\" ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\t$.datepicker[ \"_\" + options + \"Datepicker\" ]\n\t\t\t\t.apply( $.datepicker, [ this ].concat( otherArgs ) );\n\t\t} else {\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t\t}\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.13.2\";\n\nreturn $.datepicker;\n\n} );\n","/*!\n * jQuery UI Draggable 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: http://api.jqueryui.com/draggable/\n//>>demos: http://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./mouse\",\n\t\t\t\"../data\",\n\t\t\t\"../plugin\",\n\t\t\t\"../safe-active-element\",\n\t\t\t\"../safe-blur\",\n\t\t\t\"../scroll-parent\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.13.2\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( typeof this.options.revert === \"function\" &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = typeof o.helper === \"function\",\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// Http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\tif ( inst.options.snap.release ) {\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\tif ( inst.options.snap.snap ) {\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nreturn $.ui.draggable;\n\n} );\n","/*!\n * jQuery UI Mouse 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../ie\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nreturn $.widget( \"ui.mouse\", {\n\tversion: \"1.13.2\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseUp( event );\n\t\t}\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\tif ( this._mouseStarted ) {\n\t\t\t\tthis._mouseDrag( event );\n\t\t\t} else {\n\t\t\t\tthis._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) {\n\t\treturn true;\n\t}\n} );\n\n} );\n","/*!\n * jQuery UI Sortable 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: http://api.jqueryui.com/sortable/\n//>>demos: http://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./mouse\",\n\t\t\t\"../data\",\n\t\t\t\"../ie\",\n\t\t\t\"../scroll-parent\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.13.2\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Prepare the dragged items parent\n\t\tthis.appendTo = $( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem.parent() );\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// After we get the helper offset, but before we get the parent offset we can\n\t\t// change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t$.extend( this.offset, {\n\t\t\tparent: this._getParentOffset()\n\t\t} );\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\t// We need to make sure to grab the zIndex before setting the\n\t\t// opacity, because setting the opacity to anything lower than 1\n\t\t// causes the zIndex to change from \"auto\" to 0.\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t//Move the helper, if needed\n\t\tif ( !this.helper.parent().is( this.appendTo ) ) {\n\t\t\tthis.helper.detach().appendTo( this.appendTo );\n\n\t\t\t//Update position\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Generate the original position\n\t\tthis.position = this.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\t\tthis.lastPositionAbs = this.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tthis._mouseDrag( event );\n\n\t\treturn true;\n\n\t},\n\n\t_scroll: function( event ) {\n\t\tvar o = this.options,\n\t\t\tscrolled = false;\n\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t}\n\n\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t}\n\n\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t);\n\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t);\n\t\t\t}\n\n\t\t}\n\n\t\treturn scrolled;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( o.scroll ) {\n\t\t\tif ( this._scroll( event ) !== false ) {\n\n\t\t\t\t//Update item positions used in position checks\n\t\t\t\tthis._refreshItemPositions( true );\n\n\t\t\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.dragDirection = {\n\t\t\tvertical: this._getDragVerticalDirection(),\n\t\t\thorizontal: this._getDragHorizontalDirection()\n\t\t};\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ?\n\t\t\t\t\"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\t\t\t\tthis._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this.dragDirection.vertical;\n\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 ) :\n\t\t\t( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this.dragDirection.vertical,\n\t\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ typeof this.options.items === \"function\" ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ typeof this.options.items === \"function\" ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t_refreshItemPositions: function( fast ) {\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( this.currentContainer && item.instance !== this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t// This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tthis._refreshItemPositions( fast );\n\n\t\tvar i, p;\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className, nodeName,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\tnodeName = that.currentItem[ 0 ].nodeName.toLowerCase();\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar element = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element doesn't have a actual height or width by itself (without\n\t\t\t\t\t// styles coming from a stylesheet), it receives the inline height and width\n\t\t\t\t\t// from the dragged item. Or, if it's a tbody or tr, it's going to have a height\n\t\t\t\t\t// anyway since we're populating them with <td>s above, but they're unlikely to\n\t\t\t\t\t// be the correct height on their own if the row heights are dynamic, so we'll\n\t\t\t\t\t// always assign the height of the dragged item given forcePlaceholderSize\n\t\t\t\t\t// is true.\n\t\t\t\t\tif ( !p.height() || ( o.forcePlaceholderSize &&\n\t\t\t\t\t\t\t( nodeName === \"tbody\" || nodeName === \"tr\" ) ) ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( itemWithLeastDistance ) {\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true );\n\t\t\t} else {\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\t}\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\t//Update scrollParent\n\t\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t\t//Update overflowOffset\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t\t}\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = typeof o.helper === \"function\" ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\tthis.appendTo[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\tif ( a ) {\n\t\t\ta[ 0 ].appendChild( this.placeholder[ 0 ] );\n\t\t} else {\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\t\t}\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n} );\n","(function () {\n 'use strict';\n\n var DocumentFragment = window.DocumentFragment;\n var elProto = window.HTMLElement.prototype;\n var matchesSelector = (\n elProto.matches ||\n elProto.msMatchesSelector ||\n elProto.webkitMatchesSelector ||\n elProto.mozMatchesSelector ||\n elProto.oMatchesSelector\n );\n\n function getData (element, name) {\n if (element.__SKATE_TEMPLATE_HTML_DATA) {\n return element.__SKATE_TEMPLATE_HTML_DATA[name];\n }\n }\n\n function setData (element, name, value) {\n if (!element.__SKATE_TEMPLATE_HTML_DATA) {\n element.__SKATE_TEMPLATE_HTML_DATA = {};\n }\n\n element.__SKATE_TEMPLATE_HTML_DATA[name] = value;\n\n return element;\n }\n\n function createFragmentFromString (domString) {\n var specialMap = {\n caption: 'table',\n dd: 'dl',\n dt: 'dl',\n li: 'ul',\n tbody: 'table',\n td: 'tr',\n thead: 'table',\n tr: 'tbody'\n };\n\n var tag = domString.match(/\\s*<([^\\s>]+)/);\n var div = document.createElement(tag && specialMap[tag[1]] || 'div');\n\n div.innerHTML = domString;\n\n return createFragmentFromNodeList(div.childNodes);\n }\n\n function createFragmentFromNodeList (nodeList) {\n var frag = document.createDocumentFragment();\n\n while (nodeList && nodeList.length) {\n frag.appendChild(nodeList[0]);\n }\n\n return frag;\n }\n\n function getNodesBetween (startNode, endNode) {\n var nodes = [];\n var nextNode = startNode.nextSibling;\n\n while (nextNode !== endNode) {\n nodes.push(nextNode);\n nextNode = nextNode.nextSibling;\n }\n\n return nodes;\n }\n\n function findChildrenMatchingSelector (sourceNode, selector) {\n if (selector) {\n var found = sourceNode.querySelectorAll(selector);\n var foundLength = found.length;\n var filtered = [];\n\n for (var a = 0; a < foundLength; a++) {\n var node = found[a];\n\n if (node.parentNode === sourceNode) {\n filtered.push(node);\n }\n }\n\n return filtered;\n }\n\n return [].slice.call(sourceNode.childNodes) || [];\n }\n\n function htmlTemplateParentWrapper (element) {\n var contentNodes = getData(element, 'content');\n var contentNodesLen = contentNodes.length;\n\n return {\n childNodes: {\n get: function () {\n var nodes = [];\n\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n\n if (contentNode.isDefault) {\n continue;\n }\n\n nodes = nodes.concat(getNodesBetween(contentNode.startNode, contentNode.endNode));\n }\n\n return nodes;\n }\n },\n\n firstChild: {\n get: function () {\n var childNodes = this.childNodes;\n return childNodes.length && childNodes[0] || null;\n }\n },\n\n innerHTML: {\n get: function () {\n var html = '';\n var childNodes = this.childNodes;\n var childNodesLen = childNodes.length;\n\n for (var a = 0; a < childNodesLen; a++) {\n var childNode = childNodes[a];\n html += childNode.outerHTML || childNode.textContent;\n }\n\n return html;\n },\n set: function (html) {\n var targetFragment = createFragmentFromString(html);\n\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n var childNodes = getNodesBetween(contentNode.startNode, contentNode.endNode);\n\n // Remove all nodes (including default content).\n for (var b = 0; b < childNodes.length; b++) {\n var childNode = childNodes[b];\n childNode.parentNode.removeChild(childNode);\n }\n\n var foundNodes = findChildrenMatchingSelector(targetFragment, contentNode.selector);\n\n // Add any matched nodes from the given HTML.\n for (var c = 0; c < foundNodes.length; c++) {\n contentNode.container.insertBefore(foundNodes[c], contentNode.endNode);\n }\n\n // If no nodes were found, set the default content.\n if (foundNodes.length) {\n removeDefaultContent(contentNode);\n } else {\n addDefaultContent(contentNode);\n }\n }\n }\n },\n\n lastChild: {\n get: function () {\n for (var a = contentNodesLen - 1; a > -1; a--) {\n var contentNode = contentNodes[a];\n\n if (contentNode.isDefault) {\n continue;\n }\n\n var childNodes = this.childNodes;\n var childNodesLen = childNodes.length;\n\n return childNodes[childNodesLen - 1];\n }\n\n return null;\n }\n },\n\n outerHTML: {\n get: function () {\n var name = this.tagName.toLowerCase();\n var html = '<' + name;\n var attrs = this.attributes;\n\n if (attrs) {\n var attrsLength = attrs.length;\n\n for (var a = 0; a < attrsLength; a++) {\n var attr = attrs[a];\n html += ' ' + attr.nodeName + '=\"' + attr.nodeValue + '\"';\n }\n }\n\n html += '>';\n html += this.innerHTML;\n html += '</' + name + '>';\n\n return html;\n }\n },\n\n textContent: {\n get: function () {\n var textContent = '';\n var childNodes = this.childNodes;\n var childNodesLength = this.childNodes.length;\n\n for (var a = 0; a < childNodesLength; a++) {\n textContent += childNodes[a].textContent;\n }\n\n return textContent;\n },\n set: function (textContent) {\n var acceptsTextContent;\n\n // Removes all nodes (including default content).\n this.innerHTML = '';\n\n // Find the first content node without a selector.\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n\n if (!contentNode.selector) {\n acceptsTextContent = contentNode;\n break;\n }\n }\n\n // There may be no content nodes that accept text content.\n if (acceptsTextContent) {\n if (textContent) {\n removeDefaultContent(acceptsTextContent);\n acceptsTextContent.container.insertBefore(document.createTextNode(textContent), acceptsTextContent.endNode);\n } else {\n addDefaultContent(acceptsTextContent);\n }\n }\n }\n },\n\n appendChild: {\n value: function (node) {\n if (node instanceof DocumentFragment) {\n var fragChildNodes = node.childNodes;\n\n [].slice.call(fragChildNodes).forEach(function (node) {\n this.appendChild(node);\n }.bind(this));\n\n return this;\n }\n\n for (var b = 0; b < contentNodesLen; b++) {\n var contentNode = contentNodes[b];\n var contentSelector = contentNode.selector;\n\n if (!contentSelector || node instanceof window.HTMLElement && matchesSelector.call(node, contentSelector)) {\n removeDefaultContent(contentNode);\n contentNode.endNode.parentNode.insertBefore(node, contentNode.endNode);\n break;\n }\n }\n\n return this;\n }\n },\n\n insertAdjacentHTML: {\n value: function (where, html) {\n if (where === 'afterbegin') {\n this.insertBefore(createFragmentFromString(html), this.childNodes[0]);\n } else if (where === 'beforeend') {\n this.appendChild(createFragmentFromString(html));\n } else {\n element.insertAdjacentHTML(where, html);\n }\n\n return this;\n }\n },\n\n insertBefore: {\n value: function (node, referenceNode) {\n // If no reference node is supplied, we append. This also means that we\n // don't need to add / remove any default content because either there\n // aren't any nodes or appendChild will handle it.\n if (!referenceNode) {\n return this.appendChild(node);\n }\n\n // Handle document fragments.\n if (node instanceof DocumentFragment) {\n var fragChildNodes = node.childNodes;\n\n if (fragChildNodes) {\n var fragChildNodesLength = fragChildNodes.length;\n\n for (var a = 0; a < fragChildNodesLength; a++) {\n this.insertBefore(fragChildNodes[a], referenceNode);\n }\n }\n\n return this;\n }\n\n var hasFoundReferenceNode = false;\n\n // There's no reason to handle default content add / remove because:\n // 1. If no reference node is supplied, appendChild handles it.\n // 2. If a reference node is supplied, there already is content.\n // 3. If a reference node is invalid, an exception is thrown, but also\n // it's state would not change even if it wasn't.\n mainLoop:\n for (var b = 0; b < contentNodesLen; b++) {\n var contentNode = contentNodes[b];\n var betweenNodes = getNodesBetween(contentNode.startNode, contentNode.endNode);\n var betweenNodesLen = betweenNodes.length;\n\n for (var c = 0; c < betweenNodesLen; c++) {\n var betweenNode = betweenNodes[c];\n\n if (betweenNode === referenceNode) {\n hasFoundReferenceNode = true;\n }\n\n if (hasFoundReferenceNode) {\n var selector = contentNode.selector;\n\n if (!selector || matchesSelector.call(node, selector)) {\n betweenNode.parentNode.insertBefore(node, betweenNode);\n break mainLoop;\n }\n }\n }\n }\n\n // If no reference node was found as a child node of the element we must\n // throw an error. This works for both no child nodes, or if the\n // reference wasn't found to be a child node.\n if (!hasFoundReferenceNode) {\n throw new Error('DOMException 8: The node before which the new node is to be inserted is not a child of this node.');\n }\n\n return node;\n }\n },\n\n removeChild: {\n value: function (childNode) {\n var removed = false;\n\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n\n if (contentNode.container === childNode.parentNode) {\n contentNode.container.removeChild(childNode);\n removed = true;\n break;\n }\n\n if (contentNode.startNode.nextSibling === contentNode.endNode) {\n addDefaultContent(contentNode);\n }\n }\n\n if (!removed) {\n throw new Error('DOMException 8: The node in which you are trying to remove is not a child of this node.');\n }\n\n return childNode;\n }\n },\n\n replaceChild: {\n value: function (newChild, oldChild) {\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n\n if (contentNode.container === oldChild.parentNode) {\n contentNode.container.replaceChild(newChild, oldChild);\n break;\n }\n }\n\n return this;\n }\n }\n };\n }\n\n function addDefaultContent (content) {\n var nodes = content.defaultNodes;\n var nodesLen = nodes.length;\n\n for (var a = 0; a < nodesLen; a++) {\n content.container.insertBefore(nodes[a], content.endNode);\n }\n\n content.isDefault = true;\n }\n\n function removeDefaultContent (content) {\n var nodes = content.defaultNodes;\n var nodesLen = nodes.length;\n\n for (var a = 0; a < nodesLen; a++) {\n var node = nodes[a];\n node.parentNode.removeChild(node);\n }\n\n content.isDefault = false;\n }\n\n function createProxyProperty (node, name) {\n return {\n get: function () {\n var value = node[name];\n\n if (typeof value === 'function') {\n return value.bind(node);\n }\n\n return value;\n },\n\n set: function (value) {\n node[name] = value;\n }\n };\n }\n\n function wrapNodeWith (node, wrapper) {\n var wrapped = {};\n\n for (var name in node) {\n var inWrapper = name in wrapper;\n\n if (inWrapper) {\n Object.defineProperty(wrapped, name, wrapper[name]);\n } else {\n Object.defineProperty(wrapped, name, createProxyProperty(node, name));\n }\n }\n\n return wrapped;\n }\n\n function cacheContentData (node) {\n var contentNodes = node.getElementsByTagName('content');\n var contentNodesLen = contentNodes && contentNodes.length;\n\n if (contentNodesLen) {\n var contentData = [];\n\n while (contentNodes.length) {\n var contentNode = contentNodes[0];\n var parentNode = contentNode.parentNode;\n var selector = contentNode.getAttribute('select');\n var startNode = document.createComment(' content ');\n var endNode = document.createComment(' /content ');\n\n contentData.push({\n container: parentNode,\n contentNode: contentNode,\n defaultNodes: [].slice.call(contentNode.childNodes),\n endNode: endNode,\n isDefault: true,\n selector: selector,\n startNode: startNode\n });\n\n parentNode.replaceChild(endNode, contentNode);\n parentNode.insertBefore(startNode, endNode);\n\n // Cache data in the comment that can be read if no content information\n // is cached. This allows seamless server-side rendering.\n startNode.textContent += JSON.stringify({\n defaultContent: contentNode.innerHTML,\n selector: selector\n }) + ' ';\n }\n\n setData(node, 'content', contentData);\n }\n }\n\n\n\n // Content Parser\n // --------------\n\n function parseCommentNode (node) {\n var data;\n var matches = node.textContent.match(/^ (\\/?)content (.*)/i);\n\n if (matches) {\n if (matches[2]) {\n try {\n data = JSON.parse(matches[2]);\n } catch (e) {\n throw new Error('Unable to parse content comment data: \"' + e + '\" in \"<!--' + node.textContent + '-->\".');\n }\n }\n\n return {\n data: data || {\n defaultContent: undefined,\n isDefault: undefined,\n selector: undefined\n },\n type: matches[1] ? 'close' : 'open'\n };\n }\n }\n\n function parseNodeForContent (node) {\n var a;\n var childNodes = node.childNodes;\n var childNodesLen = childNodes.length;\n var contentDatas = [];\n var lastContentNode;\n\n for (a = 0; a < childNodesLen; a++) {\n var childNode = childNodes[a];\n\n if (childNode.nodeType === 8) {\n var contentInfo = parseCommentNode(childNode);\n\n if (contentInfo) {\n if (contentInfo.type === 'open') {\n if (lastContentNode) {\n throw new Error('Cannot have an opening content placeholder after another content placeholder at the same level in the DOM tree: \"' + childNode.textContent + '\" in \"' + childNode.parentNode.innerHTML + '\".');\n }\n\n lastContentNode = {\n container: childNode.parentNode,\n contentNode: childNode,\n defaultNodes: contentInfo.data.defaultContent && createFragmentFromString(contentInfo.data.defaultContent).childNodes || [],\n isDefault: contentInfo.data.isDefault,\n selector: contentInfo.data.selector,\n startNode: childNode\n };\n } else if (contentInfo.type === 'close') {\n if (!lastContentNode) {\n throw new Error('Unmatched closing content placeholder: \"' + childNode.textContent + '\" in \"' + childNode.parentNode.innerHTML + '\".');\n }\n\n lastContentNode.endNode = childNode;\n contentDatas.push(lastContentNode);\n lastContentNode = undefined;\n }\n }\n } else {\n contentDatas = contentDatas.concat(parseNodeForContent(childNode));\n }\n }\n\n return contentDatas;\n }\n\n\n\n // Public API\n // ----------\n\n function skateTemplateHtml () {\n var template = [].slice.call(arguments).join('');\n\n return function (target) {\n var frag = createFragmentFromNodeList(target.childNodes);\n\n target.innerHTML = template;\n cacheContentData(target);\n\n if (frag.childNodes.length) {\n skateTemplateHtml.wrap(target).appendChild(frag);\n }\n };\n }\n\n skateTemplateHtml.wrap = function (node) {\n if (!getData(node, 'content')) {\n setData(node, 'content', parseNodeForContent(node));\n }\n\n return wrapNodeWith(node, htmlTemplateParentWrapper(node));\n };\n\n\n\n // Exporting\n // ---------\n\n // Global.\n window.skateTemplateHtml = skateTemplateHtml;\n\n // AMD.\n if (typeof define === 'function') {\n define(function () {\n return skateTemplateHtml;\n });\n }\n\n // CommonJS.\n if (typeof module === 'object') {\n module.exports = skateTemplateHtml;\n }\n})();\n","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports);\n }\n})(function (exports) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \"use strict\";\n\n var ATTR_IGNORE = \"data-skate-ignore\";\n exports.ATTR_IGNORE = ATTR_IGNORE;\n var TYPE_ATTRIBUTE = \"a\";\n exports.TYPE_ATTRIBUTE = TYPE_ATTRIBUTE;\n var TYPE_CLASSNAME = \"c\";\n exports.TYPE_CLASSNAME = TYPE_CLASSNAME;\n var TYPE_ELEMENT = \"t\";\n exports.TYPE_ELEMENT = TYPE_ELEMENT;\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module);\n }\n})(function (exports, module) {\n \"use strict\";\n\n module.exports = function (element) {\n var namespace = arguments[1] === undefined ? \"\" : arguments[1];\n\n var data = element.__SKATE_DATA || (element.__SKATE_DATA = {});\n return namespace && (data[namespace] || (data[namespace] = {})) || data;\n };\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\", \"./globals\", \"./lifecycle\", \"./mutation-observer\", \"./fix-ie-innerhtml\", \"./utils\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module, require(\"./globals\"), require(\"./lifecycle\"), require(\"./mutation-observer\"), require(\"./fix-ie-innerhtml\"), require(\"./utils\"));\n }\n})(function (exports, module, _globals, _lifecycle, _mutationObserver, _fixIeInnerhtml, _utils) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n var globals = _interopRequire(_globals);\n\n var initElements = _lifecycle.initElements;\n var removeElements = _lifecycle.removeElements;\n var getClosestIgnoredElement = _utils.getClosestIgnoredElement;\n\n /**\n * The document observer handler.\n *\n * @param {Array} mutations The mutations to handle.\n *\n * @returns {undefined}\n */\n function documentObserverHandler(mutations) {\n var mutationsLen = mutations.length;\n\n for (var a = 0; a < mutationsLen; a++) {\n var mutation = mutations[a];\n var addedNodes = mutation.addedNodes;\n var removedNodes = mutation.removedNodes;\n\n // Since siblings are batched together, we check the first node's parent\n // node to see if it is ignored. If it is then we don't process any added\n // nodes. This prevents having to check every node.\n if (addedNodes && addedNodes.length && !getClosestIgnoredElement(addedNodes[0].parentNode)) {\n initElements(addedNodes);\n }\n\n // We can't check batched nodes here because they won't have a parent node.\n if (removedNodes && removedNodes.length) {\n removeElements(removedNodes);\n }\n }\n }\n\n /**\n * Creates a new mutation observer for listening to Skate definitions for the\n * document.\n *\n * @param {Element} root The element to observe.\n *\n * @returns {MutationObserver}\n */\n function createDocumentObserver() {\n var observer = new window.MutationObserver(documentObserverHandler);\n\n // Observe after the DOM content has loaded.\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n\n return observer;\n }\n\n module.exports = {\n register: function register(fixIe) {\n // IE has issues with reporting removedNodes correctly. See the polyfill for\n // details. If we fix IE, we must also re-define the document observer.\n if (fixIe) {\n this.unregister();\n }\n\n if (!globals.observer) {\n globals.observer = createDocumentObserver();\n }\n\n return this;\n },\n\n unregister: function unregister() {\n if (globals.observer) {\n globals.observer.disconnect();\n globals.observer = undefined;\n }\n\n return this;\n }\n };\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports);\n }\n})(function (exports) {\n \"use strict\";\n\n var isIeUntil10 = /MSIE/.test(navigator.userAgent);\n var isIe11 = /Trident/.test(navigator.userAgent);\n var isIe = isIeUntil10 || isIe11;\n var elementPrototype = window.HTMLElement.prototype;\n\n // ! This walkTree method differs from the implementation in ../../utils/walk-tree\n // It invokes the callback only for the children, not the passed node and the second parameter to the callback is the parent node\n function walkTree(node, cb) {\n var childNodes = node.childNodes;\n\n if (!childNodes) {\n return;\n }\n\n var childNodesLen = childNodes.length;\n\n for (var a = 0; a < childNodesLen; a++) {\n var childNode = childNodes[a];\n cb(childNode, node);\n walkTree(childNode, cb);\n }\n }\n\n function fixInnerHTML() {\n var originalInnerHTML = Object.getOwnPropertyDescriptor(elementPrototype, \"innerHTML\");\n\n var get = function get() {\n return originalInnerHTML.get.call(this);\n };\n get._hasBeenEnhanced = true;\n\n // This redefines the innerHTML property so that we can ensure that events\n // are properly triggered.\n Object.defineProperty(elementPrototype, \"innerHTML\", {\n get: get,\n set: function set(html) {\n walkTree(this, function (node, parentNode) {\n var mutationEvent = document.createEvent(\"MutationEvent\");\n mutationEvent.initMutationEvent(\"DOMNodeRemoved\", true, false, parentNode, null, null, null, null);\n node.dispatchEvent(mutationEvent);\n });\n originalInnerHTML.set.call(this, html);\n }\n });\n }\n\n if (isIe) {\n // IE 9-11\n var propertyDescriptor = Object.getOwnPropertyDescriptor(elementPrototype, \"innerHTML\");\n var hasBeenEnhanced = !!propertyDescriptor && propertyDescriptor.get._hasBeenEnhanced;\n\n if (!hasBeenEnhanced) {\n if (isIe11) {\n // IE11's native MutationObserver needs some help as well :()\n window.MutationObserver = window.JsMutationObserver || window.MutationObserver;\n }\n\n fixInnerHTML();\n }\n }\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\", \"./version\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module, require(\"./version\"));\n }\n})(function (exports, module, _version) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n var version = _interopRequire(_version);\n\n var VERSION = \"__skate_\" + version.replace(/[^\\w]/g, \"_\");\n\n if (!window[VERSION]) {\n window[VERSION] = {\n observer: undefined,\n registry: {}\n };\n }\n\n module.exports = window[VERSION];\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"./constants\", \"./data\", \"./mutation-observer\", \"./registry\", \"./utils\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require(\"./constants\"), require(\"./data\"), require(\"./mutation-observer\"), require(\"./registry\"), require(\"./utils\"));\n }\n})(function (exports, _constants, _data, _mutationObserver, _registry, _utils) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \"use strict\";\n\n var ATTR_IGNORE = _constants.ATTR_IGNORE;\n\n var data = _interopRequire(_data);\n\n var registry = _interopRequire(_registry);\n\n var camelCase = _utils.camelCase;\n var elementContains = _utils.elementContains;\n var hasOwn = _utils.hasOwn;\n var inherit = _utils.inherit;\n var objEach = _utils.objEach;\n var Node = window.Node;\n //jshint ignore:line\n var elProto = window.HTMLElement.prototype;\n var nativeMatchesSelector = elProto.matches || elProto.msMatchesSelector || elProto.webkitMatchesSelector || elProto.mozMatchesSelector || elProto.oMatchesSelector;\n // Only IE9 has this msMatchesSelector bug, but best to detect it.\n var hasNativeMatchesSelectorDetattachedBug = !nativeMatchesSelector.call(document.createElement(\"div\"), \"div\");\n var matchesSelector = function matchesSelector(element, selector) {\n if (hasNativeMatchesSelectorDetattachedBug) {\n var clone = element.cloneNode();\n document.createElement(\"div\").appendChild(clone);\n return nativeMatchesSelector.call(clone, selector);\n }\n return nativeMatchesSelector.call(element, selector);\n };\n\n // Edge has a bug where oldValue is sent as null instead of the true oldValue\n // when an element attribute is removed. Bug raised at\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7711883/\n var needsAttributeOldValueCaching = /Edge/.test(navigator.userAgent);\n\n /**\n * Parses an event definition and returns information about it.\n *\n * @param {String} e The event to parse.\n *\n * @returns {Object]}\n */\n function parseEvent(e) {\n var parts = e.split(\" \");\n return {\n name: parts.shift(),\n delegate: parts.join(\" \")\n };\n }\n\n /**\n * Sets the defined attributes to their default values, if specified.\n *\n * @param {Element} target The web component element.\n * @param {Object} component The web component definition.\n *\n * @returns {undefined}\n */\n function initAttributes(target, component) {\n var componentAttributes = component.attributes;\n\n if (typeof componentAttributes !== \"object\") {\n return;\n }\n\n for (var attribute in componentAttributes) {\n if (hasOwn(componentAttributes, attribute) && hasOwn(componentAttributes[attribute], \"value\") && !target.hasAttribute(attribute)) {\n var value = componentAttributes[attribute].value;\n value = typeof value === \"function\" ? value(target) : value;\n target.setAttribute(attribute, value);\n }\n }\n }\n\n /**\n * Defines a property that proxies the specified attribute.\n *\n * @param {Element} target The web component element.\n * @param {String} attribute The attribute name to proxy.\n *\n * @returns {undefined}\n */\n function defineAttributeProperty(target, attribute, property) {\n Object.defineProperty(target, property, {\n get: function get() {\n return this.getAttribute(attribute);\n },\n set: function set(value) {\n if (value === undefined) {\n this.removeAttribute(attribute);\n } else {\n this.setAttribute(attribute, value);\n }\n }\n });\n }\n\n /**\n * Adds links from attributes to properties.\n *\n * @param {Element} target The web component element.\n * @param {Object} component The web component definition.\n *\n * @returns {undefined}\n */\n function addAttributeToPropertyLinks(target, component) {\n var componentAttributes = component.attributes;\n\n if (typeof componentAttributes !== \"object\") {\n return;\n }\n\n for (var attribute in componentAttributes) {\n var property = camelCase(attribute);\n if (hasOwn(componentAttributes, attribute) && !hasOwn(target, property)) {\n defineAttributeProperty(target, attribute, property);\n }\n }\n }\n\n function triggerAttributeChanged(target, component, mutationData) {\n var callback;\n var type;\n var name = mutationData.name;\n var newValue = mutationData.newValue;\n\n var cachedAttributeOldValues;\n if (needsAttributeOldValueCaching) {\n cachedAttributeOldValues = data(target, \"cachedAttributeOldValues\");\n }\n\n // Read the old attribute value from cache if needed, otherwise use native oldValue\n var oldValue = needsAttributeOldValueCaching && hasOwn(cachedAttributeOldValues, name) ? cachedAttributeOldValues[name] : mutationData.oldValue;\n\n var newValueIsString = typeof newValue === \"string\";\n var oldValueIsString = typeof oldValue === \"string\";\n var attrs = component.attributes;\n var specific = attrs && attrs[name];\n\n if (!oldValueIsString && newValueIsString) {\n type = \"created\";\n } else if (oldValueIsString && newValueIsString) {\n type = \"updated\";\n } else if (oldValueIsString && !newValueIsString) {\n type = \"removed\";\n }\n\n if (needsAttributeOldValueCaching) {\n if (type === \"removed\") {\n delete cachedAttributeOldValues[name];\n } else {\n cachedAttributeOldValues[name] = newValue;\n }\n }\n\n if (specific && typeof specific[type] === \"function\") {\n callback = specific[type];\n } else if (specific && typeof specific.fallback === \"function\") {\n callback = specific.fallback;\n } else if (typeof specific === \"function\") {\n callback = specific;\n } else if (typeof attrs === \"function\") {\n callback = attrs;\n }\n\n // Ensure values are null if undefined.\n newValue = newValue === undefined ? null : newValue;\n oldValue = oldValue === undefined ? null : oldValue;\n\n // There may still not be a callback.\n if (callback) {\n callback(target, {\n type: type,\n name: name,\n newValue: newValue,\n oldValue: oldValue\n });\n }\n }\n\n function triggerAttributesCreated(target, component) {\n var a;\n var attrs = target.attributes;\n var attrsCopy = [];\n var attrsLen = attrs.length;\n\n for (a = 0; a < attrsLen; a++) {\n attrsCopy.push(attrs[a]);\n }\n\n // In default web components, attribute changes aren't triggered for\n // attributes that already exist on an element when it is bound. This sucks\n // when you want to reuse and separate code for attributes away from your\n // lifecycle callbacks. Skate will initialise each attribute by calling the\n // created callback for the attributes that already exist on the element.\n for (a = 0; a < attrsLen; a++) {\n var attr = attrsCopy[a];\n triggerAttributeChanged(target, component, {\n name: attr.nodeName,\n newValue: attr.value || attr.nodeValue\n });\n }\n }\n\n function addAttributeListeners(target, component) {\n var attrs = target.attributes;\n\n if (!component.attributes || registry.isNativeCustomElement(component.id)) {\n return;\n }\n\n var observer = new window.MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n var name = mutation.attributeName;\n var attr = attrs[name];\n\n triggerAttributeChanged(target, component, {\n name: name,\n newValue: attr && (attr.value || attr.nodeValue),\n oldValue: mutation.oldValue\n });\n });\n });\n\n observer.observe(target, {\n attributes: true,\n attributeOldValue: true\n });\n }\n\n /**\n * Binds event listeners for the specified event handlers.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function addEventListeners(target, component) {\n if (typeof component.events !== \"object\") {\n return;\n }\n\n function makeHandler(handler, delegate) {\n return function (e) {\n // If we're not delegating, trigger directly on the component element.\n if (!delegate) {\n return handler(target, e, target);\n }\n\n // If we're delegating, but the target doesn't match, then we've have\n // to go up the tree until we find a matching ancestor or stop at the\n // component element, or document. If a matching ancestor is found, the\n // handler is triggered on it.\n var current = e.target;\n\n while (current && current !== document && current !== target.parentNode) {\n if (matchesSelector(current, delegate)) {\n return handler(target, e, current);\n }\n\n current = current.parentNode;\n }\n };\n }\n\n objEach(component.events, function (handler, name) {\n var evt = parseEvent(name);\n var useCapture = !!evt.delegate && (evt.name === \"blur\" || evt.name === \"focus\");\n target.addEventListener(evt.name, makeHandler(handler, evt.delegate), useCapture);\n });\n }\n\n /**\n * Triggers the created lifecycle callback.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function triggerCreated(target, component) {\n var targetData = data(target, component.id);\n\n if (targetData.created) {\n return;\n }\n\n targetData.created = true;\n\n // TODO: This doesn't need to happen if using native.\n inherit(target, component.prototype, true);\n\n // We use the unresolved / resolved attributes to flag whether or not the\n // element has been templated or not.\n if (component.template && !target.hasAttribute(component.resolvedAttribute)) {\n component.template(target);\n }\n\n target.removeAttribute(component.unresolvedAttribute);\n target.setAttribute(component.resolvedAttribute, \"\");\n addEventListeners(target, component);\n addAttributeListeners(target, component);\n addAttributeToPropertyLinks(target, component);\n initAttributes(target, component);\n triggerAttributesCreated(target, component);\n\n if (component.created) {\n component.created(target);\n }\n }\n\n /**\n * Triggers the attached lifecycle callback.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function triggerAttached(target, component) {\n var targetData = data(target, component.id);\n\n if (targetData.attached) {\n return;\n }\n\n if (!elementContains(document, target)) {\n return;\n }\n\n targetData.attached = true;\n\n if (component.attached) {\n component.attached(target);\n }\n\n targetData.detached = false;\n }\n\n /**\n * Triggers the detached lifecycle callback.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function triggerDetached(target, component) {\n var targetData = data(target, component.id);\n\n if (targetData.detached) {\n return;\n }\n\n targetData.detached = true;\n\n if (component.detached) {\n component.detached(target);\n }\n\n targetData.attached = false;\n }\n\n /**\n * Triggers the entire element lifecycle if it's not being ignored.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function triggerLifecycle(target, component) {\n triggerCreated(target, component);\n triggerAttached(target, component);\n }\n\n /**\n * Initialises a set of elements.\n *\n * @param {DOMNodeList | Array} elements A traversable set of elements.\n *\n * @returns {undefined}\n */\n function initElements(elements) {\n // [CATION] Don't cache elements length! Components initialization could append nodes\n // as siblings (see label's element behaviour for example) and this could lead to problems with\n // components placed at the end of processing childNodes because they will change they index\n // position and get out of cached value range.\n for (var a = 0; a < elements.length; a++) {\n var element = elements[a];\n\n if (element.nodeType !== Node.ELEMENT_NODE || element.attributes[ATTR_IGNORE]) {\n continue;\n }\n\n var currentNodeDefinitions = registry.getForElement(element);\n var currentNodeDefinitionsLength = currentNodeDefinitions.length;\n\n for (var b = 0; b < currentNodeDefinitionsLength; b++) {\n triggerLifecycle(element, currentNodeDefinitions[b]);\n }\n\n // When <object> tag is used to expose NPAPI api to js may have different behaviour then other\n // tags. One of those differences is that it's childNodes can be undefined.\n var elementChildNodes = element.childNodes || [];\n var elementChildNodesLen = elementChildNodes.length;\n\n if (elementChildNodesLen) {\n initElements(elementChildNodes);\n }\n }\n }\n\n /**\n * Triggers the remove lifecycle callback on all of the elements.\n *\n * @param {DOMNodeList} elements The elements to trigger the remove lifecycle\n * callback on.\n *\n * @returns {undefined}\n */\n function removeElements(elements) {\n // Don't cache `childNodes` length. For more info see description in `initElements` function.\n for (var a = 0; a < elements.length; a++) {\n var element = elements[a];\n\n if (element.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n removeElements(element.childNodes);\n\n var definitions = registry.getForElement(element);\n var definitionsLen = definitions.length;\n\n for (var b = 0; b < definitionsLen; b++) {\n triggerDetached(element, definitions[b]);\n }\n }\n }\n\n exports.initElements = initElements;\n exports.removeElements = removeElements;\n exports.triggerAttached = triggerAttached;\n exports.triggerAttributeChanged = triggerAttributeChanged;\n exports.triggerCreated = triggerCreated;\n exports.triggerDetached = triggerDetached;\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports);\n }\n})(function (exports) {\n \"use strict\";\n\n (function (self) {\n // Atlassian: added IIFE\n /**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n // @version 0.7.15\n if (typeof WeakMap === \"undefined\") {\n (function () {\n var defineProperty = Object.defineProperty;\n var counter = Date.now() % 1000000000;\n var WeakMap = function WeakMap() {\n this.name = \"__st\" + (Math.random() * 1000000000 >>> 0) + (counter++ + \"__\");\n };\n WeakMap.prototype = {\n set: function set(key, value) {\n var entry = key[this.name];\n if (entry && entry[0] === key) entry[1] = value;else defineProperty(key, this.name, {\n value: [key, value],\n writable: true\n });\n return this;\n },\n get: function get(key) {\n var entry;\n return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;\n },\n \"delete\": function _delete(key) {\n var entry = key[this.name];\n if (!entry || entry[0] !== key) {\n return false;\n }entry[0] = entry[1] = undefined;\n return true;\n },\n has: function has(key) {\n var entry = key[this.name];\n if (!entry) {\n return false;\n }return entry[0] === key;\n }\n };\n window.WeakMap = WeakMap;\n })();\n }\n\n (function (global) {\n if (global.JsMutationObserver) {\n return;\n }\n var registrationsTable = new WeakMap();\n var setImmediate;\n if (/Trident|Edge/.test(navigator.userAgent)) {\n setImmediate = setTimeout;\n } else if (window.setImmediate) {\n setImmediate = window.setImmediate;\n } else {\n var setImmediateQueue = [];\n var sentinel = String(Math.random());\n window.addEventListener(\"message\", function (e) {\n if (e.data === sentinel) {\n var queue = setImmediateQueue;\n setImmediateQueue = [];\n queue.forEach(function (func) {\n func();\n });\n }\n });\n setImmediate = function (func) {\n setImmediateQueue.push(func);\n window.postMessage(sentinel, \"*\");\n };\n }\n var isScheduled = false;\n var scheduledObservers = [];\n function scheduleCallback(observer) {\n scheduledObservers.push(observer);\n if (!isScheduled) {\n isScheduled = true;\n setImmediate(dispatchCallbacks);\n }\n }\n function wrapIfNeeded(node) {\n return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node;\n }\n function dispatchCallbacks() {\n isScheduled = false;\n var observers = scheduledObservers;\n scheduledObservers = [];\n observers.sort(function (o1, o2) {\n return o1.uid_ - o2.uid_;\n });\n var anyNonEmpty = false;\n observers.forEach(function (observer) {\n var queue = observer.takeRecords();\n removeTransientObserversFor(observer);\n if (queue.length) {\n observer.callback_(queue, observer);\n anyNonEmpty = true;\n }\n });\n if (anyNonEmpty) dispatchCallbacks();\n }\n function removeTransientObserversFor(observer) {\n observer.nodes_.forEach(function (node) {\n var registrations = registrationsTable.get(node);\n if (!registrations) return;\n registrations.forEach(function (registration) {\n if (registration.observer === observer) registration.removeTransientObservers();\n });\n });\n }\n function forEachAncestorAndObserverEnqueueRecord(target, callback) {\n for (var node = target; node; node = node.parentNode) {\n var registrations = registrationsTable.get(node);\n if (registrations) {\n for (var j = 0; j < registrations.length; j++) {\n var registration = registrations[j];\n var options = registration.options;\n if (node !== target && !options.subtree) continue;\n var record = callback(options);\n if (record) registration.enqueue(record);\n }\n }\n }\n }\n var uidCounter = 0;\n function JsMutationObserver(callback) {\n this.callback_ = callback;\n this.nodes_ = [];\n this.records_ = [];\n this.uid_ = ++uidCounter;\n }\n JsMutationObserver.prototype = {\n observe: function observe(target, options) {\n target = wrapIfNeeded(target);\n if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) {\n throw new SyntaxError();\n }\n var registrations = registrationsTable.get(target);\n if (!registrations) registrationsTable.set(target, registrations = []);\n var registration;\n for (var i = 0; i < registrations.length; i++) {\n if (registrations[i].observer === this) {\n registration = registrations[i];\n registration.removeListeners();\n registration.options = options;\n break;\n }\n }\n if (!registration) {\n registration = new Registration(this, target, options);\n registrations.push(registration);\n this.nodes_.push(target);\n }\n registration.addListeners();\n },\n disconnect: function disconnect() {\n this.nodes_.forEach(function (node) {\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.observer === this) {\n registration.removeListeners();\n registrations.splice(i, 1);\n break;\n }\n }\n }, this);\n this.records_ = [];\n },\n takeRecords: function takeRecords() {\n var copyOfRecords = this.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n function MutationRecord(type, target) {\n this.type = type;\n this.target = target;\n this.addedNodes = [];\n this.removedNodes = [];\n this.previousSibling = null;\n this.nextSibling = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n this.oldValue = null;\n }\n function copyMutationRecord(original) {\n var record = new MutationRecord(original.type, original.target);\n record.addedNodes = original.addedNodes.slice();\n record.removedNodes = original.removedNodes.slice();\n record.previousSibling = original.previousSibling;\n record.nextSibling = original.nextSibling;\n record.attributeName = original.attributeName;\n record.attributeNamespace = original.attributeNamespace;\n record.oldValue = original.oldValue;\n return record;\n }\n var currentRecord, recordWithOldValue;\n function getRecord(type, target) {\n return currentRecord = new MutationRecord(type, target);\n }\n function getRecordWithOldValue(oldValue) {\n if (recordWithOldValue) {\n return recordWithOldValue;\n }recordWithOldValue = copyMutationRecord(currentRecord);\n recordWithOldValue.oldValue = oldValue;\n return recordWithOldValue;\n }\n function clearRecords() {\n currentRecord = recordWithOldValue = undefined;\n }\n function recordRepresentsCurrentMutation(record) {\n return record === recordWithOldValue || record === currentRecord;\n }\n function selectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord) {\n return lastRecord;\n }if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) {\n return recordWithOldValue;\n }return null;\n }\n function Registration(observer, target, options) {\n this.observer = observer;\n this.target = target;\n this.options = options;\n this.transientObservedNodes = [];\n }\n Registration.prototype = {\n enqueue: function enqueue(record) {\n var records = this.observer.records_;\n var length = records.length;\n if (records.length > 0) {\n var lastRecord = records[length - 1];\n var recordToReplaceLast = selectRecord(lastRecord, record);\n if (recordToReplaceLast) {\n records[length - 1] = recordToReplaceLast;\n return;\n }\n } else {\n scheduleCallback(this.observer);\n }\n records[length] = record;\n },\n addListeners: function addListeners() {\n this.addListeners_(this.target);\n },\n addListeners_: function addListeners_(node) {\n var options = this.options;\n if (options.attributes) node.addEventListener(\"DOMAttrModified\", this, true);\n if (options.characterData) node.addEventListener(\"DOMCharacterDataModified\", this, true);\n if (options.childList) node.addEventListener(\"DOMNodeInserted\", this, true);\n if (options.childList || options.subtree) node.addEventListener(\"DOMNodeRemoved\", this, true);\n },\n removeListeners: function removeListeners() {\n this.removeListeners_(this.target);\n },\n removeListeners_: function removeListeners_(node) {\n var options = this.options;\n if (options.attributes) node.removeEventListener(\"DOMAttrModified\", this, true);\n if (options.characterData) node.removeEventListener(\"DOMCharacterDataModified\", this, true);\n if (options.childList) node.removeEventListener(\"DOMNodeInserted\", this, true);\n if (options.childList || options.subtree) node.removeEventListener(\"DOMNodeRemoved\", this, true);\n },\n addTransientObserver: function addTransientObserver(node) {\n if (node === this.target) {\n return;\n }this.addListeners_(node);\n this.transientObservedNodes.push(node);\n var registrations = registrationsTable.get(node);\n if (!registrations) registrationsTable.set(node, registrations = []);\n registrations.push(this);\n },\n removeTransientObservers: function removeTransientObservers() {\n var transientObservedNodes = this.transientObservedNodes;\n this.transientObservedNodes = [];\n transientObservedNodes.forEach(function (node) {\n this.removeListeners_(node);\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n if (registrations[i] === this) {\n registrations.splice(i, 1);\n break;\n }\n }\n }, this);\n },\n handleEvent: function handleEvent(e) {\n e.stopImmediatePropagation();\n switch (e.type) {\n case \"DOMAttrModified\":\n var name = e.attrName;\n var namespace = e.relatedNode.namespaceURI;\n var target = e.target;\n var record = new getRecord(\"attributes\", target);\n record.attributeName = name;\n record.attributeNamespace = namespace;\n var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n if (!options.attributes) return;\n if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {\n return;\n }\n if (options.attributeOldValue) return getRecordWithOldValue(oldValue);\n return record;\n });\n break;\n\n case \"DOMCharacterDataModified\":\n var target = e.target;\n var record = getRecord(\"characterData\", target);\n var oldValue = e.prevValue;\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n if (!options.characterData) return;\n if (options.characterDataOldValue) return getRecordWithOldValue(oldValue);\n return record;\n });\n break;\n\n case \"DOMNodeRemoved\":\n this.addTransientObserver(e.target);\n\n case \"DOMNodeInserted\":\n var changedNode = e.target;\n var addedNodes, removedNodes;\n if (e.type === \"DOMNodeInserted\") {\n addedNodes = [changedNode];\n removedNodes = [];\n } else {\n addedNodes = [];\n removedNodes = [changedNode];\n }\n var previousSibling = changedNode.previousSibling;\n var nextSibling = changedNode.nextSibling;\n var record = getRecord(\"childList\", e.target.parentNode);\n record.addedNodes = addedNodes;\n record.removedNodes = removedNodes;\n record.previousSibling = previousSibling;\n record.nextSibling = nextSibling;\n forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function (options) {\n if (!options.childList) return;\n return record;\n });\n }\n clearRecords();\n }\n };\n global.JsMutationObserver = JsMutationObserver;\n if (!global.MutationObserver) {\n global.MutationObserver = JsMutationObserver;\n JsMutationObserver._isPolyfilled = true;\n }\n })(self);\n })(window); // Atlassian: added IIFE\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\", \"./constants\", \"./globals\", \"./utils\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module, require(\"./constants\"), require(\"./globals\"), require(\"./utils\"));\n }\n})(function (exports, module, _constants, _globals, _utils) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n var TYPE_ATTRIBUTE = _constants.TYPE_ATTRIBUTE;\n var TYPE_CLASSNAME = _constants.TYPE_CLASSNAME;\n var TYPE_ELEMENT = _constants.TYPE_ELEMENT;\n\n var globals = _interopRequire(_globals);\n\n var hasOwn = _utils.hasOwn;\n var isValidNativeCustomElementName = _utils.isValidNativeCustomElementName;\n var supportsNativeCustomElements = _utils.supportsNativeCustomElements;\n\n /**\n * Returns the class list for the specified element.\n *\n * @param {Element} element The element to get the class list for.\n *\n * @returns {ClassList | Array}\n */\n function getClassList(element) {\n var classList = element.classList;\n\n if (classList) {\n return classList;\n }\n\n var attrs = element.attributes;\n\n return attrs[\"class\"] && attrs[\"class\"].nodeValue.split(/\\s+/) || [];\n }\n\n module.exports = {\n clear: function clear() {\n globals.registry = {};\n return this;\n },\n\n get: function get(id) {\n return hasOwn(globals.registry, id) && globals.registry[id];\n },\n\n getForElement: function getForElement(element) {\n var attrs = element.attributes;\n var attrsLen = attrs.length;\n var definitions = [];\n var isAttr = attrs.is;\n var isAttrValue = isAttr && (isAttr.value || isAttr.nodeValue);\n\n // Using localName as fallback for edge cases when processing <object> tag that is used\n // as inteface to NPAPI plugin.\n var tag = (element.tagName || element.localName).toLowerCase();\n var isAttrOrTag = isAttrValue || tag;\n var definition;\n var tagToExtend;\n\n if (this.isType(isAttrOrTag, TYPE_ELEMENT)) {\n definition = globals.registry[isAttrOrTag];\n tagToExtend = definition[\"extends\"];\n\n if (isAttrValue) {\n if (tag === tagToExtend) {\n definitions.push(definition);\n }\n } else if (!tagToExtend) {\n definitions.push(definition);\n }\n }\n\n for (var a = 0; a < attrsLen; a++) {\n var attr = attrs[a].nodeName;\n\n if (this.isType(attr, TYPE_ATTRIBUTE)) {\n definition = globals.registry[attr];\n tagToExtend = definition[\"extends\"];\n\n if (!tagToExtend || tag === tagToExtend) {\n definitions.push(definition);\n }\n }\n }\n\n var classList = getClassList(element);\n var classListLen = classList.length;\n\n for (var b = 0; b < classListLen; b++) {\n var className = classList[b];\n\n if (this.isType(className, TYPE_CLASSNAME)) {\n definition = globals.registry[className];\n tagToExtend = definition[\"extends\"];\n\n if (!tagToExtend || tag === tagToExtend) {\n definitions.push(definition);\n }\n }\n }\n\n return definitions;\n },\n\n isType: function isType(id, type) {\n var def = this.get(id);\n return def && def.type === type;\n },\n\n isNativeCustomElement: function isNativeCustomElement(id) {\n return supportsNativeCustomElements() && this.isType(id, TYPE_ELEMENT) && isValidNativeCustomElementName(id);\n },\n\n set: function set(id, definition) {\n if (hasOwn(globals.registry, id)) {\n throw new Error(\"A component definition of type \\\"\" + definition.type + \"\\\" with the ID of \\\"\" + id + \"\\\" already exists.\");\n }\n\n globals.registry[id] = definition;\n\n return this;\n }\n };\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\", \"./constants\", \"./document-observer\", \"./lifecycle\", \"./registry\", \"./utils\", \"./version\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module, require(\"./constants\"), require(\"./document-observer\"), require(\"./lifecycle\"), require(\"./registry\"), require(\"./utils\"), require(\"./version\"));\n }\n})(function (exports, module, _constants, _documentObserver, _lifecycle, _registry, _utils, _version) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n var TYPE_ATTRIBUTE = _constants.TYPE_ATTRIBUTE;\n var TYPE_CLASSNAME = _constants.TYPE_CLASSNAME;\n var TYPE_ELEMENT = _constants.TYPE_ELEMENT;\n\n var documentObserver = _interopRequire(_documentObserver);\n\n var triggerCreated = _lifecycle.triggerCreated;\n var triggerAttached = _lifecycle.triggerAttached;\n var triggerDetached = _lifecycle.triggerDetached;\n var triggerAttributeChanged = _lifecycle.triggerAttributeChanged;\n var initElements = _lifecycle.initElements;\n\n var registry = _interopRequire(_registry);\n\n var debounce = _utils.debounce;\n var inherit = _utils.inherit;\n\n var version = _interopRequire(_version);\n\n var HTMLElement = window.HTMLElement; //jshint ignore:line\n\n // IE <= 10 can fire \"interactive\" too early (#243).\n var isOldIE = !!document.attachEvent; // attachEvent was removed in IE11.\n\n function isReady() {\n if (isOldIE) {\n return document.readyState === \"complete\";\n } else {\n return document.readyState === \"interactive\" || document.readyState === \"complete\";\n }\n }\n\n /**\n * Initialises all valid elements in the document. Ensures that it does not\n * happen more than once in the same execution, and that it happens after the DOM is ready.\n *\n * @returns {undefined}\n */\n var initDocument = debounce(function () {\n var initialiseSkateElementsOnDomLoad = function initialiseSkateElementsOnDomLoad() {\n initElements(document.documentElement.childNodes);\n };\n if (isReady()) {\n initialiseSkateElementsOnDomLoad();\n } else {\n if (isOldIE) {\n window.addEventListener(\"load\", initialiseSkateElementsOnDomLoad);\n } else {\n document.addEventListener(\"DOMContentLoaded\", initialiseSkateElementsOnDomLoad);\n }\n }\n });\n\n /**\n * Creates a constructor for the specified definition.\n *\n * @param {Object} definition The definition information to use for generating the constructor.\n *\n * @returns {Function} The element constructor.\n */\n function makeElementConstructor(definition) {\n function CustomElement() {\n var element;\n var tagToExtend = definition[\"extends\"];\n var definitionId = definition.id;\n\n if (tagToExtend) {\n element = document.createElement(tagToExtend);\n element.setAttribute(\"is\", definitionId);\n } else {\n element = document.createElement(definitionId);\n }\n\n // Ensure the definition prototype is up to date with the element's\n // prototype. This ensures that overwriting the element prototype still\n // works.\n definition.prototype = CustomElement.prototype;\n\n // If they use the constructor we don't have to wait until it's attached.\n triggerCreated(element, definition);\n\n return element;\n }\n\n // This allows modifications to the element prototype propagate to the\n // definition prototype.\n CustomElement.prototype = definition.prototype;\n\n return CustomElement;\n }\n\n // Public API\n // ----------\n\n /**\n * Creates a listener for the specified definition.\n *\n * @param {String} id The ID of the definition.\n * @param {Object | Function} definition The definition definition.\n *\n * @returns {Function} Constructor that returns a custom element.\n */\n function skate(id, definition) {\n // Just in case the definition is shared, we duplicate it so that internal\n // modifications to the original aren't shared.\n definition = inherit({}, definition);\n definition = inherit(definition, skate.defaults);\n definition.id = id;\n\n registry.set(id, definition);\n\n if (registry.isNativeCustomElement(id)) {\n var elementPrototype = definition[\"extends\"] ? document.createElement(definition[\"extends\"]).constructor.prototype : HTMLElement.prototype;\n\n if (!elementPrototype.isPrototypeOf(definition.prototype)) {\n definition.prototype = inherit(Object.create(elementPrototype), definition.prototype, true);\n }\n\n var options = {\n prototype: inherit(definition.prototype, {\n createdCallback: function createdCallback() {\n triggerCreated(this, definition);\n },\n attachedCallback: function attachedCallback() {\n triggerAttached(this, definition);\n },\n detachedCallback: function detachedCallback() {\n triggerDetached(this, definition);\n },\n attributeChangedCallback: function attributeChangedCallback(name, oldValue, newValue) {\n triggerAttributeChanged(this, definition, {\n name: name,\n oldValue: oldValue,\n newValue: newValue\n });\n }\n })\n };\n\n if (definition[\"extends\"]) {\n options[\"extends\"] = definition[\"extends\"];\n }\n\n return document.registerElement(id, options);\n }\n\n initDocument();\n documentObserver.register(!!definition.detached);\n\n if (registry.isType(id, TYPE_ELEMENT)) {\n return makeElementConstructor(definition);\n }\n }\n\n /**\n * Synchronously initialises the specified element or elements and descendants.\n *\n * @param {Mixed} nodes The node, or nodes to initialise. Can be anything:\n * jQuery, DOMNodeList, DOMNode, selector etc.\n *\n * @returns {skate}\n */\n skate.init = function (nodes) {\n var nodesToUse = nodes;\n\n if (!nodes) {\n return nodes;\n }\n\n if (typeof nodes === \"string\") {\n nodesToUse = nodes = document.querySelectorAll(nodes);\n } else if (nodes instanceof HTMLElement) {\n nodesToUse = [nodes];\n }\n\n initElements(nodesToUse);\n\n return nodes;\n };\n\n // Restriction type constants.\n skate.type = {\n ATTRIBUTE: TYPE_ATTRIBUTE,\n CLASSNAME: TYPE_CLASSNAME,\n ELEMENT: TYPE_ELEMENT\n };\n\n // Makes checking the version easy when debugging.\n skate.version = version;\n\n /**\n * The default options for a definition.\n *\n * @var {Object}\n */\n skate.defaults = {\n // Attribute lifecycle callback or callbacks.\n attributes: undefined,\n\n // The events to manage the binding and unbinding of during the definition's\n // lifecycle.\n events: undefined,\n\n // Restricts a particular definition to binding explicitly to an element with\n // a tag name that matches the specified value.\n \"extends\": undefined,\n\n // The ID of the definition. This is automatically set in the `skate()`\n // function.\n id: \"\",\n\n // Properties and methods to add to each element.\n prototype: {},\n\n // The attribute name to add after calling the created() callback.\n resolvedAttribute: \"resolved\",\n\n // The template to replace the content of the element with.\n template: undefined,\n\n // The type of bindings to allow.\n type: TYPE_ELEMENT,\n\n // The attribute name to remove after calling the created() callback.\n unresolvedAttribute: \"unresolved\"\n };\n\n // Exporting\n // ---------\n\n var previousSkate = window.skate;\n skate.noConflict = function () {\n window.skate = previousSkate;\n return skate;\n };\n\n // Global\n window.skate = skate;\n\n // ES6\n module.exports = skate;\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"./constants\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require(\"./constants\"));\n }\n})(function (exports, _constants) {\n\n /**\n * Checks {}.hasOwnProperty in a safe way.\n *\n * @param {Object} obj The object the property is on.\n * @param {String} key The object key to check.\n *\n * @returns {Boolean}\n */\n \"use strict\";\n\n exports.hasOwn = hasOwn;\n\n /**\n * Camel-cases the specified string.\n *\n * @param {String} str The string to camel-case.\n *\n * @returns {String}\n */\n exports.camelCase = camelCase;\n\n /**\n * Returns whether or not the source element contains the target element.\n * This is for browsers that don't support Element.prototype.contains on an\n * HTMLUnknownElement.\n *\n * @param {HTMLElement} source The source element.\n * @param {HTMLElement} target The target element.\n *\n * @returns {Boolean}\n */\n exports.elementContains = elementContains;\n\n /**\n * Returns a function that will prevent more than one call in a single clock\n * tick.\n *\n * @param {Function} fn The function to call.\n *\n * @returns {Function}\n */\n exports.debounce = debounce;\n\n /**\n * Returns whether or not the specified element has been selectively ignored.\n *\n * @param {Element} element The element to check and traverse up from.\n *\n * @returns {Boolean}\n */\n exports.getClosestIgnoredElement = getClosestIgnoredElement;\n\n /**\n * Merges the second argument into the first.\n *\n * @param {Object} child The object to merge into.\n * @param {Object} parent The object to merge from.\n * @param {Boolean} overwrite Whether or not to overwrite properties on the child.\n *\n * @returns {Object} Returns the child object.\n */\n exports.inherit = inherit;\n\n /**\n * Traverses an object checking hasOwnProperty.\n *\n * @param {Object} obj The object to traverse.\n * @param {Function} fn The function to call for each item in the object.\n *\n * @returns {undefined}\n */\n exports.objEach = objEach;\n exports.supportsNativeCustomElements = supportsNativeCustomElements;\n exports.isValidNativeCustomElementName = isValidNativeCustomElementName;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \"use strict\";\n\n var ATTR_IGNORE = _constants.ATTR_IGNORE;\n var elementPrototype = window.HTMLElement.prototype;\n exports.elementPrototype = elementPrototype;\n var elementPrototypeContains = elementPrototype.contains;\n function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n function camelCase(str) {\n return str.split(/-/g).map(function (str, index) {\n return index === 0 ? str : str[0].toUpperCase() + str.substring(1);\n }).join(\"\");\n }\n\n function elementContains(source, target) {\n // The document element does not have the contains method in IE.\n if (source === document && !source.contains) {\n return document.head.contains(target) || document.body.contains(target);\n }\n\n return source.contains ? source.contains(target) : elementPrototypeContains.call(source, target);\n }\n\n function debounce(fn) {\n var called = false;\n\n return function () {\n if (!called) {\n called = true;\n setTimeout(function () {\n called = false;\n fn();\n }, 1);\n }\n };\n }\n\n function getClosestIgnoredElement(element) {\n var parent = element;\n\n // e.g. document doesn't have a function hasAttribute; no need to go further up\n while (parent instanceof Element) {\n if (parent.hasAttribute(ATTR_IGNORE)) {\n return parent;\n }\n\n parent = parent.parentNode;\n }\n }\n\n function inherit(child, parent, overwrite) {\n var names = Object.getOwnPropertyNames(parent);\n var namesLen = names.length;\n\n for (var a = 0; a < namesLen; a++) {\n var name = names[a];\n\n if (overwrite || child[name] === undefined) {\n var desc = Object.getOwnPropertyDescriptor(parent, name);\n var shouldDefineProps = desc.get || desc.set || !desc.writable || !desc.enumerable || !desc.configurable;\n\n if (shouldDefineProps) {\n Object.defineProperty(child, name, desc);\n } else {\n child[name] = parent[name];\n }\n }\n }\n\n return child;\n }\n\n function objEach(obj, fn) {\n for (var a in obj) {\n if (hasOwn(obj, a)) {\n fn(obj[a], a);\n }\n }\n }\n\n function supportsNativeCustomElements() {\n return typeof document.registerElement === \"function\";\n }\n\n function isValidNativeCustomElementName(name) {\n return name.indexOf(\"-\") > 0;\n }\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module);\n }\n})(function (exports, module) {\n \"use strict\";\n\n module.exports = \"0.13.17\";\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 \"use strict\";\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);","/*\nCopyright 2012 Igor Vaynberg\n\nVersion: 3.5.4 Timestamp: Sun Aug 30 13:30:32 EDT 2015\n\nThis software is licensed under the Apache License, Version 2.0 (the \"Apache License\") or the GNU\nGeneral Public License version 2 (the \"GPL License\"). You may choose either license to govern your\nuse of this software only upon the condition that you accept all of the terms of either the Apache\nLicense or the GPL License.\n\nYou 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\nUnless required by applicable law or agreed to in writing, software distributed under the\nApache License or the GPL License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for\nthe 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 \"use strict\";\n /*global document, window, jQuery, console */\n\n if (window.Select2 !== undefined) {\n return;\n }\n\n var 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\",\"\\u0386\":\"\\u0391\",\"\\u0388\":\"\\u0395\",\"\\u0389\":\"\\u0397\",\"\\u038A\":\"\\u0399\",\"\\u03AA\":\"\\u0399\",\"\\u038C\":\"\\u039F\",\"\\u038E\":\"\\u03A5\",\"\\u03AB\":\"\\u03A5\",\"\\u038F\":\"\\u03A9\",\"\\u03AC\":\"\\u03B1\",\"\\u03AD\":\"\\u03B5\",\"\\u03AE\":\"\\u03B7\",\"\\u03AF\":\"\\u03B9\",\"\\u03CA\":\"\\u03B9\",\"\\u0390\":\"\\u03B9\",\"\\u03CC\":\"\\u03BF\",\"\\u03CD\":\"\\u03C5\",\"\\u03CB\":\"\\u03C5\",\"\\u03B0\":\"\\u03C5\",\"\\u03C9\":\"\\u03C9\",\"\\u03C2\":\"\\u03C3\"};\n\n $document = $(document);\n\n nextUid=(function() { var counter=1; return function() { return counter++; }; }());\n\n\n function reinsertElement(element) {\n var placeholder = $(document.createTextNode(''));\n\n element.before(placeholder);\n placeholder.before(element);\n placeholder.remove();\n }\n\n function stripDiacritics(str) {\n // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n function match(a) {\n return DIACRITICS[a] || a;\n }\n\n return str.replace(/[^\\u0000-\\u007E]/g, match);\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(document.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, transforming 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, transform) {\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] = transform(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\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 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 var isVisible = (el.offsetWidth > 0 || el.offsetHeight > 0);\n if (isVisible && 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 $(document.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 = $.trim(dest.attr(\"class\"));\n\n if (classes) {\n classes = '' + classes; // for IE which returns object\n\n $(classes.split(/\\s+/)).each2(function() {\n if (this.indexOf(\"select2-\") === 0) {\n replacements.push(this);\n }\n });\n }\n\n classes = $.trim(src.attr(\"class\"));\n\n if (classes) {\n classes = '' + classes; // for IE which returns object\n\n $(classes.split(/\\s+/)).each2(function() {\n if (this.indexOf(\"select2-\") !== 0) {\n adapted = adapter(this);\n\n if (adapted) {\n replacements.push(adapted);\n }\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 '\\\\': '&#92;',\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n \"/\": '&#47;'\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 parameters\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 datatypes 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, query) 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 && typeof handler.abort === \"function\") { 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 // added query as third paramter to keep backwards compatibility\n var results = options.results(data, query.page, query);\n query.callback(results);\n },\n error: function(jqXHR, textStatus, errorThrown){\n var results = {\n hasError: true,\n jqXHR: jqXHR,\n textStatus: textStatus,\n errorThrown: errorThrown\n };\n\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 it 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 var result = isFunc ? data(query) : data;\n if ($.isArray(result)) {\n $(result).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 /**\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 if (typeof(formatter) === 'string') return true;\n throw new Error(formatterName +\" must be a string, function, or falsy value\");\n }\n\n /**\n * Returns a given value\n * If given a function, returns its output\n *\n * @param val string|function\n * @param context value of \"this\" to be passed to function\n * @returns {*}\n */\n function evaluate(val, context) {\n if ($.isFunction(val)) {\n var args = Array.prototype.slice.call(arguments, 2);\n return val.apply(context, args);\n }\n return 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 function cleanupJQueryElements() {\n var self = this;\n\n $.each(arguments, function (i, element) {\n self[element].remove();\n self[element] = null;\n });\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.liveRegion = $('.select2-hidden-accessible');\n if (this.liveRegion.length == 0) {\n this.liveRegion = $(\"<span>\", {\n role: \"status\",\n \"aria-live\": \"polite\"\n })\n .addClass(\"select2-hidden-accessible\")\n .appendTo(document.body);\n }\n\n this.containerId=\"s2id_\"+(opts.element.attr(\"id\") || \"autogen\"+nextUid());\n this.containerEventName= this.containerId\n .replace(/([.])/g, '_')\n .replace(/([;&,\\-\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1');\n this.container.attr(\"id\", this.containerId);\n\n this.container.attr(\"title\", opts.element.attr(\"title\"));\n\n this.body = $(document.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, this.opts.element));\n this.container.addClass(evaluate(opts.containerCssClass, this.opts.element));\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, this.opts.element));\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\n this.dropdown.on(\"mousemove-filtered\", resultsSelector, this.bind(this.highlightUnderEvent));\n this.dropdown.on(\"touchstart touchmove touchend\", resultsSelector, this.bind(function (event) {\n this._touchEvent = true;\n this.highlightUnderEvent(event);\n }));\n this.dropdown.on(\"touchmove\", resultsSelector, this.bind(this.touchMoved));\n this.dropdown.on(\"touchstart touchend\", resultsSelector, this.bind(this.clearTouchMoved));\n\n // Waiting for a click event on touch devices to select option and hide dropdown\n // otherwise click will be triggered on an underlying element\n this.dropdown.on('click', this.bind(function (event) {\n if (this._touchEvent) {\n this._touchEvent = false;\n this.selectHighlighted();\n }\n }));\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 // focusin can cause focus wars between modals and select2 since the dropdown is outside the modal.\n this.dropdown.on(\"click mouseup mousedown touchstart touchend focusin\", function (e) { e.stopPropagation(); });\n\n this.lastSearchTerm = undefined;\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.search.attr(\"placeholder\", opts.searchInputPlaceholder);\n },\n\n // abstract\n destroy: function () {\n var element=this.opts.element, select2 = element.data(\"select2\"), self = this;\n\n this.close();\n\n if (element.length && element[0].detachEvent && self._sync) {\n element.each(function () {\n if (self._sync) {\n this.detachEvent(\"onpropertychange\", self._sync);\n }\n });\n }\n if (this.propertyObserver) {\n this.propertyObserver.disconnect();\n this.propertyObserver = null;\n }\n this._sync = null;\n\n if (select2 !== undefined) {\n select2.container.remove();\n select2.liveRegion.remove();\n select2.dropdown.remove();\n element.removeData(\"select2\")\n .off(\".select2\");\n if (!element.is(\"input[type='hidden']\")) {\n element\n .show()\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 } else {\n element.css(\"display\", \"\");\n }\n }\n\n cleanupJQueryElements.call(this,\n \"container\",\n \"liveRegion\",\n \"dropdown\",\n \"results\",\n \"search\"\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.debug = opts.debug || $.fn.select2.defaults.debug;\n\n // Warnings for options renamed/removed in Select2 4.0.0\n // Only when it's enabled through debug mode\n if (opts.debug && console && console.warn) {\n // id was removed\n if (opts.id != null) {\n console.warn(\n 'Select2: The `id` option has been removed in Select2 4.0.0, ' +\n 'consider renaming your `id` property or mapping the property before your data makes it to Select2. ' +\n 'You can read more at https://select2.github.io/announcements-4.0.html#changed-id'\n );\n }\n\n // text was removed\n if (opts.text != null) {\n console.warn(\n 'Select2: The `text` option has been removed in Select2 4.0.0, ' +\n 'consider renaming your `text` property or mapping the property before your data makes it to Select2. ' +\n 'You can read more at https://select2.github.io/announcements-4.0.html#changed-id'\n );\n }\n\n // sortResults was renamed to results\n if (opts.sortResults != null) {\n console.warn(\n 'Select2: the `sortResults` option has been renamed to `sorter` in Select2 4.0.0. '\n );\n }\n\n // selectOnBlur was renamed to selectOnClose\n if (opts.selectOnBlur != null) {\n console.warn(\n 'Select2: The `selectOnBlur` option has been renamed to `selectOnClose` in Select2 4.0.0.'\n );\n }\n\n // ajax.results was renamed to ajax.processResults\n if (opts.ajax != null && opts.ajax.results != null) {\n console.warn(\n 'Select2: The `ajax.results` option has been renamed to `ajax.processResults` in Select2 4.0.0.'\n );\n }\n\n // format* options were renamed to language.*\n if (opts.formatNoResults != null) {\n console.warn(\n 'Select2: The `formatNoResults` option has been renamed to `language.noResults` in Select2 4.0.0.'\n );\n }\n if (opts.formatSearching != null) {\n console.warn(\n 'Select2: The `formatSearching` option has been renamed to `language.searching` in Select2 4.0.0.'\n );\n }\n if (opts.formatInputTooShort != null) {\n console.warn(\n 'Select2: The `formatInputTooShort` option has been renamed to `language.inputTooShort` in Select2 4.0.0.'\n );\n }\n if (opts.formatInputTooLong != null) {\n console.warn(\n 'Select2: The `formatInputTooLong` option has been renamed to `language.inputTooLong` in Select2 4.0.0.'\n );\n }\n if (opts.formatLoading != null) {\n console.warn(\n 'Select2: The `formatLoading` option has been renamed to `language.loadingMore` in Select2 4.0.0.'\n );\n }\n if (opts.formatSelectionTooBig != null) {\n console.warn(\n 'Select2: The `formatSelectionTooBig` option has been renamed to `language.maximumSelected` in Select2 4.0.0.'\n );\n }\n\n if (opts.element.data('select2Tags')) {\n console.warn(\n 'Select2: The `data-select2-tags` attribute has been renamed to `data-tags` in Select2 4.0.0.'\n );\n }\n }\n\n // Aliasing options renamed in Select2 4.0.0\n\n // data-select2-tags -> data-tags\n if (opts.element.data('tags') != null) {\n var elemTags = opts.element.data('tags');\n\n // data-tags should actually be a boolean\n if (!$.isArray(elemTags)) {\n elemTags = [];\n }\n\n opts.element.data('select2Tags', elemTags);\n }\n\n // sortResults -> sorter\n if (opts.sorter != null) {\n opts.sortResults = opts.sorter;\n }\n\n // selectOnBlur -> selectOnClose\n if (opts.selectOnClose != null) {\n opts.selectOnBlur = opts.selectOnClose;\n }\n\n // ajax.results -> ajax.processResults\n if (opts.ajax != null) {\n if ($.isFunction(opts.ajax.processResults)) {\n opts.ajax.results = opts.ajax.processResults;\n }\n }\n\n // Formatters/language options\n if (opts.language != null) {\n var lang = opts.language;\n\n // formatNoMatches -> language.noMatches\n if ($.isFunction(lang.noMatches)) {\n opts.formatNoMatches = lang.noMatches;\n }\n\n // formatSearching -> language.searching\n if ($.isFunction(lang.searching)) {\n opts.formatSearching = lang.searching;\n }\n\n // formatInputTooShort -> language.inputTooShort\n if ($.isFunction(lang.inputTooShort)) {\n opts.formatInputTooShort = lang.inputTooShort;\n }\n\n // formatInputTooLong -> language.inputTooLong\n if ($.isFunction(lang.inputTooLong)) {\n opts.formatInputTooLong = lang.inputTooLong;\n }\n\n // formatLoading -> language.loadingMore\n if ($.isFunction(lang.loadingMore)) {\n opts.formatLoading = lang.loadingMore;\n }\n\n // formatSelectionTooBig -> language.maximumSelected\n if ($.isFunction(lang.maximumSelected)) {\n opts.formatSelectionTooBig = lang.maximumSelected;\n }\n }\n\n opts = $.extend({}, {\n populateResults: function(container, results, query) {\n var populate, id=this.opts.id, liveRegion=this.liveRegion;\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 // collect the created nodes for bulk append\n var nodes = [];\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 node.attr(\"role\", \"presentation\");\n\n label=$(document.createElement(\"div\"));\n label.addClass(\"select2-result-label\");\n label.attr(\"id\", \"select2-result-label-\" + nextUid());\n label.attr(\"role\", \"option\");\n\n formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup);\n if (formatted!==undefined) {\n label.html(formatted);\n node.append(label);\n }\n\n\n if (compound) {\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 nodes.push(node[0]);\n }\n\n // bulk append the created nodes\n container.append(nodes);\n liveRegion.text(opts.formatMatches(results.length));\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 their id is hardcoded\n opts.id=function(e) { return e.id; };\n } else {\n if (!(\"query\" in opts)) {\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, opts.transformVal)).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 if (opts.createSearchChoicePosition === 'top') {\n opts.createSearchChoicePosition = function(list, item) { list.unshift(item); };\n }\n else if (opts.createSearchChoicePosition === 'bottom') {\n opts.createSearchChoicePosition = function(list, item) { list.push(item); };\n }\n else if (typeof(opts.createSearchChoicePosition) !== \"function\") {\n throw \"invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function\";\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, observer, self = this;\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 this._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 if (this.container) {\n syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);\n this.container.addClass(evaluate(this.opts.containerCssClass, this.opts.element));\n }\n\n if (this.dropdown) {\n syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);\n this.dropdown.addClass(evaluate(this.opts.dropdownCssClass, this.opts.element));\n }\n\n });\n\n // IE8-10 (IE9/10 won't fire propertyChange via attachEventListener)\n if (el.length && el[0].attachEvent) {\n el.each(function() {\n this.attachEvent(\"onpropertychange\", self._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(function (mutations) {\n $.each(mutations, self._sync);\n });\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, choice: 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 ignores 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;\n this._readonly = enabled;\n\n this.opts.element.prop(\"readonly\", enabled);\n this.enableInterface();\n },\n\n // abstract\n opened: function () {\n return (this.container) ? this.container.hasClass(\"select2-dropdown-open\") : false;\n },\n\n // abstract\n positionDropdown: function() {\n var $dropdown = this.dropdown,\n container = this.container,\n offset = container.offset(),\n height = container.outerHeight(false),\n width = 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) >= $window.scrollTop(),\n dropWidth = $dropdown.outerWidth(false),\n enoughRoomOnRight = function() {\n return dropLeft + dropWidth <= viewPortRight;\n },\n enoughRoomOnLeft = function() {\n return offset.left + viewPortRight + container.outerWidth(false) > dropWidth;\n },\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 $dropdown.show();\n\n // fix so the cursor does not move to the left within the search-textbox in IE\n this.focusSearch();\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 dropHeight = $dropdown.outerHeight(false);\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() && enoughRoomOnLeft()) {\n dropLeft = offset.left + this.container.outerWidth(false) - dropWidth;\n }\n\n css = {\n left: dropLeft,\n width: width\n };\n\n if (above) {\n this.container.addClass(\"select2-drop-above\");\n $dropdown.addClass(\"select2-drop-above\");\n dropHeight = $dropdown.outerHeight(false);\n css.top = offset.top - dropHeight;\n css.bottom = 'auto';\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, this.opts.element));\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 // Only bind the document mousemove when the dropdown is visible\n $document.on(\"mousemove.select2Event\", function (e) {\n lastMousePosition.x = e.pageX;\n lastMousePosition.y = e.pageY;\n });\n\n return true;\n },\n\n /**\n * Performs the opening of the dropdown\n */\n // abstract\n opening: function() {\n var cid = this.containerEventName,\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 doesn't 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 // Prevent IE from generating a click event on the body\n reinsertElement(mask);\n\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();\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 if (that.opened()) that.positionDropdown();\n });\n });\n\n\n },\n\n // abstract\n close: function () {\n if (!this.opened()) return;\n\n var cid = this.containerEventName,\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 // Now that the dropdown is closed, unbind the global document mousemove event\n $document.off(\"mousemove.select2Event\");\n\n this.clearSearch();\n this.search.removeClass(\"select2-active\");\n\n // Remove the aria active descendant for highlighted element\n this.search.removeAttr(\"aria-activedescendant\");\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 /**\n * @return {Boolean} Whether or not search value was changed.\n * @private\n */\n prefillNextSearchTerm: function () {\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 return false;\n }\n\n var nextSearchTerm = this.opts.nextSearchTerm(this.data(), this.lastSearchTerm);\n if(nextSearchTerm !== undefined){\n this.search.val(nextSearchTerm);\n this.search.select();\n return true;\n }\n\n return false;\n },\n\n //abstract\n getMaximumSelectionSize: function() {\n return evaluate(this.opts.maximumSelectionSize, this.opts.element);\n },\n\n // abstract\n ensureHighlightVisible: function () {\n var results = this.results, children, index, child, hb, rb, y, more, topOffset;\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 topOffset = (child.offset() || {}).top || 0;\n\n hb = topOffset + 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(false);\n if (hb > rb) {\n results.scrollTop(results.scrollTop() + (hb - rb));\n }\n y = topOffset - 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):not(.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 // ensure assistive technology can determine the active choice\n this.search.attr(\"aria-activedescendant\", choice.find(\".select2-result-label\").attr(\"id\"));\n\n this.ensureHighlightVisible();\n\n this.liveRegion.text(choice.text());\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 touchMoved: function() {\n this._touchMoved = true;\n },\n\n clearTouchMoved: function() {\n this._touchMoved = false;\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).html(self.opts.escapeMarkup(evaluate(self.opts.formatLoadMore, self.opts.element, 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 if (results.find('.select2-no-results,.select2-selection-limit,.select2-searching').length) {\n self.liveRegion.text(results.text());\n }\n else {\n self.liveRegion.text(self.opts.formatMatches(results.find('.select2-result-selectable:not(\".select2-selected\")').length));\n }\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'>\" + evaluate(opts.formatSelectionTooBig, opts.element, 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'>\" + evaluate(opts.formatInputTooShort, opts.element, 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'>\" + evaluate(opts.formatInputTooLong, opts.element, 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'>\" + evaluate(opts.formatSearching, opts.element) + \"</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 // handle ajax error\n if(data.hasError !== undefined && checkFormatter(opts.formatAjaxError, \"formatAjaxError\")) {\n render(\"<li class='select2-ajax-error'>\" + evaluate(opts.formatAjaxError, opts.element, data.jqXHR, data.textStatus, data.errorThrown) + \"</li>\");\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 this.opts.createSearchChoicePosition(data.results, def);\n }\n }\n }\n\n if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, \"formatNoMatches\")) {\n render(\"<li class='select2-no-results'>\" + evaluate(opts.formatNoMatches, opts.element, search.val()) + \"</li>\");\n if(this.showSearch){\n this.showSearch(search.val());\n }\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'>\" + opts.escapeMarkup(evaluate(opts.formatLoadMore, opts.element, 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 if (this._touchMoved) {\n this.clearTouchMoved();\n return;\n }\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 ($.trim(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 (typeof(style) === \"string\") {\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)' class='select2-choice' tabindex='-1'>\",\n \" <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>\",\n \" <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>\",\n \"</a>\",\n \"<label for='' class='select2-offscreen'></label>\",\n \"<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />\",\n \"<div class='select2-drop select2-display-none'>\",\n \" <div class='select2-search'>\",\n \" <label for='' class='select2-offscreen'></label>\",\n \" <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'\",\n \" aria-autocomplete='list' />\",\n \" </div>\",\n \" <ul class='select2-results' role='listbox'>\",\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 if (this.opts.shouldFocusInput(this)) {\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\n this.prefillNextSearchTerm();\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 () {\n if (!this.opened()) return;\n this.parent.close.apply(this, arguments);\n\n this.focusser.prop(\"disabled\", false);\n\n if (this.opts.shouldFocusInput(this)) {\n this.focusser.focus();\n }\n },\n\n // single\n focus: function () {\n if (this.opened()) {\n this.close();\n } else {\n this.focusser.prop(\"disabled\", false);\n if (this.opts.shouldFocusInput(this)) {\n this.focusser.focus();\n }\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.prop(\"disabled\", false);\n\n if (this.opts.shouldFocusInput(this)) {\n this.focusser.focus();\n }\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 cleanupJQueryElements.call(this,\n \"selection\",\n \"focusser\"\n );\n },\n\n // single\n initContainer: function () {\n\n var selection,\n container = this.container,\n dropdown = this.dropdown,\n idSuffix = nextUid(),\n elementLabel;\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 // add aria associations\n selection.find(\".select2-chosen\").attr(\"id\", \"select2-chosen-\"+idSuffix);\n this.focusser.attr(\"aria-labelledby\", \"select2-chosen-\"+idSuffix);\n this.results.attr(\"id\", \"select2-results-\"+idSuffix);\n this.search.attr(\"aria-owns\", \"select2-results-\"+idSuffix);\n\n // rewrite labels from original element to focusser\n this.focusser.attr(\"id\", \"s2id_autogen\"+idSuffix);\n\n elementLabel = $(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\");\n this.opts.element.on('focus.select2', this.bind(function () { this.focus(); }));\n\n this.focusser.prev()\n .text(elementLabel.text())\n .attr('for', this.focusser.attr('id'));\n\n // Ensure the original element retains an accessible name\n var originalTitle = this.opts.element.attr(\"title\");\n this.opts.element.attr(\"title\", (originalTitle || elementLabel.text()));\n\n this.focusser.attr(\"tabindex\", this.elementTabIndex);\n\n // write label for search field using the label from the focusser element\n this.search.attr(\"id\", this.focusser.attr('id') + '_search');\n\n this.search.prev()\n .text($(\"label[for='\" + this.focusser.attr('id') + \"']\").text())\n .attr('for', this.search.attr('id'));\n\n this.search.on(\"keydown\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n\n // filter 229 keyCodes (input method editor is processing key input)\n if (229 == e.keyCode) 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 if (this.opened() && this.results && this.results.length > 1) {\n this.search.focus();\n }\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 touchstart\", \"abbr\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) {\n return;\n }\n\n this.clear();\n killEventImmediately(e);\n this.close();\n\n if (this.selection) {\n this.selection.focus();\n }\n }));\n\n selection.on(\"mousedown touchstart\", this.bind(function (e) {\n // Prevent IE from generating a click event on the body\n reinsertElement(selection);\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 touchstart\", this.bind(function() {\n if (this.opts.shouldFocusInput(this)) {\n this.search.focus();\n }\n }));\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.hide();\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 self.lastSearchTerm = self.search.val();\n }\n });\n }\n },\n\n isPlaceholderOptionSelected: function() {\n var placeholderOption;\n if (this.getPlaceholder() === undefined) 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 && !this.disabled });\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.lastSearchTerm = this.search.val();\n this.close();\n\n if ((!options || !options.noFocus) && this.opts.shouldFocusInput(this)) {\n this.focusser.focus();\n }\n\n if (!equal(old, this.id(data))) {\n this.triggerChange({ added: data, removed: oldData });\n }\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 if (this.opts.debug && console && console.warn) {\n console.warn(\n 'Select2: The second option to `select2(\"val\")` is not supported in Select2 4.0.0. ' +\n 'The `change` event will always be triggered in 4.0.0.'\n );\n }\n }\n\n if (this.select) {\n if (this.opts.debug && console && console.warn) {\n console.warn(\n 'Select2: Setting the value on a <select> using `select2(\"val\")` is no longer supported in 4.0.0. ' +\n 'You can use the `.val(newValue).trigger(\"change\")` method provided by jQuery instead.'\n );\n }\n\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 (this.opts.debug && console && console.warn) {\n console.warn(\n 'Select2: The `select2(\"data\")` method can no longer set selected values in 4.0.0, ' +\n 'consider using the `.val()` method instead.'\n );\n }\n\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 \" <label for='' class='select2-offscreen'></label>\",\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 if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n // install the selection initializer\n opts.initSelection = function (element, callback) {\n\n var data = [];\n\n element.find(\"option\").filter(function() { return this.selected && !this.disabled }).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, opts.transformVal);\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 cleanupJQueryElements.call(this,\n \"searchContainer\",\n \"selection\"\n );\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-container:not(.select2-container-disabled) .select2-search-choice:not(.select2-locked)\", function (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\n this.search.prev()\n .text($(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\").text())\n .attr('for', this.search.attr('id'));\n this.opts.element.on('focus.select2', this.bind(function () { this.focus(); }));\n\n this.search.on(\"input paste\", this.bind(function() {\n if (this.search.attr('placeholder') && this.search.val().length == 0) return;\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 if (this.unselect(selected.first())) {\n this.search.width(10);\n selectedChoice = prev.length ? prev : next;\n }\n } else if (e.which == KEY.DELETE) {\n if (this.unselect(selected.first())) {\n this.search.width(10);\n selectedChoice = next.length ? next : null;\n }\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.hide();\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.prefillNextSearchTerm();\n this.updateResults(true);\n\n if (this.opts.shouldFocusInput(this)) {\n this.search.focus();\n }\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 (!(self.id(this) in ids)) {\n ids[self.id(this)] = 0;\n filtered.push(this);\n }\n });\n\n this.selection.find(\".select2-search-choice\").remove();\n this.addSelectedChoice(filtered);\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) || data.text === \"\") { return; }\n\n this.addSelectedChoice(data);\n\n this.opts.element.trigger({ type: \"selected\", val: this.id(data), choice: data });\n\n // keep track of the search's value before it gets cleared\n this.lastSearchTerm = this.search.val();\n\n this.clearSearch();\n this.updateResults();\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 } else {\n // initializes search's value with nextSearchTerm and update search result\n if (this.prefillNextSearchTerm()) {\n this.updateResults();\n }\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 val = this.getVal(), self = this;\n $(data).each(function () {\n val.push(self.createChoice(this));\n });\n this.setVal(val);\n },\n\n createChoice: function (data) {\n var enableChoice = !data.locked,\n enabledItem = $(\n \"<li class='select2-search-choice'>\" +\n \" <div></div>\" +\n \" <a href='#' 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 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></div>\").html(formatted));\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 this.unselect($(e.target));\n this.selection.find(\".select2-search-choice-focus\").removeClass(\"select2-search-choice-focus\");\n killEvent(e);\n this.close();\n this.focusSearch();\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 return id;\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 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 false;\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 selected.remove();\n\n this.opts.element.trigger({ type: \"select2-removed\", val: this.id(data), choice: data });\n this.triggerChange({ removed: data });\n\n return true;\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 doesn't 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 && this.opts.closeOnSelect === true){\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'>\" + evaluate(self.opts.formatNoMatches, self.opts.element, 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, this.opts.transformVal);\n }\n },\n\n // multi\n setVal: function (val) {\n if (this.select) {\n this.select.val(val);\n } else {\n var unique = [], valMap = {};\n // filter out duplicates\n $(val).each(function () {\n if (!(this in valMap)) {\n unique.push(this);\n valMap[this] = 0;\n }\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 i--;\n old.splice(j, 1);\n break;\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 .children(\".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 window.Select2[\"class\"].multi() : new window.Select2[\"class\"].single();\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) >= 0 && 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 debug: false,\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(this.text(result), query.term, markup, escapeMarkup);\n return markup.join(\"\");\n },\n transformVal: function(val) {\n return $.trim(val);\n },\n formatSelection: function (data, container, escapeMarkup) {\n return data ? escapeMarkup(this.text(data)) : undefined;\n },\n sortResults: function (results, container, query) {\n return results;\n },\n formatResultCssClass: function(data) {return data.css;},\n formatSelectionCssClass: function(data, container) {return undefined;},\n minimumResultsForSearch: 0,\n minimumInputLength: 0,\n maximumInputLength: null,\n maximumSelectionSize: 0,\n id: function (e) { return e == undefined ? null : e.id; },\n text: function (e) {\n if (e && this.data && this.data.text) {\n if ($.isFunction(this.data.text)) {\n return this.data.text(e);\n } else {\n return e[this.data.text];\n }\n } else {\n return e.text;\n }\n },\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 searchInputPlaceholder: '',\n createSearchChoicePosition: 'top',\n shouldFocusInput: function (instance) {\n // Attempt to detect touch devices\n var supportsTouchEvents = (('ontouchstart' in window) ||\n (navigator.msMaxTouchPoints > 0));\n\n // Only devices which support touch events should be special cased\n if (!supportsTouchEvents) {\n return true;\n }\n\n // Never focus the input if search is disabled\n if (instance.opts.minimumResultsForSearch < 0) {\n return false;\n }\n\n return true;\n }\n };\n\n $.fn.select2.locales = [];\n\n $.fn.select2.locales['en'] = {\n formatMatches: function (matches) { if (matches === 1) { return \"One result is available, press enter to select it.\"; } return matches + \" results are available, use up and down arrow keys to navigate.\"; },\n formatNoMatches: function () { return \"No matches found\"; },\n formatAjaxError: function (jqXHR, textStatus, errorThrown) { return \"Loading failed\"; },\n formatInputTooShort: function (input, min) { var n = min - input.length; return \"Please enter \" + n + \" or 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 };\n\n $.extend($.fn.select2.defaults, $.fn.select2.locales['en']);\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 * Serializes form fields within the given element to a JSON object\n *\n * {\n * fieldName: \"fieldValue\"\n * }\n *\n * @returns {Object}\n */\njQuery.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};","module.exports = __WEBPACK_EXTERNAL_MODULE__775__;","module.exports = __WEBPACK_EXTERNAL_MODULE__472__;","module.exports = __WEBPACK_EXTERNAL_MODULE__302__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import $ from 'jquery';\n// We provide the value from the import statement last, just in case jQuery or Zepto have been called with noConflict previously.\nexport default window.jQuery || window.Zepto || $;\n","const NAMESPACE = 'AJS';\nconst I18N_OBJECT_NAME = 'I18n';\n\nfunction initNamespace() {\n if (typeof window[NAMESPACE] !== 'object') {\n window[NAMESPACE] = {};\n }\n}\n\n/**\n * Makes given value available globally under window[NAMESPACE][name] attribute.\n * Keep in mind that this is needed for p2-plugin where chunks of AUI\n * can be loaded separately.\n *\n * In order for global namespace to work in `aui.prototyping.js` and\n * `aui.prototyping.nodeps.js` the proper exports need to be added to:\n * `packages/core/entry/aui.batch.prototyping.js`\n *\n * @param {string} name Name of the attribute\n * @param {any} value Value to expose globally\n * @returns exposed value\n */\nexport default function globalize (name, value) {\n initNamespace();\n\n return window[NAMESPACE][name] = value;\n}\n\nexport function putOnI18nIfAbsent (name, value) {\n initNamespace();\n\n if (typeof window[NAMESPACE][I18N_OBJECT_NAME] !== 'object') {\n window[NAMESPACE][I18N_OBJECT_NAME] = {};\n }\n\n if (typeof window[NAMESPACE][I18N_OBJECT_NAME][name] === 'undefined') {\n window[NAMESPACE][I18N_OBJECT_NAME][name] = value;\n }\n}\n","import skate from 'skatejs';\nimport {onChildrenChange} from '../internal/detect-children-change';\nimport jQuery from 'jquery';\n\nexport function createFormsComponentBody(type) {\n\n let unsub;\n\n return {\n type: skate.type.CLASSNAME,\n attached: function(el) {\n\n onChildrenChange(el,(unsubscribe) => {\n\n // Store function that stops subscription\n unsub = unsubscribe;\n\n const innerCheckboxList = jQuery(`input[type=${type}]`, el);\n\n innerCheckboxList.each(function (i, radio) {\n jQuery('<span class=\"aui-form-glyph\"></span>').insertAfter(radio);\n });\n\n const isInsertedAfterChange = innerCheckboxList.length > 0;\n if (isInsertedAfterChange) {\n unsub();\n }\n });\n },\n detached: function(el) {\n jQuery('.aui-form-glyph', el).remove();\n if (unsub) {\n unsub();\n }\n }\n }\n}\n","function isChildrenChanged(mutationList) {\n for (const mutation of mutationList) {\n if (mutation.type === 'childList') {\n return true;\n }\n }\n return false;\n}\n\n/***\n * Executes callback every time element children change. Called once initially.\n *\n * ***Make sure to use unsubscribe callback to free resources occupied for detection***\n *\n * @param element Element whose children should be monitored\n * @param callback Function to be called when children change happened. Gets unsubscribe function as argument.\n */\nexport function onChildrenChange(element, callback) {\n\n let isCompleteOnInit = false;\n\n callback(() => { isCompleteOnInit = true });\n\n if (isCompleteOnInit) {\n return;\n }\n\n const observer = new MutationObserver((mutationList) => {\n if (isChildrenChanged(mutationList)) {\n callback(() => observer.disconnect());\n }\n });\n\n observer.observe(element, { childList: true });\n}\n","import $ from './jquery';\nimport globalize from './internal/globalize';\nimport './forms/custom-checkbox';\nimport './forms/custom-radio';\n\n/**\n * Enables the specified form element.\n *\n * @param {Element} el The element to enable.\n * @param {Boolean} b The flag setting enabled / disabled.\n *\n * @returns {jQuery}\n */\nfunction enable (el, b) {\n var $el = $(el);\n\n if (typeof b === 'undefined') {\n b = true;\n }\n\n return $el.each(function () {\n this.disabled = !b;\n });\n}\n\n\n/**\n * Forms: Inline Help - toggles visibility of inline help content.\n *\n * @method inlineHelp\n * @namespace AJS\n * @for AJS\n */\nfunction inlineHelp () {\n $(document).on('click', '.icon-inline-help', function () {\n var $t = $(this).siblings('.field-help');\n if ($t.hasClass('hidden')){\n $t.removeClass('hidden');\n } else {\n $t.addClass('hidden');\n }\n });\n}\n\nglobalize('enable', enable);\nglobalize('inlineHelp', inlineHelp);\n\nexport {\n enable,\n inlineHelp\n};\n","import globalize from './globalize';\n\nfunction polyfillConsole (prop) {\n return function () {\n if (typeof console !== 'undefined' && console[prop]) {\n Function.prototype.apply.call(console[prop], console, arguments);\n }\n };\n}\n\nvar log = polyfillConsole('log');\nvar warn = polyfillConsole('warn');\nvar error = polyfillConsole('error');\n\nglobalize('error', error);\nglobalize('log', log);\nglobalize('warn', warn);\n\nexport {\n log,\n warn,\n error\n};\n","import skate from 'skatejs';\nimport {createFormsComponentBody} from './create-forms-component-body';\n\n\n/**\n * Allows us to add a new DOM element for rendering ADG styled checkbox glyphs,\n * so we can get our desired aesthetic without having to rely on a specific markup pattern.\n */\nskate(\n 'checkbox',\n createFormsComponentBody('checkbox')\n);\n","import skate from 'skatejs';\nimport {createFormsComponentBody} from './create-forms-component-body';\n\n\n/**\n * Allows us to add a new DOM element for rendering ADG styled radio glyphs,\n * so we can get our desired aesthetic without having to rely on a specific markup pattern.\n */\nskate(\n 'radio',\n createFormsComponentBody('radio')\n);\n","import globalize from './internal/globalize';\nimport * as logger from './internal/log';\n\n/* eslint brace-style: off, complexity:off, eqeqeq:off, max-depth:off, no-cond-assign:off, no-unused-vars:off */\n\n/**\n * Replaces tokens in a string with arguments, similar to Java's MessageFormat.\n * Tokens are in the form {0}, {1}, {2}, etc.\n *\n * This version also provides support for simple choice formats (excluding floating point numbers) of the form\n * {0,choice,0#0 issues|1#1 issue|1<{0,number} issues}\n *\n * Number format is currently not implemented, tokens of the form {0,number} will simply be printed as {0}\n *\n * @method format\n * @param message the message to replace tokens in\n * @param arg (optional) replacement value for token {0}, with subsequent arguments being {1}, etc.\n * @return {String} the message with the tokens replaced\n * @usage formatString(\"This is a {0} test\", \"simple\");\n */\nfunction formatString (message) {\n var apos = /'(?!')/g; // founds \"'\", but not \"''\" // TODO: does not work for floating point numbers!\n var simpleFormat = /^\\d+$/;\n var numberFormat = /^(\\d+),number$/; // TODO: incomplete, as doesn't support floating point numbers\n var choiceFormat = /^(\\d+),choice,(.+)/;\n var choicePart = /^(\\d+)([#<])(.+)/;\n // we are caching RegExps, so will not spend time on recreating them on each call\n\n // formats a value, currently choice and simple replacement are implemented, proper\n var getParamValue = function (format, args) {\n // simple substitute\n var res = '';\n\n var match;\n if (match = format.match(simpleFormat)) { // TODO: heavy guns for checking whether format is a simple number...\n res = args.length > ++format ? args[format] : ''; // use the argument as is, or use '' if not found\n }\n\n // number format\n else if (match = format.match(numberFormat)) {\n // TODO: doesn't actually format the number...\n res = args.length > ++match[1] ? args[match[1]] : '';\n }\n\n // choice format\n else if (match = format.match(choiceFormat)) {\n // format: \"0,choice,0#0 issues|1#1 issue|1<{0,number} issues\"\n // match[0]: \"0,choice,0#0 issues|1#1 issue|1<{0,number} issues\"\n // match[1]: \"0\"\n // match[2]: \"0#0 issues|1#1 issue|1<{0,number} issues\"\n\n // get the argument value we base the choice on\n var value = (args.length > ++match[1] ? args[match[1]] : null);\n if (value !== null) {\n // go through all options, checking against the number, according to following formula,\n // if X < the first entry then the first entry is returned, if X > last entry, the last entry is returned\n //\n // X matches j if and only if limit[j] <= X < limit[j+1]\n //\n var options = match[2].split('|');\n var isInvalidFormat = false;\n var prevOptionValue = null; // holds last passed option\n\n for (var i = 0; i < options.length; i++) {\n // option: \"0#0 issues\"\n // part[0]: \"0#0 issues\"\n // part[1]: \"0\"\n // part[2]: \"#\"\n // part[3]\" \"0 issues\";\n var parts = options[i].match(choicePart);\n\n if (parts == null) {\n isInvalidFormat = true;\n continue;\n }\n // if value is smaller, we take the previous value, or the current if no previous exists\n var argValue = parseInt(parts[1], 10);\n if (value < argValue) {\n if (prevOptionValue) {\n res = prevOptionValue;\n break;\n } else {\n res = parts[3];\n break;\n }\n }\n // if value is equal the condition, and the match is equality match we accept it\n if (value == argValue && parts[2] == '#') {\n res = parts[3];\n break;\n } else {\n // value is greater the condition, fall through to next iteration\n }\n\n // check whether we are the last option, in which case accept it even if the option does not match\n if (i == options.length - 1) {\n res = parts[3];\n }\n\n // retain current option\n prevOptionValue = parts[3];\n }\n\n if (isInvalidFormat) {\n logger.error('The format \"' + format + '\" from message \"' + message + '\" is invalid.');\n }\n\n // run result through format, as the parts might contain substitutes themselves\n var formatArgs = [res].concat(Array.prototype.slice.call(args, 1));\n res = formatString.apply(null, formatArgs);\n }\n }\n return res;\n };\n\n // drop in replacement for the token regex\n // splits the message to return the next accurance of a i18n placeholder.\n // Does not use regexps as we need to support nested placeholders\n // text between single ticks ' are ignored\n var _performTokenRegex = function (message) {\n var tick = false;\n var openIndex = -1;\n var openCount = 0;\n for (var i = 0; i < message.length; i++) {\n // handle ticks\n var c = message.charAt(i);\n if (c == \"'\") {\n // toggle\n tick = !tick;\n }\n // skip if we are between ticks\n if (tick) {\n continue;\n }\n // check open brackets\n if (c === '{') {\n if (openCount === 0) {\n openIndex = i;\n }\n openCount++;\n } else if (c === '}') {\n if (openCount > 0) {\n openCount--;\n if (openCount === 0) {\n // we found a bracket match - generate the result array (\n var match = [];\n match.push(message.substring(0, i + 1)); // from begin to match\n match.push(message.substring(0, openIndex)); // everything until match start\n match.push(message.substring(openIndex + 1, i)); // matched content\n return match;\n }\n }\n }\n }\n return null;\n };\n\n var _formatString = function (message) {\n var args = arguments;\n var res = '';\n\n if (!message) {\n return res;\n }\n\n var match = _performTokenRegex(message);\n\n while (match) {\n // reduce message to string after match\n message = message.substring(match[0].length);\n\n // add value before match to result\n res += match[1].replace(apos, '');\n\n // add formatted parameter\n res += getParamValue(match[2], args);\n\n // check for next match\n match = _performTokenRegex(message); //message.match(token);\n }\n // add remaining message to result\n res += message.replace(apos, '');\n return res;\n };\n\n return _formatString.apply(null, arguments);\n}\n\nglobalize('format', formatString);\n\nexport default formatString;\n","import globalize from './internal/globalize';\n\n// @note: this value is set via webpack and gulp\n// eslint-disable-next-line\nvar version = AUI_VERSION;\n\nglobalize('version', version);\n\nexport default version;\n","import $ from './jquery';\nimport * as logger from './internal/log';\nimport globalize from './internal/globalize';\n\nconst EMPTY_SELECTOR = false;\nconst $target = $(window);\n\n/**\n * Binds events to the window object. See jQuery bind documentation for more\n * details. Exceptions are caught and logged.\n */\nfunction bind (eventType, eventData, handler) {\n try {\n if (typeof handler === 'function') {\n return $target.on(eventType, EMPTY_SELECTOR, eventData, handler);\n } else {\n return $target.on(eventType, EMPTY_SELECTOR, eventData);\n }\n } catch (e) {\n logger.log('error while binding: ', e.message);\n }\n}\n\n/**\n * Unbinds event handlers from the window object. See jQuery unbind\n * documentation for more details. Exceptions are caught and logged.\n */\nfunction unbind (eventType, handler) {\n try {\n return $target.off(eventType, handler);\n } catch (e) {\n logger.log('error while unbinding: ', e.message);\n }\n}\n\n/**\n * Triggers events on the window object. See jQuery trigger documentation for\n * more details. Exceptions are caught and logged.\n */\nfunction trigger (eventType, extraParameters) {\n try {\n return $target.trigger(eventType, extraParameters);\n } catch (e) {\n logger.log('error while triggering: ' + e.message);\n }\n}\n\nglobalize('bind', bind);\nglobalize('trigger', trigger);\nglobalize('unbind', unbind);\n\nexport {\n bind,\n unbind,\n trigger\n};\n","import globalize from './internal/globalize';\n\nconst special = {\n '<': '&lt;',\n '>': '&gt;',\n '&': '&amp;',\n '\"': '&quot;',\n '\\'': '&#39;',\n '`': '&#96;',\n};\n\nconst expr = new RegExp(`[${Object.keys(special).join('')}]`, 'g');\n\nfunction escapeHtml (str) {\n return str.replace(expr, (str) => special[str]);\n}\n\nglobalize('escapeHtml', escapeHtml);\n\nexport default escapeHtml;\n","import $ from '../jquery';\nimport globalize from './globalize';\n\nvar has = Object.prototype.hasOwnProperty;\nvar deprecationCalls = [];\n\nfunction toSentenceCase (str) {\n str += '';\n\n if (!str) {\n return '';\n }\n\n return str.charAt(0).toUpperCase() + str.substring(1);\n}\n\nfunction getDeprecatedLocation (printFrameOffset) {\n var err = new Error();\n var stack = err.stack || err.stacktrace;\n var stackMessage = (stack && stack.replace(/^Error\\n/, '')) || '';\n\n if (stackMessage) {\n stackMessage = stackMessage.split('\\n');\n return stackMessage[printFrameOffset + 2];\n }\n return stackMessage;\n}\n\nfunction logger () {\n if (typeof console !== 'undefined' && console.warn) {\n Function.prototype.apply.call(console.warn, console, arguments);\n }\n}\n\n/**\n * @typedef {Object} DeprecationOptions\n * @property {string} sinceVersion the version this has been deprecated since\n * @property {string} removeInVersion the version this will be removed in\n * @property {string} [alternativeName] the name of an alternative to use\n * @property {string} [extraInfo] extra information to be printed at the end of the deprecation log\n * @property {string} [extraObject] an extra object that will be printed at the end\n * @property {string} [displayName] a human-readable name to show in the deprecation message. If not provided, it is inferred from the function or object being deprecated.\n * @property {string} [deprecationType] type of the deprecation to append to the start of the deprecation message. e.g. JS or CSS\n */\n\n/**\n * Return a function that logs a deprecation warning to the console the first time it is called from a certain location.\n * It will also print the stack frame of the calling function.\n *\n * @param {string} displayName the name of the thing being deprecated\n * @param {DeprecationOptions} options\n * @return {Function} that logs the warning and stack frame of the calling function. Takes in an optional parameter for the offset of\n * the stack frame to print, the default is 0. For example, 0 will log it for the line of the calling function,\n * -1 will print the location the logger was called from\n */\nfunction getShowDeprecationMessage (displayName, options) {\n // This can be used internally to pas in a showmessage fn\n if (typeof displayName === 'function') {\n return displayName;\n }\n\n var called = false;\n options = options || {};\n\n return function (printFrameOffset) {\n var deprecatedLocation = getDeprecatedLocation(printFrameOffset ? printFrameOffset : 1) || '';\n // Only log once if the stack frame doesn't exist to avoid spamming the console/test output\n if (!called || deprecationCalls.indexOf(deprecatedLocation) === -1) {\n deprecationCalls.push(deprecatedLocation);\n\n called = true;\n\n var deprecationType = (options.deprecationType + ' ') || '';\n\n var message = 'DEPRECATED ' + deprecationType + '- ' + toSentenceCase(displayName) +\n ' has been deprecated' + (options.sinceVersion ? ' since ' + options.sinceVersion : '') +\n ' and will be removed in ' + (options.removeInVersion || 'a future release') + '.';\n\n if (options.alternativeName) {\n message += ' Use ' + options.alternativeName + ' instead. ';\n }\n\n if (options.extraInfo) {\n message += ' ' + options.extraInfo;\n }\n\n if (deprecatedLocation === '') {\n deprecatedLocation = ' \\n ' + 'No stack trace of the deprecated usage is available in your current browser.';\n } else {\n deprecatedLocation = ' \\n ' + deprecatedLocation;\n }\n\n if (options.extraObject) {\n message += '\\n';\n logger(message, options.extraObject, deprecatedLocation);\n } else {\n logger(message, deprecatedLocation);\n }\n }\n };\n}\n\nfunction logCssDeprecation (selectorMap, newNode) {\n var displayName = selectorMap.options.displayName;\n displayName = displayName ? ' (' + displayName + ')' : '';\n\n var options = $.extend({\n deprecationType: 'CSS',\n extraObject: newNode\n }, selectorMap.options);\n\n getShowDeprecationMessage('\\'' + selectorMap.selector + '\\' pattern' + displayName, options)();\n}\n\n/**\n * Returns a wrapped version of the function that logs a deprecation warning when the function is used.\n * @param {Function} fn the fn to wrap\n * @param {string} displayName the name of the fn to be displayed in the message\n * @param {DeprecationOptions} options\n * @return {Function} wrapping the original function\n */\nfunction deprecateFunctionExpression(fn, displayName, options) {\n options = options || {};\n options.deprecationType = options.deprecationType || 'JS';\n\n var showDeprecationMessage = getShowDeprecationMessage(displayName || fn.name || 'this function', options);\n return function () {\n showDeprecationMessage();\n return fn.apply(this, arguments);\n };\n}\n\n/**\n * Returns a wrapped version of the constructor that logs a deprecation warning when the constructor is instantiated.\n * @param {Function} constructorFn the constructor function to wrap\n * @param {string} displayName the name of the fn to be displayed in the message\n * @param {DeprecationOptions} options\n * @return {Function} wrapping the original function\n */\nfunction deprecateConstructor(constructorFn, displayName, options) {\n options = options || {};\n options.deprecationType = options.deprecationType || 'JS';\n\n var deprecatedConstructor = deprecateFunctionExpression(constructorFn, displayName, options);\n deprecatedConstructor.prototype = constructorFn.prototype;\n $.extend(deprecatedConstructor, constructorFn); //copy static methods across;\n\n return deprecatedConstructor;\n}\n\n\nvar supportsProperties = false;\ntry {\n if (Object.defineProperty) {\n Object.defineProperty({}, 'blam', {get: function () {}, set: function () {}});\n supportsProperties = true;\n }\n} catch (e) {\n /* IE8 doesn't support on non-DOM elements */\n}\n\n/**\n* Wraps a \"value\" object property in a deprecation warning in browsers supporting Object.defineProperty\n* @param {Object} obj the object containing the property\n* @param {string} prop the name of the property to deprecate\n* @param {DeprecationOptions} options\n*/\nfunction deprecateValueProperty(obj, prop, options) {\n if (supportsProperties) {\n var oldVal = obj[prop];\n options = options || {};\n options.deprecationType = options.deprecationType || 'JS';\n\n var displayNameOrShowMessageFn = options.displayName || prop;\n var showDeprecationMessage = getShowDeprecationMessage(displayNameOrShowMessageFn, options);\n Object.defineProperty(obj, prop, {\n get: function () {\n showDeprecationMessage();\n return oldVal;\n },\n set: function (val) {\n oldVal = val;\n showDeprecationMessage();\n return val;\n }\n });\n }\n}\n\n/**\n * Wraps an object property in a deprecation warning, if possible. functions will always log warnings, but other\n * types of properties will only log in browsers supporting Object.defineProperty\n * @param {Object} obj the object containing the property\n * @param {string} prop the name of the property to deprecate\n * @param {DeprecationOptions} options\n */\nfunction deprecateObjectProperty(obj, prop, options) {\n if (typeof obj[prop] === 'function') {\n options = options || {};\n options.deprecationType = options.deprecationType || 'JS';\n\n var displayNameOrShowMessageFn = options.displayName || prop;\n obj[prop] = deprecateFunctionExpression(obj[prop], displayNameOrShowMessageFn, options);\n } else {\n deprecateValueProperty(obj, prop, options);\n }\n}\n\n/**\n * Wraps all an objects properties in a deprecation warning, if possible. functions will always log warnings, but other\n * types of properties will only log in browsers supporting Object.defineProperty\n * @param {Object} obj the object to be wrapped\n * @param {string} objDisplayPrefix the object's prefix to be used in logs\n * @param {DeprecationOptions} options\n * @param {string} options.alternativeNamePrefix a prefix for the alternative property name. Used to generate alternativeName per property.\n */\nfunction deprecateAllProperties(obj, objDisplayPrefix, options) {\n options = options || {};\n for (var attr in obj) {\n if (has.call(obj, attr)) {\n options.deprecationType = options.deprecationType || 'JS';\n options.displayName = objDisplayPrefix + attr;\n options.alternativeName = options.alternativeNamePrefix && (options.alternativeNamePrefix + attr);\n deprecateObjectProperty(obj, attr, $.extend({}, options));\n }\n }\n}\n\nfunction matchesSelector(el, selector) {\n return (el.matches || el.msMatchesSelector || el.webkitMatchesSelector || el.mozMatchesSelector || el.oMatchesSelector).call(el, selector);\n}\n\nfunction handleAddingSelector(options) {\n return function (selector) {\n var selectorMap = {\n selector: selector,\n options: options || {}\n };\n\n // Search if matches have already been added\n var matches = document.querySelectorAll(selector);\n for (var i = 0; i < matches.length; i++) {\n logCssDeprecation(selectorMap, matches[i]);\n }\n\n observeFutureChange(selectorMap);\n };\n}\n\n/**\n * Return a function that logs a deprecation warning to the console the first time it is called from a certain location.\n * It will also print the stack frame of the calling function.\n *\n * @param {string|Array} selectors a selector or list of selectors that match deprecated markup\n * @param {DeprecationOptions} options\n */\nfunction deprecateCSS(selectors, options) {\n if (typeof selectors === 'string') {\n selectors = [selectors];\n }\n\n selectors.forEach(handleAddingSelector(options));\n}\n\nfunction testAndHandleDeprecation(newNode) {\n return function (selectorMap) {\n if (matchesSelector(newNode, selectorMap.selector)) {\n logCssDeprecation(selectorMap, newNode);\n }\n };\n}\n\nconst deprecatedSelectorMap = [];\nlet observer;\n\nfunction observeFutureChange(selectorMap) {\n deprecatedSelectorMap.push(selectorMap);\n\n // Lazily instantiate a mutation observer because they're expensive.\n if (!observer) {\n observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n // TODO - should this also look at class changes, if possible?\n var addedNodes = mutation.addedNodes;\n\n for (var i = 0; i < addedNodes.length; i++) {\n var newNode = addedNodes[i];\n if (newNode.nodeType === 1) {\n deprecatedSelectorMap.forEach(testAndHandleDeprecation(newNode));\n }\n }\n });\n });\n\n var config = {\n childList: true,\n subtree: true\n };\n\n observer.observe(document, config);\n }\n}\n\nglobalize('deprecate', {\n fn: deprecateFunctionExpression,\n construct: deprecateConstructor,\n css: deprecateCSS,\n prop: deprecateObjectProperty,\n obj: deprecateAllProperties,\n propertyDeprecationSupported: supportsProperties,\n getMessageLogger: getShowDeprecationMessage\n});\n\nexport {\n deprecateFunctionExpression as fn,\n deprecateConstructor as construct,\n deprecateCSS as css,\n deprecateObjectProperty as prop,\n deprecateAllProperties as obj,\n supportsProperties as propertyDeprecationSupported,\n getShowDeprecationMessage as getMessageLogger\n};\n","\n/**\n * Force a re-compute of the style of an element.\n *\n * This is useful for CSS transitions and animations that need computed style changes to occur.\n * CSS transitions will fire when the computed value of the property they are transitioning changes.\n * This may not occur if the style changes get batched into one style change event by the browser.\n * We can force the browser to recognise the two different computed values by calling this function when we want it\n * to recompute the styles.\n *\n * For example, consider a transition on the opacity property.\n *\n * With recomputeStyle:\n * $parent.append($el); //opacity=0\n * recomputeStyle($el);\n * $el.addClass('visible'); //opacity=1\n * //Browser calculates value of opacity=0, and then transitions it to opacity=1\n *\n * Without recomputeStyle:\n * $parent.append($el); //opacity=0\n * $el.addClass('visible'); //opacity=1\n * //Browser calculates value of opacity=1 but no transition\n *\n * @param el The DOM or jQuery element for which style should be recomputed\n */\nfunction recomputeStyle (el) {\n el = el.jquery ? el[0] : el;\n window.getComputedStyle(el, null).getPropertyValue('left');\n}\n\nexport {\n recomputeStyle\n};\n","import $ from './jquery';\nimport { getMessageLogger } from './internal/deprecation';\nimport { recomputeStyle } from './internal/animation';\nimport globalize from './internal/globalize';\n\nvar overflowEl;\n\n/**\n * Blanketing is pattern for hiding all page content from user when overlapping layer is open.\n *\n * This pattern is old and should be removed, but it has a lot of dependants:\n * - Layer, LayerManager\n * - Dialog2, Dialog1\n * - Dropdown2\n * - InlineDialog2\n *\n * Removal should be done as separate process with usage research and go through deprecation.\n */\n\n/**\n * Dims the screen using a blanket div\n * @param useShim deprecated, it is calculated by dim() now\n */\nfunction dim (useShim, zIndex) {\n\n //if we're blanketing the page it means we want to hide the whatever is under the blanket from the screen readers as well\n function hasAriaHidden(element) { // eslint-disable-line no-unused-vars\n return element.hasAttribute('aria-hidden');\n }\n\n function isAuiLayer(element) { // eslint-disable-line no-unused-vars\n return element.classList && element.classList.contains('aui-layer');\n }\n\n if (!overflowEl) {\n overflowEl = document.body;\n }\n\n if (useShim === true) {\n useShimDeprecationLogger();\n }\n\n const isBlanketShowing = (!!dim.$dim) && !dim.$dim[0].hasAttribute('hidden');\n\n if (!!dim.$dim) {\n dim.$dim.remove();\n dim.$dim = null;\n }\n\n dim.$dim = $('<div aria-hidden=\"true\"></div>').addClass('aui-blanket');\n dim.$dim.appendTo(document.body);\n\n if (!isBlanketShowing) {\n //recompute after insertion and before setting aria-hidden=false to ensure we calculate a difference in\n //computed styles\n recomputeStyle(dim.$dim);\n\n dim.cachedOverflow = {\n overflow: overflowEl.style.overflow,\n overflowX: overflowEl.style.overflowX,\n overflowY: overflowEl.style.overflowY\n };\n\n overflowEl.style.overflowX = 'hidden';\n overflowEl.style.overflowY = 'hidden';\n overflowEl.style.overflow = 'hidden';\n }\n\n dim.$dim.removeAttr('hidden');\n\n if (zIndex) {\n dim.$dim.css({zIndex: zIndex});\n }\n\n return dim.$dim;\n}\n\n/**\n * Removes semitransparent DIV\n * @see dim\n */\nfunction undim () {\n\n if (dim.$dim) {\n dim.$dim[0].setAttribute('hidden', '');\n\n if (overflowEl) {\n overflowEl.style.overflow = dim.cachedOverflow.overflow;\n overflowEl.style.overflowX = dim.cachedOverflow.overflowX;\n overflowEl.style.overflowY = dim.cachedOverflow.overflowY;\n }\n }\n}\n\nconst useShimDeprecationLogger = getMessageLogger('useShim', {\n extraInfo: 'useShim has no alternative as it is now calculated by dim().'\n});\n\nglobalize('dim', dim);\nglobalize('undim', undim);\n\nexport {\n dim,\n undim\n};\n","import globalize from './internal/globalize';\n\nvar keyCode = {\n ALT: 18,\n BACKSPACE: 8,\n CAPS_LOCK: 20,\n COMMA: 188,\n COMMAND: 91,\n\n // cmd\n COMMAND_LEFT: 91,\n COMMAND_RIGHT: 93,\n LEFT_SQUARE_BRACKET: 91, //This is 91 for keypress and 219 for keydown/keyup\n CONTROL: 17,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n INSERT: 45,\n LEFT: 37,\n\n // right cmd\n MENU: 93,\n NUMPAD_ADD: 107,\n NUMPAD_DECIMAL: 110,\n NUMPAD_DIVIDE: 111,\n NUMPAD_ENTER: 108,\n NUMPAD_MULTIPLY: 106,\n NUMPAD_SUBTRACT: 109,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n PERIOD: 190,\n RIGHT: 39,\n SHIFT: 16,\n SPACE: 32,\n TAB: 9,\n UP: 38,\n\n // cmd\n WINDOWS: 91\n};\n\nglobalize('keyCode', keyCode);\n\nexport default keyCode;\n","\nexport default function (name, fn) {\n if (window.define) {\n var alias = window.define;\n alias(name, [], function () {\n return fn;\n });\n }\n return fn;\n}\n","import skate from 'skatejs';\n\nconst auiSkate = skate.noConflict();\n\nexport default auiSkate;\n","\nfunction state (element) {\n return {\n /**\n * sets an internal state on a component element\n * @param element the element to which the state will be added\n * @param stateName the name of the state\n * @param stateValue the value that the state will be changed to\n */\n set: function (stateName, stateValue) {\n if (element._state === undefined) {\n element._state = {};\n }\n\n element._state[stateName] = stateValue;\n },\n\n /**\n * gets an internal state on a component element\n * @param element the element to which the state will be added\n * @param stateName the name of the state\n */\n get: function (stateName) {\n if (element._state) {\n return element._state[stateName];\n }\n }\n };\n}\n\nexport default state;\n","import $ from './jquery';\nimport keyCode from './key-code';\nimport amdify from './internal/amdify';\nimport skate from './internal/skate';\nimport state from './internal/state';\nimport { warn } from './internal/log'\n\nexport function getTrigger (element) {\n return state(element).get('last-trigger') || findControllers(element)[0];\n}\n\nexport function setTrigger (element, trigger) {\n var validTrigger = trigger && trigger.nodeType && trigger.nodeType === 1;\n return state(element).set('last-trigger', validTrigger ? trigger : false);\n}\n\nexport function hasTrigger (element) {\n return !!getTrigger(element);\n}\n\nexport function doIfTrigger (element, callback) {\n var trigger = getTrigger(element);\n\n if (trigger) {\n callback(trigger);\n }\n}\n\nexport function forEachTrigger (element, callback) {\n return Array.prototype.forEach.call(findControllers(element), callback);\n}\n\nfunction isNestedAnchor(trigger, target) {\n var $closestAnchor = $(target).closest('a[href]', trigger);\n return !!$closestAnchor.length && $closestAnchor[0] !== trigger;\n}\n\nfunction findControllers(element) {\n const frames = window.frames;\n const selector = `[aria-controls=\"${element.id}\"]`;\n\n let controllers = [];\n let someFramesAreCrossOrigin = false;\n for (let i = 0 ; i < frames.length; i++) {\n try {\n let nodeList = frames[i].document.querySelectorAll(selector);\n controllers = controllers.concat(Array.prototype.slice.apply(nodeList));\n } catch (e) {\n // Silently catch DOM exceptions related to accessing cross-origin frames\n someFramesAreCrossOrigin = true;\n }\n }\n const currentDocumentControllers = document.querySelectorAll(selector);\n const allControllers = Array.prototype.slice.apply(currentDocumentControllers).concat(controllers);\n if (allControllers.length === 0 && someFramesAreCrossOrigin === true) {\n warn(\n [\n `No triggers found for element (${element.id}) in iframes from the same origin.`,\n 'However some iframes in this document are cross-origin.',\n 'The trigger-element relations crossing the origin boundary are not supported.'\n ].join(' ')\n )\n }\n return allControllers;\n}\n\nfunction findControlled(trigger) {\n return document.getElementById(trigger.getAttribute('aria-controls'));\n}\n\nfunction isEnabled (element) {\n return element.getAttribute('aria-disabled') !== 'true';\n}\n\nfunction triggerMessage(trigger, e) {\n if (isEnabled(trigger)) {\n var component = findControlled(trigger);\n if (component && component.message) {\n component.message(e);\n }\n }\n}\n\n/**\n * Converts native or jQuery events in to a \"message\" object.\n * Basically helps us keep message types consistent.\n */\nfunction msg(e, type) {\n const { target, currentTarget, relatedTarget } = e;\n const { keyCode, which } = e;\n return {\n type,\n data: type === 'keydown' ? which || keyCode : undefined,\n target,\n currentTarget,\n relatedTarget,\n preventDefault: () => e.preventDefault()\n };\n}\n\nfunction focusingToControlledElement(trigger, e) {\n let relatedTarget = e.relatedTarget;\n // relatedTarget is always null in IE11 but activeElement is set to correct value\n if (!relatedTarget) {\n relatedTarget = document.activeElement;\n }\n const $component = $(findControlled(trigger));\n return $component.find(relatedTarget).length > 0;\n}\n\nconst events = {\n click(trigger, e) {\n if (!isNestedAnchor(trigger, e.target)) {\n triggerMessage(trigger, e);\n e.preventDefault();\n }\n },\n keydown(trigger, e) {\n const key = e.data;\n if (key === keyCode.ENTER || key === keyCode.SPACE) {\n e.preventDefault();\n e.type = 'click';\n events.click(trigger, e);\n }\n },\n mouseenter(trigger, e) {\n triggerMessage(trigger, e);\n },\n mouseleave(trigger, e) {\n triggerMessage(trigger, e);\n },\n focus(trigger, e) {\n triggerMessage(trigger, e);\n },\n blur(trigger, e) {\n if (focusingToControlledElement(trigger, e)){\n return;\n }\n triggerMessage(trigger, e);\n }\n};\n\nObject.keys(events).forEach(function(name) {\n const handler = events[name];\n $(document).on(`${name}.aui-trigger`, '[data-aui-trigger]', function(e) {\n handler(e.currentTarget, msg(e, name));\n });\n});\n\nskate('data-aui-trigger', {\n type: skate.type.ATTRIBUTE,\n prototype: {\n disable: function () {\n this.setAttribute('aria-disabled', 'true');\n },\n enable: function () {\n this.setAttribute('aria-disabled', 'false');\n },\n isEnabled: function () {\n return isEnabled(this);\n }\n }\n});\n\namdify('aui/trigger');\n","import $ from './jquery';\nimport globalize from './internal/globalize';\nimport keyCodes from './key-code';\nimport {getTrigger} from './trigger';\n\n(function initSelectors () {\n /*\n :tabbable and :focusable functions from jQuery UI v 1.10.4\n renamed to :aui-tabbable and :aui-focusable to not clash with jquery-ui if it's included.\n */\n\n function visible (element) {\n return ($.css(element, 'visibility') === 'visible') && $(element).is(':visible');\n }\n\n function focusable (element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n\n if (nodeName === 'aui-select') {\n return true;\n }\n\n if (nodeName === 'area') {\n var map = element.parentNode;\n var mapName = map.name;\n var imageMap = $('img[usemap=#' + mapName + ']').get();\n\n if (!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {\n return false;\n }\n return imageMap && visible(imageMap);\n }\n var isFormElement = /input|select|textarea|button|object|iframe/.test(nodeName);\n var isAnchor = nodeName === 'a';\n var isAnchorTabbable = (element.href || isTabIndexNotNaN);\n\n return (\n isFormElement ? !element.disabled :\n (isAnchor ? isAnchorTabbable : isTabIndexNotNaN)\n ) && visible(element);\n }\n\n function tabbable (element) {\n var tabIndex = $.attr(element, 'tabindex');\n var isTabIndexNaN = isNaN(tabIndex);\n var hasTabIndex = (isTabIndexNaN || tabIndex >= 0);\n\n return hasTabIndex && focusable(element, !isTabIndexNaN);\n }\n\n $.extend($.expr.pseudos, {\n 'aui-focusable': element => focusable(element, !isNaN($.attr(element, 'tabindex'))),\n 'aui-tabbable': tabbable\n });\n}());\n\nvar RESTORE_FOCUS_DATA_KEY = '_aui-focus-restore';\n\n/**\n * Stores information about last focused element in el.data\n *\n * @param {HTMLElement} $el - element to store the data about focus\n * @param {Element} [lastFocussedEl=document.activeElement] - last focused element\n */\nfunction setLastFocus ($el, lastFocussedEl = document.activeElement) {\n $el.data(RESTORE_FOCUS_DATA_KEY, lastFocussedEl);\n}\n\nfunction getLastFocus ($el) {\n return $($el.data(RESTORE_FOCUS_DATA_KEY));\n}\n\nfunction elementTrapsFocus ($el) {\n return $el.is('.aui-dialog2') || $el.is('[aui-focus-trap=\"true\"]');\n}\n\nfunction FocusManager() {\n this._focusTrapStack = [];\n this._handler;\n}\nFocusManager.defaultFocusSelector = ':aui-tabbable';\n/**\n *\n * @param {HTMLElement} $el - element to move the focus onto\n * @param {Element} [$lastFocused] - last focused element\n */\nFocusManager.prototype.enter = function ($el, $lastFocused) {\n setLastFocus($el, $lastFocused);\n\n // focus on new selector\n if ($el.attr('data-aui-focus') !== 'false') {\n var focusSelector = $el.attr('data-aui-focus-selector') || FocusManager.defaultFocusSelector;\n var $focusEl = $el.is(focusSelector) ? $el : $el.find(focusSelector);\n $focusEl.first().trigger('focus');\n }\n\n if (elementTrapsFocus($el)) {\n this._focusTrapStack.push($el);\n if (!this._handler) {\n this._handler = focusTrapHandler.bind(undefined, this._focusTrapStack);\n $(document).on('keydown.aui-focus-manager', this._handler);\n }\n }\n};\n\nFocusManager.prototype.exit = function ($el) {\n if (elementTrapsFocus($el)) {\n this._focusTrapStack.splice(\n this._focusTrapStack.indexOf($el), 1\n );\n if (!this._focusTrapStack.length) {\n $(document).off('.aui-focus-manager', this._handler);\n delete this._handler;\n }\n }\n\n // AUI-1059: remove focus from the active element when dialog is hidden\n // AUI-5014 - if focus is already outside focus trap there is no need to restore it\n var activeElement = document.activeElement;\n if ($el[0] === activeElement || $el.has(activeElement).length) {\n $(activeElement).trigger('blur');\n var $restoreFocus = getLastFocus($el);\n if ($restoreFocus.length) {\n $el.removeData(RESTORE_FOCUS_DATA_KEY);\n $restoreFocus.trigger('focus');\n }\n }\n};\n\nfunction focusTrapHandler(focusTrapStack, event) {\n if (focusTrapStack.length === 0) {\n return;\n }\n\n if (event.keyCode !== keyCodes.TAB) {\n return;\n }\n\n const backwards = event.shiftKey;\n const offset = backwards ? -1 : 1;\n\n /**\n * always the element where focus is about to be blurred\n * @type {HTMLElement}\n */\n const focusOrigin = event.target;\n\n const $focusTrapElement = focusTrapStack[focusTrapStack.length - 1];\n const $tabbableElements = $focusTrapElement.find(':aui-tabbable');\n\n // Try to focus the container if:\n // - it is with aui-focus-trap=true attribute\n // - there isn't any focusable element inside.\n if (!$tabbableElements.length && elementTrapsFocus($focusTrapElement)) {\n $focusTrapElement.trigger('focus');\n event.preventDefault();\n }\n\n // it's not possible to trap focus inside something with no focusable elements!\n if (!$tabbableElements.length) {\n return;\n }\n\n const originIdx = $tabbableElements.index(focusOrigin);\n let newFocusIdx = -1;\n\n if (originIdx > -1) {\n // the currently focussed element is inside our trap container.\n // excellent! we'll work with this.\n newFocusIdx = originIdx;\n } else {\n // the currently focussed element was outside our trap container.\n // it might be okay to leave it there, though, since AUI has a few layer elements\n // and the focussed element might be in one of those.\n // let's see if the focus was in an element that AUI roughly \"controls\".\n let $controlledElementWithFocus;\n\n // look for a layer in the \"cheapest\" way possible first -- check if a parent is a layer.\n $controlledElementWithFocus = $(focusOrigin).closest('.aui-layer');\n\n if (!$controlledElementWithFocus.length) {\n // look up the controlled layers in a different way -- by finding all controllers first,\n // then their layers.\n const $controllingElements = $focusTrapElement.find('[aria-controls]');\n const $controlledElements = $controllingElements.map(function () {\n return document.getElementById(this.getAttribute('aria-controls'));\n });\n\n // Find out whether the new focus target is inside a controlled element or not.\n $controlledElementWithFocus = $controlledElements.has(focusOrigin);\n }\n\n if ($controlledElementWithFocus.length) {\n // Find out whether we need to jump the focus out of the controlled element.\n const $subTabbable = $controlledElementWithFocus.find(':aui-tabbable');\n const subOriginIdx = $subTabbable.index(focusOrigin);\n const subMove = subOriginIdx + offset;\n if (subMove < 0 || subMove >= $subTabbable.length) {\n // This element was on the edge of the list, so we'll pop focus out.\n // We'll assume we can pop the focus to a controlled element.\n const triggerEl = getTrigger($controlledElementWithFocus.get(0));\n newFocusIdx = $tabbableElements.index(triggerEl);\n } else {\n // Focus will happen normally. Let it happen.\n return;\n }\n }\n }\n\n if (newFocusIdx > -1) {\n // wrap around the focus trap.\n newFocusIdx = (newFocusIdx + offset) % $tabbableElements.length;\n } else {\n // we will focus the first element in the trap.\n newFocusIdx = 0;\n }\n\n if ($tabbableElements.get(newFocusIdx).nodeName !== 'IFRAME') {\n $tabbableElements.eq(newFocusIdx).trigger('focus');\n event.preventDefault();\n }\n}\n\n// AUI-4403 - Previous maintainers pretended multiple FocusManager instances made sense.\n// However, the class is implemented in a way that would never play well with others,\n// so here I'm locking it down as a singleton.\nlet instance;\nfunction getFocusManager() {\n if (!instance) {\n instance = new FocusManager();\n }\n return instance;\n}\ngetFocusManager.global = getFocusManager();\n\nglobalize('FocusManager', getFocusManager);\n\nexport default getFocusManager;\n","import $ from '../jquery';\n\n/**\n * @param {string} name The name of the widget to use in any messaging.\n * @param {function(new:{ $el: jQuery }, ?jQuery, ?Object)} Ctor\n * A constructor which will only ever be called with \"new\". It must take a JQuery object as the first\n * parameter, or generate one if not provided. The second parameter will be a configuration object.\n * The returned object must have an $el property and a setOptions function.\n * @constructor\n */\nexport default function (name, Ctor) {\n var dataAttr = '_aui-widget-' + name;\n return function (selectorOrOptions, maybeOptions) {\n var selector;\n var options;\n if ($.isPlainObject(selectorOrOptions)) {\n options = selectorOrOptions;\n } else {\n selector = selectorOrOptions;\n options = maybeOptions;\n }\n\n var $el = selector && $(selector);\n\n var widget;\n if (!$el || !$el.data(dataAttr)) {\n widget = new Ctor($el, options || {});\n $el = widget.$el;\n $el.data(dataAttr, widget);\n } else {\n widget = $el.data(dataAttr);\n // options are discarded if $el has already been constructed\n }\n\n return widget;\n };\n}\n","let CustomEvent;\n\n(function () {\n if (window.CustomEvent) {\n // Some browsers don't support constructable custom events yet.\n try {\n const ce = new window.CustomEvent('name', {\n bubbles: false,\n cancelable: true,\n detail: {\n x: 'y'\n }\n });\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n throw new Error('Could not prevent default');\n }\n if (ce.type !== 'name') {\n throw new Error('Could not set custom name');\n }\n if (ce.detail.x !== 'y') {\n throw new Error('Could not set detail');\n }\n\n CustomEvent = window.CustomEvent;\n return;\n } catch (e) {\n // polyfill it\n }\n }\n\n /**\n * @type CustomEvent\n * @param {String} event - the name of the event.\n * @param {Object} [params] - optional configuration of the custom event.\n * @param {Boolean} [params.cancelable=false] - A boolean indicating whether the event is cancelable (i.e., can call preventDefault and set the defaultPrevented property).\n * @param {Boolean} [params.bubbles=false] - A boolean indicating whether the event bubbles up through the DOM or not.\n * @param {Boolean} [params.detail] - The data passed when initializing the event.\n * @extends Event\n * @returns {Event}\n * @constructor\n */\n CustomEvent = function(event, params) {\n params = params || {bubbles: false, cancelable: false, detail: undefined};\n\n var evt = document.createEvent('CustomEvent');\n\n evt.initCustomEvent(event, !!params.bubbles, !!params.cancelable, params.detail);\n var origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch (e) {\n if (!this.defaultPrevented) {\n this.defaultPrevented = true;\n }\n }\n };\n\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n}());\n\nexport default CustomEvent;\n","import $ from './jquery';\nimport { dim, undim } from './blanket';\nimport FocusManager from './focus-manager';\nimport {getTrigger,hasTrigger} from './trigger';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport widget from './internal/widget';\nimport CustomEvent from './polyfills/custom-event';\n\nexport const EVENT_PREFIX = '_aui-internal-layer-';\nconst GLOBAL_EVENT_PREFIX = '_aui-internal-layer-global-';\nconst LAYER_EVENT_PREFIX = 'aui-layer-';\nconst AUI_EVENT_PREFIX = 'aui-';\nconst ATTR_MODAL = 'modal';\nconst ATTR_DOM_CONTAINER = 'dom-container';\nconst ZINDEX_AUI_LAYER_MIN = 3000;\n\nvar $doc = $(document);\n\n// AUI-3708 - Abstracted to reflect code implemented upstream.\nfunction isTransitioning (el, prop) {\n var transition = window.getComputedStyle(el).transitionProperty;\n return transition ? transition.indexOf(prop) > -1 : false;\n}\n\nfunction onTransitionEnd (el, prop, func, once) {\n function handler (e) {\n if (prop !== e.propertyName) {\n return;\n }\n\n func.call(el);\n\n if (once) {\n el.removeEventListener('transitionend', handler);\n }\n }\n\n if (isTransitioning(el, prop)) {\n el.addEventListener('transitionend', handler);\n } else {\n func.call(el);\n }\n}\n\nfunction oneTransitionEnd (el, prop, func) {\n onTransitionEnd(el, prop, func, true);\n}\n// end AUI-3708\n\n/**\n* @return {bool} Returns false if at least one of the event handlers called .preventDefault(). Returns true otherwise.\n*/\nfunction triggerEvent ($el, deprecatedName, newNativeName) {\n var e1 = $.Event(EVENT_PREFIX + deprecatedName);\n var e2 = $.Event(GLOBAL_EVENT_PREFIX + deprecatedName);\n // TODO: Remove this 'aui-layer-' prefixed event once it is no longer used by inline dialog and dialog2.\n var nativeEvent = new CustomEvent(LAYER_EVENT_PREFIX + newNativeName, {\n bubbles: true,\n cancelable: true\n });\n var nativeEvent2 = new CustomEvent(AUI_EVENT_PREFIX + newNativeName, {\n bubbles: true,\n cancelable: true\n });\n\n $el.trigger(e1);\n $el.trigger(e2, [$el]);\n $el[0].dispatchEvent(nativeEvent);\n $el[0].dispatchEvent(nativeEvent2);\n\n return !e1.isDefaultPrevented() &&\n !e2.isDefaultPrevented() &&\n !nativeEvent.defaultPrevented &&\n !nativeEvent2.defaultPrevented;\n}\n\nfunction Layer (selector) {\n this.$el = $(selector || '<div class=\"aui-layer\"></div>');\n this.el = this.$el[0];\n this.$el.addClass('aui-layer');\n}\n\nfunction getAttribute (el, name) {\n return el.getAttribute(name) || el.getAttribute('data-aui-' + name);\n}\n\nLayer.prototype = {\n /**\n * Returns the layer below the current layer if it exists.\n *\n * @returns {jQuery | undefined}\n */\n below: function () {\n return LayerManager.global.item(LayerManager.global.indexOf(this.$el) - 1);\n },\n\n /**\n * Returns the layer above the current layer if it exists.\n *\n * @returns {jQuery | undefined}\n */\n above: function () {\n return LayerManager.global.item(LayerManager.global.indexOf(this.$el) + 1);\n },\n\n /**\n * Sets the width and height of the layer.\n *\n * @param {number} width The width to set.\n * @param {number} height The height to set.\n *\n * @returns {Layer}\n */\n changeSize: function (width, height) {\n this.$el.css('width', width);\n this.$el.css('height', height === 'content' ? '' : height);\n return this;\n },\n\n /**\n * Binds a layer event.\n *\n * @param {String} event The event name to listen to.\n * @param {Function} fn The event handler.\n *\n * @returns {Layer}\n */\n on: function (event, fn) {\n this.$el.on(EVENT_PREFIX + event, fn);\n return this;\n },\n\n\n /**\n * Unbinds a layer event.\n *\n * @param {String} event The event name to unbind=.\n * @param {Function} fn Optional. The event handler.\n *\n * @returns {Layer}\n */\n off: function (event, fn) {\n this.$el.off(EVENT_PREFIX + event, fn);\n return this;\n },\n\n /**\n * Shows the layer.\n *\n * The layer is added to LayerManager stack.\n *\n * @returns {Layer}\n */\n show: function () {\n if (this.isVisible() || LayerManager.global.indexOf(this.$el) > -1) {\n // do nothing if already shown\n return this;\n }\n\n if (!triggerEvent(this.$el, 'beforeShow', 'show')) {\n return this;\n }\n\n // AUI-3708\n // Ensures that the display property is removed if it's been added\n // during hiding.\n if (this.$el.css('display') === 'none') {\n this.$el.css('display', '');\n }\n\n LayerManager.global.push(this.$el);\n\n return this;\n },\n\n /**\n * Hides the layer.\n *\n * The layer is removed from LayerManager stack.\n *\n * @returns {Layer}\n */\n hide: function () {\n if (!this.isVisible()) {\n // do nothing if already hidden\n return this;\n }\n\n // AUI-3708\n const thisLayer = this;\n oneTransitionEnd(this.$el.get(0), 'opacity', function () {\n if (!thisLayer.isVisible()) {\n this.style.display = 'none';\n }\n });\n\n LayerManager.global.popUntil(this.$el, true);\n\n return this;\n },\n\n /**\n * Checks to see if the layer is visible.\n *\n * @returns {Boolean}\n */\n isVisible: function () {\n return this.$el.data('_aui-layer-shown') === true;\n },\n\n /**\n * Removes the layer and cleans up internal state.\n *\n * @returns {undefined}\n */\n remove: function () {\n this.hide();\n this.$el.remove();\n this.$el = null;\n this.el = null;\n },\n\n /**\n * Returns whether or not the layer is blanketed.\n *\n * @returns {Boolean}\n */\n isBlanketed: function () {\n return this.el.dataset.auiBlanketed === 'true';\n },\n\n /**\n * Returns whether or not the layer is persistent.\n *\n * @returns {Boolean}\n */\n isPersistent: function () {\n var modal = getAttribute(this.el, ATTR_MODAL);\n var isPersistent = this.el.hasAttribute('persistent');\n\n return modal === 'true' || isPersistent;\n },\n /**\n * Returns element used to attach the component to onto render.\n *\n * Looks for a selector in specified attribute and returns Element matching that selector.\n * If attribute is set but the selector matches multiple elements - it will default to first available match.\n * If attribute is set but the selector does not match to any existing elements it will default to document.body\n * If the attribute is not set it will return null\n *\n * @returns {(Element|null)}\n */\n getDOMContainer: function () {\n let container = getAttribute(this.el, ATTR_DOM_CONTAINER);\n if (container) {\n container = document.querySelector(container) || document.body;\n }\n return container;\n },\n\n _hideLayer: function (triggerBeforeEvents) {\n if (triggerBeforeEvents) {\n if (!triggerEvent(this.$el, 'beforeHide', 'hide')) {\n return false;\n }\n }\n\n if (this.isPersistent() || this.isBlanketed()) {\n FocusManager.global.exit(this.$el);\n }\n\n // don't remove via jquery; that would cause this method to get re-called once or twice more :\\\n this.el.removeAttribute('open');\n this.$el.removeData('_aui-layer-shown');\n this.$el.css('z-index', this.$el.data('_aui-layer-cached-z-index') || '');\n this.$el.data('_aui-layer-cached-z-index', '');\n this.$el.trigger(EVENT_PREFIX + 'hide');\n this.$el.trigger(GLOBAL_EVENT_PREFIX + 'hide', [this.$el]);\n return true;\n },\n\n _showLayer: function (zIndex) {\n let domContainer = this.getDOMContainer();\n if (this.isBlanketed() || !!domContainer) {\n let parent = domContainer || 'body';\n\n if (!this.$el.parent().is(parent)) {\n this.$el.appendTo(parent);\n }\n }\n\n this.$el.data('_aui-layer-shown', true);\n this.$el.data('_aui-layer-cached-z-index', this.$el.css('z-index'));\n this.$el.css('z-index', zIndex);\n this.el.removeAttribute('hidden');\n this.el.setAttribute('open', '');\n\n if (this.isBlanketed()) {\n FocusManager.global.enter(this.$el);\n }\n\n this.$el.trigger(EVENT_PREFIX + 'show');\n this.$el.trigger(GLOBAL_EVENT_PREFIX + 'show', [this.$el]);\n }\n};\n\nvar createLayer = widget('layer', Layer);\n\ncreateLayer.on = function (eventName, selector, fn) {\n $doc.on(GLOBAL_EVENT_PREFIX + eventName, selector, fn);\n return this;\n};\n\ncreateLayer.off = function (eventName, selector, fn) {\n $doc.off(GLOBAL_EVENT_PREFIX + eventName, selector, fn);\n return this;\n};\n\n\n\n// Layer Manager\n// -------------\n\n/**\n * Manages layers.\n *\n * There is a single global layer manager.\n * Additional instances can be created however this should generally only be used in tests.\n *\n * Layers are added by the push($el) method. Layers are removed by the\n * popUntil($el) method.\n *\n * popUntil's contract is that it pops all layers above & including the given\n * layer. This is used to support popping multiple layers.\n * Say we were showing a dropdown inside an inline dialog inside a dialog - we\n * have a stack of dialog layer, inline dialog layer, then dropdown layer. Calling\n * popUntil(dialog.$el) would hide all layers above & including the dialog.\n */\n\nfunction topIndexWhere (layerArr, fn) {\n var i = layerArr.length;\n\n while (i--) {\n if (fn(layerArr[i])) {\n return i;\n }\n }\n\n return -1;\n}\n\nfunction layerIndex (layerArr, $el) {\n return topIndexWhere(layerArr, function ($layer) {\n return $layer[0] === $el[0];\n });\n}\n\nfunction topBlanketedIndex (layerArr) {\n return topIndexWhere(layerArr, function ($layer) {\n return createLayer($layer).isBlanketed();\n });\n}\n\nfunction nextZIndex (layerArr) {\n var _nextZIndex;\n\n if (layerArr.length) {\n var $topEl = layerArr[layerArr.length - 1];\n var zIndex = parseInt($topEl.css('z-index'), 10);\n _nextZIndex = (isNaN(zIndex) ? 0 : zIndex) + 100;\n } else {\n _nextZIndex = 0;\n }\n\n return Math.max(ZINDEX_AUI_LAYER_MIN, _nextZIndex);\n}\n\nfunction updateBlanket (stack, oldBlanketIndex) {\n var newTopBlanketedIndex = topBlanketedIndex(stack);\n\n if (oldBlanketIndex !== newTopBlanketedIndex) {\n if (newTopBlanketedIndex > -1) {\n dim(false, stack[newTopBlanketedIndex].css('z-index') - 20);\n } else {\n undim();\n }\n }\n}\n\nfunction popLayers (stack, stopIndex, forceClosePersistent, triggerBeforeEvents = true) {\n if (stopIndex < 0) {\n return [false, null];\n }\n\n var $layer;\n for (var a = stack.length - 1; a >= stopIndex; a--) {\n $layer = stack[a];\n var layer = createLayer($layer);\n\n if (forceClosePersistent || !layer.isPersistent()) {\n if (!layer._hideLayer(triggerBeforeEvents)) {\n return [false, $layer];\n }\n stack.splice(a, 1);\n }\n }\n return [true, $layer];\n}\n\nfunction getParentLayer (layer) {\n var trigger = getTrigger(layer);\n\n if (trigger) {\n return $(trigger).closest('.aui-layer').get(0);\n }\n}\n\nfunction LayerManager () {\n this._stack = [];\n}\n\nLayerManager.prototype = {\n /**\n * Pushes a layer onto the stack. The same element cannot be opened as a layer multiple times - if the given\n * element is already an open layer, this method throws an exception.\n *\n * @param {HTMLElement | String | jQuery} element The element to push onto the stack.\n *\n * @returns {LayerManager}\n */\n push: function (element) {\n var $el = (element instanceof $) ? element : $(element);\n if (layerIndex(this._stack, $el) >= 0) {\n throw new Error('The given element is already an active layer.');\n }\n\n this.popLayersBeside($el);\n\n var layer = createLayer($el);\n var zIndex = nextZIndex(this._stack);\n\n layer._showLayer(zIndex);\n\n if (layer.isBlanketed()) {\n dim(false, zIndex - 20);\n }\n\n this._stack.push($el);\n\n return this;\n },\n\n popLayersBeside: function (element) {\n const layer = $(element).get(0);\n if (!hasTrigger(layer)) {\n // We can't find this layer's trigger, we will pop all non-persistent until a blanket or the document\n var blanketedIndex = topBlanketedIndex(this._stack);\n popLayers(this._stack, ++blanketedIndex, false);\n return;\n }\n\n const parentLayer = getParentLayer(layer);\n if (parentLayer) {\n let parentIndex = this.indexOf(parentLayer);\n popLayers(this._stack, ++parentIndex, false);\n } else {\n popLayers(this._stack, 0, false);\n }\n },\n\n /**\n * Returns the index of the specified layer in the layer stack.\n *\n * @param {HTMLElement | String | jQuery} element The element to find in the stack.\n *\n * @returns {Number} the (zero-based) index of the element, or -1 if not in the stack.\n */\n indexOf: function (element) {\n return layerIndex(this._stack, $(element));\n },\n\n /**\n * Returns the item at the particular index or false.\n *\n * @param {Number} index The index of the element to get.\n *\n * @returns {jQuery | Boolean}\n */\n item: function (index) {\n return this._stack[index];\n },\n\n /**\n * Hides all layers in the stack.\n *\n * @returns {LayerManager}\n */\n hideAll: function () {\n this._stack.slice().reverse().forEach(function (element) {\n let layer = createLayer(element);\n if (layer.isBlanketed() || layer.isPersistent()) {\n return;\n }\n layer.hide();\n });\n\n return this;\n },\n\n /**\n * Gets the previous layer below the given layer, which is non modal and non persistent. If it finds a blanketed layer on the way\n * it returns it regardless if it is modal or not\n *\n * @param {HTMLElement | String | jQuery} element layer to start the search from.\n *\n * @returns {jQuery | null} the next matching layer or null if none found.\n */\n getNextLowerNonPersistentOrBlanketedLayer: function (element) {\n var $el = (element instanceof $) ? element : $(element);\n var index = layerIndex(this._stack, $el);\n\n if (index < 0) {\n return null;\n }\n\n var $nextEl;\n index--;\n while (index >= 0) {\n $nextEl = this._stack[index];\n var layer = createLayer($nextEl);\n\n if (!layer.isPersistent() || layer.isBlanketed()) {\n return $nextEl;\n }\n index--;\n }\n\n return null;\n },\n\n /**\n * Gets the next layer which is neither modal or blanketed, from the given layer.\n *\n * @param {HTMLElement | String | jQuery} element layer to start the search from.\n *\n * @returns {jQuery | null} the next non modal non blanketed layer or null if none found.\n */\n getNextHigherNonPeristentAndNonBlanketedLayer: function (element) {\n var $el = (element instanceof $) ? element : $(element);\n var index = layerIndex(this._stack, $el);\n\n if (index < 0) {\n return null;\n }\n\n var $nextEl;\n index++;\n while (index < this._stack.length) {\n $nextEl = this._stack[index];\n var layer = createLayer($nextEl);\n\n if (!(layer.isPersistent() || layer.isBlanketed())) {\n return $nextEl;\n }\n index++;\n }\n\n return null;\n },\n\n /**\n * Gets the top layer, if it exists.\n *\n * @returns The layer on top of the stack, if it exists, otherwise null.\n */\n getTopLayer: function () {\n return this._stack[this._stack.length - 1] || null;\n },\n\n /**\n * Get the top open layer, if it exists.\n *\n * @return The first open layer in the stack, if it exists, otherwise null.\n */\n getTopOpenLayer: function () {\n return this._stack.slice().reverse().find(layer => layer.attr('open')) || null;\n },\n\n /**\n * Removes all non-modal layers above & including the given element. If the given element is not an active layer, this method\n * is a no-op. The given element will be removed regardless of whether or not it is modal.\n *\n * @param {HTMLElement | String | jQuery} element layer to pop.\n * @param {boolean} [triggerBeforeEvents=false]\n *\n * @returns {jQuery} The last layer that was popped, or null if no layer matching the given $el was found.\n */\n popUntil: function (element, triggerBeforeEvents = false) {\n var $el = (element instanceof $) ? element : $(element);\n var index = layerIndex(this._stack, $el);\n\n if (index === -1) {\n return null;\n }\n\n const oldTopBlanketedIndex = topBlanketedIndex(this._stack);\n\n // Removes all layers above the current one.\n const layer = createLayer($el);\n const [success, $lastPopped] = popLayers(this._stack, index + 1, layer.isBlanketed(), triggerBeforeEvents)\n if (!success) {\n return $lastPopped;\n }\n\n // Removes the current layer.\n if (!layer._hideLayer(triggerBeforeEvents)) {\n return $lastPopped;\n }\n this._stack.splice(index, 1);\n updateBlanket(this._stack, oldTopBlanketedIndex);\n\n return $el;\n },\n\n /**\n * Pops the top layer, if it exists and it is non modal and non persistent.\n *\n * @returns The layer that was popped, if it was popped.\n */\n popTopIfNonPersistent: function (triggerBeforeEvents = false) {\n var $topLayer = this.getTopLayer();\n var layer = createLayer($topLayer);\n\n if (!$topLayer || layer.isPersistent()) {\n return null;\n }\n\n return this.popUntil($topLayer, triggerBeforeEvents);\n },\n\n /**\n * Pops all layers above and including the top blanketed layer. If layers exist but none are blanketed, this method\n * does nothing.\n *\n * @returns The blanketed layer that was popped, if it exists, otherwise null.\n */\n popUntilTopBlanketed: function (triggerBeforeEvents = false) {\n var i = topBlanketedIndex(this._stack);\n\n if (i < 0) {\n return null;\n }\n\n var $topBlanketedLayer = this._stack[i];\n var layer = createLayer($topBlanketedLayer);\n\n if (layer.isPersistent()) {\n // We can't pop the blanketed layer, only the things ontop\n var $next = this.getNextHigherNonPeristentAndNonBlanketedLayer($topBlanketedLayer);\n if ($next) {\n var stopIndex = layerIndex(this._stack, $next);\n popLayers(this._stack, stopIndex, true, triggerBeforeEvents);\n return $next;\n }\n return null;\n }\n\n popLayers(this._stack, i, true);\n updateBlanket(this._stack, i);\n return $topBlanketedLayer;\n },\n\n /**\n * Pops all layers above and including the top persistent layer. If layers exist but none are persistent, this method\n * does nothing.\n */\n popUntilTopPersistent: function (triggerBeforeEvents = false) {\n var $toPop = LayerManager.global.getTopLayer();\n if (!$toPop) {\n return;\n }\n\n var stopIndex;\n var oldTopBlanketedIndex = topBlanketedIndex(this._stack);\n\n var toPop = createLayer($toPop);\n if (toPop.isPersistent()) {\n if (toPop.isBlanketed()) {\n return;\n } else {\n // Get the closest non modal layer below, stop at the first blanketed layer though, we don't want to pop below that\n $toPop = LayerManager.global.getNextLowerNonPersistentOrBlanketedLayer($toPop);\n toPop = createLayer($toPop);\n\n if ($toPop && !toPop.isPersistent()) {\n stopIndex = layerIndex(this._stack, $toPop);\n popLayers(this._stack, stopIndex, true, triggerBeforeEvents);\n updateBlanket(this._stack, oldTopBlanketedIndex);\n } else {\n // Here we have a blanketed persistent layer\n return;\n }\n }\n } else {\n stopIndex = layerIndex(this._stack, $toPop);\n popLayers(this._stack, stopIndex, true, triggerBeforeEvents);\n updateBlanket(this._stack, oldTopBlanketedIndex);\n }\n }\n};\n\n// LayerManager.global\n// -------------------\n\nfunction initCloseLayerOnEscPress() {\n $doc.on('keydown', function (e) {\n if (e.keyCode === keyCode.ESCAPE) {\n LayerManager.global.popUntilTopPersistent(true);\n e.preventDefault();\n }\n });\n}\n\nfunction initCloseLayerOnBlanketClick() {\n $doc.on('click', '.aui-blanket', function (e) {\n if (LayerManager.global.popUntilTopBlanketed(true)) {\n e.preventDefault();\n }\n });\n}\n\nfunction hasLayer($trigger) {\n if (!$trigger.length) {\n return false;\n }\n\n var layer = document.getElementById($trigger.attr('aria-controls'));\n return LayerManager.global.indexOf(layer) > -1;\n}\n\n// If it's a click on a trigger, do nothing.\n// If it's a click on a layer, close all layers above.\n// Otherwise, close all layers.\nfunction initCloseLayerOnOuterClick () {\n $doc.on('click', function (e) {\n var $target = $(e.target);\n if ($target.closest('.aui-blanket').length) {\n return;\n }\n\n var $trigger = $target.closest('[aria-controls]');\n var $layer = $target.closest('.aui-layer');\n if (!$layer.length && !hasLayer($trigger)) {\n const customEvent = $.Event('aui-close-layers-on-outer-click');\n $doc.trigger(customEvent);\n if (customEvent.isDefaultPrevented()) {\n e.preventDefault();\n return;\n }\n LayerManager.global.hideAll();\n return;\n }\n\n // Triggers take precedence over layers\n if (hasLayer($trigger)) {\n return;\n }\n\n if ($layer.length) {\n // We dont want to explicitly call close on a modal dialog if it happens to be next.\n // All blanketed layers should be below us, as otherwise the blanket should have caught the click.\n // We make sure we dont close a blanketed one explicitly as a hack, this is to fix the problem arising\n // from dialog2 triggers inside dialog2's having no aria controls, where the dialog2 that was just\n // opened would be closed instantly\n var $next = LayerManager.global.getNextHigherNonPeristentAndNonBlanketedLayer($layer);\n\n if ($next) {\n createLayer($next).hide();\n }\n }\n });\n}\n\ninitCloseLayerOnEscPress();\ninitCloseLayerOnBlanketClick();\ninitCloseLayerOnOuterClick();\n\nLayerManager.global = new LayerManager();\ncreateLayer.Manager = LayerManager;\n\nglobalize('layer', createLayer);\n\nexport default createLayer;\n","import globalize from './internal/globalize';\nimport layer from './layer';\n\nglobalize('LayerManager', layer.Manager);\n\nexport default layer.Manager;\n","import globalize from './internal/globalize';\nimport {getMessageLogger} from './internal/deprecation';\n\nconst deprecation = {\n sinceVersion: '9.0.0',\n removeInVersion: '10.0.0'\n};\n\nconst proxy = new Proxy({}, {\n get: function(obj, prop) {\n getMessageLogger('AJS.params', deprecation)();\n return obj[prop];\n },\n})\n\nexport default globalize('params', proxy);\n","import $ from './jquery';\nimport globalize from './internal/globalize';\nimport {fn} from './internal/deprecation';\nimport params from './params';\n\nfunction populateParametersOrg (parameters) {\n if (!parameters) {\n parameters = params;\n }\n\n $('.parameters input').each(function () {\n var value = this.value;\n var id = this.title || this.id;\n\n if ($(this).hasClass('list')) {\n if (parameters[id]) {\n parameters[id].push(value);\n } else {\n parameters[id] = [value];\n }\n } else {\n parameters[id] = (value.match(/^(tru|fals)e$/i) ? value.toLowerCase() === 'true' : value);\n }\n });\n}\n\nconst deprecation = {\n sinceVersion: '9.0.0',\n removeInVersion: '10.0.0'\n};\n\nconst populateParameters = fn(populateParametersOrg, 'populateParameters', deprecation);\nglobalize('populateParameters', populateParameters);\n\nexport default populateParameters;\n","// Global setup that used to be in the main AJS namespace file.\nimport $ from './jquery';\nimport globalize from './internal/globalize';\nimport populateParameters from './populate-parameters';\nimport version from './version';\n\n// Set the version.\n$(function () {\n var $body = $('body');\n\n if (!$body.data('auiVersion')) {\n $body.attr('data-aui-version', version);\n }\n\n populateParameters();\n});\n\nglobalize('$', $);\nexport default $;\n","import $ from './jquery';\nimport * as logger from './internal/log';\nimport globalize from './internal/globalize';\n\n/**\n * Adds functions to the list of methods to be run asynchronously after DomContentLoaded.\n *\n * Wraps error handling around the provided function so its failure won't prevent\n * other init functions running.\n *\n * @param {Function} func Function to be called on initialisation.\n *\n * @return {Object}\n */\nfunction toInit (func) {\n $.when($.ready).then(function () {\n // Ensure that every function passed through toInit happens asynchronously after DomContentLoaded events,\n // and will be executed in its own stack, meaning that the UI can be updated in-between expensive handlers.\n setTimeout(function () {\n try {\n func.call(this, $);\n } catch (ex) {\n logger.error('Failed to run init function: ' + ex.message, func, ex, ex.stack);\n }\n }, 1);\n });\n\n return this;\n}\n\nglobalize('toInit', toInit);\n\nexport default toInit;\n","export default {\n 'aui.landmarks.site': 'Site',\n 'aui.landmarks.sidebar': 'Sidebar',\n 'aui.landmarks.page': 'Page',\n 'aui.landmarks.main': 'Main',\n 'aui.header.home.link': 'Go to home page',\n 'aui.dropdown.async.error': 'Error loading dropdown',\n 'aui.dropdown.async.loading': 'Loading dropdown',\n 'aui.words.expand': 'Expand',\n 'aui.words.collapse': 'Collapse',\n 'aui.words.add': 'Add',\n 'aui.words.update': 'Update',\n 'aui.words.delete': 'Delete',\n 'aui.words.remove': 'Remove',\n 'aui.words.cancel': 'Cancel',\n 'aui.words.loading': 'Loading',\n 'aui.words.close': 'Close',\n 'aui.enter.value': 'Enter value',\n 'aui.words.more': 'More',\n 'aui.words.moreitem': 'More…',\n 'aui.keyboard.shortcut.type.x': \"Type ''{0}''\",\n 'aui.keyboard.shortcut.then.x': \"then ''{0}''\",\n 'aui.keyboard.shortcut.or.x': \"OR ''{0}''\",\n 'aui.sidebar.expand.tooltip': 'Expand sidebar ( [ )',\n 'aui.sidebar.collapse.tooltip': 'Collapse sidebar ( [ )',\n 'aui.validation.message.maxlength': 'Must be fewer than or equal to {0} characters',\n 'aui.validation.message.minlength': 'Must be greater than or equal to {0} characters',\n 'aui.validation.message.exactlength': 'Must be exactly {0} characters',\n 'aui.validation.message.matchingfield': '{0} and {1} do not match.',\n 'aui.validation.message.matchingfield-novalue': 'These fields do not match.',\n 'aui.validation.message.doesnotcontain': 'Do not include the phrase {0} in this field',\n 'aui.validation.message.pattern': 'This field does not match the required format',\n 'aui.validation.message.required': 'This is a required field',\n 'aui.validation.message.validnumber': 'Please enter a valid number',\n 'aui.validation.message.min': 'Enter a value greater than or equal to {0}',\n 'aui.validation.message.max': 'Enter a value less than or equal to {0}',\n 'aui.validation.message.dateformat': 'Enter a valid date',\n 'aui.validation.message.minchecked': 'Tick at least {0,choice,0#0 checkboxes|1#1 checkbox|1<{0,number} checkboxes}.',\n 'aui.validation.message.maxchecked': 'Tick at most {0,choice,0#0 checkboxes|1#1 checkbox|1<{0,number} checkboxes}.',\n 'aui.checkboxmultiselect.clear.selected': 'Clear selected items',\n 'aui.select.no.suggestions': 'No suggestions',\n 'aui.select.number.suggestions': 'Found {0,choice,0#0 options|1#1 option|1<{0,number} options}.',\n 'aui.select.new.suggestions': 'New suggestions added. Please use the up and down arrows to select.',\n 'aui.select.new.value': 'new value',\n 'aui.toggle.on': 'On',\n 'aui.toggle.off': 'Off',\n 'aui.messagecomponent.error.label': 'Error',\n 'aui.messagecomponent.warning.label': 'Warning',\n 'aui.messagecomponent.info.label': 'Information',\n 'aui.messagecomponent.confirmation.label': 'Confirmation',\n 'aui.messagecomponent.change.label': 'Change',\n 'ajs.datepicker.localisations.day-names.sunday': 'Sunday',\n 'ajs.datepicker.localisations.day-names.monday': 'Monday',\n 'ajs.datepicker.localisations.day-names.tuesday': 'Tuesday',\n 'ajs.datepicker.localisations.day-names.wednesday': 'Wednesday',\n 'ajs.datepicker.localisations.day-names.thursday': 'Thursday',\n 'ajs.datepicker.localisations.day-names.friday': 'Friday',\n 'ajs.datepicker.localisations.day-names.saturday': 'Saturday',\n 'ajs.datepicker.localisations.day-names-min.sunday': 'Sun',\n 'ajs.datepicker.localisations.day-names-min.monday': 'Mon',\n 'ajs.datepicker.localisations.day-names-min.tuesday': 'Tue',\n 'ajs.datepicker.localisations.day-names-min.wednesday': 'Wed',\n 'ajs.datepicker.localisations.day-names-min.thursday': 'Thu',\n 'ajs.datepicker.localisations.day-names-min.friday': 'Fri',\n 'ajs.datepicker.localisations.day-names-min.saturday': 'Sat',\n 'ajs.datepicker.localisations.first-day': 0,\n 'ajs.datepicker.localisations.is-RTL': false,\n 'ajs.datepicker.localisations.month-names.january': 'January',\n 'ajs.datepicker.localisations.month-names.february': 'February',\n 'ajs.datepicker.localisations.month-names.march': 'March',\n 'ajs.datepicker.localisations.month-names.april': 'April',\n 'ajs.datepicker.localisations.month-names.may': 'May',\n 'ajs.datepicker.localisations.month-names.june': 'June',\n 'ajs.datepicker.localisations.month-names.july': 'July',\n 'ajs.datepicker.localisations.month-names.august': 'August',\n 'ajs.datepicker.localisations.month-names.september': 'September',\n 'ajs.datepicker.localisations.month-names.october': 'October',\n 'ajs.datepicker.localisations.month-names.november': 'November',\n 'ajs.datepicker.localisations.month-names.december': 'December',\n 'ajs.datepicker.localisations.show-month-after-year': false,\n 'ajs.datepicker.localisations.year-suffix': ''\n}\n","// Import the I18n system from the WRM, webpack handles this\nimport 'wrmI18n';\nimport format from './format';\nimport { putOnI18nIfAbsent } from './internal/globalize';\nimport keys from './internal/i18n/aui';\n\n/**\n * Returns the value defined in AJS.I18n.keys for the given key. If AJS.I18n.keys does not exist, or if the given key does not exist,\n * the key is returned - this could occur in plugin mode if the I18n transform is not performed;\n * or in flatpack mode if the i18n JS file is not loaded.\n */\nconst I18n = {\n keys: keys,\n getText: function (key, ...params) {\n if (Object.prototype.hasOwnProperty.call(this.keys, key)) {\n return format.apply(null, [this.keys[key]].concat(params));\n }\n\n return key;\n }\n};\n\nexport {\n I18n,\n format\n}\n\n/**\n * Deprecated - do not use AJS.I18n.getText from global scope within AUI code. Use import { I18n } from '../i18n'\n * Also keep in mind that WRM is looking for patterns like \"I18n.getText\" so do not create\n * aliases for I18n or export it from here using 'default'. Webpack transforms it then to\n * 'd.default.getText' and it won't match.\n **/\n// eslint-disable-next-line guard-for-in\nfor (const property in I18n) {\n // AUI-5431 Add to global namespace, but do not override what is set by the WRM\n putOnI18nIfAbsent(property, I18n[property]);\n}\n","import skate from './internal/skate';\n\n\nconst DEFAULT_PLACEMENT_VALUE = 'bottom-end';\nconst PLACEMENT_OPTIONS = ['top-start', 'top-end', 'bottom-start', 'bottom-end'];\n\nconst setBadgedPlacement = (element, newValue, oldValue) => {\n const newPlacement = PLACEMENT_OPTIONS.includes(newValue) ? newValue : DEFAULT_PLACEMENT_VALUE;\n\n if (oldValue) {\n element.classList.remove(`aui-avatar-badged-${oldValue}`);\n }\n element.classList.add(`aui-avatar-badged-${newPlacement}`);\n}\n\nconst AvatarBadged = skate('aui-avatar-badged', {\n attributes: {\n placement: {\n value: DEFAULT_PLACEMENT_VALUE,\n fallback(element, { newValue, oldValue}) {\n setBadgedPlacement(element, newValue, oldValue);\n },\n },\n },\n\n created: function(element) {\n element.classList.add('aui-avatar-badged');\n }\n});\n\nexport { AvatarBadged };\n","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMTI4IDEyOCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0ieHhsYXJnZSI+CiAgICA8Zz4KICAgICAgICA8Y2lyY2xlIGN4PSI2NCIgY3k9IjY0IiByPSI2NCIgZmlsbD0iIzg5OTNhNCIgLz4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggZmlsbD0iI2ZmZiIKICAgICAgICAgICAgICAgIGQ9Ik0xMDMsMTAyLjEzODggQzkzLjA5NCwxMTEuOTIgNzkuMzUwNCwxMTggNjQuMTYzOCwxMTggQzQ4LjgwNTYsMTE4IDM0LjkyOTQsMTExLjc2OCAyNSwxMDEuNzg5MiBMMjUsOTUuMiBDMjUsODYuODA5NiAzMS45ODEsODAgNDAuNiw4MCBMODcuNCw4MCBDOTYuMDE5LDgwIDEwMyw4Ni44MDk2IDEwMyw5NS4yIEwxMDMsMTAyLjEzODggWiIgLz4KICAgICAgICAgICAgPHBhdGggZmlsbD0iI2ZmZiIKICAgICAgICAgICAgICAgIGQ9Ik02My45OTYxNjQ3LDI0IEM1MS4yOTM4MTM2LDI0IDQxLDM0LjI5MzgxMzYgNDEsNDYuOTk2MTY0NyBDNDEsNTkuNzA2MTg2NCA1MS4yOTM4MTM2LDcwIDYzLjk5NjE2NDcsNzAgQzc2LjY5ODUxNTksNzAgODcsNTkuNzA2MTg2NCA4Nyw0Ni45OTYxNjQ3IEM4NywzNC4yOTM4MTM2IDc2LjY5ODUxNTksMjQgNjMuOTk2MTY0NywyNCIgLz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo=\"","import template from 'skatejs-template-html';\nimport skate from './internal/skate';\nimport personImage from '../../../../../packages/docs/src/docs/images/avatar-person.svg';\nimport projectImage from '../../../../../packages/docs/src/docs/images/avatar-project.svg';\n\nconst DEFAULT_AVATAR_IMAGES = new Map([\n ['project', projectImage],\n ['user', personImage]\n]);\n\nconst getElementWrapper = (element, elementFind) => element.querySelector(elementFind);\nconst containsBadge = (element) => element.querySelector('aui-avatar-badged') !== null;\n\nconst replaceClass = (element, newValue, oldValue) => {\n const elementWrapper = getElementWrapper(element, '.aui-avatar');\n\n elementWrapper.classList.remove(`aui-avatar-${oldValue}`);\n elementWrapper.classList.add(`aui-avatar-${newValue}`);\n}\n\nconst getAvatarType = (element) => element.getAttribute('type') === 'project' ? 'project' : 'user';\n\nconst setDefaultAvatarImage = (element) => {\n if (element.hasAttribute('src')){\n setImageSrc(element, element.getAttribute('src'));\n } else {\n const avatarType = getAvatarType(element);\n const avatarSvg = DEFAULT_AVATAR_IMAGES.get(avatarType);\n setImageSrc(element, avatarSvg);\n }\n}\n\nconst setImageAttr = (element, name, value) => getElementWrapper(element, 'img').setAttribute(name, value);\nconst setImageSrc = (element, src) => setImageAttr(element, 'src', src);\nconst setImageAlt = (element, alt) => setImageAttr(element, 'alt', alt);\nconst setImageTitle = (element, title) => setImageAttr(element, 'title', title);\n\nconst AvatarEl = skate('aui-avatar', {\n template: template(`\n <span class='aui-avatar'>\n <span class='aui-avatar-inner'>\n <img />\n </span>\n <content></content>\n </span>\n `),\n\n attributes: {\n size(element, { newValue , oldValue}) {\n replaceClass(element, newValue, oldValue);\n },\n type(element, { newValue, oldValue}) {\n replaceClass(element, newValue, oldValue);\n setDefaultAvatarImage(element);\n },\n src(element, { newValue: value }) {\n setImageSrc(element, value);\n },\n alt: {\n value: '',\n fallback(element, {newValue: value}) {\n setImageAlt(element, value);\n }\n },\n title(element, {newValue: value}) {\n setImageTitle(element, value);\n },\n },\n\n created: function(element) {\n element.className = 'aui-avatar';\n setDefaultAvatarImage(element);\n\n if (containsBadge(element)) {\n element.setAttribute('role', 'img')\n }\n }\n});\n\nexport { AvatarEl };\n","export default \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMTI4IDEyOCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0ieHhsYXJnZSI+CiAgICA8Zz4KICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgZmlsbD0iIzg5OTNhNCIgLz4KICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOS4wMDAwMDAsIDMyLjAwMDAwMCkiPgogICAgICAgICAgICA8cGF0aCBmaWxsPSIjZmZmIgogICAgICAgICAgICAgICAgZD0iTTE4LjI1LDMyLjUgTDU0LjU4MzMzMzMsMzIuNSBMNTQuNTgzMzMzMywyMy40MTY2NjY3IEwxOC4yNSwyMy40MTY2NjY3IEwxOC4yNSwzMi41IFogTTkuMTY2NjY2NjcsMTguODMzMTE2NiBDOS4xNjY2NjY2NywxNi4zNDc5NTQ5IDExLjIzNjU4MSwxNC4zMzMzMzMzIDEzLjcxOTU2NjIsMTQuMzMzMzMzMyBMNTkuMTEzNzY3MSwxNC4zMzMzMzMzIEM2MS42MjgyNjQxLDE0LjMzMzMzMzMgNjMuNjY2NjY2NywxNi4zODE1MTIzIDYzLjY2NjY2NjcsMTguODMzMTE2NiBMNjMuNjY2NjY2Nyw0MS41ODMzMzMzIEw5LjE2NjY2NjY3LDQxLjU4MzMzMzMgTDkuMTY2NjY2NjcsMTguODMzMTE2NiBaIiAvPgogICAgICAgICAgICA8cGF0aCBmaWxsPSIjZmZmIgogICAgICAgICAgICAgICAgZD0iTTE4LjI1LDkuODEzODM2ODIgQzE4LjI1LDQuNzg1MDA2MSAyMi4zMjk2MDAzLDAuNzA4MzMzMzMzIDI3LjMyMzg1NTQsMC43MDgzMzMzMzMgTDM2LjQyNjE0NDYsMC43MDgzMzMzMzMgQzQxLjQzNzQ5NjUsMC43MDgzMzMzMzMgNDUuNSw0Ljc2ODEyODI1IDQ1LjUsOS44MTM4MzY4MiBMNDUuNSwyMy40MTY2NjY3IEwxOC4yNSwyMy40MTY2NjY3IEwxOC4yNSw5LjgxMzgzNjgyIFogTTM2LjQxNjY2NjcsOS44MTM4MzY4MiBDMzYuNDE2NjY2Nyw5Ljc5ODAzMzE1IDM2LjQxODQ3NDgsOS43OTMwMzc4NCAzNi40MjA3NTE1LDkuNzkxNjY2NjcgTDI3LjMyMzg1NTQsOS43OTE2NjY2NyBDMjcuMzQ0NzIyNCw5Ljc5MTY2NjY3IDI3LjMzMzMzMzMsOS44MDMwODA1OSAyNy4zMzMzMzMzLDkuODEzODM2ODIgTDI3LjMzMzMzMzMsMTQuMzMzMzMzMyBMMzYuNDE2NjY2NywxNC4zMzMzMzMzIEwzNi40MTY2NjY3LDkuODEzODM2ODIgWiIgLz4KICAgICAgICAgICAgPHBhdGggZmlsbD0iI2ZmZiIKICAgICAgICAgICAgICAgIGQ9Ik0xMS40Mzg2NTMyLDU1LjIwODMzMzMgTDc0Ljk5NTM1NjIsNTUuMjA4MzMzMyBMNzkuNTQ1MjI0Miw0MS41ODMzMzMzIEw5LjgwNDQ5NzUyLDQxLjU4MzMzMzMgTDExLjQzODY1MzIsNTUuMjA4MzMzMyBaIE0wLjEwNDg1NDcsMzYuOTg3NTQxIEMtMC4xOTIzOTk3NzUsMzQuNTA5MTQwNSAxLjU4NjU3MTcsMzIuNSA0LjA5NTAyODM5LDMyLjUgTDg3LjYyNjQ3MzUsMzIuNSBDOTAuMTI3NDQwMSwzMi41IDkxLjUyMjU2NTYsMzQuMzkzNTA2IDkwLjcyMzEwNDcsMzYuNzg3NTY1NiBMODIuOTcwMjg0Niw2MC4wMDQxMDEgQzgyLjE3OTU0MDIsNjIuMzcyMDU4MiA3OS41Mjc5NDQ1LDY0LjI5MTY2NjcgNzYuOTk4NTMzOCw2NC4yOTE2NjY3IEw3LjkxOTYzOTI0LDY0LjI5MTY2NjcgQzUuNDEyMjc2NzMsNjQuMjkxNjY2NyAzLjE0MTEzNTcxLDYyLjMwMjk1NTUgMi44NDE0MzA5Nyw1OS44MDQxMjU3IEwwLjEwNDg1NDcsMzYuOTg3NTQxIFoiIC8+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K\"","import skate from './internal/skate';\n\nconst DEFAULT_SIZE = 'medium';\nconst VISIBLE_AVATAR_COUNT = 4;\nconst OVERLAP_FACTOR = 0.25;\nconst SIZES = {xsmall: 16, small: 24, medium: 32, large: 48, xlarge: 64, xxlarge: 96, xxxlarge: 128};\n\nconst setAvatarGroupSize = (element, newValue, oldValue) => {\n if (oldValue) {\n element.classList.remove(`aui-avatar-group-${oldValue}`);\n }\n element.classList.add(`aui-avatar-group-${newValue}`);\n}\n\nconst getAvatarGroupSize = (value) => {\n return Object.keys(SIZES).includes(value) ? value : DEFAULT_SIZE;\n}\n\nconst updateAvatarGroup = (element, size) => {\n const avatars = element.querySelectorAll('aui-avatar');\n const hiddenAvatars = [...avatars].slice(VISIBLE_AVATAR_COUNT);\n\n updateAvatarGroupItems(avatars, size);\n\n const oldDropdown = element.querySelector('.aui-avatar-group-dropdown');\n if (oldDropdown) {\n oldDropdown.remove();\n }\n\n if (hiddenAvatars.length === 0) { return };\n\n const dropdown = createDropdown(size, hiddenAvatars);\n\n element.appendChild(dropdown);\n}\n\nconst createDropdown = (size, hiddenAvatars) => {\n const dropdown = document.createElement('div');\n const button = createAvatarGroupDropdownButton(`+${hiddenAvatars.length}`);\n const menu = createAvatarGroupDropdownMenu();\n\n hiddenAvatars.forEach((hiddenAvatar) => {\n menu.append(hiddenAvatar);\n })\n dropdown.classList.add('aui-avatar-group-dropdown');\n dropdown.style.left = getLeftPosition(size, VISIBLE_AVATAR_COUNT + 0.2);\n dropdown.appendChild(button);\n dropdown.appendChild(menu);\n return dropdown;\n}\n\nconst createAvatarGroupDropdownButton = (content) => {\n const button = document.createElement('button');\n button.classList.add('aui-avatar-group-dropdown-button', 'aui-avatar-inner');\n button.innerText = content;\n button.setAttribute('aria-expanded', false);\n button.setAttribute('aria-haspopup', 'dialog');\n return button;\n}\n\nconst createAvatarGroupDropdownMenu = () => {\n const dropdown = document.createElement('div');\n dropdown.classList.add('aui-avatar-group-dropdown-menu');\n return dropdown;\n}\n\nconst updateAvatarGroupItems = (avatars, size) => {\n avatars.forEach((avatar, index) => {\n const isHidden = index >= VISIBLE_AVATAR_COUNT;\n avatar.classList.add(!isHidden ? 'aui-avatar-group-item' : 'aui-avatar-group-dropdown-item');\n\n if (!isHidden) {\n avatar.setAttribute('size', size);\n avatar.style.left = getLeftPosition(size, index);\n avatar.style.zIndex = `${VISIBLE_AVATAR_COUNT + 1 - index}`;\n } else {\n avatar.setAttribute('size', 'medium');\n }\n });\n};\n\nconst getLeftPosition = (size, index) => {\n const avatarSize = SIZES[size];\n const overlapFactor = avatarSize * OVERLAP_FACTOR;\n const leftPosition = (avatarSize - overlapFactor) * index;\n return `${leftPosition}px`;\n};\n\ndocument.addEventListener('click', (e) => {\n const isDropdownButton = e.target.matches('.aui-avatar-group-dropdown-button');\n const closestDropdown = e.target.closest('.aui-avatar-group-dropdown');\n\n if (!isDropdownButton && closestDropdown !== null) return;\n\n if (isDropdownButton) {\n closestDropdown.classList.contains('aui-avatar-group-dropdown-show') ? closeDropdown(closestDropdown) : openDropdown(closestDropdown);\n }\n\n document.querySelectorAll('.aui-avatar-group-dropdown-show').forEach(dropdown => {\n if (dropdown === closestDropdown) return;\n\n closeDropdown(dropdown)\n })\n});\n\ndocument.addEventListener('keydown', (e) => {\n if (e.key !== 'Escape') return;\n const dropdown = document.querySelector('.aui-avatar-group-dropdown-show');\n if (!dropdown) return;\n\n closeDropdown(dropdown);\n});\n\nconst closeDropdown = (dropdown) => {\n const button = dropdown.querySelector('.aui-avatar-group-dropdown-button');\n dropdown.classList.remove('aui-avatar-group-dropdown-show');\n button.setAttribute('aria-expanded', 'false');\n}\nconst openDropdown = (dropdown) => {\n const button = dropdown.querySelector('.aui-avatar-group-dropdown-button');\n dropdown.classList.add('aui-avatar-group-dropdown-show');\n button.setAttribute('aria-expanded', 'true');\n}\n\nconst AvatarGroupEl = skate('aui-avatar-group', {\n attributes: {\n size: {\n value: DEFAULT_SIZE,\n fallback(element, { newValue, oldValue }) {\n const size = getAvatarGroupSize(newValue);\n setAvatarGroupSize(element, size, oldValue);\n\n skate.init(element);\n\n updateAvatarGroup(element, size);\n }\n },\n },\n created(element) {\n element.classList.add('aui-avatar-group');\n },\n});\n\nconst wasNodeRemoved = (mutation, target) => {\n return mutation.removedNodes.length > 0 && target.classList.contains('aui-avatar-group') && mutation.removedNodes[0].classList.contains('aui-avatar-group-item');\n}\n\nconst wasNodeAdded = (mutation, target) => {\n return mutation.addedNodes.length > 0 && target.classList.contains('aui-avatar-group') && mutation.addedNodes[0].classList.contains('aui-avatar');\n}\n\nconst mutationObserver = new MutationObserver(function(mutation) {\n mutation.forEach(function(mutation) {\n const target = mutation.target;\n\n if (wasNodeRemoved(mutation, target)) {\n updateAvatarGroup(target, target.getAttribute('size'));\n }\n\n if (wasNodeAdded(mutation, target)) {\n setTimeout(() => {\n updateAvatarGroup(target, target.getAttribute('size'));\n }, 0);\n }\n });\n});\n\nmutationObserver.observe(document.documentElement, {\n attributes: false,\n characterData: true,\n childList: true,\n subtree: true,\n attributeOldValue: false,\n characterDataOldValue: false\n});\n\nexport { AvatarGroupEl };\n","import { recomputeStyle } from './internal/animation';\nimport amdify from './internal/amdify';\nimport globalize from './internal/globalize';\nimport * as deprecate from './internal/deprecation';\n\nconst ID_BANNER_CONTAINER = 'header';\n\nconst getContainer = () => document.getElementById(ID_BANNER_CONTAINER);\n\nfunction banner(options) {\n const bannerContainer = getContainer();\n if (!bannerContainer) {\n throw new Error(\n 'Unable to find the application header. Please ensure that an element with the ID \"header\" is present in the DOM'\n );\n }\n const bannerElement = createBannerElement(options);\n\n renderBannerElement(bannerElement, bannerContainer);\n removeHiddenBanners(bannerContainer);\n return bannerElement;\n}\n\nfunction createBannerElement({ body = '', type = 'error' }) {\n const banner = document.createElement('div');\n banner.className = `aui-banner aui-banner-${type}`;\n banner.setAttribute('role', 'alert');\n banner.innerHTML = body;\n \n const screenReaderInfo = document.createElement('div');\n screenReaderInfo.innerText = `${type}`;\n screenReaderInfo.classList.add('assistive')\n banner.prepend(screenReaderInfo);\n\n return banner;\n}\n\nfunction removeHiddenBanners(bannerContainer) {\n const hiddenBanners = bannerContainer.querySelectorAll('.aui-banner[hidden]');\n const lazyDeprecate = deprecate.getMessageLogger('Banner [hidden] attribute', {\n removeInVersion: '10.0.0',\n sinceVersion: '9.8.0',\n deprecationType: 'ATTRIBUTE',\n extraInfo: 'The hidden attribute on the banner is no longer effective. Future banner function calls won\\'t remove banners with this attribute.'\n });\n\n hiddenBanners.forEach(function (banner) {\n lazyDeprecate();\n banner.remove();\n });\n}\n\nfunction renderBannerElement(bannerElement, bannerContainer) {\n bannerContainer.prepend(bannerElement);\n recomputeStyle(bannerElement);\n}\n\namdify('aui/banner', banner);\nglobalize('banner', banner);\nexport default banner;","import skate from './internal/skate';\nimport { getMessageLogger } from './internal/deprecation';\nimport { defaults, find } from 'underscore';\n\n/**\n * @typedef {\"small\"|\"medium\"|\"large\"} SpinnerSize\n */\n\n/**\n * @typedef {Object} SpinnerSizeConfig\n * @param {SpinnerSize} name\n * @param {number} px\n * @param {number} radius\n */\n\n/**\n * @enum {SpinnerSizeConfig}\n * @readonly\n */\nconst SIZE = {\n SMALL: {\n name: 'small',\n px: 20,\n radius: 9,\n },\n MEDIUM: {\n name: 'medium',\n px: 30,\n radius: 13.5,\n },\n LARGE: {\n name: 'large',\n px: 50,\n radius: 22.5,\n },\n};\n\nconst DEFAULTS = {\n filled: false,\n size: SIZE.MEDIUM.name,\n};\n\nconst filledAttributeReplacementText = `Add CSS to the parent element of the <aui-spinner>.\nUse CSS flexbox or grid to vertically align it.\nSee https://css-tricks.com/centering-css-complete-guide/ for techniques.`;\n\nconst filledAttributeDeprecatedLogger = getMessageLogger('<aui-spinner> filled attribute', {\n sinceVersion: '7.9.4',\n removeInVersion: '10.0.0',\n extraInfo: filledAttributeReplacementText\n});\n\nconst filledPropDeprecatedLogger = getMessageLogger('<aui-spinner> filled property', {\n sinceVersion: '7.9.4',\n removeInVersion: '10.0.0',\n extraInfo: filledAttributeReplacementText\n});\n\n/** @deprecated */\nfunction setMiddleTop(element, height) {\n const parent = element.parentNode;\n // only operate on elements, not documentFragment or comment nodes, etc.\n if (parent && parent.nodeType === 1) {\n const selfDomRect = element.getBoundingClientRect();\n const parentDomRect = parent.getBoundingClientRect();\n\n const parentMiddleTop = parentDomRect.top + parentDomRect.height / 2;\n const spinnerMiddleTop = selfDomRect.top + height / 2;\n\n element.querySelector('svg').style.top = `${parentMiddleTop - spinnerMiddleTop}px`;\n }\n}\n\n/** @deprecated */\nfunction removeMiddleTop(element) {\n delete element.querySelector('svg').style.top;\n}\n\nfunction validateSize(size) {\n let result = SIZE.MEDIUM.name;\n if (typeof size === 'string') {\n size = size.toLowerCase();\n const possibleSizes = Object.keys(SIZE).map(key => key.toLowerCase());\n\n if (possibleSizes.indexOf(size) > -1) {\n result = size;\n }\n }\n\n return result;\n}\n\nfunction setSize(element, size, radius) {\n const svg = element.querySelector('svg');\n const circle = element.querySelector('circle');\n\n svg.setAttribute('size', size);\n svg.setAttribute('height', size);\n svg.setAttribute('width', size);\n svg.setAttribute('viewBox', `0 0 ${size} ${size}`);\n\n const circleSize = size / 2;\n\n circle.setAttribute('cx', circleSize);\n circle.setAttribute('cy', circleSize);\n circle.setAttribute('r', radius);\n}\n\nfunction refresh(element) {\n const { px, radius } = find(SIZE, s => s.name === element._data.size) || SIZE.MEDIUM;\n setSize(element, px, radius);\n\n if (element._data.filled) {\n setMiddleTop(element, px);\n } else {\n removeMiddleTop(element);\n }\n}\n\nconst SpinnerEl = skate('aui-spinner', {\n template(element) {\n element.innerHTML = '<div class=\"aui-spinner spinner\"><svg focusable=\"false\"><circle></circle></svg></div>';\n refresh(element);\n },\n attached(element) {\n refresh(element);\n },\n attributes: {\n filled: {\n /** @deprecated */\n created: function(element) {\n filledAttributeDeprecatedLogger();\n element._data.filled = true;\n refresh(element);\n },\n /** @deprecated */\n removed: function(element) {\n element._data.filled = false;\n refresh(element);\n }\n },\n size(element, data) {\n element._data.size = validateSize(data.newValue);\n refresh(element);\n },\n },\n prototype: {\n get _data() {\n return this.__data || (this._data = defaults({}, DEFAULTS));\n },\n set _data(data) {\n return this.__data = data;\n },\n /** @deprecated */\n set filled(isFilled) {\n filledPropDeprecatedLogger();\n !!isFilled ? this.setAttribute('filled', '') : this.removeAttribute('filled');\n },\n set size(newSize) {\n const size = validateSize(newSize);\n this.setAttribute('size', size);\n },\n },\n});\n\nexport default SpinnerEl;\nexport {\n SIZE\n};\n","import * as logger from './internal/log';\nimport amdify from './internal/amdify';\nimport skate from './internal/skate';\nimport SpinnerEl, {SIZE} from './spinner';\n\nfunction isBusy (button) {\n return button.hasAttribute('aria-busy') && button.getAttribute('aria-busy') === 'true';\n}\n\nfunction isInputNode (button) {\n return button.nodeName === 'INPUT';\n}\n\nskate('aui-button', {\n type: skate.type.CLASSNAME,\n created: function (element) {\n element._spinner = new SpinnerEl();\n element._spinner.setAttribute('size', SIZE.SMALL.name);\n },\n prototype: {\n /**\n * Adds a spinner to the button and hides the text\n *\n * @returns {HTMLElement}\n */\n busy: function () {\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 this.appendChild(this._spinner);\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 () {\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 this.removeChild(this._spinner);\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 () {\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\namdify('aui/button');\n","import {I18n} from './i18n';\n\nconst CLOSE_BUTTON_CLASS = 'aui-close-button';\nconst CLOSE_BUTTON_CLASS_SELECTOR = `.${CLOSE_BUTTON_CLASS}`;\nconst CLOSE_BUTTON = `<button type=\"button\" class=\"${CLOSE_BUTTON_CLASS}\" aria-label=\"${I18n.getText('aui.words.close')}\">`;\n\nexport {\n CLOSE_BUTTON,\n CLOSE_BUTTON_CLASS,\n CLOSE_BUTTON_CLASS_SELECTOR\n};\n","import $ from './jquery';\nimport amdify from './internal/amdify';\nimport globalize from './internal/globalize';\nimport layerWidget from './layer';\nimport widget from './internal/widget';\nimport keyCode from './key-code';\nimport { CLOSE_BUTTON, CLOSE_BUTTON_CLASS, CLOSE_BUTTON_CLASS_SELECTOR } from './close-button';\nimport * as deprecate from './internal/deprecation';\n\nconst defaults = {\n 'aui-focus': 'false', // do not focus by default as it's overridden below\n 'aui-blanketed': 'true'\n};\n\nfunction applyDefaults($el) {\n $.each(defaults, function (key, value) {\n const dataKey = 'data-' + key;\n if (!$el[0].hasAttribute(dataKey)) {\n $el.attr(dataKey, value);\n }\n });\n}\n\n/**\n * Gets keyboard-focusable elements within a specified element\n * https://zellwk.com/blog/keyboard-focusable-elements/\n * @param {HTMLElement} [element=document] element\n * @returns {Array}\n */\nfunction getKeyboardFocusableElements(element) {\n const focusableSelector = 'a[href], button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])';\n const elementList = [...element.querySelectorAll(focusableSelector)];\n\n return elementList.filter(el => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden'));\n}\n\nfunction handleInitialFocus(el) {\n\n // prevent inability to focus the close button.\n const closeButton = el.querySelector(CLOSE_BUTTON_CLASS_SELECTOR)\n\n if (closeButton) {\n const lazyDeprecate = deprecate.getMessageLogger(`Dialog2 [${CLOSE_BUTTON_CLASS_SELECTOR}]`, {\n removeInVersion: '10.0.0',\n sinceVersion: '9.6.0',\n extraInfo: 'Replace it with another actionable element inside your Dialog which will trigger closing of the modal.',\n deprecationType: 'MARKUP'\n });\n lazyDeprecate();\n closeButton.setAttribute('tabindex', '0');\n }\n\n el.setAttribute('tabindex', '-1');\n\n // Print deprecation note for old custom focus selection if found\n const deprecatedFocusSelector = el.hasAttribute('data-aui-focus-selector');\n if (deprecatedFocusSelector) {\n const lazyDeprecate = deprecate.getMessageLogger('Dialog2 [data-aui-focus-selector] attribute', {\n removeInVersion: '10.0.0',\n alternativeName: 'initialisation on DOM insertion',\n sinceVersion: '9.6.0',\n extraInfo: 'Replace [data-aui-focus-selector] attribute with HTML [autofocus] attribute',\n deprecationType: 'ATTRIBUTE'\n });\n lazyDeprecate();\n }\n\n // Focus custom element user marked by autofocus if found\n const autofocusEl = el.querySelector('[autofocus]');\n if (autofocusEl) {\n // Set timeout and blur are needed to avoid Chrome complaining about focus already set on an element\n // Also helps to ensure focus will 100% work in every environment\n document.activeElement.blur();\n setTimeout(() => autofocusEl.focus(), 0);\n return;\n }\n\n // Deprecated focus selection, if autofocus not found\n if (deprecatedFocusSelector) {\n const elementToFocus = el.querySelector(deprecatedFocusSelector);\n if (elementToFocus) {// Set timeout and blur are needed to avoid Chrome complaining about focus already set on an element\n // Also helps to ensure focus will 100% work in every environment\n elementToFocus.blur();\n setTimeout(() => elementToFocus.focus(), 0);\n return\n }\n }\n\n // If not custom focus target, focus first focusable element if possible\n const focusableElementList = getKeyboardFocusableElements(el);\n if (focusableElementList.length) {\n let focusableElement = focusableElementList.shift();\n\n // if the first focusable element is Dialog's close button\n // then take another one from the list\n if (focusableElement.classList.contains(CLOSE_BUTTON_CLASS)) {\n focusableElement = focusableElementList.shift();\n }\n\n if (focusableElement) {\n // Set timeout and blur are needed to avoid Chrome complaining about focus already set on an element\n // Also helps to ensure focus will 100% work in every environment\n focusableElement.blur();\n setTimeout(() => focusableElement.focus(), 0);\n }\n\n return;\n }\n\n // If no focusable elements found, put focus on dialog container itself\n el.focus();\n}\n\nfunction Dialog2(selector) {\n this._handlers = new WeakMap();\n if (selector) {\n this.$el = $(selector);\n } else {\n this.$el = $(`\n <section role=\"dialog\" aria-modal=\"true\" class=\"aui-layer aui-dialog2 aui-dialog2-medium\">\n <header class=\"aui-dialog2-header\">\n <h2 class=\"aui-dialog2-header-main\"></h2>\n ${CLOSE_BUTTON}\n </button>\n </header>\n <div class=\"aui-dialog2-content\"></div>\n <footer class=\"aui-dialog2-footer\"></footer>\n </section>`);\n }\n applyDefaults(this.$el);\n}\n\n\nDialog2.prototype.on = function (event, fn) {\n const $el = this.$el;\n if (!this._handlers.get(fn)) {\n const handler = function(e) {\n if (e.target === $el.get(0)) {\n fn.apply(this, arguments);\n }\n };\n layerWidget($el).on(event, handler);\n this._handlers.set(fn, handler);\n }\n return this;\n};\n\nDialog2.prototype.off = function (event, fn) {\n const $el = this.$el;\n const handler = this._handlers.get(fn);\n if (handler) {\n layerWidget($el).off(event, handler);\n this._handlers.delete(fn);\n }\n return this;\n};\n\nDialog2.prototype.show = function () {\n layerWidget(this.$el).show();\n return this;\n};\n\nDialog2.prototype.hide = function () {\n layerWidget(this.$el).hide();\n return this;\n};\n\nDialog2.prototype.remove = function () {\n layerWidget(this.$el).remove();\n return this;\n};\n\nDialog2.prototype.isVisible = function () {\n return layerWidget(this.$el).isVisible();\n};\n\nvar dialog2Widget = widget('dialog2', Dialog2);\nvar dialog2GlobalHandlers = new Set();\n\ndialog2Widget.on = function (eventName, fn) {\n if (!dialog2GlobalHandlers.has(fn)) {\n layerWidget.on(eventName, '.aui-dialog2', fn);\n dialog2GlobalHandlers.add(fn);\n }\n return this;\n};\n\ndialog2Widget.off = function (eventName, fn) {\n if (dialog2GlobalHandlers.has(fn)) {\n layerWidget.off(eventName, '.aui-dialog2', fn);\n dialog2GlobalHandlers.delete(fn);\n }\n return this;\n};\n\n/* Live events */\n\n$(document).on('click keydown', `.aui-dialog2-header ${CLOSE_BUTTON_CLASS_SELECTOR}`, function(e) {\n const shouldHandle = e.type === 'click' || e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE;\n if (shouldHandle) {\n e.preventDefault();\n dialog2Widget($(e.target).closest('.aui-dialog2')).hide();\n }\n});\n\ndialog2Widget.on('show', function (e, $el) {\n handleInitialFocus($el[0]);\n});\n\ndialog2Widget.on('hide', function (e,$el) {\n const layer = layerWidget($el);\n\n if ($el.data('aui-remove-on-hide')) {\n layer.remove();\n }\n});\n\namdify('aui/dialog2', dialog2Widget);\nglobalize('dialog2', dialog2Widget);\nexport default dialog2Widget;\n","\nvar ua = navigator.userAgent.toLowerCase();\nvar isIE = /msie/.test(ua);\nvar isWinXP = /windows nt 5.1/.test(ua);\nvar isWinVista = /windows nt 6.0/.test(ua);\nvar isWin7 = /windows nt 6.1/.test(ua);\nvar isMacOSX = (/mac os x/.test(ua));\nvar doesSupportHtml5DateInput;\nvar doesSupportFocusWithin;\n\n/**\n * Layered elements can get obscured by <object>, <embed>, <select> or sometimes even <iframe>\n * on older versions of Windows + Internet Explorer.\n * From manual testing, all IE versions on Windows 7 appear to have the bug,\n * but no IE versions on Windows 8 have it.\n */\nexport function needsLayeringShim () {\n return isIE && (isWinXP || isWinVista || isWin7);\n}\n\nexport function supportsVoiceOver () {\n return isMacOSX;\n}\n\nexport function supportsDateField () {\n if (typeof doesSupportHtml5DateInput === 'undefined') {\n var el = document.createElement('input');\n el.setAttribute('type', 'date');\n doesSupportHtml5DateInput = el.type === 'date';\n }\n return doesSupportHtml5DateInput;\n}\n\nexport function supportsFocusWithin () {\n if (typeof doesSupportFocusWithin === 'undefined') {\n try {\n document.querySelector(':focus-within');\n doesSupportFocusWithin = true;\n } catch (e) {\n doesSupportFocusWithin = false;\n }\n }\n return doesSupportFocusWithin;\n}\n","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { createPopper } from '@popperjs/core';\n\nconst ATTR_ALIGNMENT = 'alignment';\nconst DEFAULT_ATTACHMENT = 'right middle';\nexport const ATTR_CONTAINER = 'alignment-container';\nconst CLASS_PREFIX_SIDE = 'aui-alignment-side-';\nconst CLASS_PREFIX_SNAP = 'aui-alignment-snap-';\nexport const GPU_ACCELERATION_FLAG = 'aui-alignment-use-gpu';\n\n/**\n * The \"side\" and \"snap\" that an element should use when aligning, where:\n * - \"side\" is the edge of the **target** that the aligned element should touch, and\n * - \"snap\" is the effective position that both the target and aligned element should share.\n * @enum {String}\n * @name AlignmentType\n */\nconst ALIGNMENT_MAP = {\n 'top left': 'top-start',\n 'top center': 'top',\n 'top right': 'top-end',\n 'right top': 'right-start',\n 'right middle': 'right',\n 'right bottom': 'right-end',\n 'bottom right': 'bottom-end',\n 'bottom center': 'bottom',\n 'bottom left': 'bottom-start',\n 'left bottom': 'left-end',\n 'left middle': 'left',\n 'left top': 'left-start',\n};\n\nfunction getAttribute(element, name) {\n return element.getAttribute(name) || element.getAttribute('data-aui-' + name);\n}\n\nfunction getAlignmentAttribute(element) {\n return getAttribute(element, ATTR_ALIGNMENT) || DEFAULT_ATTACHMENT;\n}\n\nfunction getPlacement(element) {\n const attr = getAlignmentAttribute(element);\n return ALIGNMENT_MAP[attr] || 'right';\n}\n\nfunction getAlignment(element) {\n let [side, snap] = (getAlignmentAttribute(element)).split(' ');\n return {\n side,\n snap\n };\n}\n\nfunction addAlignmentClasses(element, side, snap) {\n const sideClass = CLASS_PREFIX_SIDE + side;\n const snapClass = CLASS_PREFIX_SNAP + snap;\n\n if (!element.classList.contains(sideClass)) {\n element.classList.add(sideClass);\n }\n\n if (!element.classList.contains(snapClass)) {\n element.classList.add(snapClass);\n }\n}\n\nfunction getContainer (element) {\n let container = getAttribute(element, ATTR_CONTAINER) || window;\n\n if (typeof container === 'string') {\n container = document.querySelector(container);\n }\n\n return container;\n}\n\nfunction calculateBestAlignmentSnap (target) {\n let container = getContainer(target);\n let snap = 'left';\n\n if (!container || container === window || container === document) {\n container = document.documentElement;\n }\n\n if (container && container.nodeType && container.nodeType === Node.ELEMENT_NODE) {\n let containerBounds = container.getBoundingClientRect();\n let targetBounds = target.getBoundingClientRect();\n\n if ((targetBounds.left - containerBounds.left) > (containerBounds.right - containerBounds.left) / 2) {\n snap = 'right';\n }\n }\n\n return snap;\n}\n\nfunction calculatePlacement (element, target) {\n const alignment = getAlignment(element);\n\n let placement;\n\n if (!alignment.snap || alignment.snap === 'auto') {\n\n alignment.snap = calculateBestAlignmentSnap(target);\n\n if (alignment.side === 'submenu') {\n placement = ALIGNMENT_MAP[`${alignment.snap === 'right' ? 'left' : 'right'} top`];\n } else {\n placement = ALIGNMENT_MAP[`${alignment.side} ${alignment.snap}`];\n }\n } else {\n placement = getPlacement(element);\n }\n\n return placement;\n}\n/*\n this determines allowed flip placement e.g.\n for top it will try to position itself at the top,\n if there is no space try to flip to bottom\n*/\nconst allowedPlacement = {\n auto: [],\n top: ['top', 'bottom'],\n right: ['right', 'left'],\n bottom: ['bottom', 'top'],\n left: ['left', 'right'],\n};\n\n/**\n * Visually positions an element adjacent to another one in the DOM.\n * Can also be told to keep the element aligned\n * when the user resizes the browser or scrolls around the page.\n * @constructor\n * @constructs Alignment\n * @param {HTMLElement} element - the element that will be repositioned. Should have an \"alignment\" attribute\n * with a valid {@link AlignmentType} value.\n * @param {HTMLElement} target - the point in the DOM to visually position the {@param element} adjacent to.\n * @param {Object} [options]\n * @param {Array.<Number>} [options.offset] - array containing [skidding, distance]. if present, will cause\n * the element to offset from the trigger; Defaults to [0,0] (no offset)\n * skidding, displaces the popper along the reference element.\n * distance, displaces the popper away from, or toward, the reference element in the direction of its placement\n * @param {boolean} [options.preventOverflow=true] - if true, will cause element to not overflow viewable area\n * @param {boolean} [options.flip=true] - if true, will cause the element to attempt to reposition itself within\n * a viewable area as its {@param target} disappears from view.\n * @param {HTMLElement|'viewport'|'window'|'scrollContainer'} [options.flipContainer='viewport'] - the container\n * in which the element should attempt to stay within the viewable area of.\n * Used in conjunction with {@param options.flip}.\n * @param {HTMLElement|'viewport'|'window'|'scrollContainer'} [options.overflowContainer='window'] - the container\n * in which the element should attempt to stay within the viewable area of.\n * Used in conjunction with {@param options.preventOverflow}.\n * @param {Function} [options.onCreate] - called when the element is first positioned upon creation of the Alignment.\n * @param {Function} [options.onUpdate] - called whenever the element is positioned, except upon creation.\n * @param {Function} [options.onEvents]\n * @param {Function} [options.onEvents.enabled] - called when the scroll and resize events are added.\n * @param {Function} [options.onEvents.disabled] - called when the scroll and resize events are removed.\n * @param {boolean} [options.eventsEnabled=false] - if true, will cause the element to attempt to reposition itself on\n * scroll and resize. Equivalent of calling .enable() after init but saves one update cycle.\n */\nfunction Alignment(element, target, options = {}) {\n const alignment = getAlignment(element)\n const placement = calculatePlacement(element, target);\n const allowedAutoPlacements = allowedPlacement[placement.split('-')[0]];\n\n const frame = target.ownerDocument.defaultView.frameElement;\n\n this._eventListenersEnabled = options.hasOwnProperty('eventsEnabled') ? options.eventsEnabled : false;\n this._triggerOnEvents = false;\n\n const modifiers = [\n {\n name: 'flip',\n enabled: options.hasOwnProperty('flip') ? options.flip : true,\n options: {\n allowedAutoPlacements,\n boundary: frame || (options.hasOwnProperty('flipContainer') ? options.flipContainer : 'clippingParents'), // clippingParents by default\n }\n },\n {\n name: 'preventOverflow',\n enabled: options.hasOwnProperty('preventOverflow') ? options.preventOverflow : true,\n options: {\n padding: 0, // as of Popper 2.0 it's 0 by default, but explicitly specify in case of defaults change.\n escapeWithReference: false,\n rootBoundary: frame || (options.hasOwnProperty('overflowContainer') ? options.overflowContainer : 'document'), //viewport by default\n }\n },\n {\n name: 'offset',\n enabled: options.hasOwnProperty('offset') && !!options.offset,\n options: {\n offset: options.offset,\n },\n },\n {\n name: 'hide',\n enabled: false\n },\n {\n name: 'computeStyles',\n options: {\n gpuAcceleration: document.body.classList.contains(GPU_ACCELERATION_FLAG),\n // adaptive: false, // true by default, breaks CSS transitions (do we need it?)\n }\n },\n {\n name: 'eventListeners',\n enabled: this._eventListenersEnabled\n },\n { // left for backwards compatibility\n name: 'x-placement',\n enabled: true,\n phase: 'write',\n requires: ['computeStyles'],\n fn: ({state}) => {\n if (state.elements.popper) {\n // popper-specific attributes are NOT contracted, public API of AUI layered element\n state.elements.popper.setAttribute('x-placement', state.placement)\n }\n }\n },\n {\n name: 'onUpdate',\n enabled: options.hasOwnProperty('onUpdate'),\n phase: 'afterWrite',\n effect: ({state, name}) => {\n // enable it after initial cycle\n state.modifiersData[`${name}#persistent`] = {\n enabled: true,\n fn: options.onUpdate\n };\n },\n\n fn: ({state, name}) => {\n const o = state.modifiersData[`${name}#persistent`];\n\n if (o.enabled) {\n o.fn();\n }\n\n return state;\n }\n },\n {\n name: 'onEvents',\n enabled: options.hasOwnProperty('onEvents'),\n phase: 'afterWrite',\n effect: ({state, name}) => {\n // enable it after initial cycle\n state.modifiersData[`${name}#persistent`] = {\n fn: options.onEvents\n };\n },\n fn: ({state, name}) => {\n const o = state.modifiersData[`${name}#persistent`];\n\n if (this._triggerOnEvents) {\n if (this._eventListenersEnabled) {\n o.fn.enabled && o.fn.enabled();\n } else {\n o.fn.disabled && o.fn.disabled();\n }\n this._triggerOnEvents = false;\n }\n return state;\n }\n }\n ];\n\n // IE/Edge may throw a \"Permission denied\" error when strict-comparing two documents\n // eslint-disable-next-line eqeqeq\n if (frame && (target.ownerDocument != element.ownerDocument)) {\n modifiers.push({\n name: 'iframeOffset',\n enabled: true,\n fn(data) {\n const rect = frame.getBoundingClientRect();\n const style = window.getComputedStyle(frame);\n const sum = (a, b) => a + b\n const getTotalValue = values => values.map(parseFloat).filter(Boolean).reduce(sum, 0);\n\n const top = getTotalValue([\n rect.top,\n style.paddingTop,\n style.borderTop\n ]);\n\n const left = getTotalValue([\n rect.left,\n style.paddingLeft,\n style.borderLeft\n ]);\n\n data.offsets.reference.left += left;\n data.offsets.reference.top += top;\n\n data.offsets.popper.left += left;\n data.offsets.popper.top += top;\n\n return data\n }\n });\n }\n\n const popperConfig = {\n placement, //controlled by the flip modifier\n strategy: options.hasOwnProperty('positionFixed') && !options.positionFixed ? 'absolute' : 'fixed',\n modifiers,\n onFirstUpdate: options.onCreate\n };\n\n this.popper = createPopper(target, element, popperConfig);\n\n addAlignmentClasses(element, alignment.side, alignment.snap);\n}\n\nAlignment.prototype = {\n\n destroy() {\n this.popper.destroy();\n return this;\n },\n\n /**\n * In extreme situations may cause element to be inaccessible. To be considered as 9.1.1 bugfix / 9.2.0 improvement?\n *\n * Changes what the aligned element is trying to align itself with.\n * Will call {@link #scheduleUpdate} as needed to ensure the element will be aligned\n * with whatever the new target is.\n * @param {HTMLElement} newTarget - the new target DOM element to align the element with.\n * @returns {Alignment}\n */\n changeTarget(newTarget) {\n const referenceEl = newTarget.jquery ? newTarget[0] : newTarget;\n if (referenceEl && referenceEl !== this.popper.state.elements.reference) {\n this.popper.state.elements.reference = referenceEl;\n this.popper.setOptions({}); // .options() re-instanciate all modifiers and updates the view\n }\n return this;\n },\n\n /**\n * The position of the element will be updated on the next execution stack.\n * Triggering a render this way will always be asynchronous.\n * @returns {Alignment}\n */\n scheduleUpdate() {\n this.popper.update();\n return this;\n },\n\n /**\n * Causes the position of the element to auto-update\n * when the browser window resizes or scroll parent is scrolled.\n * @returns {Alignment}\n */\n enable() {\n this._eventListenersEnabled = true;\n this._triggerOnEvents = true;\n\n this.popper.setOptions({}); // setOptions will re-instanciate all modifiers.\n return this;\n },\n\n /**\n * Prevents the position of the element from auto-updating\n * when the browser window resizes or scroll parent is scrolled.\n * @returns {Alignment}\n */\n disable() {\n this._eventListenersEnabled = false;\n this._triggerOnEvents = true;\n\n this.popper.setOptions({}); // setOptions will re-instanciate all modifiers.\n return this;\n },\n};\n\nexport default Alignment;\n","import $ from '../jquery';\n\nconst DELAY = 12;\n\n// an element can be detached and then attached multiple times\n// in some situations -- e.g., when re-appending an element to\n// another place in the DOM.\nfunction ifGone (element) {\n let deferred = new $.Deferred();\n if (element) {\n setTimeout(() => {\n if (!element.parentElement) {\n deferred.resolve();\n }\n }, DELAY);\n } else {\n deferred.reject();\n }\n return deferred.promise();\n}\n\nexport {\n DELAY,\n ifGone,\n}\n","import globalize from './internal/globalize';\n\nvar uniqueID;\nvar uniqueIDstring;\nvar uniqueIDcounter = 0;\n\n/**\n * Generate a unique ID string, checking the ID is not present in the DOM before\n * returning. Note uniqueID, uniqueIDstring, uniqueIDcounter = 0; set at top of\n * file.\n *\n * @param {String} [prefix] String to prepend to ID instead of default AUI prefix.\n *\n * @returns {String}\n */\nfunction generateUniqueId (prefix) {\n uniqueID = uniqueIDcounter++ + '';\n uniqueIDstring = prefix ? prefix + uniqueID : 'aui-uid-' + uniqueID;\n\n if (!document.getElementById(uniqueIDstring)) {\n return uniqueIDstring;\n } else {\n uniqueIDstring = uniqueIDstring + '-' + new Date().getTime();\n\n if (!document.getElementById(uniqueIDstring)) {\n return uniqueIDstring;\n } else {\n throw new Error('Timestamped fallback ID \"' + uniqueIDstring + '\" exists.');\n }\n }\n}\n\nglobalize('id', generateUniqueId);\n\nexport default generateUniqueId;\n","import { I18n } from './i18n';\nimport './spinner';\nimport $ from './jquery';\nimport template from 'skatejs-template-html';\nimport * as deprecate from './internal/deprecation';\nimport * as logger from './internal/log';\nimport { debounce } from 'underscore';\nimport { supportsVoiceOver } from './internal/browser';\nimport Alignment from './internal/alignment';\nimport CustomEvent from './polyfills/custom-event';\nimport keyCode from './key-code';\nimport layer from './layer';\nimport state from './internal/state';\nimport skate from './internal/skate';\nimport escapeHtml from './escape-html';\nimport {ifGone} from './internal/elements';\nimport {doIfTrigger, setTrigger} from './trigger';\nimport generateUniqueId from './unique-id';\n\nfunction isHidden(el) {\n return el.hasAttribute('hidden') || el.classList.contains('hidden');\n}\n\nfunction setDropdownTriggerActiveState(trigger, isActive) {\n trigger.setAttribute('aria-expanded', !!isActive);\n trigger.classList[isActive ? 'add' : 'remove']('active', 'aui-dropdown2-active');\n}\n\n/**\n * Focus the appropriate thing when a dropdown is shown.\n * The element focussed will vary depending on the type of dropdown and\n * the input modality.\n *\n * @param {HTMLElement} dropdown - the dropdown being shown\n * @param {Event} [e] - the event that triggered the dropdown being shown\n */\nfunction handleFocus(dropdown, e = {}) {\n if (e && e.type && e.type.indexOf('mouse') === -1) {\n const isKeyDownEvent = e.type.indexOf('key') > -1;\n if (dropdown.isSubmenu) {\n dropdown.focusItem(0);\n } else if (isKeyDownEvent){\n const isUpArrow = e.keyCode === keyCode.UP;\n // set focus to last item in the menu to navigate bottom -> up\n if (isUpArrow) {\n const visibleItems = getVisibleDropdownItems(dropdown);\n if (visibleItems && visibleItems.length) {\n dropdown.focusItem(visibleItems.length - 1);\n }\n } else {\n // if enter/space/downArrow than focus goes to the first item\n dropdown.focusItem(0);\n }\n } else {\n dropdown.focus();\n }\n }\n}\n\n// LOADING STATES\nvar UNLOADED = 'unloaded';\nvar LOADING = 'loading';\nvar ERROR = 'error';\nvar SUCCESS = 'success';\n\n\n// ASYNC DROPDOWN FUNCTIONS\n\nfunction makeAsyncDropdownContents (json) {\n var dropdownContents = json.map(function makeSection (sectionData) {\n var sectionItemsHtml = sectionData.items.map(function makeSectionItem (itemData) {\n function makeBooleanAttribute (attr) {\n return itemData[attr] ? `${attr} =\"true\"` : '';\n }\n\n function makeAttribute (attr) {\n return itemData[attr] ? `${attr}=\"${itemData[attr]}\"` : '';\n }\n\n var tagName = 'aui-item-' + itemData.type;\n var itemHtml = `\n <${tagName} ${makeAttribute('for')} ${makeAttribute('href')} ${makeBooleanAttribute('interactive')}\n ${makeBooleanAttribute('checked')} ${makeBooleanAttribute('disabled')} ${makeBooleanAttribute('hidden')}>\n ${escapeHtml(itemData.content)}\n </${tagName}>`;\n\n return itemHtml;\n }).join('');\n\n var sectionAttributes = sectionData.label ? `label=\"${sectionData.label}\"` : '';\n var sectionHtml = `\n <aui-section ${sectionAttributes}>\n ${sectionItemsHtml}\n </aui-section>`;\n\n return sectionHtml;\n }).join('\\n');\n\n return dropdownContents;\n}\n\nfunction setDropdownContents (dropdown, json) {\n state(dropdown).set('loading-state', SUCCESS);\n dropdown.innerHTML = makeAsyncDropdownContents(json);\n skate.init(dropdown);\n}\n\nfunction setDropdownErrorState (dropdown) {\n state(dropdown).set('loading-state', ERROR);\n state(dropdown).set('hasErrorBeenShown', dropdown.isVisible());\n dropdown.innerHTML = `\n <div class=\"aui-message aui-message-error aui-dropdown-error\">\n <p>${I18n.getText('aui.dropdown.async.error')}</p>\n </div>\n `;\n}\n\nfunction setDropdownLoadingState (dropdown) {\n state(dropdown).set('loading-state', LOADING);\n state(dropdown).set('hasErrorBeenShown', false);\n\n doIfTrigger(dropdown, function (trigger) {\n trigger.setAttribute('aria-busy', 'true');\n });\n\n dropdown.innerHTML = `\n <div class=\"aui-dropdown-loading\">\n <aui-spinner size=\"small\"></aui-spinner> ${I18n.getText('aui.dropdown.async.loading')}\n </div>\n `;\n}\n\nfunction setDropdownLoaded (dropdown) {\n doIfTrigger(dropdown, function (trigger) {\n trigger.setAttribute('aria-busy', 'false');\n });\n}\n\nfunction loadContentsIfAsync (dropdown) {\n if (!dropdown.src || state(dropdown).get('loading-state') === LOADING) {\n return;\n }\n\n setDropdownLoadingState(dropdown);\n\n $.ajax(dropdown.src)\n .done(function (json, status, xhr) {\n var isValidStatus = xhr.status === 200;\n if (isValidStatus) {\n setDropdownContents(dropdown, json);\n } else {\n setDropdownErrorState(dropdown);\n }\n })\n .fail(function () {\n setDropdownErrorState(dropdown);\n })\n .always(function () {\n setDropdownLoaded(dropdown);\n });\n}\n\nfunction loadContentWhenMouseEnterTrigger(dropdown) {\n var isDropdownUnloaded = state(dropdown).get('loading-state') === UNLOADED;\n var hasCurrentErrorBeenShown = state(dropdown).get('hasErrorBeenShown');\n if (isDropdownUnloaded || hasCurrentErrorBeenShown && !dropdown.isVisible()) {\n loadContentsIfAsync(dropdown);\n }\n}\n\nfunction loadContentWhenMenuShown(dropdown) {\n var isDropdownUnloaded = state(dropdown).get('loading-state') === UNLOADED;\n var hasCurrentErrorBeenShown = state(dropdown).get('hasErrorBeenShown');\n if (isDropdownUnloaded || hasCurrentErrorBeenShown) {\n loadContentsIfAsync(dropdown);\n }\n if (state(dropdown).get('loading-state') === ERROR) {\n state(dropdown).set('hasErrorBeenShown', true);\n }\n}\n\n\n// The dropdown's trigger\n// ----------------------\n\nfunction triggerCreated (trigger) {\n let dropdownID = trigger.getAttribute('aria-controls');\n\n if (!dropdownID) {\n dropdownID = trigger.getAttribute('aria-owns');\n\n if (!dropdownID) {\n logger.error('Dropdown triggers need either a \"aria-owns\" or \"aria-controls\" attribute');\n } else {\n trigger.removeAttribute('aria-owns');\n trigger.setAttribute('aria-controls', dropdownID);\n }\n }\n\n trigger.setAttribute('aria-haspopup', true);\n trigger.setAttribute('aria-expanded', false);\n\n const shouldSetHref = trigger.nodeName === 'A' && !trigger.href;\n if (shouldSetHref) {\n trigger.setAttribute('href', `#${dropdownID}`);\n }\n\n function handleIt(e, forceShow = false) {\n if (e.currentTarget !== trigger) {\n return;\n }\n e.preventDefault();\n\n if (!trigger.isEnabled()) {\n return;\n }\n\n const dropdown = document.getElementById(dropdownID);\n if (!dropdown) {\n logger.error('Could not find a dropdown with id \"' + dropdownID + '\" in the DOM.');\n return;\n }\n\n // AUI-4271 - Maintains legacy integration with parent elements.\n const $trigger = $(trigger);\n if ($trigger.parent().hasClass('aui-buttons')) {\n dropdown.classList.add('aui-dropdown2-in-buttons');\n }\n if ($trigger.parents().hasClass('aui-header')) {\n dropdown.classList.add('aui-dropdown2-in-header');\n }\n\n if (forceShow) {\n dropdown.show(e);\n } else {\n dropdown.toggle(e);\n }\n dropdown.isSubmenu = trigger.hasSubmenu();\n\n return dropdown;\n }\n\n function handleMouseEnter(e) {\n if (e.currentTarget !== trigger) {\n return;\n }\n e.preventDefault();\n\n if (!trigger.isEnabled()) {\n return;\n }\n\n const dropdown = document.getElementById(dropdownID);\n if (!dropdown) {\n logger.error('Could not find a dropdown with id \"' + dropdownID + '\" in the DOM.');\n return;\n }\n\n loadContentWhenMouseEnterTrigger(dropdown);\n\n if (trigger.hasSubmenu()) {\n dropdown.show(e);\n dropdown.isSubmenu = trigger.hasSubmenu();\n }\n\n return dropdown;\n }\n\n function handleKeydown(e) {\n if (e.currentTarget !== trigger) {\n return;\n }\n const normalInvoke = (e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE);\n const submenuInvoke = (e.keyCode === keyCode.RIGHT && trigger.hasSubmenu());\n const rootMenuInvoke = ((e.keyCode === keyCode.UP || e.keyCode === keyCode.DOWN) && !trigger.hasSubmenu());\n\n if (normalInvoke) {\n handleIt(e);\n } else if (rootMenuInvoke || submenuInvoke) {\n // this could be the first keyboard event after using an AT shortcut to open the dropdown.\n handleIt(e, document.activeElement === trigger);\n }\n }\n\n $(trigger)\n .on('aui-button-invoke', handleIt)\n .on('click', handleIt)\n .on('keydown', handleKeydown)\n .on('mouseenter', handleMouseEnter);\n}\n\nvar triggerPrototype = {\n disable: function () {\n this.setAttribute('aria-disabled', 'true');\n this.classList.add('disabled', 'aui-dropdown2-disabled');\n },\n\n enable: function () {\n this.setAttribute('aria-disabled', 'false');\n this.classList.remove('disabled', 'aui-dropdown2-disabled');\n },\n\n isEnabled: function () {\n return this.getAttribute('aria-disabled') !== 'true' &&\n this.classList.contains('aui-dropdown2-disabled') === false;\n },\n\n hasSubmenu: function () {\n return this.classList.contains('aui-dropdown2-sub-trigger');\n }\n};\n\n//To remove at a later date. Some dropdown triggers initialise lazily, so we need to listen for mousedown\n//and synchronously init before the click event is fired.\n//TODO: delete in AUI 8.0.0, see AUI-2868\nfunction bindLazyTriggerInitialisation() {\n $(document).on('mousedown', '.aui-dropdown2-trigger', function () {\n var isElementSkated = this.hasAttribute('resolved');\n if (!isElementSkated) {\n skate.init(this);\n var lazyDeprecate = deprecate.getMessageLogger('Dropdown2 lazy initialisation', {\n removeInVersion: '10.0.0',\n alternativeName: 'initialisation on DOM insertion',\n sinceVersion: '5.8.0',\n extraInfo: 'Dropdown2 triggers should have all necessary attributes on DOM insertion',\n deprecationType: 'JS'\n });\n lazyDeprecate();\n }\n });\n}\n\nbindLazyTriggerInitialisation();\n\n// Dropdown trigger groups\n// -----------------------\n\n$(document).on('mouseenter', '.aui-dropdown2-trigger-group a, .aui-dropdown2-trigger-group button', function (e) {\n const $item = $(e.currentTarget);\n\n if ($item.is('.aui-dropdown2-active')) {\n return; // No point doing anything if we're hovering over the already-active item trigger.\n }\n\n if ($item.closest('.aui-dropdown2').length) {\n return; // We don't want to deal with dropdown items, just the potential triggers in the group.\n }\n\n const $triggerGroup = $item.closest('.aui-dropdown2-trigger-group');\n\n const $groupActiveTrigger = $triggerGroup.find('.aui-dropdown2-active');\n if ($groupActiveTrigger.length && $item.is('.aui-dropdown2-trigger')) {\n $groupActiveTrigger.blur(); // Remove focus from the previously opened menu.\n $item.trigger('aui-button-invoke'); // Open this trigger's menu.\n e.preventDefault();\n }\n\n const $groupFocusedTrigger = $triggerGroup.find(':focus');\n if ($groupFocusedTrigger.length && $item.is('.aui-dropdown2-trigger')) {\n $groupFocusedTrigger.blur();\n }\n});\n\n\n// Dropdown items\n// --------------\n\nfunction getDropdownItems (dropdown, filter) {\n return $(dropdown)\n .find([\n // Legacy markup.\n '> ul > li',\n '> .aui-dropdown2-section > ul > li',\n '> .aui-dropdown2-section > div[role=\"group\"] > ul > li',\n '> div > .aui-dropdown2-section > div[role=\"group\"] > ul > li',\n // Web component.\n 'aui-item-link',\n 'aui-item-checkbox',\n 'aui-item-radio'\n ].join(', '))\n .filter(filter)\n .children('a, button, [role=\"checkbox\"], [role=\"menuitemcheckbox\"], [role=\"radio\"], [role=\"menuitemradio\"]');\n}\n\nfunction getAllDropdownItems (dropdown) {\n return getDropdownItems(dropdown, () => true);\n}\n\nfunction getVisibleDropdownItems (dropdown) {\n return getDropdownItems(dropdown, (i, el) => !isHidden(el));\n}\n\nfunction amendDropdownItem (item) {\n item.setAttribute('tabindex', '-1');\n\n /**\n * Honouring the documentation.\n * @link https://aui.atlassian.com/latest/docs/dropdown2.html\n */\n if (item.classList.contains('aui-dropdown2-disabled') || isHidden(item.parentElement)) {\n item.setAttribute('aria-disabled', 'true');\n }\n}\n\nfunction amendDropdownContent (dropdown) {\n // Add assistive semantics to each dropdown item\n getAllDropdownItems(dropdown).each((i, el) => amendDropdownItem(el));\n}\n\n/**\n * Honours behaviour for code written using only the legacy class names.\n * To maintain old behaviour (i.e., remove the 'hidden' class and the item will become un-hidden)\n * whilst allowing our code to only depend on the new classes, we need to\n * keep the state of the DOM in sync with legacy classes.\n *\n * Calling this function will add the new namespaced classes to elements with legacy names.\n */\nfunction migrateAndSyncLegacyClassNames (dropdown) {\n var $dropdown = $(dropdown);\n\n // Migrate away from legacy, unprefixed class names\n ['disabled', 'interactive', 'active', 'checked'].forEach(type => {\n $dropdown.find(`.${type}`).addClass(`aui-dropdown2-${type}`);\n });\n}\n\n\n// The Dropdown itself\n// -------------------\n\nfunction destroyAlignment(dropdown) {\n if (dropdown._auiAlignment) {\n dropdown._auiAlignment.destroy();\n delete dropdown._auiAlignment;\n }\n}\n\nfunction setLayerAlignment(dropdown, trigger) {\n var hasSubmenu = trigger && trigger.hasSubmenu && trigger.hasSubmenu();\n var hasSubmenuAlignment = dropdown.getAttribute('data-aui-alignment') === 'submenu auto';\n\n if (!hasSubmenu && hasSubmenuAlignment) {\n restorePreviousAlignment(dropdown);\n }\n var hasAnyAlignment = dropdown.hasAttribute('data-aui-alignment');\n\n if (hasSubmenu && !hasSubmenuAlignment) {\n saveCurrentAlignment(dropdown);\n dropdown.setAttribute('data-aui-alignment', 'submenu auto');\n dropdown.setAttribute('data-aui-alignment-static', true);\n } else if (!hasAnyAlignment) {\n dropdown.setAttribute('data-aui-alignment', 'bottom auto');\n dropdown.setAttribute('data-aui-alignment-static', true);\n }\n\n destroyAlignment(dropdown);\n dropdown._auiAlignment = new Alignment(dropdown, trigger, {\n flip: false,\n positionFixed: false,\n preventOverflow: false,\n // space between a dropdown trigger and the dropdown itself, based on @aui-dropdown-trigger-offset\n // only added for dropdowns which are not submenus\n offset: (trigger.hasSubmenu && trigger.hasSubmenu()) ? [-3, 0] : [0, 3]\n });\n\n dropdown._auiAlignment.enable();\n}\n\nfunction saveCurrentAlignment(dropdown) {\n var $dropdown = $(dropdown);\n if (dropdown.hasAttribute('data-aui-alignment')) {\n $dropdown.data('previous-data-aui-alignment', dropdown.getAttribute('data-aui-alignment'));\n }\n $dropdown.data('had-data-aui-alignment-static', dropdown.hasAttribute('data-aui-alignment-static'));\n}\n\nfunction restorePreviousAlignment(dropdown) {\n var $dropdown = $(dropdown);\n\n var previousAlignment = $dropdown.data('previous-data-aui-alignment');\n if (previousAlignment) {\n dropdown.setAttribute('data-aui-alignment', previousAlignment);\n } else {\n dropdown.removeAttribute('data-aui-alignment');\n }\n $dropdown.removeData('previous-data-aui-alignment');\n\n if (!$dropdown.data('had-data-aui-alignment-static')) {\n dropdown.removeAttribute('data-aui-alignment-static');\n }\n $dropdown.removeData('had-data-aui-alignment-static');\n}\n\nfunction getDropdownHideLocation(dropdown, trigger) {\n var possibleHome = trigger.getAttribute('data-dropdown2-hide-location');\n return document.getElementById(possibleHome) || dropdown.parentNode;\n}\n\nvar keyboardClose = false;\nfunction keyboardCloseDetected () {\n keyboardClose = true;\n}\n\nfunction wasProbablyClosedViaKeyboard () {\n var result = (keyboardClose === true);\n keyboardClose = false;\n return result;\n}\n\nfunction bindDropdownBehaviourToLayer(dropdown) {\n layer(dropdown);\n\n\n dropdown.addEventListener('aui-layer-show', function (e) {\n if (dropdown !== e.target) {\n return;\n }\n\n // fix legacy markup patterns\n migrateAndSyncLegacyClassNames(dropdown);\n amendDropdownContent(dropdown);\n\n // indicate the dropdown is open\n $(dropdown).trigger('aui-dropdown2-show');\n\n doIfTrigger(dropdown, function (trigger) {\n setDropdownTriggerActiveState(trigger, true);\n dropdown._returnTo = getDropdownHideLocation(dropdown, trigger);\n });\n });\n\n dropdown.addEventListener('aui-layer-hide', function (e) {\n if (dropdown !== e.target) {\n return;\n }\n\n $(dropdown).trigger('aui-dropdown2-hide');\n\n if (dropdown._auiAlignment) {\n dropdown._auiAlignment.destroy();\n }\n\n if (dropdown._returnTo) {\n if (dropdown.parentNode && dropdown.parentNode !== dropdown._returnTo) {\n dropdown._returnTo.appendChild(dropdown);\n }\n }\n\n dropdown.classList.remove('aui-dropdown2-in-header', 'aui-dropdown2-in-buttons');\n getAllDropdownItems(dropdown).removeClass('active aui-dropdown2-active');\n\n doIfTrigger(dropdown, function (trigger) {\n setDropdownTriggerActiveState(trigger, false);\n\n // Focus the submenu trigger when the submenu is closed\n if (wasProbablyClosedViaKeyboard()) {\n trigger.focus();\n }\n });\n\n // Gets set by submenu trigger invocation. Bad coupling point?\n delete dropdown.isSubmenu;\n });\n}\n\nfunction bindItemInteractionBehaviourToDropdown (dropdown) {\n var $dropdown = $(dropdown);\n\n function belongsToDropdown(item) {\n const $dd = $(item).closest('.aui-dropdown2, aui-dropdown-menu');\n return $dd.get(0) === dropdown;\n }\n\n $dropdown.on('keydown', function (e) {\n if (!belongsToDropdown(e.target)) {\n return;\n }\n if (e.keyCode === keyCode.DOWN) {\n dropdown.focusNext();\n e.preventDefault();\n } else if (e.keyCode === keyCode.UP) {\n dropdown.focusPrevious();\n e.preventDefault();\n } else if (e.keyCode === keyCode.LEFT) {\n if (dropdown.isSubmenu) {\n keyboardCloseDetected();\n dropdown.hide();\n e.preventDefault();\n }\n } else if (e.keyCode === keyCode.ESCAPE) {\n // The closing will be handled by the LayerManager!\n keyboardCloseDetected();\n } else if (e.keyCode === keyCode.TAB) {\n keyboardCloseDetected();\n // On TAB we should close the menu and all submenus.\n dropdown.hideAll(false);\n }\n });\n\n const hideIfNotSubmenuAndNotInteractive = function(e) {\n const item = e.currentTarget;\n\n if (item.getAttribute('aria-disabled') === 'true') {\n e.preventDefault();\n return;\n }\n\n const isSubmenuTrigger = e.currentTarget.hasSubmenu && e.currentTarget.hasSubmenu();\n if (!isSubmenuTrigger && !item.classList.contains('aui-dropdown2-interactive')) {\n dropdown.hideAll(true);\n }\n }\n\n $dropdown.on('click keydown', 'a, button, [role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"checkbox\"], [role=\"menuitemradio\"], [role=\"radio\"]', function (e) {\n if (!belongsToDropdown(e.target)) {\n return;\n }\n const item = e.currentTarget;\n const eventKeyCode = e.keyCode;\n const isEnter = eventKeyCode === keyCode.ENTER;\n const isSpace = eventKeyCode === keyCode.SPACE;\n\n // AUI-4283: Accessibility - need to ignore enter on links/buttons so\n // that the dropdown remains visible to allow the click event to eventually fire.\n const itemIgnoresEnter = isEnter && $(item).is('a[href], button');\n\n if (!itemIgnoresEnter && (e.type === 'click' || isEnter || isSpace)) {\n hideIfNotSubmenuAndNotInteractive(e);\n }\n });\n\n // close all submenus when the mouse moves over items other than its trigger\n $dropdown.on('mouseenter', 'a, button, [role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"checkbox\"], [role=\"menuitemradio\"], [role=\"radio\"]', function (e) {\n if (!belongsToDropdown(e.target)) {\n return;\n }\n\n // Focus the current element to allow Screen Reader to announce a focused menuitem.\n e.currentTarget.focus();\n\n // We should close all submenus above which are not related to the focused trigger.\n // For example if we hover over the trigger for submenu for this trigger be shown, when we move\n // focus/mouse on the another trigger the previous will be closed.\n let layerAbove = $(layer(dropdown).above()).get(0);\n while (layerAbove && layerAbove.isDropdown && layerAbove !== dropdown) {\n const layerId = layerAbove.getAttribute('id');\n const targetDropdownId = e.target.getAttribute('aria-controls');\n const nextLayer = layer(layerAbove).above();\n\n if (targetDropdownId !== layerId) {\n // We should .hide() only after we get nextLayer,\n // otherwise we will get the first visible layer.\n layer(layerAbove).hide();\n }\n\n layerAbove = $(nextLayer).get(0);\n }\n });\n}\n\n$(window).on('resize', debounce(function () {\n $('.aui-dropdown2').each(function (index, dropdown) {\n skate.init(dropdown);\n if (dropdown.isVisible()){\n dropdown.hide();\n }\n });\n}, 1000, true));\n\n// Dropdowns\n// ---------\n\nfunction dropdownCreated (dropdown) {\n dropdown.classList.add('aui-dropdown2');\n dropdown.setAttribute('tabindex','-1');\n\n if (dropdown.hasAttribute('data-container')) {\n dropdown.setAttribute('data-aui-alignment-container', dropdown.getAttribute('data-container'));\n dropdown.removeAttribute('data-container');\n }\n\n bindDropdownBehaviourToLayer(dropdown);\n bindItemInteractionBehaviourToDropdown(dropdown);\n\n $(dropdown).on('click keydown', '.aui-dropdown2-checkbox', function (e) {\n if (e.type === 'click' || e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE) {\n let checkbox = this;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (checkbox.isInteractive()) {\n e.preventDefault();\n }\n if (checkbox.isEnabled()) {\n // toggle the checked state\n if (checkbox.isChecked()) {\n checkbox.uncheck();\n } else {\n checkbox.check();\n }\n }\n }\n });\n\n $(dropdown).on('click keydown', '.aui-dropdown2-radio', function (e) {\n if (e.type === 'click' || e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE) {\n let radio = this;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (radio.isInteractive()) {\n e.preventDefault();\n }\n\n if (this.isEnabled() && this.isChecked() === false) {\n // toggle the checked state\n $(radio).closest('ul,[role=group]').find('.aui-dropdown2-checked').not(this).each(function () {\n this.uncheck();\n });\n radio.check();\n }\n }\n });\n}\n\n/**\n * Given a dropdown, find the layer that contains the first dropdown in a\n * stack of nested dropdowns.\n *\n * If a dropdown is nested (`trigger -> dropdownA -> dropdownB`),\n * `f(dropdownB) = layer(dropdownA)`.\n *\n * If a dropdown is non-nested (`trigger -> dropdownA`),\n * `f(dropdownA) = layer(dropdownA)`.\n */\nfunction findBottomLayerInDropdownStack(dropdown) {\n let currentLayer = layer(dropdown);\n while (true) {\n const itemInLayerBelow = currentLayer.below();\n if (!itemInLayerBelow) {\n break;\n }\n\n if (!itemInLayerBelow.get(0).isDropdown) {\n break;\n }\n\n currentLayer = layer(itemInLayerBelow);\n }\n return currentLayer;\n}\n\nvar dropdownPrototype = {\n /**\n * Toggles the visibility of the dropdown menu\n */\n toggle: function (e) {\n if (this.isVisible()) {\n this.hide();\n } else {\n this.show(e);\n }\n },\n\n /**\n * Explicitly shows the menu\n *\n * @returns {HTMLElement}\n */\n show: function (e) {\n const dropdown = this;\n\n // In case we have 2 triggers for the same submenu\n // we can have two active/expanded triggers at the same time.\n // In order to avoid such behavior we need to reset current active trigger,\n // before we update/replace it.\n doIfTrigger(dropdown, (trigger) => {\n setDropdownTriggerActiveState(trigger, false);\n });\n\n if (e && e.currentTarget && e.currentTarget.classList.contains('aui-dropdown2-trigger')) {\n setTrigger(dropdown, e.currentTarget);\n }\n\n layer(dropdown).show();\n\n doIfTrigger(dropdown, function (trigger) {\n setDropdownTriggerActiveState(trigger, true);\n setLayerAlignment(dropdown, trigger);\n });\n\n // Manage focus on the next tick.\n // the setTimeout avoids a full page scroll caused by:\n // 1) the layer code moving the element to the bottom of the DOM, and then\n // 2) the alignment module asynchronously rendering the element further up the page\n // this code should ideally listen and wait for both those things to be done... but\n // this assumption is cheaper.\n setTimeout(() => handleFocus(dropdown, e), 0);\n\n return this;\n },\n\n /**\n * Explicitly hides the menu\n *\n * @returns {HTMLElement}\n */\n hide: function () {\n layer(this).hide();\n return this;\n },\n\n /**\n * Explicitly hides the whole menu with submenus and focus the initial triggers based on provided param.\n *\n * @param focusTrigger - Get focus back to the initial trigger when menu is closed. Default value is \"true\".\n * @returns {HTMLElement}\n */\n hideAll: function (focusTrigger = true) {\n const bottomLayer = findBottomLayerInDropdownStack(this);\n\n // AUI-5474 when something else (e.g. a Dialog) has hidden the\n // dropdown's layer, we don't need to do anything.\n if (!bottomLayer.isVisible()) {\n return this;\n }\n\n bottomLayer.hide();\n\n // Get focus back to the dropdown's trigger after\n // the dropdown is closed.\n if (focusTrigger) {\n doIfTrigger(bottomLayer.el, (trigger) => {\n // Delay focusing to allow things to settle; otherwise\n // Skatejs's MutationObserver kicks in and opens the dropdown\n // again.\n setTimeout(() => {\n trigger.focus();\n }, 0);\n setTrigger(bottomLayer.el, null);\n });\n }\n\n return this;\n },\n\n /**\n * Shifts explicit focus to the next available item in the menu\n *\n * @returns {undefined}\n */\n focusNext: function () {\n var $items = getVisibleDropdownItems(this);\n var selected = document.activeElement;\n var idx;\n\n if ($items.last()[0] !== selected) {\n idx = $items.toArray().indexOf(selected);\n this.focusItem($items.get(idx + 1));\n } else {\n this.focusItem(0);\n }\n },\n\n /**\n * Shifts explicit focus to the previous available item in the menu\n *\n * @returns {undefined}\n */\n focusPrevious: function () {\n var $items = getVisibleDropdownItems(this);\n var selected = document.activeElement;\n var idx;\n\n if ($items.first()[0] !== selected) {\n idx = $items.toArray().indexOf(selected);\n this.focusItem($items.get(idx - 1));\n } else {\n this.focusItem($items.length - 1);\n }\n },\n\n /**\n * Shifts explicit focus to the menu item matching the index param\n */\n focusItem: function (item) {\n const $items = getVisibleDropdownItems(this);\n if (typeof item === 'number') {\n item = $items.get(item);\n }\n const $item = $(item);\n $item.focus();\n $items.removeClass('active aui-dropdown2-active');\n $item.addClass('active aui-dropdown2-active');\n },\n\n /**\n * Checks whether or not the menu is currently displayed\n *\n * @returns {Boolean}\n */\n isVisible: function () {\n return layer(this).isVisible();\n },\n\n /**\n * Shows that current element is a dropdown\n */\n isDropdown: true\n};\n\n// Web component API for dropdowns\n// -------------------------------\n\nvar disabledAttributeHandler = {\n created: function (element) {\n var a = element.children[0];\n a.setAttribute('aria-disabled', 'true');\n a.classList.add('disabled', 'aui-dropdown2-disabled');\n },\n removed: function (element) {\n var a = element.children[0];\n a.setAttribute('aria-disabled', 'false');\n a.classList.remove('disabled', 'aui-dropdown2-disabled');\n }\n};\n\nvar interactiveAttributeHandler = {\n created: function (element) {\n var a = element.children[0];\n a.classList.add('interactive', 'aui-dropdown2-interactive');\n },\n removed: function (element) {\n var a = element.children[0];\n a.classList.remove('interactive', 'aui-dropdown2-interactive');\n }\n};\n\nvar checkedAttributeHandler = {\n created: function (element) {\n var a = element.children[0];\n a.classList.add('checked', 'aui-dropdown2-checked');\n a.setAttribute('aria-checked', true);\n element.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n },\n removed: function (element) {\n var a = element.children[0];\n a.classList.remove('checked', 'aui-dropdown2-checked');\n a.setAttribute('aria-checked', false);\n element.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n }\n};\n\nvar hiddenAttributeHandler = {\n created: function (element) {\n disabledAttributeHandler.created(element);\n },\n removed: function (element) {\n disabledAttributeHandler.removed(element);\n }\n};\n\nvar stringAttributeHandlerGenerator = function(attrName) {\n return {\n fallback: function (element, change) {\n var a = element.children[0];\n a.setAttribute(attrName, change.newValue);\n },\n removed: function (element) {\n var a = element.children[0];\n a.removeAttribute(attrName);\n }\n };\n};\n\nconst convertCssClassesToArray = function (spaceDelimitedClasses = '') {\n return spaceDelimitedClasses.split(' ').map(str => str.trim()).filter(x => x);\n}\n\nconst ItemLinkEl = skate('aui-item-link', {\n template: template(\n '<a role=\"menuitem\" tabindex=\"-1\"><content></content></a>'\n ),\n attributes: {\n disabled: disabledAttributeHandler,\n interactive: interactiveAttributeHandler,\n hidden: hiddenAttributeHandler,\n href: stringAttributeHandlerGenerator('href'),\n 'item-id': stringAttributeHandlerGenerator('id'),\n for: {\n created: function (element) {\n var anchor = element.children[0];\n anchor.setAttribute('aria-controls', element.getAttribute('for'));\n $(anchor).addClass('aui-dropdown2-sub-trigger');\n },\n updated: function (element) {\n var anchor = element.children[0];\n anchor.setAttribute('aria-controls', element.getAttribute('for'));\n },\n removed: function (element) {\n var anchor = element.children[0];\n anchor.removeAttribute('aria-controls');\n $(anchor).removeClass('aui-dropdown2-sub-trigger');\n }\n },\n 'extra-classes': function (element, change) {\n const anchor = element.children[0];\n if (change.oldValue) {\n anchor.classList.remove(...convertCssClassesToArray(change.oldValue));\n }\n if (change.newValue) {\n anchor.classList.add(...convertCssClassesToArray(change.newValue));\n }\n },\n },\n});\n\nconst [ItemCheckboxEl, ItemRadioEl] = ['checkbox', 'radio'].map(type => {\n return skate(`aui-item-${type}`, {\n template: template(\n `<span role=\"menuitem${type}\" class=\"aui-dropdown2-${type}\" tabindex=\"-1\"><content></content></span>`\n ),\n attributes: {\n 'item-id': stringAttributeHandlerGenerator('id'),\n disabled: disabledAttributeHandler,\n interactive: interactiveAttributeHandler,\n checked: checkedAttributeHandler,\n hidden: hiddenAttributeHandler\n },\n });\n});\n\nconst SectionEl = skate('aui-section', {\n template: template(`\n <span aria-hidden=\"true\" class=\"aui-dropdown2-heading\"></span>\n <div class=\"aui-dropdown2-item-group\" role=\"group\">\n <content></content>\n </div>\n `),\n attributes: {\n label: function (element, data) {\n const id = generateUniqueId();\n var headingElement = element.children[0];\n var groupElement = element.children[1];\n headingElement.textContent = data.newValue;\n headingElement.id = id;\n groupElement.setAttribute('aria-labelledby', id);\n }\n },\n created: function (element) {\n element.classList.add('aui-dropdown2-section');\n }\n});\n\nconst DropdownEl = skate('aui-dropdown-menu', {\n created: function (dropdown) {\n dropdown.setAttribute('role', 'menu');\n dropdown.className = 'aui-dropdown2';\n layer(dropdown);\n state(dropdown).set('loading-state', UNLOADED);\n // Now skate the .aui-dropdown2 behaviour.\n skate.init(dropdown);\n },\n detached: function (dropdown) {\n ifGone(dropdown).then(() => destroyAlignment(dropdown));\n },\n attributes: {\n src: {}\n },\n prototype: dropdownPrototype,\n events: {\n 'aui-layer-show': loadContentWhenMenuShown\n }\n});\n\n// Legacy dropdown inits\n// ---------------------\n\nskate('aui-dropdown2', {\n type: skate.type.CLASSNAME,\n created: dropdownCreated,\n prototype: dropdownPrototype\n});\n\nskate('data-aui-dropdown2', {\n type: skate.type.ATTRIBUTE,\n created: dropdownCreated,\n prototype: dropdownPrototype\n});\n\nskate('aui-dropdown2-trigger', {\n type: skate.type.CLASSNAME,\n created: triggerCreated,\n prototype: triggerPrototype\n});\n\nskate('aui-dropdown2-sub-trigger', {\n type: skate.type.CLASSNAME,\n created: function (trigger) {\n trigger.classList.add('aui-dropdown2-trigger');\n skate.init(trigger);\n }\n});\n\n// Checkboxes and radios\n// ---------------------\n['checkbox', 'radio'].map(type => {\n return skate(`aui-dropdown2-${type}`, {\n type: skate.type.CLASSNAME,\n\n created: function (checkbox) {\n // determine checked state based on any one of three attributes, then sync all of them.\n const checked = (\n checkbox.getAttribute('aria-checked') === 'true' ||\n checkbox.classList.contains('checked') ||\n checkbox.classList.contains('aui-dropdown2-checked')\n );\n checkbox.classList[checked ? 'add' : 'remove']('checked', 'aui-dropdown2-checked');\n checkbox.setAttribute('aria-checked', checked);\n\n // make the element part of the natural tab order.\n checkbox.setAttribute('tabindex', '0');\n\n // swap from the \"menuitemX\" role to plain role for VoiceOver\n if (supportsVoiceOver()) {\n checkbox.setAttribute('role', `menuitem${type}`);\n }\n },\n\n prototype: {\n isEnabled: function () {\n return this.getAttribute('aria-disabled') !== 'true';\n },\n\n isChecked: function () {\n return this.getAttribute('aria-checked') === 'true';\n },\n\n isInteractive: function () {\n return this.classList.contains('aui-dropdown2-interactive');\n },\n\n uncheck: function () {\n if (this.parentNode.tagName.toLowerCase() === `aui-item-${type}`) {\n this.parentNode.removeAttribute('checked');\n }\n $(this)\n .attr('aria-checked', 'false')\n .removeClass('checked aui-dropdown2-checked')\n .trigger('aui-dropdown2-item-uncheck');\n },\n\n check: function () {\n if (this.parentNode.tagName.toLowerCase() === `aui-item-${type}`) {\n this.parentNode.setAttribute('checked', '');\n }\n $(this)\n .attr('aria-checked', 'true')\n .addClass('checked aui-dropdown2-checked')\n .trigger('aui-dropdown2-item-check');\n }\n }\n });\n})\n\nexport {\n DropdownEl,\n ItemLinkEl,\n ItemRadioEl,\n ItemCheckboxEl,\n SectionEl,\n};\n","import $ from './jquery';\n\nimport { getMessageLogger } from './internal/deprecation';\n\n\nconst deprecate = {\n 'aria-expanded': getMessageLogger('Expander [aria-expanded] attribute', {\n removeInVersion: '10.0.0',\n sinceVersion: '9.9.0',\n deprecationType: 'ARIA ATTRIBUTE',\n extraInfo:\n 'The \"aria-expanded\" attribute will no longer act as an indicator for the expander if it needs to be expanded. Please update the expander in accordance with AUI guidelines.',\n }),\n 'replace-selector': getMessageLogger('Expander [data-replace-selector] attribute', {\n removeInVersion: '10.0.0',\n sinceVersion: '9.9.0',\n deprecationType: 'DATA ATTRIBUTE',\n extraInfo:\n 'The attribute \"data-replace-selector\" will no longer have any functionality. It is recommended to update the expander following AUI guidelines.',\n }),\n 'short-content': getMessageLogger('Expander [.aui-expander-short-content]', {\n removeInVersion: '10.0.0',\n sinceVersion: '9.9.0',\n deprecationType: 'EXPANDER CLASS (PATTERN)',\n }),\n}\n\nconst getExpanderProperties = ($trigger) => {\n const $content = $(`#${$trigger.attr('aria-controls')}`);\n const isTriggerParent = $content.parent().is($trigger);\n\n /**\n * ! Deprecated since 9.9.0\n * delete at version 10.0.0\n */\n const $shortContent = isTriggerParent ? $trigger.find('.aui-expander-short-content') : null;\n if ($content.attr('aria-expanded')) {\n deprecate['aria-expanded']();\n if ($content.attr('aria-expanded') === 'true') {\n $content.addClass('expanded');\n }\n $content.removeAttr('aria-expanded');\n }\n /* end of depraction */\n\n return {\n $content,\n isTriggerParent,\n $shortContent,\n isExpanded: $content.hasClass('expanded'),\n height: $content.css('min-height'),\n isCollapsible: $trigger.data('collapsible') !== false,\n textReplacement: $trigger.attr('data-replace-text'),\n };\n};\n\nfunction expand($trigger) {\n const { $content, isTriggerParent, $shortContent, textReplacement } = getExpanderProperties($trigger);\n\n $trigger.attr('aria-expanded', 'true');\n $content.addClass('expanded');\n $content.removeAttr('hidden');\n replaceText($trigger, textReplacement);\n\n if (isTriggerParent) {\n $shortContent.hide();\n }\n\n $trigger.trigger('aui-expander-expanded');\n}\n\nfunction collapse($trigger) {\n const { $content, isTriggerParent, $shortContent, textReplacement } = getExpanderProperties($trigger);\n\n replaceText($trigger, textReplacement);\n $trigger.attr('aria-expanded', 'false');\n $content.removeClass('expanded');\n\n if (isTriggerParent) {\n $shortContent.show();\n }\n\n if ($content.outerHeight() === 0) {\n $content.attr('hidden', '');\n }\n\n $trigger.trigger('aui-expander-collapsed');\n}\n\n\nfunction init($trigger) {\n const { $content, isTriggerParent, isExpanded } = getExpanderProperties($trigger);\n\n /**\n * ! Deprecated since 9.9.0\n * delete at version 10.0.0\n */\n const selector = $trigger.data('replace-selector');\n if (selector) {\n deprecate['replace-selector']();\n }\n if ($content.attr('aria-expanded')) {\n deprecate['aria-expanded']();\n if ($content.attr('aria-expanded') === 'true') {\n $content.addClass('expanded');\n }\n $content.removeAttr('aria-expanded');\n }\n\n const $shortContent = isTriggerParent ? $trigger.find('.aui-expander-short-content') : null;\n if ($shortContent) {\n deprecate['short-content']();\n }\n /* end of depraction */\n\n if ($content.outerHeight() === 0) {\n !isExpanded && $content.attr('hidden', '');\n }\n $trigger.attr('aria-expanded', isExpanded ? 'true' : 'false');\n}\n\nconst replaceText = ($trigger, textReplacement) => {\n if (!textReplacement) { return };\n\n /**\n * ! Deprecated since 9.9.0\n * delete at version 10.0.0\n */\n const selector = $trigger.data('replace-selector');\n if (selector) {\n deprecate['replace-selector']();\n const $deprecatedReplaceElement = $trigger.find(selector);\n $trigger.attr('data-replace-text', $deprecatedReplaceElement.text());\n $deprecatedReplaceElement.text(textReplacement);\n return;\n }\n /* end of depraction */\n\n const $deepestChild = $trigger.find(':not(:has(*)):first');\n const $replaceElement = $deepestChild.length ? $deepestChild : $trigger;\n $trigger.attr('data-replace-text', $replaceElement.text());\n $replaceElement.text(textReplacement);\n};\n\nconst EXPANDER_EVENTS = {\n 'aui-expander-invoke': function (event) {\n const $trigger = $(event.currentTarget)\n const { isCollapsible, isExpanded } = getExpanderProperties($trigger);\n\n if (isExpanded && isCollapsible) {\n $trigger.trigger('aui-expander-collapse');\n } else {\n $trigger.trigger('aui-expander-expand');\n }\n },\n\n 'aui-expander-expand': function (event) {\n expand($(event.currentTarget))\n },\n\n 'aui-expander-collapse': function (event) {\n collapse($(event.currentTarget));\n },\n\n 'click.aui-expander': function (event) {\n const $target = $(event.currentTarget);\n $target.trigger('aui-expander-invoke', event.currentTarget);\n }\n};\n\n$(document).on(EXPANDER_EVENTS, '.aui-expander-trigger');\n$(document).ready(function() {\n $('.aui-expander-trigger').each(function() {\n const $trigger = $(this);\n init($trigger);\n })\n})\n","import $ from './jquery';\nimport * as deprecate from './internal/deprecation';\nimport * as logger from './internal/log';\nimport globalize from './internal/globalize';\nimport escapeHtml from './escape-html';\nimport keyCode from './key-code';\nimport skate from './internal/skate';\nimport {CLOSE_BUTTON, CLOSE_BUTTON_CLASS_SELECTOR} from './close-button';\nimport {I18n} from './i18n';\n\nconst DEFAULT_FADEOUT_DURATION = 500;\nconst DEFAULT_FADEOUT_DELAY = 5000;\nconst FADEOUT_RESTORE_DURATION = 100;\n\nfunction createMessageConstructor(type) {\n /**\n *\n * @param context\n * @param {Object} obj - message configuration\n * @param {String} [obj.id] - ID to add to the message.\n * @param {String} [obj.title] - Plain-text title of the message. If provided, will appear above the message body.\n * @param {String} [obj.a11yTypeLabel] - Accessibility label that will communicate type of message non-visually\n * @param {String} obj.body - Content of the message. Can be HTML content.\n * @param {boolean} [obj.closeable] - If true, the message can be manually closed by the end-user via the UI.\n * @param {boolean} [obj.removeOnHide] - If true, the message will be removed from the DOM after hide.\n * @param {boolean} [obj.fadeout]\n * @param {boolean} [obj.duration]\n * @param {boolean} [obj.delay]\n * @returns {*|HTMLElement}\n */\n this[type] = function (context, obj) {\n if (!obj) {\n obj = context;\n context = '#aui-message-bar';\n }\n\n // Set up our template options\n obj.closeable = obj.closeable !== null && obj.closeable !== false;\n\n // clean the title value\n obj.title = (obj.title || '').toString().trim();\n\n let $message = renderMessageElement(obj, type);\n insertMessageIntoContext($message, obj.insert, context);\n\n // Attach the optional extra behaviours\n if (obj.removeOnHide) {\n console.warn && console.warn('Use of AUI Message `removeOnHide` is deprecated due to accessibility reasons and will be removed in AUI 10.0.0.')\n makeRemoveOnHide($message, obj.delay, obj.duration);\n }\n\n if (obj.closeable) {\n makeCloseable($message);\n }\n\n if (obj.fadeout) {\n console.warn && console.warn('Use of AUI Message `fadeout` is deprecated due to accessibility reasons and will be removed in AUI 10.0.0.')\n makeFadeout($message, obj.delay, obj.duration);\n }\n\n return $message;\n };\n}\n\nfunction makeRemoveOnHide(message, delay, duration) {\n $(message || '.aui-message.aui-remove-on-hide').each(function () {\n const $this = $(this);\n makeFadeout($this, delay, duration)\n })\n}\n\nfunction makeCloseable(message) {\n $(message || 'div.aui-message.closeable').each(function () {\n const $this = $(this);\n const $closeIcons = $this.find(CLOSE_BUTTON_CLASS_SELECTOR);\n const $icon = $closeIcons.length > 0 ? $closeIcons.first() : $(CLOSE_BUTTON);\n\n $this.addClass('closeable');\n $this.append($icon);\n\n initCloseMessageBoxOnClickAndKeypress($this);\n });\n}\n\nfunction makeFadeout(message, delay, duration) {\n delay = (typeof delay !== 'undefined') ? delay : DEFAULT_FADEOUT_DELAY;\n duration = (typeof duration !== 'undefined') ? duration : DEFAULT_FADEOUT_DURATION;\n\n $(message || 'div.aui-message.fadeout').each(function () {\n const $this = $(this);\n\n //Store the component state to avoid collisions between animations\n let hasFocus = false;\n let isHover = false;\n\n //Small functions to keep the code easier to read and avoid code duplication\n function fadeOut(){\n //Algorithm:\n //1. Stop all running animations (first arg), including any fade animation and delay\n // Do not jump to the end of the animation (second arg). This prevents the message to abruptly\n // jump to opacity:0 or opacity:1\n //2. Wait <delay> ms before starting the fadeout\n //3. Start the fadeout with a duration of <duration> ms\n //4. Close the message at the end of the animation\n $this.stop(true,false).delay(delay).fadeOut(duration, function () {\n $this.closeMessage();\n });\n }\n function resetFadeOut(){\n //Algorithm:\n //1. Stop all running animations (first arg), including any fade animation and delay\n // Do not jump to the end of the animation (second arg). This prevents the message to abruptly\n // jump to opacity:0 or opacity:1\n //2. Fast animation to opacity:1\n $this.stop(true,false).fadeTo(FADEOUT_RESTORE_DURATION, 1);\n }\n function shouldStartFadeOut(){\n return !hasFocus && !isHover;\n }\n\n //Attach handlers for user interactions (focus and hover)\n $this\n .focusin(function () {\n hasFocus = true;\n resetFadeOut();\n })\n .focusout(function () {\n hasFocus = false;\n if (shouldStartFadeOut()) {\n fadeOut();\n }\n })\n .hover(\n function () { //should be called .hoverin(), but jQuery does not implement that method\n isHover = true;\n resetFadeOut();\n },\n function () { //should be called .hoverout(), but jQuery does not implement that method\n isHover = false;\n if (shouldStartFadeOut()) {\n fadeOut();\n }\n }\n );\n\n //Initial animation\n fadeOut();\n });\n}\n\nconst messageFunctions = {\n setup: function () {\n makeRemoveOnHide();\n makeCloseable();\n makeFadeout();\n },\n makeRemoveOnHide: makeRemoveOnHide,\n makeCloseable: makeCloseable,\n makeFadeout: makeFadeout,\n createMessage: createMessageConstructor\n};\n\nfunction initCloseMessageBoxOnClickAndKeypress($message) {\n $message.unbind('click.aui-message').unbind('keydown.aui-message');\n\n $message.on('click.aui-message', CLOSE_BUTTON_CLASS_SELECTOR, function (e) {\n $(e.target).closest('.aui-message').closeMessage();\n }).on('keydown.aui-message', CLOSE_BUTTON_CLASS_SELECTOR, function (e) {\n if ((e.which === keyCode.ENTER) || (e.which === keyCode.SPACE)) {\n $(e.target).closest('.aui-message').closeMessage();\n e.preventDefault(); // this is especially important when handling the space bar, as we don't want to page down\n }\n });\n}\n\nfunction insertMessageIntoContext($message, insertWhere, context) {\n if (insertWhere === 'prepend') {\n $message.prependTo(context);\n } else if (insertWhere === 'before') {\n $message.insertBefore(context);\n } else if (insertWhere === 'after') {\n $message.insertAfter(context);\n } else {\n $message.appendTo(context);\n }\n}\n\nfunction getMessageA11yTypeText(obj, type) {\n const { a11yTypeLabel } = obj;\n\n if (a11yTypeLabel === '') {\n return '';\n }\n\n const isA11yTypeLabelNotEmpty = a11yTypeLabel != null;\n if (isA11yTypeLabelNotEmpty) {\n return a11yTypeLabel;\n }\n\n const isA11yTypeLabelNotPassed = a11yTypeLabel == null;\n if (isA11yTypeLabelNotPassed) {\n switch (type) {\n case 'error':\n return I18n.getText('aui.messagecomponent.error.label');\n case 'warning':\n return I18n.getText('aui.messagecomponent.warning.label');\n case 'info':\n return I18n.getText('aui.messagecomponent.info.label');\n case 'confirmation':\n return I18n.getText('aui.messagecomponent.confirmation.label');\n case 'change':\n return I18n.getText('aui.messagecomponent.change.label');\n case 'generic':\n case 'success':\n case 'hint':\n return '';\n default:\n throw Error(`Provide \\`a11yTypeLabel\\` for AUI message of custom type ${type}`);\n }\n }\n}\n\nfunction renderMessageElement (obj, type) {\n const { id, closeable, removeOnHide, fadeout, title, body } = obj;\n\n const messageTypeText = getMessageA11yTypeText(obj, type);\n const messageTypeLabel = messageTypeText ? `<strong hidden>${messageTypeText}: </strong>` : '';\n\n // Convert the options in to template values\n const titleId = id ? `${id}-title` : '';\n const titleHtml = title ? `<p class=\"title\" ${titleId ? `id=\"${titleId}\" aria-hidden=\"true\"` : ''}>${messageTypeLabel}<strong>${escapeHtml(title)}</strong></p>` : '';\n const html = `<div class=\"aui-message\" role=\"note\" ${titleId ? `aria-labelledby=\"${titleId}\"` : ''}>${titleHtml}</div>`;\n\n // Construct the message element\n const $message = $(html)\n .append($.parseHTML(body || ''))\n .addClass(removeOnHide ? 'aui-remove-on-hide' : '')\n .addClass(closeable ? 'closeable' : '')\n .addClass(fadeout ? 'fadeout' : '')\n .addClass(`aui-message-${type}`);\n\n // Add ID if supplied\n if (id) {\n if (/[#'\".\\s]/g.test(id)) {\n // reject IDs that don't comply with style guide (ie. they'll break stuff)\n logger.warn('Messages error: ID rejected, must not include spaces, hashes, dots or quotes.');\n } else {\n $message.attr('id', id);\n }\n }\n\n return $message;\n}\n\n$.fn.closeMessage = function () {\n const $message = $(this);\n if ($message.hasClass('aui-message') && ($message.hasClass('closeable') || $message.hasClass('aui-remove-on-hide'))) {\n $message.stop(true); //Stop any running animation\n $message.trigger('messageClose', [this]); //messageClose event Deprecated as of 5.3\n $message.remove();\n $(document).trigger('aui-message-close', [this]); //must trigger on document since the element has been removed\n }\n};\n\n\n/**\n * Utility methods to display different message types to the user.\n * Usage:\n * <pre>\n * messages.info(\"#container\", {\n * title: \"Info\",\n * body: \"You can choose to have messages without Close functionality.\",\n * closeable: false,\n * });\n * </pre>\n */\nmessageFunctions.createMessage('generic'); //Deprecated Oct 2017\nmessageFunctions.createMessage('error');\nmessageFunctions.createMessage('warning');\nmessageFunctions.createMessage('info');\nmessageFunctions.createMessage('confirmation');\nmessageFunctions.createMessage('change');\nmessageFunctions.createMessage('success'); //Deprecated Oct 2017\nmessageFunctions.createMessage('hint'); //Deprecated Oct 2017\n\nconst MessageEl = skate('aui-message', {\n created: function (element) {\n const body = element.innerHTML;\n const type = element.getAttribute('type') || 'info';\n\n element.innerHTML = '';\n messageFunctions[type](element, {\n body: body,\n id: element.getAttribute('id'),\n a11yTypeLabel: element.getAttribute('a11yTypeLabel'),\n removeOnHide: element.getAttribute('removeOnHide'),\n closeable: element.getAttribute('closeable'),\n delay: element.getAttribute('delay'),\n duration: element.getAttribute('duration'),\n fadeout: element.getAttribute('fadeout'),\n title: element.getAttribute('title')\n });\n element.setAttribute('role', 'none');\n }\n});\n\n$(function () {\n messageFunctions.setup();\n});\n\ndeprecate.prop(messageFunctions, 'makeCloseable', {\n extraInfo: 'Use the \"closeable\" option in the constructor instead. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\ndeprecate.prop(messageFunctions, 'createMessage', {\n extraInfo: 'Use the provided convenience methods instead e.g. messages.info(). Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\ndeprecate.prop(messageFunctions, 'makeRemoveOnHide', {\n extraInfo: 'Use of the `makeRemoveOnHide` option is deprecated due to accessibility reasons. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\ndeprecate.prop(messageFunctions, 'makeFadeout', {\n extraInfo: 'Use of the `fadeout` option is deprecated due to accessibility reasons. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\ndeprecate.prop(messageFunctions, 'generic', {\n extraInfo: 'use the messages.info() method instead. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\ndeprecate.prop(messageFunctions, 'hint', {\n extraInfo: 'use the messages.info() method instead. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\ndeprecate.prop(messageFunctions, 'success', {\n extraInfo: 'use the messages.confirmation() method instead. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\n// Exporting\n// ---------\nglobalize('messages', messageFunctions);\n\nexport default messageFunctions;\nexport {\n MessageEl\n};\n","// eslint-disable-next-line max-len\nexport const FOCUSABLE_QUERY = 'a[href], area[href], input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex=\"0\"], [contenteditable], audio[controls], video[controls], summary, [tabindex^=\"0\"], [tabindex^=\"1\"], [tabindex^=\"2\"], [tabindex^=\"3\"], [tabindex^=\"4\"], [tabindex^=\"5\"], [tabindex^=\"6\"], [tabindex^=\"7\"], [tabindex^=\"8\"], [tabindex^=\"9\"]';\n\n\n","import $ from './jquery';\nimport { defaults } from 'underscore';\nimport { recomputeStyle } from './internal/animation';\nimport amdify from './internal/amdify';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport CustomEvent from './polyfills/custom-event';\nimport escapeHtml from './escape-html';\nimport { CLOSE_BUTTON } from './close-button';\nimport { FOCUSABLE_QUERY } from './internal/a11y/focusable-query';\nimport getFocusManager from './focus-manager';\n\nconst AUTO_CLOSE_TIME = 8000;\nconst ID_FLAG_CONTAINER = 'aui-flag-container';\nconst DEFAULT_OPTIONS = {\n body: '',\n close: 'manual',\n title: '',\n type: 'info',\n duration: AUTO_CLOSE_TIME,\n ariaLive: 'polite'\n};\n\nfunction flag (flagOptions) {\n const options = defaults(flagOptions, DEFAULT_OPTIONS);\n options.title = (options.title || '').toString().trim();\n const $flag = renderFlagElement(options);\n extendFlagElement($flag);\n\n if (options.close === 'auto') {\n makeCloseable($flag);\n\n if ($flag.attr('aui-focus-trap') === 'false') {\n makeAutoClosable($flag, options.duration);\n }\n } else if (options.close === 'manual') {\n makeCloseable($flag);\n }\n\n handleFlagContainer();\n insertFlag($flag);\n setTimeout(function () {\n if ($flag.attr('aui-focus-trap') === 'true') {\n getFocusManager.global.enter($flag);\n }\n }, 0);\n\n setTimeout(function () {\n $flag.attr({\n 'aria-hidden': false\n });\n }, 100)\n\n return $flag.get(0);\n}\n\nfunction extendFlagElement ($flag) {\n const flag = $flag[0];\n\n flag.close = function () {\n closeFlag($flag);\n };\n}\n\nfunction renderFlagElement ({ body, title, close, type, ariaLive }) {\n const titleHtml = title ? `<p class=\"title\"><strong>${escapeHtml(title)}</strong></p>` : '';\n const html = `<div class=\"aui-message\">${titleHtml}</div>`;\n const ariaLabel = title ? escapeHtml(title) : '';\n\n const $message = $(html)\n .append($.parseHTML(body || ''))\n .addClass(close === 'never' ? '' : 'closeable')\n .addClass(`aui-message-${type}`);\n const isFocusable = $message.find(FOCUSABLE_QUERY).length > 0;\n const ariaRole = isFocusable ? 'alertdialog' : 'alert';\n\n return $(`<div aui-focus-trap=\"${isFocusable}\" class=\"aui-flag\" aria-label=\"${ariaLabel}\" aria-hidden=\"true\" aria-live=\"${escapeHtml(ariaLive)}\" role=\"${ariaRole}\"></div>`).append($message);\n}\n\nfunction makeCloseable ($flag) {\n const $icon = $(CLOSE_BUTTON);\n\n $icon.on('click', function () {\n closeFlag($flag);\n });\n\n $icon.on('keypress', function (e) {\n if ((e.which === keyCode.ENTER) || (e.which === keyCode.SPACE)) {\n closeFlag($flag);\n e.preventDefault();\n }\n });\n\n return $flag.find('.aui-message').append($icon)[0];\n}\n\nfunction makeAutoClosable ($flag, duration) {\n $flag.find('.aui-message').addClass('aui-will-close');\n setTimeout(function () {\n $flag[0].close();\n }, duration);\n}\n\nfunction closeFlag ($flagToClose) {\n const flag = $flagToClose.get(0);\n\n flag.removeAttribute('open');\n flag.setAttribute('inert', '');\n flag.setAttribute('aria-hidden', true);\n flag.dispatchEvent(new CustomEvent('aui-flag-close', { bubbles: true }));\n if ($flagToClose.attr('aui-focus-trap')) {\n getFocusManager.global.exit($flagToClose);\n }\n\n return flag;\n}\n\nfunction handleFlagContainer () {\n const container = findContainer();\n\n if (container) {\n const closedFlags = container.querySelectorAll('.aui-flag:not([open])');\n\n Array.from(closedFlags).map(flag => flag.parentNode.removeChild(flag));\n } else {\n $('body').prepend('<div id=\"' + ID_FLAG_CONTAINER + '\"></div>');\n }\n}\n\nfunction findContainer () {\n return document.getElementById(ID_FLAG_CONTAINER);\n}\n\nfunction insertFlag ($flag) {\n const flagContainer = findContainer();\n\n $flag.appendTo(flagContainer);\n recomputeStyle($flag);\n\n $flag\n .removeAttr('hidden')\n .attr('open', '');\n}\n\namdify('aui/flag', flag);\nglobalize('flag', flag);\nexport default flag;\n","import $ from './jquery';\nimport { createPopper } from '@popperjs/core';\nimport DOMPurify from 'dompurify';\n\nconst AUI_TOOLTIP_CLASS_NAME = 'aui-tooltip';\nconst AUI_TOOLTIP_ID = 'aui-tooltip';\nconst AUI_TOOLTIP_TIMEOUT = 300;\n\n/**\n * The purpose of this map is to make it possible to use old Tipsy tooltip positions\n * with Popper.\n *\n * @enum\n * @name GravityOptions\n * @type {{n: string, ne: string, e: string, se: string, s: string, sw: string, w: string, nw: string}}\n */\nconst GRAVITY_MAP = {\n 'n': 'bottom',\n 'ne': 'bottom-end',\n 'e': 'left',\n 'se': 'top-end',\n 's': 'top',\n 'sw': 'top-start',\n 'w': 'right',\n 'nw': 'bottom-start',\n};\n\n// This key is used to differentiate events related to this particular plugin.\nconst pluginKey = 'aui-tooltip';\n\nconst defaultOptions = {\n gravity: 'n',\n html: false,\n live: false,\n enabled: true,\n suppress: () => false,\n aria: true,\n sanitize: true,\n maxWidth: 200\n}\n\nlet $sharedTip;\n\nconst getTipNode = () => {\n return $sharedTip && $sharedTip.get(0);\n}\n\nconst toggleTooltipVisibility = (shouldBeHidden = false) => {\n const tipNode = getTipNode();\n if (tipNode) {\n tipNode.classList.toggle('hidden', shouldBeHidden);\n tipNode.setAttribute('aria-hidden', shouldBeHidden);\n }\n}\n\nclass Tooltip {\n constructor(triggerElement, options) {\n this.triggerElement = triggerElement;\n this.$triggerElement = $(this.triggerElement);\n this.options = { ...defaultOptions, ...options };\n this.enabled = this.options.enabled;\n this.moveTitleToTooltip();\n this.initContainer();\n this.observeTriggerRemoval();\n }\n\n destroy() {\n this.unbindHandlers();\n this.hide();\n\n tooltipsByDomNode.delete(this.triggerElement);\n }\n\n moveTitleToTooltip() {\n const tooltip = this;\n const $triggerElement = this.$triggerElement;\n\n $triggerElement.attr('title', function (_, originalTitle) {\n tooltip.originalTitle = originalTitle;\n if (tooltip.options.aria) {\n $triggerElement.attr('aria-describedby', AUI_TOOLTIP_ID);\n }\n return null;\n });\n }\n\n observeTriggerRemoval() {\n\n const observedElements = [];\n\n if (this.options.$delegationRoot && this.options.$delegationRoot.get(0)) {\n observedElements.push(this.options.$delegationRoot.get(0));\n }\n\n if (this.triggerElement) {\n observedElements.push(this.triggerElement);\n }\n\n this.triggerObservers = observedElements\n .map(element => {\n const parent = element.parentElement;\n if (parent) {\n const observer = new MutationObserver(() => {\n const isToDestroy = !parent.contains(element);\n if (isToDestroy) {\n this.destroy();\n }\n });\n observer.observe(parent, {\n childList: true,\n subtree: false // We take trigger parent, so we only care about direct children\n });\n return observer;\n }\n })\n .filter(observer => !!observer);\n }\n\n unbindHandlers() {\n const selector = this.options.live;\n\n // Keep in mind that unbinding handlers from one tooltip\n // managed by delegation will unbind handlers for the whole\n // collection.\n if (this.options.$delegationRoot && selector) {\n this.options.$delegationRoot.off(`.${pluginKey}`, selector);\n return;\n }\n\n if (this.triggerObservers.length > 0) {\n this.triggerObservers.forEach(observer => observer.disconnect());\n }\n\n // We only need to unbind event handlers from this particular element\n this.$triggerElement.off(`.${pluginKey}`);\n }\n\n initContainer() {\n if ($sharedTip === undefined || $sharedTip.get(0) && !$sharedTip.get(0).isConnected) {\n $sharedTip = $(`<div id=\"${AUI_TOOLTIP_ID}\" class=\"${AUI_TOOLTIP_CLASS_NAME} hidden\" role=\"tooltip\" aria-hidden=\"true\"><p class=\"aui-tooltip-content\"></p></div>`);\n $(document.body).append($sharedTip);\n }\n }\n\n buildTip(title) {\n const options = this.options;\n const tooltipContentElement = $sharedTip.find('.aui-tooltip-content');\n\n if (options.html) {\n if (options.sanitize) {\n title = DOMPurify.sanitize(title);\n }\n tooltipContentElement.html(title);\n } else {\n tooltipContentElement.text(title);\n }\n\n if (options.maxWidth) {\n tooltipContentElement.css('max-width', options.maxWidth + 'px');\n }\n\n return $sharedTip;\n }\n\n getTipTitle() {\n const options = this.options;\n\n let title = typeof options.title === 'function' ?\n options.title :\n typeof options.title === 'string' ?\n () => options.title :\n () => this.originalTitle || '';\n\n let actualTitle = title.call(this.triggerElement);\n return (!actualTitle || !actualTitle.trim().length) ? undefined : actualTitle;\n }\n\n show() {\n const tipTitle = this.getTipTitle();\n if (this.enabled === false || !tipTitle) {\n return;\n }\n\n // In order to avoid flickering of the tooltip when we have the same content we need to skip hiding.\n const isNewTooltip = $sharedTip && tipTitle !== $sharedTip.text();\n if (isNewTooltip) {\n this.hide();\n }\n\n const triggerElement = this.triggerElement;\n const placement = GRAVITY_MAP[this.options.gravity];\n\n if (typeof this.options.suppress === 'function') {\n if (this.options.suppress.call(triggerElement) === true) {\n return;\n }\n }\n\n const tipNode = this.buildTip(tipTitle).get(0);\n\n this.showTooltip();\n\n this.popperInstance = createPopper(triggerElement, tipNode, {\n placement,\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 4],\n },\n },\n ],\n });\n\n $(window).on(`scroll.${pluginKey}`, () => this.hide());\n }\n\n hide() {\n this.hideTooltip();\n\n if (this.popperInstance) {\n this.popperInstance.destroy();\n delete this.popperInstance;\n }\n\n $(window).off(`scroll.${pluginKey}`);\n }\n\n showTooltip() {\n toggleTooltipVisibility(false);\n }\n\n hideTooltip() {\n toggleTooltipVisibility(true);\n }\n\n enable() {\n this.enabled = true;\n }\n\n disable() {\n this.hide();\n this.enabled = false;\n }\n}\n\nconst tooltipsByDomNode = new WeakMap();\n\nconst getTooltipInstance = (domNode, options) => {\n // Options will be ignored if there is an existing tooltip instance\n // assigned to given DOM node. To override it you need to first destroy\n // the old tooltip.\n let tooltip = tooltipsByDomNode.get(domNode);\n if (tooltip === undefined) {\n tooltip = new Tooltip(domNode, options);\n if (typeof domNode === 'object') {\n tooltipsByDomNode.set(domNode, tooltip);\n }\n }\n return tooltip;\n}\n\nconst namespacify = events => events.map(event => `${event}.${pluginKey}`).join(' ');\n\nconst activationEvents = namespacify(['mouseenter', 'focus']);\nconst deactivationEvents = namespacify(['click', 'mouseleave', 'blur']);\nlet showTimeoutId;\nlet hideTimeoutId;\n\n$.fn.tooltip = function (arg) {\n // We have an actual jQuery collection available under `this`\n const $collection = this;\n\n // Get the tooltip instance assigned to the first element in the collection\n if (arg === true) {\n const firstDomNode = $collection.get(0);\n return getTooltipInstance(firstDomNode);\n }\n\n // Call the particular method from the first tooltip instance\n if (typeof arg === 'string') {\n const tooltip = $collection.tooltip(true);\n const commandName = arg;\n\n if (typeof tooltip[commandName] !== 'function') {\n throw new Error(`Method ${commandName} does not exist on tooltip.`)\n }\n\n tooltip[commandName]();\n\n return $collection;\n }\n\n const options = arg || {};\n\n const clearAllTimers = function () {\n clearTimeout(hideTimeoutId);\n clearTimeout(showTimeoutId);\n };\n\n const updateTooltipEvents = function () {\n $sharedTip.off(`mouseenter.${pluginKey}`);\n $sharedTip.off(`mouseleave.${pluginKey}`);\n\n $sharedTip.on(`mouseenter.${pluginKey}`, () => {\n clearAllTimers();\n });\n $sharedTip.on(`mouseleave.${pluginKey}`, () => {\n clearAllTimers();\n hide();\n });\n }\n\n const show = function () {\n // Stop all events that were triggered by different tooltip\n clearAllTimers();\n\n const tooltip = getTooltipInstance(this, options);\n showTimeoutId = setTimeout(() => {\n clearAllTimers();\n tooltip.show();\n $sharedTip && updateTooltipEvents();\n }, AUI_TOOLTIP_TIMEOUT);\n\n }\n\n const hide = function () {\n // Stop all events that were triggered by different tooltip\n clearAllTimers();\n\n const tooltip = getTooltipInstance(this, options);\n hideTimeoutId = setTimeout(() => {\n tooltip.hide();\n }, AUI_TOOLTIP_TIMEOUT);\n }\n\n const hideOnEsc = function (e) {\n if (e.code === 'Escape') {\n hide();\n }\n }\n\n const selector = options.live;\n if (selector !== undefined) {\n // We store it so that it's possible to kill the whole delegation later\n options.$delegationRoot = $collection;\n\n $collection.on(activationEvents, selector, show);\n $collection.on(deactivationEvents, selector, hide);\n $collection.on('keyup', selector, hideOnEsc);\n } else {\n $collection.on(activationEvents, show);\n $collection.on(deactivationEvents, hide);\n $collection.on('keyup', hideOnEsc);\n }\n\n return $collection;\n};\n\nexport default $;\n","import $ from './jquery';\nimport './dropdown2';\nimport './tooltip';\nimport { I18n } from './i18n';\nimport amdify from './internal/amdify';\nimport skate from './internal/skate';\nimport uid from './unique-id';\n\nvar templates = {\n dropdown: function (items) {\n function createSection() {\n return $('<div class=\"aui-dropdown2-section\">');\n }\n\n // clear items section\n var $clearItemsSection = createSection();\n\n $('<button />').attr({\n type: 'button',\n 'data-aui-checkbox-multiselect-clear': '',\n class: 'aui-button aui-button-link'\n })\n .text(I18n.getText('aui.checkboxmultiselect.clear.selected'))\n .appendTo($clearItemsSection);\n\n // list of items\n var $section = createSection();\n var $itemList = $('<ul />').appendTo($section);\n\n $.each(items, function (idx, item) {\n var $li = $('<li />').attr({\n class: item.styleClass || ''\n }).appendTo($itemList);\n\n var $a = $('<a />')\n .text(item.label)\n .attr('data-value', item.value)\n .addClass('aui-dropdown2-checkbox aui-dropdown2-interactive')\n .appendTo($li);\n\n if (item.icon) {\n $('<span />')\n .addClass('aui-icon')\n .css('backgroundImage', 'url(' + item.icon + ')\")')\n .appendTo($a);\n }\n\n if (item.selected) {\n $a.addClass('aui-dropdown2-checked');\n }\n });\n\n return $('<div />')\n .append($clearItemsSection)\n .append($section)\n .html();\n },\n\n furniture: function (name, optionsHtml) {\n var dropdownId = name + '-dropdown';\n\n var $select = $('<select />').attr({\n name: name,\n multiple: 'multiple'\n }).html(optionsHtml);\n\n var $dropdown = $('<div>')\n .attr({\n id: dropdownId,\n class: 'aui-checkbox-multiselect-dropdown aui-dropdown2'\n });\n\n var $button = $('<button />')\n .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 $('<div />')\n .append($select)\n .append($button)\n .append($dropdown)\n .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 */\nfunction handleDropdownSelection (e) {\n var $a = $(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 */\nfunction updateOption (component, value, selected) {\n var $toUpdate = component.$select.find('option').filter(function () {\n var $this = $(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 */\nfunction 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 */\nfunction getButtonTitle (component) {\n return component.$dropdown[0].hasAttribute('hidden') ? '' : 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 */\nfunction mapOptionDescriptors ($options) {\n return $options.map(function () {\n var $option = $(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.prop('selected')\n };\n });\n}\n\n/**\n * Gets label for when nothing is selected\n * @returns {string}\n * @private\n */\nfunction getImplicitAllLabel (component) {\n return $(component).data('allLabel') || 'All';\n}\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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction getSelectedLabels (component) {\n return $.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 */\nfunction isImplicitAll (component) {\n return getSelectedDescriptors(component).length === 0;\n}\n\nconst CheckboxMultiselectEl = skate('aui-checkbox-multiselect', {\n attached: function (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') || uid('aui-checkbox-multiselect-');\n component.innerHTML = templates.furniture(name, component.innerHTML);\n\n component.$select = $('select', component)\n .on('change', function () {\n renderButton(component);\n updateClearAll(component);\n });\n\n component.$dropdown = $('.aui-checkbox-multiselect-dropdown', component)\n .on('aui-dropdown2-item-check', handleDropdownSelection.bind(component))\n .on('aui-dropdown2-item-uncheck', handleDropdownSelection.bind(component))\n .on('click', 'button[data-aui-checkbox-multiselect-clear]', component.deselectAllOptions.bind(component));\n\n component.$btn = $('.aui-checkbox-multiselect-btn', component)\n .tooltip({\n title: function () {\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 () {\n return this.$select.find('option');\n },\n\n /**\n * Gets all selected options\n * @returns {jQuery}\n */\n getSelectedOptions: function () {\n return this.$select.find('option:selected');\n },\n\n /**\n * Sets <option> elements matching given value to selected\n */\n selectOption: function (value) {\n updateOption(this, value, true);\n },\n\n /**\n * Sets <option> elements matching given value to unselected\n */\n unselectOption: function (value) {\n updateOption(this, value, false);\n },\n\n /**\n * Gets value of <select>\n * @returns Array\n */\n getValue: function () {\n return this.$select.val();\n },\n\n /**\n * Unchecks all items in the dropdown and in the <select>\n */\n deselectAllOptions: function () {\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 (descriptor) {\n $('<option />').attr({\n value: descriptor.value,\n icon: descriptor.icon,\n disabled: descriptor.disabled,\n selected: descriptor.selected,\n title: descriptor.title\n })\n .text(descriptor.label)\n .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 (value) {\n this.$select.find(\"[value='\" + value + \"']\").remove();\n renderButton(this);\n renderDropdown(this);\n }\n }\n});\n\namdify('aui/checkbox-multiselect', CheckboxMultiselectEl);\nexport default CheckboxMultiselectEl;\n","/* AUI-4199: This puts the FFI object on the jQuery global for backwards compatibility. */\nimport FancyFileInput from 'fancy-file-input/dist/fancy-file-input';\n\nexport default FancyFileInput;\n","import * as logger from './log'\n\nfunction enforcer (element) {\n\n function attributeExists (attributeName) {\n var errorMessage = attributeName + ' wasn\\'t defined';\n\n return satisfiesRules(function () {\n return element.hasAttribute(attributeName)\n }, errorMessage);\n }\n\n function refersTo (attributeName) {\n\n if (!attributeExists(attributeName, element)){\n return false;\n }\n\n var desiredId = element.getAttribute(attributeName);\n var errorMessage = 'an element with id set to \"' + desiredId + '\" was not found';\n\n return satisfiesRules(function () {\n return document.getElementById(desiredId);\n }, errorMessage);\n }\n\n function ariaControls() {\n return refersTo('aria-controls');\n }\n\n function ariaOwns() {\n return refersTo('aria-owns');\n }\n\n function satisfiesRules (predicate, message) {\n if (!predicate()) {\n if (element) {\n logger.error(message, element);\n } else {\n logger.error(message);\n }\n return false;\n }\n return true;\n }\n\n return {\n attributeExists: attributeExists,\n refersTo: refersTo,\n satisfiesRules: satisfiesRules,\n ariaControls: ariaControls,\n ariaOwns: ariaOwns\n }\n}\n\nexport default enforcer;\n","const INPUT_SUFFIX = '-input';\n\nexport {\n INPUT_SUFFIX\n}\n","import skate from './internal/skate';\nimport skateTemplateHtml from 'skatejs-template-html';\nimport enforce from './internal/enforcer';\nimport { INPUT_SUFFIX } from './internal/constants';\n\nfunction getLabel(element) {\n return element.querySelector('label');\n}\n\nfunction updateLabelFor(element, change) {\n if (element.hasAttribute('for')) {\n getLabel(element).setAttribute('for', `${change.newValue}${INPUT_SUFFIX}`);\n } else {\n getLabel(element).removeAttribute('for');\n }\n}\n\nfunction 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\nconst LabelEl = skate('aui-label', {\n template: skateTemplateHtml('<label><content></content></label>'),\n created: function (element) {\n element._label = getLabel(element); // required for quick access from test\n },\n attached: function (element) {\n enforce(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 (element, e) {\n if (element.disabled) {\n e.preventDefault();\n }\n }\n }\n});\n\nexport default LabelEl;\n","import $ from './jquery';\nimport '../../js-vendor/jquery/plugins/jquery.select2';\nimport layer from \"./layer\";\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 */\nconst originalSelect2 = $.fn.select2;\n\n// AUI-specific classes\nconst auiContainer = 'aui-select2-container';\nconst auiDropdown = 'aui-select2-drop aui-dropdown2';\nconst auiHasAvatar = 'aui-has-avatar';\n\n$.fn.auiSelect2 = function (first) {\n let updatedArgs;\n let dropdownLayer;\n\n if ($.isPlainObject(first)) {\n const auiOpts = $.extend({}, first);\n const 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 const options = updatedArgs[0];\n\n /**\n * AUI-5464: after the upgrade to select2 v3.5.4, custom error handling stopped\n * working, as the `ajax.params.error` function is overriden by select2, and\n * there is no alternative to this...\n *\n * This is a workaround for creating an array of ajax error handlers that will\n * contain the default handler and the custom ones, which is supported starting\n * from jQuery v1.5: http://api.jquery.com/jquery.ajax/\n *\n * Please note this issue is fixed starting from select2 v4, though the data format\n * is different.\n *\n * @see https://atlassian.slack.com/archives/CFGN5350T/p1686741137056489\n */\n if (options.ajax && options.ajax.params && options.ajax.params.error) {\n let customErrorHandlers = options.ajax.params.error;\n if (!Array.isArray(customErrorHandlers)) {\n customErrorHandlers = [customErrorHandlers];\n }\n let originalTransport = options.ajax.transport;\n if (!originalTransport) {\n originalTransport = originalSelect2.ajaxDefaults.transport\n }\n\n const newTransport = function(...args) {\n args[0].error = [args[0].error, ...customErrorHandlers];\n return originalTransport(...args);\n };\n\n options.ajax.transport = newTransport;\n }\n\n const result = originalSelect2.apply(this, updatedArgs);\n const select2Instance = this;\n const searchLabel = options.searchLabel;\n\n select2Instance.on('select2-open', function () {\n const $selectInput = $(this);\n const $selectDropdown = $selectInput.select2('dropdown');\n\n if (!dropdownLayer) dropdownLayer = layer();\n dropdownLayer.show(); // add layer to layer manager to get top z-index\n\n $selectDropdown.css('z-index', dropdownLayer.$el.css('z-index'));\n // mask is created during opening event, before open\n $(\"#select2-drop-mask\").css('z-index', dropdownLayer.$el.css('z-index'));\n\n if (options.multiple || $selectInput.attr('multiple')) {\n // This is a multi-select, exiting\n return;\n }\n\n if (searchLabel) {\n $selectDropdown.find('.select2-search label').text(searchLabel);\n }\n });\n\n select2Instance.on('select2-close', function () {\n const $selectInput = $(this);\n\n dropdownLayer.hide();\n\n $selectInput.removeData('was-ariadescribedby-cleared');\n });\n\n select2Instance.on('select2-loaded', function () {\n const $selectInput = $(this);\n const wasAriaDescribedByCleared = $selectInput.data('was-ariadescribedby-cleared');\n\n if (options.multiple || $selectInput.attr('multiple') || wasAriaDescribedByCleared) {\n return;\n }\n\n const $selectDropdown = $selectInput.select2('dropdown');\n\n // AUI-5461: when single select dropdown opens up, the first option is\n // instantly focused, making SRs announce it, while skipping the search field\n $selectDropdown.find('.select2-search .select2-input').attr('aria-activedescendant', '');\n $selectInput.data('was-ariadescribedby-cleared', true);\n });\n\n select2Instance.on('select2-focus', function () {\n const $selectInput = $(this);\n const $container = $selectInput.parent().find('.select2-container');\n\n if (options.multiple || $selectInput.attr('multiple')) {\n if (searchLabel) {\n $container.find('.select2-search-field label').text(searchLabel);\n }\n\n return;\n }\n\n const $focusserLabel = $container.find('label');\n if ($focusserLabel.attr('id')) {\n // The id is already assigned, exiting\n return;\n }\n\n // AUI-5462: when single select is initialized, the selected option container is\n // linked to the button via aria-labelledby, preventing SRs from reading its label\n const $focusserInput = $container.find('.select2-focusser');\n const labelId = $focusserInput.attr('id') + '-label';\n const ariaLabelledby = $focusserInput.attr('aria-labelledby');\n $focusserLabel.attr('id', labelId);\n $focusserInput.attr('aria-labelledby', labelId + ' ' + ariaLabelledby);\n });\n\n return result;\n};\n","import $ from './jquery';\nimport './spinner';\nimport skate from './internal/skate';\nimport { fn } from './internal/deprecation';\n\n/**\n * @typedef {Object} jQuerySpinnerConfig\n * @property {SpinnerSize} size - the size of the spinner.\n */\n\n/**\n * @param {jQuerySpinnerConfig|String|Boolean} [firstArgs]\n * - when an object, it is a {jQuerySpinnerConfig}\n * - when a string, it represents the `size` the spinner should take.\n * - when boolean, the argument can take only FALSE, in this case, the spinner will be stopped.\n * @param {jQuerySpinnerConfig} [maybeArgs]\n * @deprecated since AUI 7.9.4. Use the `<aui-spinner>` web component directly.\n */\n$.fn.spin = fn(function spinStart(firstArgs, maybeArgs) {\n let args = { size: 'small' };\n if (typeof maybeArgs === 'object') {\n args = $.extend(args, maybeArgs)\n }\n if (typeof firstArgs === 'object') {\n args = $.extend(args, firstArgs);\n }\n if (typeof firstArgs === 'string') {\n args.size = firstArgs;\n }\n if (typeof firstArgs === 'boolean' && firstArgs === false) {\n return this.spinStop();\n }\n\n return this.each(function() {\n if (!this || !this.nodeType) { return; }\n const $this = $(this);\n const data = $this.data();\n if (data) {\n const $spinnerDom = $('<aui-spinner filled></aui-spinner>');\n $spinnerDom.attr('size', args.size); // the web component handles validation\n $spinnerDom.css('color', args.color);\n\n $this.spinStop();\n $this.append($spinnerDom);\n // AUI-4819 - ensure web component is initialised synchronously.\n skate.init(this);\n\n data.spinner = $spinnerDom;\n }\n });\n}, 'jQuery.fn.spin', {\n sinceVersion: '7.9.4',\n removeInVersion: '10.0.0',\n alternativeName: '<aui-spinner>'\n});\n\n/**\n * @deprecated since AUI 7.9.4. Use the `<aui-spinner>` web component directly.\n */\n$.fn.spinStop = fn(function spinStop() {\n return this.each(function() {\n if (!this || !this.nodeType) { return; }\n const $this = $(this);\n const data = $this.data();\n if (data && data.spinner) {\n data.spinner.remove();\n\n delete data.spinner;\n }\n });\n}, 'jQuery.fn.spinStop', {\n sinceVersion: '7.9.4',\n removeInVersion: '10.0.0',\n alternativeName: '<aui-spinner>'\n});\n","import skate from '../skate';\nimport escapeHtml from '../../escape-html';\n\nexport default skate('aui-option', {\n created: function (element) {\n Object.defineProperty(element, 'value', {\n get: function () {\n return element.getAttribute('value') || escapeHtml(this.textContent);\n },\n set: function (value) {\n element.setAttribute('value', value);\n }\n });\n },\n prototype: {\n serialize: function () {\n var json = {};\n if (this.hasAttribute('img-src')) {\n json['img-src'] = encodeURI(this.getAttribute('img-src'));\n }\n json.value = this.value;\n json.label = escapeHtml(this.textContent);\n\n return json;\n }\n }\n});\n","import { bindAll, extend, first, isFunction, pluck } from 'underscore';\nimport Backbone from 'backbone';\nimport globalize from './internal/globalize';\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 */\nvar ProgressiveDataSet = Backbone.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 (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 bindAll(this, 'query', 'respond');\n },\n\n url: function () {\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) {\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\n remote.always(() => {\n this.activeQueryCount--;\n this.trigger('activity', {activity: !!this.activeQueryCount});\n });\n\n remote.done((resp, succ, xhr) => {\n this.addQueryCache(query, resp, xhr);\n });\n remote.done(() => {\n query = this.value;\n results = this.getFilteredResults(query);\n this.respond(query, results);\n });\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 (query) {\n var params = isFunction(this._queryData) ? this._queryData(query) : this._queryData;\n var data = 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 (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 = Backbone.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 (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 (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 (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 = 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 (query, response, xhr) {\n var cache = this.queryCache;\n var results = this.parse(response, xhr);\n cache[query] = 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 (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 (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 (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 (number) {\n this._maxResults = number;\n this.value && this.respond(this.value, this.getFilteredResults(this.value));\n }\n});\n\nglobalize('ProgressiveDataSet', ProgressiveDataSet);\n\nexport default ProgressiveDataSet;\n","import Backbone from 'backbone';\n\nexport default Backbone.Model.extend({\n idAttribute: 'value',\n getLabel: function () {\n return this.get('label') || this.get('value');\n }\n});\n","\nfunction SuggestionsModel () {\n this._suggestions = [];\n this._activeIndex = -1;\n}\n\nSuggestionsModel.prototype = {\n onChange: function () {},\n\n onHighlightChange: function () {},\n\n get: function (index) {\n return this._suggestions[index];\n },\n\n set: function (suggestions) {\n var oldSuggestions = this._suggestions;\n this._suggestions = suggestions || [];\n this.onChange(oldSuggestions);\n return this;\n },\n\n getNumberOfResults: function () {\n return this._suggestions.length;\n },\n\n setHighlighted: function (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 (index) {\n this._activeIndex = index;\n this.onHighlightChange();\n return this;\n },\n\n highlightPrevious: function () {\n const current = this._activeIndex;\n const previousActiveIndex = (current === 0) ? this._suggestions.length - 1 : (current - 1);\n this.highlight(previousActiveIndex);\n return this;\n },\n\n highlightNext: function () {\n const current = this._activeIndex;\n const nextActiveIndex = (current === this._suggestions.length - 1) ? 0 : (current + 1);\n this.highlight(nextActiveIndex);\n return this;\n },\n\n highlighted: function () {\n return this.get(this._activeIndex);\n },\n\n highlightedIndex: function () {\n return this._activeIndex;\n }\n};\n\nexport default SuggestionsModel;\n","import $ from '../../jquery';\nimport { I18n } from '../../i18n';\nimport Alignment from '../alignment';\nimport layer from '../../layer';\n\nfunction generateListItemID (listId, index) {\n return listId + '-' + index;\n}\n\n/**\n *\n * @param view SuggestionsView\n */\nfunction enableAlignment (view) {\n if (view.anchor && !view._auiAlignment) {\n view._auiAlignment = new Alignment(view.el, view.anchor, {\n flipContainer: 'scrollParent',\n positionFixed: false,\n preventOverflow: false,\n flip: false\n });\n }\n\n if (view._auiAlignment) {\n view._auiAlignment.enable();\n view._auiAlignment.scheduleUpdate();\n }\n}\n\nfunction disableAlignment (view) {\n if (view._auiAlignment) {\n view._auiAlignment.disable();\n }\n}\n\nfunction destroyAlignment (view) {\n if (view._auiAlignment) {\n view._auiAlignment.destroy();\n delete view._auiAlignment;\n }\n}\n\nfunction matchWidth (view) {\n $(view.el).css('min-width', $(view.anchor).outerWidth());\n}\n\nfunction SuggestionsView (element, anchor) {\n this.el = element;\n this.anchor = anchor;\n}\n\nfunction clearActive (element) {\n $(element).find('.aui-select-active').removeClass('aui-select-active');\n}\n\nSuggestionsView.prototype = {\n render: function (suggestions, currentLength, listId, selected) {\n this.currListId = listId;\n let html = '';\n\n // Do nothing if we have no new suggestions, otherwise append anything else we find.\n if (suggestions.length) {\n for (let i = 0; i < suggestions.length; i++) {\n const suggestion = suggestions[i];\n const currentIndex = i + currentLength;\n const label = suggestion.getLabel();\n const imageSrc = suggestion.get('img-src');\n const image = imageSrc ? `<img src=\"${encodeURI(imageSrc)}\"/>` : '';\n const newValueText = suggestion.get('new-value') ? (` (<em>${I18n.getText('aui.select.new.value')}</em>)`) : '';\n html += `<li role=\"option\" class=\"aui-select-suggestion\" aria-selected=\"${selected === currentIndex}\" id=\"${generateListItemID(listId, currentIndex)}\">${image}${label}${newValueText}</li>`;\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\">${I18n.getText('aui.select.no.suggestions')}</li>`;\n }\n\n return this;\n },\n setActive: function (active) {\n clearActive(this.el);\n $(this.el).find('#' + generateListItemID(this.currListId, active)).addClass('aui-select-active');\n },\n getActive: function () {\n return this.el.querySelector('.aui-select-active');\n },\n show: function () {\n matchWidth(this);\n layer(this.el).show();\n enableAlignment(this);\n },\n hide: function () {\n clearActive(this.el);\n layer(this.el).hide();\n disableAlignment(this);\n },\n destroy: function () {\n this.hide();\n destroyAlignment(this);\n delete this.currListId;\n },\n isVisible: function () {\n return $(this.el).is(':visible');\n }\n};\n\nexport default SuggestionsView;\n","import template from 'skatejs-template-html';\n\nexport default template(`\n <input type=\"text\" class=\"text\" role=\"combobox\" aria-expanded=\"false\">\n <select></select>\n <datalist>\n <content select=\"aui-option\"></content>\n </datalist>\n <button class=\"aui-button\" tabindex=\"-1\" type=\"button\"></button>\n <div class=\"aui-popover\" data-aui-alignment=\"bottom left\" hidden>\n <ul role=\"listbox\" class=\"aui-optionlist\"></ul>\n </div>\n <div class=\"aui-select-status assistive\" aria-live=\"polite\" role=\"status\"></div>\n`);\n","import $ from './jquery';\nimport './button';\nimport { I18n } from './i18n';\nimport './spin';\nimport Option from './internal/select/option';\nimport amdify from './internal/amdify';\nimport CustomEvent from './polyfills/custom-event';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport ProgressiveDataSet from './progressive-data-set';\nimport skate from './internal/skate';\nimport state from './internal/state';\nimport SuggestionModel from './internal/select/suggestion-model';\nimport SuggestionsModel from './internal/select/suggestions-model';\nimport SuggestionsView from './internal/select/suggestions-view';\nimport template from './internal/select/template';\nimport uniqueId from './unique-id';\nimport { INPUT_SUFFIX } from './internal/constants';\nimport { ifGone } from './internal/elements';\n\nconst DESELECTED = -1;\nconst NO_HIGHLIGHT = -1;\nconst DEFAULT_SS_PDS_SIZE = 20;\nconst ASSISTIVE_STATUS_DELAY_MS = 50;\n\nfunction decodeHtmlEntities(input) {\n var doc = new DOMParser().parseFromString(input, 'text/html');\n return doc.documentElement.textContent;\n}\n\nfunction clearElementImage(element) {\n element._input.removeAttribute('style');\n $(element._input).removeClass('aui-select-has-inline-image');\n}\n\nfunction deselect(element) {\n element._select.selectedIndex = DESELECTED;\n clearElementImage(element);\n}\n\nfunction hasResults(element) {\n return element._suggestionModel.getNumberOfResults();\n}\n\nfunction waitForAssistive (callback) {\n setTimeout(callback, ASSISTIVE_STATUS_DELAY_MS);\n}\n\nfunction 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\nfunction setIdleState (element) {\n element._button.idle();\n element._input.setAttribute('aria-busy', 'false');\n element._dropdown.setAttribute('aria-busy', 'false');\n}\n\nfunction matchPrefix (model, query) {\n var value = model.get('label').toLowerCase();\n return value.indexOf(query.toLowerCase()) === 0;\n}\n\nfunction resetDropdown (element) {\n element._input.setAttribute('aria-expanded', 'false');\n element._button.setAttribute('aria-expanded', 'false');\n element._input.removeAttribute('aria-activedescendant');\n updateAssistiveStatus(element, '');\n}\n\nfunction resetAndCloseDropdown (element) {\n element._suggestionsView.hide();\n resetDropdown(element);\n}\n\nfunction setInitialVisualState (element) {\n var initialHighlightedItem = hasResults(element) ? 0 : NO_HIGHLIGHT;\n\n element._suggestionModel.highlight(initialHighlightedItem);\n\n resetAndCloseDropdown(element);\n}\n\nfunction setElementImage (element, imageSource) {\n $(element._input).addClass('aui-select-has-inline-image');\n element._input.setAttribute('style', 'background-image: url(' + encodeURI(imageSource) + ')');\n}\n\nfunction 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\nfunction setInputImageToHighlightedSuggestion (element) {\n var imageSource = (element._suggestionModel.highlighted() && element._suggestionModel.highlighted().get('img-src'));\n if (imageSource) {\n setElementImage(element, imageSource);\n }\n}\n\nfunction 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 var label = decodeHtmlEntities(model.getLabel());\n\n option.setAttribute('selected', '');\n option.setAttribute('value', value);\n option.textContent = label;\n\n // Sync element value.\n element._input.value = label;\n\n select.innerHTML = '';\n select.options.add(option);\n select.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n}\n\nfunction clearValue (element) {\n element._input.value = '';\n element._select.innerHTML = '';\n}\n\nfunction selectHighlightedSuggestion (element) {\n setValueAndDisplayFromModel(element, element._suggestionModel.highlighted());\n setInputImageToHighlightedSuggestion(element);\n resetAndCloseDropdown(element);\n}\n\nfunction convertOptionToModel (option) {\n return new SuggestionModel(option.serialize());\n}\n\nfunction 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/**\n * Replaces the suggestions with a new set.\n * @param element\n * @param data\n * @returns {boolean} true if the results are different from the previous set; false otherwise.\n */\nfunction clearAndSet (element, data) {\n const before = element._suggestionModel.getNumberOfResults();\n element._suggestionModel.set();\n element._suggestionModel.set(data.results);\n const after = element._suggestionModel.getNumberOfResults();\n return before !== after;\n}\n\nfunction getActiveId (select) {\n var active = select._dropdown.querySelector('.aui-select-active');\n return active && active.id;\n}\n\nfunction getIndexInResults (id, results) {\n var resultsIds = $.map(results, function (result) {\n return result.id;\n });\n\n return resultsIds.indexOf(id);\n}\n\nfunction createNewValueModel (element) {\n var option = new Option();\n option.setAttribute('value', element._input.value);\n var newValueSuggestionModel = convertOptionToModel(option);\n newValueSuggestionModel.set('new-value', true);\n return newValueSuggestionModel;\n}\n\nfunction initialiseProgressiveDataSet (element) {\n element._progressiveDataSet = new ProgressiveDataSet(convertOptionsToModels(element), {\n model: SuggestionModel,\n matcher: matchPrefix,\n queryEndpoint: element._queryEndpoint,\n maxResults: DEFAULT_SS_PDS_SIZE\n });\n\n element._isSync = !element._queryEndpoint;\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 state(element).set('should-flag-new-suggestions', false);\n } else {\n setIdleState(element);\n state(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 /* eslint-disable complexity */\n element._progressiveDataSet.on('respond', function (data) {\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 (state(element).get('should-cancel-response')) {\n if (!element._progressiveDataSet.activeQueryCount) {\n state(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 let indexOfValueInResults = getIndexInResults(element.value, data.results);\n indexOfValueInResults = indexOfValueInResults === -1 ? 0 : indexOfValueInResults;\n\n const resultsChanged = clearAndSet(element, data);\n const optionToHighlight = data.results[indexOfValueInResults];\n\n if (element._autoHighlight) {\n element._suggestionModel.setHighlighted(optionToHighlight);\n waitForAssistive(function () {\n const activeId = getActiveId(element);\n if (activeId !== undefined && activeId !== null) {\n element._input.setAttribute('aria-activedescendant', activeId);\n } else {\n element._input.removeAttribute('aria-activedescendant');\n }\n });\n }\n\n element._input.setAttribute('aria-expanded', 'true');\n element._button.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 && resultsChanged && element._suggestionsView.getActive() && state(element).get('should-flag-new-suggestions')) {\n element.querySelector('.aui-select-status').innerHTML = I18n.getText('aui.select.new.suggestions');\n }\n\n element._suggestionsView.show();\n });\n}\n\nfunction associateDropdownAndTrigger (element) {\n element._dropdown.id = element._listId;\n element.querySelector('button').setAttribute('aria-controls', element._listId);\n}\n\nfunction bindHighlightMouseover (element) {\n $(element._dropdown).on('mouseover', 'li', function (e) {\n if (hasResults(element)) {\n element._suggestionModel.highlight($(e.target).index());\n }\n });\n}\n\nexport function bindSelectMousedown (element) {\n let preventClosingContainerLayer = false;\n\n $(document).on('aui-close-layers-on-outer-click.single-select', e => {\n if (preventClosingContainerLayer) {\n e.preventDefault();\n preventClosingContainerLayer = false;\n }\n });\n\n $(element._dropdown).on('mousedown', 'li', function (e) {\n if (hasResults(element)) {\n element._suggestionModel.highlight($(e.target).index());\n selectHighlightedSuggestion(element);\n\n if ($(element).closest('.aui-layer').length > 0) {\n preventClosingContainerLayer = true;\n }\n } else {\n return false;\n }\n });\n}\n\nfunction updateAssistiveStatus (element, status) {\n clearTimeout(element.assistiveStatusTimerId);\n element.assistiveStatusTimerId = setTimeout(() => {\n const assistiveStatusText = element._assistiveStatus.innerText;\n if (status !== assistiveStatusText) {\n element._assistiveStatus.innerText = status;\n }\n }, ASSISTIVE_STATUS_DELAY_MS);\n}\n\nfunction initialiseValue (element) {\n var option = element._datalist.querySelector('aui-option[selected]');\n\n if (option) {\n setValueAndDisplayFromModel(element, convertOptionToModel(option));\n }\n}\n\nfunction isQueryInProgress (element) {\n return element._progressiveDataSet.activeQueryCount > 0;\n}\n\nfunction focusInHandler (element) {\n //if there is a selected value the single select should do an empty\n //search and return everything\n const searchValue = element.value ? '' : element._input.value;\n suggest(element, true, searchValue);\n}\n\nfunction cancelInProgressQueries (element) {\n if (isQueryInProgress(element)) {\n state(element).set('should-cancel-response', true);\n }\n}\n\nfunction getSelectedLabel(element) {\n if (element._select.selectedIndex >= 0) {\n return element._select.options[element._select.selectedIndex].textContent;\n }\n}\n\nfunction 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 var selection = getSelectedLabel(element);\n if (typeof selection === 'undefined') {\n deselect(element);\n } else {\n element._input.value = selection;\n }\n }\n }\n}\n\nfunction handleHighlightOnFocusOut(element) {\n // Forget the highlighted suggestion.\n element._suggestionModel.highlight(NO_HIGHLIGHT);\n}\n\nfunction focusOutHandler (element) {\n cancelInProgressQueries(element);\n handleInvalidInputOnFocusOut(element);\n handleHighlightOnFocusOut(element);\n resetAndCloseDropdown(element);\n}\n\nconst SelectEl = skate('aui-select', {\n template: template,\n created: function (element) {\n element._listId = uniqueId();\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._assistiveStatus = element.querySelector('.aui-select-status.assistive');\n element._suggestionsView = new SuggestionsView(element._dropdown, element._input);\n element._suggestionModel = new SuggestionsModel();\n\n element._suggestionModel.onChange = function (oldSuggestions) {\n const suggestionsToAdd = [];\n\n element._suggestionModel._suggestions.forEach(function (newSuggestion) {\n const inArray = oldSuggestions.some((oldSuggestion) => newSuggestion.id === oldSuggestion.id);\n if (!inArray) {\n suggestionsToAdd.push(newSuggestion);\n }\n });\n const results = convertOptionsToModels(element);\n const indexOfValueInResults = getIndexInResults(element.value, results);\n const numberOfItems = oldSuggestions.length + suggestionsToAdd.length;\n const status = numberOfItems ? '' : `${I18n.getText('aui.select.no.suggestions')}`;\n\n element._suggestionsView.render(suggestionsToAdd, oldSuggestions.length, element._listId, indexOfValueInResults);\n updateAssistiveStatus(element, status);\n };\n\n element._suggestionModel.onHighlightChange = function () {\n const active = element._suggestionModel.highlightedIndex();\n element._suggestionsView.setActive(active);\n\n const activeId = getActiveId(element);\n if (activeId !== undefined && activeId !== null) {\n element._input.setAttribute('aria-activedescendant', activeId);\n } else {\n element._input.removeAttribute('aria-activedescendant');\n }\n };\n },\n\n attached: function (element) {\n skate.init(element);\n initialiseProgressiveDataSet(element);\n associateDropdownAndTrigger(element);\n element._input.setAttribute('aria-controls', element._listId);\n bindHighlightMouseover(element);\n bindSelectMousedown(element);\n initialiseValue(element);\n setInitialVisualState(element);\n setInputImageToHighlightedSuggestion(element);\n },\n\n detached: function (element) {\n $(document).off('aui-close-layers-on-outer-click');\n ifGone(element).then(() => {\n resetAndCloseDropdown(element);\n element._suggestionsView.destroy();\n });\n },\n\n attributes: {\n id(element, data) {\n if (element.id) {\n element.querySelector('input').id = data.newValue + INPUT_SUFFIX;\n }\n },\n\n name(element, data) {\n element.querySelector('select').setAttribute('name', data.newValue);\n element.querySelector('select').setAttribute('aria-label', `${data.newValue} list`);\n element.querySelector('button').setAttribute('aria-label', `${data.newValue} list`);\n element.querySelector('ul[role=\"listbox\"]').setAttribute('aria-label', `${data.newValue} list`);\n },\n\n placeholder(element, data) {\n element.querySelector('input').setAttribute('placeholder', data.newValue);\n },\n\n src(element, data) {\n element._queryEndpoint = data.newValue;\n }\n },\n\n events: {\n 'blur input': function (element) {\n focusOutHandler(element);\n },\n\n 'mousedown button': function (element) {\n if (document.activeElement === element._input && !element._dropdown.hasAttribute('hidden')) {\n state(element).set('prevent-open-on-button-click', true);\n }\n },\n\n 'click input': function (element) {\n focusInHandler(element);\n },\n\n 'click button': function (element) {\n var data = state(element);\n\n if (data.get('prevent-open-on-button-click')) {\n data.set('prevent-open-on-button-click', false);\n } else {\n state(element).set('button-clicked-prevent-dropdown-hide', true);\n element.focus();\n }\n },\n\n input: function (element) {\n if (!element._input.value) {\n if (state(element).get('button-clicked-prevent-dropdown-hide')) {\n state(element).set('button-clicked-prevent-dropdown-hide', false);\n } else {\n resetAndCloseDropdown(element);\n }\n } else {\n suggest(element, true);\n }\n },\n\n 'keydown input': function (element, e) {\n var currentValue = element._input.value;\n var handled = false;\n\n if (e.keyCode === keyCode.ESCAPE) {\n cancelInProgressQueries(element);\n // There is no need to hide layer manually here. It will be handled by layering system.\n // Otherwise, it can fire ESC event to the next layer, so\n // it will close the next ESCapable layer.\n // The only what we need is clean the state of the component.\n resetDropdown(element);\n return;\n }\n\n var isSuggestionViewVisible = element._suggestionsView.isVisible();\n\n if (isSuggestionViewVisible && hasResults(element)) {\n if (e.keyCode === keyCode.ENTER) {\n cancelInProgressQueries(element);\n selectHighlightedSuggestion(element);\n e.preventDefault();\n } else if (e.keyCode === keyCode.TAB) {\n selectHighlightedSuggestion(element);\n handled = true;\n } else if (e.keyCode === keyCode.UP) {\n element._suggestionModel.highlightPrevious();\n e.preventDefault();\n } else if (e.keyCode === keyCode.DOWN) {\n element._suggestionModel.highlightNext();\n e.preventDefault();\n }\n } else if (e.keyCode === keyCode.UP || e.keyCode === keyCode.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 CustomEvent('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({ value }) || data.findWhere({ label: value });\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 SuggestionModel({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 () {\n this._input.blur();\n focusOutHandler(this);\n return this;\n },\n\n focus: function () {\n this._input.focus();\n focusInHandler(this);\n return this;\n }\n }\n});\n\namdify('aui/select', SelectEl);\nglobalize('select', SelectEl);\nexport default SelectEl;\n","/**\n * Like el.hasAttribute(attr) but designed for use within a skate attribute\n * change handler where you only have access to change.oldValue.\n */\nexport function computeBooleanValue(attrValue) {\n return attrValue !== null;\n}\n\nexport function setBooleanAttribute(el, attr, newValue) {\n if (newValue) {\n el.setAttribute(attr, '');\n } else {\n el.removeAttribute(attr);\n }\n}\n\nexport function computeEnumValue(enumOptions, value) {\n const matchesEnumValue = enumValue => enumValue.toLowerCase() === value.toLowerCase();\n\n const isMissing = value === null;\n const isInvalid = !isMissing && !enumOptions.values.filter(matchesEnumValue).length;\n\n if (isMissing) {\n if (enumOptions.hasOwnProperty('missingDefault')) {\n return enumOptions.missingDefault;\n }\n return null;\n }\n\n if (isInvalid) {\n if (enumOptions.hasOwnProperty('invalidDefault')) {\n return enumOptions.invalidDefault;\n } else if (enumOptions.hasOwnProperty('missingDefault')) {\n return enumOptions.missingDefault;\n }\n return null;\n }\n\n return enumOptions.values.length ? enumOptions.values.filter(matchesEnumValue)[0] : null;\n}\n\n\nexport function setEnumAttribute(el, enumOptions, newValue) {\n el.setAttribute(enumOptions.attribute, newValue);\n}\n\n/**\n * Helper functions useful for implementing reflected boolean and enumerated\n * attributes and properties.\n *\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#reflecting-content-attributes-in-idl-attributes\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#boolean-attribute\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#enumerated-attribute\n */\nexport default {\n computeBooleanValue,\n setBooleanAttribute,\n\n computeEnumValue,\n setEnumAttribute\n};\n","import './spin';\nimport './tooltip';\nimport $ from './jquery';\nimport { setBooleanAttribute } from './internal/attributes';\nimport { supportsFocusWithin } from './internal/browser';\nimport enforce from './internal/enforcer';\nimport keyCode from './key-code';\nimport skateTemplateHtml from 'skatejs-template-html';\nimport skate from './internal/skate';\nimport { INPUT_SUFFIX } from './internal/constants';\nimport CustomEvent from './polyfills/custom-event';\nimport SpinnerEl, {SIZE} from './spinner';\nimport { I18n } from './i18n'\n\nfunction fireChangeEvent(element) {\n if (element._canFireEventsNow) {\n element.dispatchEvent(new CustomEvent('change', { bubbles: true }));\n }\n}\n\nfunction getInput (element) {\n return element._input || (element._input = element.querySelector('input'));\n}\n\nfunction getSpinner (element) {\n return element._spinner || (element._spinner = new SpinnerEl());\n}\n\nfunction removedAttributeHandler(attributeName, element) {\n getInput(element).removeAttribute(attributeName);\n}\n\nfunction fallbackAttributeHandler(attributeName, element, change) {\n getInput(element).setAttribute(attributeName, change.newValue);\n}\n\nfunction getAttributeHandler (attributeName) {\n return {\n removed: removedAttributeHandler.bind(this, attributeName),\n fallback: fallbackAttributeHandler.bind(this, attributeName)\n };\n}\n\nconst formAttributeHandler = {\n removed: function (element) {\n removedAttributeHandler.call(this, 'form', element);\n element._formId = null;\n },\n fallback: function (element, change) {\n fallbackAttributeHandler.call(this, 'form', element, change);\n element._formId = change.newValue;\n }\n};\n\nconst idAttributeHandler = {\n removed: removedAttributeHandler.bind(this, 'id'),\n fallback: function (element, change) {\n const val = `${change.newValue}${INPUT_SUFFIX}`;\n getInput(element).setAttribute('id', val);\n }\n};\n\nconst valueAttributeHandler = {\n removed: function(element) {\n removedAttributeHandler.call(this, 'value', element);\n // Internet Explorer 11 has a bug where it doesn't clear out the previous value\n // when the attribute is removed.\n getInput(element).value = 'on';\n },\n fallback: function (element, change) {\n fallbackAttributeHandler.call(this, 'value', element, change);\n }\n};\n\nconst checkedAttributeHandler = {\n removed: function (element) {\n getInput(element).checked = false;\n },\n fallback: function (element) {\n getInput(element).checked = true;\n }\n};\n\nconst labelHandler = {\n removed: function (element) {\n getInput(element).removeAttribute('aria-label');\n },\n fallback: function (element, change) {\n getInput(element).setAttribute('aria-label', change.newValue);\n }\n};\n\nfunction clickHandler(element, e) {\n const input = getInput(element);\n if (!element.disabled && !element.busy && e.target !== input) {\n input.checked = !input.checked;\n fireChangeEvent(element);\n }\n\n setBooleanAttribute(element, 'checked', input.checked);\n}\n\nfunction 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 */\nfunction bindEventsToInput(element) {\n getInput(element).addEventListener('keydown', function (e) {\n if (element.busy && e.keyCode === 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 getInput(element).addEventListener('click', function (e) {\n if (element.busy) {\n e.preventDefault();\n }\n });\n }\n // support focus-within manually when necessary\n if (!supportsFocusWithin()) {\n element._input.addEventListener('focus', () => element.classList.add('active'));\n element._input.addEventListener('blur', () => element.classList.remove('active'));\n }\n}\n\nconst ToggleEl = skate('aui-toggle', {\n // \"assistive\" class avoids direct interaction with the <input> element\n // (which prevents our click handler from being called),\n // while allow the element to still participate in the form.\n template: skateTemplateHtml(\n '<input type=\"checkbox\" role=\"switch\" class=\"aui-toggle-input assistive\">',\n '<span class=\"aui-toggle-view\">',\n '<span class=\"aui-toggle-tick aui-icon aui-icon-small aui-iconfont-success\"></span>',\n '<span class=\"aui-toggle-cross aui-icon aui-icon-small aui-iconfont-close-dialog\"></span>',\n '</span>'\n ),\n created: function (element) {\n getInput(element); // avoid using _input in attribute handlers\n getSpinner(element).setAttribute('size', SIZE.SMALL.name);\n\n $(getInput(element)).tooltip({\n title: function () {\n return this.checked ? this.getAttribute('tooltip-on') : this.getAttribute('tooltip-off');\n },\n gravity: 's',\n hoverable: false\n });\n bindEventsToInput(element);\n if (element.hasAttribute('checked')) {\n getInput(element).setAttribute('checked', '');\n }\n element._canFireEventsNow = true;\n },\n attached: function (element) {\n enforce(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: valueAttributeHandler,\n 'tooltip-on': {\n value: I18n.getText('aui.toggle.on'),\n fallback: function (element, change) {\n getInput(element).setAttribute('tooltip-on', change.newValue || I18n.getText('aui.toggle.on'));\n }\n },\n 'tooltip-off': {\n value: I18n.getText('aui.toggle.off'),\n fallback: function (element, change) {\n getInput(element).setAttribute('tooltip-off', change.newValue || I18n.getText('aui.toggle.off'));\n }\n },\n label: labelHandler\n },\n prototype: {\n focus: function () {\n getInput(this).focus();\n return this;\n },\n get checked () {\n return getInput(this).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 if (getInput(this).checked !== value) {\n getInput(this).checked = value;\n setBooleanAttribute(this, 'checked', value);\n }\n },\n get disabled () {\n // AUI-4958 - this may be accessed by a jQuery event handler in response to\n // a DOMNodeInserted event being fired. In this scenario, the `template`\n // function has been called by skate, but the `created` callback has not.\n return getInput(this).disabled;\n },\n set disabled (value) {\n return 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 getInput(this).name;\n },\n set name (value) {\n this.setAttribute('name', value);\n return value;\n },\n get value () {\n return getInput(this).value;\n },\n set value (value) { // Setting the value of an input to null sets it to empty string.\n let newVal = value === null ? '' : value;\n this.setAttribute('value', newVal);\n return newVal;\n },\n get busy () {\n return getInput(this).getAttribute('aria-busy') === 'true';\n },\n set busy (value) {\n const input = getInput(this);\n const spinner = getSpinner(this);\n\n setBooleanAttribute(this, 'busy', value);\n\n if (value) {\n input.setAttribute('aria-busy', 'true');\n input.indeterminate = true;\n if (this.checked) {\n input.classList.add('indeterminate-checked');\n $(this.querySelector('.aui-toggle-tick')).append(spinner);\n } else {\n $(this.querySelector('.aui-toggle-cross')).append(spinner);\n }\n } else {\n input.classList.remove('indeterminate-checked');\n input.indeterminate = false;\n input.removeAttribute('aria-busy');\n if (spinner.parentNode) {\n spinner.parentNode.removeChild(this._spinner);\n }\n }\n setDisabledForLabels(this, !!value);\n return value;\n }\n }\n});\n\nexport default ToggleEl;\n","import $ from './jquery';\nimport Alignment from './internal/alignment';\nimport amdify from './internal/amdify';\nimport attributes, {setBooleanAttribute} from './internal/attributes';\nimport enforce from './internal/enforcer';\nimport globalize from './internal/globalize';\nimport layer, {EVENT_PREFIX} from './layer';\nimport skate from './internal/skate';\nimport state from './internal/state';\nimport {doIfTrigger, forEachTrigger, getTrigger, setTrigger} from './trigger';\nimport {ifGone} from './internal/elements';\nimport getFocusManager from './focus-manager';\n\nconst DEFAULT_HOVEROUT_DELAY = 1000;\n\nfunction changeTrigger(element, newTrigger) {\n if (isPopupMenu(element)) {\n doIfTrigger(element, function(oldTrigger) {\n oldTrigger.setAttribute('aria-expanded', 'false');\n newTrigger.setAttribute('aria-expanded', element.open);\n });\n }\n\n setTrigger(element, newTrigger);\n}\n\nfunction enableAlignment (element, trigger) {\n if (element._auiAlignment) {\n element._auiAlignment.changeTarget(trigger);\n element._auiAlignment.enable()\n } else {\n let alignmentOptions = {\n overflowContainer: element.getAttribute('contained-by') === 'viewport' ? 'viewport' : 'window',\n positionFixed: false,\n eventsEnabled: true\n };\n\n element._auiAlignment = new Alignment(element, trigger, alignmentOptions);\n }\n}\n\nfunction disableAlignment (element) {\n if (element._auiAlignment) {\n element._auiAlignment.disable();\n }\n}\n\nfunction destroyAlignment (element) {\n if (element._auiAlignment) {\n element._auiAlignment.destroy();\n delete element._auiAlignment;\n }\n}\n\nfunction userInteractingWith(element) {\n return state(element).get('mouse-inside') || element.contains(document.activeElement);\n}\n\nfunction showOnEnter(element, e) {\n var newTrigger = e.currentTarget;\n if (newTrigger) {\n changeTrigger(element, newTrigger);\n enableAlignment(element, newTrigger);\n }\n\n if (!element.open) {\n element.open = true;\n }\n\n clearTimeout(element._closingTimeout);\n}\n\nfunction closeAfter (delay = 0) {\n return function closing(element) {\n if (!element.open || layer(element).isPersistent()) {\n return;\n }\n\n clearTimeout(element._closingTimeout);\n element._closingTimeout = setTimeout(function () {\n if (!userInteractingWith(element)) {\n element.open = false;\n }\n element._closingTimeout = null;\n }, delay);\n }\n}\n\nconst messageHandler = {\n click(element, e) {\n if (element.open && !layer(element).isPersistent()) {\n element.open = false;\n } else {\n changeTrigger(element, e.currentTarget);\n element.open = true;\n }\n\n clearTimeout(element._closingTimeout);\n },\n\n mouseenter: showOnEnter,\n mouseleave: closeAfter(DEFAULT_HOVEROUT_DELAY),\n\n focus: showOnEnter,\n blur: closeAfter(0),\n};\n\nfunction handleMessage (element, message) {\n var messageTypeMap = {\n toggle: ['click'],\n hover: ['mouseenter', 'mouseleave', 'focus', 'blur']\n };\n\n var messageList = messageTypeMap[element.respondsTo];\n if (messageList && messageList.indexOf(message.type) > -1) {\n messageHandler[message.type](element, message);\n }\n}\n\nfunction onMouseEnter(e) {\n var element = e.currentTarget;\n state(element).set('mouse-inside', true);\n element.message({\n type: 'mouseenter'\n });\n}\n\nfunction onMouseLeave(e) {\n var element = e.currentTarget;\n state(element).set('mouse-inside', false);\n element.message({\n type: 'mouseleave'\n });\n}\n\nfunction onBlur(e) {\n var element = e.currentTarget;\n if (element.respondsTo === 'hover') {\n closeAfter(DEFAULT_HOVEROUT_DELAY)(element);\n }\n}\n\nfunction rebindMouseEvents(el) {\n state(el).set('mouse-inside', undefined);\n el.removeEventListener('mouseenter', onMouseEnter);\n el.removeEventListener('mouseleave', onMouseLeave);\n el.removeEventListener('blur', onBlur)\n\n if (el.respondsTo === 'hover') {\n state(el).set('mouse-inside', false);\n el.addEventListener('mouseenter', onMouseEnter);\n el.addEventListener('mouseleave', onMouseLeave);\n el.addEventListener('blur', onBlur);\n }\n}\n\nfunction namespaceEvent(eventName, elId) {\n return `${eventName}.nested-layer-${elId}`\n}\n\nfunction setupNestedLayerHandlers(el) {\n let $el = $(el);\n const elId = el.id;\n const noNestedTriggers = e => {\n return $el.find(getTrigger(e.target)).length < 1;\n };\n // Temporary timeout variable to resolve AUI-5025 issue\n // as described in further detail below.\n const selectCloseTimeout = 150;\n\n $(document)\n .on(namespaceEvent('aui-layer-show', elId), e => {\n if (noNestedTriggers(e)) {\n return;\n }\n $el.attr('persistent', '');\n })\n .on(namespaceEvent('aui-layer-hide', elId), e => {\n if (noNestedTriggers(e)) {\n return;\n }\n $el.removeAttr('persistent');\n })\n .on(namespaceEvent('select2-opening', elId), () => {\n $el.attr('persistent', '');\n })\n // Relates to solving AUI-5025\n // Temporary solution to race condition with select2,\n // where this runs before select2's dropdown is closed.\n .on(namespaceEvent('select2-close', elId), () => {\n setTimeout(() => {\n $el.removeAttr('persistent');\n }, selectCloseTimeout);\n });\n}\n\nfunction teardownNestedLayerHandlers(elId) {\n $(document)\n .off(namespaceEvent('aui-layer-hide', elId))\n .off(namespaceEvent('aui-layer-show', elId))\n .off(namespaceEvent('select2-opening', elId))\n .off(namespaceEvent('select2-close', elId));\n}\n\n/**\n * @param element the inline dialog to show\n * @returns {boolean} true if the show was successful, false if it was prevented.\n */\nfunction maybeShow(element) {\n layer(element).show();\n return layer(element).isVisible() === true;\n}\n\n/**\n * @param element the inline dialog to hide\n * @returns {boolean} true if the hide was successful, false if it was prevented.\n */\nfunction maybeHide(element) {\n layer(element).hide();\n return layer(element).isVisible() === false;\n}\n\nfunction shouldFocus(element) {\n return element.respondsTo !== 'hover';\n}\n\nfunction isPopupMenu(element) {\n return element.getAttribute('role') !== 'dialog';\n}\n\n/**\n * Abstracted as skate fires custom attributes handlers before the component creation if they are pre-populated.\n *\n * @param element the inline dialog to initialise\n * @returns {undefined}\n */\n\nfunction maybeInitialise(element) {\n // One to rule them all\n if (element.__initialised) {\n return;\n }\n\n layer(element);\n $(element).on({\n // fired only after the layer is shown\n [`${EVENT_PREFIX}show`]: function(e) {\n const el = this;\n // This handler can be fired by nested layer/component.\n // We need to be sure that the event was triggered by the inline dialog;\n if (e.target !== el) {\n // otherwise skip.\n return;\n }\n\n setupNestedLayerHandlers(el);\n doIfTrigger(el, function (trigger) {\n if (shouldFocus(el)) {\n // Focus manager will focus the popup and link popup to the trigger.\n getFocusManager().enter($(el), $(trigger));\n }\n\n enableAlignment(el, trigger);\n\n if (isPopupMenu(el)) {\n trigger.setAttribute('aria-expanded', 'true');\n }\n });\n },\n // fired only after the layer is hidden\n [`${EVENT_PREFIX}hide`]: function(e) {\n const el = this;\n // This handler can be fired by nested layer/component.\n // We need to be sure that the event was triggered by the inline dialog;\n if (e.target !== el) {\n // otherwise skip.\n return;\n }\n\n teardownNestedLayerHandlers(el.id);\n // in case the element has been removed from DOM already\n // disablingAlignment may fail if trigger is an anchor due to Popper's logic\n // wrongly recognising it as ShadowRoot\n if (el.ownerDocument.body.contains(el)) {\n disableAlignment(el);\n } else {\n destroyAlignment(el);\n }\n doIfTrigger(el, function (trigger) {\n if (shouldFocus(el)) {\n // Focus manager will focus the trigger that is linked with the popup element.\n getFocusManager().exit($(el));\n }\n if (isPopupMenu(el)) {\n trigger.setAttribute('aria-expanded', 'false');\n }\n });\n setTrigger(el, null);\n }\n });\n\n element.__initialised = true;\n}\n\nconst RESPONDS_TO_ATTRIBUTE_ENUM = {\n attribute: 'responds-to',\n values: ['toggle', 'hover'],\n missingDefault: 'toggle',\n invalidDefault: 'toggle'\n};\n\nconst InlineDialogEl = skate('aui-inline-dialog', {\n prototype: {\n /**\n * Returns whether the inline dialog is open.\n */\n get open() {\n return layer(this).isVisible();\n },\n\n /**\n * Opens or closes the inline dialog, returning whether the dialog is\n * open or closed as a result (since event handlers can prevent either\n * action).\n *\n * You should check the value of open after setting this\n * value since the before show/hide events may have prevented it.\n */\n set open(value) {\n // a flag to help avoid things getting called a second time via the attribute mutation handler\n this.__propUpdate = true;\n if (value) {\n maybeShow(this)\n } else {\n maybeHide(this);\n }\n },\n\n get persistent() {\n return this.hasAttribute('persistent');\n },\n\n set persistent(value) {\n attributes.setBooleanAttribute(this, 'persistent', value);\n },\n\n get respondsTo() {\n var attr = RESPONDS_TO_ATTRIBUTE_ENUM.attribute;\n return attributes.computeEnumValue(RESPONDS_TO_ATTRIBUTE_ENUM, this.getAttribute(attr));\n },\n\n set respondsTo(value) {\n const oldComputedValue = this.respondsTo;\n attributes.setEnumAttribute(this, RESPONDS_TO_ATTRIBUTE_ENUM, value);\n if (oldComputedValue !== this.respondsTo) {\n rebindMouseEvents(this);\n }\n },\n\n /**\n * Handles the receiving of a message from another component.\n *\n * @param {Object} msg The message to act on.\n *\n * @returns {HTMLElement}\n */\n message: function (msg) {\n handleMessage(this, msg);\n return this;\n }\n },\n attributes: {\n open: function (element, change) {\n maybeInitialise(element);\n\n if (element.__propUpdate) {\n // prevent property updates cascading in to sync or async attribute updates\n delete element.__propUpdate;\n return;\n }\n if (change.type === 'created') {\n const success = maybeShow(element);\n if (!success) {\n setBooleanAttribute(element, 'open', false);\n }\n }\n if (change.type === 'removed') {\n const success = maybeHide(element);\n if (!success) {\n setBooleanAttribute(element, 'open', true);\n }\n }\n },\n 'responds-to': function (element, change) {\n const oldComputedValue = attributes.computeEnumValue(RESPONDS_TO_ATTRIBUTE_ENUM, change.oldValue);\n const newComputedValue = attributes.computeEnumValue(RESPONDS_TO_ATTRIBUTE_ENUM, change.newValue);\n if (oldComputedValue !== newComputedValue) {\n rebindMouseEvents(element);\n }\n }\n },\n\n created: maybeInitialise,\n\n attached: function (element) {\n enforce(element).attributeExists('id');\n element.setAttribute('tabindex', 0);\n if (isPopupMenu(element)) {\n element.setAttribute('role', 'group');\n doIfTrigger(element, function (trigger) {\n trigger.setAttribute('aria-expanded', element.open);\n });\n forEachTrigger(element, function (trigger) {\n trigger.setAttribute('aria-haspopup', 'true');\n });\n }\n rebindMouseEvents(element);\n },\n\n detached: function (element) {\n ifGone(element).then(() => {\n destroyAlignment(element);\n\n if (isPopupMenu(element)) {\n forEachTrigger(element, function (trigger) {\n trigger.removeAttribute('aria-haspopup');\n trigger.removeAttribute('aria-expanded');\n });\n }\n });\n },\n\n template: function (element) {\n $('<div class=\"aui-inline-dialog-contents\"></div>')\n .append(element.childNodes)\n .appendTo(element);\n }\n});\n\namdify('aui/inline-dialog2', InlineDialogEl);\nglobalize('InlineDialog2', InlineDialogEl);\nexport default InlineDialogEl;\n","import { I18n } from './i18n';\nimport $ from './jquery';\nimport skate from './internal/skate';\nimport globalize from './internal/globalize';\nimport widget from './internal/widget';\n\n/**\n * Navigation (\".aui-nav\" elements).\n *\n * @param {(string|HtmlElement|jQuery)} selector - An expression\n * representing a single .aui-nav element; you may also pass an expression\n * for a descendent element, in which case the closest containing\n * .aui-nav element is used.\n * @constructor\n */\nfunction Navigation (selector) {\n this.$el = $(selector).closest('.aui-nav');\n\n // If there are multiple objects, initialise them separately\n if (this.$el.length > 1) {\n return this.$el.map(function (idx, elm) {\n return new Navigation(elm);\n })[0];\n }\n\n // If already initialised, return existing object\n if (this.$el.data('aui-navigation')) {\n return this.$el.data('aui-navigation');\n }\n\n this.$el.data('aui-navigation', this);\n\n this.$treeParent = this.$el.parent('li[aria-expanded]');\n this.$subtreeToggleIcon = this.$treeParent\n .children('.aui-nav-subtree-toggle')\n .children('span.aui-icon');\n\n // Add child-selected class to relevant attributes\n this.$el.children('li:has(.aui-nav-selected)').addClass('aui-nav-child-selected');\n\n // Auto-expand if child is selected\n var $selected = this.$el.children('.aui-nav-selected');\n $selected\n .parents('.aui-nav > [aria-expanded=false]')\n .add($selected.filter('[aria-expanded=false]'))\n .each(function () {\n var nav = navigationWidget($(this).children('.aui-nav'));\n nav.expand();\n });\n\n // Toggle expand on click\n var $togglers = this.$el.find('> li[aria-expanded] > .aui-nav-subtree-toggle');\n $togglers.on('click', function () {\n var nav = navigationWidget($(this).siblings('.aui-nav'));\n nav.toggle();\n });\n\n // Make sure subtree togglers have proper a11y label\n $togglers.each(function () {\n var $parent = $(this).parent('li[aria-expanded]');\n var $icon = $(this).find('.aui-icon');\n var isListItemExpanded = $parent.attr('aria-expanded') === 'true';\n\n $icon.text(\n isListItemExpanded ?\n I18n.getText('aui.words.collapse') :\n I18n.getText('aui.words.expand')\n );\n })\n\n return this;\n}\n\nNavigation.prototype.isNested = function () {\n return this.$treeParent.length === 1;\n};\n\nNavigation.prototype.isCollapsed = function () {\n return this.$treeParent.attr('aria-expanded') === 'false';\n};\n\nNavigation.prototype.expand = function () {\n this.$treeParent.attr('aria-expanded', 'true');\n this.$subtreeToggleIcon\n .removeClass('aui-iconfont-collapsed')\n .addClass('aui-iconfont-expanded')\n .text(I18n.getText('aui.words.collapse'));\n return this;\n};\n\nNavigation.prototype.collapse = function () {\n this.$treeParent.attr('aria-expanded', 'false');\n this.$subtreeToggleIcon\n .removeClass('aui-iconfont-expanded')\n .addClass('aui-iconfont-collapsed')\n .text(I18n.getText('aui.words.expand'));\n return this;\n};\n\nNavigation.prototype.toggle = function () {\n if (this.isCollapsed()) {\n this.expand();\n } else {\n this.collapse();\n }\n return this;\n};\n\nconst navigationWidget = widget('navigation', Navigation);\n\n// Initialise nav elements\nconst NavigationEl = skate('aui-nav', {\n type: skate.type.CLASSNAME,\n attached: function (element) {\n new Navigation(element);\n },\n detached: function (element) {\n $(element).removeData();\n }\n});\n\nglobalize('navigation', navigationWidget);\n\nexport default navigationWidget;\nexport {\n NavigationEl\n};\n","import $ from './jquery';\nimport { defaults, isNumber, isFinite, isNaN } from 'underscore';\nimport skate from './internal/skate';\nimport { recomputeStyle } from './internal/animation';\nimport * as deprecate from './internal/deprecation';\nimport globalize from './internal/globalize';\n\nconst afterTransitionEvent = 'aui-progress-indicator-after-update';\nconst beforeTransitionEvent = 'aui-progress-indicator-before-update';\nconst transitionEnd = 'transitionend webkitTransitionEnd';\n\n\nfunction updateProgress($progressBar, $progressBarContainer, progressValue) {\n recomputeStyle($progressBar);\n $progressBar.css('width', progressValue * 100 + '%');\n $progressBarContainer.attr('data-value', progressValue);\n}\n\n\nfunction updateProgressElement(element, value) {\n if (typeof element === 'string') {\n let el = document.getElementById(element);\n if (el) {\n element = el;\n }\n }\n var $progressBarContainer = $(element).first();\n var $progressBar = $progressBarContainer.children('.aui-progress-indicator-value');\n var valueAttribute = $progressBarContainer.attr('data-value');\n var isIndeterminate = !valueAttribute;\n var currentProgress = parseFloat(valueAttribute) || 0;\n var isProgressNotChanged = valueAttribute && currentProgress === value;\n\n // AUI-4771 - check for mis-configured legacy progress bar HTML.\n if (isProgressNotChanged) {\n const currentDemonstratedValue = parseFloat($progressBar.get(0).style.width) || 0;\n isProgressNotChanged = currentProgress === (currentDemonstratedValue * 100);\n }\n\n if (isProgressNotChanged) {\n return;\n }\n\n //if the progress bar is indeterminate switch it.\n if (isIndeterminate) {\n $progressBar.css('width', 0);\n }\n\n transitionProgress($progressBar, $progressBarContainer, { currentProgress, value });\n\n return $progressBarContainer;\n}\n\nfunction transitionProgress(progressBar, progressBarContainer, { currentProgress, value }) {\n const $progressBar = $(progressBar);\n const $progressBarContainer = $(progressBarContainer);\n\n if (typeof value === 'number' && value <= 1 && value >= 0) {\n $progressBarContainer.trigger(beforeTransitionEvent, [currentProgress, value]);\n\n //trigger the event after transition end if supported, otherwise just trigger it\n $progressBar.one(transitionEnd, function () {\n $progressBarContainer.trigger(afterTransitionEvent, [currentProgress, value]);\n });\n updateProgress($progressBar, $progressBarContainer, value);\n }\n}\n\nfunction setIndeterminateOnProgressElement(element) {\n var $progressBarContainer = $(element).first();\n var $progressBar = $progressBarContainer.children('.aui-progress-indicator-value');\n\n $progressBarContainer.removeAttr('data-value');\n recomputeStyle($progressBarContainer);\n $progressBar.css('width', '');\n}\n\nconst DEFAULTS = {\n indeterminate: false,\n max: 1,\n val: 0,\n};\n\nfunction validNumeric(val) {\n return isNumber(val) && isFinite(val) && !isNaN(val);\n}\n\nfunction parseNumeric(val, defaultVal = 1) {\n const num = parseFloat(val);\n return validNumeric(num) ? num : Number(defaultVal);\n}\n\nfunction parseDecimal(num, precision = 1) {\n return Number(parseFloat(num).toFixed(precision));\n}\n\nfunction safeValue(val, max) {\n return Math.max(0, Math.min(val, max));\n}\n\nfunction safeMax(max) {\n return max > 0 ? max : DEFAULTS.max;\n}\n\n/**\n * @param data the state\n * @returns {{max: number, val: number, valAsFraction: number, valAsPercent: number}}\n */\nfunction calc(data) {\n const { val, max } = data;\n const parsedMax = safeMax(max);\n const parsedVal = safeValue(val, parsedMax);\n const valAsFraction = parseDecimal(parsedVal / parsedMax, 6);\n const valAsPercent = parseDecimal(valAsFraction * 100, 2);\n return {max: parsedMax, val: parsedVal, valAsFraction, valAsPercent};\n}\n\nfunction refresh(el) {\n const {val, valAsFraction, max} = calc(el._data);\n const bar = el.querySelector('.aui-progress-indicator');\n const oldVal = bar.getAttribute('data-value');\n\n if (el.indeterminate) {\n bar.removeAttribute('aria-valuenow');\n setIndeterminateOnProgressElement(bar);\n } else {\n bar.setAttribute('aria-valuenow', val);\n bar.setAttribute('aria-valuemax', max);\n transitionProgress(bar.querySelector('.aui-progress-indicator-value'), bar, {\n currentProgress: oldVal,\n value: valAsFraction\n });\n }\n}\n\nfunction setValue(el, data) {\n el._data.val = parseNumeric(data.newValue, data.oldValue || DEFAULTS.val);\n refresh(el);\n}\n\nfunction setMax(el, data) {\n el._data.max = parseNumeric(data.newValue, data.oldValue || DEFAULTS.max);\n refresh(el);\n}\n\nconst ProgressBarEl = skate('aui-progressbar', {\n template(el) {\n // Ensure max is set before value upon element creation and before rendering.\n // Why is this happening in 'template' and not 'created'? Because it gets called before 'created'!\n el._data.max = parseNumeric(el.getAttribute('max'), DEFAULTS.max);\n el._data.val = parseNumeric(el.getAttribute('value'), DEFAULTS.val);\n el._data.indeterminate = el.hasAttribute('indeterminate');\n const {val, max, valAsFraction, valAsPercent} = calc(el._data);\n\n const legacyValue = el._data.indeterminate ? '' : `data-value=\"${valAsFraction}\"`;\n\n el.innerHTML = `<div class=\"aui-progress-indicator\"\n ${legacyValue}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuenow=\"${val}\"\n aria-valuemax=\"${max}\"\n tabindex=\"0\"\n >\n <span class=\"aui-progress-indicator-value\" style=\"width: ${valAsPercent}%\"></span>\n </div>`;\n },\n\n attached(el) {\n refresh(el);\n },\n\n attributes: {\n indeterminate: {\n created: function(el) {\n el.indeterminate = true;\n },\n removed: function(el) {\n el.indeterminate = false;\n }\n },\n value: {\n value: DEFAULTS.val,\n fallback: function (el, data) {\n if (el._updating) {return false;}\n setValue(el, data);\n }\n },\n max: {\n value: DEFAULTS.max,\n fallback: function (el, data) {\n if (el._updating) {return false;}\n setMax(el, data);\n }\n },\n },\n\n prototype: {\n get _data() {\n return this.__data || (this._data = defaults({}, DEFAULTS));\n },\n set _data(d) {\n return this.__data = d;\n },\n get indeterminate() {\n return this._data.indeterminate;\n },\n set indeterminate(val) {\n this._data.indeterminate = !!val;\n refresh(this);\n },\n get value() {\n const { val } = calc(this._data);\n return val;\n },\n set value(num) {\n if (!validNumeric(num)) {return false;}\n const data = { newValue: parseDecimal(num, 6) };\n this._updating = true;\n // Reflect whatever value is set in the attributes.\n this.setAttribute('value', data.newValue);\n this._updating = false;\n setValue(this, data);\n },\n get max() {\n const { max } = calc(this._data);\n return max;\n },\n set max(num) {\n if (!validNumeric(num)) {return false;}\n const data = { newValue: parseDecimal(num, 6) };\n this._updating = true;\n // Reflect whatever value is set in the attributes.\n this.setAttribute('max', data.newValue);\n this._updating = false;\n setMax(this, data);\n },\n }\n});\n\nconst progressBars = {\n update: deprecate.fn(updateProgressElement, 'AJS.progressBars.update', {\n sinceVersion: '7.7.0',\n removeInVersion: '10.0.0',\n extraInfo: 'Use the <aui-progressbar> web component instead'\n }),\n setIndeterminate: deprecate.fn(setIndeterminateOnProgressElement, 'AJS.progressBars.setIndeterminate', {\n sinceVersion: '7.7.0',\n removeInVersion: '10.0.0',\n extraInfo: 'Use the <aui-progressbar> web component instead'\n })\n};\n\nglobalize('progressBars', progressBars);\n\nexport default progressBars;\nexport {\n ProgressBarEl\n};\n","import $ from './jquery';\nimport '../../js-vendor/jquery/jquery.tablesorter';\nimport globalize from './internal/globalize';\n\nconst DEFAULT_SORT_OPTIONS = {\n sortMultiSortKey: '',\n headers: {},\n debug: false,\n tabIndex: false\n};\n\n/**\n * @param {jQuery} $table - element to be sortable\n * @param {Object} [extraOptions] - tablesorter.js options\n */\nfunction sortTable($table, extraOptions) {\n let options = Object.assign({}, DEFAULT_SORT_OPTIONS, extraOptions);\n $table.find('th').each(function (index, header) {\n const $header = $(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 return $table.tablesorter(options);\n}\n\nlet tablessortable = {\n setup: function () {\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 $.tablesorter.addParser({\n id: 'issue-key',\n is: function () {\n return false;\n },\n\n format: function (s) {\n const keyComponents = s.split('-');\n const projectKey = keyComponents[0];\n const issueNumber = keyComponents[1];\n\n const PROJECT_KEY_TEMPLATE = '..........';\n const ISSUE_NUMBER_TEMPLATE = '000000';\n let 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 $.tablesorter.addParser({\n id: 'textSortAttributeParser',\n is: function (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 (nodeValue, table, node) {\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 $.tablesorter.addParser({\n id: 'numericSortAttributeParser',\n is: function (nodeValue, table, node) {\n return node.getAttribute('data-sort-type') === 'numeric' && node.hasAttribute('data-sort-value');\n },\n format: function (nodeValue, table, node) {\n return node.getAttribute('data-sort-value');\n },\n type: 'numeric'\n });\n\n $('.aui-table-sortable').each(function () {\n sortTable($(this));\n });\n },\n /**\n * @param {jQuery} $table - element to be sortable\n * @param {Object} [options] - tablesorter.js options\n */\n setTableSortable: function ($table, options) {\n return sortTable($table, options);\n }\n};\n\n$(tablessortable.setup);\n\nglobalize('tablessortable', tablessortable);\n\nexport default tablessortable;\n","import $ from '../jquery';\nimport globalize from './globalize';\nimport uniqueId from '../unique-id';\n\n/**\n * Apply a unique ID to the element. Preserves ID if the element already has one.\n *\n * @param {Element} el Selector to find target element.\n * @param {string} [prefix] Optional. String to prepend to ID instead of default AUI prefix.\n *\n * @returns {undefined}\n */\nfunction addId (el, prefix = '') {\n var element = $(el);\n var addprefix = prefix || false;\n\n element.each(function () {\n var $el = $(this);\n\n if (!$el.attr('id')) {\n $el.attr('id', uniqueId(addprefix));\n }\n });\n}\n\nglobalize('_addID', addId);\n\nexport default addId;\n","import $ from './jquery';\nimport globalize from './internal/globalize';\n\n/**\n * Shortcut function to see if passed element is truncated/clipped, eg. with\n * text-overflow: ellipsis.\n *\n * @param {String | Element | jQuery} element The element to check.\n *\n * @returns {Boolean}\n */\nfunction isClipped (el) {\n el = $(el);\n return (el.prop('scrollWidth') > el.prop('clientWidth'));\n}\n\nglobalize('isClipped', isClipped);\n\nexport default isClipped;\n","import 'skatejs-template-html';\nimport * as logger from './internal/log';\nimport { debounce } from 'underscore';\nimport $ from './jquery';\nimport addId from './internal/add-id';\nimport globalize from './internal/globalize';\nimport isClipped from './is-clipped';\nimport skate from './internal/skate';\n\nvar template = window.skateTemplateHtml;\n\nvar STORAGE_PREFIX = '_internal-aui-tabs-';\nvar RESPONSIVE_OPT_IN_SELECTOR = '.aui-tabs.horizontal-tabs[data-aui-responsive]:not([data-aui-responsive=\"false\"]), aui-tabs[responsive]:not([responsive=\"false\"])';\n\nfunction getPaneIdFromTabLink (el) {\n let $el = $(el);\n let maybeId = String($el.attr('href') || '').trim();\n return maybeId.indexOf('#') === 0 ? maybeId.substr(1) : null;\n}\n\n/**\n * Locate what is assumed to be a tab panel within the DOM, based on the link element passed in\n * @param {HTMLElement} el a tab link element with an href attribute pointing to a tab panel\n * @returns {HTMLElement|null} the element with matching ID if it exists, otherwise null\n */\nfunction getPaneFromTabLink (el) {\n let maybeId = getPaneIdFromTabLink(el);\n return maybeId ? document.getElementById(maybeId) : null;\n}\n\nfunction enhanceTabLink (link) {\n var $thisLink = $(link);\n var targetPane = getPaneFromTabLink($thisLink);\n\n if (!getPaneIdFromTabLink(link)) {\n logger.error('A tab link must use an anchor link (e.g., <a href=\"#a-valid-id\"></a>) to work correctly.', link);\n }\n\n if (targetPane) {\n addId($thisLink);\n $thisLink.attr('role', 'tab');\n $(targetPane).attr('aria-labelledby', $thisLink.attr('id'));\n\n if ($thisLink.parent().hasClass('active-tab')) {\n $thisLink.attr('aria-selected', 'true');\n } else {\n $thisLink.attr('aria-selected', 'false');\n }\n } else {\n logger.warn('A tab panel could not be found with the tab link\\'s configured href.' +\n ' Check whether the tab link href is correct.', link);\n }\n}\n\nvar ResponsiveAdapter = {\n totalTabsWidth: function ($visibleTabs, $dropdown) {\n var totalVisibleTabsWidth = this.totalVisibleTabWidth($visibleTabs);\n var totalDropdownTabsWidth = 0;\n\n $dropdown.find('li').each(function (index, tab) {\n totalDropdownTabsWidth += parseInt(tab.getAttribute('data-aui-tab-width'));\n });\n\n return totalVisibleTabsWidth + totalDropdownTabsWidth;\n },\n\n totalVisibleTabWidth: function ($tabs) {\n var totalWidth = 0;\n\n $tabs.each(function (index, tab) {\n totalWidth += $(tab).outerWidth();\n });\n\n return totalWidth;\n },\n\n removeResponsiveDropdown: function ($dropdown, $dropdownTriggerTab) {\n $dropdown.remove();\n $dropdownTriggerTab.remove();\n },\n\n createResponsiveDropdownTrigger: function ($tabsMenu, id) {\n var triggerMarkup = `<li class=\"menu-item aui-tabs-responsive-trigger-item\">\n <a\n class=\"aui-dropdown2-trigger aui-tabs-responsive-trigger aui-dropdown2-trigger-arrowless\"\n id=\"aui-tabs-responsive-trigger-${id}\"\n aria-haspopup=\"true\"\n aria-controls=\"aui-tabs-responsive-dropdown-${id}\"\n href=\"#aui-tabs-responsive-dropdown-${id}\">...</a>\n </li>`;\n $tabsMenu.append(triggerMarkup);\n return $tabsMenu.find('.aui-tabs-responsive-trigger-item');\n },\n\n createResponsiveDropdown: function ($tabsContainer, id) {\n var dropdownMarkup = '<div class=\"aui-dropdown2 aui-tabs-responsive-dropdown\" id=\"aui-tabs-responsive-dropdown-' + id + '\">' +\n '<ul>' +\n '</ul>' +\n '</div>';\n $tabsContainer.append(dropdownMarkup);\n var $dropdown = $tabsContainer.find('#aui-tabs-responsive-dropdown-' + id);\n return $dropdown;\n },\n\n findNewVisibleTabs: function (tabs, parentWidth, dropdownTriggerTabWidth) {\n function hasMoreSpace(currentTotalTabWidth, dropdownTriggerTabWidth, parentWidth) {\n return currentTotalTabWidth + dropdownTriggerTabWidth <= parentWidth;\n }\n\n var currentTotalTabWidth = 0;\n\n for (var i = 0; hasMoreSpace(currentTotalTabWidth, dropdownTriggerTabWidth, parentWidth) && i < tabs.length; i++) {\n var $tab = $(tabs[i]);\n var tabWidth = $tab.outerWidth(true);\n currentTotalTabWidth += tabWidth;\n }\n\n // i should now be at the tab index after the last visible tab because of the loop so we minus 1 to get the new visible tabs\n return tabs.slice(0, i - 1);\n },\n\n moveVisibleTabs: function (oldVisibleTabs, $tabsParent, $dropdownTriggerTab) {\n var dropdownId = $dropdownTriggerTab.find('a').attr('aria-controls');\n var $dropdown = $('#' + dropdownId);\n var newVisibleTabs = this.findNewVisibleTabs(oldVisibleTabs, $tabsParent.outerWidth(), $dropdownTriggerTab.parent().outerWidth(true));\n var lastTabIndex = newVisibleTabs.length - 1;\n\n for (var j = oldVisibleTabs.length - 1; j >= lastTabIndex; j--) {\n var $tab = $(oldVisibleTabs[j]);\n this.moveTabToResponsiveDropdown($tab, $dropdown, $dropdownTriggerTab);\n }\n\n return $(newVisibleTabs);\n },\n\n moveTabToResponsiveDropdown: function ($tab, $dropdown, $dropdownTriggerTab) {\n var $tabLink = $tab.find('a');\n\n $tab.attr('data-aui-tab-width', $tab.outerWidth(true));\n $tabLink.addClass('aui-dropdown2-radio aui-tabs-responsive-item');\n\n if ($tab.hasClass('active-tab')) {\n $tabLink.addClass('aui-dropdown2-checked');\n $dropdownTriggerTab.addClass('active-tab');\n }\n\n $dropdown.find('ul').prepend($tab);\n },\n\n moveInvisibleTabs: function (tabsInDropdown, remainingSpace, $dropdownTriggerTab) {\n function hasMoreSpace(remainingSpace) {\n return remainingSpace > 0;\n }\n\n for (var i = 0; hasMoreSpace(remainingSpace) && i < tabsInDropdown.length; i++) {\n var $tab = $(tabsInDropdown[i]);\n var tabInDropdownWidth = parseInt($tab.attr('data-aui-tab-width'), 10);\n var shouldMoveTabOut = tabInDropdownWidth < remainingSpace;\n\n if (shouldMoveTabOut) {\n this.moveTabOutOfDropdown($tab, $dropdownTriggerTab);\n }\n\n remainingSpace -= tabInDropdownWidth;\n }\n },\n\n moveTabOutOfDropdown: function ($tab, $dropdownTriggerTab) {\n var isTabInDropdownActive = $tab.find('a').hasClass('aui-dropdown2-checked');\n\n if (isTabInDropdownActive){\n $tab.addClass('active-tab');\n $dropdownTriggerTab.removeClass('active-tab');\n }\n\n $tab.children('a').removeClass('aui-dropdown2-radio aui-tabs-responsive-item aui-dropdown2-checked');\n $dropdownTriggerTab.before($tab);\n }\n};\n\n// this function is run by jquery .each() where 'this' is the current tabs container\nfunction calculateResponsiveTabs(tabsContainer, index) {\n var $tabsContainer = $(tabsContainer);\n var $tabsMenu = $tabsContainer.find('.tabs-menu').first();\n var $visibleTabs = $tabsMenu.find('li:not(.aui-tabs-responsive-trigger-item)');\n var $dropdownTriggerTab = $tabsMenu.find('.aui-tabs-responsive-trigger').parent();\n var $dropdownTrigger = $dropdownTriggerTab.find('a');\n var dropdownId = $dropdownTrigger.attr('aria-controls');\n var $dropdown = $(document.getElementById(dropdownId)).attr('aria-checked', false);\n var isResponsive = $dropdown.length > 0;\n var totalTabsWidth = ResponsiveAdapter.totalTabsWidth($visibleTabs, $dropdown);\n var needsResponsive = totalTabsWidth > $tabsContainer.outerWidth();\n\n if (!isResponsive && needsResponsive) {\n $dropdownTriggerTab = ResponsiveAdapter.createResponsiveDropdownTrigger($tabsMenu, index);\n $dropdown = ResponsiveAdapter.createResponsiveDropdown($tabsContainer, index);\n }\n\n // reset id's in case tabs have changed DOM order\n $dropdownTrigger.attr('aria-controls', 'aui-tabs-responsive-dropdown-' + index);\n $dropdownTrigger.attr('id', 'aui-tabs-responsive-trigger-' + index);\n $dropdownTrigger.attr('href', '#aui-tabs-responsive-trigger-' + index);\n $dropdown.attr('id', 'aui-tabs-responsive-dropdown-' + index);\n\n if (needsResponsive) {\n var $newVisibleTabs = ResponsiveAdapter.moveVisibleTabs($visibleTabs.toArray(), $tabsContainer, $dropdownTriggerTab);\n var visibleTabWidth = ResponsiveAdapter.totalVisibleTabWidth($newVisibleTabs);\n var remainingSpace = $tabsContainer.outerWidth() - visibleTabWidth - $dropdownTriggerTab.outerWidth(true);\n var hasSpace = remainingSpace > 0;\n\n if (hasSpace) {\n var $tabsInDropdown = $dropdown.find('li');\n ResponsiveAdapter.moveInvisibleTabs($tabsInDropdown.toArray(), remainingSpace, $dropdownTriggerTab);\n }\n\n if (!$tabsContainer.hasClass('aui-tabs-disabled')) {\n $dropdown.on('click.aui-tabs', 'a', handleTabClick);\n }\n\n /* Workaround for bug in Edge where the dom is just not being re-rendered properly\n It is only triggered for certain widths. Simply taking the element out of the DOM\n and placing it back in causes the browser to re-render, hiding the issue.\n added from AUI-4098 and to be revisited in AUI-4117*/\n if ($tabsMenu.is(':visible')) {\n $tabsMenu.hide().show();\n }\n }\n\n if (isResponsive && !needsResponsive) {\n $dropdown.find('li').each(function () {\n ResponsiveAdapter.moveTabOutOfDropdown($(this), $dropdownTriggerTab);\n });\n ResponsiveAdapter.removeResponsiveDropdown($dropdown, $dropdownTriggerTab);\n }\n}\n\nfunction switchToTab (tab) {\n var $tab = $(tab);\n\n // This probably isn't needed anymore. Remove once confirmed.\n if ($tab.hasClass('aui-tabs-responsive-trigger')) {\n return;\n }\n\n var pane = getPaneFromTabLink($tab);\n if (!pane) {\n logger.error('Cannot switch to tab panel because it does not exist.' +\n ' Check whether the tab link href is correct.', tab);\n return;\n }\n\n var $pane = $(pane);\n\n $pane\n .addClass('active-pane')\n .siblings('.tabs-pane')\n .removeClass('active-pane')\n\n var $dropdownTriggerTab = $tab.parents('.aui-tabs').find('.aui-tabs-responsive-trigger-item a');\n var dropdownId = $dropdownTriggerTab.attr('aria-controls');\n var $dropdown = $(document.getElementById(dropdownId));\n\n $dropdown.find('li a').attr('aria-checked', false).removeClass('checked aui-dropdown2-checked');\n $dropdown.find('li').removeClass('active-tab');\n\n $tab\n .parent('li.menu-item')\n .addClass('active-tab')\n .siblings('.menu-item')\n .removeClass('active-tab');\n\n if ($tab.hasClass('aui-tabs-responsive-item')) {\n var $visibleTabs = $pane.parent('.aui-tabs').find('li.menu-item:not(.aui-tabs-responsive-trigger-item)');\n\n $visibleTabs.removeClass('active-tab');\n $visibleTabs.find('a').removeClass('checked').removeAttr('aria-checked');\n }\n\n if ($tab.hasClass('aui-tabs-responsive-item')) {\n $pane.parent('.aui-tabs').find('li.menu-item.aui-tabs-responsive-trigger-item').addClass('active-tab');\n }\n\n $tab.closest('.tabs-menu').find('a').attr('aria-selected', 'false');\n $tab.attr('aria-selected', 'true');\n $tab.trigger('tabSelect', {\n tab: $tab,\n pane: $pane\n });\n}\n\nfunction isPersistentTabGroup($tabGroup) {\n // Tab group persistent attribute exists and is not false\n return $tabGroup.attr('data-aui-persist') !== undefined && $tabGroup.attr('data-aui-persist') !== 'false';\n}\n\nfunction createPersistentKey($tabGroup) {\n var tabGroupId = $tabGroup.attr('id');\n var value = $tabGroup.attr('data-aui-persist');\n\n return STORAGE_PREFIX + (tabGroupId ? tabGroupId : '') + (value && value !== 'true' ? '-' + value : '');\n}\n\n/* eslint max-depth: 1 */\nfunction updateTabsFromLocalStorage($tabGroups) {\n for (var i = 0, ii = $tabGroups.length; i < ii; i++) {\n var $tabGroup = $tabGroups.eq(i);\n var tabs = $tabGroups.get(i);\n\n if (isPersistentTabGroup($tabGroup) && window.localStorage) {\n var tabGroupId = $tabGroup.attr('id');\n\n if (tabGroupId) {\n var persistentTabId = window.localStorage.getItem(createPersistentKey($tabGroup));\n\n if (persistentTabId) {\n var anchor = tabs.querySelector(`a[href$=\"${persistentTabId}\"]`);\n\n // eslint-disable-next-line max-depth\n if (anchor) {\n switchToTab(anchor);\n }\n }\n } else {\n logger.warn('A tab group must specify an id attribute if it specifies data-aui-persist.');\n }\n }\n }\n}\n\nfunction updateLocalStorageEntry ($tab) {\n var $tabGroup = $tab.closest('.aui-tabs');\n var tabGroupId = $tabGroup.attr('id');\n\n if (tabGroupId) {\n var tabId = getPaneIdFromTabLink($tab);\n\n if (tabId) {\n window.localStorage.setItem(createPersistentKey($tabGroup),'#' + tabId);\n }\n } else {\n logger.warn('A tab group must specify an id attribute if it specifies data-aui-persist.');\n }\n}\n\nfunction handleTabClick (e) {\n tabs.change($(e.target).closest('a'));\n\n if (e) {\n e.preventDefault();\n }\n}\n\nfunction responsiveResizeHandler (tabs) {\n tabs.forEach(function (tab, index) {\n calculateResponsiveTabs(tab, index);\n });\n}\n\n\n// Initialisation\n// --------------\n\nfunction getTabs () {\n return $('.aui-tabs:not(.aui-tabs-disabled)');\n}\n\nfunction getResponsiveTabs () {\n return $(RESPONSIVE_OPT_IN_SELECTOR).toArray();\n}\n\nfunction initWindow () {\n const handler = debounce(responsiveResizeHandler, 200);\n handler(getResponsiveTabs());\n $(window).on('resize.aui-tabs', () => handler(getResponsiveTabs()));\n}\n\nfunction initTab (tab) {\n var $tab = $(tab);\n\n tab.setAttribute('role', 'application');\n\n if (!$tab.data('aui-tab-events-bound')) {\n var $tabMenu = $tab.children('ul.tabs-menu');\n\n // ARIA setup\n $tabMenu.attr('role', 'tablist');\n\n // ignore the LIs so tab count is announced correctly\n $tabMenu.children('li').attr('role', 'presentation');\n $tabMenu.find('> .menu-item a').each(function () {\n enhanceTabLink(this);\n });\n\n // Set up click event for tabs\n $tabMenu.on('click.aui-tabs', 'a', handleTabClick);\n $tab.data('aui-tab-events-bound', true);\n\n initPanes(tab);\n }\n}\n\nfunction initTabs () {\n var tabs = getTabs();\n\n tabs.each(function () {\n initTab(this);\n });\n\n updateTabsFromLocalStorage(tabs);\n}\n\nfunction initPane (pane) {\n pane.setAttribute('role', 'tabpanel');\n}\n\nfunction initPanes (tab) {\n [].slice.call(tab.querySelectorAll('.tabs-pane')).forEach(initPane);\n}\n\nfunction initVerticalTabs () {\n // Vertical tab truncation setup (adds title if clipped)\n $('.aui-tabs.vertical-tabs').find('a').each(function () {\n var thisTab = $(this);\n\n // don't override existing titles\n if (!thisTab.attr('title')) {\n // if text has been truncated, add title\n if (isClipped(thisTab)) {\n thisTab.attr('title', thisTab.text());\n }\n }\n });\n}\n\nvar tabs = {\n setup: function () {\n initWindow();\n initTabs();\n initVerticalTabs();\n },\n\n change: function (a) {\n var collection = a instanceof HTMLElement || a instanceof $ ? a : document.querySelector(a);\n var $a = $(collection).first();\n var $tabGroup = $a.closest('.aui-tabs');\n\n switchToTab($a);\n\n if (isPersistentTabGroup($tabGroup) && window.localStorage) {\n updateLocalStorageEntry($a);\n }\n }\n};\n\n$(tabs.setup);\n\n\n// Web Components\n// --------------\n\nfunction findComponent (element) {\n return $(element).closest('aui-tabs').get(0);\n}\n\nfunction findPanes (tabs) {\n return tabs.querySelectorAll('aui-tabs-pane');\n}\n\nfunction findTabs (tabs) {\n return tabs.querySelectorAll('li[is=aui-tabs-tab]');\n}\n\nconst TabContainerEl = skate('aui-tabs', {\n created: function (element) {\n $(element).addClass('aui-tabs horizontal-tabs');\n\n // We must initialise here so that the old code still works since\n // the lifecycle of the sub-components setup the markup so that it\n // can be processed by the old logic.\n skate.init(element);\n\n // Use the old logic to initialise the tabs.\n initTab(element);\n },\n template: template(\n '<ul class=\"tabs-menu\">',\n '<content select=\"li[is=aui-tabs-tab]\"></content>',\n '</ul>',\n '<content select=\"aui-tabs-pane\"></content>'\n ),\n prototype: {\n select: function (element) {\n var index = $(findPanes(this)).index(element);\n\n if (index > -1) {\n tabs.change(findTabs(this)[index].children[0]);\n }\n\n return this;\n }\n }\n});\n\nconst TabItemEl = skate('aui-tabs-tab', {\n extends: 'li',\n created: function (element) {\n $(element).addClass('menu-item');\n },\n template: template(\n '<a href=\"#\">',\n '<strong>',\n '<content></content>',\n '</strong>',\n '</a>'\n )\n});\n\nconst TabPaneEl = skate('aui-tabs-pane', {\n attached: function (element) {\n var $component = $(findComponent(element));\n var $element = $(element);\n var index = $component.find('aui-tabs-pane').index($element);\n var tab = new TabItemEl();\n var $tab = $(tab);\n\n $element.addClass('tabs-pane');\n tab.firstChild.setAttribute('href', '#' + element.id);\n template.wrap(tab).textContent = $element.attr('title');\n\n if (index === 0) {\n $element.addClass('active-pane');\n }\n\n if ($element.hasClass('active-pane')) {\n $tab.addClass('active-tab');\n }\n\n $element.siblings('ul').append(tab);\n },\n template: template(\n '<content></content>'\n )\n});\n\nglobalize('tabs', tabs);\n\nexport default tabs;\nexport {\n TabContainerEl,\n TabPaneEl,\n TabItemEl\n};\n","import $ from './jquery';\nimport amdify from './internal/amdify';\nimport skate from './internal/skate';\nimport './spinner'\nimport {getMessageLogger} from './internal/deprecation'\n\nconst CLASS_NOTIFICATION_INITIALISED = '_aui-form-notification-initialised';\n\nconst ARIA_INFO_ATTRIBUTE = 'aria-describedby';\nconst ARIA_DESCRIPTION_POSTFIX = 'description';\nconst ARIA_ERROR_POSTFIX = 'errors';\n\nconst ATTRIBUTE_NOTIFICATION_PREFIX = 'data-aui-notification-';\nconst ATTRIBUTE_NOTIFICATION_WAIT = ATTRIBUTE_NOTIFICATION_PREFIX + 'wait';\nconst ATTRIBUTE_NOTIFICATION_INFO = ATTRIBUTE_NOTIFICATION_PREFIX + 'info';\nconst ATTRIBUTE_NOTIFICATION_ERROR = ATTRIBUTE_NOTIFICATION_PREFIX + 'error';\nconst ATTRIBUTE_NOTIFICATION_SUCCESS = ATTRIBUTE_NOTIFICATION_PREFIX + 'success';\n\nconst NOTIFICATION_PRIORITY = [\n ATTRIBUTE_NOTIFICATION_ERROR,\n ATTRIBUTE_NOTIFICATION_SUCCESS,\n ATTRIBUTE_NOTIFICATION_WAIT,\n ATTRIBUTE_NOTIFICATION_INFO\n];\n\nfunction initialiseNotification($field) {\n if (!isFieldInitialised($field)) {\n prepareFieldMarkup($field);\n synchroniseNotificationDisplay($field);\n }\n}\n\nfunction isFieldInitialised($field) {\n return $field.hasClass(CLASS_NOTIFICATION_INITIALISED);\n}\n\nfunction prepareFieldMarkup($field) {\n $field.addClass(CLASS_NOTIFICATION_INITIALISED);\n appendDescription($field);\n}\n\nfunction appendDescription($field, message) {\n message = message ? message : getNotificationMessage($field);\n\n if (getFieldNotificationType($field) === ATTRIBUTE_NOTIFICATION_INFO) {\n const existingDescription = $field.parent().find('.description');\n\n if (!existingDescription.length) {\n $field.after(descriptionTemplate($field, message))\n }\n }\n\n updateAriaInfo($field);\n}\n\nfunction getNotificationMessage($field) {\n var notificationType = getFieldNotificationType($field);\n var message = notificationType ? $field.attr(notificationType) : '';\n return message === '' ? message : jsonToArray(message);\n}\n\nfunction jsonToArray(jsonOrString) {\n var jsonArray;\n try {\n jsonArray = JSON.parse(jsonOrString);\n } catch (exception) {\n jsonArray = [jsonOrString];\n }\n return jsonArray;\n}\n\nfunction getFieldNotificationType($field) {\n let 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\nfunction synchroniseNotificationDisplay(field) {\n const $field = $(field);\n\n if (!isFieldInitialised($field)) {\n return;\n }\n const type = getFieldNotificationType($field);\n const showSpinner = type === ATTRIBUTE_NOTIFICATION_WAIT;\n\n setFieldSpinner($field, showSpinner);\n\n const message = getNotificationMessage($field);\n if (message && type === ATTRIBUTE_NOTIFICATION_ERROR) {\n appendErrorMessages($field, message);\n return;\n }\n\n // the first call of this method is executed on init with jQuery wrapped object\n // subsequent ones are the ones we care about and those are executed with DOM objects\n if (!isJqueryObject(field) && !field.hasAttribute(ATTRIBUTE_NOTIFICATION_ERROR)) {\n $field.parent().find('.error').remove();\n }\n}\n\nfunction updateAriaInfo($field) {\n const labels = [];\n const id = $field.attr('id') || $field.attr('name');\n const type = getFieldNotificationType($field);\n const message = getNotificationMessage($field);\n\n if (message && type === ATTRIBUTE_NOTIFICATION_ERROR) {\n labels.push(`${id}-${ARIA_ERROR_POSTFIX}`);\n }\n\n if (getMessageContainer($field, 'description').length) {\n labels.push(`${id}-${ARIA_DESCRIPTION_POSTFIX}`);\n }\n\n const $ariaTarget = conditionallyGetFieldTarget($field);\n\n $ariaTarget.attr(ARIA_INFO_ATTRIBUTE, !!labels.length ? labels.join(' ') : null);\n}\n\n/**\n * During the process of improving A11Y in the project,\n * we discovered that for some form elements we need to\n * make a shift of the target where aria-* attributes\n * are to be applied.\n *\n * This function contains the mapping and returns\n * the desired target, if it was found.\n *\n * If not - the same $field is returned back.\n */\nfunction conditionallyGetFieldTarget($field) {\n const modifiers = {\n 'aui-select': 'input[type=\"text\"][role=\"combobox\"]'\n };\n\n for (let [source, selector] of Object.entries(modifiers)) {\n if ($field.is(source)) {\n const $target = $field.find(selector);\n\n if ($target.length) {\n return $target;\n }\n }\n }\n\n return $field;\n}\n\nfunction isJqueryObject(el) {\n return el.constructor.prototype.hasOwnProperty('jquery');\n}\n\nfunction errorMessageTemplate($field, messages) {\n const id = $field.attr('id') || $field.attr('name');\n const list = messages\n .map(message => `<li><span class=\"aui-icon aui-icon-small aui-iconfont-error aui-icon-notification\"></span>${message}</li>`)\n .join('');\n\n return `<div class=\"error\" role=\"alert\" id=\"${id}-${ARIA_ERROR_POSTFIX}\"><ul>${list}</ul></div>`;\n}\n\nfunction descriptionTemplate($field, messages) {\n const id = $field.attr('id') || $field.attr('name');\n\n if (messages.length > 1) {\n let list = messages\n .map(message => `<li>${message}</li>`)\n .join('');\n return `<div class=\"description\" id=\"${id}-${ARIA_DESCRIPTION_POSTFIX}\"><ul>${list}</ul></div>`;\n }\n return `<div class=\"description\" id=\"${id}-${ARIA_DESCRIPTION_POSTFIX}\">${messages}</div>`;\n}\n\nfunction appendErrorMessages($field, messages) {\n let previousErrors = getMessageContainer($field, 'error');\n if (previousErrors.length > 0) {\n previousErrors.remove();\n }\n $field.after(errorMessageTemplate($field, messages));\n updateAriaInfo($field);\n}\n\nfunction getMessageContainer($field, type) {\n return $field.parent().find(`.${type}`);\n}\n\nfunction isSpinnerForFieldAlreadyExisting($field) {\n return $field.next('aui-spinner').length > 0;\n}\n\nfunction setFieldSpinner($field, isSpinnerVisible) {\n if (isSpinnerVisible && !isSpinnerForFieldAlreadyExisting($field)) {\n $field.after('<aui-spinner class=\"form-notification-spinner\" size=\"small\"></aui-spinner>');\n } else {\n $field.parent().find('aui-spinner').remove();\n }\n}\n\nconst deprecationLogger = getMessageLogger('data-aui-notification-field attribute', {\n deprecationType: 'ATTRIBUTE',\n alternativeName: 'HTML markup'\n});\n\nskate('data-aui-notification-field', {\n attached: function (element) {\n deprecationLogger();\n initialiseNotification($(element));\n },\n attributes: (function () {\n const attrs = {};\n NOTIFICATION_PRIORITY.forEach(function (type) {\n attrs[type] = synchroniseNotificationDisplay;\n });\n return attrs;\n }()),\n type: skate.type.ATTRIBUTE\n});\n\namdify('aui/form-notification');\n\nexport {\n getMessageContainer,\n appendErrorMessages,\n appendDescription,\n updateAriaInfo,\n errorMessageTemplate,\n setFieldSpinner\n}\n","import $ from '../jquery';\nimport * as logger from '../internal/log';\nimport amdify from '../internal/amdify';\n\nvar ATTRIBUTE_RESERVED_ARGUMENTS = ['displayfield', 'watchfield', 'when', 'novalidate', 'state'];\nvar validators = [];\n\nfunction getReservedArgument (validatorArguments) {\n var reservedArgument = false;\n\n validatorArguments.some(function (arg) {\n var isReserved = $.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 */\nfunction 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\nvar validatorRegister = {\n register: registerValidator,\n validators: function () {\n return validators;\n }\n};\n\namdify('aui/form-validation/validator-register', validatorRegister);\n\nexport default validatorRegister;\n","import $ from '../jquery';\nimport amdify from '../internal/amdify';\nimport format from '../format'; // eslint-disable-line no-unused-vars\nimport { I18n } from '../i18n';\nimport validatorRegister from './validator-register';\n\n//Input length\nfunction minMaxLength(field) {\n var fieldValueLength = field.el.value.length;\n let 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 const exactlengthMessage = makeMessage('exactlength', field.args, [minlength]);\n field.invalidate(exactlengthMessage);\n } else if (minlength && (fieldValueLength < minlength && !fieldIsEmpty)) {\n const minlengthMessage = makeMessage('minlength', field.args);\n field.invalidate(minlengthMessage);\n } else if (maxlength && (fieldValueLength > maxlength)) {\n const maxlengthMessage = makeMessage('maxlength', field.args);\n field.invalidate(maxlengthMessage);\n } else {\n field.validate();\n }\n}\nvalidatorRegister.register(['maxlength', 'minlength'], minMaxLength); //AUI-prefixed attribute is deprecated as of 5.9.0\nvalidatorRegister.register('[maxlength],[minlength]', minMaxLength);\n\n//Field matching\nvalidatorRegister.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\nfunction isPasswordField(field) {\n return field.getAttribute('type') === 'password';\n}\n\n//Banned words\nvalidatorRegister.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\nfunction 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\nfunction 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\nvalidatorRegister.register(['pattern'], pattern); //AUI-prefixed attribute is deprecated as of 5.9.0\nvalidatorRegister.register('[pattern]', pattern);\n\n//Native Required\nfunction 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}\nvalidatorRegister.register(['required'], required); //AUI-prefixed attribute is deprecated as of 5.9.0\nvalidatorRegister.register('[required]', required);\n\n//Field value range (between min and max)\n\nfunction 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}\nvalidatorRegister.register(['min', 'max'], minOrMax); //AUI-prefixed attribute is deprecated as of 5.9.0\nvalidatorRegister.register('[min],[max]', minOrMax);\n\n//Date format\nvalidatorRegister.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\nvalidatorRegister.register(['minchecked', 'maxchecked'], function (field) {\n var amountChecked = $(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 */\nfunction makeMessage(key, accessorFunction, customTokens) {\n var inFlatpackMode = I18n.keys !== undefined;\n var defaultMessage;\n if (inFlatpackMode) {\n defaultMessage = 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 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 */\nvar pluginI18nMessages = {\n minlength: I18n.getText('aui.validation.message.minlength'),\n maxlength: I18n.getText('aui.validation.message.maxlength'),\n exactlength: I18n.getText('aui.validation.message.exactlength'),\n matchingfield: I18n.getText('aui.validation.message.matchingfield'),\n 'matchingfield-novalue': I18n.getText('aui.validation.message.matchingfield-novalue'),\n doesnotcontain: I18n.getText('aui.validation.message.doesnotcontain'),\n pattern: I18n.getText('aui.validation.message.pattern'),\n required: I18n.getText('aui.validation.message.required'),\n validnumber: I18n.getText('aui.validation.message.validnumber'),\n min: I18n.getText('aui.validation.message.min'),\n max: I18n.getText('aui.validation.message.max'),\n dateformat: I18n.getText('aui.validation.message.dateformat'),\n minchecked: I18n.getText('aui.validation.message.minchecked'),\n maxchecked: I18n.getText('aui.validation.message.maxchecked')\n};\n\namdify('aui/form-validation/basic-validators');\n","import $ from './jquery';\nimport './form-notification';\nimport {\n appendDescription,\n appendErrorMessages,\n getMessageContainer,\n setFieldSpinner,\n updateAriaInfo\n} from './form-notification';\nimport './form-validation/basic-validators';\nimport amdify from './internal/amdify';\nimport * as deprecate from './internal/deprecation';\nimport globalize from './internal/globalize';\nimport skate from './internal/skate';\nimport validatorRegister from './form-validation/validator-register';\n\n//Attributes\nconst ATTRIBUTE_VALIDATION_OPTION_PREFIX = 'aui-validation-';\nconst ATTRIBUTE_NOTIFICATION_PREFIX = 'data-aui-notification-';\n\nconst ATTRIBUTE_FIELD_STATE = 'aui-validation-state';\nconst INVALID = 'invalid';\nconst VALID = 'valid';\nconst VALIDATING = 'validating';\nconst UNVALIDATED = 'unvalidated';\n\nconst ATTRIBUTE_VALIDATION_FIELD_COMPONENT = 'data-aui-validation-field';\n\n//Classes\nconst CLASS_VALIDATION_INITIALISED = '_aui-form-validation-initialised';\n\n//Events\nconst EVENT_FIELD_STATE_CHANGED = '_aui-internal-field-state-changed';\n\nfunction isFieldInitialised($field) {\n return $field.hasClass(CLASS_VALIDATION_INITIALISED);\n}\n\nfunction initValidation($field) {\n if (!isFieldInitialised($field)) {\n prepareFieldMarkup($field);\n bindFieldEvents($field);\n changeFieldState($field, UNVALIDATED);\n }\n}\n\nfunction prepareFieldMarkup($field){\n $field.addClass(CLASS_VALIDATION_INITIALISED);\n appendDescription($field);\n}\n\nfunction bindFieldEvents($field) {\n bindStopTypingEvent($field);\n bindValidationEvent($field);\n}\n\nfunction bindStopTypingEvent($field){\n var keyUpTimer;\n\n var triggerStopTypingEvent = function () {\n $field.trigger('aui-stop-typing');\n };\n\n $field.on('keyup', function () {\n clearTimeout(keyUpTimer);\n keyUpTimer = setTimeout(triggerStopTypingEvent, 1500);\n });\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction startValidating($field) {\n clearFieldMessages($field);\n\n var validatorsToRun = getActivatedValidators($field);\n\n changeFieldState($field, VALIDATING);\n var deferreds = runValidatorsAndGetDeferred($field, validatorsToRun);\n var fieldValidators = $.when.apply($, deferreds);\n fieldValidators.done(function () {\n changeFieldState($field, VALID);\n });\n return fieldValidators;\n}\n\nfunction clearFieldMessages($field) {\n setFieldNotification(getDisplayField($field), 'none');\n}\n\nfunction getValidators() {\n return validatorRegister.validators();\n}\n\nfunction 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\nfunction runValidatorsAndGetDeferred($field, validatorsToRun) {\n var allDeferreds = [];\n\n validatorsToRun.forEach(function (validatorIndex) {\n var validatorFunction = getValidators()[validatorIndex].validatorFunction;\n var deferred = new $.Deferred();\n var validatorContext = createValidatorContext($field, deferred);\n validatorFunction(validatorContext);\n\n allDeferreds.push(deferred);\n });\n\n return allDeferreds;\n}\n\nfunction createValidatorContext($field, validatorDeferred) {\n var context = {\n validate: function () {\n validatorDeferred.resolve();\n },\n invalidate: function (message) {\n changeFieldState($field, INVALID, message);\n validatorDeferred.reject();\n },\n args: createArgumentAccessorFunction($field),\n el: $field[0],\n $el: $field\n };\n\n deprecate.prop(context, '$el', {\n sinceVersion: '5.9.0',\n removeInVersion: '10.0.0',\n alternativeName: 'el',\n extraInfo: 'See https://ecosystem.atlassian.net/browse/AUI-3263.'\n });\n\n return context;\n}\n\nfunction createArgumentAccessorFunction($field) {\n return function (arg) {\n return $field.attr('data-' + ATTRIBUTE_VALIDATION_OPTION_PREFIX + arg) || $field.attr(arg);\n };\n}\n\nfunction changeFieldState($field, state, message) {\n $field.attr('data-' + ATTRIBUTE_FIELD_STATE, state);\n $field.attr('aria-invalid', false);\n\n if (state === UNVALIDATED) {\n return;\n }\n\n $field.trigger($.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 if (state === INVALID) {\n $field.attr('aria-invalid', true);\n }\n}\n\nfunction showSpinnerIfSlow($field) {\n setTimeout(function () {\n let stillValidating = getFieldState($field) === VALIDATING;\n if (stillValidating) {\n setFieldNotification($field, 'wait');\n setFieldSpinner($field, true)\n }\n }, 500);\n}\n\nfunction setFieldNotification($field, type, message) {\n const spinnerWasVisible = isSpinnerVisible($field);\n removeIconOnlyNotifications($field);\n const skipShowingSuccessNotification = (type === 'success') && !spinnerWasVisible;\n if (skipShowingSuccessNotification) {\n return;\n }\n\n if (type === 'none') {\n removeFieldNotification($field, 'error');\n } else {\n const previousMessage = $field.attr(ATTRIBUTE_NOTIFICATION_PREFIX + type) || '[]';\n const newMessages = message ? combineJSONMessages(message, previousMessage) : [];\n $field.attr(ATTRIBUTE_NOTIFICATION_PREFIX + type, JSON.stringify(newMessages));\n if (type === 'error') {\n appendErrorMessages($field, newMessages);\n }\n }\n}\n\nfunction removeIconOnlyNotifications($field) {\n removeFieldNotification($field, 'wait');\n setFieldSpinner($field, false);\n removeFieldNotification($field, 'success');\n}\n\nfunction removeFieldNotification($field, type) {\n $field.removeAttr(ATTRIBUTE_NOTIFICATION_PREFIX + type);\n if (type === 'error') {\n getMessageContainer($field, type).remove();\n updateAriaInfo($field);\n }\n}\n\nfunction isSpinnerVisible($field) {\n return $field.is('[' + ATTRIBUTE_NOTIFICATION_PREFIX + 'wait]');\n}\n\nfunction combineJSONMessages(newString, previousString) {\n const previousStackedMessageList = JSON.parse(previousString);\n return previousStackedMessageList.concat([newString]);\n}\n\nfunction getDisplayField($field) {\n var displayFieldID = getValidationOption($field, 'displayfield');\n var notifyOnSelf = (displayFieldID === undefined);\n return notifyOnSelf ? $field : $('#' + displayFieldID);\n}\n\nfunction 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 */\nfunction validateField($field) {\n $field = $($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$(document).on('submit', function (e) {\n var form = e.target;\n var $form = $(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 = $.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\nfunction delaySubmitUntilStateChange($form, event) {\n event.preventDefault();\n $form.one(EVENT_FIELD_STATE_CHANGED, function () {\n $form.trigger('submit');\n });\n}\n\nfunction 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\nfunction getFieldCollectionStateNames($fields) {\n var states = $.map($fields, function (field) {\n return getFieldState($(field));\n });\n return states;\n}\n\nfunction 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\nfunction validateUnvalidatedFields($form) {\n var $unvalidatedElements = getFieldsInFormWithState($form, UNVALIDATED);\n $unvalidatedElements.each(function (index, el) {\n validator.validate($(el));\n });\n}\n\nfunction selectFirstInvalid($form) {\n var $firstInvalidField = getFieldsInFormWithState($form, INVALID).first();\n $firstInvalidField.focus();\n}\n\nfunction getFieldsInFormWithState($form, state) {\n var selector = '[data-' + ATTRIBUTE_FIELD_STATE + '=' + state + ']';\n return $form.find(selector);\n}\n\n\nconst validator = {\n register: validatorRegister.register,\n validate: validateField\n};\n\nskate(ATTRIBUTE_VALIDATION_FIELD_COMPONENT, {\n attached: function (field) {\n if (field.form) {\n field.form.setAttribute('novalidate', 'novalidate');\n }\n var $field = $(field);\n initValidation($field);\n skate.init(field); //needed to kick off form notification skate initialisation\n },\n type: skate.type.ATTRIBUTE\n});\n\namdify('aui/form-validation', validator);\nglobalize('formValidation', validator);\nexport default validator;\n","import globalize from './internal/globalize';\nimport * as deprecate from './internal/deprecation';\n\n/**\n * @deprecated Since 8.0.0 Use equivalent functions from libraries like lodash / underscore instead.\n */\nfunction debounce (func, wait) {\n var timeout;\n var result;\n\n return function () {\n var args = arguments;\n var context = this;\n var later = function () {\n result = func.apply(context, args);\n context = args = null;\n };\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n return result;\n };\n}\n\nvar deprecatedDebounce = deprecate.fn(debounce, 'AJS.debounce', {\n removeInVersion: '10.0.0',\n sinceVersion: '8.0.0',\n extraInfo: 'Use equivalent functions from libraries like lodash / underscore instead'\n});\n\nexport default deprecatedDebounce;\n\nglobalize('debounce', deprecatedDebounce);\n\n/**\n * @deprecated Since 8.0.0 Use equivalent functions from libraries like lodash / underscore instead.\n */\nfunction debounceImmediate (func, wait) {\n var timeout = null;\n var result;\n\n return function () {\n var context = this;\n var args = arguments;\n var later = function () {\n timeout = context = args = null;\n };\n\n if (timeout === null) {\n result = func.apply(context, args);\n }\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n return result;\n };\n}\n\nvar deprecatedDebounceImmediate = deprecate.fn(debounceImmediate, 'AJS.debounceImmediate', {\n removeInVersion: '10.0.0',\n sinceVersion: '8.0.0',\n extraInfo: 'Use equivalent functions from libraries like lodash / underscore instead'\n});\n\nexport {\n deprecatedDebounceImmediate as debounceImmediate\n};\n\nglobalize('debounceImmediate', deprecatedDebounceImmediate);\n\n","import $ from '../../jquery';\nimport CustomEvent from '../../polyfills/custom-event';\nimport debounce from '../../debounce';\nimport { I18n } from '../../i18n';\nimport skate from '../skate';\nimport template from 'skatejs-template-html';\n\nconst $window = $(window);\n\nfunction Header (element) {\n var that = this;\n\n this.element = element;\n this.$element = $(element);\n this.index = $('aui-header, .aui-header').index(element);\n this.$secondaryNav = this.$element.find('.aui-header-secondary .aui-nav').first();\n this.menuItems = [];\n this.totalWidth = 0;\n this.$moreMenu = undefined;\n this.rightMostNavItemIndex = undefined;\n this.$applicationLogo = this.$element.find('#logo');\n this.moreMenuWidth = 0;\n this.primaryButtonsWidth = 0;\n\n // to cache the selector and give .find convenience\n this.$headerFind = (function () {\n var $header = $(that.$element[0].querySelector('.aui-header-primary'));\n\n return function (selector) {\n return $header.find(selector);\n };\n }());\n}\n\nHeader.prototype = {\n init: function () {\n var that = this;\n\n this.element.setAttribute('data-aui-responsive', 'true');\n this.$headerFind('.aui-button').parent().each(function () {\n that.primaryButtonsWidth += $(this).outerWidth(true);\n });\n\n // remember the widths of all the menu items\n this.$headerFind('.aui-nav > li > a:not(.aui-button)').each(function () {\n var $this = $(this).parent();\n var outerWidth = $this.outerWidth(true);\n\n that.totalWidth += outerWidth;\n that.menuItems.push({\n $element: $this,\n outerWidth: outerWidth\n });\n });\n\n /** The zero based index of the right-most visible nav menu item. */\n this.rightMostNavItemIndex = this.menuItems.length - 1;\n\n $window.on('resize', this._resizeHandler = debounce(function () {\n that.constructResponsiveDropdown();\n }, 100));\n\n // So that the header logo doesn't mess things up. (size is unknown before the image loads)\n var $logoImg = this.$applicationLogo.find('img');\n\n if ($logoImg.length !== 0) {\n $logoImg.attr('data-aui-responsive-header-index', this.index);\n $logoImg.on('load', function () {\n that.constructResponsiveDropdown();\n });\n }\n\n this.constructResponsiveDropdown();\n\n // show the aui nav (hidden via css on load)\n this.$headerFind('.aui-nav').css('width', 'auto');\n },\n\n destroy: function () {\n $window.off('resize', this._resizeHandler);\n },\n\n // calculate widths based on the current state of the page\n calculateAvailableWidth: function () {\n // if there is no secondary nav, use the right of the screen as the boundary instead\n var rightMostBoundary = this.$secondaryNav.is(':visible') ? this.$secondaryNav.offset().left : this.$element.outerWidth();\n\n // the right most side of the primary nav, this is assumed to exists if this code is running\n var primaryNavRight = this.$applicationLogo.offset().left + this.$applicationLogo.outerWidth(true) + this.primaryButtonsWidth;\n\n return rightMostBoundary - primaryNavRight;\n },\n\n showResponsiveDropdown: function () {\n if (this.$moreMenu === undefined) {\n this.$moreMenu = this.createResponsiveDropdownTrigger();\n }\n this.$moreMenu.css('display', '');\n },\n\n hideResponsiveDropdown: function () {\n if (this.$moreMenu !== undefined) {\n this.$moreMenu.css('display', 'none');\n }\n },\n\n constructResponsiveDropdown: function () {\n if (!this.menuItems.length) {\n return;\n }\n\n var remainingWidth;\n var availableWidth = this.calculateAvailableWidth(this.$element, this.primaryButtonsWidth);\n\n if (availableWidth > this.totalWidth) {\n this.showAll();\n } else {\n this.showResponsiveDropdown();\n remainingWidth = availableWidth - this.moreMenuWidth;\n\n // Figure out how many nav menu items fit into the available space.\n var newRightMostNavItemIndex = -1;\n while (remainingWidth - this.menuItems[newRightMostNavItemIndex + 1].outerWidth >= 0) {\n remainingWidth -= this.menuItems[newRightMostNavItemIndex + 1].outerWidth;\n newRightMostNavItemIndex++;\n }\n\n if (newRightMostNavItemIndex < this.rightMostNavItemIndex) {\n this.moveToResponsiveDropdown(this.rightMostNavItemIndex - newRightMostNavItemIndex);\n } else if (this.rightMostNavItemIndex < newRightMostNavItemIndex) {\n this.moveOutOfResponsiveDropdown(newRightMostNavItemIndex - this.rightMostNavItemIndex);\n }\n }\n },\n\n // creates the trigger and content elements for the show more dropdown\n createResponsiveDropdownTrigger: function () {\n var moreNavItemEl = document.createElement('li');\n var dropdownEl = document.createElement('aui-dropdown-menu');\n dropdownEl.id = `aui-responsive-header-dropdown-${this.index}`;\n skate.init(dropdownEl);\n\n var dropdownSectionEl = document.createElement('aui-section');\n dropdownSectionEl.id = `aui-responsive-header-dropdown-list-${this.index}`;\n skate.init(dropdownSectionEl);\n\n dropdownEl.appendChild(dropdownSectionEl);\n\n var triggerEl = createTriggerAndAssociate(dropdownEl);\n moreNavItemEl.appendChild(triggerEl);\n moreNavItemEl.appendChild(dropdownEl);\n\n // Append the More menu before any primary buttons.\n if (this.primaryButtonsWidth === 0) {\n this.$headerFind('.aui-nav').append(moreNavItemEl);\n } else {\n this.$headerFind('.aui-nav > li > .aui-button:first').parent().before(moreNavItemEl);\n }\n\n this.moreMenuWidth = $(moreNavItemEl).outerWidth(true);\n return $(moreNavItemEl);\n },\n\n // function that handles moving items out of the show more menu into the app header\n moveOutOfResponsiveDropdown: function (numItems) {\n if (numItems <= 0) {\n return;\n }\n\n var $moreDropdown = $(`#aui-responsive-header-dropdown-${this.index}`);\n\n // Move items (working top-to-bottom) from the more menu into the nav bar.\n var leftMostIndexToMove = this.rightMostNavItemIndex + 1;\n var rightMostIndexToMove = this.rightMostNavItemIndex + numItems;\n for (var i = leftMostIndexToMove; i <= rightMostIndexToMove; i++) {\n var $navItem = this.menuItems[i].$element;\n var $navItemTrigger = $navItem.children('a');\n\n if ($navItemTrigger.attr('aria-controls')) {\n var $navItemDropdown = $(document.getElementById($navItemTrigger.attr('aria-controls')));\n $navItemDropdown.removeClass('aui-dropdown2-sub-menu');\n $navItem.append($navItemDropdown);\n }\n\n $moreDropdown.find('aui-item-link:first').remove();\n $navItem.insertBefore(this.$moreMenu);\n }\n\n this.rightMostNavItemIndex += numItems;\n },\n\n // function that handles moving items into the show more menu\n moveToResponsiveDropdown: function (numItems) {\n if (numItems <= 0) {\n return;\n }\n\n var moreDropdownSectionEl = template.wrap(this.$moreMenu[0].querySelector('aui-section'));\n\n // Move items (working right-to-left) from the nav bar to the more menu.\n var rightMostIndexToMove = this.rightMostNavItemIndex;\n var leftMostIndexToMove = this.rightMostNavItemIndex - numItems + 1;\n for (var i = rightMostIndexToMove; i >= leftMostIndexToMove; i--) {\n var $navItem = this.menuItems[i].$element;\n var $navItemTrigger = $navItem.children('a');\n skate.init($navItemTrigger); // ensure all triggers have gone through their lifecycle before we check for submenus\n\n var moreDropdownItemEl = document.createElement('aui-item-link');\n moreDropdownItemEl.setAttribute('href', $navItemTrigger.attr('href'));\n if ($navItemTrigger.attr('aria-controls')) {\n var $navItemDropdown = $(document.getElementById($navItemTrigger.attr('aria-controls')));\n moreDropdownItemEl.setAttribute('for', $navItemTrigger.attr('aria-controls'));\n $navItemDropdown.addClass('aui-dropdown2-sub-menu');\n $navItemDropdown.appendTo('body');\n }\n if ($navItemTrigger.get(0).hasAttribute('data-aui-extra-classes')) { // an opt-in behaviour\n const extraClasses = Array.from($navItemTrigger.get(0).classList).filter(cls => !cls.startsWith('aui-'));\n moreDropdownItemEl.setAttribute('extra-classes', extraClasses.join(' '));\n }\n skate.init(moreDropdownItemEl);\n template.wrap(moreDropdownItemEl).textContent = $navItemTrigger.text();\n\n $navItem.detach();\n moreDropdownSectionEl.insertBefore(moreDropdownItemEl, moreDropdownSectionEl.firstChild);\n this.element.dispatchEvent(new CustomEvent('aui-responsive-menu-item-created', {\n bubbles: true,\n detail: {\n originalItem: $navItem[0],\n newItem: moreDropdownItemEl\n }\n }));\n }\n\n this.rightMostNavItemIndex -= numItems;\n },\n\n // function that handles show everything\n showAll: function () {\n this.moveOutOfResponsiveDropdown((this.menuItems.length - 1) - this.rightMostNavItemIndex);\n this.hideResponsiveDropdown();\n }\n};\n\n\n\nfunction createTriggerAndAssociate(dropdown) {\n var trigger = document.createElement('a');\n trigger.setAttribute('class', 'aui-dropdown2-trigger');\n trigger.setAttribute('href', '#');\n trigger.id = dropdown.id + '-trigger';\n trigger.setAttribute('aria-controls', dropdown.id);\n trigger.innerHTML = I18n.getText('aui.words.more');\n\n return trigger;\n}\n\n/**\n * Initialise a Header, or return an existing Header for an element.\n */\nfunction createHeader (element) {\n let header = element._header;\n if (!(header instanceof Header)) {\n header = new Header(element);\n header.init();\n element._header = header;\n }\n return header;\n}\n\nexport default createHeader;\n","import $ from './jquery';\nimport createHeader from './internal/header/create-header';\nimport * as deprecate from './internal/deprecation';\nimport globalize from './internal/globalize';\n\nfunction findAndCreateHeaders () {\n $('.aui-header').each(function () {\n createHeader(this);\n });\n}\n\n$(findAndCreateHeaders);\n\nconst responsiveheader = {};\nresponsiveheader.setup = deprecate.fn(findAndCreateHeaders, 'responsiveheader.setup', {\n removeInVersion: '10.0.0',\n sinceVersion: '5.8.0',\n extraInfo: 'No need to manually initialise anymore as this is now a web component.'\n});\n\nglobalize('responsiveheader', responsiveheader);\n\nexport default responsiveheader;\n","import createHeader from './internal/header/create-header';\nimport skate from './internal/skate';\n\nconst Header = skate('aui-header-end', {\n type: skate.type.ELEMENT,\n created: function (element) {\n const auiHeader = element.parentElement;\n if (auiHeader && auiHeader.classList.contains('aui-header')) {\n createHeader(auiHeader);\n } else {\n console.log('Could not async. initialise aui-header');\n }\n }\n});\n\nexport default Header;\n","import $ from './jquery';\nimport datepickerUI from 'jquery-ui/ui/widgets/datepicker';\nimport * as logger from './internal/log';\nimport { supportsDateField } from './internal/browser';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport { I18n } from './i18n';\nimport InlineDialogEl from './inline-dialog2';\nimport generateUniqueId from './unique-id';\n\nconst makePopup = ({horizontalAlignment, datePickerUUID}) => {\n const popupInlineDialogElement = new InlineDialogEl();\n popupInlineDialogElement.id = datePickerUUID;\n\n const popup = $(popupInlineDialogElement);\n popup.attr('persistent', '');\n popup.attr('data-aui-focus', 'false');\n popup.attr('alignment', `bottom ${horizontalAlignment}`);\n popup.addClass('aui-datepicker-dialog');\n\n return popup;\n};\n\nconst makeConfig = ({ minDate, maxDate, dateFormat, $field, onSelect, hide, onChangeMonthYear}) => ({\n dateFormat,\n defaultDate: $field.val(),\n maxDate: maxDate || $field.attr('max'),\n minDate: minDate || $field.attr('min'),\n nextText: '>',\n onSelect: function (dateText) {\n $field.val(dateText);\n $field.trigger('change');\n hide();\n // TODO make sure the docs are explicit about the fact that onSelect cannot be an arrow function\n onSelect && onSelect.call(this, dateText);\n },\n onChangeMonthYear,\n prevText: '<'\n});\n\nconst initCalendar = ({config, popupContents, getCalendarNode, hint}) => {\n const calendar = $(getCalendarNode());\n\n calendar.datepicker(config);\n\n let $hint;\n if (hint) {\n $hint = $('<div/>').addClass('aui-datepicker-hint');\n $hint.append('<span/>').text(hint);\n popupContents.append($hint);\n }\n\n return calendar;\n};\n\nconst makeDefaultPopupController = ($field, datePickerUUID) => {\n let popup;\n let popupContents;\n let parentPopup;\n let isTrackingDatePickerFocus = false; // used to prevent multiple bindings of handleDatePickerFocus within handleFieldBlur\n\n\n const $body = $('body');\n\n const handleDatePickerFocus = (event) => {\n let $eventTarget = $(event.target);\n let isTargetInput = $eventTarget.closest(popupContents).length || $eventTarget.is($field);\n let isTargetPopup = $eventTarget.closest('.ui-datepicker-header').length;\n\n // Hide if we're clicking anywhere else but the input or popup OR if esc is pressed.\n if ((!isTargetInput && !isTargetPopup) || event.keyCode === keyCode.ESCAPE) {\n hideDatePicker();\n isTrackingDatePickerFocus = false;\n return;\n }\n\n if ($eventTarget.get(0) !== $field.get(0)) {\n event.preventDefault();\n }\n };\n\n const handleFieldBlur = () => {\n // Trigger blur if event is keydown and esc OR is focusout.\n if (!(isTrackingDatePickerFocus)) {\n $body.on('focus blur click mousedown', '*', handleDatePickerFocus);\n isTrackingDatePickerFocus = true;\n }\n };\n\n\n const createPolyfill = function () {\n // bind additional field processing events\n $body.on('keydown', handleDatePickerFocus);\n $field.on('focusout keydown', handleFieldBlur);\n\n\n };\n\n const getPopupContents = ({$field}) => {\n const calculateHorizontalAlignment = $field => {\n let inLeftHalf = $field.offset().left < window.innerWidth / 2;\n return inLeftHalf ? 'left' : 'right';\n };\n\n popup = makePopup({horizontalAlignment: calculateHorizontalAlignment($field), datePickerUUID});\n\n parentPopup = $field.closest('aui-inline-dialog').get(0);\n if (parentPopup) {\n parentPopup._datePickerPopup = popup; // AUI-2696 - hackish coupling to control inline-dialog close behaviour.\n $(parentPopup).on('aui-hide', e => {\n if (isTrackingDatePickerFocus) {\n e.preventDefault();\n }\n $body.off('focus blur', '*', handleDatePickerFocus);\n if (parentPopup && parentPopup._datePickerPopup) {\n delete parentPopup._datePickerPopup;\n }\n });\n }\n\n $body.append(popup);\n\n popupContents = popup;\n\n return popup;\n };\n\n const handleFieldFocus = () => {\n if (!popup.get(0).open) {\n showDatePicker()\n }\n };\n\n const showDatePicker = () => {\n popup.get(0).open = true;\n };\n\n const hideDatePicker = () => {\n popup.get(0).open = false;\n };\n\n const handleChangeMonthYear = () => {\n // defer refresh call until current stack has cleared (after month has rendered)\n setTimeout(popup.refresh, 0);\n };\n\n const getCalendarNode = () =>\n popup.get(0).childNodes[0];\n\n const destroyPolyfill = () => {\n // goodbye, cruel world!\n hideDatePicker();\n\n $field.off('focus click', handleFieldFocus);\n $field.off('focusout keydown', handleFieldBlur);\n\n $body.off('keydown', handleFieldBlur);\n $body.off('focus blur click mousedown keydown', handleDatePickerFocus);\n };\n\n return {\n calendarContainerSelector: null,\n getPopupContents,\n handleFieldFocus,\n showDatePicker,\n hideDatePicker,\n handleChangeMonthYear,\n getCalendarNode,\n destroyPolyfill,\n createPolyfill\n }\n};\n\nconst initPolyfill = function (datePicker) {\n const $field = datePicker.getField();\n const options = datePicker.getOptions();\n const datePickerUUID = datePicker.getUUID();\n\n let calendar;\n\n const {\n getPopupContents,\n handleFieldFocus,\n showDatePicker,\n hideDatePicker,\n handleChangeMonthYear,\n getCalendarNode,\n destroyPolyfill,\n createPolyfill,\n } = makeDefaultPopupController($field, datePickerUUID);\n\n const handleFieldUpdate = (event) => {\n let val = $(event.currentTarget).val();\n // IE10/11 fire the 'input' event when internally showing and hiding\n // the placeholder of an input. This was cancelling the initial click\n // event and preventing the selection of the first date. The val check here\n // is a workaround to assure we have legitimate user input that should update\n // the calendar\n if (val) {\n calendar.datepicker('setDate', $field.val());\n }\n };\n\n // keep track of things we mutate within `initPolyfill`.\n // these should all be restored in the `destroyPolyfill` function.\n const originalPlaceholder = $field.attr('placeholder');\n const originalType = $field.prop('type');\n let attributeHandler;\n\n // -----------------------------------------------------------------\n // mutate datePicker public API\n // -----------------------------------------------------------------\n {\n const withCalendar = callback => value => {\n if (typeof calendar !== 'undefined') {\n return callback(value)\n }\n };\n\n const destroyCalendar = withCalendar(() => {\n calendar.datepicker('destroy');\n });\n\n datePicker.show = showDatePicker;\n\n datePicker.hide = hideDatePicker;\n\n // un-does everything the `initPolyfill` function constructed or mutated.\n datePicker.destroyPolyfill = () => {\n destroyPolyfill();\n\n $field.off('propertychange keyup input paste', handleFieldUpdate);\n\n if (attributeHandler) {\n attributeHandler.disconnect();\n attributeHandler = null;\n }\n\n if (originalPlaceholder) {\n $field.attr('placeholder', originalPlaceholder);\n }\n\n if (originalType) {\n $field.prop('type', originalType);\n }\n\n $field.removeAttr('data-aui-dp-uuid');\n\n destroyCalendar();\n\n // TODO: figure out a way to tear down the popup (if necessary)\n\n delete datePicker.destroyPolyfill;\n\n delete datePicker.show;\n delete datePicker.hide;\n\n };\n\n datePicker.setDate = withCalendar(value => {\n calendar.datepicker('setDate', value)\n });\n\n datePicker.getDate = withCalendar(() => calendar.datepicker('getDate'));\n\n datePicker.setMin = withCalendar(value => calendar.datepicker('option', 'minDate', value));\n\n datePicker.setMax = withCalendar(value => calendar.datepicker('option', 'maxDate', value));\n }\n\n\n // -----------------------------------------------------------------\n // polyfill bootstrap ----------------------------------------------\n // -----------------------------------------------------------------\n\n\n if (!(options.languageCode in DatePicker.prototype.localisations)) {\n options.languageCode = '';\n }\n const i18nConfig = DatePicker.prototype.localisations;\n\n $field.attr('aria-controls', datePickerUUID);\n\n if (typeof calendar === 'undefined') {\n if (typeof $field.attr('step') !== 'undefined') {\n logger.log('WARNING: The date picker polyfill currently does not support the step attribute!');\n }\n const baseConfig = makeConfig({\n dateFormat: options.dateFormat,\n minDate: options.minDate,\n maxDate: options.maxDate,\n $field,\n onSelect: options.onSelect,\n hide: datePicker.hide,\n onChangeMonthYear: handleChangeMonthYear\n });\n const config = $.extend(undefined, baseConfig, i18nConfig);\n\n // If this is a string value, it will be coerced to numeric.\n // Since nothing only numbers can be larger than a negative number, this works as a defense.\n if (options.firstDay > -1) {\n config.firstDay = options.firstDay;\n }\n\n calendar = initCalendar({\n config,\n popupContents: getPopupContents({$field}),\n getCalendarNode,\n hint: options.hint\n });\n\n createPolyfill();\n\n $field.on('propertychange keyup input paste', handleFieldUpdate);\n\n\n // bind attribute handlers to account for html5 attributes\n attributeHandler = new MutationObserver(function (mutationsList) {\n mutationsList.forEach(function (mutation) {\n if (mutation.attributeName === 'min') {\n datePicker.setMin(mutation.target.getAttribute('min'));\n } else if (mutation.attributeName === 'max') {\n datePicker.setMax(mutation.target.getAttribute('max'));\n }\n });\n });\n attributeHandler.observe($field.get(0), {attributes: true});\n }\n\n // bind what we need to start off with\n $field.on('focus click', handleFieldFocus); // the click is for fucking opera... Y U NO FIRE FOCUS EVENTS PROPERLY???\n\n // give users a hint that this is a date field; note that placeholder isn't technically a valid attribute\n // according to the spec...\n $field.attr('placeholder', options.placeholder);\n\n // Override the browser's default date field implementation.\n // There used to be a fix for AUI-3681 here, too, but my testing of Edge 15\n // shows that changing the `type` of input does not erase its value.\n // see https://codepen.io/chrisdarroch/pen/YzwgjyJ\n $field.prop('type', 'text');\n // Set default value on initialization to handle all date formats.\n // It is possible, because of changing type to text on the line above.\n $field.val($field.attr('value'));\n // Trigger change to update calendar popup value.\n $field.trigger('propertychange');\n\n // demonstrate the polyfill is initialised\n $field.attr('data-aui-dp-uuid', datePickerUUID);\n};\n\nfunction DatePicker(field, baseOptions) {\n let options = {};\n\n const datePickerUUID = generateUniqueId('date-picker');\n\n const $field = $(field);\n\n const datePicker = {\n getUUID: () => datePickerUUID,\n getField: () => $field,\n getOptions: () => options,\n destroy: () => {\n if (typeof datePicker.destroyPolyfill === 'function') {\n datePicker.destroyPolyfill();\n }\n },\n reset: () => {\n datePicker.destroy();\n const browserDoesNotSupportDateField = !DatePicker.prototype.browserSupportsDateField;\n const shouldOverrideBrowserDefault = options.overrideBrowserDefault !== false;\n\n if (\n browserDoesNotSupportDateField ||\n shouldOverrideBrowserDefault\n ) {\n initPolyfill(datePicker);\n }\n },\n reconfigure: newOptions => {\n options = $.extend(undefined, DatePicker.prototype.defaultOptions, newOptions);\n datePicker.reset();\n }\n };\n\n datePicker.reconfigure(baseOptions);\n\n return datePicker;\n}\n\n// -------------------------------------------------------------------------\n// things that should be common --------------------------------------------\n// -------------------------------------------------------------------------\n\nDatePicker.prototype.browserSupportsDateField = supportsDateField();\n\nDatePicker.prototype.defaultOptions = {\n overrideBrowserDefault: false,\n firstDay: -1,\n languageCode: $('html').attr('lang') || 'en-AU',\n dateFormat: datepickerUI.W3C // same as $.datepicker.ISO_8601\n};\n\nfunction CalendarWidget(calendarNode, baseOptions) {\n const options = $.extend({\n 'nextText': '>',\n 'prevText': '<'\n }, baseOptions);\n\n const $calendarNode = $(calendarNode);\n\n const $result = $calendarNode\n .addClass('aui-datepicker-dialog')\n .addClass('aui-calendar-widget')\n .datepicker(options);\n\n if (options.hint) {\n const $hint = $('<div/>').addClass('aui-datepicker-hint');\n $hint.append('<span/>').text(options.hint);\n $result.append($hint);\n }\n\n $result.reconfigure = (options) => {\n $result.datepicker('destroy');\n $result.datepicker(options);\n };\n\n $result.destroy = () => {\n $result.datepicker('destroy');\n };\n\n return $result\n}\n\n// adapted from the jQuery UI Datepicker widget (v1.8.16), with the following changes:\n// - dayNamesShort -> dayNamesMin\n// - unnecessary attributes omitted\n/*\nCODE to extract codes out:\n\nvar langCode, langs, out;\nlangs = jQuery.datepicker.regional;\nout = {};\n\nfor (langCode in langs) {\n if (langs.hasOwnProperty(langCode)) {\n out[langCode] = {\n 'dayNames': langs[langCode].dayNames,\n 'dayNamesMin': langs[langCode].dayNamesShort, // this is deliberate\n 'firstDay': langs[langCode].firstDay,\n 'isRTL': langs[langCode].isRTL,\n 'monthNames': langs[langCode].monthNames,\n 'showMonthAfterYear': langs[langCode].showMonthAfterYear,\n 'yearSuffix': langs[langCode].yearSuffix\n };\n }\n}\n\n */\n\nDatePicker.prototype.localisations = {\n 'dayNames': [I18n.getText('ajs.datepicker.localisations.day-names.sunday'),\n I18n.getText('ajs.datepicker.localisations.day-names.monday'),\n I18n.getText('ajs.datepicker.localisations.day-names.tuesday'),\n I18n.getText('ajs.datepicker.localisations.day-names.wednesday'),\n I18n.getText('ajs.datepicker.localisations.day-names.thursday'),\n I18n.getText('ajs.datepicker.localisations.day-names.friday'),\n I18n.getText('ajs.datepicker.localisations.day-names.saturday')],\n 'dayNamesMin': [I18n.getText('ajs.datepicker.localisations.day-names-min.sunday'),\n I18n.getText('ajs.datepicker.localisations.day-names-min.monday'),\n I18n.getText('ajs.datepicker.localisations.day-names-min.tuesday'),\n I18n.getText('ajs.datepicker.localisations.day-names-min.wednesday'),\n I18n.getText('ajs.datepicker.localisations.day-names-min.thursday'),\n I18n.getText('ajs.datepicker.localisations.day-names-min.friday'),\n I18n.getText('ajs.datepicker.localisations.day-names-min.saturday')],\n 'firstDay': I18n.getText('ajs.datepicker.localisations.first-day'),\n 'isRTL': I18n.getText('ajs.datepicker.localisations.is-RTL') === 'true',\n 'monthNames': [I18n.getText('ajs.datepicker.localisations.month-names.january'),\n I18n.getText('ajs.datepicker.localisations.month-names.february'),\n I18n.getText('ajs.datepicker.localisations.month-names.march'),\n I18n.getText('ajs.datepicker.localisations.month-names.april'),\n I18n.getText('ajs.datepicker.localisations.month-names.may'),\n I18n.getText('ajs.datepicker.localisations.month-names.june'),\n I18n.getText('ajs.datepicker.localisations.month-names.july'),\n I18n.getText('ajs.datepicker.localisations.month-names.august'),\n I18n.getText('ajs.datepicker.localisations.month-names.september'),\n I18n.getText('ajs.datepicker.localisations.month-names.october'),\n I18n.getText('ajs.datepicker.localisations.month-names.november'),\n I18n.getText('ajs.datepicker.localisations.month-names.december')],\n 'showMonthAfterYear': I18n.getText('ajs.datepicker.localisations.show-month-after-year') === 'true',\n 'yearSuffix': I18n.getText('ajs.datepicker.localisations.year-suffix')\n};\n\n\n// -------------------------------------------------------------------------\n// finally, integrate with jQuery for convenience --------------------------\n// -------------------------------------------------------------------------\nconst key = 'aui-datepicker';\n\nconst makePlugin = (WidgetConstructor) => function (options) {\n let picker = this.data(key);\n if (!picker) {\n picker = new WidgetConstructor(this, options);\n this.data(key, picker);\n } else if (typeof options === 'object') {\n picker.reconfigure(options);\n } else if (options === 'destroy') {\n picker.destroy();\n }\n return picker;\n};\n\n$.fn.datePicker = makePlugin(DatePicker);\nglobalize('DatePicker', DatePicker);\n\n$.fn.calendarWidget = makePlugin(CalendarWidget);\nglobalize('CalendarWidget', CalendarWidget);\n\nexport default DatePicker;\nexport { CalendarWidget }\n","export 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 STATUS: 'aui-restfultable-status'\n};\n","import Backbone from 'backbone';\nexport default Backbone.View;\n","import Backbone from 'backbone';\nexport default Backbone.View;\n","import Backbone from 'backbone';\nexport default Backbone.View;\n","export default {\n ENABLED_SUBMIT: 'enabledSubmit',\n ROW_VIEW: 'RestfulTable_Row_View'\n};\n","export 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","import './../spinner';\nimport classNames from './class-names';\n\nexport const spinner = '<aui-spinner size=\"small\"></aui-spinner>';\nconst SPINNER_SELECTOR = 'aui-spinner';\n\n/**\n * Appends spinner to .aui-restfultable-status container if not already present\n *\n * @param $el\n */\nexport function appendStatusSpinner($el) {\n if ($el.find(SPINNER_SELECTOR).length === 0) {\n $el.find(`.${classNames.STATUS}`).append(spinner);\n }\n}\n\n/**\n * Removes spinner from .aui-restfultable-status container\n *\n * @param $el\n */\nexport function removeStatusSpinner($el) {\n $el.find(`.${classNames.STATUS} ${SPINNER_SELECTOR}`).remove();\n}\n","import $ from '../jquery';\nimport '../../../js-vendor/jquery/serializetoobject';\nimport Backbone from 'backbone';\nimport classNames from './class-names';\nimport dataKeys from './data-keys';\nimport events from './event-names';\nimport { I18n } from '../i18n';\nimport {appendStatusSpinner, removeStatusSpinner} from './spinner';\n\nvar isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\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 */\nexport default Backbone.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 (options) {\n this.$el = $(this.el);\n\n // faster lookup\n this._event = events;\n this.classNames = classNames;\n this.dataKeys = dataKeys;\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\n .on(this._event.CANCEL, () => {\n if (!this.isCreateRow) {\n this.disabled = true;\n }\n })\n .on(this._event.SAVE, (focusUpdated) => !this.disabled && this.submit(focusUpdated))\n .on(this._event.FOCUS, (name) => this.focus(name))\n .on(this._event.BLUR, () => {\n this.$el.removeClass(this.classNames.FOCUSED);\n this.disable();\n })\n .on(this._event.SUBMIT_STARTED, () => this._submitStarted())\n .on(this._event.SUBMIT_FINISHED, () => this._submitFinished())\n },\n\n /**\n * Renders default cell contents\n *\n * @param data\n */\n defaultColumnRenderer: function (data) {\n if (data.allowEdit !== false) {\n return $(\"<input type='text' />\")\n .addClass('text')\n .attr({\n name: data.name,\n value: data.value,\n 'aria-label': data.ariaLabel\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 () {\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 (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 (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 () {\n this.submitting = true;\n this.showLoading()\n .disable()\n .delegateEvents({});\n\n return this;\n },\n\n /**\n * Enables events & fields\n *\n * @return EditRow\n */\n _submitFinished: function () {\n this.submitting = false;\n this.hideLoading()\n .enable()\n .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 (e) {\n if (!this.hasFocus()) {\n this.trigger(this._event.FOCUS, e.target.name);\n }\n return this;\n },\n\n\n /**\n * Returns true if row has focused class\n *\n * @return Boolean\n */\n hasFocus: function () {\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 (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 () {\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 (isFirefox) {\n $submit = this.$el.find(':submit');\n\n if ($submit.length) {\n $replacementSubmit = $(\"<input type='submit' class='\" + this.classNames.SUBMIT + \"' />\")\n .addClass($submit.attr('class'))\n .val($submit.val())\n .data(this.dataKeys.ENABLED_SUBMIT, $submit);\n\n $submit.replaceWith($replacementSubmit);\n }\n }\n\n this.$el.addClass(this.classNames.DISABLED)\n .find(':submit')\n .prop('disabled', true);\n\n return this;\n },\n\n /**\n * Enables all fields\n *\n * @return EditRow\n */\n enable: function () {\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 (isFirefox) {\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)\n .find(':submit')\n .prop('disabled', false);\n\n return this;\n },\n\n /**\n * Shows loading indicator\n *\n * @return EditRow\n */\n showLoading: function () {\n appendStatusSpinner(this.$el);\n return this;\n },\n\n /**\n * Hides loading indicator\n *\n * @return EditRow\n */\n hideLoading: function () {\n removeStatusSpinner(this.$el);\n return this;\n },\n\n /**\n * If any of the fields have changed\n *\n * @return {Boolean}\n */\n hasUpdates: function () {\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 () {\n var $el = this.$el;\n return $el.serializeObject ?\n $el.serializeObject() :\n $el.serialize();\n },\n\n mapSubmitParams: function (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 (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 $(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 () {\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 (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 (name, msg) {\n return $('<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 (errors) {\n var instance = this;\n\n this.$('.' + this.classNames.ERROR).remove(); // avoid duplicates\n\n if (errors) {\n $.each(errors, function (name, msg) {\n instance.$el.find(\"[name='\" + name + \"']\")\n .closest('td')\n .append(instance.renderError(name, msg));\n });\n }\n\n return this;\n },\n\n\n /**\n * Handles rendering of row\n *\n * @param {Object} renderData\n * ... {Object} vales - Values of fields\n */\n render: function (renderData) {\n var instance = this;\n\n this.$el.empty();\n\n if (this.allowReorder) {\n $('<td class=\"' + this.classNames.ORDER + '\" />').append(this.renderDragHandle()).appendTo(instance.$el);\n }\n\n $.each(this.columns, function (i, column) {\n var contents;\n var $cell;\n var value = renderData.values[column.id];\n var args = [\n {name: column.id, ariaLabel: column.inputAriaLabel ? column.inputAriaLabel : column.header, value: value, allowEdit: column.allowEdit},\n renderData.values,\n 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\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 = $('<td />');\n\n if (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\n .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 (update) {\n var $operations = $('<td class=\"aui-restfultable-operations\" />');\n\n if (update) {\n $operations.append($('<input class=\"aui-button aui-button-primary\" type=\"submit\" />').attr({\n accesskey: this.submitAccessKey,\n value: I18n.getText('aui.words.update')\n }))\n .append($('<a class=\"aui-button aui-button-link\" href=\"#\" />')\n .addClass(this.classNames.CANCEL)\n .text(I18n.getText('aui.words.cancel'))\n .attr({\n accesskey: this.cancelAccessKey\n }));\n } else {\n $operations.append($('<input class=\"aui-button aui-button-primary\" type=\"submit\" />').attr({\n accesskey: this.submitAccessKey,\n value: I18n.getText('aui.words.add')\n }));\n }\n\n return $operations.add($(`<td class=\"${this.classNames.STATUS}\" />`));\n }\n});\n","import $ from '../jquery';\n\nconst eventRoot = document || {};\nconst $eventTarget = $(eventRoot);\n\n/**\n * Triggers a custom event on the AJS object\n *\n * @param {String} name - name of event\n * @param {Array} args - args for event handler\n */\nfunction triggerEvt (name, args) {\n $eventTarget.trigger(name, args);\n}\n\n/**\n * Binds handler to the AJS object\n *\n * @param {String} name\n * @param {Function} func\n */\nfunction bindEvt (name, func) {\n $eventTarget.bind(name, func);\n}\n\n/**\n * Some generic error handling that fires event in multiple contexts\n * - on AJS object\n * - on Instance\n * - on AJS object with prefixed id.\n *\n * @param evt\n * @param inst\n * @param args\n */\nfunction triggerEvtForInst (evt, inst, args) {\n $(inst).trigger(evt, args);\n triggerEvt(evt, args);\n if (inst.id) {\n triggerEvt(inst.id + '-' + evt, args);\n }\n}\n\nexport {\n bindEvt,\n triggerEvt,\n triggerEvtForInst\n};\n","import $ from '../jquery';\nimport { triggerEvtForInst } from './event-handlers';\nimport { isEmpty, isEqual } from 'underscore';\nimport Backbone from 'backbone';\nimport events from './event-names';\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 */\nvar EntryModel = Backbone.Model.extend({\n sync: function (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 Backbone.sync.apply(Backbone, 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 (attributes, options) {\n options = options || {};\n\n var instance = this;\n var Model;\n var syncModel;\n var error = options.error; // we override, so store original\n var success = options.success;\n\n\n // override error handler to provide some defaults\n options.error = function (model, xhr) {\n\n var data = $.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 Backbone.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 = Backbone.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 {object} [options]\n * @param {function} options.success - Server success callback\n * @param {function} options.error - Server error callback\n * @param {object} options.data\n *\n * @return EntryModel\n */\n destroy: function (options) {\n options = options || {};\n\n var instance = this;\n var url = this.url();\n\n $.ajax({\n url: url,\n type: 'DELETE',\n dataType: 'json',\n data: options.data || {},\n contentType: 'application/json',\n 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(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 /**\n * A more complex lookup for changed attributes then default backbone one.\n *\n * @param attributes\n */\n changedAttributes: function (attributes) {\n var changed = {};\n var current = this.toJSON();\n\n $.each(attributes, function (name, value) {\n\n if (!current[name]) {\n if (typeof value === 'string') {\n if ($.trim(value) !== '') {\n changed[name] = value;\n }\n } else if ($.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 === 'object') {\n if (!isEqual(value, current[name])) {\n changed[name] = value;\n }\n } else {\n changed[name] = value;\n }\n }\n });\n\n if (!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 (changed) {}, // eslint-disable-line no-unused-vars\n\n /**\n * Throws a server error event unless user input validation error (status 400)\n *\n * @param xhr\n * @param ajaxOptions\n */\n _serverErrorHandler: function (xhr, ajaxOptions) {\n var data;\n if (xhr.status !== 400) {\n data = $.parseJSON(xhr.responseText || xhr.data);\n triggerEvtForInst(events.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 (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 Backbone.Model.prototype.fetch.call(this, options);\n }\n});\n\nexport default EntryModel;\n","import $ from '../jquery';\nimport Backbone from 'backbone';\nimport { I18n } from '../i18n';\nimport classNames from './class-names';\nimport dataKeys from './data-keys';\nimport events from './event-names';\nimport {appendStatusSpinner, removeStatusSpinner} from './spinner';\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 */\nexport default Backbone.View.extend({\n tagName: 'tr',\n\n events: {\n 'click .aui-restfultable-editable': 'edit'\n },\n\n initialize: function (options) {\n options = options || {};\n\n this._event = events;\n this.classNames = classNames;\n this.dataKeys = dataKeys;\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' +\n 'a work around. https://github.com/documentcloud/backbone/issues/244');\n }\n\n this.index = options.index || 0;\n this.deleteConfirmationCallback = options.deleteConfirmationCallback;\n this.allowReorder = options.allowReorder;\n this.$el = $(this.el);\n\n this\n .on(this._event.CANCEL, () => this.disabled = true)\n .on(this._event.FOCUS, field => this.focus(field))\n .on(this._event.BLUR, () => this.unfocus())\n .on(this._event.MODAL, () => this.$el.addClass(this.classNames.ACTIVE))\n .on(this._event.MODELESS, () => this.$el.removeClass(this.classNames.ACTIVE))\n },\n\n /**\n * Renders drag handle\n *\n * @return jQuery\n */\n renderDragHandle: function () {\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 (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 (attr) {\n var instance = this;\n\n this.model.addExpand(attr);\n this.showLoading();\n this.model.save(attr, {\n success: function () {\n instance.hideLoading().render();\n instance.trigger(instance._event.UPDATED);\n },\n error: function () {\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 (success, error) {\n var instance = this;\n\n this.showLoading();\n this.model.fetch({\n success: function () {\n instance.hideLoading().render();\n if (success) {\n success.apply(this, arguments);\n }\n },\n error: function () {\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 () {\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 () {\n $(this.el).addClass(this.classNames.FOCUSED);\n return this;\n },\n\n /**\n * Removes focus class\n *\n * @return Row\n */\n unfocus: function () {\n $(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 () {\n appendStatusSpinner(this.$el);\n return this;\n },\n\n /**\n * Hides loading class (to show server activity)\n *\n * @return Row\n */\n hideLoading: function () {\n removeStatusSpinner(this.$el);\n return this;\n },\n\n /**\n * Switches row into edit mode\n *\n * @param e\n */\n edit: function (e) {\n var field;\n if ($(e.target).is('.' + this.classNames.EDITABLE)) {\n field = $(e.target).attr('data-field-name');\n } else {\n field = $(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 () {\n var instance = this;\n if (this.allowDelete !== false) {\n return $(\"<a href='#' class='aui-button' />\")\n .addClass(this.classNames.DELETE)\n .text(I18n.getText('aui.words.delete')).on('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 () {\n if (this.deleteConfirmationCallback) {\n let promise = this.deleteConfirmationCallback(this.model.toJSON());\n if (promise && promise.then) {\n promise.then(\n () => this.model.destroy(),\n () => {}\n );\n } else {\n throw new Error('deleteConfirmationCallback needs to return a Promise')\n }\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 () {\n var instance = this;\n var renderData = this.model.toJSON();\n var $opsCell = $(\"<td class='aui-restfultable-operations' />\").append(this.renderOperations({}, renderData));\n var $throbberCell = $(`<td class=\"${this.classNames.STATUS}\" />`);\n // restore state\n this.$el\n .removeClass(this.classNames.DISABLED + ' ' + this.classNames.FOCUSED + ' ' + this.classNames.EDIT_ROW)\n .addClass(this.classNames.READ_ONLY)\n .empty();\n\n\n if (this.allowReorder) {\n $('<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 $.each(this.columns, function (i, column) {\n var contents;\n var $cell = $('<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 = $('<span />')\n .addClass(instance.classNames.EDITABLE)\n .append('<span class=\"aui-icon aui-icon-small aui-iconfont-edit\"></span>')\n .append(contents)\n .attr('data-field-name', fieldName);\n\n $cell = $('<td />').append($editableRegion).appendTo(instance.$el);\n\n if (!contents || !$.trim(contents)) {\n $cell.addClass(instance.classNames.NO_VALUE);\n $editableRegion.html($('<em />').text(this.emptyText || I18n.getText('aui.enter.value')));\n }\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\n .append($opsCell)\n .append($throbberCell)\n .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","import $ from './jquery';\nimport 'jquery-ui/ui/core';\nimport 'jquery-ui/ui/widget';\nimport 'jquery-ui/ui/widgets/mouse';\nimport 'jquery-ui/ui/widgets/draggable';\nimport 'jquery-ui/ui/widgets/sortable';\nimport * as logger from './internal/log';\nimport Backbone from 'backbone';\nimport classNames from './restful-table/class-names';\nimport CustomCreateView from './restful-table/custom-create-view';\nimport CustomEditView from './restful-table/custom-edit-view';\nimport CustomReadView from './restful-table/custom-read-view';\nimport dataKeys from './restful-table/data-keys';\nimport EditRow from './restful-table/edit-row';\nimport EntryModel from './restful-table/entry-model';\nimport {triggerEvtForInst} from './restful-table/event-handlers';\nimport events from './restful-table/event-names';\nimport globalize from './internal/globalize';\nimport Row from './restful-table/row';\nimport { I18n } from './i18n';\nimport {spinner} from './restful-table/spinner';\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 */\nvar RestfulTable = Backbone.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 * ... @property {RestfulTable~deleteConfirmationCallback} deleteConfirmationCallback - function returning Promise determining if row should be deleted or not\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 * @callback deleteConfirmationCallback\n */\n initialize: function (options) {\n var instance = this;\n\n // combine default and user options\n instance.options = $.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 = events;\n instance.classNames = classNames;\n instance.dataKeys = dataKeys;\n\n // shortcuts to popular elements\n this.$table = $(options.el)\n .addClass(this.classNames.RESTFUL_TABLE)\n .addClass(this.classNames.ALLOW_HOVER)\n .addClass('aui');\n\n this.$table.wrapAll(\"<form class='aui' action='#' />\");\n\n this.$thead = $('<thead/>');\n this.$theadRow = $('<tr />').appendTo(this.$thead);\n this.$tbody = $('<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 if (this.options.deleteConfirmationCallback && !(this.options.deleteConfirmationCallback instanceof Function)) {\n throw new Error('RestfulTable: Init failed! deleteConfirmationCallback is not a function');\n }\n\n // Let user know the table is loading\n this.showGlobalLoading();\n this.options.columns.forEach(function (column) {\n var header = $.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 (e, elt) {\n var helper = $('<div/>').attr('class', elt.attr('class')).addClass(instance.classNames.MOVEABLE);\n elt.children().each(function () {\n var $td = $(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($('<div/>').html($td.html()).attr('class', $td.attr('class')).width(width));\n });\n\n helper = $(\"<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 (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\n .addClass(instance.classNames.MOVEABLE)\n .children().each(function (i) {\n $(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() + '\">&nbsp;</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 (event, ui) {\n if ($(ui.item[0]).is(':visible')) {\n ui.item\n .removeClass(instance.classNames.MOVEABLE)\n .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 (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.on('selectstart mousedown', function (event) {\n return !$(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 () {\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 });\n this._createRow.on(this._event.CREATED, function (values) {\n if ((typeof instance.options.addPosition === 'undefined' && instance.options.createPosition === 'bottom') ||\n instance.options.addPosition === 'bottom') {\n instance.addRow(values);\n } else {\n instance.addRow(values, 0);\n }\n });\n this._createRow.on(this._event.VALIDATION_ERROR, function () {\n this.trigger(instance._event.FOCUS);\n });\n this._createRow.render({\n errors: {},\n values: {}\n });\n\n // ... and appends it as the first row\n this.$create = $('<tbody class=\"' + this.classNames.CREATE + '\" />')\n .append(this._createRow.el);\n\n // Manage which row has focus\n this._applyFocusCoordinator(this._createRow);\n\n // focus create row\n if (this.options.autoFocus) {\n this._createRow.trigger(this._event.FOCUS);\n }\n }\n\n // when a model is removed from the collection, remove it from the viewport also\n this._models.on('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 () {\n var instance = this;\n if ($.isFunction(this.options.resources.all)) {\n this.options.resources.all(function (entries) {\n instance.populate(entries);\n });\n } else {\n $.get(this.options.resources.all, function (entries) {\n instance.populate(entries);\n });\n }\n },\n\n move: function (context) {\n\n var instance = this;\n\n var createRequest = function (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 $.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 () {\n // hides loading indicator (spinner)\n context.row.hideLoading();\n },\n success: function (xhr) {\n triggerEvtForInst(instance._event.REORDER_SUCCESS, instance, [xhr]);\n },\n error: function (xhr) {\n var responseData = $.parseJSON(xhr.responseText || xhr.data);\n 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 () {\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 (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, this);\n this.tableRows = undefined;\n if (!options.silent) {\n this.trigger('refresh', this, options);\n }\n return this;\n },\n remove: function (...args) {\n this.tableRows = instance.getRows();\n Backbone.Collection.prototype.remove.apply(this, args);\n this.tableRows = undefined;\n return this;\n }\n });\n\n return new RowsAwareCollection([], {\n comparator: function (row) {\n // sort models in collection based on dom ordering\n var index;\n\n var currentTableRows = (this && 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 (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\n .append(this.$thead);\n\n if (this.options.createPosition === 'bottom') {\n this.$table.append(this.$tbody)\n .append(this.$create);\n } else {\n this.$table\n .append(this.$create)\n .append(this.$tbody);\n }\n\n this.$table.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 () {\n if (!this.$loading) {\n this.$loading = $('<div class=\"aui-restfultable-init\">' +\n '<span class=\"aui-restfultable-loading\">' + spinner + 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 () {\n if (this.$loading) {\n this.$loading.remove();\n }\n return this;\n },\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 (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. ' +\n 'Maybe you are not returning it from your restend point?' +\n 'Recieved:' + JSON.stringify(values));\n }\n\n model = new this.options.model(values);\n\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 (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 () {\n return this._models.length === 0;\n },\n\n /**\n * Gets all models\n *\n * @return {Backbone.Collection}\n */\n getModels: function () {\n return this._models;\n },\n\n /**\n * Gets table body\n *\n * @return {jQuery}\n */\n getTable: function () {\n return this.$table;\n },\n\n /**\n * Gets table body\n *\n * @return {jQuery}\n */\n getTableBody: function () {\n return this.$tbody;\n },\n\n /**\n * Gets create Row\n *\n * @return {EditRow}\n */\n getCreateRow: function () {\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 () {\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 (tr) {\n return $(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 () {\n\n if (this.$noEntries) {\n this.$noEntries.remove();\n }\n\n this.$noEntries = $('<tr>')\n .addClass(this.classNames.NO_ENTRIES)\n .append($('<td>')\n .attr('colspan', this.getColumnCount())\n .text(this.options.noEntriesMsg)\n )\n .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 () {\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 () {\n var instance = this;\n var views = [];\n\n this.$tbody.find('.' + this.classNames.READ_ONLY).each(function () {\n var $row = $(this);\n var 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 (model, index) {\n var instance = this;\n var $rows = this.$tbody.find('.' + this.classNames.READ_ONLY);\n var $row;\n var 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 deleteConfirmationCallback: this.options.deleteConfirmationCallback\n });\n\n this.removeNoEntriesMsg();\n\n view.on(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.on(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.on(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 (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 (view) {\n var instance = this;\n\n if (!view.hasFocusBound) {\n view.hasFocusBound = true;\n\n view.on(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 Row && 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 (editView) {\n var index = $.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 () {\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 () {\n return this.editRows.length <= 1;\n },\n\n /**\n * Dismisses rows being edited concurrently that have no changes\n */\n dismissEditRows: function () {\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 (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 })\n .on(instance._event.UPDATED, function (model, focusUpdated) {\n instance._removeEditRow (this);\n this.off();\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 })\n .on(instance._event.VALIDATION_ERROR, function () {\n this.trigger(instance._event.FOCUS);\n })\n .on(instance._event.FINISHED_EDITING, function () {\n instance._removeEditRow(this);\n row.render().delegateEvents();\n this.off(); // avoid any other updating, blurring, finished editing, cancel events being fired\n })\n .on(instance._event.CANCEL, function () {\n instance._removeEditRow(this);\n this.off(); // avoid any other updating, blurring, finished editing, cancel events being fired\n row.render().delegateEvents(); // render and re` events\n instance._shiftFocusAfterEdit();\n })\n .on(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 /**\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 (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 = rows.map((row) => {\n var model = new this.options.model(row);\n els.push(this._renderRow(model, -1).el);\n return model;\n });\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 (options) {\n return {\n model: options.model || EntryModel,\n allowEdit: true,\n views: {\n editRow: EditRow,\n row: Row\n },\n Collection: Backbone.Collection.extend({\n url: options.resources.self,\n model: options.model || EntryModel\n }),\n allowReorder: false,\n fieldFocusSelector: function (name) {\n return ':input[name=' + name + '], #' + name;\n },\n loadingMsg: options.loadingMsg || I18n.getText('aui.words.loading')\n };\n }\n});\n\nRestfulTable.ClassNames = classNames;\nRestfulTable.CustomCreateView = CustomCreateView;\nRestfulTable.CustomEditView = CustomEditView;\nRestfulTable.CustomReadView = CustomReadView;\nRestfulTable.DataKeys = dataKeys;\nRestfulTable.EditRow = EditRow;\nRestfulTable.EntryModel = EntryModel;\nRestfulTable.Events = events;\nRestfulTable.Row = Row;\n\nglobalize('RestfulTable', RestfulTable);\n\nexport default RestfulTable;\n","import $ from './jquery';\nimport globalize from './internal/globalize';\n\n/**\n * Clones the element specified by the selector and removes the id attribute.\n *\n * @param {String} selector A jQuery selector\n */\nfunction clone (selector) {\n return $(selector).clone().removeAttr('id');\n}\n\nglobalize('clone', clone);\n\nexport default clone;\n","\nvar DocumentTouch = window.DocumentTouch;\nvar hasTouch = ('ontouchstart' in window) || DocumentTouch && document instanceof DocumentTouch;\nexport default hasTouch;\n","import $ from '../jquery';\n\nfunction replaceAttributeForID($clone, id, value, attribute) {\n $clone.find(`[${attribute}]`).attr(attribute, (i, oldValue) => id === oldValue ? value : undefined);\n}\n\nfunction setCorrespondingTriggersID($clone, id, uuid) {\n replaceAttributeForID($clone, id, uuid, 'aria-controls');\n replaceAttributeForID($clone, id, uuid, 'aria-owns');\n}\n\nexport default function deduplicateIDs($clone, uidFunction) {\n let wrapper = $('<div></div>');\n wrapper.append($clone);\n wrapper.find('[id]')\n .each((i, el) => {\n const uuid = uidFunction(`${el.id}-`);\n setCorrespondingTriggersID(wrapper, el.id, uuid);\n el.id = uuid;\n });\n}\n","import $ from './jquery';\nimport './tooltip';\nimport './navigation';\nimport { I18n } from './i18n';\nimport clone from './clone';\nimport * as deprecate from './internal/deprecation';\nimport globalize from './internal/globalize';\nimport hasTouch from './internal/has-touch';\nimport isInput from './internal/is-input';\nimport keyCode from './key-code';\nimport mediaQuery from './internal/mediaQuery';\nimport skate from './internal/skate';\nimport uid from './unique-id';\nimport widget from './internal/widget';\nimport deduplicateIDs from './internal/deduplicateIDs';\n\n\nfunction sidebarOffset(sidebar) {\n return sidebar.offset().top;\n}\n\nfunction Sidebar(selector) {\n this.$el = $(selector);\n if (!this.$el.length) {\n return;\n }\n this.$body = $('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\nvar FORCE_COLLAPSE_WIDTH = 1240;\nvar EVENT_PREFIX = '_aui-internal-sidebar-';\n\nfunction namespaceEvents (events) {\n return $.map(events.split(' '), function (event) {\n return EVENT_PREFIX + event;\n }).join(' ');\n}\n\nSidebar.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\nSidebar.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\nSidebar.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\nSidebar.prototype.setTopPosition = function (scrollTop = window.pageYOffset) {\n this.$wrapper.toggleClass('aui-is-docked', scrollTop > sidebarOffset(this.$el));\n return this;\n};\n\nSidebar.prototype.setPosition = deprecate.fn(Sidebar.prototype.setTopPosition, 'Sidebar.setPosition', {\n removeInVersion: '10.0.0',\n sinceVersion: '7.6.1',\n alternativeName: 'Sidebar.setTopPosition',\n});\n\nSidebar.prototype.setLeftPosition = function (scrollLeft = window.pageXOffset) {\n if (this.$wrapper.hasClass('aui-is-docked')) {\n this.$wrapper.css({ left: -scrollLeft });\n }\n return this;\n};\n\nSidebar.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: $.noop,\n wide: function (s) {\n s._expand(viewportWidth, true);\n }\n };\n transition.collapsed.wide = {\n narrow: $.noop, // Becomes collapsed narrow (no visual change).\n wide: $.noop\n };\n transition.expanded.narrow = {\n narrow: $.noop,\n wide: function (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 (s) {\n s._collapse(true);\n },\n wide: $.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\nSidebar.prototype._collapse = function (isResponsive) {\n if (this.isCollapsed()) {\n return this;\n }\n\n var startEvent = $.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 $(this.inlineDialogSelector).attr('responds-to', 'hover');\n\n if (!this.isAnimated()) {\n this.$el.trigger($.Event(EVENT_PREFIX + 'collapse-end', {isResponsive: isResponsive}));\n }\n return this;\n};\n\nSidebar.prototype.collapse = function () {\n return this._collapse(false);\n};\n\nSidebar.prototype._expand = function (viewportWidth, isResponsive) {\n var startEvent = $.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 $(this.inlineDialogSelector).removeAttr('responds-to');\n\n if (!this.isAnimated()) {\n this.$el.trigger($.Event(EVENT_PREFIX + 'expand-end', {isResponsive: isResponsive}));\n }\n return this;\n};\n\nSidebar.prototype.expand = function () {\n if (this.isCollapsed()) {\n this._expand(this._previousViewportWidth, false);\n }\n return this;\n};\n\nSidebar.prototype.isAnimated = function () {\n return this.$el.hasClass('aui-is-animated');\n};\n\nSidebar.prototype.isCollapsed = function () {\n return this.$el.attr('aria-expanded') === 'false';\n};\n\nSidebar.prototype.isViewportNarrow = function (viewportWidth) {\n viewportWidth = viewportWidth === undefined ? this._previousViewportWidth : viewportWidth;\n return viewportWidth < FORCE_COLLAPSE_WIDTH;\n};\n\nSidebar.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 // eslint-disable-next-line\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\nSidebar.prototype.reflow = function reflow(\n scrollTop = window.pageYOffset,\n viewportHeight = document.documentElement.clientHeight,\n viewportWidth = window.innerWidth,\n scrollHeight = document.documentElement.scrollHeight,\n scrollLeft = window.pageXOffset) {\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 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.setTopPosition(scrollTop);\n }\n }\n\n if (scrollLeft !== this._previousScrollLeft) {\n this.setLeftPosition(scrollLeft);\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 this._previousScrollLeft = scrollLeft;\n return this;\n};\n\nSidebar.prototype.toggle = function () {\n if (this.isCollapsed()) {\n this.expand();\n this.$el\n .find('.aui-sidebar-toggle')\n .attr('aria-label', I18n.getText('aui.sidebar.collapse.tooltip'));\n } else {\n this.collapse();\n this.$el\n .find('.aui-sidebar-toggle')\n .attr('aria-label', I18n.getText('aui.sidebar.expand.tooltip'));\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 */\nSidebar.prototype.submenuTriggersSelector = '.aui-sidebar-group:not(.aui-sidebar-group-tier-one)';\n\nSidebar.prototype.collapsedTriggersSelector = [\n Sidebar.prototype.submenuTriggersSelector,\n '.aui-sidebar-group.aui-sidebar-group-tier-one > .aui-nav > li > a',\n '.aui-sidebar-footer > .aui-sidebar-settings-button'\n].join(', ');\n\nSidebar.prototype.toggleSelector = '.aui-sidebar-footer > .aui-sidebar-toggle';\n\nSidebar.prototype.tooltipClassName = 'aui-sidebar-section-tooltip';\n\nSidebar.prototype.inlineDialogClass = 'aui-sidebar-submenu-dialog';\nSidebar.prototype.inlineDialogSelector = '.' + Sidebar.prototype.inlineDialogClass;\n\nfunction getAllSubmenuDialogs() {\n return document.querySelectorAll(Sidebar.prototype.inlineDialogSelector);\n}\n\nfunction SubmenuManager () {\n this.inlineDialog = null;\n}\n\nSubmenuManager.prototype.submenu = function ($trigger) {\n sidebarSubmenuDeprecationLogger();\n return getSubmenu($trigger);\n};\n\nSubmenuManager.prototype.hasSubmenu = function ($trigger) {\n sidebarSubmenuDeprecationLogger();\n return hasSubmenu($trigger);\n};\n\nSubmenuManager.prototype.submenuHeadingHeight = function () {\n sidebarSubmenuDeprecationLogger();\n return 34;\n};\n\nSubmenuManager.prototype.isShowing = function () {\n sidebarSubmenuDeprecationLogger();\n return Sidebar.prototype.isSubmenuVisible();\n};\n\nSubmenuManager.prototype.show = function (e, trigger) {\n sidebarSubmenuDeprecationLogger();\n showSubmenu(trigger);\n};\n\nSubmenuManager.prototype.hide = function () {\n sidebarSubmenuDeprecationLogger();\n hideAllSubmenus();\n};\n\nSubmenuManager.prototype.inlineDialogShowHandler = function () {\n sidebarSubmenuDeprecationLogger();\n};\nSubmenuManager.prototype.inlineDialogHideHandler = function () {\n sidebarSubmenuDeprecationLogger();\n};\nSubmenuManager.prototype.moveSubmenuToInlineDialog = function () {\n sidebarSubmenuDeprecationLogger();\n};\nSubmenuManager.prototype.restoreSubmenu = function () {\n sidebarSubmenuDeprecationLogger();\n};\n\nSidebar.prototype.getVisibleSubmenus = function () {\n return Array.prototype.filter.call(getAllSubmenuDialogs(), function (inlineDialog2) {\n return inlineDialog2.open;\n });\n};\n\nSidebar.prototype.isSubmenuVisible = function () {\n return this.getVisibleSubmenus().length > 0;\n};\n\nfunction getSubmenu($trigger) {\n return $trigger.is('a') ? $trigger.next('.aui-nav') : $trigger.children('.aui-nav, hr');\n}\n\nfunction getSubmenuInlineDialog(trigger) {\n var inlineDialogId = trigger.getAttribute('aria-controls');\n return document.getElementById(inlineDialogId);\n}\n\nfunction hasSubmenu($trigger) {\n return getSubmenu($trigger).length !== 0;\n}\n\nfunction hideAllSubmenus() {\n var allSubmenuDialogs = getAllSubmenuDialogs();\n Array.prototype.forEach.call(allSubmenuDialogs, function (inlineDialog2) {\n inlineDialog2.open = false;\n });\n}\n\nfunction showSubmenu(trigger) {\n getSubmenuInlineDialog(trigger).open = true;\n}\n\nfunction 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 = uid('sidebar-submenu');\n\n $trigger.attr('aria-controls', uniqueId);\n $trigger.attr('data-aui-trigger', '');\n skate.init($trigger); //Trigger doesn't listen to attribute modification\n\n submenuInlineDialog.setAttribute('id', uniqueId);\n submenuInlineDialog.setAttribute('alignment', 'right top');\n submenuInlineDialog.setAttribute('hidden', '');\n submenuInlineDialog.setAttribute('contained-by', 'viewport');\n if (sidebar.isCollapsed()) {\n submenuInlineDialog.setAttribute('responds-to', 'hover');\n }\n\n $(submenuInlineDialog).addClass(Sidebar.prototype.inlineDialogClass);\n\n document.body.appendChild(submenuInlineDialog);\n skate.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\nfunction didOtherLayerOpened(e) {\n return e.target.tagName !== 'AUI-INLINE-DIALOG';\n}\n\nfunction didNestedInlineDialogOpened(e) {\n return !e.target.classList.contains('aui-sidebar-submenu-dialog');\n}\n\nfunction addHandlersToSubmenuInlineDialog(sidebar, $trigger, submenuInlineDialog) {\n submenuInlineDialog.addEventListener('aui-layer-show', function (e) {\n if (!sidebar.isCollapsed()) {\n e.preventDefault();\n return;\n }\n\n // we only care if sidebars inline dialog is opening\n if (didOtherLayerOpened(e) || didNestedInlineDialogOpened(e)) {\n return;\n }\n\n /**\n * trigger an event on inline dialog trigger and pass a reference to the inline dialog.\n * this let's one perform actions and modify content before it is displayed, for example lazy load submenu content\n */\n var customEvent = $.Event('aui-sidebar-submenu-before-show');\n $trigger.trigger(customEvent, submenuInlineDialog);\n if (customEvent.isDefaultPrevented()) {\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\nfunction 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 = $(submenuInlineDialog).find('.aui-navgroup-inner');\n $container.children('.aui-nav-heading')\n .attr('title', title)\n .children('strong')\n .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 const $clone = clone(element);\n deduplicateIDs($clone, uid);\n\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\nconst SUBMENU_INLINE_DIALOG_CONTENTS_HTML =\n '<div class=\"aui-inline-dialog-contents\">' +\n '<div class=\"aui-sidebar-submenu\" >' +\n '<div class=\"aui-navgroup aui-navgroup-vertical\">' +\n '<div class=\"aui-navgroup-inner\">' +\n '<div class=\"aui-nav-heading\"><strong></strong></div>' +\n '</div>' +\n '</div>' +\n '</div>' +\n '</div>';\n\nfunction inlineDialogHideHandler($trigger) {\n $trigger.removeClass('active');\n}\n\nfunction constructAllSubmenus(sidebar) {\n $(sidebar.collapsedTriggersSelector).each(function () {\n var $trigger = $(this);\n constructSubmenu(sidebar, $trigger);\n });\n}\n\nvar tooltipOptions = {\n gravity: 'w',\n title: function () {\n var $item = $(this);\n if ($item.is('a') || $item.is('button')) {\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\nfunction lazilyInitializeSubmenus (sidebar) {\n sidebar.$el.on('mouseenter mouseleave click focus', sidebar.collapsedTriggersSelector, function (e) {\n const $trigger = $(e.target);\n constructSubmenu(sidebar, $trigger);\n });\n}\n\nfunction initializeHandlers(sidebar) {\n var $sidebar = $('.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 (hasTouch && mediaQuery('only screen and (max-device-width:1024px)')) {\n $('body').addClass('aui-page-sidebar-touch');\n }\n\n var pendingReflow = null;\n var onScrollResizeReflow = function () {\n if (pendingReflow === null) {\n pendingReflow = requestAnimationFrame(function () {\n sidebar.reflow();\n pendingReflow = null;\n });\n }\n };\n\n $(window).on('scroll resize', onScrollResizeReflow);\n onScrollResizeReflow();\n\n if (sidebar.isAnimated()) {\n sidebar.$el.on('transitionend webkitTransitionEnd', function () {\n sidebar.$el.trigger($.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 $('.aui-page-panel').on('click', function () {\n if (!sidebar.isCollapsed() && sidebar.isViewportNarrow()) {\n sidebar.collapse();\n }\n });\n\n var toggleShortcutHandler = function (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 $(document).on('keypress', toggleShortcutHandler);\n\n sidebar._remove = function () {\n $(this.inlineDialogSelector).remove();\n this.$el.off();\n this.$el.remove();\n $(document).off('keypress', toggleShortcutHandler);\n $(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.tooltip({\n ...tooltipOptions,\n live: sidebar.collapsedTriggersSelector,\n suppress: function () {\n const $trigger = $(this);\n const sidebarIsExpanded = sidebar.isCollapsed() === false;\n const triggerHasSubmenu = hasSubmenu($trigger) === true;\n return triggerHasSubmenu || sidebarIsExpanded;\n }\n })\n\n sidebar.$el.tooltip({\n ...tooltipOptions,\n aria: false,\n live: sidebar.toggleSelector,\n title: function () {\n return sidebar.isCollapsed() ?\n I18n.getText('aui.sidebar.expand.tooltip') :\n I18n.getText('aui.sidebar.collapse.tooltip')\n }\n })\n\n function isNormalTab(e) {\n return e.keyCode === keyCode.TAB && !e.shiftKey && !e.altKey;\n }\n\n function isNormalSquareBracket(e) {\n return e.which === keyCode.LEFT_SQUARE_BRACKET && !e.shiftKey && !e.ctrlKey && !e.metaKey && !isInput(e.target);\n }\n\n function isShiftTab(e) {\n return e.keyCode === 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 = $(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 $(this).off('keydown');\n hideAllSubmenus();\n }\n });\n }\n }\n });\n}\n\nvar sidebar = widget('sidebar', Sidebar);\n\n$(function () {\n sidebar('.aui-sidebar');\n});\n\nvar sidebarSubmenuDeprecationLogger = deprecate.getMessageLogger('Sidebar.submenus', {\n removeInVersion: '10.0.0',\n sinceVersion: '5.8.0'\n});\n\nglobalize('sidebar', sidebar);\n\nexport default sidebar;\n","/**\n * Inspired by matchMedia() polyfill\n * https://github.com/paulirish/matchMedia.js/blob/953faa1489284655ed9d6e03bf48d39df70612c4/matchMedia.js\n */\n\n\nexport default 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","export default function (el) {\n return 'value' in el || el.isContentEditable;\n}\n","import $ from './jquery';\nimport keyCode from './key-code';\nimport * as logger from './internal/log';\nimport * as deprecate from './internal/deprecation';\nimport { trigger } from './event';\nimport { dim, undim } from './blanket';\nimport { enable } from './forms';\nimport globalize from './internal/globalize';\n\n/* eslint complexity:off, eqeqeq:off, max-depth:off, no-unused-vars:off, strict:off */\nconst ZINDEX_DIALOG_1 = 2600; // see also dialog.less\n\n/**\n * Creates a generic popup that will be displayed in the center of the screen with a\n * grey blanket in the background.\n * Usage:\n * <pre>\n * createPopup({\n * width: 800,\n * height: 400,\n * id: \"my-dialog\"\n * });\n * </pre>\n * @param options {object} [optional] Permitted options and defaults are as follows:\n * width (800), height (600), keypressListener (closes dialog on ESC).\n*/\nfunction createPopup (options) {\n var defaults = {\n width: 800,\n height: 600,\n closeOnOutsideClick: false,\n keypressListener: function (e) {\n if (e.keyCode === keyCode.ESCAPE && popup.is(':visible')) {\n res.hide();\n }\n }\n };\n // for backwards-compatibility\n if (typeof options !== 'object') {\n options = {\n width: arguments[0],\n height: arguments[1],\n id: arguments[2]\n };\n options = $.extend({}, options, arguments[3]);\n }\n options = $.extend({}, defaults, options);\n var popup = $('<div></div>').addClass('aui-popup');\n\n if (options.id) {\n popup.attr('id', options.id);\n }\n //find the highest z-index on the page to ensure any new popup that is shown is shown on top\n var highestZIndex = ZINDEX_DIALOG_1;\n $('.aui-dialog').each(function () {\n var currentPopup = $(this);\n highestZIndex = (currentPopup.css('z-index') > highestZIndex) ? currentPopup.css('z-index') : highestZIndex;\n });\n\n var applySize = (function _applySize (width, height) {\n options.width = (width = (width || options.width));\n options.height = (height = (height || options.height));\n\n popup.css({\n marginTop: -Math.round(height / 2) + 'px',\n marginLeft: -Math.round(width / 2) + 'px',\n width: width,\n height: height,\n 'z-index': parseInt(highestZIndex,10) + 2 //+ 2 so that the shadow can be shown on +1 (underneath the popup but above everything else)\n });\n return _applySize;\n }(options.width, options.height));\n\n $('body').append(popup);\n\n popup.hide();\n enable(popup);\n\n /**\n * Popup object\n * @class Popup\n * @static\n */\n\n //blanket for reference further down\n var blanket = $('.aui-blanket');\n var focusItem = function (selector, element) {\n var item = $(selector, element);\n if (item.length) {\n item.focus();\n return true;\n }\n return false;\n };\n // we try and place focus, in the configured element or by looking for the first input\n // in page body, then button panel and finally page menu.\n var focusDialog = function (element) {\n if ($('.dialog-page-body', element).find(':focus').length !== 0) {\n return;\n }\n if (options.focusSelector) {\n return focusItem(options.focusSelector, element);\n }\n var defaultFocusSelector = ':input:visible:enabled:first';\n if (focusItem(defaultFocusSelector, $('.dialog-page-body', element))) { return; }\n if (focusItem(defaultFocusSelector, $('.dialog-button-panel', element))) { return; }\n\n focusItem(defaultFocusSelector, $('.dialog-page-menu', element));\n };\n\n var res = {\n\n changeSize: function (w, h) {\n if ((w && w != options.width) || (h && h != options.height)) {\n applySize(w, h);\n }\n this.show();\n },\n\n /**\n * Shows the popup\n * @method show\n */\n show: function () {\n\n var show = function () {\n $(document)\n .off('keydown', options.keypressListener)\n .on('keydown', options.keypressListener);\n dim();\n blanket = $('.aui-blanket');\n if (blanket.length !== 0 && options.closeOnOutsideClick){\n blanket.on('click', function () {\n if (popup.is(':visible')){\n res.hide();\n }\n });\n }\n popup.show();\n\n createPopup.current = this;\n focusDialog(popup);\n $(document).trigger('showLayer', ['popup', this]);\n };\n show.call(this);\n this.show = show;\n },\n /**\n * Hides the popup.\n * @method hide\n */\n hide: function () {\n $(document).unbind('keydown', options.keypressListener);\n blanket.unbind();\n this.element.hide();\n\n //only undim if no other dialogs are visible\n if ($('.aui-dialog:visible').length === 0) {\n undim();\n }\n\n // AUI-1059: remove focus from the active element when dialog is hidden\n var activeElement = document.activeElement;\n if (this.element.has(activeElement).length) {\n activeElement.blur();\n }\n\n $(document).trigger('hideLayer', ['popup', this]);\n createPopup.current = null;\n this.enable();\n },\n /**\n * jQuery object, representing popup DOM element\n * @property element\n */\n element: popup,\n /**\n * Removes popup elements from the DOM\n * @method remove\n */\n remove: function () {\n popup.remove();\n this.element = null;\n },\n /**\n * disables the popup\n * @method disable\n */\n disable: function () {\n if (!this.disabled){\n this.popupBlanket = $(\"<div class='dialog-blanket'> </div>\").css({\n height: popup.height(),\n width: popup.width()\n });\n popup.append(this.popupBlanket);\n this.disabled = true;\n }\n },\n /**\n * enables the popup if it is disabled\n * @method enable\n */\n enable: function () {\n if (this.disabled) {\n this.disabled = false;\n this.popupBlanket.remove();\n this.popupBlanket = null;\n }\n }\n };\n\n return res;\n}\n\n// Scoping function\nvar Dialog = (function () {\n /**\n * @class Button\n * @constructor Button\n * @param page {number} page id\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @private\n */\n function Button(page, label, onclick, className) {\n if (!page.buttonpanel) {\n page.addButtonPanel();\n }\n this.page = page;\n this.onclick = onclick;\n this._onclick = function (e) {\n return onclick.call(this, page.dialog, page, e) === true;\n };\n this.item = $('<button></button>').html(label).addClass('button-panel-button');\n if (className) {\n this.item.addClass(className);\n }\n if (typeof onclick === 'function') {\n this.item.on('click', this._onclick);\n }\n page.buttonpanel.append(this.item);\n this.id = page.button.length;\n page.button[this.id] = this;\n }\n\n /**\n * @class Link\n * @constructor Link\n * @param page {number} page id\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @private\n */\n function Link(page, label, onclick, className, url) {\n if (!page.buttonpanel) {\n page.addButtonPanel();\n }\n\n //if no url is given use # as default\n if (!url){\n url = '#';\n }\n\n this.page = page;\n this.onclick = onclick;\n this._onclick = function (e) {\n return onclick.call(this, page.dialog, page, e) === true;\n };\n this.item = $('<a></a>').html(label).attr('href', url).addClass('button-panel-link');\n if (className) {\n this.item.addClass(className);\n }\n if (typeof onclick === 'function') {\n this.item.click(this._onclick);\n }\n page.buttonpanel.append(this.item);\n this.id = page.button.length;\n page.button[this.id] = this;\n }\n\n function itemMove (leftOrRight, target) {\n var dir = leftOrRight == 'left' ? -1 : 1;\n return function (step) {\n var dtarget = this.page[target];\n if (this.id != ((dir == 1) ? dtarget.length - 1 : 0)) {\n dir *= (step || 1);\n dtarget[this.id + dir].item[(dir < 0 ? 'before' : 'after')](this.item);\n dtarget.splice(this.id, 1);\n dtarget.splice(this.id + dir, 0, this);\n for (var i = 0, ii = dtarget.length; i < ii; i++) {\n if (target == 'panel' && this.page.curtab == dtarget[i].id) {\n this.page.curtab = i;\n }\n dtarget[i].id = i;\n }\n }\n return this;\n };\n }\n function itemRemove(target) {\n return function () {\n this.page[target].splice(this.id, 1);\n for (var i = 0, ii = this.page[target].length; i < ii; i++) {\n this.page[target][i].id = i;\n }\n this.item.remove();\n };\n }\n /**\n * Moves item left in the hierarchy\n * @method moveUp\n * @method moveLeft\n * @param step {number} how many items to move, default is 1\n * @return {object} button\n */\n Button.prototype.moveUp = Button.prototype.moveLeft = itemMove('left', 'button');\n /**\n * Moves item right in the hierarchy\n * @method moveDown\n * @method moveRight\n * @param step {number} how many items to move, default is 1\n * @return {object} button\n */\n Button.prototype.moveDown = Button.prototype.moveRight = itemMove('right', 'button');\n /**\n * Removes item\n * @method remove\n */\n Button.prototype.remove = itemRemove('button');\n\n /**\n * Getter and setter for label\n * @method label\n * @param label {string} [optional] label of the button\n * @return {string} label, if nothing is passed in\n * @return {object} jQuery button object, if label is passed in\n */\n Button.prototype.html = function (label) {\n return this.item.html(label);\n };\n /**\n * Getter and setter of onclick event handler\n * @method onclick\n * @param onclick {function} [optional] new event handler, that is going to replace the old one\n * @return {function} existing event handler if new one is undefined\n */\n Button.prototype.onclick = function (onclick) {\n let self = this;\n if (typeof onclick === 'undefined') {\n return this.onclick;\n } else {\n this.item.unbind('click', this._onclick);\n this._onclick = function (e) {\n return onclick.call(this, self.page.dialog, self.page, e) === true;\n };\n if (typeof onclick === 'function') {\n this.item.click(this._onclick);\n }\n }\n };\n\n var DEFAULT_PADDING = 20;\n\n /**\n * Class for panels\n * @class Panel\n * @constructor\n * @param page {number} page id\n * @param title {string} panel title\n * @param reference {string} or {object} jQuery object or selector for the contents of the Panel\n * @param className {string} [optional] HTML class name\n * @param panelButtonId {string} the unique id that will be put on the button element for this panel.\n * @private\n */\n var Panel = function (page, title, reference, className, panelButtonId) {\n if (!(reference instanceof $)) {\n reference = $(reference);\n }\n\n this.dialog = page.dialog;\n this.page = page;\n this.id = page.panel.length;\n this.button = $('<button></button>').html(title).addClass('item-button');\n\n if (panelButtonId) {\n this.button[0].id = panelButtonId;\n }\n\n this.item = $('<li></li>').append(this.button).addClass('page-menu-item');\n this.body = $('<div></div>').append(reference).addClass('dialog-panel-body').css('height', page.dialog.height + 'px');\n this.padding = DEFAULT_PADDING;\n if (className) {\n this.body.addClass(className);\n }\n var i = page.panel.length;\n var tab = this;\n page.menu.append(this.item);\n page.body.append(this.body);\n page.panel[i] = this;\n var onclick = function () {\n var cur;\n if (page.curtab + 1) {\n cur = page.panel[page.curtab];\n cur.body.hide();\n cur.item.removeClass('selected');\n (typeof cur.onblur === 'function') && cur.onblur();\n }\n page.curtab = tab.id;\n tab.body.show();\n tab.item.addClass('selected');\n (typeof tab.onselect === 'function') && tab.onselect();\n (typeof page.ontabchange === 'function') && page.ontabchange(tab, cur);\n };\n if (!this.button.click) {\n logger.log('atlassian-dialog:Panel:constructor - this.button.click false');\n this.button.onclick = onclick;\n } else {\n this.button.click(onclick);\n }\n onclick();\n if (i == 0) {\n page.menu.css('display', 'none'); // don't use jQuery hide()\n } else {\n page.menu.show();\n }\n };\n /**\n * Selects current panel\n * @method select\n */\n Panel.prototype.select = function () {\n this.button.click();\n };\n /**\n * Moves item left in the hierarchy\n * @method moveUp\n * @method moveLeft\n * @param step {number} how many items to move, default is 1\n * @return {object} panel\n */\n Panel.prototype.moveUp = Panel.prototype.moveLeft = itemMove('left', 'panel');\n /**\n * Moves item right in the hierarchy\n * @method moveDown\n * @method moveRight\n * @param step {number} how many items to move, default is 1\n * @return {object} panel\n */\n Panel.prototype.moveDown = Panel.prototype.moveRight = itemMove('right', 'panel');\n /**\n * Removes item\n * @method remove\n */\n Panel.prototype.remove = itemRemove('panel');\n /**\n * Getter and setter of inner HTML of the panel\n * @method html\n * @param html {string} HTML source to set up\n * @return {object} panel\n * @return {string} current HTML source\n */\n Panel.prototype.html = function (html) {\n if (html) {\n this.body.html(html);\n return this;\n } else {\n return this.body.html();\n }\n };\n /**\n * This method gives you ability to overwrite default padding value. Use it with caution.\n * @method setPadding\n * @param padding {number} padding in pixels\n * @return {object} panel\n * @see DEFAULT_PADDING\n */\n Panel.prototype.setPadding = function (padding) {\n if (!isNaN(+padding)) {\n this.body.css('padding', +padding);\n this.padding = +padding;\n this.page.recalcSize();\n }\n return this;\n };\n\n var HEADER_HEIGHT = 62;\n var BUTTONS_HEIGHT = 52;\n var MIN_DIALOG_VERTICAL_BUFFER = 50;\n\n /**\n * Class for pages\n * @class Page\n * @constructor\n * @param dialog {object} dialog object\n * @param className {string} [optional] HTML class name\n * @private\n */\n var Page = function (dialog, className) {\n this.dialog = dialog;\n this.id = dialog.page.length;\n this.element = $('<div></div>').addClass('dialog-components');\n this.body = $('<div></div>').addClass('dialog-page-body');\n this.menu = $('<ul></ul>').addClass('dialog-page-menu').css('height', dialog.height + 'px');\n this.body.append(this.menu);\n this.curtab;\n this.panel = [];\n this.button = [];\n if (className) {\n this.body.addClass(className);\n }\n dialog.popup.element.append(this.element.append(this.menu).append(this.body));\n dialog.page[dialog.page.length] = this;\n };\n\n /**\n * Size updater for contents of the page. For internal use\n * @method recalcSize\n */\n Page.prototype.recalcSize = function () {\n var headerHeight = this.header ? HEADER_HEIGHT : 0;\n var buttonHeight = this.buttonpanel ? BUTTONS_HEIGHT : 0;\n for (var i = this.panel.length; i--;) {\n var dialogComponentsHeight = this.dialog.height - headerHeight - buttonHeight;\n this.panel[i].body.css('height', dialogComponentsHeight);\n this.menu.css('height', dialogComponentsHeight);\n }\n };\n\n /**\n * Adds a button panel to the bottom of dialog\n * @method addButtonPanel\n */\n Page.prototype.addButtonPanel = function () {\n this.buttonpanel = $('<div></div>').addClass('dialog-button-panel');\n this.element.append(this.buttonpanel);\n };\n\n /**\n * Method for adding new panel to the page\n * @method addPanel\n * @param title {string} panel title\n * @param reference {string} or {object} jQuery object or selector for the contents of the Panel\n * @param className {string} [optional] HTML class name\n * @param panelButtonId {string} [optional] The unique id for the panel's button.\n * @return {object} the page\n */\n Page.prototype.addPanel = function (title, reference, className, panelButtonId) {\n new Panel(this, title, reference, className, panelButtonId);\n this.recalcSize();\n return this;\n };\n /**\n * Method for adding header to the page\n * @method addHeader\n * @param title {string} panel title\n * @param className {string} [optional] CSS class name\n * @return {object} the page\n */\n Page.prototype.addHeader = function (title, className) {\n if (this.header) {\n this.header.remove();\n }\n this.header = $('<h2></h2>').text(title || '').addClass('dialog-title');\n className && this.header.addClass(className);\n this.element.prepend(this.header);\n this.recalcSize();\n return this;\n };\n /**\n * Method for adding new button to the page\n * @method addButton\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @return {object} the page\n */\n Page.prototype.addButton = function (label, onclick, className) {\n new Button(this, label, onclick, className);\n this.recalcSize();\n return this;\n };\n /**\n * Method for adding new link to the page\n * @method addLink\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @return {object} the page\n */\n Page.prototype.addLink = function (label, onclick, className, url) {\n new Link(this, label, onclick, className, url);\n this.recalcSize();\n return this;\n };\n\n /**\n * Selects corresponding panel\n * @method gotoPanel\n * @param panel {object} panel object\n * @param panel {number} id of the panel\n */\n Page.prototype.gotoPanel = function (panel) {\n this.panel[panel.id || panel].select();\n };\n /**\n * Returns current panel on the page\n * @method getCurrentPanel\n * @return panel {object} the panel\n */\n Page.prototype.getCurrentPanel = function () {\n return this.panel[this.curtab];\n };\n /**\n * Hides the page\n * @method hide\n */\n Page.prototype.hide = function () {\n this.element.hide();\n };\n /**\n * Shows the page, if it was hidden\n * @method show\n */\n Page.prototype.show = function () {\n this.element.show();\n };\n /**\n * Removes the page\n * @method remove\n */\n Page.prototype.remove = function () {\n this.element.remove();\n };\n\n\n\n /**\n * Constructor for a Dialog. A Dialog is a popup which consists of Pages, where each Page can consist of Panels,\n * Buttons and a Header. The dialog must be constructed in page order as it has a current page state. For example,\n * calling addButton() will add a button to the 'current' page.\n * <p>\n * By default, a new Dialog will have one page. If there are multiple Panels on a Page, a\n * menu is displayed on the left side of the dialog.\n * </p>\n * Usage:\n * <pre>\n * var dialog = new Dialog(860, 530);\n * dialog.addHeader(\"Insert Macro\")\n * .addPanel(\"All\", \"&lt;p&gt;&lt;/p&gt;\")\n * .addPanel(\"Some\", \"&lt;p&gt;&lt;/p&gt;\")\n * .addButton(\"Next\", function (dialog) {dialog.nextPage();})\n * .addButton(\"Cancel\", function (dialog) {dialog.hide();});\n *\n * dialog.addPage()\n * .addButton(\"Cancel\", function (dialog) {dialog.hide();});\n *\n * somebutton.on('click', function () {dialog.show();});\n * </pre>\n * @class Dialog\n * @constructor\n * @param width {number} dialog width in pixels, or an object containing the Dialog parameters\n * @param height {number} dialog height in pixels\n * @param id {number} [optional] dialog id\n */\n function Dialog (width, height, id) {\n var options = {};\n if (!+width) {\n options = Object(width);\n width = options.width;\n height = options.height;\n id = options.id;\n }\n this.height = height || 480;\n this.width = width || 640;\n this.id = id;\n options = $.extend({}, options, {\n width: this.width,\n height: this.height,\n id: this.id\n });\n this.popup = createPopup(options);\n\n this.popup.element.addClass('aui-dialog');\n this.page = [];\n this.curpage = 0;\n\n new Page(this);\n };\n\n\n /**\n * Method for adding header to the current page\n * @method addHeader\n * @param title {string} panel title\n * @param className {string} [optional] HTML class name\n * @return {object} the dialog\n */\n Dialog.prototype.addHeader = function (title, className) {\n this.page[this.curpage].addHeader(title, className);\n return this;\n };\n /**\n * Method for adding new button to the current page\n * @method addButton\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @return {object} the dialog\n */\n Dialog.prototype.addButton = function (label, onclick, className) {\n this.page[this.curpage].addButton(label, onclick, className);\n return this;\n };\n\n /**\n * Method for adding new link to the current page\n * @method addButton\n * @param label {string} link label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @return {object} the dialog\n */\n Dialog.prototype.addLink = function (label, onclick, className, url) {\n this.page[this.curpage].addLink(label, onclick, className, url);\n return this;\n };\n\n /**\n * Method for adding a submit button to the current page\n * @method addSubmit\n * @param label {string} link label\n * @param onclick {function} [optional] click event handler\n * @return {object} the dialog\n */\n Dialog.prototype.addSubmit = function (label, onclick) {\n this.page[this.curpage].addButton(label, onclick, 'button-panel-submit-button');\n return this;\n };\n\n /**\n * Method for adding a cancel link to the current page\n * @method addCancel\n * @param label {string} link label\n * @param onclick {function} [optional] click event handler\n * @return {object} the dialog\n */\n Dialog.prototype.addCancel = function (label, onclick) {\n this.page[this.curpage].addLink(label, onclick, 'button-panel-cancel-link');\n return this;\n };\n\n\n /**\n * Method for adding new button panel to the current page\n * @return {object} the dialog\n */\n Dialog.prototype.addButtonPanel = function () {\n this.page[this.curpage].addButtonPanel();\n return this;\n };\n\n\n /**\n * Method for adding new panel to the current page.\n * @method addPanel\n * @param title {string} panel title\n * @param reference {string} or {object} jQuery object or selector for the contents of the Panel\n * @param className {string} [optional] HTML class name\n * @param panelButtonId {String} [optional] The unique id for the panel's button.\n * @return {object} the dialog\n */\n Dialog.prototype.addPanel = function (title, reference, className, panelButtonId) {\n this.page[this.curpage].addPanel(title, reference, className, panelButtonId);\n return this;\n };\n /**\n * Adds a new page to the dialog and sets the new page as the current page\n * @method addPage\n * @param className {string} [optional] HTML class name\n * @return {object} the dialog\n */\n Dialog.prototype.addPage = function (className) {\n new Page(this, className);\n this.page[this.curpage].hide();\n this.curpage = this.page.length - 1;\n return this;\n };\n /**\n * Making next page in hierarchy visible and active\n * @method nextPage\n * @return {object} the dialog\n */\n Dialog.prototype.nextPage = function () {\n this.page[this.curpage++].hide();\n if (this.curpage >= this.page.length) {\n this.curpage = 0;\n }\n this.page[this.curpage].show();\n return this;\n };\n /**\n * Making previous page in hierarchy visible and active\n * @method prevPage\n * @return {object} the dialog\n */\n Dialog.prototype.prevPage = function () {\n this.page[this.curpage--].hide();\n if (this.curpage < 0) {\n this.curpage = this.page.length - 1;\n }\n this.page[this.curpage].show();\n return this;\n };\n /**\n * Making specified page visible and active\n * @method gotoPage\n * @param num {number} page id\n * @return {object} the dialog\n */\n Dialog.prototype.gotoPage = function (num) {\n this.page[this.curpage].hide();\n this.curpage = num;\n if (this.curpage < 0) {\n this.curpage = this.page.length - 1;\n } else if (this.curpage >= this.page.length) {\n this.curpage = 0;\n }\n this.page[this.curpage].show();\n return this;\n };\n /**\n * Returns specified panel at the current page\n * @method getPanel\n * @param pageorpanelId {number} page id or panel id\n * @param panelId {number} panel id\n * @return {object} the internal Panel object\n */\n Dialog.prototype.getPanel = function (pageorpanelId, panelId) {\n var pageid = (panelId == null) ? this.curpage : pageorpanelId;\n if (panelId == null) {\n panelId = pageorpanelId;\n }\n return this.page[pageid].panel[panelId];\n };\n /**\n * Returns specified page\n * @method getPage\n * @param pageid {number} page id\n * @return {object} the internal Page Object\n */\n Dialog.prototype.getPage = function (pageid) {\n return this.page[pageid];\n };\n /**\n * Returns current panel at the current page\n * @method getCurrentPanel\n * @return {object} the internal Panel object\n */\n Dialog.prototype.getCurrentPanel = function () {\n return this.page[this.curpage].getCurrentPanel();\n };\n\n /**\n * Selects corresponding panel\n * @method gotoPanel\n * @param pageorpanel {object} panel object or page object\n * @param panel {object} panel object\n * @param panel {number} id of the panel\n */\n Dialog.prototype.gotoPanel = function (pageorpanel, panel) {\n if (panel != null) {\n var pageid = pageorpanel.id || pageorpanel;\n this.gotoPage(pageid);\n }\n this.page[this.curpage].gotoPanel(typeof panel === 'undefined' ? pageorpanel : panel);\n };\n\n /**\n * Shows the dialog, if it is not visible\n * @method show\n * @return {object} the dialog\n */\n Dialog.prototype.show = function () {\n this.popup.show();\n trigger('show.dialog', {dialog: this});\n return this;\n };\n /**\n * Hides the dialog, if it was visible\n * @method hide\n * @return {object} the dialog\n */\n Dialog.prototype.hide = function () {\n this.popup.hide();\n trigger('hide.dialog', {dialog: this});\n return this;\n };\n /**\n * Removes the dialog elements from the DOM\n * @method remove\n */\n Dialog.prototype.remove = function () {\n this.popup.hide();\n this.popup.remove();\n trigger('remove.dialog', {dialog: this});\n };\n /**\n * Disables the dialog if enabled\n * @method disable\n */\n Dialog.prototype.disable = function () {\n this.popup.disable();\n return this;\n };\n /**\n * Enables the dialog if disabled\n * @method disable\n */\n Dialog.prototype.enable = function () {\n this.popup.enable();\n return this;\n };\n /**\n * Gets set of items depending on query\n * @method get\n * @param query {string} query to search for panels, pages, headers or buttons\n * e.g.\n * '#Name' will find all dialog components with the given name such as panels and buttons, etc\n * 'panel#Name' will find only panels with the given name\n * 'panel#\"Foo bar\"' will find only panels with given name\n * 'panel:3' will find the third panel\n */\n Dialog.prototype.get = function (query) {\n var coll = [];\n var dialog = this;\n var nameExp = '#([^\"][^ ]*|\"[^\"]*\")'; // a name is a hash followed by either a bare word or quoted string\n var indexExp = ':(\\\\d+)'; // an index is a colon followed by some digits\n var typeExp = 'page|panel|button|header'; // one of the allowed types\n var selectorExp = '(?:' + // a selector is either ...\n '(' + typeExp + ')(?:' + nameExp + '|' + indexExp + ')?' + // a type optionally followed by either #name or :index\n '|' + nameExp + // or just a #name\n ')';\n var queryRE = new RegExp('(?:^|,)' + // a comma or at the start of the line\n '\\\\s*' + selectorExp + // optional space and a selector\n '(?:\\\\s+' + selectorExp + ')?' + // optionally, followed by some space and a second selector\n '\\\\s*(?=,|$)', 'ig'); // followed by, but not including, a comma or the end of the string\n (query + '').replace(queryRE, function (all, name, title, id, justtitle, name2, title2, id2, justtitle2) {\n name = name && name.toLowerCase();\n var pages = [];\n if (name == 'page' && dialog.page[id]) {\n pages.push(dialog.page[id]);\n name = name2;\n name = name && name.toLowerCase();\n title = title2;\n id = id2;\n justtitle = justtitle2;\n } else {\n pages = dialog.page;\n }\n title = title && (title + '').replace(/\"/g, '');\n title2 = title2 && (title2 + '').replace(/\"/g, '');\n justtitle = justtitle && (justtitle + '').replace(/\"/g, '');\n justtitle2 = justtitle2 && (justtitle2 + '').replace(/\"/g, '');\n if (name || justtitle) {\n for (var i = pages.length; i--;) {\n if (justtitle || (name == 'panel' && (title || (!title && id == null)))) {\n for (var j = pages[i].panel.length; j--;) {\n if (pages[i].panel[j].button.html() == justtitle || pages[i].panel[j].button.html() == title || (name == 'panel' && !title && id == null)) {\n coll.push(pages[i].panel[j]);\n }\n }\n }\n if (justtitle || (name == 'button' && (title || (!title && id == null)))) {\n for (var j = pages[i].button.length; j--;) {\n if (pages[i].button[j].item.html() == justtitle || pages[i].button[j].item.html() == title || (name == 'button' && !title && id == null)) {\n coll.push(pages[i].button[j]);\n }\n }\n }\n if (pages[i][name] && pages[i][name][id]) {\n coll.push(pages[i][name][id]);\n }\n if (name == 'header' && pages[i].header) {\n coll.push(pages[i].header);\n }\n }\n } else {\n coll = coll.concat(pages);\n }\n });\n var res = {\n length: coll.length\n };\n for (var i = coll.length; i--;) {\n res[i] = coll[i];\n for (var method in coll[i]) {\n if (!(method in res)) {\n (function (m) {\n res[m] = function () {\n for (var j = this.length; j--;) {\n if (typeof this[j][m] === 'function') {\n this[j][m].apply(this[j], arguments);\n }\n }\n };\n }(method));\n }\n }\n }\n return res;\n };\n\n /**\n * Updates height of panels, to contain content without the need for scroll bars.\n *\n * @method updateHeight\n */\n Dialog.prototype.updateHeight = function () {\n var height = 0;\n var maxDialogHeight = $(window).height() - HEADER_HEIGHT - BUTTONS_HEIGHT - (MIN_DIALOG_VERTICAL_BUFFER * 2);\n for (var i = 0; this.getPanel(i); i++) {\n if (this.getPanel(i).body.css({height: 'auto', display: 'block'}).outerHeight() > height) {\n height = Math.min(maxDialogHeight, this.getPanel(i).body.outerHeight());\n }\n if (i !== this.page[this.curpage].curtab) {\n this.getPanel(i).body.css({display: 'none'});\n }\n }\n for (i = 0; this.getPanel(i); i++) {\n this.getPanel(i).body.css({height: height || this.height});\n }\n this.page[0].menu.height(height);\n this.height = height + HEADER_HEIGHT + BUTTONS_HEIGHT + 1;\n this.popup.changeSize(undefined, this.height);\n };\n\n /**\n * Returns whether the dialog has been resized to it's maximum height (has been capped by the viewport height and vertical buffer).\n *\n * @method isMaximised\n */\n Dialog.prototype.isMaximised = function () {\n return this.popup.element.outerHeight() >= $(window).height() - (MIN_DIALOG_VERTICAL_BUFFER * 2);\n };\n\n /**\n * Returns the current panel.\n * @deprecated Since 3.0.1 Use getCurrentPanel() instead.\n */\n Dialog.prototype.getCurPanel = function () {\n return this.getPanel(this.page[this.curpage].curtab);\n };\n\n /**\n * Returns the current button panel.\n * @deprecated Since 3.0.1 Use get() instead.\n */\n Dialog.prototype.getCurPanelButton = function () {\n return this.getCurPanel().button;\n };\n\n return Dialog;\n\n}());\n\nDialog = deprecate.construct(Dialog, 'Dialog constructor', {\n alternativeName: 'Dialog2'\n});\n\ncreatePopup = deprecate.construct(createPopup, 'Dialog popup constructor', {\n alternatveName: 'Dialog2'\n});\n\nglobalize('Dialog', Dialog);\nglobalize('popup', createPopup);\n\nexport {\n Dialog,\n createPopup as popup\n};\n","import $ from './jquery';\nimport '../jquery/jquery.hotkeys';\nimport '../jquery/jquery.moveto';\nimport * as logger from './internal/log';\nimport { I18n } from './i18n';\nimport { popup } from './dialog';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport { isEqual } from 'underscore';\n\nconst EMPTY_SELECTOR = false;\n\nvar isMac = navigator.platform.indexOf('Mac') !== -1;\nvar isSafari = navigator.userAgent.indexOf('Safari') !== -1;\nvar multiCharRegex = /^(backspace|tab|r(ight|eturn)|s(hift|pace|croll)|c(trl|apslock)|alt|pa(use|ge(up|down))|e(sc|nd)|home|left|up|d(el|own)|insert|f\\d\\d?|numlock|meta)/i;\n\n/**\n * Trigger native click event.\n * @param $el\n */\nconst triggerClickEvent = ($el) => {\n const element = $el[0];\n\n if (element) {\n // Native event bubbles are compatible with Synthetic Event from React\n const bubbles = true;\n const cancelable = true;\n const event = document.createEvent('MouseEvent');\n event.initMouseEvent('click', bubbles, cancelable, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n element.dispatchEvent(event);\n }\n};\n\n\n/**\n * Keyboard commands with syntactic sugar.\n *\n * <strong>Usage:</strong>\n * <pre>\n * whenIType(\"gh\").or(\"gd\").goTo(\"/secure/Dashboard.jspa\");\n * whenIType(\"c\").click(\"#create_link\");\n * </pre>\n *\n * @param keys - Key combinations, modifier keys are \"+\" deliminated. e.g \"ctrl+b\"\n */\nfunction whenIType (keys) {\n var boundKeyCombos = [];\n var executor = $.Callbacks();\n\n function keypressHandler(e) {\n if (!popup.current && executor) {\n executor.fire(e);\n }\n }\n\n function defaultPreventionHandler(e) {\n e.preventDefault();\n }\n\n // Bind an arbitrary set of keys by calling bindKeyCombo on each triggering key combo.\n // A string like \"abc 123\" means (a then b then c) OR (1 then 2 then 3). abc is one key combo, 123 is another.\n function bindKeys(keys) {\n var keyCombos = keys && keys.split ? $.trim(keys).split(' ') : [keys];\n\n keyCombos.forEach(function (keyCombo) {\n bindKeyCombo(keyCombo);\n });\n }\n\n function hasUnprintables(keysArr) {\n // a bit of a heuristic, but works for everything we have. Only the unprintable characters are represented with > 1-character names.\n var i = keysArr.length;\n while (i--) {\n if (keysArr[i].length > 1 && keysArr[i] !== 'space') {\n return true;\n }\n }\n return false;\n }\n\n // bind a single key combo to this handler\n // A string like \"abc 123\" means (a then b then c) OR (1 then 2 then 3). abc is one key combo, 123 is another.\n function bindKeyCombo(keyCombo) {\n var keysArr = keyCombo instanceof Array ?\n keyCombo :\n keyComboArrayFromString(keyCombo.toString());\n var eventType = hasUnprintables(keysArr) ? 'keydown' : 'keypress';\n\n boundKeyCombos.push(keysArr);\n $(document).on(eventType, EMPTY_SELECTOR, keysArr, keypressHandler);\n\n // Override browser/plugins\n $(document).on(eventType + ' keyup', EMPTY_SELECTOR, keysArr, defaultPreventionHandler);\n }\n\n // parse out an array of (modifier+key) presses from a single string\n // e.g. \"12ctrl+3\" becomes [ \"1\", \"2\", \"ctrl+3\" ]\n function keyComboArrayFromString(keyString) {\n var keysArr = [];\n var currModifiers = '';\n\n while (keyString.length) {\n var modifierMatch = keyString.match(/^(ctrl|meta|shift|alt)\\+/i);\n var multiCharMatch = keyString.match(multiCharRegex);\n\n if (modifierMatch) {\n currModifiers += modifierMatch[0];\n keyString = keyString.substring(modifierMatch[0].length);\n\n } else if (multiCharMatch) {\n keysArr.push(currModifiers + multiCharMatch[0]);\n keyString = keyString.substring(multiCharMatch[0].length);\n currModifiers = '';\n\n } else {\n keysArr.push(currModifiers + keyString[0]);\n keyString = keyString.substring(1);\n currModifiers = '';\n }\n }\n\n return keysArr;\n }\n\n function addShortcutsToTitle(selector) {\n var elem = $(selector);\n var title = elem.attr('title') || '';\n var keyCombos = boundKeyCombos.slice();\n var existingCombos = elem.data('boundKeyCombos') || [];\n var kbShortcutAppended = elem.data('kbShortcutAppended') || ''\n var kbShortcutAppendedScreenReader = elem.data('kbShortcutAppendedScreenReader') || ''\n var ariaLabel = elem.attr('aria-label');\n var isFirstShortcut = !kbShortcutAppended;\n var isFirstShortcutScreenReader = !kbShortcutAppendedScreenReader;\n var originalTitle = isFirstShortcut ? title : title.substring(0, title.length - kbShortcutAppended.length);\n var originalAriaLabel = isFirstShortcutScreenReader ? title : ariaLabel.substring(0, ariaLabel.length - kbShortcutAppendedScreenReader.length);\n\n while (keyCombos.length) {\n var keyCombo = keyCombos.shift();\n var comboAlreadyExists = existingCombos.some(function(existingCombo) {\n return isEqual(keyCombo, existingCombo);\n });\n if (!comboAlreadyExists) {\n kbShortcutAppended = appendKeyComboInstructions(keyCombo.slice(), kbShortcutAppended, isFirstShortcut);\n kbShortcutAppendedScreenReader = appendKeyComboInstructions(keyCombo.slice(), kbShortcutAppendedScreenReader, isFirstShortcutScreenReader, { workaroundJaws: true });\n isFirstShortcut = false;\n isFirstShortcutScreenReader = false;\n }\n }\n\n if (isMac) {\n kbShortcutAppended = kbShortcutAppended\n .replace(/Meta/ig, '\\u2318') //Apple cmd key\n .replace(/Shift/ig, '\\u21E7'); //Apple Shift symbol\n kbShortcutAppendedScreenReader = kbShortcutAppendedScreenReader\n .replace(/Meta/ig, '\\u2318') //Apple cmd key\n .replace(/Shift/ig, '\\u21E7'); //Apple Shift symbol\n }\n\n elem.attr('title', originalTitle + kbShortcutAppended);\n elem.attr('aria-label', originalAriaLabel + kbShortcutAppendedScreenReader)\n elem.data('kbShortcutAppended', kbShortcutAppended);\n elem.data('kbShortcutAppendedScreenReader', kbShortcutAppendedScreenReader);\n elem.data('boundKeyCombos', existingCombos.concat(boundKeyCombos));\n }\n\n function removeShortcutsFromTitle(selector) {\n var elem = $(selector);\n var shortcuts = elem.data('kbShortcutAppended');\n\n if (!shortcuts) {\n return;\n }\n\n var title = elem.attr('title');\n elem.attr('title', title.replace(shortcuts, ''));\n elem.attr('aria-label', title.replace(shortcuts, ''));\n elem.removeData('kbShortcutAppended');\n elem.removeData('kbShortcutAppendedScreenReader');\n elem.removeData('boundKeyCombos');\n }\n\n function appendKeyComboInstructions(keyCombo, title, isFirst, options) {\n var openParenthesis = '(';\n var closeParenthesis = ')';\n\n if (options && options.workaroundJaws) {\n openParenthesis = '';\n closeParenthesis = '';\n }\n\n if (isFirst) {\n title += ' ' + openParenthesis + I18n.getText('aui.keyboard.shortcut.type.x', keyCombo.shift());\n } else {\n title = title.replace(/\\)$/, '');\n title += ' ' + I18n.getText('aui.keyboard.shortcut.or.x', keyCombo.shift());\n }\n\n keyCombo.forEach(function (key) {\n title += ' ' + I18n.getText('aui.keyboard.shortcut.then.x', key);\n });\n title += closeParenthesis;\n\n return title;\n }\n\n bindKeys(keys);\n\n return whenIType.makeShortcut({\n executor: executor,\n bindKeys: bindKeys,\n addShortcutsToTitle: addShortcutsToTitle,\n removeShortcutsFromTitle: removeShortcutsFromTitle,\n keypressHandler: keypressHandler,\n defaultPreventionHandler: defaultPreventionHandler\n });\n}\n\nwhenIType.makeShortcut = function (options) {\n var executor = options.executor;\n var bindKeys = options.bindKeys;\n var addShortcutsToTitle = options.addShortcutsToTitle;\n var removeShortcutsFromTitle = options.removeShortcutsFromTitle;\n var keypressHandler = options.keypressHandler;\n var defaultPreventionHandler = options.defaultPreventionHandler;\n\n var selectorsWithTitlesModified = [];\n\n function makeMoveToFunction(getNewFocus) {\n return function (selector, options) {\n options = options || {};\n var focusedClass = options.focusedClass || 'focused';\n var wrapAround = options.hasOwnProperty('wrapAround') ? options.wrapAround : true;\n var escToCancel = options.hasOwnProperty('escToCancel') ? options.escToCancel : true;\n\n executor.add(function () {\n\n const $items = $(selector);\n let $focusedElem = $items.filter('.' + focusedClass);\n const moveToOptions = $focusedElem.length === 0 ? undefined : {transition: true};\n\n if (escToCancel) {\n $(document).one('keydown', function (e) {\n if (e.keyCode === keyCode.ESCAPE && $focusedElem) {\n $focusedElem.removeClass(focusedClass);\n }\n });\n }\n\n if ($focusedElem.length) {\n $focusedElem.removeClass(focusedClass);\n }\n\n $focusedElem = getNewFocus($focusedElem, $items, wrapAround);\n\n if ($focusedElem && $focusedElem.length > 0) {\n $focusedElem.addClass(focusedClass);\n $focusedElem.moveTo(moveToOptions);\n if ($focusedElem.is('a')) {\n $focusedElem.focus();\n } else {\n $focusedElem.find('a:first').focus();\n }\n }\n });\n return this;\n };\n }\n\n return {\n\n /**\n * Scrolls to and adds <em>focused</em> class to the next item in the jQuery collection\n *\n * @method moveToNextItem\n * @param selector\n * @param options\n * @return {Object}\n */\n moveToNextItem: makeMoveToFunction(function ($focusedElem, $items, wrapAround) {\n var index;\n\n if (wrapAround && $focusedElem.length === 0) {\n return $items.eq(0);\n\n } else {\n index = $.inArray($focusedElem.get(0), $items);\n if (index < $items.length - 1) {\n index = index + 1;\n return $items.eq(index);\n } else if (wrapAround) {\n return $items.eq(0);\n }\n }\n\n return $focusedElem;\n }),\n /**\n * Scrolls to and adds <em>focused</em> class to the previous item in the jQuery collection\n *\n * @method moveToPrevItem\n * @param selector\n * @param focusedClass\n * @return {Object}\n */\n moveToPrevItem: makeMoveToFunction(function ($focusedElem, $items, wrapAround) {\n var index;\n if (wrapAround && $focusedElem.length === 0) {\n return $items.filter(':last');\n\n } else {\n index = $.inArray($focusedElem.get(0), $items);\n if (index > 0) {\n index = index - 1;\n return $items.eq(index);\n } else if (wrapAround) {\n return $items.filter(':last');\n }\n }\n\n return $focusedElem;\n }),\n\n /**\n * Clicks the element specified by the <em>selector</em> argument.\n *\n * @method click\n * @param selector - jQuery selector for element\n * @return {Object}\n */\n click: function (selector) {\n selectorsWithTitlesModified.push(selector);\n addShortcutsToTitle(selector);\n\n executor.add(function () {\n const $el = $(selector);\n triggerClickEvent($el);\n });\n return this;\n },\n\n /**\n * Navigates to specified <em>location</em>\n *\n * @method goTo\n * @param {String} location - http location\n * @return {Object}\n */\n goTo: function (location) {\n executor.add(function () {\n window.location.href = location;\n });\n return this;\n },\n\n /**\n * navigates browser window to link href\n *\n * @method followLink\n * @param selector - jQuery selector for element\n * @return {Object}\n */\n followLink: function (selector) {\n selectorsWithTitlesModified.push(selector);\n addShortcutsToTitle(selector);\n\n executor.add(function () {\n var elem = $(selector)[0];\n if (elem && {'a': true, 'link': true}[ elem.nodeName.toLowerCase() ]) {\n window.location.href = elem.href;\n }\n });\n return this;\n },\n\n /**\n * Executes function\n *\n * @method execute\n * @param {function} func\n * @return {Object}\n */\n execute: function (func) {\n var self = this;\n executor.add(function () {\n func.apply(self, arguments);\n });\n return this;\n },\n\n /**\n * @deprecated This implementation is uncool. Kept around to satisfy Confluence plugin devs in the short term.\n *\n * Executes the javascript provided by the shortcut plugin point _immediately_.\n *\n * @method evaluate\n * @param {Function} command - the function provided by the shortcut key plugin point\n */\n evaluate: function (command) {\n command.call(this);\n },\n\n /**\n * Scrolls to element if out of view, then clicks it.\n *\n * @method moveToAndClick\n * @param selector - jQuery selector for element\n * @return {Object}\n */\n moveToAndClick: function (selector) {\n selectorsWithTitlesModified.push(selector);\n addShortcutsToTitle(selector);\n\n executor.add(function () {\n const $el = $(selector);\n if ($el.length > 0) {\n triggerClickEvent($el);\n $el.moveTo();\n }\n });\n return this;\n },\n\n /**\n * Scrolls to element if out of view, then focuses it\n *\n * @method moveToAndFocus\n * @param selector - jQuery selector for element\n * @return {Object}\n */\n moveToAndFocus: function (selector) {\n selectorsWithTitlesModified.push(selector);\n addShortcutsToTitle(selector);\n\n executor.add(function (e) {\n var $elem = $(selector);\n if ($elem.length > 0) {\n $elem.focus();\n if ($elem.moveTo) {\n $elem.moveTo();\n }\n if ($elem.is(':input')) {\n e.preventDefault();\n }\n }\n });\n return this;\n },\n\n /**\n * Binds additional keyboard controls\n *\n * @method or\n * @param {String} keys - keys to bind\n * @return {Object}\n */\n or: function (keys) {\n bindKeys(keys);\n return this;\n },\n\n /**\n * Unbinds shortcut keys\n *\n * @method unbind\n */\n unbind: function () {\n $(document)\n .unbind('keydown keypress', keypressHandler)\n .unbind('keydown keypress keyup', defaultPreventionHandler);\n\n for (var i = 0, len = selectorsWithTitlesModified.length; i < len; i++) {\n removeShortcutsFromTitle(selectorsWithTitlesModified[i]);\n }\n selectorsWithTitlesModified = [];\n }\n };\n};\n\n/**\n * Creates keyboard commands and their actions from json data. Format looks like:\n *\n * <pre>\n * [\n * {\n * \"keys\":[[\"g\", \"d\"]],\n * \"context\":\"global\",\n * \"op\":\"followLink\",\n * \"param\":\"#home_link\"\n * },\n * {\n * \"keys\":[[\"g\", \"i\"]],\n * \"context\":\"global\",\n * \"op\":\"followLink\",\n * \"param\":\"#find_link\"\n * },\n * {\n * \"keys\":[[\"/\"]],\n * \"context\":\"global\",\n * \"op\":\"moveToAndFocus\",\n * \"param\":\"#quickSearchInput\"\n * },\n * {\n * \"keys\":[[\"c\"]],\n * \"context\":\"global\",\n * \"op\":\"moveToAndClick\",\n * \"param\":\"#create_link\"\n * }\n * ]\n * </pre>\n *\n * @method fromJSON\n * @static\n * @param json\n */\nwhenIType.fromJSON = function (json, switchCtrlToMetaOnMac) {\n var shortcuts = [];\n\n if (json) {\n $.each(json, function (i,item) {\n const operation = item.op;\n const param = item.param;\n let params;\n\n if (operation === 'execute' || operation === 'evaluate') {\n // need to turn function string into function object\n params = [new Function(param)];\n\n } else if (/^\\[[^\\]\\[]*,[^\\]\\[]*\\]$/.test(param)) {\n // pass in an array to send multiple params\n try {\n params = JSON.parse(param);\n } catch (e) {\n logger.error('When using a parameter array, array must be in strict JSON format: ' + param);\n }\n\n if (!$.isArray(params)) {\n logger.error('Badly formatted shortcut parameter. String or JSON Array of parameters required: ' + param);\n }\n\n } else {\n params = [param];\n }\n\n $.each(item.keys, function () {\n\n var shortcutList = this;\n if (switchCtrlToMetaOnMac && isMac) {\n shortcutList = $.map(shortcutList, function (shortcutString) {\n return shortcutString.replace(/ctrl/i, 'meta');\n });\n }\n\n var newShortcut = whenIType(shortcutList);\n newShortcut[operation].apply(newShortcut, params);\n shortcuts.push(newShortcut);\n });\n\n });\n }\n\n return shortcuts;\n};\n\n// Trigger this event on an iframe if you want its keypress events to be propagated (Events to work in iframes).\n$(document).on('iframeAppended', function (e, iframe) {\n $(iframe).load(function () {\n var $target = $(iframe).contents();\n\n $target.on('keyup keydown keypress', function (e) {\n // safari propagates keypress events from iframes\n if (isSafari && e.type === 'keypress') {\n return;\n }\n\n if (!$(e.target).is(':input')) {\n $.event.trigger(\n e,\n arguments, // Preserve original event data.\n document, // Bubble this event from the iframe's document to its parent document.\n true // Use the capturing phase to preserve original event.target.\n );\n }\n });\n });\n});\n\nglobalize('whenIType', whenIType);\n\nexport default whenIType;\n","export * from './aui.side-effects';\nexport { log, error, warn } from './behaviours/aui.behaviour.logger';\nimport {i18n as I18n} from './behaviours/aui.behaviour.i18n';\nimport './aui.batch.page';\nimport './aui.batch.patterns';\nimport './aui.batch.iconography';\nexport * from './aui.batch.components';\n// Optional features\nimport './aui.component.form-notification';\nimport './aui.component.form-validation';\nimport { Header } from './aui.component.async-header';\nimport { DatePicker, CalendarWidget } from './aui.component.form.date-select';\nimport { RestfulTable } from './aui.component.restful-table';\nimport { sidebar } from './aui.component.sidebar';\nimport { whenIType } from './behaviours/aui.behaviour.keyboard-shortcuts';\n\nexport {\n I18n,\n Header,\n DatePicker,\n CalendarWidget,\n RestfulTable,\n sidebar,\n whenIType,\n};\n\nexport const {\n FocusManager,\n InlineDialog2,\n LayerManager,\n ProgressiveDataSet,\n clone,\n debounce,\n debounceImmediate,\n dim,\n escapeHtml,\n formValidation,\n id,\n isClipped,\n keyCode,\n layer,\n messages,\n populateParameters,\n params,\n responsiveheader,\n select,\n tablessortable,\n tabs,\n undim,\n _addID\n} = window.AJS;\n\n// Fix AUI + WRM compatibility in a hacky way.\nexport const { contextPath } = window.AJS;\n"],"names":["root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__775__","__WEBPACK_EXTERNAL_MODULE__472__","__WEBPACK_EXTERNAL_MODULE__302__","console","debug","jQuery","TimedNumber","timer","this","num","keyHandler","handleObj","isPlainObject","data","isArray","origHandler","handler","options","combo","extend","map","key","toLowerCase","index","event","target","test","nodeName","prop","special","type","hotkeys","specialKeys","which","character","String","fromCharCode","modif","possible","altKey","ctrlKey","metaKey","shiftKey","replace","shiftNums","pressed","val","length","reset","apply","arguments","inc","keys","split","i","len","version","keypressKeys","each","_","prototype","clearTimeout","timeout","setTimeout","proxy","add","fn","moveTo","scrollTarget","opts","transition","scrollOffset","instance","topOffset","offset","top","scrollTop","height","outerHeight","animating","document","trigger","animate","jQueryCache","is","stop","_typeof","obj","Symbol","iterator","constructor","_setPrototypeOf","o","p","Object","setPrototypeOf","__proto__","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","call","e","_construct","Parent","args","Class","a","push","Function","bind","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","_arrayLikeToArray","iter","from","minLen","n","toString","slice","name","arr2","TypeError","hasOwnProperty","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","_ref","fun","thisValue","x","Func","arrayForEach","unapply","forEach","arrayPop","pop","arrayPush","stringToLowerCase","stringToString","stringMatch","match","stringReplace","stringIndexOf","indexOf","stringTrim","trim","regExpTest","RegExp","typeErrorCreate","unconstruct","func","thisArg","_len","_key","_len2","_key2","addToSet","set","array","transformCaseFunc","_transformCaseFunc","l","element","lcElement","clone","object","property","newObject","lookupGetter","desc","get","value","fallbackValue","warn","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","getGlobal","_createTrustedTypesPolicy","trustedTypes","createPolicy","suffix","ATTR_NAME","currentScript","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","createDOMPurify","undefined","DOMPurify","removed","nodeType","isSupported","originalDocument","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","createElement","content","ownerDocument","trustedTypesPolicy","emptyHTML","_document","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","documentMode","hooks","createHTMLDocument","PARSER_MEDIA_TYPE","MUSTACHE_EXPR$1","ERB_EXPR$1","TMPLIT_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","CUSTOM_ELEMENT$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","concat","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","writable","configurable","enumerable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","namespaceURI","parentTagName","_forceRemove","node","parentNode","removeChild","outerHTML","remove","_removeAttribute","attribute","getAttributeNode","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","body","insertBefore","createTextNode","childNodes","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","elm","textContent","attributes","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","allowedTags","firstElementChild","_basicCustomElementTest","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attr","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","_attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","oldNode","returnNode","toStaticHTML","appendChild","firstChild","nodeIterator","shadowroot","shadowrootmod","serializedHTML","doctype","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","a0","$","fakePathRegex","multipleFileTextRegex","ie","v","div","all","FancyFileInput","el","defaults","$el","$label","createLabel","buttonText","_addLabelText","$clearButton","clearButtonText","multipleFileTextPattern","_eventNamespace","CLASSES","disabled","focused","active","valid","invalid","isDisabled","isFocused","$associatedLabel","id","wrap","formatMultipleFileText","numFiles","bindEvents","on","checkValidity","change","keydown","mousedown","mouseup","focus","blur","clear","unbindEvents","off","fireEvent","enable","removeClass","disable","addClass","closest","unwrap","keyCode","TAB","preventDefault","required","isInvalid","toggleClass","files","multiple","appendTo","detach","setFieldText","dataAttribute","removeAttr","fancyFileInput","ffi","expr","pseudos","createPseudo","dataName","elem","ui","exec","navigator","userAgent","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","UP","plugin","option","proto","plugins","allowDisconnected","safeActiveElement","activeElement","error","safeBlur","scrollParent","includeHidden","position","css","excludeStaticParent","overflowRegex","parents","filter","eq","widgetUuid","widgetHasOwnProperty","widgetSlice","cleanData","orig","elems","events","_data","triggerHandler","widget","base","existingConstructor","basePrototype","proxiedPrototype","namespace","fullName","Widget","_createWidget","_proto","_childConstructors","_super","_superApply","returnValue","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","child","childPrototype","bridge","input","inputIndex","inputLength","isMethodCall","methodValue","charAt","jquery","pushStack","_init","defaultElement","classes","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_on","destroy","style","defaultView","parentWindow","_getCreateOptions","_create","_setOptionDisabled","_trigger","_getCreateEventData","noop","that","_destroy","_removeClass","removeData","parts","curOption","shift","_setOptions","_setOption","_setOptionClasses","classKey","elements","currentElements","_classes","_toggleClass","full","bindRemoveEvent","nodesToBind","some","processClassString","checkOption","current","uniqueSort","not","extra","join","_untrackClassesElement","inArray","_off","_addClass","suppressDisabledCheck","handlers","delegateElement","handlerProxy","hasClass","guid","eventName","selector","_delay","delay","_hoverable","mouseenter","currentTarget","mouseleave","_focusable","focusin","focusout","callback","Event","originalEvent","isDefaultPrevented","show","hide","method","defaultEffect","hasOptions","effect","effectName","duration","isEmptyObject","complete","effects","easing","queue","next","datepicker_instActive","datepicker_getZindex","parseInt","isNaN","Datepicker","_curInst","_keyEvent","_disabledInputs","_datepickerShowing","_inDialog","_mainDivId","_inlineClass","_appendClass","_triggerClass","_dialogClass","_disableClass","_unselectableClass","_currentClass","_dayOverClass","regional","closeText","prevText","nextText","currentText","monthNames","monthNamesShort","dayNames","dayNamesShort","dayNamesMin","weekHeader","dateFormat","firstDay","isRTL","showMonthAfterYear","yearSuffix","selectMonthLabel","selectYearLabel","_defaults","showOn","showAnim","showOptions","defaultDate","appendText","buttonImage","buttonImageOnly","hideIfNoPrevNext","navigationAsDateFormat","gotoCurrent","changeMonth","changeYear","yearRange","showOtherMonths","selectOtherMonths","showWeek","calculateWeek","iso8601Week","shortYearCutoff","minDate","maxDate","beforeShowDay","beforeShow","onSelect","onChangeMonthYear","onClose","onUpdateDatepicker","numberOfMonths","showCurrentAtPos","stepMonths","stepBigMonths","altField","altFormat","constrainInput","showButtonPanel","autoSize","en","dpDiv","datepicker_bindHover","className","datepicker_handleMouseover","datepicker","_isDisabledDatepicker","inline","find","datepicker_extendRemove","props","markerClassName","maxRows","_widgetDatepicker","setDefaults","settings","_attachDatepicker","inst","_newInst","_connectDatepicker","_inlineDatepicker","selectedDay","selectedMonth","selectedYear","drawMonth","drawYear","append","_attachments","_doKeyDown","_doKeyPress","_doKeyUp","_autoSize","_disableDatepicker","_get","_showDatepicker","src","alt","title","_lastInput","_hideDatepicker","findMax","max","maxI","date","Date","names","setMonth","setDate","getDay","_formatDate","divSpan","_setDate","_getDefaultDate","_updateDatepicker","_updateAlternate","_dialogDatepicker","pos","browserWidth","browserHeight","scrollX","scrollY","_dialogInst","_dialogInput","_pos","pageX","pageY","clientWidth","clientHeight","scrollLeft","blockUI","_destroyDatepicker","$target","empty","_enableDatepicker","end","opacity","cursor","children","_getInst","err","_optionDatepicker","_getDateDatepicker","_getMinMaxDate","_changeDatepicker","_refreshDatepicker","_setDateDatepicker","noDefault","_setDateFromField","_getDate","dateStr","sel","handled","_selectDay","_adjustDate","_clearDate","_gotoToday","stopPropagation","chars","chr","_possibleChars","charCode","lastVal","parseDate","_getFormatConfig","beforeShowSettings","isFixed","_findPos","offsetHeight","left","display","_checkOffset","_shouldFocusInput","_generateHTML","_attachHandlers","origyearshtml","numMonths","_getNumberOfMonths","cols","width","activeCell","yearshtml","first","replaceWith","dpWidth","outerWidth","dpHeight","inputWidth","inputHeight","viewWidth","viewHeight","Math","min","abs","hidden","postProcess","_tidyDialog","unblockUI","_checkExternalClick","period","_adjustInstDate","currentDay","currentMonth","currentYear","getDate","getMonth","getFullYear","_notifyChange","_selectMonthYear","select","selectedIndex","month","year","td","_selectDate","formatDate","noWeekends","day","time","checkDate","getTime","floor","round","format","iFormat","dim","iValue","shortYearCutoffTemp","doy","literal","lookAhead","getNumber","isDoubled","size","digits","substring","getName","shortNames","longNames","k","sort","b","pair","substr","checkLiteral","_ticksTo1970","_getDaysInMonth","_daylightSavingAdjust","ATOM","COOKIE","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RFC_2822","RSS","TICKS","TIMESTAMP","W3C","formatNumber","formatName","output","dates","_restrictMinMax","_determineDate","offsetNumeric","offsetString","pattern","newDate","setHours","setMinutes","setSeconds","setMilliseconds","getHours","noChange","origMonth","origYear","prev","today","selectDay","selectMonth","selectYear","maxDraw","gotoDate","controls","buttonPanel","dow","row","group","col","selectedDate","cornerClass","calender","thead","daysInMonth","leadDays","curRows","numRows","printDate","dRow","daySettings","otherMonth","unselectable","tempDate","isMultiMonth","currentDate","_canAdjustMonth","_isInRange","_generateMonthYearHeader","_getFirstDayOfMonth","ceil","secondary","inMinYear","inMaxYear","years","thisYear","determineYear","endYear","monthHtml","onChange","minMax","curYear","curMonth","yearSplit","minYear","maxYear","initialized","otherArgs","mouse","addClasses","axis","connectToSortable","containment","cursorAt","grid","handle","helper","iframeFix","refreshPositions","revert","revertDuration","scope","scroll","scrollSensitivity","scrollSpeed","snap","snapMode","snapTolerance","stack","zIndex","drag","start","_setPositionRelative","_setHandleClassName","_mouseInit","_removeHandleClassName","destroyOnClear","_mouseDestroy","_mouseCapture","_getHandle","_blurActiveElement","_blockFrames","iframeBlocks","iframe","_unblockFrames","_mouseStart","_createHelper","_cacheHelperProportions","ddmanager","_cacheMargins","cssPosition","offsetParent","hasFixedAncestor","positionAbs","_refreshOffsets","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","_setContainment","_clear","dropBehaviour","prepareOffsets","_mouseDrag","dragStart","margins","_getParentOffset","relative","_getRelativeOffset","click","noPropagation","_convertPositionTo","_uiHash","_mouseUp","_mouseStop","dropped","drop","dragStop","handleElement","cancel","helperIsFunction","helperProportions","right","bottom","_isRootNode","po","contains","scrollIsRootNode","isUserScrollable","c","ce","relativeContainer","scrollWidth","offsetWidth","scrollHeight","d","mod","constrainPosition","co","cancelHelperRemoval","draggable","uiSortable","item","sortables","sortable","isOver","_storedCSS","placeholder","_helper","innermostIntersecting","_intersectsWith","containerCache","_parent","currentItem","fromOutside","_revert","t","_cursor","_opacity","scrollParentNotHidden","overflowOffset","scrolled","snapElements","items","$t","$o","ts","bs","ls","rs","r","x1","x2","y1","y2","snapping","release","snapItem","makeArray","_zIndex","mouseHandled","distance","_mouseDown","stopImmediatePropagation","started","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseDownEvent","btnIsLeft","elIsCancel","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseMove","button","ignoreMissingWhich","ready","connectWith","dropOnEmpty","forcePlaceholderSize","forceHelperSize","tolerance","activate","beforeStop","deactivate","out","over","receive","update","_isOverAxis","reference","_isFloating","refresh","overrideHandle","validHandle","reverting","_refreshItems","addBack","_removeCurrentsFromItems","noActivation","currentContainer","domPosition","_createPlaceholder","storedCursor","storedStylesheet","_storedZIndex","_storedOpacity","_preserveHelperProportions","containers","dragging","lastPositionAbs","_scroll","itemElement","intersection","_refreshItemPositions","dragDirection","vertical","_getDragVerticalDirection","horizontal","_getDragHorizontalDirection","_intersectsWithPointer","direction","_intersectsWithSides","_rearrange","_contactContainers","cur","animation","_noFinalSort","after","prepend","serialize","_getItemsAsjQuery","connected","str","res","expression","toArray","ret","dyClick","dxClick","isOverElementHeight","isOverElementWidth","isOverElement","forcePointerForContainers","floating","verticalDirection","horizontalDirection","isOverBottomHalf","isOverRightHalf","delta","_connectWith","j","queries","addItems","list","grep","targetData","_queries","queriesLength","fast","toleranceElement","custom","refreshContainers","_createTrPlaceholder","container","innerHeight","innerWidth","sourceTr","targetTr","dist","itemWithLeastDistance","posProperty","sizeProperty","nearBottom","innermostContainer","innermostIndex","hardRefresh","nextSibling","counter","delayedTriggers","before","delayEvent","_inst","sender","elProto","HTMLElement","matchesSelector","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","getData","__SKATE_TEMPLATE_HTML_DATA","setData","createFragmentFromString","domString","caption","dd","dt","li","tr","createFragmentFromNodeList","nodeList","frag","getNodesBetween","startNode","endNode","nodes","findChildrenMatchingSelector","sourceNode","found","querySelectorAll","foundLength","filtered","addDefaultContent","defaultNodes","nodesLen","isDefault","removeDefaultContent","createProxyProperty","parseCommentNode","JSON","parse","Error","defaultContent","parseNodeForContent","lastContentNode","childNodesLen","contentDatas","childNode","contentInfo","contentNode","skateTemplateHtml","contentNodes","contentData","createComment","replaceChild","stringify","cacheContentData","wrapper","wrapped","defineProperty","wrapNodeWith","contentNodesLen","targetFragment","foundNodes","lastChild","attrs","attrsLength","nodeValue","childNodesLength","acceptsTextContent","fragChildNodes","contentSelector","insertAdjacentHTML","where","referenceNode","fragChildNodesLength","hasFoundReferenceNode","mainLoop","betweenNodes","betweenNodesLen","betweenNode","newChild","oldChild","ATTR_IGNORE","TYPE_ATTRIBUTE","TYPE_CLASSNAME","TYPE_ELEMENT","__SKATE_DATA","_globals","_lifecycle","_mutationObserver","_fixIeInnerhtml","_utils","globals","__esModule","initElements","removeElements","getClosestIgnoredElement","documentObserverHandler","mutations","mutationsLen","mutation","addedNodes","removedNodes","createDocumentObserver","observer","MutationObserver","observe","childList","subtree","register","fixIe","unregister","disconnect","isIeUntil10","isIe11","isIe","elementPrototype","walkTree","cb","fixInnerHTML","originalInnerHTML","_hasBeenEnhanced","mutationEvent","createEvent","initMutationEvent","dispatchEvent","propertyDescriptor","JsMutationObserver","_version","VERSION","registry","_constants","_registry","_interopRequire","camelCase","elementContains","hasOwn","inherit","objEach","nativeMatchesSelector","hasNativeMatchesSelectorDetattachedBug","needsAttributeOldValueCaching","parseEvent","delegate","initAttributes","component","componentAttributes","defineAttributeProperty","addAttributeToPropertyLinks","triggerAttributeChanged","mutationData","cachedAttributeOldValues","newValue","oldValue","newValueIsString","oldValueIsString","specific","fallback","triggerAttributesCreated","attrsCopy","attrsLen","addAttributeListeners","isNativeCustomElement","attributeName","attributeOldValue","addEventListeners","makeHandler","evt","useCapture","addEventListener","triggerCreated","created","resolvedAttribute","unresolvedAttribute","triggerAttached","attached","detached","triggerDetached","triggerLifecycle","ELEMENT_NODE","currentNodeDefinitions","getForElement","currentNodeDefinitionsLength","elementChildNodes","definitions","definitionsLen","self","WeakMap","now","random","entry","has","global","setImmediate","registrationsTable","setImmediateQueue","sentinel","postMessage","currentRecord","recordWithOldValue","isScheduled","scheduledObservers","uidCounter","wrapIfNeeded","characterData","attributeFilter","characterDataOldValue","SyntaxError","registration","registrations","removeListeners","Registration","nodes_","addListeners","splice","records_","takeRecords","copyOfRecords","enqueue","record","records","recordToReplaceLast","selectRecord","scheduleCallback","addListeners_","removeListeners_","removeEventListener","addTransientObserver","transientObservedNodes","removeTransientObservers","handleEvent","relatedNode","getRecord","attributeNamespace","attrChange","MutationEvent","ADDITION","prevValue","forEachAncestorAndObserverEnqueueRecord","getRecordWithOldValue","changedNode","previousSibling","clearRecords","_isPolyfilled","dispatchCallbacks","ShadowDOMPolyfill","observers","o1","o2","uid_","anyNonEmpty","removeTransientObserversFor","callback_","MutationRecord","copyMutationRecord","original","recordRepresentsCurrentMutation","lastRecord","newRecord","isValidNativeCustomElementName","supportsNativeCustomElements","getClassList","classList","definition","tagToExtend","isAttr","isAttrValue","localName","isAttrOrTag","isType","classListLen","def","_documentObserver","documentObserver","debounce","isOldIE","attachEvent","isReady","readyState","initDocument","initialiseSkateElementsOnDomLoad","makeElementConstructor","CustomElement","definitionId","skate","isPrototypeOf","createdCallback","attachedCallback","detachedCallback","attributeChangedCallback","registerElement","init","nodesToUse","ATTRIBUTE","CLASSNAME","ELEMENT","previousSkate","noConflict","elementPrototypeContains","toUpperCase","source","head","called","overwrite","getOwnPropertyNames","namesLen","tablesorter","log","s","alert","benchmark","getElementText","cellIndex","te","config","textExtraction","textAttribute","innerText","getColumnData","detectParserForColumn","rows","rowIndex","parsers","keepLooking","cells","getParserById","buildParserCache","h","ch","np","tb","$tbodies","$table","cssInfoBlock","parsersDebug","extractors","columns","$headers","headers","empties","emptyTo","emptyToBottom","strings","stringTo","buildCache","cc","tx","$row","cacheTime","totalRows","rowData","colMax","$tb","cache","showProcessing","isProcessing","normalized","cssChildRow","cssHasChild","order","ignoreCase","appendToTable","$bk","appendTime","wo","widgetOptions","tBodies","appender","isUpdating","processTbody","pager","removeRows","pager_removeRows","ajax","applyWidget","formatSortingOrder","buildHeaders","lock","headerList","headerContent","computeColumnIndex","cssIcon","icon","selectorHeaders","headerTemplate","onRenderTemplate","headerIn","onRenderHeader","column","sortInitialOrder","count","lockedOrder","header","cssHeader","headerRow","cssHeaderRow","tabIndex","role","updateHeader","commonUpdate","resort","selectorRemove","checkResort","$th","th","sortDisabled","setHeadersCss","f","sortList","none","sortNone","cssNone","sortAsc","cssAsc","sortDesc","cssDesc","aria","$extraHeaders","$this","nextSort","sortReset","txt","language","getCachedSortType","initSort","cell","arry","indx","sortMultiSortKey","sortResetKey","sortRestart","sortForce","colSpan","sortAppend","isValueInArray","multisort","sortTime","y","dir","cts","textSorter","bl","serverSideSorting","sortStable","string","numberSorter","resortComplete","isFunction","flag","sl","bindMethods","unbind","refreshWidgets","restoreHeaders","icell","$cell","tbdy","primary","updateHeaderSortCount","delayInit","getWidgetById","dontapply","originalSettings","hasInitialized","setup","widgets","theme","widthFixed","cancelSelection","usNumberFormat","sortLocaleCompare","zebra","initWidgets","tableClass","cssProcessing","selectorSort","childRow","info","processing","nextAsc","nextDesc","nextNone","buildTable","tHead","m","metadata","supportsDataObject","widgetInit","colgroup","overallWidth","fixColumnWidth","sortlist","processTimer","getCell","trs","cellId","rowSpan","firstAvailCol","matrixrow","matrix","lookup","toggle","$ths","$h","parseFloat","getIt","holdr","insertAfter","clearTableBody","core","downTime","external","removeClasses","$r","$f","regex","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","hasWidget","w","wd","isApplyingWidgets","priority","doAll","cw","cl","formatFloat","isDigit","toLocaleLowerCase","ci","parserMetadataName","$tr","even","rmv","each2","context","Select2","AbstractSelect2","SingleSelect2","MultiSelect2","nextUid","sizer","$document","scrollBarDimensions","lastMousePosition","KEY","ESC","SHIFT","CTRL","ALT","isArrow","isControl","isFunctionKey","DIACRITICS","clazz","results","search","resultsSelector","prepareOpts","createContainer","liveRegion","containerId","containerEventName","syncCssClasses","adaptContainerCssClass","evaluate","containerCss","containerCssClass","elementTabIndex","killEvent","dropdown","adaptDropdownCssClass","dropdownCssClass","queryCount","resultsPage","initContainer","lastpos","highlightUnderEvent","_touchEvent","touchMoved","clearTouchMoved","selectHighlighted","threshold","notify","installDebouncedScroll","loadMoreIfNeeded","mousewheel","deltaX","deltaY","installKeyUpChangeEvent","updateResults","lastSearchTerm","initSelection","monitorSource","maximumInputLength","readonly","$template","measureScrollbar","autofocus","searchInputPlaceholder","select2","close","detachEvent","_sync","propertyObserver","tabindex","cleanupJQueryElements","optionToData","locked","equal","idKey","ajaxUrl","sortResults","selectOnBlur","formatNoResults","formatSearching","formatInputTooShort","formatInputTooLong","formatLoading","formatSelectionTooBig","elemTags","sorter","selectOnClose","processResults","lang","noMatches","formatNoMatches","searching","inputTooShort","inputTooLong","loadingMore","maximumSelected","populateResults","query","populate","depth","result","selectable","compound","label","innerContainer","formatted","formatResultCssClass","formatResult","escapeMarkup","formatMatches","tags","placeholderOption","process","more","term","collection","matcher","getPlaceholder","getPlaceholderOption","url","local","createSearchChoice","splitVal","separator","transformVal","createSearchChoicePosition","unshift","WebKitMutationObserver","MozMutationObserver","triggerSelect","choice","triggerChange","details","blurOnChange","isInterfaceEnabled","enabledInterface","enableInterface","enabled","_enabled","_readonly","opened","positionDropdown","bodyOffset","above","changeDirection","resultsListNode","$dropdown","dropHeight","$window","windowWidth","windowHeight","viewPortRight","viewportBottom","dropTop","dropLeft","enoughRoomBelow","enoughRoomAbove","dropWidth","focusSearch","dropdownAutoWidth","dropdownCss","shouldOpen","clearDropdownAlignmentPreference","open","opening","mask","cid","resize","orient","last","reinsertElement","noFocus","clearSearch","externalSearch","prefillNextSearchTerm","nextSearchTerm","getMaximumSelectionSize","maximumSelectionSize","ensureHighlightVisible","hb","rb","highlight","findHighlightableChoices","moveHighlight","choices","removeHighlight","_touchMoved","countSelectableResults","page","loadMorePadding","postprocessResults","formatLoadMore","tokenize","initial","queryNumber","lastTerm","showSearchInput","maxSelSize","checkFormatter","minimumInputLength","render","showSearch","hasError","formatAjaxError","jqXHR","textStatus","errorThrown","postRender","selection","range","setSelectionRange","createTextRange","collapse","firstOption","initContainerWidth","focusser","minimumResultsForSearch","shouldFocusInput","elementLabel","idSuffix","originalTitle","openOnEnter","allowClear","setPlaceholder","isPlaceholderOptionSelected","updateSelection","selected","is_match","noHighlightUpdate","countResults","old","oldData","added","cssClass","formatSelection","formatSelectionCssClass","ids","ordered","selectChoice","searchContainer","_this","keydowns","selectionStart","selectionEnd","createRange","moveStart","getCursorInfo","selectedChoice","unselect","resizeSearch","clearPlaceholder","maxWidth","getMaxSearchWidth","getVal","addSelectedChoice","tokenizer","closeOnSelect","createChoice","setVal","enableChoice","enabledItem","disabledItem","getSideBorderPadding","minimumWidth","searchWidth","sideBorderPadding","currentStyle","getComputedStyle","fontSize","fontFamily","fontStyle","fontWeight","letterSpacing","textTransform","whiteSpace","measureTextWidth","unique","valMap","buildChangeDetails","onSortStart","onSortEnd","values","allowedMethods","valueMethods","propertyMethods","methodsMap","multi","single","markup","markMatch","stripDiacritics","tokenSeparators","selectCallback","token","dupe","defaultEscapeMarkup","selectedObject","currentSearchTerm","msMaxTouchPoints","locales","limit","pageNumber","ajaxDefaults","transport","params","dataType","util","transform","quietMillis","ctx","dest","adapter","adapted","replacements","tl","replace_map","deprecated","jsonpCallback","abort","success","dataText","tmp","dataItem","datum","childDatum","isFunc","isObject","formatter","formatterName","SuperClass","methods","serializeObject","$select","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","toStringTag","Zepto","I18N_OBJECT_NAME","initNamespace","globalize","createFormsComponentBody","unsub","isCompleteOnInit","mutationList","isChildrenChanged","onChildrenChange","unsubscribe","innerCheckboxList","radio","polyfillConsole","siblings","formatString","message","apos","simpleFormat","numberFormat","choiceFormat","choicePart","getParamValue","isInvalidFormat","prevOptionValue","argValue","logger","formatArgs","_performTokenRegex","tick","openIndex","openCount","AUI_VERSION","EMPTY_SELECTOR","eventType","eventData","extraParameters","escapeHtml","deprecationCalls","getShowDeprecationMessage","displayName","printFrameOffset","deprecatedLocation","stacktrace","stackMessage","getDeprecatedLocation","deprecationType","sinceVersion","removeInVersion","alternativeName","extraInfo","extraObject","logCssDeprecation","selectorMap","newNode","deprecateFunctionExpression","showDeprecationMessage","deprecateConstructor","constructorFn","deprecatedConstructor","supportsProperties","deprecateObjectProperty","displayNameOrShowMessageFn","oldVal","deprecateValueProperty","handleAddingSelector","deprecatedSelectorMap","testAndHandleDeprecation","observeFutureChange","recomputeStyle","getPropertyValue","overflowEl","useShim","useShimDeprecationLogger","isBlanketShowing","$dim","cachedOverflow","overflow","overflowX","overflowY","undim","selectors","objDisplayPrefix","alternativeNamePrefix","propertyDeprecationSupported","getMessageLogger","CAPS_LOCK","COMMAND","COMMAND_LEFT","COMMAND_RIGHT","LEFT_SQUARE_BRACKET","CONTROL","INSERT","MENU","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","WINDOWS","alias","stateName","stateValue","_state","getTrigger","state","findControllers","setTrigger","validTrigger","doIfTrigger","forEachTrigger","frames","controllers","someFramesAreCrossOrigin","currentDocumentControllers","allControllers","findControlled","getElementById","isEnabled","triggerMessage","$closestAnchor","isNestedAnchor","relatedTarget","focusingToControlledElement","msg","amdify","visible","isTabIndexNotNaN","mapName","imageMap","href","isFormElement","isAnchor","isAnchorTabbable","isTabIndexNaN","RESTORE_FOCUS_DATA_KEY","elementTrapsFocus","FocusManager","_focusTrapStack","_handler","focusTrapHandler","focusTrapStack","keyCodes","focusOrigin","$focusTrapElement","$tabbableElements","originIdx","newFocusIdx","$controlledElementWithFocus","$subTabbable","subMove","triggerEl","getFocusManager","defaultFocusSelector","enter","$lastFocused","lastFocussedEl","setLastFocus","focusSelector","exit","$restoreFocus","getLastFocus","Ctor","dataAttr","selectorOrOptions","maybeOptions","CustomEvent","bubbles","cancelable","detail","defaultPrevented","initCustomEvent","origPrevent","EVENT_PREFIX","GLOBAL_EVENT_PREFIX","$doc","onTransitionEnd","once","transitionProperty","isTransitioning","propertyName","triggerEvent","deprecatedName","newNativeName","e1","e2","nativeEvent","nativeEvent2","Layer","below","LayerManager","changeSize","isVisible","thisLayer","popUntil","isBlanketed","dataset","auiBlanketed","isPersistent","modal","getDOMContainer","querySelector","_hideLayer","triggerBeforeEvents","_showLayer","domContainer","createLayer","topIndexWhere","layerArr","layerIndex","$layer","topBlanketedIndex","updateBlanket","oldBlanketIndex","newTopBlanketedIndex","popLayers","stopIndex","forceClosePersistent","layer","_stack","hasLayer","$trigger","popLayersBeside","_nextZIndex","$topEl","nextZIndex","hasTrigger","blanketedIndex","parentLayer","getParentLayer","parentIndex","hideAll","reverse","getNextLowerNonPersistentOrBlanketedLayer","$nextEl","getNextHigherNonPeristentAndNonBlanketedLayer","getTopLayer","getTopOpenLayer","oldTopBlanketedIndex","$lastPopped","popTopIfNonPersistent","$topLayer","popUntilTopBlanketed","$topBlanketedLayer","$next","popUntilTopPersistent","$toPop","toPop","customEvent","Manager","deprecation","populateParameters","parameters","$body","toInit","then","ex","I18n","getText","DEFAULT_PLACEMENT_VALUE","PLACEMENT_OPTIONS","AvatarBadged","placement","setBadgedPlacement","newPlacement","includes","DEFAULT_AVATAR_IMAGES","Map","getElementWrapper","elementFind","replaceClass","elementWrapper","setDefaultAvatarImage","setImageSrc","avatarType","getAvatarType","avatarSvg","setImageAttr","AvatarEl","setImageAlt","setImageTitle","containsBadge","DEFAULT_SIZE","SIZES","xsmall","small","medium","large","xlarge","xxlarge","xxxlarge","updateAvatarGroup","avatars","hiddenAvatars","updateAvatarGroupItems","oldDropdown","createDropdown","createAvatarGroupDropdownButton","menu","createAvatarGroupDropdownMenu","hiddenAvatar","getLeftPosition","VISIBLE_AVATAR_COUNT","avatar","isHidden","avatarSize","isDropdownButton","closestDropdown","closeDropdown","openDropdown","AvatarGroupEl","getAvatarGroupSize","setAvatarGroupSize","wasNodeRemoved","wasNodeAdded","banner","bannerContainer","bannerElement","screenReaderInfo","createBannerElement","renderBannerElement","hiddenBanners","lazyDeprecate","deprecate","removeHiddenBanners","SIZE","SMALL","px","radius","MEDIUM","LARGE","DEFAULTS","filled","filledAttributeReplacementText","filledAttributeDeprecatedLogger","filledPropDeprecatedLogger","validateSize","possibleSizes","circle","circleSize","setSize","selfDomRect","getBoundingClientRect","parentDomRect","parentMiddleTop","spinnerMiddleTop","setMiddleTop","removeMiddleTop","__data","isFilled","newSize","isBusy","isInputNode","_spinner","SpinnerEl","busy","idle","CLOSE_BUTTON_CLASS","CLOSE_BUTTON_CLASS_SELECTOR","CLOSE_BUTTON","Dialog2","_handlers","dataKey","layerWidget","delete","dialog2Widget","dialog2GlobalHandlers","Set","closeButton","deprecatedFocusSelector","autofocusEl","elementToFocus","focusableElementList","focusableElement","handleInitialFocus","doesSupportHtml5DateInput","doesSupportFocusWithin","ua","isMacOSX","getWindow","isElement","isHTMLElement","isShadowRoot","ShadowRoot","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","offsetLeft","offsetTop","getWindowScroll","win","pageXOffset","pageYOffset","getNodeName","getDocumentElement","getWindowScrollBarX","isScrollParent","_getComputedStyle","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","rect","isElementScaled","offsets","clientLeft","clientTop","getLayoutRect","assignedSlot","host","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","isFirefox","perspective","contain","willChange","getContainingBlock","auto","basePlacements","clippingParents","viewport","popper","variationPlacements","reduce","modifierPhases","modifiers","visited","modifier","requires","requiresIfExists","dep","depModifier","rootNode","getRootNode","isSameNode","rectToClientRect","assign","getClientRectFromMixedType","clippingParent","strategy","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","padding","altContext","popperRect","rects","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","multiply","DEFAULT_OPTIONS","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","styles","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","merged","phase","orderModifiers","existing","_ref$options","cleanupFn","noopFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","onFirstUpdate","passive","_options$scroll","_options$resize","unsetSides","mapToStyles","_ref2","_Object$assign2","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","arrow","initialStyles","margin","_options$offset","invertDistance","skidding","distanceAndSkiddingToXY","_data$state$placement","hash","getOppositePlacement","matched","getOppositeVariationPlacement","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","computeAutoPlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","within","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","eventListeners","ATTR_ALIGNMENT","DEFAULT_ATTACHMENT","ATTR_CONTAINER","CLASS_PREFIX_SIDE","CLASS_PREFIX_SNAP","ALIGNMENT_MAP","getAlignmentAttribute","getAlignment","calculateBestAlignmentSnap","getContainer","containerBounds","calculatePlacement","alignment","getPlacement","allowedPlacement","Alignment","frame","frameElement","_eventListenersEnabled","eventsEnabled","_triggerOnEvents","flip","flipContainer","escapeWithReference","overflowContainer","onUpdate","onEvents","sum","getTotalValue","paddingTop","borderTop","paddingLeft","borderLeft","popperConfig","positionFixed","onCreate","createPopper","sideClass","snapClass","addAlignmentClasses","changeTarget","newTarget","referenceEl","scheduleUpdate","ifGone","deferred","parentElement","reject","promise","uniqueID","uniqueIDstring","uniqueIDcounter","generateUniqueId","prefix","setDropdownTriggerActiveState","isActive","UNLOADED","LOADING","ERROR","SUCCESS","setDropdownContents","json","sectionData","sectionItemsHtml","itemData","makeBooleanAttribute","makeAttribute","makeAsyncDropdownContents","setDropdownErrorState","loadContentsIfAsync","setDropdownLoadingState","done","status","xhr","fail","always","setDropdownLoaded","getDropdownItems","getAllDropdownItems","getVisibleDropdownItems","amendDropdownContent","amendDropdownItem","destroyAlignment","_auiAlignment","setLayerAlignment","hasSubmenu","hasSubmenuAlignment","previousAlignment","restorePreviousAlignment","hasAnyAlignment","saveCurrentAlignment","$item","$triggerGroup","$groupActiveTrigger","$groupFocusedTrigger","keyboardClose","keyboardCloseDetected","bindDropdownBehaviourToLayer","migrateAndSyncLegacyClassNames","_returnTo","possibleHome","getDropdownHideLocation","isSubmenu","bindItemInteractionBehaviourToDropdown","belongsToDropdown","focusNext","focusPrevious","eventKeyCode","isEnter","isSpace","hideIfNotSubmenuAndNotInteractive","layerAbove","isDropdown","layerId","targetDropdownId","nextLayer","dropdownCreated","checkbox","isInteractive","isChecked","uncheck","dropdownPrototype","isKeyDownEvent","focusItem","visibleItems","handleFocus","focusTrigger","bottomLayer","currentLayer","itemInLayerBelow","findBottomLayerInDropdownStack","idx","$items","disabledAttributeHandler","interactiveAttributeHandler","checkedAttributeHandler","hiddenAttributeHandler","stringAttributeHandlerGenerator","convertCssClassesToArray","spaceDelimitedClasses","ItemLinkEl","interactive","for","anchor","updated","ItemCheckboxEl","ItemRadioEl","checked","SectionEl","headingElement","groupElement","DropdownEl","isDropdownUnloaded","hasCurrentErrorBeenShown","dropdownID","handleIt","forceShow","normalInvoke","submenuInvoke","rootMenuInvoke","loadContentWhenMouseEnterTrigger","getExpanderProperties","$content","isTriggerParent","$shortContent","isExpanded","isCollapsible","textReplacement","replaceText","$deprecatedReplaceElement","$deepestChild","$replaceElement","EXPANDER_EVENTS","expand","DEFAULT_FADEOUT_DURATION","DEFAULT_FADEOUT_DELAY","FADEOUT_RESTORE_DURATION","makeRemoveOnHide","makeFadeout","makeCloseable","$closeIcons","$icon","$message","closeMessage","hasFocus","isHover","fadeOut","resetFadeOut","fadeTo","shouldStartFadeOut","hover","messageFunctions","createMessage","closeable","removeOnHide","fadeout","messageTypeText","a11yTypeLabel","getMessageA11yTypeText","messageTypeLabel","titleId","titleHtml","renderMessageElement","insertWhere","prependTo","insertMessageIntoContext","insert","MessageEl","FOCUSABLE_QUERY","ID_FLAG_CONTAINER","ariaLive","flagOptions","$flag","ariaLabel","isFocusable","ariaRole","renderFlagElement","closeFlag","extendFlagElement","makeAutoClosable","findContainer","closedFlags","handleFlagContainer","flagContainer","insertFlag","$flagToClose","AUI_TOOLTIP_ID","GRAVITY_MAP","pluginKey","gravity","live","suppress","$sharedTip","toggleTooltipVisibility","shouldBeHidden","tipNode","Tooltip","triggerElement","$triggerElement","_objectSpread","moveTitleToTooltip","observeTriggerRemoval","unbindHandlers","tooltipsByDomNode","tooltip","observedElements","$delegationRoot","triggerObservers","isConnected","buildTip","tooltipContentElement","getTipTitle","actualTitle","tipTitle","showTooltip","popperInstance","hideTooltip","getTooltipInstance","domNode","namespacify","activationEvents","deactivationEvents","showTimeoutId","hideTimeoutId","arg","$collection","firstDomNode","commandName","clearAllTimers","hideOnEsc","code","templates","createSection","$clearItemsSection","class","$section","$itemList","$li","styleClass","$a","optionsHtml","dropdownId","$button","handleDropdownSelection","updateOption","$toUpdate","updateClearAll","getSelectedDescriptors","mapOptionDescriptors","$options","$option","renderDropdown","getOptions","getDescriptors","renderButton","selectedLabels","getSelectedLabels","isImplicitAll","getImplicitAllLabel","$btn","getSelectedOptions","descriptor","CheckboxMultiselectEl","uid","deselectAllOptions","getButtonTitle","selectOption","unselectOption","getValue","addOption","removeOption","attributeExists","satisfiesRules","refersTo","desiredId","predicate","ariaControls","ariaOwns","INPUT_SUFFIX","getLabel","LabelEl","_label","enforce","form","originalSelect2","auiContainer","auiDropdown","updatedArgs","dropdownLayer","auiOpts","auiAvatarClass","hasAvatar","customErrorHandlers","originalTransport","newTransport","select2Instance","searchLabel","$selectInput","$selectDropdown","wasAriaDescribedByCleared","$container","$focusserLabel","$focusserInput","labelId","ariaLabelledby","firstArgs","maybeArgs","spinStop","$spinnerDom","color","spinner","encodeURI","ProgressiveDataSet","Backbone","initialize","models","model","_idAttribute","idAttribute","_maxResults","maxResults","_queryData","queryData","_queryParamKey","queryParamKey","_queryEndpoint","queryEndpoint","queryCache","activeQueryCount","bindAll","remote","getFilteredResults","respond","hasQueryCache","shouldGetMoreResults","fetch","activity","resp","succ","addQueryCache","getQueryData","response","pluck","findQueryCache","setMaxResults","number","SuggestionsModel","_suggestions","_activeIndex","onHighlightChange","suggestions","oldSuggestions","getNumberOfResults","setHighlighted","toHighlight","highlightPrevious","previousActiveIndex","highlightNext","nextActiveIndex","highlighted","highlightedIndex","generateListItemID","listId","SuggestionsView","clearActive","currentLength","currListId","suggestion","currentIndex","imageSrc","image","newValueText","setActive","getActive","view","enableAlignment","DESELECTED","NO_HIGHLIGHT","ASSISTIVE_STATUS_DELAY_MS","deselect","_select","_input","clearElementImage","hasResults","_suggestionModel","matchPrefix","resetDropdown","_button","updateAssistiveStatus","resetAndCloseDropdown","_suggestionsView","suggest","autoHighlight","_autoHighlight","_progressiveDataSet","setInputImageToHighlightedSuggestion","imageSource","setElementImage","setValueAndDisplayFromModel","selectHighlightedSuggestion","convertOptionToModel","SuggestionModel","convertOptionsToModels","_datalist","getActiveId","_dropdown","getIndexInResults","initialiseProgressiveDataSet","_isSync","setBusyState","setIdleState","isInputExactMatch","isInputEmpty","Option","newValueSuggestionModel","createNewValueModel","indexOfValueInResults","resultsChanged","clearAndSet","optionToHighlight","activeId","assistiveStatusTimerId","assistiveStatusText","_assistiveStatus","focusInHandler","cancelInProgressQueries","isQueryInProgress","getSelectedLabel","focusOutHandler","selectCanBeEmpty","selectionIsEmpty","selectionNotExact","handleInvalidInputOnFocusOut","handleHighlightOnFocusOut","SelectEl","_listId","uniqueId","suggestionsToAdd","newSuggestion","oldSuggestion","associateDropdownAndTrigger","bindHighlightMouseover","preventClosingContainerLayer","bindSelectMousedown","initialiseValue","initialHighlightedItem","setInitialVisualState","currentValue","findWhere","displayValue","setBooleanAttribute","computeBooleanValue","computeEnumValue","enumOptions","matchesEnumValue","enumValue","isMissing","missingDefault","invalidDefault","setEnumAttribute","getInput","getSpinner","removedAttributeHandler","fallbackAttributeHandler","getAttributeHandler","formAttributeHandler","_formId","idAttributeHandler","valueAttributeHandler","labelHandler","bindEventsToInput","supportsFocusWithin","ToggleEl","_canFireEventsNow","fireChangeEvent","newVal","indeterminate","DEFAULT_HOVEROUT_DELAY","changeTrigger","newTrigger","isPopupMenu","oldTrigger","alignmentOptions","showOnEnter","_closingTimeout","closeAfter","userInteractingWith","messageHandler","onMouseEnter","onMouseLeave","onBlur","respondsTo","rebindMouseEvents","namespaceEvent","elId","maybeShow","maybeHide","shouldFocus","maybeInitialise","__initialised","noNestedTriggers","setupNestedLayerHandlers","disableAlignment","RESPONDS_TO_ATTRIBUTE_ENUM","InlineDialogEl","__propUpdate","persistent","oldComputedValue","messageList","Navigation","$treeParent","$subtreeToggleIcon","$selected","navigationWidget","$togglers","$parent","isListItemExpanded","isNested","isCollapsed","NavigationEl","afterTransitionEvent","beforeTransitionEvent","transitionEnd","transitionProgress","progressBar","progressBarContainer","currentProgress","$progressBar","$progressBarContainer","one","progressValue","updateProgress","setIndeterminateOnProgressElement","validNumeric","isNumber","isFinite","parseNumeric","defaultVal","Number","parseDecimal","precision","toFixed","calc","parsedMax","safeMax","parsedVal","safeValue","valAsFraction","valAsPercent","bar","setValue","setMax","ProgressBarEl","legacyValue","_updating","progressBars","valueAttribute","isIndeterminate","isProgressNotChanged","setIndeterminate","DEFAULT_SORT_OPTIONS","sortTable","extraOptions","$header","wrapInner","tablessortable","keyComponents","projectKey","issueNumber","PROJECT_KEY_TEMPLATE","ISSUE_NUMBER_TEMPLATE","stringRepresentation","setTableSortable","addId","addprefix","isClipped","STORAGE_PREFIX","RESPONSIVE_OPT_IN_SELECTOR","getPaneIdFromTabLink","maybeId","getPaneFromTabLink","ResponsiveAdapter","totalTabsWidth","$visibleTabs","totalVisibleTabsWidth","totalVisibleTabWidth","totalDropdownTabsWidth","tab","$tabs","totalWidth","removeResponsiveDropdown","$dropdownTriggerTab","createResponsiveDropdownTrigger","$tabsMenu","triggerMarkup","createResponsiveDropdown","$tabsContainer","dropdownMarkup","findNewVisibleTabs","tabs","parentWidth","dropdownTriggerTabWidth","hasMoreSpace","currentTotalTabWidth","moveVisibleTabs","oldVisibleTabs","$tabsParent","newVisibleTabs","lastTabIndex","$tab","moveTabToResponsiveDropdown","$tabLink","moveInvisibleTabs","tabsInDropdown","remainingSpace","tabInDropdownWidth","moveTabOutOfDropdown","switchToTab","pane","$pane","isPersistentTabGroup","$tabGroup","createPersistentKey","tabGroupId","handleTabClick","responsiveResizeHandler","tabsContainer","$dropdownTrigger","isResponsive","needsResponsive","$newVisibleTabs","visibleTabWidth","$tabsInDropdown","calculateResponsiveTabs","getResponsiveTabs","initTab","$tabMenu","link","$thisLink","targetPane","initPane","initPanes","initTabs","$tabGroups","ii","localStorage","persistentTabId","getItem","updateTabsFromLocalStorage","initWindow","thisTab","tabId","setItem","updateLocalStorageEntry","TabContainerEl","findPanes","findTabs","TabItemEl","extends","TabPaneEl","$component","findComponent","$element","CLASS_NOTIFICATION_INITIALISED","ARIA_INFO_ATTRIBUTE","ARIA_DESCRIPTION_POSTFIX","ARIA_ERROR_POSTFIX","ATTRIBUTE_NOTIFICATION_PREFIX","ATTRIBUTE_NOTIFICATION_WAIT","ATTRIBUTE_NOTIFICATION_INFO","ATTRIBUTE_NOTIFICATION_ERROR","NOTIFICATION_PRIORITY","initialiseNotification","$field","isFieldInitialised","appendDescription","prepareFieldMarkup","synchroniseNotificationDisplay","getNotificationMessage","getFieldNotificationType","messages","descriptionTemplate","updateAriaInfo","notificationType","jsonOrString","jsonArray","exception","jsonToArray","fieldNotificationType","prioritisedNotification","field","setFieldSpinner","appendErrorMessages","labels","getMessageContainer","$ariaTarget","entries","conditionallyGetFieldTarget","previousErrors","errorMessageTemplate","isSpinnerVisible","isSpinnerForFieldAlreadyExisting","deprecationLogger","ATTRIBUTE_RESERVED_ARGUMENTS","validators","validatorRegister","validatorFunction","triggerSelector","reservedArgument","validatorArguments","isReserved","getReservedArgument","validator","validatorTrigger","minMaxLength","fieldValueLength","fieldIsEmpty","minlength","maxlength","exactlengthMessage","makeMessage","invalidate","minlengthMessage","maxlengthMessage","validate","isPasswordField","matchesRegex","patternMessage","requiredMessage","minOrMax","validNumberMessage","fieldValue","minValue","maxValue","accessorFunction","customTokens","defaultMessage","pluginI18nMessages","messageTokens","formattingArguments","customMessageUnformatted","AJS","thisFieldValue","matchingField","matchingFieldValue","matchingFieldMessage","doesNotContainMessage","dateFormatSymbolic","dateFormatMessage","symbolRegexMap","dateFormatSymbolArray","dateFormatRegexString","dateSymbol","isRecognisedSymbol","dateFormatRegex","amountChecked","aboveMin","belowMax","belowMinMessage","aboveMaxMessage","exactlength","matchingfield","doesnotcontain","validnumber","dateformat","minchecked","maxchecked","ATTRIBUTE_VALIDATION_OPTION_PREFIX","ATTRIBUTE_FIELD_STATE","INVALID","VALID","VALIDATING","UNVALIDATED","CLASS_VALIDATION_INITIALISED","EVENT_FIELD_STATE_CHANGED","initValidation","keyUpTimer","triggerStopTypingEvent","bindStopTypingEvent","validateWhen","getValidationOption","watchedFieldID","elementsToWatch","validationTriggeredHandler","bindValidationEvent","bindFieldEvents","changeFieldState","setFieldNotification","getDisplayField","clearFieldMessages","validatorsToRun","callList","getValidators","getActivatedValidators","deferreds","allDeferreds","validatorIndex","validatorContext","validatorDeferred","createArgumentAccessorFunction","createValidatorContext","runValidatorsAndGetDeferred","fieldValidators","startValidating","optionValue","$displayField","stateToNotificationTypeMap","getFieldState","showSpinnerIfSlow","spinnerWasVisible","removeFieldNotification","removeIconOnlyNotifications","newString","previousString","previousMessage","newMessages","displayFieldID","delaySubmitUntilStateChange","$form","getFieldsInFormWithState","formState","$fieldCollection","$fields","stateNames","containsInvalidState","containsUnvalidatedState","containsValidatingState","getFormStateName","$unvalidatedElements","validateUnvalidatedFields","$firstInvalidField","selectFirstInvalid","validSubmitEvent","deprecatedDebounce","wait","Header","$secondaryNav","menuItems","$moreMenu","rightMostNavItemIndex","$applicationLogo","moreMenuWidth","primaryButtonsWidth","$headerFind","_resizeHandler","constructResponsiveDropdown","$logoImg","calculateAvailableWidth","showResponsiveDropdown","hideResponsiveDropdown","remainingWidth","availableWidth","showAll","newRightMostNavItemIndex","moveToResponsiveDropdown","moveOutOfResponsiveDropdown","moreNavItemEl","dropdownEl","dropdownSectionEl","createTriggerAndAssociate","numItems","$moreDropdown","leftMostIndexToMove","rightMostIndexToMove","$navItem","$navItemTrigger","$navItemDropdown","moreDropdownSectionEl","moreDropdownItemEl","extraClasses","cls","startsWith","originalItem","newItem","_header","findAndCreateHeaders","createHeader","responsiveheader","auiHeader","makeConfig","dateText","makeDefaultPopupController","datePickerUUID","popup","popupContents","parentPopup","isTrackingDatePickerFocus","handleDatePickerFocus","$eventTarget","isTargetInput","isTargetPopup","hideDatePicker","handleFieldBlur","handleFieldFocus","showDatePicker","calendarContainerSelector","getPopupContents","makePopup","horizontalAlignment","popupInlineDialogElement","calculateHorizontalAlignment","_datePickerPopup","handleChangeMonthYear","getCalendarNode","destroyPolyfill","createPolyfill","initPolyfill","datePicker","getField","getUUID","calendar","handleFieldUpdate","originalPlaceholder","originalType","attributeHandler","withCalendar","destroyCalendar","setMin","languageCode","DatePicker","localisations","i18nConfig","baseConfig","initCalendar","hint","$hint","mutationsList","baseOptions","browserDoesNotSupportDateField","browserSupportsDateField","shouldOverrideBrowserDefault","overrideBrowserDefault","reconfigure","newOptions","CalendarWidget","calendarNode","$result","supportsDateField","datepickerUI","makePlugin","WidgetConstructor","picker","NO_VALUE","NO_ENTRIES","RESTFUL_TABLE","ROW","READ_ONLY","ACTIVE","ALLOW_HOVER","FOCUSED","MOVEABLE","DISABLED","SUBMIT","CANCEL","EDIT_ROW","CREATE","DRAG_HANDLE","ORDER","EDITABLE","STATUS","ENABLED_SUBMIT","ROW_VIEW","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","SPINNER_SELECTOR","appendStatusSpinner","classNames","removeStatusSpinner","_event","dataKeys","isCreateRow","allowReorder","delegateEvents","isUpdateMode","_modelClass","fieldFocusSelector","focusUpdated","submit","_submitStarted","_submitFinished","defaultColumnRenderer","allowEdit","renderDragHandle","_handleKeyUpEvent","_cancel","submitting","showLoading","hideLoading","_focus","$focus","$error","$replacementSubmit","$submit","$placeholderSubmit","hasUpdates","mapSubmitParams","changedAttributes","save","toJSON","errors","renderErrors","silent","renderError","renderData","contents","inputAriaLabel","createView","editView","renderOperations","$operations","accesskey","submitAccessKey","cancelAccessKey","eventRoot","triggerEvt","triggerEvtForInst","EntryModel","sync","oldError","_serverErrorHandler","syncModel","responseText","isNew","contentType","changed","isEqual","isEmpty","addExpand","ajaxOptions","allowDelete","deleteConfirmationCallback","unfocus","edit","$opsCell","$throbberCell","fieldName","readView","$editableRegion","emptyText","RestfulTable","_getDefaultOptions","wrapAll","$thead","$theadRow","$tbody","showGlobalLoading","_models","_createCollection","_rowClass","views","editRows","focusedRow","elt","$td","borderRight","cachedHeight","getColumnCount","visibility","getRowFromElement","nextItem","prevItem","move","allowCreate","_createRow","editRow","resources","addPosition","createPosition","addRow","$create","_applyFocusCoordinator","autoFocus","getRows","removeRow","fetchInitialResources","createRequest","afterElement","reverseOrder","responseData","Collection","comparator","tableRows","sortBy","hideGlobalLoading","renderRows","showNoEntriesMsg","$loading","loadingMsg","_renderRow","removeNoEntriesMsg","getModels","getTable","getTableBody","getCreateRow","staticFieldCount","$noEntries","noEntriesMsg","$rows","isRowBeingEdited","isBeingEdited","hasFocusBound","Row","_removeEditRow","_shiftFocusAfterEdit","_saveEditRowOnBlur","dismissEditRows","els","EditRow","ClassNames","CustomCreateView","CustomEditView","CustomReadView","DataKeys","Events","DocumentTouch","replaceAttributeForID","$clone","deduplicateIDs","uidFunction","setCorrespondingTriggersID","sidebarOffset","sidebar","Sidebar","$wrapper","_previousScrollTop","_previousViewportHeight","_previousViewportWidth","_previousOffsetTop","submenus","SubmenuManager","collapsedTriggersSelector","constructSubmenu","lazilyInitializeSubmenus","hasTouch","mq","matchMedia","testMediaQuery","mediaQuery","pendingReflow","onScrollResizeReflow","requestAnimationFrame","reflow","isAnimated","isViewportNarrow","toggleShortcutHandler","isNormalSquareBracket","isNormalTab","isContentEditable","isShiftTab","isFirstSubmenuItem","$submenuDialog","isLastSubmenuItem","focusFirstItemOfInlineDialog","$inlineDialog","_remove","inlineDialogSelector","tooltipOptions","sidebarIsExpanded","toggleSelector","submenuInlineDialog","getSubmenuInlineDialog","$submenuInlineDialog","hideAllSubmenus","initializeHandlers","constructAllSubmenus","namespaceEvents","getAllSubmenuDialogs","inlineDialog","getSubmenu","inlineDialogId","allSubmenuDialogs","inlineDialog2","inlineDialogClass","didOtherLayerOpened","didNestedInlineDialogOpened","SUBMENU_INLINE_DIALOG_CONTENTS_HTML","$submenu","cloneExpander","inlineDialogShowHandler","inlineDialogHideHandler","addHandlersToSubmenuInlineDialog","namespacedEvents","setHeight","viewportHeight","headerHeight","visibleHeaderHeight","setTopPosition","setPosition","setLeftPosition","setCollapsedState","viewportWidth","collapsed","expanded","narrow","wide","_expand","_collapse","collapseState","oldSize","startEvent","submenuTriggersSelector","responsiveReflow","isInitialPageLoad","isTouch","isTrackpadBounce","_previousScrollLeft","isFlyOut","tooltipClassName","submenu","sidebarSubmenuDeprecationLogger","submenuHeadingHeight","isShowing","isSubmenuVisible","showSubmenu","moveSubmenuToInlineDialog","restoreSubmenu","getVisibleSubmenus","ZINDEX_DIALOG_1","createPopup","closeOnOutsideClick","keypressListener","highestZIndex","currentPopup","applySize","_applySize","marginTop","marginLeft","blanket","focusDialog","popupBlanket","Dialog","Button","onclick","buttonpanel","addButtonPanel","_onclick","dialog","Link","itemMove","leftOrRight","step","dtarget","curtab","itemRemove","moveUp","moveLeft","moveDown","moveRight","Panel","panelButtonId","panel","onblur","onselect","ontabchange","setPadding","recalcSize","Page","curpage","buttonHeight","dialogComponentsHeight","addPanel","addHeader","addButton","addLink","gotoPanel","getCurrentPanel","addSubmit","addCancel","addPage","nextPage","prevPage","gotoPage","getPanel","pageorpanelId","panelId","pageid","getPage","pageorpanel","coll","nameExp","selectorExp","queryRE","justtitle","name2","title2","id2","justtitle2","pages","updateHeight","maxDialogHeight","MIN_DIALOG_VERTICAL_BUFFER","isMaximised","getCurPanel","getCurPanelButton","alternatveName","isMac","platform","isSafari","multiCharRegex","triggerClickEvent","initMouseEvent","whenIType","boundKeyCombos","executor","keypressHandler","fire","defaultPreventionHandler","bindKeys","keyCombo","keysArr","keyString","currModifiers","modifierMatch","multiCharMatch","keyComboArrayFromString","hasUnprintables","bindKeyCombo","appendKeyComboInstructions","isFirst","openParenthesis","closeParenthesis","workaroundJaws","makeShortcut","addShortcutsToTitle","keyCombos","existingCombos","kbShortcutAppended","kbShortcutAppendedScreenReader","isFirstShortcut","isFirstShortcutScreenReader","originalAriaLabel","existingCombo","removeShortcutsFromTitle","shortcuts","selectorsWithTitlesModified","makeMoveToFunction","getNewFocus","focusedClass","wrapAround","escToCancel","$focusedElem","moveToOptions","moveToNextItem","moveToPrevItem","goTo","location","followLink","execute","command","moveToAndClick","moveToAndFocus","$elem","or","fromJSON","switchCtrlToMetaOnMac","operation","op","param","shortcutList","shortcutString","newShortcut","load","InlineDialog2","debounceImmediate","formValidation","_addID","contextPath"],"sourceRoot":""}
\No newline at end of file