{"version":3,"sources":["webpack:///scripts/plugin--toggle-element-classes--6ac33a6ed4fe44e5f194.js","webpack:///./client/src/core/plugins/jquery__toggle-element-classes/plugin.js"],"names":["webpackJsonp","/home/vsts/work/1/s/src/SCF/node_modules/babel-loader/lib/index.js??ref--11-0!/home/vsts/work/1/s/src/SCF/node_modules/eslint-loader/index.js!/home/vsts/work/1/s/src/SCF/client/src/core/plugins/jquery__toggle-element-classes/plugin.js","module","exports","__webpack_require__","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","_jquery2","_jquery","_debug2","_debug","_lib2","_lib","log","PLUGIN_NAME","PluginKlass","element","options","this","$element","$classes","to","split","$targets","watch","value","on","delegate","toggle","document","filterEvents","boundEvent","fn","ignoreChildEvents","event","nodeName","toLowerCase","call","ctrlKey","metaKey","shiftKey","altKey","preventDefault","stopPropagation","$has","map","matching","selectors","selectTarget","attr","filter","item","includes","trigger","forEach","index","$target","removeClass","addClass","DEFAULTS"],"mappings":"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","file":"scripts/plugin--toggle-element-classes--6ac33a6ed4fe44e5f194.js","sourcesContent":["webpackJsonp([\"plugin--toggle-element-classes\"],{\n\n/***/ \"/home/vsts/work/1/s/src/SCF/node_modules/babel-loader/lib/index.js??ref--11-0!/home/vsts/work/1/s/src/SCF/node_modules/eslint-loader/index.js!/home/vsts/work/1/s/src/SCF/client/src/core/plugins/jquery__toggle-element-classes/plugin.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\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 Toggle Class\n \n ### Html Attributes\n \n ```\n data-toggle-element-classes\n data-toggle-element-classes--target=\"[(scoping-directive)] .valid-jquery > selector\"\n data-toggle-element-classes--on=\"valid jquery event name\"\n data-toggle-element-classes--remove=\"space separated class name(s)\"\n data-toggle-element-classes--remove-from=\"[(scoping-directive)] .valid-jquery > selector\"\n data-toggle-element-classes--delegate=\"true|false, bind event on element, or on document root\"\n data-toggle-element-classes--ignore-child-events=\"true|false, child triggers events\"\n data-toggle-element-classes--to=\"space separated class name(s)\"\n ```\n \n #### scoping directives\n \n Scoping directives control where or what direction in the dom the selector is applied\n \n - `(parent)` Find a parent\n - `(parents)` Find all parents\n - `(here)` Find siblings or descendants\n - `(siblings)` Find siblings\n \n \n Markup:\n {{#> Core.Styleguide.Box\n modifier_class=\"toggle-class-box u-align u-align--horizontal u-align--horizontal-center\"\n width=\"100%\" height=\"5rem\" grow=\"0\"}}\n \n \n \n {{/Core.Styleguide.Box}}\n \n Styleguide Global.Javascript.ToggleClass\n */\n\n\nvar _jquery = __webpack_require__(\"external \\\"jQuery\\\"\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _debug = __webpack_require__(\"/home/vsts/work/1/s/src/SCF/node_modules/babel-loader/lib/index.js??ref--11-0!/home/vsts/work/1/s/src/SCF/node_modules/eslint-loader/index.js!/home/vsts/work/1/s/src/SCF/node_modules/debug/src/browser.js\");\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _lib = __webpack_require__(\"/home/vsts/work/1/s/src/SCF/node_modules/babel-loader/lib/index.js??ref--11-0!/home/vsts/work/1/s/src/SCF/node_modules/eslint-loader/index.js!/home/vsts/work/1/s/src/SCF/client/src/core/plugins/lib/index.js\");\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _index = __webpack_require__(\"/home/vsts/work/1/s/src/SCF/node_modules/babel-loader/lib/index.js??ref--11-0!/home/vsts/work/1/s/src/SCF/node_modules/eslint-loader/index.js!/home/vsts/work/1/s/src/SCF/client/src/core/plugins/jquery__toggle-element-classes/index.js\");\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/' + _index.PLUGIN_NAME);\n\nvar PluginKlass = function () {\n function PluginKlass(element, options) {\n _classCallCheck(this, PluginKlass);\n\n this.element = element;\n this.$element = (0, _jquery2.default)(element);\n this.options = options;\n\n this.$classes = this.options.to.split(',') || [];\n this.$targets = this.options.target.split(',') || [];\n\n log('construct', element, options);\n\n this.watch();\n }\n\n _createClass(PluginKlass, [{\n key: 'watch',\n value: function watch() {\n var _options = this.options,\n on = _options.on,\n target = _options.target,\n delegate = _options.delegate;\n\n if (on === '(now)') {\n this.toggle();\n } else if (!delegate) {\n this.boundEvent = this.$element.on(on, this.filterEvents(this.toggle));\n } else {\n (0, _jquery2.default)(document).on(on, this.element, this.filterEvents(this.toggle));\n }\n log('watching', this.element, { on: on, target: target, delegate: delegate });\n }\n\n // filter non delegate events\n // allow default events (and do nothing) clicking with modifier key on links\n\n }, {\n key: 'filterEvents',\n value: function filterEvents(fn) {\n var _this = this;\n\n var ignoreChildEvents = this.options.ignoreChildEvents;\n\n return function (event) {\n if (ignoreChildEvents && event.target !== _this.element) {\n return;\n } else if (_this.element.nodeName.toLowerCase() !== 'a') {\n fn.call(_this);\n } else if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n return true;\n } else {\n event.preventDefault();\n fn.call(_this);\n }\n };\n }\n }, {\n key: 'toggle',\n value: function toggle(event) {\n var _this2 = this;\n\n var _options2 = this.options,\n target = _options2.target,\n to = _options2.to;\n\n\n if (this.options.preventDefault) {\n event.preventDefault();\n }\n\n if (this.options.stopPropagation) {\n event.stopPropagation();\n }\n\n // compile a list of targets that do or don't have it.\n // because next event could result in a remove class\n var $has = this.$targets.map(function (target) {\n var matching = _this2.selectors.selectTarget(target, _this2.$element).attr('class').split(' ').filter(function (item) {\n return _this2.$classes.includes(item);\n });\n return matching && matching.length > 0;\n });\n\n this.$element.trigger(_index.PLUGIN_NAME + '.before', this.options);\n this.$targets.forEach(function (target, index) {\n var $target = _this2.selectors.selectTarget(target, _this2.$element);\n var $classes = _this2.$classes[index];\n\n $target.trigger(_index.PLUGIN_NAME + '.beforeTarget', _this2.options);\n if ($has[index] && $classes) {\n log('toggle.remove', { $target: $target, $classes: $classes, $has: $has[index] });\n $target.removeClass($classes);\n } else if (!$has[index] && $classes) {\n log('toggle.add', { $target: $target, $classes: $classes, $has: $has[index] });\n $target.addClass($classes);\n }\n $target.trigger(_index.PLUGIN_NAME + '.afterTarget', _this2.options);\n log('toggle', _this2.options);\n });\n this.$element.trigger(_index.PLUGIN_NAME + '.after', this.options);\n\n if (this.options.preventDefault) {\n return false;\n }\n }\n }]);\n\n return PluginKlass;\n}();\n\nPluginKlass.DEFAULTS = {\n on: 'click', // event which current element is triggered\n target: '', // selector for the target to toggle classnames on\n to: '', // the classname to toggle\n delegate: false, // bind on element or use delegate events on document.\n ignoreChildEvents: false // whether or not child events trigger\n};\n\n(0, _lib2.default)(_index.PLUGIN_NAME, PluginKlass);\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// scripts/plugin--toggle-element-classes--6ac33a6ed4fe44e5f194.js","/*\nToggle Class\n\n### Html Attributes\n\n```\n data-toggle-element-classes\n data-toggle-element-classes--target=\"[(scoping-directive)] .valid-jquery > selector\"\n data-toggle-element-classes--on=\"valid jquery event name\"\n data-toggle-element-classes--remove=\"space separated class name(s)\"\n data-toggle-element-classes--remove-from=\"[(scoping-directive)] .valid-jquery > selector\"\n data-toggle-element-classes--delegate=\"true|false, bind event on element, or on document root\"\n data-toggle-element-classes--ignore-child-events=\"true|false, child triggers events\"\n data-toggle-element-classes--to=\"space separated class name(s)\"\n```\n\n#### scoping directives\n\nScoping directives control where or what direction in the dom the selector is applied\n\n- `(parent)` Find a parent\n- `(parents)` Find all parents\n- `(here)` Find siblings or descendants\n- `(siblings)` Find siblings\n\n\nMarkup:\n{{#> Core.Styleguide.Box\n modifier_class=\"toggle-class-box u-align u-align--horizontal u-align--horizontal-center\"\n width=\"100%\" height=\"5rem\" grow=\"0\"}}\n\n\n\n{{/Core.Styleguide.Box}}\n\nStyleguide Global.Javascript.ToggleClass\n*/\nimport $ from 'jquery';\n\nimport debug from 'debug';\nimport plugin from '@core/plugins/lib';\nimport { ELEMENT_SELECTOR, PLUGIN_NAME } from './index';\n\n\nconst log = debug(`plugins/${PLUGIN_NAME}`);\n\nclass PluginKlass {\n\n constructor(element, options) {\n this.element = element;\n this.$element = $(element);\n this.options = options;\n\n this.$classes = this.options.to.split(',') || [];\n this.$targets = this.options.target.split(',') || [];\n\n log('construct', element, options);\n\n this.watch();\n\n }\n\n watch () {\n const { on, target, delegate} = this.options;\n if (on === '(now)') {\n this.toggle();\n } else if (!delegate) {\n this.boundEvent = this.$element\n .on(on, this.filterEvents(this.toggle));\n } else {\n $(document)\n .on(on, this.element, this.filterEvents(this.toggle));\n }\n log('watching', this.element, { on, target, delegate });\n }\n\n\n\t// filter non delegate events\n\t// allow default events (and do nothing) clicking with modifier key on links\n\tfilterEvents(fn) {\n\t\tconst { ignoreChildEvents } = this.options;\n\t\treturn event => {\n\t\t\tif (ignoreChildEvents && event.target !== this.element) {\n\t\t\t\treturn;\n\t\t\t} else if (this.element.nodeName.toLowerCase() !== 'a') {\n\t\t\t\tfn.call(this);\n\t\t\t} else if (event.ctrlKey ||\n\t\t\t\tevent.metaKey ||\n\t\t\t\tevent.shiftKey ||\n\t\t\t\tevent.altKey) {\n\t\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tfn.call(this);\n\t\t\t}\n\t\t};\n\t}\n\n\n toggle (event) {\n const {\n target,\n to,\n } = this.options;\n\n if (this.options.preventDefault) {\n event.preventDefault();\n }\n\n if (this.options.stopPropagation) {\n event.stopPropagation();\n }\n\n // compile a list of targets that do or don't have it.\n // because next event could result in a remove class\n const $has = this.$targets.map(target => {\n const matching = this.selectors.selectTarget(target, this.$element)\n .attr('class')\n .split(' ')\n .filter(item => this.$classes.includes(item));\n return matching && matching.length > 0;\n });\n\n this.$element.trigger(`${PLUGIN_NAME}.before`, this.options);\n this.$targets.forEach((target, index) => {\n const $target = this.selectors.selectTarget(target, this.$element);\n const $classes = this.$classes[index];\n\n $target.trigger(`${PLUGIN_NAME}.beforeTarget`, this.options);\n if ($has[index] && $classes) {\n log('toggle.remove', { $target, $classes, $has: $has[index]});\n $target.removeClass($classes);\n } else if(!$has[index] && $classes) {\n log('toggle.add', {$target, $classes, $has: $has[index]});\n $target.addClass($classes);\n }\n $target.trigger(`${PLUGIN_NAME}.afterTarget`, this.options);\n log('toggle', this.options);\n\n });\n this.$element.trigger(`${PLUGIN_NAME}.after`, this.options);\n\n if (this.options.preventDefault) {\n return false;\n }\n\n }\n\n}\n\nPluginKlass.DEFAULTS = {\n on: 'click', // event which current element is triggered\n target: '', // selector for the target to toggle classnames on\n to: '', // the classname to toggle\n delegate: false, // bind on element or use delegate events on document.\n ignoreChildEvents: false, // whether or not child events trigger\n};\n\n\nplugin(PLUGIN_NAME, PluginKlass);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/core/plugins/jquery__toggle-element-classes/plugin.js"],"sourceRoot":""}