diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 98b0b61..0000000 --- a/Gruntfile.js +++ /dev/null @@ -1,195 +0,0 @@ -function getFiles() { - //directories - var - lib = 'src/', - forms = lib+'editable-form/', - inputs = lib+'inputs/', - containers = lib+'containers/'; - - //config for Bootstrap 5 only - var config = { - bootstrap5: { - filePrefix: 'bootstrap', //to have bootstrap-editable.js instead of bootstrap5-editable - form: [forms+'editable-form-bootstrap5.js'], - container: [containers+'editable-popover5.js'], - inputs: [ - // Bootstrap-datepicker now loaded from npm, not bundled - inputs+'date/date.js', - inputs+'date/datefield.js' - ], - css: [ - // Bootstrap-datepicker CSS now loaded from npm, not bundled - ] - } - }; - - //common js files - var js = [ - forms+'editable-form.js', - forms+'editable-form-utils.js', - containers+'editable-container.js', - containers+'editable-inline.js', - lib+'element/editable-element.js', - inputs+'abstract.js', - inputs+'list.js', - inputs+'text.js', - inputs+'textarea.js', - inputs+'select.js', - inputs+'select2/select2.js', - inputs+'checklist.js', - inputs+'html5types.js' - ]; - - //common css files - var css = [ - forms+'editable-form.css', - containers+'editable-container.css', - lib+'element/editable-element.css' - ]; - - //create 'concat' and 'uglify' tasks - var task, folder, dest, concat_files = {}, min_files = {}; - for(var k in config) { - folder = '<%= dist %>/'+k+'-editable/'; - var prefix = config[k].filePrefix || k; - - //js - task = k+'_js'; - dest = folder+'js/'+prefix+'-editable'+ (k === 'jquery' ? '-poshytip' : ''); - concat_files[task] = { - src: js.concat(config[k].form).concat(config[k].container).concat(config[k].inputs), - dest: dest+'.js' - }; - min_files[task] = { - src: ['<%= concat.'+task+'.dest %>'], - dest: dest + '.min.js' - }; - - //css - concat_files[k+'_css'] = { - src: css.concat(config[k].css), - dest: folder+'css/'+prefix+'-editable.css' - }; - } - - return {concat_files: concat_files, min_files: min_files}; - -} - -/*global module:false*/ -module.exports = function(grunt) { - - grunt.util.linefeed = '\n'; - - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-qunit'); - grunt.loadNpmTasks('grunt-contrib-connect'); - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-copy'); - //grunt.loadNpmTasks('grunt-contrib-requirejs'); - - //module for testing - var module = ''; -// module = '&module=textarea'; -//module = '&module=select'; -//module = '&module=text'; - - //get js and css for different builds - var files = getFiles(); - - var banner = '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> \n' + - '* <%= pkg.description %>\n' + - '* <%= pkg.homepage %>\n' + - '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + - ' Licensed <%= _.map(pkg.licenses, "type").join(", ") %> */\n'; - - files.concat_files.options = {banner: banner}; - files.min_files.options = {banner: banner}; - - - // Project configuration. - grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), - dist: 'dist', - - // clean: ['<%= dist %>'], - - concat: files.concat_files, - - uglify: files.min_files, - - qunit: { - bootstrap5: { - options: { - urls: [ - 'http://localhost:8000/test/index.html?f=bs5&c=popup'+module, - 'http://localhost:8000/test/index.html?f=bs5&c=inline'+module - ] - } - } - }, - - connect: { - server: { - port: 8000, - base: '.' - } - }, - - jshint: { - options: { - esversion: 6, - curly: true, - eqeqeq: true, - immed: true, - latedef: true, - newcap: true, - noarg: true, - sub: true, - undef: true, - boss: true, - eqnull: true, - browser: true, - evil: false, - globals: { - jQuery: true, - console: true - }, - }, - js: [ 'Gruntfile.js', - 'src/editable-form/*.js', - 'src/containers/*.js', - 'src/element/*.js', - 'src/inputs/*.js', - 'src/inputs/date/*.js' - ] - }, - copy: { - dist: { - files: [ - //image - {expand: true, flatten: true, dest: '<%= dist %>/bootstrap5-editable/img/', src: 'src/img/*'}, - //licences - {expand: true, flatten: true, dest: '<%= dist %>/', src: ['LICENSE-MIT', 'README.md', 'CHANGELOG.txt']} - ] - } - } - }); - - //test task - grunt.registerTask('test', ['jshint', 'connect', 'qunit:bootstrap5']); - - // Default task. - grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'copy']); - - // alive server - grunt.registerTask('server', 'connect:server:keepalive'); - - // build - grunt.registerTask('build', ['jshint', 'concat', 'uglify', 'copy']); - - //to run particular task use ":", e.g. copy:libs -}; - diff --git a/dist/240c0c6464de0b4bf116.png b/demo/240c0c6464de0b4bf116.png similarity index 100% rename from dist/240c0c6464de0b4bf116.png rename to demo/240c0c6464de0b4bf116.png diff --git a/dist/56d4c7ce2d3591a02107.gif b/demo/56d4c7ce2d3591a02107.gif similarity index 100% rename from dist/56d4c7ce2d3591a02107.gif rename to demo/56d4c7ce2d3591a02107.gif diff --git a/demo/demo.js b/demo/demo.js index dbf8543..45528b9 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -1,7 +1,9 @@ import $ from 'jquery'; -// Ensure jQuery is available globally before any other imports +// Ensure jQuery is available globally before importing x-editable window.$ = window.jQuery = $; -global.$ = global.jQuery = $; +if (typeof global !== 'undefined') { + global.$ = global.jQuery = $; +} import "bootstrap" import "bootstrap/dist/css/bootstrap.min.css" @@ -11,15 +13,15 @@ import "bootstrap-icons/font/bootstrap-icons.min.css" import "bootstrap-datepicker"; import "bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"; - -// Import the editable functionality (attaches to jQuery.fn) - using built distribution -// When using built files, you need to include select2 separately for select2 inputs +// Import select2 before x-editable import "select2"; import "select2/dist/css/select2.min.css"; -import '../dist/bootstrap5-editable/js/bootstrap-editable.min.js' -import '../dist/bootstrap5-editable/css/bootstrap-editable.css' -$.fn.editable.defaults.mode = 'inline'; +// Import the editable functionality - should be synchronous +import 'dist/bootstrap5-editable/js/bootstrap-editable.js' +import 'dist/bootstrap5-editable/css/bootstrap-editable.css' + +// $.fn.editable.defaults.mode = 'inline'; $(function() { diff --git a/demo/dist/240c0c6464de0b4bf116.png b/demo/dist/240c0c6464de0b4bf116.png new file mode 100644 index 0000000..580b52a Binary files /dev/null and b/demo/dist/240c0c6464de0b4bf116.png differ diff --git a/demo/dist/56d4c7ce2d3591a02107.gif b/demo/dist/56d4c7ce2d3591a02107.gif new file mode 100644 index 0000000..5b33f7e Binary files /dev/null and b/demo/dist/56d4c7ce2d3591a02107.gif differ diff --git a/demo/dist/app.js b/demo/dist/app.js new file mode 100644 index 0000000..157a531 --- /dev/null +++ b/demo/dist/app.js @@ -0,0 +1,1307 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./demo/demo.js": +/*!**********************!*\ + !*** ./demo/demo.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bootstrap */ \"./node_modules/bootstrap/dist/js/bootstrap.esm.js\");\n/* harmony import */ var bootstrap_dist_css_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bootstrap/dist/css/bootstrap.min.css */ \"./node_modules/bootstrap/dist/css/bootstrap.min.css\");\n/* harmony import */ var bootstrap_icons_font_bootstrap_icons_min_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! bootstrap-icons/font/bootstrap-icons.min.css */ \"./node_modules/bootstrap-icons/font/bootstrap-icons.min.css\");\n/* harmony import */ var bootstrap_datepicker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! bootstrap-datepicker */ \"./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js\");\n/* harmony import */ var bootstrap_datepicker__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(bootstrap_datepicker__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var bootstrap_datepicker_dist_css_bootstrap_datepicker_min_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css */ \"./node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css\");\n/* harmony import */ var select2__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! select2 */ \"./node_modules/select2/dist/js/select2.js\");\n/* harmony import */ var select2__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(select2__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var select2_dist_css_select2_min_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! select2/dist/css/select2.min.css */ \"./node_modules/select2/dist/css/select2.min.css\");\n/* harmony import */ var dist_bootstrap5_editable_js_bootstrap_editable_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! dist/bootstrap5-editable/js/bootstrap-editable.js */ \"./dist/bootstrap5-editable/js/bootstrap-editable.js\");\n/* harmony import */ var dist_bootstrap5_editable_js_bootstrap_editable_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(dist_bootstrap5_editable_js_bootstrap_editable_js__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var dist_bootstrap5_editable_css_bootstrap_editable_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! dist/bootstrap5-editable/css/bootstrap-editable.css */ \"./dist/bootstrap5-editable/css/bootstrap-editable.css\");\n\n// Ensure jQuery is available globally before importing x-editable\nwindow.$ = window.jQuery = (jquery__WEBPACK_IMPORTED_MODULE_0___default());\nif (typeof __webpack_require__.g !== 'undefined') {\n __webpack_require__.g.$ = __webpack_require__.g.jQuery = (jquery__WEBPACK_IMPORTED_MODULE_0___default());\n}\n\n\n\n\n\n// Import bootstrap-datepicker for date inputs\n\n\n\n// Import select2 before x-editable\n\n\n\n// Import the editable functionality - should be synchronous\n\n\n\n// $.fn.editable.defaults.mode = 'inline';\n\njquery__WEBPACK_IMPORTED_MODULE_0___default()(function() {\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#yes-no-switch').editable({\n type: 'select',\n url: 'demo/demo.php', // URL to send the POST request\n source: 'demo/demo.php', // URL to fetch select options\n value: 1,\n success: function(response, newValue) {\n // Handle success\n },\n error: function(response) {\n // Handle error\n }\n });\n\n\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#yes-no-switch-json').editable({\n type: 'select',\n url: 'demo/demo.php', // URL to send the POST request\n source: [ // Static array instead of URL\n {value: 0, text: \"No\"},\n {value: 1, text: \"Yes\"},\n {value: 2, text: \"Maybe\"}\n ],\n value: 1,\n success: function(response, newValue) {\n // Handle success\n },\n error: function(response) {\n // Handle error\n }\n });\n\n const initialDateValue = new Date().toISOString().split('T')[0];\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#datepicker').editable({\n type: 'date',\n url: 'demo/demo.php', // URL to send the POST request\n value: initialDateValue, // Set to current date (YYYY-MM-DD)\n format: 'yyyy-mm-dd', // Date format\n viewformat: 'dd/mm/yyyy', // How the user sees it\n datepicker: {\n weekStart: 1,\n autoclose: true,\n todayHighlight: true\n },\n success: (response, newValue)=> {\n // Handle success\n },\n error: (response) => {\n // Handle error\n }\n });\n\n // Select2 functionality (now bundled with x-editable)\n \n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#select2-test').editable({\n type: 'select2',\n url: 'demo/demo.php',\n source: [\n {id: 'us', text: 'United States'},\n {id: 'gb', text: 'Great Britain'},\n {id: 'ru', text: 'Russia'},\n {id: 'de', text: 'Germany'},\n {id: 'fr', text: 'France'},\n {id: 'es', text: 'Spain'},\n {id: 'it', text: 'Italy'}\n ],\n value: 'us',\n savenochange: true, // Allow saving even when value hasn't changed\n select2: {\n placeholder: 'Select Country',\n allowClear: true\n },\n success: function(response, newValue) {\n // Handle success\n },\n error: function(response) {\n // Handle error\n }\n });\n\n})\n\n\n//# sourceURL=webpack://x-editable-bootstrap5/./demo/demo.js?\n}"); + +/***/ }), + +/***/ "./dist/bootstrap5-editable/css/bootstrap-editable.css": +/*!*************************************************************!*\ + !*** ./dist/bootstrap5-editable/css/bootstrap-editable.css ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_bootstrap_editable_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js!./bootstrap-editable.css */ \"./node_modules/css-loader/dist/cjs.js!./dist/bootstrap5-editable/css/bootstrap-editable.css\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\noptions.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_bootstrap_editable_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_bootstrap_editable_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _node_modules_css_loader_dist_cjs_js_bootstrap_editable_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _node_modules_css_loader_dist_cjs_js_bootstrap_editable_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n\n\n//# sourceURL=webpack://x-editable-bootstrap5/./dist/bootstrap5-editable/css/bootstrap-editable.css?\n}"); + +/***/ }), + +/***/ "./dist/bootstrap5-editable/img/clear.png": +/*!************************************************!*\ + !*** ./dist/bootstrap5-editable/img/clear.png ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("{module.exports = __webpack_require__.p + \"240c0c6464de0b4bf116.png\";\n\n//# sourceURL=webpack://x-editable-bootstrap5/./dist/bootstrap5-editable/img/clear.png?\n}"); + +/***/ }), + +/***/ "./dist/bootstrap5-editable/img/loading.gif": +/*!**************************************************!*\ + !*** ./dist/bootstrap5-editable/img/loading.gif ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("{module.exports = __webpack_require__.p + \"56d4c7ce2d3591a02107.gif\";\n\n//# sourceURL=webpack://x-editable-bootstrap5/./dist/bootstrap5-editable/img/loading.gif?\n}"); + +/***/ }), + +/***/ "./dist/bootstrap5-editable/js/bootstrap-editable.js": +/*!***********************************************************!*\ + !*** ./dist/bootstrap5-editable/js/bootstrap-editable.js ***! + \***********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval("{/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\t//X-Editable Bootstrap 5 - CommonJS2\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"), __webpack_require__(/*! bootstrap */ \"./node_modules/bootstrap/dist/js/bootstrap.esm.js\"));\n\t//X-Editable Bootstrap 5 - AMD\n\telse // removed by dead control flow\n{}\n})(this, (__WEBPACK_EXTERNAL_MODULE_jquery__, __WEBPACK_EXTERNAL_MODULE_bootstrap__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/css-loader/dist/cjs.js!./node_modules/select2/dist/css/select2.min.css\":\n/*!*********************************************************************************************!*\\\n !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/select2/dist/css/select2.min.css ***!\n \\*********************************************************************************************/\n/***/ ((module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\neval(\"{__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/noSourceMaps.js */ \\\"./node_modules/css-loader/dist/runtime/noSourceMaps.js\\\");\\n/* harmony import */ var _css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/api.js */ \\\"./node_modules/css-loader/dist/runtime/api.js\\\");\\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\\n// Imports\\n\\n\\nvar ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\\n// Module\\n___CSS_LOADER_EXPORT___.push([module.id, `.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{background-color:transparent;border:none;font-size:1em}.select2-container[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline;list-style:none;padding:0}.select2-container .select2-selection--multiple .select2-selection__clear{background-color:transparent;border:none;font-size:1em}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;margin-left:5px;padding:0;max-width:100%;resize:none;height:18px;vertical-align:bottom;font-family:sans-serif;overflow:hidden;word-break:keep-all}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option--selectable{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;height:26px;margin-right:20px;padding-right:0px}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;padding-bottom:5px;padding-right:5px;position:relative}.select2-container--default .select2-selection--multiple.select2-selection--clearable{padding-right:25px}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;font-weight:bold;height:20px;margin-right:10px;margin-top:5px;position:absolute;right:0;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:inline-block;margin-left:5px;margin-top:5px;padding:0;padding-left:20px;position:relative;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap}.select2-container--default .select2-selection--multiple .select2-selection__choice__display{cursor:default;padding-left:2px;padding-right:5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{background-color:transparent;border:none;border-right:1px solid #aaa;border-top-left-radius:4px;border-bottom-left-radius:4px;color:#999;cursor:pointer;font-size:1em;font-weight:bold;padding:0 4px;position:absolute;left:0;top:0}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:focus{background-color:#f1f1f1;color:#333;outline:none}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice__display{padding-left:5px;padding-right:2px}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice__remove{border-left:1px solid #aaa;border-right:none;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px}.select2-container--default[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__clear{float:left;margin-left:10px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--group{padding:0}.select2-container--default .select2-results__option--disabled{color:#999}.select2-container--default .select2-results__option--selected{background-color:#ddd}.select2-container--default .select2-results__option--highlighted.select2-results__option--selectable{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;height:26px;margin-right:20px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0;padding-bottom:5px;padding-right:5px}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;display:inline-block;margin-left:5px;margin-top:5px;padding:0}.select2-container--classic .select2-selection--multiple .select2-selection__choice__display{cursor:default;padding-left:2px;padding-right:5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{background-color:transparent;border:none;border-top-left-radius:4px;border-bottom-left-radius:4px;color:#888;cursor:pointer;font-size:1em;font-weight:bold;padding:0 4px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555;outline:none}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice__display{padding-left:5px;padding-right:2px}.select2-container--classic[dir=\\\"rtl\\\"] .select2-selection--multiple .select2-selection__choice__remove{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option--group{padding:0}.select2-container--classic .select2-results__option--disabled{color:grey}.select2-container--classic .select2-results__option--highlighted.select2-results__option--selectable{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}\\n`, \\\"\\\"]);\\n// Exports\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\\n\\n\\n//# sourceURL=webpack://EditableForm/./node_modules/select2/dist/css/select2.min.css?./node_modules/css-loader/dist/cjs.js\\n}\");\n\n/***/ }),\n\n/***/ \"./node_modules/css-loader/dist/runtime/api.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/css-loader/dist/runtime/api.js ***!\n \\*****************************************************/\n/***/ ((module) => {\n\n\"use strict\";\neval(\"{\\n\\n/*\\n MIT License http://www.opensource.org/licenses/mit-license.php\\n Author Tobias Koppers @sokra\\n*/\\nmodule.exports = function (cssWithMappingToString) {\\n var list = [];\\n\\n // return the list of modules as css string\\n list.toString = function toString() {\\n return this.map(function (item) {\\n var content = \\\"\\\";\\n var needLayer = typeof item[5] !== \\\"undefined\\\";\\n if (item[4]) {\\n content += \\\"@supports (\\\".concat(item[4], \\\") {\\\");\\n }\\n if (item[2]) {\\n content += \\\"@media \\\".concat(item[2], \\\" {\\\");\\n }\\n if (needLayer) {\\n content += \\\"@layer\\\".concat(item[5].length > 0 ? \\\" \\\".concat(item[5]) : \\\"\\\", \\\" {\\\");\\n }\\n content += cssWithMappingToString(item);\\n if (needLayer) {\\n content += \\\"}\\\";\\n }\\n if (item[2]) {\\n content += \\\"}\\\";\\n }\\n if (item[4]) {\\n content += \\\"}\\\";\\n }\\n return content;\\n }).join(\\\"\\\");\\n };\\n\\n // import a list of modules into the list\\n list.i = function i(modules, media, dedupe, supports, layer) {\\n if (typeof modules === \\\"string\\\") {\\n modules = [[null, modules, undefined]];\\n }\\n var alreadyImportedModules = {};\\n if (dedupe) {\\n for (var k = 0; k < this.length; k++) {\\n var id = this[k][0];\\n if (id != null) {\\n alreadyImportedModules[id] = true;\\n }\\n }\\n }\\n for (var _k = 0; _k < modules.length; _k++) {\\n var item = [].concat(modules[_k]);\\n if (dedupe && alreadyImportedModules[item[0]]) {\\n continue;\\n }\\n if (typeof layer !== \\\"undefined\\\") {\\n if (typeof item[5] === \\\"undefined\\\") {\\n item[5] = layer;\\n } else {\\n item[1] = \\\"@layer\\\".concat(item[5].length > 0 ? \\\" \\\".concat(item[5]) : \\\"\\\", \\\" {\\\").concat(item[1], \\\"}\\\");\\n item[5] = layer;\\n }\\n }\\n if (media) {\\n if (!item[2]) {\\n item[2] = media;\\n } else {\\n item[1] = \\\"@media \\\".concat(item[2], \\\" {\\\").concat(item[1], \\\"}\\\");\\n item[2] = media;\\n }\\n }\\n if (supports) {\\n if (!item[4]) {\\n item[4] = \\\"\\\".concat(supports);\\n } else {\\n item[1] = \\\"@supports (\\\".concat(item[4], \\\") {\\\").concat(item[1], \\\"}\\\");\\n item[4] = supports;\\n }\\n }\\n list.push(item);\\n }\\n };\\n return list;\\n};\\n\\n//# sourceURL=webpack://EditableForm/./node_modules/css-loader/dist/runtime/api.js?\\n}\");\n\n/***/ }),\n\n/***/ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/css-loader/dist/runtime/noSourceMaps.js ***!\n \\**************************************************************/\n/***/ ((module) => {\n\n\"use strict\";\neval(\"{\\n\\nmodule.exports = function (i) {\\n return i[1];\\n};\\n\\n//# sourceURL=webpack://EditableForm/./node_modules/css-loader/dist/runtime/noSourceMaps.js?\\n}\");\n\n/***/ }),\n\n/***/ \"./node_modules/select2/dist/css/select2.min.css\":\n/*!*******************************************************!*\\\n !*** ./node_modules/select2/dist/css/select2.min.css ***!\n \\*******************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\neval(\"{__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \\\"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\\\");\\n/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/styleDomAPI.js */ \\\"./node_modules/style-loader/dist/runtime/styleDomAPI.js\\\");\\n/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/insertBySelector.js */ \\\"./node_modules/style-loader/dist/runtime/insertBySelector.js\\\");\\n/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \\\"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\\\");\\n/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\\n/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/insertStyleElement.js */ \\\"./node_modules/style-loader/dist/runtime/insertStyleElement.js\\\");\\n/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/styleTagTransform.js */ \\\"./node_modules/style-loader/dist/runtime/styleTagTransform.js\\\");\\n/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var _css_loader_dist_cjs_js_select2_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../css-loader/dist/cjs.js!./select2.min.css */ \\\"./node_modules/css-loader/dist/cjs.js!./node_modules/select2/dist/css/select2.min.css\\\");\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\nvar options = {};\\n\\noptions.styleTagTransform = (_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\\noptions.setAttributes = (_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\\noptions.insert = _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \\\"head\\\");\\noptions.domAPI = (_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\\noptions.insertStyleElement = (_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\\n\\nvar update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_select2_min_css__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"], options);\\n\\n\\n\\n\\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_select2_min_css__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"] && _css_loader_dist_cjs_js_select2_min_css__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"].locals ? _css_loader_dist_cjs_js_select2_min_css__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"].locals : undefined);\\n\\n\\n//# sourceURL=webpack://EditableForm/./node_modules/select2/dist/css/select2.min.css?\\n}\");\n\n/***/ }),\n\n/***/ \"./node_modules/select2/dist/js/select2.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/select2/dist/js/select2.js ***!\n \\*************************************************/\n/***/ ((module, exports, __webpack_require__) => {\n\neval(\"{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\\n * Select2 4.1.0-rc.0\\n * https://select2.github.io\\n *\\n * Released under the MIT license\\n * https://github.com/select2/select2/blob/master/LICENSE.md\\n */\\n;(function (factory) {\\n if (true) {\\n // AMD. Register as an anonymous module.\\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ \\\"jquery\\\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\\n\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\\n\\t\\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\\n\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n } else // removed by dead control flow\\n{}\\n} (function (jQuery) {\\n // This is needed so we can catch the AMD loader configuration and use it\\n // The inner file should be wrapped (by `banner.start.js`) in a function that\\n // returns the AMD loader references.\\n var S2 =(function () {\\n // Restore the Select2 AMD loader so it can be used\\n // Needed mostly in the language files, where the loader is not inserted\\n if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\\n var S2 = jQuery.fn.select2.amd;\\n }\\nvar S2;(function () { if (!S2 || !S2.requirejs) {\\nif (!S2) { S2 = {}; } else { require = S2; }\\n/**\\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\\n */\\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\\n//be followed.\\n/*global setTimeout: false */\\n\\nvar requirejs, require, define;\\n(function (undef) {\\n var main, req, makeMap, handlers,\\n defined = {},\\n waiting = {},\\n config = {},\\n defining = {},\\n hasOwn = Object.prototype.hasOwnProperty,\\n aps = [].slice,\\n jsSuffixRegExp = /\\\\.js$/;\\n\\n function hasProp(obj, prop) {\\n return hasOwn.call(obj, prop);\\n }\\n\\n /**\\n * Given a relative module name, like ./something, normalize it to\\n * a real name that can be mapped to a path.\\n * @param {String} name the relative name\\n * @param {String} baseName a real name that the name arg is relative\\n * to.\\n * @returns {String} normalized name\\n */\\n function normalize(name, baseName) {\\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\\n foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\\n baseParts = baseName && baseName.split(\\\"/\\\"),\\n map = config.map,\\n starMap = (map && map['*']) || {};\\n\\n //Adjust any relative paths.\\n if (name) {\\n name = name.split('/');\\n lastIndex = name.length - 1;\\n\\n // If wanting node ID compatibility, strip .js from end\\n // of IDs. Have to do this here, and not in nameToUrl\\n // because node allows either .js or non .js to map\\n // to same file.\\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\\n }\\n\\n // Starts with a '.' so need the baseName\\n if (name[0].charAt(0) === '.' && baseParts) {\\n //Convert baseName to array, and lop off the last part,\\n //so that . matches that 'directory' and not name of the baseName's\\n //module. For instance, baseName of 'one/two/three', maps to\\n //'one/two/three.js', but we want the directory, 'one/two' for\\n //this normalization.\\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\\n name = normalizedBaseParts.concat(name);\\n }\\n\\n //start trimDots\\n for (i = 0; i < name.length; i++) {\\n part = name[i];\\n if (part === '.') {\\n name.splice(i, 1);\\n i -= 1;\\n } else if (part === '..') {\\n // If at the start, or previous value is still ..,\\n // keep them so that when converted to a path it may\\n // still work when converted to a path, even though\\n // as an ID it is less than ideal. In larger point\\n // releases, may be better to just kick out an error.\\n if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\\n continue;\\n } else if (i > 0) {\\n name.splice(i - 1, 2);\\n i -= 2;\\n }\\n }\\n }\\n //end trimDots\\n\\n name = name.join('/');\\n }\\n\\n //Apply map config if available.\\n if ((baseParts || starMap) && map) {\\n nameParts = name.split('/');\\n\\n for (i = nameParts.length; i > 0; i -= 1) {\\n nameSegment = nameParts.slice(0, i).join(\\\"/\\\");\\n\\n if (baseParts) {\\n //Find the longest baseName segment match in the config.\\n //So, do joins on the biggest to smallest lengths of baseParts.\\n for (j = baseParts.length; j > 0; j -= 1) {\\n mapValue = map[baseParts.slice(0, j).join('/')];\\n\\n //baseName segment has config, find if it has one for\\n //this name.\\n if (mapValue) {\\n mapValue = mapValue[nameSegment];\\n if (mapValue) {\\n //Match, update name to the new value.\\n foundMap = mapValue;\\n foundI = i;\\n break;\\n }\\n }\\n }\\n }\\n\\n if (foundMap) {\\n break;\\n }\\n\\n //Check for a star map match, but just hold on to it,\\n //if there is a shorter segment match later in a matching\\n //config, then favor over this star map.\\n if (!foundStarMap && starMap && starMap[nameSegment]) {\\n foundStarMap = starMap[nameSegment];\\n starI = i;\\n }\\n }\\n\\n if (!foundMap && foundStarMap) {\\n foundMap = foundStarMap;\\n foundI = starI;\\n }\\n\\n if (foundMap) {\\n nameParts.splice(0, foundI, foundMap);\\n name = nameParts.join('/');\\n }\\n }\\n\\n return name;\\n }\\n\\n function makeRequire(relName, forceSync) {\\n return function () {\\n //A version of a require function that passes a moduleName\\n //value for items that may need to\\n //look up paths relative to the moduleName\\n var args = aps.call(arguments, 0);\\n\\n //If first arg is not require('string'), and there is only\\n //one arg, it is the array form without a callback. Insert\\n //a null so that the following concat is correct.\\n if (typeof args[0] !== 'string' && args.length === 1) {\\n args.push(null);\\n }\\n return req.apply(undef, args.concat([relName, forceSync]));\\n };\\n }\\n\\n function makeNormalize(relName) {\\n return function (name) {\\n return normalize(name, relName);\\n };\\n }\\n\\n function makeLoad(depName) {\\n return function (value) {\\n defined[depName] = value;\\n };\\n }\\n\\n function callDep(name) {\\n if (hasProp(waiting, name)) {\\n var args = waiting[name];\\n delete waiting[name];\\n defining[name] = true;\\n main.apply(undef, args);\\n }\\n\\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\\n throw new Error('No ' + name);\\n }\\n return defined[name];\\n }\\n\\n //Turns a plugin!resource to [plugin, resource]\\n //with the plugin being undefined if the name\\n //did not have a plugin prefix.\\n function splitPrefix(name) {\\n var prefix,\\n index = name ? name.indexOf('!') : -1;\\n if (index > -1) {\\n prefix = name.substring(0, index);\\n name = name.substring(index + 1, name.length);\\n }\\n return [prefix, name];\\n }\\n\\n //Creates a parts array for a relName where first part is plugin ID,\\n //second part is resource ID. Assumes relName has already been normalized.\\n function makeRelParts(relName) {\\n return relName ? splitPrefix(relName) : [];\\n }\\n\\n /**\\n * Makes a name map, normalizing the name, and using a plugin\\n * for normalization if necessary. Grabs a ref to plugin\\n * too, as an optimization.\\n */\\n makeMap = function (name, relParts) {\\n var plugin,\\n parts = splitPrefix(name),\\n prefix = parts[0],\\n relResourceName = relParts[1];\\n\\n name = parts[1];\\n\\n if (prefix) {\\n prefix = normalize(prefix, relResourceName);\\n plugin = callDep(prefix);\\n }\\n\\n //Normalize according\\n if (prefix) {\\n if (plugin && plugin.normalize) {\\n name = plugin.normalize(name, makeNormalize(relResourceName));\\n } else {\\n name = normalize(name, relResourceName);\\n }\\n } else {\\n name = normalize(name, relResourceName);\\n parts = splitPrefix(name);\\n prefix = parts[0];\\n name = parts[1];\\n if (prefix) {\\n plugin = callDep(prefix);\\n }\\n }\\n\\n //Using ridiculous property names for space reasons\\n return {\\n f: prefix ? prefix + '!' + name : name, //fullName\\n n: name,\\n pr: prefix,\\n p: plugin\\n };\\n };\\n\\n function makeConfig(name) {\\n return function () {\\n return (config && config.config && config.config[name]) || {};\\n };\\n }\\n\\n handlers = {\\n require: function (name) {\\n return makeRequire(name);\\n },\\n exports: function (name) {\\n var e = defined[name];\\n if (typeof e !== 'undefined') {\\n return e;\\n } else {\\n return (defined[name] = {});\\n }\\n },\\n module: function (name) {\\n return {\\n id: name,\\n uri: '',\\n exports: defined[name],\\n config: makeConfig(name)\\n };\\n }\\n };\\n\\n main = function (name, deps, callback, relName) {\\n var cjsModule, depName, ret, map, i, relParts,\\n args = [],\\n callbackType = typeof callback,\\n usingExports;\\n\\n //Use name if no relName\\n relName = relName || name;\\n relParts = makeRelParts(relName);\\n\\n //Call the callback to define the module, if necessary.\\n if (callbackType === 'undefined' || callbackType === 'function') {\\n //Pull out the defined dependencies and pass the ordered\\n //values to the callback.\\n //Default to [require, exports, module] if no deps\\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\\n for (i = 0; i < deps.length; i += 1) {\\n map = makeMap(deps[i], relParts);\\n depName = map.f;\\n\\n //Fast path CommonJS standard dependencies.\\n if (depName === \\\"require\\\") {\\n args[i] = handlers.require(name);\\n } else if (depName === \\\"exports\\\") {\\n //CommonJS module spec 1.1\\n args[i] = handlers.exports(name);\\n usingExports = true;\\n } else if (depName === \\\"module\\\") {\\n //CommonJS module spec 1.1\\n cjsModule = args[i] = handlers.module(name);\\n } else if (hasProp(defined, depName) ||\\n hasProp(waiting, depName) ||\\n hasProp(defining, depName)) {\\n args[i] = callDep(depName);\\n } else if (map.p) {\\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\\n args[i] = defined[depName];\\n } else {\\n throw new Error(name + ' missing ' + depName);\\n }\\n }\\n\\n ret = callback ? callback.apply(defined[name], args) : undefined;\\n\\n if (name) {\\n //If setting exports via \\\"module\\\" is in play,\\n //favor that over return value and exports. After that,\\n //favor a non-undefined return value over exports use.\\n if (cjsModule && cjsModule.exports !== undef &&\\n cjsModule.exports !== defined[name]) {\\n defined[name] = cjsModule.exports;\\n } else if (ret !== undef || !usingExports) {\\n //Use the return value from the function.\\n defined[name] = ret;\\n }\\n }\\n } else if (name) {\\n //May just be an object definition for the module. Only\\n //worry about defining if have a module name.\\n defined[name] = callback;\\n }\\n };\\n\\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\\n if (typeof deps === \\\"string\\\") {\\n if (handlers[deps]) {\\n //callback in this case is really relName\\n return handlers[deps](callback);\\n }\\n //Just return the module wanted. In this scenario, the\\n //deps arg is the module name, and second arg (if passed)\\n //is just the relName.\\n //Normalize module name, if it contains . or ..\\n return callDep(makeMap(deps, makeRelParts(callback)).f);\\n } else if (!deps.splice) {\\n //deps is a config object, not an array.\\n config = deps;\\n if (config.deps) {\\n req(config.deps, config.callback);\\n }\\n if (!callback) {\\n return;\\n }\\n\\n if (callback.splice) {\\n //callback is an array, which means it is a dependency list.\\n //Adjust args if there are dependencies\\n deps = callback;\\n callback = relName;\\n relName = null;\\n } else {\\n deps = undef;\\n }\\n }\\n\\n //Support require(['a'])\\n callback = callback || function () {};\\n\\n //If relName is a function, it is an errback handler,\\n //so remove it.\\n if (typeof relName === 'function') {\\n relName = forceSync;\\n forceSync = alt;\\n }\\n\\n //Simulate async callback;\\n if (forceSync) {\\n main(undef, deps, callback, relName);\\n } else {\\n //Using a non-zero value because of concern for what old browsers\\n //do, and latest browsers \\\"upgrade\\\" to 4 if lower value is used:\\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\\n //If want a value immediately, use require('id') instead -- something\\n //that works in almond on the global level, but not guaranteed and\\n //unlikely to work in other AMD implementations.\\n setTimeout(function () {\\n main(undef, deps, callback, relName);\\n }, 4);\\n }\\n\\n return req;\\n };\\n\\n /**\\n * Just drops the config on the floor, but returns req in case\\n * the config return value is used.\\n */\\n req.config = function (cfg) {\\n return req(cfg);\\n };\\n\\n /**\\n * Expose module registry for debugging and tooling\\n */\\n requirejs._defined = defined;\\n\\n define = function (name, deps, callback) {\\n if (typeof name !== 'string') {\\n throw new Error('See almond README: incorrect module build, no module name');\\n }\\n\\n //This module may not have dependencies\\n if (!deps.splice) {\\n //deps is not an array, so probably means\\n //an object literal or factory function for\\n //the value. Adjust args.\\n callback = deps;\\n deps = [];\\n }\\n\\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\\n waiting[name] = [name, deps, callback];\\n }\\n };\\n\\n define.amd = {\\n jQuery: true\\n };\\n}());\\n\\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\\n}\\n}());\\nS2.define(\\\"almond\\\", function(){});\\n\\n/* global jQuery:false, $:false */\\nS2.define('jquery',[],function () {\\n var _$ = jQuery || $;\\n\\n if (_$ == null && console && console.error) {\\n console.error(\\n 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\\n 'found. Make sure that you are including jQuery before Select2 on your ' +\\n 'web page.'\\n );\\n }\\n\\n return _$;\\n});\\n\\nS2.define('select2/utils',[\\n 'jquery'\\n], function ($) {\\n var Utils = {};\\n\\n Utils.Extend = function (ChildClass, SuperClass) {\\n var __hasProp = {}.hasOwnProperty;\\n\\n function BaseConstructor () {\\n this.constructor = ChildClass;\\n }\\n\\n for (var key in SuperClass) {\\n if (__hasProp.call(SuperClass, key)) {\\n ChildClass[key] = SuperClass[key];\\n }\\n }\\n\\n BaseConstructor.prototype = SuperClass.prototype;\\n ChildClass.prototype = new BaseConstructor();\\n ChildClass.__super__ = SuperClass.prototype;\\n\\n return ChildClass;\\n };\\n\\n function getMethods (theClass) {\\n var proto = theClass.prototype;\\n\\n var methods = [];\\n\\n for (var methodName in proto) {\\n var m = proto[methodName];\\n\\n if (typeof m !== 'function') {\\n continue;\\n }\\n\\n if (methodName === 'constructor') {\\n continue;\\n }\\n\\n methods.push(methodName);\\n }\\n\\n return methods;\\n }\\n\\n Utils.Decorate = function (SuperClass, DecoratorClass) {\\n var decoratedMethods = getMethods(DecoratorClass);\\n var superMethods = getMethods(SuperClass);\\n\\n function DecoratedClass () {\\n var unshift = Array.prototype.unshift;\\n\\n var argCount = DecoratorClass.prototype.constructor.length;\\n\\n var calledConstructor = SuperClass.prototype.constructor;\\n\\n if (argCount > 0) {\\n unshift.call(arguments, SuperClass.prototype.constructor);\\n\\n calledConstructor = DecoratorClass.prototype.constructor;\\n }\\n\\n calledConstructor.apply(this, arguments);\\n }\\n\\n DecoratorClass.displayName = SuperClass.displayName;\\n\\n function ctr () {\\n this.constructor = DecoratedClass;\\n }\\n\\n DecoratedClass.prototype = new ctr();\\n\\n for (var m = 0; m < superMethods.length; m++) {\\n var superMethod = superMethods[m];\\n\\n DecoratedClass.prototype[superMethod] =\\n SuperClass.prototype[superMethod];\\n }\\n\\n var calledMethod = function (methodName) {\\n // Stub out the original method if it's not decorating an actual method\\n var originalMethod = function () {};\\n\\n if (methodName in DecoratedClass.prototype) {\\n originalMethod = DecoratedClass.prototype[methodName];\\n }\\n\\n var decoratedMethod = DecoratorClass.prototype[methodName];\\n\\n return function () {\\n var unshift = Array.prototype.unshift;\\n\\n unshift.call(arguments, originalMethod);\\n\\n return decoratedMethod.apply(this, arguments);\\n };\\n };\\n\\n for (var d = 0; d < decoratedMethods.length; d++) {\\n var decoratedMethod = decoratedMethods[d];\\n\\n DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\\n }\\n\\n return DecoratedClass;\\n };\\n\\n var Observable = function () {\\n this.listeners = {};\\n };\\n\\n Observable.prototype.on = function (event, callback) {\\n this.listeners = this.listeners || {};\\n\\n if (event in this.listeners) {\\n this.listeners[event].push(callback);\\n } else {\\n this.listeners[event] = [callback];\\n }\\n };\\n\\n Observable.prototype.trigger = function (event) {\\n var slice = Array.prototype.slice;\\n var params = slice.call(arguments, 1);\\n\\n this.listeners = this.listeners || {};\\n\\n // Params should always come in as an array\\n if (params == null) {\\n params = [];\\n }\\n\\n // If there are no arguments to the event, use a temporary object\\n if (params.length === 0) {\\n params.push({});\\n }\\n\\n // Set the `_type` of the first object to the event\\n params[0]._type = event;\\n\\n if (event in this.listeners) {\\n this.invoke(this.listeners[event], slice.call(arguments, 1));\\n }\\n\\n if ('*' in this.listeners) {\\n this.invoke(this.listeners['*'], arguments);\\n }\\n };\\n\\n Observable.prototype.invoke = function (listeners, params) {\\n for (var i = 0, len = listeners.length; i < len; i++) {\\n listeners[i].apply(this, params);\\n }\\n };\\n\\n Utils.Observable = Observable;\\n\\n Utils.generateChars = function (length) {\\n var chars = '';\\n\\n for (var i = 0; i < length; i++) {\\n var randomChar = Math.floor(Math.random() * 36);\\n chars += randomChar.toString(36);\\n }\\n\\n return chars;\\n };\\n\\n Utils.bind = function (func, context) {\\n return function () {\\n func.apply(context, arguments);\\n };\\n };\\n\\n Utils._convertData = function (data) {\\n for (var originalKey in data) {\\n var keys = originalKey.split('-');\\n\\n var dataLevel = data;\\n\\n if (keys.length === 1) {\\n continue;\\n }\\n\\n for (var k = 0; k < keys.length; k++) {\\n var key = keys[k];\\n\\n // Lowercase the first letter\\n // By default, dash-separated becomes camelCase\\n key = key.substring(0, 1).toLowerCase() + key.substring(1);\\n\\n if (!(key in dataLevel)) {\\n dataLevel[key] = {};\\n }\\n\\n if (k == keys.length - 1) {\\n dataLevel[key] = data[originalKey];\\n }\\n\\n dataLevel = dataLevel[key];\\n }\\n\\n delete data[originalKey];\\n }\\n\\n return data;\\n };\\n\\n Utils.hasScroll = function (index, el) {\\n // Adapted from the function created by @ShadowScripter\\n // and adapted by @BillBarry on the Stack Exchange Code Review website.\\n // The original code can be found at\\n // http://codereview.stackexchange.com/q/13338\\n // and was designed to be used with the Sizzle selector engine.\\n\\n var $el = $(el);\\n var overflowX = el.style.overflowX;\\n var overflowY = el.style.overflowY;\\n\\n //Check both x and y declarations\\n if (overflowX === overflowY &&\\n (overflowY === 'hidden' || overflowY === 'visible')) {\\n return false;\\n }\\n\\n if (overflowX === 'scroll' || overflowY === 'scroll') {\\n return true;\\n }\\n\\n return ($el.innerHeight() < el.scrollHeight ||\\n $el.innerWidth() < el.scrollWidth);\\n };\\n\\n Utils.escapeMarkup = function (markup) {\\n var replaceMap = {\\n '\\\\\\\\': '\',\\n '&': '&',\\n '<': '<',\\n '>': '>',\\n '\\\"': '"',\\n '\\\\'': ''',\\n '/': '/'\\n };\\n\\n // Do not try to escape the markup if it's not a string\\n if (typeof markup !== 'string') {\\n return markup;\\n }\\n\\n return String(markup).replace(/[&<>\\\"'\\\\/\\\\\\\\]/g, function (match) {\\n return replaceMap[match];\\n });\\n };\\n\\n // Cache objects in Utils.__cache instead of $.data (see #4346)\\n Utils.__cache = {};\\n\\n var id = 0;\\n Utils.GetUniqueElementId = function (element) {\\n // Get a unique element Id. If element has no id,\\n // creates a new unique number, stores it in the id\\n // attribute and returns the new id with a prefix.\\n // If an id already exists, it simply returns it with a prefix.\\n\\n var select2Id = element.getAttribute('data-select2-id');\\n\\n if (select2Id != null) {\\n return select2Id;\\n }\\n\\n // If element has id, use it.\\n if (element.id) {\\n select2Id = 'select2-data-' + element.id;\\n } else {\\n select2Id = 'select2-data-' + (++id).toString() +\\n '-' + Utils.generateChars(4);\\n }\\n\\n element.setAttribute('data-select2-id', select2Id);\\n\\n return select2Id;\\n };\\n\\n Utils.StoreData = function (element, name, value) {\\n // Stores an item in the cache for a specified element.\\n // name is the cache key.\\n var id = Utils.GetUniqueElementId(element);\\n if (!Utils.__cache[id]) {\\n Utils.__cache[id] = {};\\n }\\n\\n Utils.__cache[id][name] = value;\\n };\\n\\n Utils.GetData = function (element, name) {\\n // Retrieves a value from the cache by its key (name)\\n // name is optional. If no name specified, return\\n // all cache items for the specified element.\\n // and for a specified element.\\n var id = Utils.GetUniqueElementId(element);\\n if (name) {\\n if (Utils.__cache[id]) {\\n if (Utils.__cache[id][name] != null) {\\n return Utils.__cache[id][name];\\n }\\n return $(element).data(name); // Fallback to HTML5 data attribs.\\n }\\n return $(element).data(name); // Fallback to HTML5 data attribs.\\n } else {\\n return Utils.__cache[id];\\n }\\n };\\n\\n Utils.RemoveData = function (element) {\\n // Removes all cached items for a specified element.\\n var id = Utils.GetUniqueElementId(element);\\n if (Utils.__cache[id] != null) {\\n delete Utils.__cache[id];\\n }\\n\\n element.removeAttribute('data-select2-id');\\n };\\n\\n Utils.copyNonInternalCssClasses = function (dest, src) {\\n var classes;\\n\\n var destinationClasses = dest.getAttribute('class').trim().split(/\\\\s+/);\\n\\n destinationClasses = destinationClasses.filter(function (clazz) {\\n // Save all Select2 classes\\n return clazz.indexOf('select2-') === 0;\\n });\\n\\n var sourceClasses = src.getAttribute('class').trim().split(/\\\\s+/);\\n\\n sourceClasses = sourceClasses.filter(function (clazz) {\\n // Only copy non-Select2 classes\\n return clazz.indexOf('select2-') !== 0;\\n });\\n\\n var replacements = destinationClasses.concat(sourceClasses);\\n\\n dest.setAttribute('class', replacements.join(' '));\\n };\\n\\n return Utils;\\n});\\n\\nS2.define('select2/results',[\\n 'jquery',\\n './utils'\\n], function ($, Utils) {\\n function Results ($element, options, dataAdapter) {\\n this.$element = $element;\\n this.data = dataAdapter;\\n this.options = options;\\n\\n Results.__super__.constructor.call(this);\\n }\\n\\n Utils.Extend(Results, Utils.Observable);\\n\\n Results.prototype.render = function () {\\n var $results = $(\\n '
'\\n );\\n\\n if (this.options.get('multiple')) {\\n $results.attr('aria-multiselectable', 'true');\\n }\\n\\n this.$results = $results;\\n\\n return $results;\\n };\\n\\n Results.prototype.clear = function () {\\n this.$results.empty();\\n };\\n\\n Results.prototype.displayMessage = function (params) {\\n var escapeMarkup = this.options.get('escapeMarkup');\\n\\n this.clear();\\n this.hideLoading();\\n\\n var $message = $(\\n ''\\n );\\n\\n var message = this.options.get('translations').get(params.message);\\n\\n $message.append(\\n escapeMarkup(\\n message(params.args)\\n )\\n );\\n\\n $message[0].className += ' select2-results__message';\\n\\n this.$results.append($message);\\n };\\n\\n Results.prototype.hideMessages = function () {\\n this.$results.find('.select2-results__message').remove();\\n };\\n\\n Results.prototype.append = function (data) {\\n this.hideLoading();\\n\\n var $options = [];\\n\\n if (data.results == null || data.results.length === 0) {\\n if (this.$results.children().length === 0) {\\n this.trigger('results:message', {\\n message: 'noResults'\\n });\\n }\\n\\n return;\\n }\\n\\n data.results = this.sort(data.results);\\n\\n for (var d = 0; d < data.results.length; d++) {\\n var item = data.results[d];\\n\\n var $option = this.option(item);\\n\\n $options.push($option);\\n }\\n\\n this.$results.append($options);\\n };\\n\\n Results.prototype.position = function ($results, $dropdown) {\\n var $resultsContainer = $dropdown.find('.select2-results');\\n $resultsContainer.append($results);\\n };\\n\\n Results.prototype.sort = function (data) {\\n var sorter = this.options.get('sorter');\\n\\n return sorter(data);\\n };\\n\\n Results.prototype.highlightFirstItem = function () {\\n var $options = this.$results\\n .find('.select2-results__option--selectable');\\n\\n var $selected = $options.filter('.select2-results__option--selected');\\n\\n // Check if there are any selected options\\n if ($selected.length > 0) {\\n // If there are selected options, highlight the first\\n $selected.first().trigger('mouseenter');\\n } else {\\n // If there are no selected options, highlight the first option\\n // in the dropdown\\n $options.first().trigger('mouseenter');\\n }\\n\\n this.ensureHighlightVisible();\\n };\\n\\n Results.prototype.setClasses = function () {\\n var self = this;\\n\\n this.data.current(function (selected) {\\n var selectedIds = selected.map(function (s) {\\n return s.id.toString();\\n });\\n\\n var $options = self.$results\\n .find('.select2-results__option--selectable');\\n\\n $options.each(function () {\\n var $option = $(this);\\n\\n var item = Utils.GetData(this, 'data');\\n\\n // id needs to be converted to a string when comparing\\n var id = '' + item.id;\\n\\n if ((item.element != null && item.element.selected) ||\\n (item.element == null && selectedIds.indexOf(id) > -1)) {\\n this.classList.add('select2-results__option--selected');\\n $option.attr('aria-selected', 'true');\\n } else {\\n this.classList.remove('select2-results__option--selected');\\n $option.attr('aria-selected', 'false');\\n }\\n });\\n\\n });\\n };\\n\\n Results.prototype.showLoading = function (params) {\\n this.hideLoading();\\n\\n var loadingMore = this.options.get('translations').get('searching');\\n\\n var loading = {\\n disabled: true,\\n loading: true,\\n text: loadingMore(params)\\n };\\n var $loading = this.option(loading);\\n $loading.className += ' loading-results';\\n\\n this.$results.prepend($loading);\\n };\\n\\n Results.prototype.hideLoading = function () {\\n this.$results.find('.loading-results').remove();\\n };\\n\\n Results.prototype.option = function (data) {\\n var option = document.createElement('li');\\n option.classList.add('select2-results__option');\\n option.classList.add('select2-results__option--selectable');\\n\\n var attrs = {\\n 'role': 'option'\\n };\\n\\n var matches = window.Element.prototype.matches ||\\n window.Element.prototype.msMatchesSelector ||\\n window.Element.prototype.webkitMatchesSelector;\\n\\n if ((data.element != null && matches.call(data.element, ':disabled')) ||\\n (data.element == null && data.disabled)) {\\n attrs['aria-disabled'] = 'true';\\n\\n option.classList.remove('select2-results__option--selectable');\\n option.classList.add('select2-results__option--disabled');\\n }\\n\\n if (data.id == null) {\\n option.classList.remove('select2-results__option--selectable');\\n }\\n\\n if (data._resultId != null) {\\n option.id = data._resultId;\\n }\\n\\n if (data.title) {\\n option.title = data.title;\\n }\\n\\n if (data.children) {\\n attrs.role = 'group';\\n attrs['aria-label'] = data.text;\\n\\n option.classList.remove('select2-results__option--selectable');\\n option.classList.add('select2-results__option--group');\\n }\\n\\n for (var attr in attrs) {\\n var val = attrs[attr];\\n\\n option.setAttribute(attr, val);\\n }\\n\\n if (data.children) {\\n var $option = $(option);\\n\\n var label = document.createElement('strong');\\n label.className = 'select2-results__group';\\n\\n this.template(data, label);\\n\\n var $children = [];\\n\\n for (var c = 0; c < data.children.length; c++) {\\n var child = data.children[c];\\n\\n var $child = this.option(child);\\n\\n $children.push($child);\\n }\\n\\n var $childrenContainer = $('$().editable()
. You should subscribe on it's events (save / cancel) to get profit of it.save|cancel|onblur|nochange|undefined (=manual)
\\n **/\\n hide: function(reason) {\\n if(!this.tip() || !this.tip().is(':visible') || !this.$element.hasClass('editable-open')) {\\n return;\\n }\\n\\n //if form is saving value, schedule hide\\n if(this.$form.data('editableform').isSaving) {\\n this.delayedHide = {reason: reason};\\n return;\\n } else {\\n this.delayedHide = false;\\n }\\n\\n this.$element.removeClass('editable-open');\\n this.innerHide();\\n\\n /**\\n Fired when container was hidden. It occurs on both save or cancel.\\n **Note:** Bootstrap popover has own `hidden` event that now cannot be separated from x-editable's one.\\n The workaround is to check `arguments.length` that is always `2` for x-editable.\\n\\n @event hidden\\n @param {object} event event object\\n @param {string} reason Reason caused hiding. Can be save|cancel|onblur|nochange|manual
\\n @example\\n $('#username').on('hidden', function(e, reason) {\\n if(reason === 'save' || reason === 'cancel') {\\n //auto-open next editable\\n $(this).closest('tr').next().find('.editable').editable('show');\\n }\\n });\\n **/\\n this.$element.triggerHandler('hidden', reason || 'manual');\\n },\\n\\n /* internal show method. To be overwritten in child classes */\\n innerShow: function () {\\n\\n },\\n\\n /* internal hide method. To be overwritten in child classes */\\n innerHide: function () {\\n\\n },\\n\\n /**\\n Toggles container visibility (show / hide)\\n @method toggle()\\n @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\\n **/\\n toggle: function(closeAll) {\\n if(this.container() && this.tip() && this.tip().is(':visible')) {\\n this.hide();\\n } else {\\n this.show(closeAll);\\n }\\n },\\n\\n /*\\n Updates the position of container when content changed.\\n @method setPosition()\\n */\\n setPosition: function() {\\n //tbd in child class\\n },\\n\\n save: function(e, params) {\\n /**\\n Fired when new value was submitted. You can use $(this).data('editableContainer')
inside handler to access to editableContainer instance\\n\\n @event save\\n @param {Object} event event object\\n @param {Object} params additional params\\n @param {mixed} params.newValue submitted value\\n @param {Object} params.response ajax response\\n @example\\n $('#username').on('save', function(e, params) {\\n //assuming server response: '{success: true}'\\n var pk = $(this).data('editableContainer').options.pk;\\n if(params.response && params.response.success) {\\n alert('value: ' + params.newValue + ' with pk: ' + pk + ' saved!');\\n } else {\\n alert('error!');\\n }\\n });\\n **/\\n this.$element.triggerHandler('save', params);\\n\\n //hide must be after trigger, as saving value may require methods of plugin, applied to input\\n this.hide('save');\\n },\\n\\n /**\\n Sets new option\\n\\n @method option(key, value)\\n @param {string} key\\n @param {mixed} value\\n **/\\n option: function(key, value) {\\n this.options[key] = value;\\n if(key in this.containerOptions) {\\n this.containerOptions[key] = value;\\n this.setContainerOption(key, value);\\n } else {\\n this.formOptions[key] = value;\\n if(this.$form) {\\n this.$form.editableform('option', key, value);\\n }\\n }\\n },\\n\\n setContainerOption: function(key, value) {\\n this.call('option', key, value);\\n },\\n\\n /**\\n Destroys the container instance\\n @method destroy()\\n **/\\n destroy: function() {\\n this.hide();\\n this.innerDestroy();\\n this.$element.off('destroyed');\\n this.$element.removeData('editableContainer');\\n },\\n\\n /* to be overwritten in child classes */\\n innerDestroy: function() {\\n\\n },\\n\\n /*\\n Closes other containers except one related to passed element.\\n Other containers can be cancelled or submitted (depends on onblur option)\\n */\\n closeOthers: function(element) {\\n $('.editable-open').each(function(i, el){\\n //do nothing with passed element and it's children\\n if(el === element || $(el).find(element).length) {\\n return;\\n }\\n\\n //otherwise cancel or submit all open containers\\n var $el = $(el),\\n ec = $el.data('editableContainer');\\n\\n if(!ec) {\\n return;\\n }\\n\\n if(ec.options.onblur === 'cancel') {\\n $el.data('editableContainer').hide('onblur');\\n } else if(ec.options.onblur === 'submit') {\\n $el.data('editableContainer').tip().find('form').submit();\\n }\\n });\\n\\n },\\n\\n /**\\n Activates input of visible container (e.g. set focus)\\n @method activate()\\n **/\\n activate: function() {\\n if(this.tip && this.tip().is(':visible') && this.$form) {\\n this.$form.data('editableform').input.activate();\\n }\\n }\\n\\n };\\n\\n /**\\n jQuery method to initialize editableContainer.\\n\\n @method $().editableContainer(options)\\n @params {Object} options\\n @example\\n $('#edit').editableContainer({\\n type: 'text',\\n url: '/post',\\n pk: 1,\\n value: 'hello'\\n });\\n **/\\n $.fn.editableContainer = function (option) {\\n var args = arguments;\\n return this.each(function () {\\n var $this = $(this),\\n dataKey = 'editableContainer',\\n data = $this.data(dataKey),\\n options = typeof option === 'object' && option,\\n Constructor = (options.mode === 'inline') ? Inline : Popup;\\n\\n if (!data) {\\n $this.data(dataKey, (data = new Constructor(this, options)));\\n }\\n\\n if (typeof option === 'string') { //call method\\n data[option].apply(data, Array.prototype.slice.call(args, 1));\\n }\\n });\\n };\\n\\n //store constructors\\n $.fn.editableContainer.Popup = Popup;\\n $.fn.editableContainer.Inline = Inline;\\n\\n //defaults\\n $.fn.editableContainer.defaults = {\\n /**\\n Initial value of form input\\n\\n @property value\\n @type mixed\\n @default null\\n @private\\n **/\\n value: null,\\n /**\\n Placement of container relative to element. Can be top|right|bottom|left
. Not used for inline container.\\n\\n @property placement\\n @type string\\n @default 'top'\\n **/\\n placement: 'top',\\n /**\\n Whether to hide container on save/cancel.\\n\\n @property autohide\\n @type boolean\\n @default true\\n @private\\n **/\\n autohide: true,\\n /**\\n Action when user clicks outside the container. Can be cancel|submit|ignore
.\\n Setting ignore
allows to have several containers open.\\n\\n @property onblur\\n @type string\\n @default 'cancel'\\n @since 1.1.1\\n **/\\n onblur: 'cancel',\\n\\n /**\\n Animation speed (inline mode only)\\n @property anim\\n @type string\\n @default false\\n **/\\n anim: false,\\n\\n /**\\n Mode of editable, can be `popup` or `inline`\\n\\n @property mode\\n @type string\\n @default 'popup'\\n @since 1.4.0\\n **/\\n mode: 'popup'\\n };\\n\\n /*\\n * workaround to have 'destroyed' event to destroy popover when element is destroyed\\n * see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom\\n */\\n jQuery.event.special.destroyed = {\\n remove: function(o) {\\n if (o.handler) {\\n o.handler();\\n }\\n }\\n };\\n\\n return $;\\n}\\n\\n//# sourceURL=webpack://EditableForm/./src/containers/editable-container.js?\\n}\");\n\n/***/ }),\n\n/***/ \"./src/containers/editable-inline.js\":\n/*!*******************************************!*\\\n !*** ./src/containers/editable-inline.js ***!\n \\*******************************************/\n/***/ (() => {\n\neval(\"{/**\\n* Editable Inline \\n* ---------------------\\n*/\\nfunction attachEditableInline($) {\\n \\\"use strict\\\";\\n \\n //copy prototype from EditableContainer\\n //extend methods\\n $.extend($.fn.editableContainer.Inline.prototype, $.fn.editableContainer.Popup.prototype, {\\n containerName: 'editableform',\\n innerCss: '.editable-inline',\\n containerClass: 'editable-container editable-inline', //css class applied to container element\\n \\n initContainer: function(){\\n //container is element\\n this.$tip = $('');\\n \\n //convert anim to miliseconds (int)\\n if(!this.options.anim) {\\n this.options.anim = 0;\\n } \\n },\\n \\n splitOptions: function() {\\n //all options are passed to form\\n this.containerOptions = {};\\n this.formOptions = this.options;\\n },\\n \\n tip: function() {\\n return this.$tip; \\n },\\n \\n innerShow: function () {\\n this.$element.hide();\\n this.tip().insertAfter(this.$element).show();\\n }, \\n \\n innerHide: function () {\\n this.$tip.hide(this.options.anim, $.proxy(function() {\\n this.$element.show();\\n this.innerDestroy();\\n }, this)); \\n },\\n \\n innerDestroy: function() {\\n if(this.tip()) {\\n this.tip().empty().remove();\\n }\\n } \\n });\\n\\n return $;\\n}\\n\\n//# sourceURL=webpack://EditableForm/./src/containers/editable-inline.js?\\n}\");\n\n/***/ }),\n\n/***/ \"./src/containers/editable-popover5.js\":\n/*!*********************************************!*\\\n !*** ./src/containers/editable-popover5.js ***!\n \\*********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\neval(\"{__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ \\\"bootstrap\\\");\\n/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bootstrap__WEBPACK_IMPORTED_MODULE_0__);\\n/**\\n * Editable Popover for Bootstrap 5 based on Popper.js\\n * ---------------------\\n * requires bootstrap-popover.js\\n */\\n\\n\\nfunction attachEditablePopover($) {\\n \\\"use strict\\\";\\n\\n //extend methods\\n $.extend($.fn.editableContainer.Popup.prototype, {\\n containerName: 'popover',\\n containerDataName: 'bs.popover',\\n innerCss: '.popover-body',\\n defaults: bootstrap__WEBPACK_IMPORTED_MODULE_0__.Popover.Default,\\n\\n initContainer: function(){\\n $.extend(this.containerOptions, {\\n trigger: 'manual',\\n selector: false,\\n content: ' ',\\n template: this.defaults.template\\n });\\n\\n //as template property is used in inputs, hide it from popover\\n var t;\\n if(this.$element.data('template')) {\\n t = this.$element.data('template');\\n this.$element.removeData('template');\\n }\\n\\n this.call(this.containerOptions);\\n\\n if(t) {\\n //restore data('template')\\n this.$element.data('template', t);\\n }\\n },\\n\\n /* show */\\n innerShow: function () {\\n this.call('show');\\n },\\n\\n /* hide */\\n innerHide: function () {\\n this.call('hide');\\n },\\n\\n /* destroy */\\n innerDestroy: function() {\\n this.call('dispose');\\n },\\n\\n setContainerOption: function(key, value) {\\n this.container().options[key] = value;\\n },\\n\\n setPosition: function () {\\n (function() {}).call(this.container());\\n },\\n\\n call: function() {\\n if ( ! $(this.$element).data(this.containerDataName)) {\\n $(this.$element).data(this.containerDataName,\\n bootstrap__WEBPACK_IMPORTED_MODULE_0__.Popover.getOrCreateInstance(this.$element, this.containerOptions)\\n );\\n }\\n\\n return this.$element[this.containerName].apply(this.$element, arguments);\\n },\\n\\n tip: function() {\\n return this.container() ? $(this.container().tip) : null;\\n }\\n });\\n \\n return $;\\n}\\n\\n//# sourceURL=webpack://EditableForm/./src/containers/editable-popover5.js?\\n}\");\n\n/***/ }),\n\n/***/ \"./src/editable-form/editable-form-bootstrap5.js\":\n/*!*******************************************************!*\\\n !*** ./src/editable-form/editable-form-bootstrap5.js ***!\n \\*******************************************************/\n/***/ (() => {\n\neval(\"{/*\\nEditableform based on Twitter Bootstrap 5\\n*/\\nfunction attachEditableFormBootstrap5($) {\\n \\\"use strict\\\";\\n\\n //store parent methods\\n const pInitInput = $.fn.editableform.Constructor.prototype.initInput;\\n\\n $.extend($.fn.editableform.Constructor.prototype, {\\n initTemplate: function() {\\n this.$form = $($.fn.editableform.template);\\n this.$form.find('.control-group').removeClass('control-group');\\n this.$form.find('.editable-error-block').removeClass('help-block').addClass('invalid-feedback');\\n },\\n initInput: function() {\\n pInitInput.apply(this);\\n\\n //for bs5 set default class `form-select-sm` to standard inputs\\n var emptyInputClass = this.input.options.inputclass === null || this.input.options.inputclass === false;\\n var defaultClass = 'form-select-sm';\\n\\n //bs5 add `form-select` class to standard inputs\\n var stdtypes = 'text,select,textarea,password,email,url,tel,number,range,time,typeaheadjs'.split(',');\\n if(~$.inArray(this.input.type, stdtypes)) {\\n this.input.$input.addClass('form-select');\\n if(emptyInputClass) {\\n this.input.options.inputclass = defaultClass;\\n this.input.$input.addClass(defaultClass);\\n }\\n }\\n\\n //apply bs3 size class also to buttons (to fit size of control)\\n var $btn = this.$form.find('.editable-buttons');\\n var classes = emptyInputClass ? [defaultClass] : this.input.options.inputclass.split(' ');\\n for(var i=0; itext|textarea|select|date|checklist
\\n\\n @property type \\n @type string\\n @default 'text'\\n **/\\n type: 'text',\\n /**\\n Url for submit, e.g. '/post'
\\n If function - it will be called instead of ajax. Function should return deferred object to run fail/done callbacks.\\n\\n @property url \\n @type string|function\\n @default null\\n @example\\n url: function(params) {\\n var d = new $.Deferred;\\n if(params.value === 'abc') {\\n return d.reject('error message'); //returning error via deferred object\\n } else {\\n //async saving data in js model\\n someModel.asyncSaveMethod({\\n ..., \\n success: function(){\\n d.resolve();\\n }\\n }); \\n return d.promise();\\n }\\n } \\n **/ \\n url:null,\\n /**\\n Additional params for submit. If defined as object
- it is **appended** to original ajax data (pk, name and value). \\n If defined as function
- returned object **overwrites** original ajax data.\\n @example\\n params: function(params) {\\n //originally params contain pk, name and value\\n params.a = 1;\\n return params;\\n }\\n\\n @property params \\n @type object|function\\n @default null\\n **/ \\n params:null,\\n /**\\n Name of field. Will be submitted on server. Can be taken from id
attribute\\n\\n @property name \\n @type string\\n @default null\\n **/ \\n name: null,\\n /**\\n Primary key of editable object (e.g. record id in database). For composite keys use object, e.g. {id: 1, lang: 'en'}
.\\n Can be calculated dynamically via function.\\n\\n @property pk \\n @type string|object|function\\n @default null\\n **/ \\n pk: null,\\n /**\\n Initial value. If not defined - will be taken from element's content.\\n For __select__ type should be defined (as it is ID of shown text).\\n\\n @property value \\n @type string|object\\n @default null\\n **/ \\n value: null,\\n /**\\n Value that will be displayed in input if original field value is empty (`null|undefined|''`).\\n\\n @property defaultValue \\n @type string|object\\n @default null\\n @since 1.4.6\\n **/ \\n defaultValue: null,\\n /**\\n Strategy for sending data on server. Can be `auto|always|never`.\\n When 'auto' data will be sent on server **only if pk and url defined**, otherwise new value will be stored locally.\\n\\n @property send \\n @type string\\n @default 'auto'\\n **/ \\n send: 'auto', \\n /**\\n Function for client-side validation. If returns string - means validation not passed and string showed as error.\\n Since 1.5.1 you can modify submitted value by returning object from `validate`: \\n `{newValue: '...'}` or `{newValue: '...', msg: '...'}`\\n\\n @property validate \\n @type function\\n @default null\\n @example\\n validate: function(value) {\\n if(value.trim() == '') {\\n return 'This field is required';\\n }\\n }\\n **/ \\n validate: null,\\n /**\\n Success callback. Called when value successfully sent on server and **response status = 200**. \\n Usefull to work with json response. For example, if your backend response can be {success: true}
\\n or {success: false, msg: \\\"server error\\\"}
you can check it inside this callback. \\n If it returns **string** - means error occured and string is shown as error message. \\n If it returns **object like** {newValue: <something>}
- it overwrites value, submitted by user. \\n Otherwise newValue simply rendered into element.\\n \\n @property success \\n @type function\\n @default null\\n @example\\n success: function(response, newValue) {\\n if(!response.success) return response.msg;\\n }\\n **/ \\n success: null,\\n /**\\n Error callback. Called when request failed (response status != 200). \\n Usefull when you want to parse error response and display a custom message.\\n Must return **string** - the message to be displayed in the error block.\\n \\n @property error \\n @type function\\n @default null\\n @since 1.4.4\\n @example\\n error: function(response, newValue) {\\n if(response.status === 500) {\\n return 'Service unavailable. Please try later.';\\n } else {\\n return response.responseText;\\n }\\n }\\n **/ \\n error: null,\\n /**\\n Additional options for submit ajax request.\\n List of values: http://api.jquery.com/jQuery.ajax\\n \\n @property ajaxOptions \\n @type object\\n @default null\\n @since 1.1.1 \\n @example \\n ajaxOptions: {\\n type: 'put',\\n dataType: 'json'\\n } \\n **/ \\n ajaxOptions: null,\\n /**\\n Where to show buttons: left(true)|bottom|false \\n Form without buttons is auto-submitted.\\n\\n @property showbuttons \\n @type boolean|string\\n @default true\\n @since 1.1.1\\n **/ \\n showbuttons: true,\\n /**\\n Scope for callback methods (success, validate). \\n If null
means editableform instance itself. \\n\\n @property scope \\n @type DOMElement|object\\n @default null\\n @since 1.2.0\\n @private\\n **/ \\n scope: null,\\n /**\\n Whether to save or cancel value when it was not changed but form was submitted\\n\\n @property savenochange \\n @type boolean\\n @default false\\n @since 1.2.0\\n **/\\n savenochange: false\\n }; \\n\\n /*\\n Note: following params could redefined in engine: bootstrap or jqueryui:\\n Classes 'control-group' and 'editable-error-block' must always present!\\n */ \\n $.fn.editableform.template = '';\\n\\n //loading div\\n $.fn.editableform.loading = '';\\n\\n //buttons\\n $.fn.editableform.buttons = ''+\\n ''; \\n\\n //error class attached to control-group\\n $.fn.editableform.errorGroupClass = null; \\n\\n //error class attached to editable-error-block\\n $.fn.editableform.errorBlockClass = 'editable-error';\\n \\n //engine\\n $.fn.editableform.engine = 'jquery';\\n \\n return $;\\n}\\n\\n\\n//# sourceURL=webpack://EditableForm/./src/editable-form/editable-form.js?\\n}\");\n\n/***/ }),\n\n/***/ \"./src/element/editable-element.js\":\n/*!*****************************************!*\\\n !*** ./src/element/editable-element.js ***!\n \\*****************************************/\n/***/ (() => {\n\neval(\"{/**\\nMakes editable any HTML element on the page. Applied as jQuery method.\\n\\n@class editable\\n@uses editableContainer\\n**/\\n\\nfunction attachEditable($) {\\n \\\"use strict\\\";\\n\\n var Editable = function (element, options) {\\n this.$element = $(element);\\n //data-* has more priority over js options: because dynamically created elements may change data-* \\n this.options = $.extend({}, $.fn.editable.defaults, options, $.fn.editableutils.getConfigData(this.$element)); \\n if(this.options.selector) {\\n this.initLive();\\n } else {\\n this.init();\\n }\\n \\n //check for transition support\\n if(this.options.highlight && !$.fn.editableutils.supportsTransitions()) {\\n this.options.highlight = false;\\n }\\n };\\n\\n Editable.prototype = {\\n constructor: Editable, \\n init: function () {\\n var isValueByText = false, \\n doAutotext, finalize;\\n\\n //name\\n this.options.name = this.options.name || this.$element.attr('id');\\n \\n //create input of specified type. Input needed already here to convert value for initial display (e.g. show text by id for select)\\n //also we set scope option to have access to element inside input specific callbacks (e. g. source as function)\\n this.options.scope = this.$element[0]; \\n this.input = $.fn.editableutils.createInput(this.options);\\n if(!this.input) {\\n return; \\n }\\n \\n // Set the editable's type from the input's type\\n this.type = this.input.type; \\n\\n //set value from settings or by element's text\\n if (this.options.value === undefined || this.options.value === null) {\\n this.value = this.input.html2value(this.$element.html().trim());\\n isValueByText = true;\\n } else {\\n /*\\n value can be string when received from 'data-value' attribute\\n for complext objects value can be set as json string in data-value attribute, \\n e.g. data-value=\\\"{city: 'Moscow', street: 'Lenina'}\\\"\\n */\\n this.options.value = $.fn.editableutils.tryParseJson(this.options.value, true); \\n if(typeof this.options.value === 'string') {\\n this.value = this.input.str2value(this.options.value);\\n } else {\\n this.value = this.options.value;\\n }\\n }\\n \\n //add 'editable' class to every editable element\\n this.$element.addClass('editable');\\n \\n //specifically for \\\"textarea\\\" add class .editable-pre-wrapped to keep linebreaks\\n if(this.input.type === 'textarea') {\\n this.$element.addClass('editable-pre-wrapped');\\n }\\n \\n //attach handler activating editable. In disabled mode it just prevent default action (useful for links)\\n if(this.options.toggle !== 'manual') {\\n this.$element.addClass('editable-click');\\n // Debug: ensure toggle is set\\n if (!this.options.toggle) {\\n console.warn('Toggle option is undefined, defaulting to click');\\n this.options.toggle = 'click';\\n }\\n this.$element.on(this.options.toggle + '.editable', $.proxy(function(e){\\n //prevent following link if editable enabled\\n if(!this.options.disabled) {\\n e.preventDefault();\\n }\\n \\n //stop propagation not required because in document click handler it checks event target\\n //e.stopPropagation();\\n \\n if(this.options.toggle === 'mouseenter') {\\n //for hover only show container\\n this.show();\\n } else {\\n //when toggle='click' we should not close all other containers as they will be closed automatically in document click listener\\n var closeAll = (this.options.toggle !== 'click');\\n this.toggle(closeAll);\\n }\\n }, this));\\n } else {\\n this.$element.attr('tabindex', -1); //do not stop focus on element when toggled manually\\n }\\n \\n //if display is function it's far more convinient to have autotext = always to render correctly on init\\n //see https://github.com/vitalets/x-editable-yii/issues/34\\n if(typeof this.options.display === 'function') {\\n this.options.autotext = 'always';\\n }\\n \\n //check conditions for autotext:\\n switch(this.options.autotext) {\\n case 'always':\\n doAutotext = true;\\n break;\\n case 'auto':\\n //if element text is empty and value is defined and value not generated by text --> run autotext\\n doAutotext = !(this.$element.text().trim()).length && this.value !== null && this.value !== undefined && !isValueByText;\\n break;\\n default:\\n doAutotext = false;\\n }\\n\\n //depending on autotext run render() or just finilize init\\n $.when(doAutotext ? this.render() : true).then($.proxy(function() {\\n if(this.options.disabled) {\\n this.disable();\\n } else {\\n this.enable(); \\n }\\n /** \\n Fired when element was initialized by `$().editable()` method. \\n Please note that you should setup `init` handler **before** applying `editable`. \\n \\n @event init \\n @param {Object} event event object\\n @param {Object} editable editable instance (as here it cannot accessed via data('editable'))\\n @since 1.2.0\\n @example\\n $('#username').on('init', function(e, editable) {\\n alert('initialized ' + editable.options.name);\\n });\\n $('#username').editable();\\n **/ \\n this.$element.triggerHandler('init', this);\\n }, this));\\n },\\n\\n /*\\n Initializes parent element for live editables \\n */\\n initLive: function() {\\n //store selector \\n var selector = this.options.selector;\\n //modify options for child elements\\n this.options.selector = false; \\n this.options.autotext = 'never';\\n //listen toggle events\\n this.$element.on(this.options.toggle + '.editable', selector, $.proxy(function(e){\\n var $target = $(e.target);\\n if(!$target.data('editable')) {\\n //if delegated element initially empty, we need to clear it's text (that was manually set to `empty` by user)\\n //see https://github.com/vitalets/x-editable/issues/137 \\n if($target.hasClass(this.options.emptyclass)) {\\n $target.empty();\\n }\\n $target.editable(this.options).trigger(e);\\n }\\n }, this)); \\n },\\n \\n /*\\n Renders value into element's text.\\n Can call custom display method from options.\\n Can return deferred object.\\n @method render()\\n @param {mixed} response server response (if exist) to pass into display function\\n */ \\n render: function(response) {\\n //do not display anything\\n if(this.options.display === false) {\\n return;\\n }\\n\\n //if input has `value2htmlFinal` method, we pass callback in third param to be called when source is loaded\\n if(this.input.value2htmlFinal) {\\n return this.input.value2html(this.value, this.$element[0], this.options.display, response);\\n //if display method defined --> use it\\n } else if(typeof this.options.display === 'function') {\\n return this.options.display.call(this.$element[0], this.value, response);\\n //else use input's original value2html() method\\n } else {\\n return this.input.value2html(this.value, this.$element[0]);\\n }\\n },\\n \\n /**\\n Enables editable\\n @method enable()\\n **/ \\n enable: function() {\\n this.options.disabled = false;\\n this.$element.removeClass('editable-disabled');\\n this.handleEmpty(this.isEmpty);\\n if(this.options.toggle !== 'manual') {\\n if(this.$element.attr('tabindex') === '-1') { \\n this.$element.removeAttr('tabindex'); \\n }\\n }\\n },\\n \\n /**\\n Disables editable\\n @method disable()\\n **/ \\n disable: function() {\\n this.options.disabled = true; \\n this.hide(); \\n this.$element.addClass('editable-disabled');\\n this.handleEmpty(this.isEmpty);\\n //do not stop focus on this element\\n this.$element.attr('tabindex', -1); \\n },\\n \\n /**\\n Toggles enabled / disabled state of editable element\\n @method toggleDisabled()\\n **/ \\n toggleDisabled: function() {\\n if(this.options.disabled) {\\n this.enable();\\n } else { \\n this.disable(); \\n }\\n }, \\n \\n /**\\n Sets new option\\n \\n @method option(key, value)\\n @param {string|object} key option name or object with several options\\n @param {mixed} value option new value\\n @example\\n $('.editable').editable('option', 'pk', 2);\\n **/ \\n option: function(key, value) {\\n //set option(s) by object\\n if(key && typeof key === 'object') {\\n $.each(key, $.proxy(function(k, v){\\n this.option(k.triim(), v);\\n }, this)); \\n return;\\n }\\n\\n //set option by string \\n this.options[key] = value; \\n \\n //disabled\\n if(key === 'disabled') {\\n return value ? this.disable() : this.enable();\\n } \\n \\n //value\\n if(key === 'value') {\\n this.setValue(value);\\n }\\n \\n //transfer new option to container! \\n if(this.container) {\\n this.container.option(key, value); \\n }\\n \\n //pass option to input directly (as it points to the same in form)\\n if(this.input.option) {\\n this.input.option(key, value);\\n }\\n \\n }, \\n \\n /*\\n * set emptytext if element is empty\\n */\\n handleEmpty: function (isEmpty) {\\n //do not handle empty if we do not display anything\\n if(this.options.display === false) {\\n return;\\n }\\n\\n /* \\n isEmpty may be set directly as param of method.\\n It is required when we enable/disable field and can't rely on content \\n as node content is text: \\\"Empty\\\" that is not empty %)\\n */\\n if(isEmpty !== undefined) { \\n this.isEmpty = isEmpty;\\n } else {\\n //detect empty\\n //for some inputs we need more smart check\\n //e.g. wysihtml5 may have $(this).data('editable')
to access to editable instance\\n \\n @event save \\n @param {Object} event event object\\n @param {Object} params additional params\\n @param {mixed} params.newValue submitted value\\n @param {Object} params.response ajax response\\n @example\\n $('#username').on('save', function(e, params) {\\n alert('Saved value: ' + params.newValue);\\n });\\n **/\\n //event itself is triggered by editableContainer. Description here is only for documentation \\n },\\n\\n validate: function () {\\n if (typeof this.options.validate === 'function') {\\n return this.options.validate.call(this, this.value);\\n }\\n },\\n \\n /**\\n Sets new value of editable\\n @method setValue(value, convertStr)\\n @param {mixed} value new value \\n @param {boolean} convertStr whether to convert value from string to internal format\\n **/ \\n setValue: function(value, convertStr, response) {\\n if(convertStr) {\\n this.value = this.input.str2value(value);\\n } else {\\n this.value = value;\\n }\\n if(this.container) {\\n this.container.option('value', this.value);\\n }\\n $.when(this.render(response))\\n .then($.proxy(function() {\\n this.handleEmpty();\\n }, this));\\n },\\n \\n /**\\n Activates input of visible container (e.g. set focus)\\n @method activate()\\n **/ \\n activate: function() {\\n if(this.container) {\\n this.container.activate(); \\n }\\n },\\n \\n /**\\n Removes editable feature from element\\n @method destroy()\\n **/ \\n destroy: function() {\\n this.disable();\\n \\n if(this.container) {\\n this.container.destroy(); \\n }\\n \\n this.input.destroy();\\n\\n if(this.options.toggle !== 'manual') {\\n this.$element.removeClass('editable-click');\\n this.$element.off(this.options.toggle + '.editable');\\n } \\n \\n this.$element.off(\\\"save.internal\\\");\\n \\n this.$element.removeClass('editable editable-open editable-disabled');\\n this.$element.removeData('editable');\\n } \\n };\\n\\n /* EDITABLE PLUGIN DEFINITION\\n * ======================= */\\n\\n /**\\n jQuery method to initialize editable element.\\n \\n @method $().editable(options)\\n @params {Object} options\\n @example\\n $('#username').editable({\\n type: 'text',\\n url: '/post',\\n pk: 1\\n });\\n **/\\n $.fn.editable = function (option) {\\n //special API methods returning non-jquery object\\n var result = {}, args = arguments, datakey = 'editable';\\n switch (option) {\\n /**\\n Runs client-side validation for all matched editables\\n \\n @method validate()\\n @returns {Object} validation errors map\\n @example\\n $('#username, #fullname').editable('validate');\\n // possible result:\\n {\\n username: \\\"username is required\\\",\\n fullname: \\\"fullname should be minimum 3 letters length\\\"\\n }\\n **/\\n case 'validate':\\n this.each(function () {\\n var $this = $(this), data = $this.data(datakey), error;\\n if (data && (error = data.validate())) {\\n result[data.options.name] = error;\\n }\\n });\\n return result;\\n\\n /**\\n Returns current values of editable elements. \\n Note that it returns an **object** with name-value pairs, not a value itself. It allows to get data from several elements. \\n If value of some editable is `null` or `undefined` it is excluded from result object.\\n When param `isSingle` is set to **true** - it is supposed you have single element and will return value of editable instead of object. \\n \\n @method getValue()\\n @param {bool} isSingle whether to return just value of single element\\n @returns {Object} object of element names and values\\n @example\\n $('#username, #fullname').editable('getValue');\\n //result:\\n {\\n username: \\\"superuser\\\",\\n fullname: \\\"John\\\"\\n }\\n //isSingle = true\\n $('#username').editable('getValue', true);\\n //result \\\"superuser\\\" \\n **/\\n case 'getValue':\\n if(arguments.length === 2 && arguments[1] === true) { //isSingle = true\\n result = this.eq(0).data(datakey).value;\\n } else {\\n this.each(function () {\\n var $this = $(this), data = $this.data(datakey);\\n if (data && data.value !== undefined && data.value !== null) {\\n result[data.options.name] = data.input.value2submit(data.value);\\n }\\n });\\n }\\n return result;\\n\\n /**\\n This method collects values from several editable elements and submit them all to server. \\n Internally it runs client-side validation for all fields and submits only in case of success. \\n See creating new records for details. \\n Since 1.5.1 `submit` can be applied to single element to send data programmatically. In that case\\n `url`, `success` and `error` is taken from initial options and you can just call `$('#username').editable('submit')`. \\n \\n @method submit(options)\\n @param {object} options \\n @param {object} options.url url to submit data \\n @param {object} options.data additional data to submit\\n @param {object} options.ajaxOptions additional ajax options\\n @param {function} options.error(obj) error handler \\n @param {function} options.success(obj,config) success handler\\n @returns {Object} jQuery object\\n **/\\n case 'submit': //collects value, validate and submit to server for creating new record\\n var config = arguments[1] || {},\\n $elems = this,\\n errors = this.editable('validate');\\n\\n // validation ok\\n if($.isEmptyObject(errors)) {\\n var ajaxOptions = {};\\n \\n // for single element use url, success etc from options\\n if($elems.length === 1) {\\n var editable = $elems.data('editable');\\n //standard params\\n var params = {\\n name: editable.options.name || '',\\n value: editable.input.value2submit(editable.value),\\n pk: (typeof editable.options.pk === 'function') ? \\n editable.options.pk.call(editable.options.scope) : \\n editable.options.pk \\n };\\n\\n //additional params\\n if(typeof editable.options.params === 'function') {\\n params = editable.options.params.call(editable.options.scope, params); \\n } else {\\n //try parse json in single quotes (from data-params attribute)\\n editable.options.params = $.fn.editableutils.tryParseJson(editable.options.params, true); \\n $.extend(params, editable.options.params);\\n }\\n\\n ajaxOptions = {\\n url: editable.options.url,\\n data: params,\\n type: 'POST' \\n };\\n \\n // use success / error from options \\n config.success = config.success || editable.options.success;\\n config.error = config.error || editable.options.error;\\n \\n // multiple elements\\n } else {\\n var values = this.editable('getValue'); \\n \\n ajaxOptions = {\\n url: config.url,\\n data: values, \\n type: 'POST'\\n }; \\n } \\n\\n // ajax success callabck (response 200 OK)\\n ajaxOptions.success = typeof config.success === 'function' ? function(response) {\\n config.success.call($elems, response, config);\\n } : $.noop;\\n \\n // ajax error callabck\\n ajaxOptions.error = typeof config.error === 'function' ? function() {\\n config.error.apply($elems, arguments);\\n } : $.noop;\\n \\n // extend ajaxOptions \\n if(config.ajaxOptions) { \\n $.extend(ajaxOptions, config.ajaxOptions);\\n }\\n \\n // extra data \\n if(config.data) {\\n $.extend(ajaxOptions.data, config.data);\\n } \\n \\n // perform ajax request\\n $.ajax(ajaxOptions);\\n } else { //client-side validation error\\n if(typeof config.error === 'function') {\\n config.error.call($elems, errors);\\n }\\n }\\n return this;\\n }\\n\\n //return jquery object\\n return this.each(function () {\\n var $this = $(this), \\n data = $this.data(datakey), \\n options = typeof option === 'object' && option;\\n\\n //for delegated targets do not store `editable` object for element\\n //it's allows several different selectors.\\n //see: https://github.com/vitalets/x-editable/issues/312 \\n if(options && options.selector) {\\n data = new Editable(this, options);\\n return; \\n } \\n \\n if (!data) {\\n $this.data(datakey, (data = new Editable(this, options)));\\n }\\n\\n if (typeof option === 'string') { //call method \\n data[option].apply(data, Array.prototype.slice.call(args, 1));\\n } \\n });\\n }; \\n \\n\\n $.fn.editable.defaults = {\\n /**\\n Type of input. Can be text|textarea|select|date|checklist
and more\\n\\n @property type \\n @type string\\n @default 'text'\\n **/\\n type: 'text', \\n /**\\n Sets disabled state of editable\\n\\n @property disabled \\n @type boolean\\n @default false\\n **/ \\n disabled: false,\\n /**\\n How to toggle editable. Can be click|dblclick|mouseenter|manual
. \\n When set to manual
you should manually call show/hide
methods of editable. \\n **Note**: if you call show
or toggle
inside **click** handler of some DOM element, \\n you need to apply e.stopPropagation()
because containers are being closed on any click on document.\\n \\n @example\\n $('#edit-button').click(function(e) {\\n e.stopPropagation();\\n $('#username').editable('toggle');\\n });\\n\\n @property toggle \\n @type string\\n @default 'click'\\n **/ \\n toggle: 'click',\\n /**\\n Text shown when element is empty.\\n\\n @property emptytext \\n @type string\\n @default 'Empty'\\n **/ \\n emptytext: 'Empty',\\n /**\\n Allows to automatically set element's text based on it's value. Can be auto|always|never
. Useful for select and date.\\n For example, if dropdown list is {1: 'a', 2: 'b'}
and element's value set to 1
, it's html will be automatically set to 'a'
. \\n auto
- text will be automatically set only if element is empty. \\n always|never
- always(never) try to set element's text.\\n\\n @property autotext \\n @type string\\n @default 'auto'\\n **/ \\n autotext: 'auto', \\n /**\\n Initial value of input. If not set, taken from element's text. \\n Note, that if element's text is empty - text is automatically generated from value and can be customized (see `autotext` option). \\n For example, to display currency sign:\\n @example\\n \\n \\n \\n @property value \\n @type mixed\\n @default element's text\\n **/\\n value: null,\\n /**\\n Callback to perform custom displaying of value in element's text. \\n If `null`, default input's display used. \\n If `false`, no displaying methods will be called, element's text will never change. \\n Runs under element's scope. \\n _**Parameters:**_ \\n \\n * `value` current value to be displayed\\n * `response` server response (if display called after ajax submit), since 1.4.0\\n \\n For _inputs with source_ (select, checklist) parameters are different: \\n \\n * `value` current value to be displayed\\n * `sourceData` array of items for current input (e.g. dropdown items) \\n * `response` server response (if display called after ajax submit), since 1.4.0\\n \\n To get currently selected items use `$.fn.editableutils.itemsByValue(value, sourceData)`.\\n \\n @property display \\n @type function|boolean\\n @default null\\n @since 1.2.0\\n @example\\n display: function(value, sourceData) {\\n //display checklist as comma-separated values\\n var html = [],\\n checked = $.fn.editableutils.itemsByValue(value, sourceData);\\n \\n if(checked.length) {\\n $.each(checked, function(i, v) { html.push($.fn.editableutils.escape(v.text)); });\\n $(this).html(html.join(', '));\\n } else {\\n $(this).empty(); \\n }\\n }\\n **/ \\n display: null,\\n /**\\n Css class applied when editable text is empty.\\n\\n @property emptyclass \\n @type string\\n @since 1.4.1 \\n @default editable-empty\\n **/ \\n emptyclass: 'editable-empty',\\n /**\\n Css class applied when value was stored but not sent to server (`pk` is empty or `send = 'never'`). \\n You may set it to `null` if you work with editables locally and submit them together. \\n\\n @property unsavedclass \\n @type string\\n @since 1.4.1 \\n @default editable-unsaved\\n **/ \\n unsavedclass: 'editable-unsaved',\\n /**\\n If selector is provided, editable will be delegated to the specified targets. \\n Usefull for dynamically generated DOM elements. \\n **Please note**, that delegated targets can't be initialized with `emptytext` and `autotext` options, \\n as they actually become editable only after first click. \\n You should manually set class `editable-click` to these elements. \\n Also, if element originally empty you should add class `editable-empty`, set `data-value=\\\"\\\"` and write emptytext into element:\\n\\n @property selector \\n @type string\\n @since 1.4.1 \\n @default null\\n @example\\n \\n \\n \\n **/ \\n selector: null,\\n /**\\n Color used to highlight element after update. Implemented via CSS3 transition, works in modern browsers.\\n \\n @property highlight \\n @type string|boolean\\n @since 1.4.5 \\n @default #FFFF80 \\n **/\\n highlight: '#FFFF80'\\n };\\n \\n // Return the jQuery object with attached editable functionality\\n return $;\\n}\\n\\n\\n//# sourceURL=webpack://EditableForm/./src/element/editable-element.js?\\n}\");\n\n/***/ }),\n\n/***/ \"./src/inputs/abstract.js\":\n/*!********************************!*\\\n !*** ./src/inputs/abstract.js ***!\n \\********************************/\n/***/ (() => {\n\neval(\"{/**\\nAbstractInput - base class for all editable inputs.\\nIt defines interface to be implemented by any input type.\\nTo create your own input you can inherit from this class.\\n\\n@class abstractinput\\n**/\\n\\nfunction attachAbstractInput($) {\\n \\\"use strict\\\";\\n\\n //types\\n $.fn.editabletypes = {};\\n\\n var AbstractInput = function () { };\\n\\n AbstractInput.prototype = {\\n /**\\n Initializes input\\n\\n @method init() \\n **/\\n init: function(type, options, defaults) {\\n this.type = type;\\n this.options = $.extend({}, defaults, options);\\n },\\n\\n /*\\n this method called before render to init $tpl that is inserted in DOM\\n */\\n prerender: function() {\\n this.$tpl = $(this.options.tpl); //whole tpl as jquery object \\n this.$input = this.$tpl; //control itself, can be changed in render method\\n this.$clear = null; //clear button\\n this.error = null; //error message, if input cannot be rendered \\n },\\n \\n /**\\n Renders input from tpl. Can return jQuery deferred object.\\n Can be overwritten in child objects\\n\\n @method render()\\n **/\\n render: function() {\\n\\n }, \\n\\n /**\\n Sets element's html by value. \\n\\n @method value2html(value, element)\\n @param {mixed} value\\n @param {DOMElement} element\\n **/\\n value2html: function(value, element) {\\n $(element)[this.options.escape ? 'text' : 'html'](value.trim());\\n },\\n\\n /**\\n Converts element's html to value\\n\\n @method html2value(html)\\n @param {string} html\\n @returns {mixed}\\n **/\\n html2value: function(html) {\\n return $('data-value
attribute.d, dd, m, mm, yy, yyyy
\\n\\n @property format \\n @type string\\n @default yyyy-mm-dd\\n **/\\n format:'yyyy-mm-dd',\\n /**\\n Format used for displaying date. Also applied when converting date from element's text on init. \\n If not specified equals to format
\\n\\n @property viewformat \\n @type string\\n @default null\\n **/\\n viewformat: null,\\n /**\\n Configuration of datepicker.\\n Full list of options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\\n\\n @property datepicker \\n @type object\\n @default {\\n weekStart: 0,\\n startView: 0,\\n minViewMode: 0,\\n autoclose: false\\n }\\n **/\\n datepicker:{\\n weekStart: 0,\\n startView: 0,\\n minViewMode: 0,\\n autoclose: false\\n },\\n /**\\n Text shown as clear date button. \\n If false
clear button will not be rendered.\\n\\n @property clear \\n @type boolean|string\\n @default 'x clear'\\n **/\\n clear: '× clear'\\n });\\n\\n $.fn.editabletypes.date = Date;\\n\\n return $;\\n}\\n\\n\\n//# sourceURL=webpack://EditableForm/./src/inputs/date/date.js?\\n}\");\n\n/***/ }),\n\n/***/ \"./src/inputs/date/datefield.js\":\n/*!**************************************!*\\\n !*** ./src/inputs/date/datefield.js ***!\n \\**************************************/\n/***/ (() => {\n\neval(\"{/**\\nBootstrap datefield input - modification for inline mode.\\nShows normal and binds popup datepicker. \\nAutomatically shown in inline mode.\\n\\n@class datefield\\n@extends date\\n\\n@since 1.4.0\\n**/\\nfunction attachDateField($) {\\n \\\"use strict\\\";\\n \\n var DateField = function (options) {\\n this.init('datefield', options, DateField.defaults);\\n this.initPicker(options, DateField.defaults);\\n \\n // Ensure type is set correctly\\n this.type = 'datefield';\\n };\\n\\n $.fn.editableutils.inherit(DateField, $.fn.editabletypes.date); \\n \\n $.extend(DateField.prototype, {\\n render: function () {\\n this.$input = this.$tpl.find('input');\\n this.setClass();\\n this.setAttr('placeholder');\\n \\n //use datepicker instead of bdatepicker \\n this.$tpl.datepicker(this.options.datepicker);\\n \\n //need to disable original event handlers\\n this.$input.off('focus keydown');\\n \\n // Hide buttons initially for datepicker workflow\\n var self = this;\\n setTimeout(function() {\\n if (!self.$form) {\\n // Find buttons in the broader DOM and hide them directly\\n var $allButtons = $('.editable-buttons:visible');\\n if ($allButtons.length > 0) {\\n $allButtons.each(function(i, btn) {\\n // Directly hide this button for datepicker\\n var $btn = $(btn);\\n $btn.hide();\\n $btn.css('display', 'none !important');\\n $btn.addClass('datepicker-hidden');\\n \\n // Store reference for later showing\\n self.$dateButtons = $btn;\\n });\\n }\\n }\\n }, 500);\\n \\n //update value of datepicker\\n this.$input.keyup($.proxy(function(){\\n this.$tpl.removeData('date');\\n this.$tpl.datepicker('update');\\n }, this));\\n \\n // Manually call autosubmit to set up our event handlers\\n this.autosubmit();\\n \\n }, \\n \\n value2input: function(value) {\\n var formattedValue = value ? this.dpg.formatDate(value, this.parsedViewFormat, this.options.datepicker.language) : '';\\n this.$input.val(formattedValue);\\n this.$tpl.datepicker('update');\\n },\\n \\n input2value: function() { \\n // First try the container datepicker (ideal case)\\n var containerDatepicker = this.$tpl.data('datepicker');\\n \\n if (containerDatepicker && containerDatepicker.dates && containerDatepicker.dates.length > 0) {\\n return containerDatepicker.dates[0];\\n }\\n \\n // Fallback: try the input datepicker (in case manual init worked)\\n var inputDatepicker = this.$input.data('datepicker');\\n \\n if (inputDatepicker && inputDatepicker.dates && inputDatepicker.dates.length > 0) {\\n return inputDatepicker.dates[0];\\n }\\n \\n // Try getDate methods\\n if (containerDatepicker && typeof containerDatepicker.getDate === 'function') {\\n var containerDate = containerDatepicker.getDate();\\n if (containerDate) {\\n return containerDate;\\n }\\n }\\n \\n if (inputDatepicker && typeof inputDatepicker.getDate === 'function') {\\n var inputDate = inputDatepicker.getDate();\\n if (inputDate) {\\n return inputDate;\\n }\\n }\\n \\n // Final fallback to text parsing\\n return this.html2value(this.$input.val());\\n }, \\n \\n activate: function() {\\n $.fn.editabletypes.text.prototype.activate.call(this);\\n },\\n \\n autosubmit: function() {\\n // Override default autosubmit behavior for datepicker workflow\\n // We handle this manually with changeDate event\\n \\n // Setup the manual workflow: show buttons only after date selection\\n this.$tpl.on('changeDate', $.proxy(function(e) {\\n // Hide the datepicker using multiple methods to ensure it closes\\n setTimeout($.proxy(function() {\\n // Try datepicker hide methods\\n try {\\n this.$tpl.datepicker('hide');\\n } catch(err) {\\n // Fallback to input method\\n }\\n \\n try {\\n this.$input.datepicker('hide');\\n } catch(err) {\\n // Continue to force methods\\n }\\n \\n // Force hide all datepicker elements\\n $('.datepicker').hide();\\n $('.datepicker-dropdown').hide();\\n \\n // Ensure any remaining visible datepickers are hidden\\n var $visiblePicker = $('.datepicker:visible, .datepicker-dropdown:visible');\\n if ($visiblePicker.length > 0) {\\n $visiblePicker.css('display', 'none !important');\\n $visiblePicker.css('visibility', 'hidden');\\n }\\n }, this), 10);\\n \\n // Show save/cancel buttons after date selection\\n setTimeout($.proxy(function() {\\n if (this.options.showbuttons !== false) {\\n var $buttons = this.$dateButtons || $('.editable-buttons.datepicker-hidden');\\n if ($buttons.length === 0) {\\n $buttons = this.$form ? this.$form.find('.editable-buttons') : $();\\n }\\n if ($buttons.length === 0) {\\n $buttons = this.$tpl.closest('.editableform').find('.editable-buttons');\\n }\\n if ($buttons.length === 0) {\\n $buttons = this.$tpl.closest('.editable-container').find('.editable-buttons');\\n }\\n \\n $buttons.show();\\n $buttons.css('display', 'inline-flex');\\n $buttons.addClass('show-buttons');\\n $buttons.removeClass('datepicker-hidden');\\n }\\n }, this), 100);\\n }, this));\\n \\n // Do NOT call parent autosubmit to prevent immediate form submission\\n }\\n });\\n \\n DateField.defaults = $.extend({}, $.fn.editabletypes.date.defaults, {\\n /**\\n @property tpl \\n **/ \\n tpl:'true
and source is **string url** - results will be cached for fields with the same source. \\n Usefull for editable column in grid to prevent extra requests.\\n \\n @property sourceCache \\n @type boolean\\n @default true\\n @since 1.2.0\\n **/ \\n sourceCache: true,\\n /**\\n Additional ajax options to be used in $.ajax() when loading list from server.\\n Useful to send extra parameters (`data` key) or change request method (`type` key).\\n \\n @property sourceOptions \\n @type object|function\\n @default null\\n @since 1.5.0\\n **/ \\n sourceOptions: null\\n });\\n\\n $.fn.editabletypes.list = List;\\n \\n return $;\\n}\\n\\n\\n//# sourceURL=webpack://EditableForm/./src/inputs/list.js?\\n}\");\n\n/***/ }),\n\n/***/ \"./src/inputs/select.js\":\n/*!******************************!*\\\n !*** ./src/inputs/select.js ***!\n \\******************************/\n/***/ (() => {\n\neval(\"{/**\\nSelect (dropdown)\\n\\n@class select\\n@extends list\\n@final\\n@example\\n\\n\\n**/\\nfunction attachSelect($) {\\n \\\"use strict\\\";\\n \\n var Select = function (options) {\\n this.init('select', options, Select.defaults);\\n };\\n\\n $.fn.editableutils.inherit(Select, $.fn.editabletypes.list);\\n\\n $.extend(Select.prototype, {\\n renderList: function() {\\n this.$input.empty();\\n\\n var fillItems = function($el, data) {\\n var attr;\\n if(Array.isArray(data)) {\\n for(var i=0; i