{"version":3,"sources":["webpack:///scripts/plugin--collapsible--622f9ddcc03698c23f2c.js","webpack:///./project/client/src/core/modules/collapsible/collapsible-v1.1.0.js"],"names":["str001WebpackJsonp","/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/core/modules/collapsible/collapsible-v1.1.0.js","module","exports","__webpack_require__","_classCallCheck","instance","Constructor","TypeError","getJSONValue","stringValue","JSON","parse","error","Object","defineProperty","value","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","_debug","_debug2","obj","__esModule","default","log","Collapsible","element","options","this","scopes","document","contentSelectorIsId","contentSelector","contentSelectorScope","button","buttonSelector","querySelector","content","collapseWith","collapsedClass","split","toggleMethod","toggleWithClass","toggleWithHidden","attributeObserver","MutationObserver","onAttributeChange","bind","bindDocumentEvents","closeWithDocumentClick","bindDocumentClick","unbindDocumentEvents","unbindDocumentClick","init","watch","hidden","doCollapse","undefined","open","isCollapsed","addEventListener","toggle","observe","attributes","closeOnPageshow","window","handlePageShow","setAttribute","_this","forEach","className","classList","add","remove","selfClosing","close","dataset","collapsibleOpen","openedEvent","CustomEvent","onUncollapse","bubbles","cancelable","dispatchEvent","closedEvent","onCollapse","onDocumentClick","removeEventListener","event","persisted","clickTarget","contains","mutationList","observer","filter","mutation","type","attributeName","startsWith","onOpenChanged","DEFAULTS"],"mappings":"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","file":"scripts/plugin--collapsible--622f9ddcc03698c23f2c.js","sourcesContent":["str001WebpackJsonp([\"plugin--collapsible\"],{\n\n/***/ \"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/project/client/src/core/modules/collapsible/collapsible-v1.1.0.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _debug = __webpack_require__(\"/tool/node_modules/babel-loader/lib/index.js??ref--7-0!/tool/node_modules/eslint-loader/index.js!/tool/node_modules/debug/src/browser.js\");\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar log = (0, _debug2.default)('plugins/collapsible');\n\nfunction getJSONValue(stringValue) {\n\ttry {\n\t\treturn JSON.parse(stringValue);\n\t} catch (error) {\n\t\treturn stringValue;\n\t}\n}\n\nvar Collapsible = function () {\n\tfunction Collapsible(element, options) {\n\t\t_classCallCheck(this, Collapsible);\n\n\t\tthis.element = element;\n\t\tthis.options = options;\n\n\t\tlog('this.element:');\n\t\tlog(this.element);\n\t\tlog('this.options:');\n\t\tlog(this.options);\n\n\t\tvar scopes = {\n\t\t\tdocument: document,\n\t\t\telement: this.element\n\t\t};\n\n\t\t//\tLook for the content element within this element or elsewhere\n\t\tvar contentSelectorIsId = this.options.contentSelector && this.options.contentSelector[0] === \"#\";\n\n\t\tif (contentSelectorIsId) {\n\t\t\tthis.contentSelectorScope = scopes[\"document\"];\n\t\t} else {\n\t\t\tthis.contentSelectorScope = scopes[this.options.contentSelectorScope] ? scopes[this.options.contentSelectorScope] : scopes[\"element\"];\n\t\t}\n\n\t\t// if no button is specified perhaps this is the button\n\t\tthis.button = this.options.buttonSelector ? this.element.querySelector(this.options.buttonSelector) : this.element;\n\n\t\tif (!this.button) {\n\t\t\tlog('The provided button selector in data-collapsible-button-selector=\"' + this.options.buttonSelector + '\" failed to match a button. Aborting.');\n\t\t\treturn false;\n\t\t}\n\n\t\t// Content is optional\n\t\t//\twe may be toggling with CSS based on aria-expanded button attr\n\t\tthis.content = this.options.contentSelector && this.contentSelectorScope.querySelector(this.options.contentSelector);\n\t\tthis.collapseWith = this.options.collapsedClass ? \"class\" : \"hidden\";\n\n\t\t// Class could be multiple space separated classes\n\t\tthis.collapsedClass = this.options.collapsedClass && this.options.collapsedClass.split(\" \");\n\n\t\tthis.toggleMethod = this.collapseWith === \"class\" ? this.toggleWithClass : this.toggleWithHidden;\n\n\t\tthis.attributeObserver = new MutationObserver(this.onAttributeChange.bind(this));\n\n\t\tthis.bindDocumentEvents = this.options.closeWithDocumentClick ? this.bindDocumentClick : function () {};\n\n\t\tthis.unbindDocumentEvents = this.options.closeWithDocumentClick ? this.unbindDocumentClick : function () {};\n\n\t\tthis.init();\n\t\tthis.watch();\n\n\t\tlog('this.content:');\n\t\tlog(this.content);\n\t\tlog('this.collapsedClass:');\n\t\tlog(this.collapsedClass);\n\t\tlog('this.collapseWith:');\n\t\tlog(this.collapseWith);\n\t}\n\n\t_createClass(Collapsible, [{\n\t\tkey: 'init',\n\t\tvalue: function init() {\n\t\t\t// component enabled - show the button\n\t\t\tthis.button.hidden = false;\n\n\t\t\t// Determine initial collapse state\n\t\t\t//\tif set open option determines init state\n\t\t\tvar doCollapse = this.options.open !== undefined ? !this.options.open : true;\n\n\t\t\tthis.toggleMethod(doCollapse);\n\t\t\tthis.isCollapsed = doCollapse;\n\t\t}\n\t}, {\n\t\tkey: 'watch',\n\t\tvalue: function watch() {\n\t\t\tthis.button.addEventListener(\"click\", this.toggle.bind(this));\n\t\t\tthis.attributeObserver.observe(this.element, { attributes: true });\n\n\t\t\tif (this.content) {\n\t\t\t\tthis.content.addEventListener(\"escape\", this.toggle.bind(this));\n\t\t\t}\n\n\t\t\tif (this.options.closeOnPageshow === true) {\n\t\t\t\twindow.addEventListener('pageshow', this.handlePageShow.bind(this));\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'toggleWithHidden',\n\t\tvalue: function toggleWithHidden(doCollapse) {\n\t\t\tlog('toggleWithHidden doCollapse:' + doCollapse);\n\t\t\tthis.button.setAttribute(\"aria-expanded\", !doCollapse);\n\n\t\t\tlog('this.content:' + this.content);\n\t\t\tif (!this.content) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.content.hidden = doCollapse;\n\t\t}\n\t}, {\n\t\tkey: 'toggleWithClass',\n\t\tvalue: function toggleWithClass(doCollapse) {\n\t\t\tvar _this = this;\n\n\t\t\tlog('toggleWithClass doCollapse:' + doCollapse);\n\t\t\tthis.button.setAttribute(\"aria-expanded\", !doCollapse);\n\n\t\t\tlog('this.content:' + this.content);\n\t\t\tif (!this.content) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (doCollapse) {\n\t\t\t\tthis.collapsedClass.forEach(function (className) {\n\t\t\t\t\t_this.content.classList.add(className);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.collapsedClass.forEach(function (className) {\n\t\t\t\t\t_this.content.classList.remove(className);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// button click handler\n\n\t}, {\n\t\tkey: 'toggle',\n\t\tvalue: function toggle() {\n\t\t\tif (!this.options.selfClosing && !this.isCollapsed) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar handler = this.isCollapsed ? this.open.bind(this) : this.close.bind(this);\n\t\t\thandler();\n\t\t}\n\t}, {\n\t\tkey: 'open',\n\t\tvalue: function open() {\n\t\t\tthis.toggleMethod(false);\n\t\t\tthis.isCollapsed = false;\n\t\t\tthis.element.dataset.collapsibleOpen = true;\n\t\t\tthis.bindDocumentEvents();\n\n\t\t\tvar openedEvent = new CustomEvent(this.options.onUncollapse, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t\t// detail: {}\n\t\t\t});\n\n\t\t\tthis.element.dispatchEvent(openedEvent);\n\t\t}\n\t}, {\n\t\tkey: 'close',\n\t\tvalue: function close() {\n\t\t\tthis.toggleMethod(true);\n\t\t\tthis.isCollapsed = true;\n\t\t\tthis.element.dataset.collapsibleOpen = false;\n\t\t\tthis.unbindDocumentEvents();\n\n\t\t\tvar closedEvent = new CustomEvent(this.options.onCollapse, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\n\t\t\tthis.element.dispatchEvent(closedEvent);\n\t\t}\n\t}, {\n\t\tkey: 'bindDocumentClick',\n\t\tvalue: function bindDocumentClick() {\n\t\t\tdocument.addEventListener(\"click\", this.onDocumentClick.bind(this));\n\t\t}\n\t}, {\n\t\tkey: 'unbindDocumentClick',\n\t\tvalue: function unbindDocumentClick() {\n\t\t\tdocument.removeEventListener(\"click\", this.onDocumentClick);\n\t\t}\n\t}, {\n\t\tkey: 'handlePageShow',\n\t\tvalue: function handlePageShow(event) {\n\t\t\tif (event.persisted && this.isCollapsed === false) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'onDocumentClick',\n\t\tvalue: function onDocumentClick(event) {\n\t\t\tvar clickTarget = event.target;\n\n\t\t\t// clicked this.button\n\t\t\tif (clickTarget === this.button || this.button.contains(clickTarget)) {\n\t\t\t\tlog(\"clicked button\");\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// clicked this.content\n\t\t\tif (this.content && (clickTarget === this.content || this.content.contains(clickTarget))) {\n\t\t\t\tlog(\"clicked content or inside it\");\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.close();\n\t\t}\n\t}, {\n\t\tkey: 'onAttributeChange',\n\t\tvalue: function onAttributeChange(mutationList, observer) {\n\t\t\tmutationList.filter(function (mutation) {\n\t\t\t\treturn mutation.type === \"attributes\" && mutation.attributeName.startsWith(\"data-collapsible-open\");\n\t\t\t}).forEach(this.onOpenChanged.bind(this));\n\t\t}\n\t}, {\n\t\tkey: 'onOpenChanged',\n\t\tvalue: function onOpenChanged(mutation) {\n\t\t\tvar doCollapse = !getJSONValue(this.element.dataset.collapsibleOpen);\n\t\t\tif (this.isCollapsed !== doCollapse) {\n\t\t\t\tthis.toggleMethod(doCollapse);\n\t\t\t\tthis.isCollapsed = doCollapse;\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn Collapsible;\n}();\n\nCollapsible.DEFAULTS = {\n\tselfClosing: true,\n\tonCollapse: \"collapsibleClosed\",\n\tonUncollapse: \"collapsibleOpened\"\n};\n\nexports.default = Collapsible;\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// scripts/plugin--collapsible--622f9ddcc03698c23f2c.js","import debug from \"debug\";\r\nconst log = debug('plugins/collapsible');\r\n\r\nfunction getJSONValue(stringValue) {\r\n\ttry {\r\n\t\treturn JSON.parse(stringValue);\r\n\t} catch (error) {\r\n\t\treturn stringValue;\r\n\t}\r\n}\r\n\r\nclass Collapsible {\r\n\tconstructor(element, options) {\r\n\t\tthis.element = element;\r\n\t\tthis.options = options;\r\n\r\n log('this.element:');\r\n log(this.element);\r\n log('this.options:');\r\n log(this.options);\r\n\r\n\t\tconst scopes = {\r\n\t\t\tdocument: document,\r\n\t\t\telement: this.element,\r\n\t\t};\r\n\r\n\t\t//\tLook for the content element within this element or elsewhere\r\n\t\tconst contentSelectorIsId =\r\n\t\t\tthis.options.contentSelector &&\r\n\t\t\tthis.options.contentSelector[0] === \"#\";\r\n\r\n\t\tif (contentSelectorIsId) {\r\n\t\t\tthis.contentSelectorScope = scopes[\"document\"];\r\n\t\t} else {\r\n\t\t\tthis.contentSelectorScope = scopes[\r\n\t\t\t\tthis.options.contentSelectorScope\r\n\t\t\t]\r\n\t\t\t\t? scopes[this.options.contentSelectorScope]\r\n\t\t\t\t: scopes[\"element\"];\r\n\t\t}\r\n\r\n\t\t// if no button is specified perhaps this is the button\r\n\t\tthis.button = this.options.buttonSelector\r\n\t\t\t? this.element.querySelector(this.options.buttonSelector)\r\n\t\t\t: this.element;\r\n\r\n\t\tif(!this.button) {\r\n\t\t\tlog(`The provided button selector in data-collapsible-button-selector=\"${this.options.buttonSelector}\" failed to match a button. Aborting.`);\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Content is optional\r\n\t\t//\twe may be toggling with CSS based on aria-expanded button attr\r\n\t\tthis.content =\r\n\t\t\tthis.options.contentSelector &&\r\n\t\t\tthis.contentSelectorScope.querySelector(\r\n\t\t\t\tthis.options.contentSelector\r\n\t\t\t);\r\n\t\tthis.collapseWith = this.options.collapsedClass ? \"class\" : \"hidden\";\r\n\r\n\t\t// Class could be multiple space separated classes\r\n\t\tthis.collapsedClass =\r\n\t\t\tthis.options.collapsedClass &&\r\n\t\t\tthis.options.collapsedClass.split(\" \");\r\n\r\n\t\tthis.toggleMethod =\r\n\t\t\tthis.collapseWith === \"class\"\r\n\t\t\t\t? this.toggleWithClass\r\n\t\t\t\t: this.toggleWithHidden;\r\n\r\n\t\tthis.attributeObserver = new MutationObserver(\r\n\t\t\tthis.onAttributeChange.bind(this)\r\n\t\t);\r\n\r\n\t\tthis.bindDocumentEvents = this.options.closeWithDocumentClick\r\n\t\t\t? this.bindDocumentClick\r\n\t\t\t: function () {};\r\n\r\n\t\tthis.unbindDocumentEvents = this.options.closeWithDocumentClick\r\n\t\t\t? this.unbindDocumentClick\r\n\t\t\t: function () {};\r\n\r\n\t\tthis.init();\r\n\t\tthis.watch();\r\n\r\n log('this.content:');\r\n log(this.content);\r\n log('this.collapsedClass:');\r\n log(this.collapsedClass);\r\n log('this.collapseWith:');\r\n log(this.collapseWith);\r\n\t}\r\n\r\n\tinit() {\r\n\t\t// component enabled - show the button\r\n\t\tthis.button.hidden = false;\r\n\r\n\t\t// Determine initial collapse state\r\n\t\t//\tif set open option determines init state\r\n\t\tvar doCollapse =\r\n\t\t\tthis.options.open !== undefined ? !this.options.open : true;\r\n\r\n\t\tthis.toggleMethod(doCollapse);\r\n\t\tthis.isCollapsed = doCollapse;\r\n\t}\r\n\r\n\twatch() {\r\n\t\tthis.button.addEventListener(\"click\", this.toggle.bind(this));\r\n\t\tthis.attributeObserver.observe(this.element, { attributes: true });\r\n\r\n\t\tif (this.content) {\r\n\t\t\tthis.content.addEventListener(\"escape\", this.toggle.bind(this));\r\n\t\t}\r\n\r\n\t\tif (this.options.closeOnPageshow === true) {\r\n\t\t\twindow.addEventListener('pageshow', this.handlePageShow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleWithHidden(doCollapse) {\r\n log('toggleWithHidden doCollapse:'+doCollapse);\r\n\t\tthis.button.setAttribute(\"aria-expanded\", !doCollapse);\r\n\r\n log('this.content:'+this.content);\r\n\t\tif (!this.content) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis.content.hidden = doCollapse;\r\n\t}\r\n\r\n\ttoggleWithClass(doCollapse) {\r\n log('toggleWithClass doCollapse:'+doCollapse);\r\n\t\tthis.button.setAttribute(\"aria-expanded\", !doCollapse);\r\n\r\n log('this.content:'+this.content);\r\n\t\tif (!this.content) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (doCollapse) {\r\n\t\t\tthis.collapsedClass.forEach((className) => {\r\n\t\t\t\tthis.content.classList.add(className);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.collapsedClass.forEach((className) => {\r\n\t\t\t\tthis.content.classList.remove(className);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// button click handler\r\n\ttoggle() {\r\n\t\tif (!this.options.selfClosing && !this.isCollapsed) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst handler = this.isCollapsed\r\n\t\t\t? this.open.bind(this)\r\n\t\t\t: this.close.bind(this);\r\n\t\thandler();\r\n\t}\r\n\r\n\topen() {\r\n\t\tthis.toggleMethod(false);\r\n\t\tthis.isCollapsed = false;\r\n\t\tthis.element.dataset.collapsibleOpen = true;\r\n\t\tthis.bindDocumentEvents();\r\n\r\n\t\tconst openedEvent = new CustomEvent(this.options.onUncollapse, {\r\n\t\t\tbubbles: true,\r\n\t\t\tcancelable: true,\r\n\t\t\t// detail: {}\r\n\t\t});\r\n\r\n\t\tthis.element.dispatchEvent(openedEvent);\r\n\t}\r\n\r\n\tclose() {\r\n\t\tthis.toggleMethod(true);\r\n\t\tthis.isCollapsed = true;\r\n\t\tthis.element.dataset.collapsibleOpen = false;\r\n\t\tthis.unbindDocumentEvents();\r\n\r\n\t\tconst closedEvent = new CustomEvent(this.options.onCollapse, {\r\n\t\t\tbubbles: true,\r\n\t\t\tcancelable: true,\r\n\t\t});\r\n\r\n\t\tthis.element.dispatchEvent(closedEvent);\r\n\t}\r\n\r\n\tbindDocumentClick() {\r\n\t\tdocument.addEventListener(\"click\", this.onDocumentClick.bind(this));\r\n\t}\r\n\r\n\tunbindDocumentClick() {\r\n\t\tdocument.removeEventListener(\"click\", this.onDocumentClick);\r\n\t}\r\n\r\n\thandlePageShow(event){\r\n\t\tif (event.persisted && this.isCollapsed === false) {\r\n\t\t\tthis.close();\r\n\t\t}\r\n\t}\r\n\r\n\tonDocumentClick(event) {\r\n\t\tconst clickTarget = event.target;\r\n\r\n\t\t// clicked this.button\r\n\t\tif (clickTarget === this.button || this.button.contains(clickTarget)) {\r\n\t\t\tlog(\"clicked button\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// clicked this.content\r\n\t\tif (\r\n\t\t\tthis.content &&\r\n\t\t\t(clickTarget === this.content || this.content.contains(clickTarget))\r\n\t\t) {\r\n\t\t\tlog(\"clicked content or inside it\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.close();\r\n\t}\r\n\r\n\tonAttributeChange(mutationList, observer) {\r\n\t\tmutationList\r\n\t\t\t.filter((mutation) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tmutation.type === \"attributes\" &&\r\n\t\t\t\t\tmutation.attributeName.startsWith(\"data-collapsible-open\")\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t\t.forEach(this.onOpenChanged.bind(this));\r\n\t}\r\n\r\n\tonOpenChanged(mutation) {\r\n\t\tconst doCollapse = !getJSONValue(this.element.dataset.collapsibleOpen);\r\n\t\tif (this.isCollapsed !== doCollapse) {\r\n\t\t\tthis.toggleMethod(doCollapse);\r\n\t\t\tthis.isCollapsed = doCollapse;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nCollapsible.DEFAULTS = {\r\n\tselfClosing: true,\r\n\tonCollapse: \"collapsibleClosed\",\r\n\tonUncollapse: \"collapsibleOpened\",\r\n};\r\n\r\nexport default Collapsible;\r\n\n\n\n// WEBPACK FOOTER //\n// ./project/client/src/core/modules/collapsible/collapsible-v1.1.0.js"],"sourceRoot":""}