fcef7f50c7f93494d425d80e56f9f78e.json
46.5 KB
{"ast":null,"code":"import snippet from 'tui-code-snippet';\nimport Colorpicker from './tools/colorpicker';\nimport Range from './tools/range';\nimport Submenu from './submenuBase';\nimport templateHtml from './template/submenu/filter';\nimport { toInteger, toCamelCase, assignmentForDestroy } from '../util';\nimport { defaultFilterRangeValus as FILTER_RANGE } from '../consts';\nconst PICKER_CONTROL_HEIGHT = '130px';\nconst BLEND_OPTIONS = ['add', 'diff', 'subtract', 'multiply', 'screen', 'lighten', 'darken'];\nconst FILTER_OPTIONS = ['grayscale', 'invert', 'sepia', 'vintage', 'blur', 'sharpen', 'emboss', 'remove-white', 'brightness', 'noise', 'pixelate', 'color-filter', 'tint', 'multiply', 'blend'];\nconst filterNameMap = {\n grayscale: 'grayscale',\n invert: 'invert',\n sepia: 'sepia',\n blur: 'blur',\n sharpen: 'sharpen',\n emboss: 'emboss',\n removeWhite: 'removeColor',\n brightness: 'brightness',\n contrast: 'contrast',\n saturation: 'saturation',\n vintage: 'vintage',\n polaroid: 'polaroid',\n noise: 'noise',\n pixelate: 'pixelate',\n colorFilter: 'removeColor',\n tint: 'blendColor',\n multiply: 'blendColor',\n blend: 'blendColor',\n hue: 'hue',\n gamma: 'gamma'\n};\nconst RANGE_INSTANCE_NAMES = ['removewhiteDistanceRange', 'colorfilterThresholeRange', 'pixelateRange', 'noiseRange', 'brightnessRange', 'tintOpacity'];\nconst COLORPICKER_INSTANCE_NAMES = ['filterBlendColor', 'filterMultiplyColor', 'filterTintColor'];\n/**\r\n * Filter ui class\r\n * @class\r\n * @ignore\r\n */\n\nclass Filter extends Submenu {\n constructor(subMenuElement, {\n locale,\n menuBarPosition,\n usageStatistics\n }) {\n super(subMenuElement, {\n locale,\n name: 'filter',\n menuBarPosition,\n templateHtml,\n usageStatistics\n });\n this.selectBoxShow = false;\n this.checkedMap = {};\n\n this._makeControlElement();\n }\n /**\r\n * Destroys the instance.\r\n */\n\n\n destroy() {\n this._removeEvent();\n\n this._destroyToolInstance();\n\n assignmentForDestroy(this);\n }\n /**\r\n * Remove event for filter\r\n */\n\n\n _removeEvent() {\n snippet.forEach(FILTER_OPTIONS, filter => {\n const filterCheckElement = this.selector(`.tie-${filter}`);\n const filterNameCamelCase = toCamelCase(filter);\n filterCheckElement.removeEventListener('change', this.eventHandler[filterNameCamelCase]);\n });\n snippet.forEach([...RANGE_INSTANCE_NAMES, ...COLORPICKER_INSTANCE_NAMES], instanceName => {\n this._els[instanceName].off();\n });\n\n this._els.blendType.removeEventListener('change', this.eventHandler.changeBlendFilter);\n\n this._els.blendType.removeEventListener('click', this.eventHandler.changeBlendFilter);\n }\n\n _destroyToolInstance() {\n snippet.forEach([...RANGE_INSTANCE_NAMES, ...COLORPICKER_INSTANCE_NAMES], instanceName => {\n this._els[instanceName].destroy();\n });\n }\n /**\r\n * Add event for filter\r\n * @param {Object} actions - actions for crop\r\n * @param {Function} actions.applyFilter - apply filter option\r\n */\n\n\n addEvent({\n applyFilter\n }) {\n const changeFilterState = filterName => this._changeFilterState.bind(this, applyFilter, filterName);\n\n const changeFilterStateForRange = filterName => (value, isLast) => this._changeFilterState(applyFilter, filterName, isLast);\n\n this.eventHandler = {\n changeBlendFilter: changeFilterState('blend'),\n blandTypeClick: event => event.stopPropagation()\n };\n snippet.forEach(FILTER_OPTIONS, filter => {\n const filterCheckElement = this.selector(`.tie-${filter}`);\n const filterNameCamelCase = toCamelCase(filter);\n this.checkedMap[filterNameCamelCase] = filterCheckElement;\n this.eventHandler[filterNameCamelCase] = changeFilterState(filterNameCamelCase);\n filterCheckElement.addEventListener('change', this.eventHandler[filterNameCamelCase]);\n });\n\n this._els.removewhiteDistanceRange.on('change', changeFilterStateForRange('removeWhite'));\n\n this._els.colorfilterThresholeRange.on('change', changeFilterStateForRange('colorFilter'));\n\n this._els.pixelateRange.on('change', changeFilterStateForRange('pixelate'));\n\n this._els.noiseRange.on('change', changeFilterStateForRange('noise'));\n\n this._els.brightnessRange.on('change', changeFilterStateForRange('brightness'));\n\n this._els.filterBlendColor.on('change', this.eventHandler.changeBlendFilter);\n\n this._els.filterMultiplyColor.on('change', changeFilterState('multiply'));\n\n this._els.filterTintColor.on('change', changeFilterState('tint'));\n\n this._els.tintOpacity.on('change', changeFilterStateForRange('tint'));\n\n this._els.filterMultiplyColor.on('changeShow', this.colorPickerChangeShow.bind(this));\n\n this._els.filterTintColor.on('changeShow', this.colorPickerChangeShow.bind(this));\n\n this._els.filterBlendColor.on('changeShow', this.colorPickerChangeShow.bind(this));\n\n this._els.blendType.addEventListener('change', this.eventHandler.changeBlendFilter);\n\n this._els.blendType.addEventListener('click', this.eventHandler.blandTypeClick);\n }\n /**\r\n * Set filter for undo changed\r\n * @param {Object} chagedFilterInfos - changed command infos\r\n * @param {string} type - filter type\r\n * @param {string} action - add or remove\r\n * @param {Object} options - filter options\r\n */\n\n\n setFilterState(chagedFilterInfos) {\n const {\n type,\n options,\n action\n } = chagedFilterInfos;\n\n const filterName = this._getFilterNameFromOptions(type, options);\n\n const isRemove = action === 'remove';\n\n if (!isRemove) {\n this._setFilterState(filterName, options);\n }\n\n this.checkedMap[filterName].checked = !isRemove;\n }\n /**\r\n * Set filter for undo changed\r\n * @param {string} filterName - filter name\r\n * @param {Object} options - filter options\r\n * @private\r\n */\n // eslint-disable-next-line complexity\n\n\n _setFilterState(filterName, options) {\n if (filterName === 'colorFilter') {\n this._els.colorfilterThresholeRange.value = options.distance;\n } else if (filterName === 'removeWhite') {\n this._els.removewhiteDistanceRange.value = options.distance;\n } else if (filterName === 'pixelate') {\n this._els.pixelateRange.value = options.blocksize;\n } else if (filterName === 'brightness') {\n this._els.brightnessRange.value = options.brightness;\n } else if (filterName === 'noise') {\n this._els.noiseRange.value = options.noise;\n } else if (filterName === 'tint') {\n this._els.tintOpacity.value = options.alpha;\n this._els.filterTintColor.color = options.color;\n } else if (filterName === 'blend') {\n this._els.filterBlendColor.color = options.color;\n } else if (filterName === 'multiply') {\n this._els.filterMultiplyColor.color = options.color;\n }\n }\n /**\r\n * Get filter name\r\n * @param {string} type - filter type\r\n * @param {Object} options - filter options\r\n * @returns {string} filter name\r\n * @private\r\n */\n\n\n _getFilterNameFromOptions(type, options) {\n let filterName = type;\n\n if (type === 'removeColor') {\n filterName = snippet.isExisty(options.useAlpha) ? 'removeWhite' : 'colorFilter';\n } else if (type === 'blendColor') {\n filterName = {\n add: 'blend',\n multiply: 'multiply',\n tint: 'tint'\n }[options.mode];\n }\n\n return filterName;\n }\n /**\r\n * Add event for filter\r\n * @param {Function} applyFilter - actions for firter\r\n * @param {string} filterName - filter name\r\n * @param {boolean} [isLast] - Is last change\r\n */\n\n\n _changeFilterState(applyFilter, filterName, isLast = true) {\n const apply = this.checkedMap[filterName].checked;\n const type = filterNameMap[filterName];\n const checkboxGroup = this.checkedMap[filterName].closest('.tui-image-editor-checkbox-group');\n\n if (checkboxGroup) {\n if (apply) {\n checkboxGroup.classList.remove('tui-image-editor-disabled');\n } else {\n checkboxGroup.classList.add('tui-image-editor-disabled');\n }\n }\n\n applyFilter(apply, type, this._getFilterOption(filterName), !isLast);\n }\n /**\r\n * Get filter option\r\n * @param {String} type - filter type\r\n * @returns {Object} filter option object\r\n * @private\r\n */\n // eslint-disable-next-line complexity\n\n\n _getFilterOption(type) {\n const option = {};\n\n switch (type) {\n case 'removeWhite':\n option.color = '#FFFFFF';\n option.useAlpha = false;\n option.distance = parseFloat(this._els.removewhiteDistanceRange.value);\n break;\n\n case 'colorFilter':\n option.color = '#FFFFFF';\n option.distance = parseFloat(this._els.colorfilterThresholeRange.value);\n break;\n\n case 'pixelate':\n option.blocksize = toInteger(this._els.pixelateRange.value);\n break;\n\n case 'noise':\n option.noise = toInteger(this._els.noiseRange.value);\n break;\n\n case 'brightness':\n option.brightness = parseFloat(this._els.brightnessRange.value);\n break;\n\n case 'blend':\n option.mode = 'add';\n option.color = this._els.filterBlendColor.color;\n option.mode = this._els.blendType.value;\n break;\n\n case 'multiply':\n option.mode = 'multiply';\n option.color = this._els.filterMultiplyColor.color;\n break;\n\n case 'tint':\n option.mode = 'tint';\n option.color = this._els.filterTintColor.color;\n option.alpha = this._els.tintOpacity.value;\n break;\n\n case 'blur':\n option.blur = this._els.blurRange.value;\n break;\n\n default:\n break;\n }\n\n return option;\n }\n /**\r\n * Make submenu range and colorpicker control\r\n * @private\r\n */\n\n\n _makeControlElement() {\n this._els = {\n removewhiteDistanceRange: new Range({\n slider: this.selector('.tie-removewhite-distance-range')\n }, FILTER_RANGE.removewhiteDistanceRange),\n brightnessRange: new Range({\n slider: this.selector('.tie-brightness-range')\n }, FILTER_RANGE.brightnessRange),\n noiseRange: new Range({\n slider: this.selector('.tie-noise-range')\n }, FILTER_RANGE.noiseRange),\n pixelateRange: new Range({\n slider: this.selector('.tie-pixelate-range')\n }, FILTER_RANGE.pixelateRange),\n colorfilterThresholeRange: new Range({\n slider: this.selector('.tie-colorfilter-threshole-range')\n }, FILTER_RANGE.colorfilterThresholeRange),\n filterTintColor: new Colorpicker(this.selector('.tie-filter-tint-color'), '#03bd9e', this.toggleDirection, this.usageStatistics),\n filterMultiplyColor: new Colorpicker(this.selector('.tie-filter-multiply-color'), '#515ce6', this.toggleDirection, this.usageStatistics),\n filterBlendColor: new Colorpicker(this.selector('.tie-filter-blend-color'), '#ffbb3b', this.toggleDirection, this.usageStatistics),\n blurRange: FILTER_RANGE.blurFilterRange\n };\n this._els.tintOpacity = this._pickerWithRange(this._els.filterTintColor.pickerControl);\n this._els.blendType = this._pickerWithSelectbox(this._els.filterBlendColor.pickerControl);\n this.colorPickerControls.push(this._els.filterTintColor);\n this.colorPickerControls.push(this._els.filterMultiplyColor);\n this.colorPickerControls.push(this._els.filterBlendColor);\n }\n /**\r\n * Make submenu control for picker & range mixin\r\n * @param {HTMLElement} pickerControl - pickerControl dom element\r\n * @returns {Range}\r\n * @private\r\n */\n\n\n _pickerWithRange(pickerControl) {\n const rangeWrap = document.createElement('div');\n const rangelabel = document.createElement('label');\n const slider = document.createElement('div');\n slider.id = 'tie-filter-tint-opacity';\n rangelabel.innerHTML = 'Opacity';\n rangeWrap.appendChild(rangelabel);\n rangeWrap.appendChild(slider);\n pickerControl.appendChild(rangeWrap);\n pickerControl.style.height = PICKER_CONTROL_HEIGHT;\n return new Range({\n slider\n }, FILTER_RANGE.tintOpacityRange);\n }\n /**\r\n * Make submenu control for picker & selectbox\r\n * @param {HTMLElement} pickerControl - pickerControl dom element\r\n * @returns {HTMLElement}\r\n * @private\r\n */\n\n\n _pickerWithSelectbox(pickerControl) {\n const selectlistWrap = document.createElement('div');\n const selectlist = document.createElement('select');\n const optionlist = document.createElement('ul');\n selectlistWrap.className = 'tui-image-editor-selectlist-wrap';\n optionlist.className = 'tui-image-editor-selectlist';\n selectlistWrap.appendChild(selectlist);\n selectlistWrap.appendChild(optionlist);\n\n this._makeSelectOptionList(selectlist);\n\n pickerControl.appendChild(selectlistWrap);\n pickerControl.style.height = PICKER_CONTROL_HEIGHT;\n\n this._drawSelectOptionList(selectlist, optionlist);\n\n this._pickerWithSelectboxForAddEvent(selectlist, optionlist);\n\n return selectlist;\n }\n /**\r\n * Make selectbox option list custom style\r\n * @param {HTMLElement} selectlist - selectbox element\r\n * @param {HTMLElement} optionlist - custom option list item element\r\n * @private\r\n */\n\n\n _drawSelectOptionList(selectlist, optionlist) {\n const options = selectlist.querySelectorAll('option');\n snippet.forEach(options, option => {\n const optionElement = document.createElement('li');\n optionElement.innerHTML = option.innerHTML;\n optionElement.setAttribute('data-item', option.value);\n optionlist.appendChild(optionElement);\n });\n }\n /**\r\n * custome selectbox custom event\r\n * @param {HTMLElement} selectlist - selectbox element\r\n * @param {HTMLElement} optionlist - custom option list item element\r\n * @private\r\n */\n\n\n _pickerWithSelectboxForAddEvent(selectlist, optionlist) {\n optionlist.addEventListener('click', event => {\n const optionValue = event.target.getAttribute('data-item');\n const fireEvent = document.createEvent('HTMLEvents');\n selectlist.querySelector(`[value=\"${optionValue}\"]`).selected = true;\n fireEvent.initEvent('change', true, true);\n selectlist.dispatchEvent(fireEvent);\n this.selectBoxShow = false;\n optionlist.style.display = 'none';\n });\n selectlist.addEventListener('mousedown', event => {\n event.preventDefault();\n this.selectBoxShow = !this.selectBoxShow;\n optionlist.style.display = this.selectBoxShow ? 'block' : 'none';\n optionlist.setAttribute('data-selectitem', selectlist.value);\n optionlist.querySelector(`[data-item='${selectlist.value}']`).classList.add('active');\n });\n }\n /**\r\n * Make option list for select control\r\n * @param {HTMLElement} selectlist - blend option select list element\r\n * @private\r\n */\n\n\n _makeSelectOptionList(selectlist) {\n snippet.forEach(BLEND_OPTIONS, option => {\n const selectOption = document.createElement('option');\n selectOption.setAttribute('value', option);\n selectOption.innerHTML = option.replace(/^[a-z]/, $0 => $0.toUpperCase());\n selectlist.appendChild(selectOption);\n });\n }\n\n}\n\nexport default Filter;","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/src/js/ui/filter.js"],"names":["snippet","Colorpicker","Range","Submenu","templateHtml","toInteger","toCamelCase","assignmentForDestroy","defaultFilterRangeValus","FILTER_RANGE","PICKER_CONTROL_HEIGHT","BLEND_OPTIONS","FILTER_OPTIONS","filterNameMap","grayscale","invert","sepia","blur","sharpen","emboss","removeWhite","brightness","contrast","saturation","vintage","polaroid","noise","pixelate","colorFilter","tint","multiply","blend","hue","gamma","RANGE_INSTANCE_NAMES","COLORPICKER_INSTANCE_NAMES","Filter","constructor","subMenuElement","locale","menuBarPosition","usageStatistics","name","selectBoxShow","checkedMap","_makeControlElement","destroy","_removeEvent","_destroyToolInstance","forEach","filter","filterCheckElement","selector","filterNameCamelCase","removeEventListener","eventHandler","instanceName","_els","off","blendType","changeBlendFilter","addEvent","applyFilter","changeFilterState","filterName","_changeFilterState","bind","changeFilterStateForRange","value","isLast","blandTypeClick","event","stopPropagation","addEventListener","removewhiteDistanceRange","on","colorfilterThresholeRange","pixelateRange","noiseRange","brightnessRange","filterBlendColor","filterMultiplyColor","filterTintColor","tintOpacity","colorPickerChangeShow","setFilterState","chagedFilterInfos","type","options","action","_getFilterNameFromOptions","isRemove","_setFilterState","checked","distance","blocksize","alpha","color","isExisty","useAlpha","add","mode","apply","checkboxGroup","closest","classList","remove","_getFilterOption","option","parseFloat","blurRange","slider","toggleDirection","blurFilterRange","_pickerWithRange","pickerControl","_pickerWithSelectbox","colorPickerControls","push","rangeWrap","document","createElement","rangelabel","id","innerHTML","appendChild","style","height","tintOpacityRange","selectlistWrap","selectlist","optionlist","className","_makeSelectOptionList","_drawSelectOptionList","_pickerWithSelectboxForAddEvent","querySelectorAll","optionElement","setAttribute","optionValue","target","getAttribute","fireEvent","createEvent","querySelector","selected","initEvent","dispatchEvent","display","preventDefault","selectOption","replace","$0","toUpperCase"],"mappings":"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","sourcesContent":["import snippet from 'tui-code-snippet';\r\nimport Colorpicker from './tools/colorpicker';\r\nimport Range from './tools/range';\r\nimport Submenu from './submenuBase';\r\nimport templateHtml from './template/submenu/filter';\r\nimport { toInteger, toCamelCase, assignmentForDestroy } from '../util';\r\nimport { defaultFilterRangeValus as FILTER_RANGE } from '../consts';\r\n\r\nconst PICKER_CONTROL_HEIGHT = '130px';\r\nconst BLEND_OPTIONS = ['add', 'diff', 'subtract', 'multiply', 'screen', 'lighten', 'darken'];\r\nconst FILTER_OPTIONS = [\r\n 'grayscale',\r\n 'invert',\r\n 'sepia',\r\n 'vintage',\r\n 'blur',\r\n 'sharpen',\r\n 'emboss',\r\n 'remove-white',\r\n 'brightness',\r\n 'noise',\r\n 'pixelate',\r\n 'color-filter',\r\n 'tint',\r\n 'multiply',\r\n 'blend',\r\n];\r\n\r\nconst filterNameMap = {\r\n grayscale: 'grayscale',\r\n invert: 'invert',\r\n sepia: 'sepia',\r\n blur: 'blur',\r\n sharpen: 'sharpen',\r\n emboss: 'emboss',\r\n removeWhite: 'removeColor',\r\n brightness: 'brightness',\r\n contrast: 'contrast',\r\n saturation: 'saturation',\r\n vintage: 'vintage',\r\n polaroid: 'polaroid',\r\n noise: 'noise',\r\n pixelate: 'pixelate',\r\n colorFilter: 'removeColor',\r\n tint: 'blendColor',\r\n multiply: 'blendColor',\r\n blend: 'blendColor',\r\n hue: 'hue',\r\n gamma: 'gamma',\r\n};\r\n\r\nconst RANGE_INSTANCE_NAMES = [\r\n 'removewhiteDistanceRange',\r\n 'colorfilterThresholeRange',\r\n 'pixelateRange',\r\n 'noiseRange',\r\n 'brightnessRange',\r\n 'tintOpacity',\r\n];\r\nconst COLORPICKER_INSTANCE_NAMES = ['filterBlendColor', 'filterMultiplyColor', 'filterTintColor'];\r\n\r\n/**\r\n * Filter ui class\r\n * @class\r\n * @ignore\r\n */\r\nclass Filter extends Submenu {\r\n constructor(subMenuElement, { locale, menuBarPosition, usageStatistics }) {\r\n super(subMenuElement, {\r\n locale,\r\n name: 'filter',\r\n menuBarPosition,\r\n templateHtml,\r\n usageStatistics,\r\n });\r\n\r\n this.selectBoxShow = false;\r\n\r\n this.checkedMap = {};\r\n this._makeControlElement();\r\n }\r\n\r\n /**\r\n * Destroys the instance.\r\n */\r\n destroy() {\r\n this._removeEvent();\r\n this._destroyToolInstance();\r\n\r\n assignmentForDestroy(this);\r\n }\r\n\r\n /**\r\n * Remove event for filter\r\n */\r\n _removeEvent() {\r\n snippet.forEach(FILTER_OPTIONS, (filter) => {\r\n const filterCheckElement = this.selector(`.tie-${filter}`);\r\n const filterNameCamelCase = toCamelCase(filter);\r\n\r\n filterCheckElement.removeEventListener('change', this.eventHandler[filterNameCamelCase]);\r\n });\r\n\r\n snippet.forEach([...RANGE_INSTANCE_NAMES, ...COLORPICKER_INSTANCE_NAMES], (instanceName) => {\r\n this._els[instanceName].off();\r\n });\r\n\r\n this._els.blendType.removeEventListener('change', this.eventHandler.changeBlendFilter);\r\n this._els.blendType.removeEventListener('click', this.eventHandler.changeBlendFilter);\r\n }\r\n\r\n _destroyToolInstance() {\r\n snippet.forEach([...RANGE_INSTANCE_NAMES, ...COLORPICKER_INSTANCE_NAMES], (instanceName) => {\r\n this._els[instanceName].destroy();\r\n });\r\n }\r\n\r\n /**\r\n * Add event for filter\r\n * @param {Object} actions - actions for crop\r\n * @param {Function} actions.applyFilter - apply filter option\r\n */\r\n addEvent({ applyFilter }) {\r\n const changeFilterState = (filterName) =>\r\n this._changeFilterState.bind(this, applyFilter, filterName);\r\n const changeFilterStateForRange = (filterName) => (value, isLast) =>\r\n this._changeFilterState(applyFilter, filterName, isLast);\r\n\r\n this.eventHandler = {\r\n changeBlendFilter: changeFilterState('blend'),\r\n blandTypeClick: (event) => event.stopPropagation(),\r\n };\r\n\r\n snippet.forEach(FILTER_OPTIONS, (filter) => {\r\n const filterCheckElement = this.selector(`.tie-${filter}`);\r\n const filterNameCamelCase = toCamelCase(filter);\r\n this.checkedMap[filterNameCamelCase] = filterCheckElement;\r\n this.eventHandler[filterNameCamelCase] = changeFilterState(filterNameCamelCase);\r\n\r\n filterCheckElement.addEventListener('change', this.eventHandler[filterNameCamelCase]);\r\n });\r\n\r\n this._els.removewhiteDistanceRange.on('change', changeFilterStateForRange('removeWhite'));\r\n this._els.colorfilterThresholeRange.on('change', changeFilterStateForRange('colorFilter'));\r\n this._els.pixelateRange.on('change', changeFilterStateForRange('pixelate'));\r\n this._els.noiseRange.on('change', changeFilterStateForRange('noise'));\r\n this._els.brightnessRange.on('change', changeFilterStateForRange('brightness'));\r\n\r\n this._els.filterBlendColor.on('change', this.eventHandler.changeBlendFilter);\r\n this._els.filterMultiplyColor.on('change', changeFilterState('multiply'));\r\n this._els.filterTintColor.on('change', changeFilterState('tint'));\r\n this._els.tintOpacity.on('change', changeFilterStateForRange('tint'));\r\n this._els.filterMultiplyColor.on('changeShow', this.colorPickerChangeShow.bind(this));\r\n this._els.filterTintColor.on('changeShow', this.colorPickerChangeShow.bind(this));\r\n this._els.filterBlendColor.on('changeShow', this.colorPickerChangeShow.bind(this));\r\n\r\n this._els.blendType.addEventListener('change', this.eventHandler.changeBlendFilter);\r\n this._els.blendType.addEventListener('click', this.eventHandler.blandTypeClick);\r\n }\r\n\r\n /**\r\n * Set filter for undo changed\r\n * @param {Object} chagedFilterInfos - changed command infos\r\n * @param {string} type - filter type\r\n * @param {string} action - add or remove\r\n * @param {Object} options - filter options\r\n */\r\n setFilterState(chagedFilterInfos) {\r\n const { type, options, action } = chagedFilterInfos;\r\n const filterName = this._getFilterNameFromOptions(type, options);\r\n const isRemove = action === 'remove';\r\n\r\n if (!isRemove) {\r\n this._setFilterState(filterName, options);\r\n }\r\n\r\n this.checkedMap[filterName].checked = !isRemove;\r\n }\r\n\r\n /**\r\n * Set filter for undo changed\r\n * @param {string} filterName - filter name\r\n * @param {Object} options - filter options\r\n * @private\r\n */\r\n // eslint-disable-next-line complexity\r\n _setFilterState(filterName, options) {\r\n if (filterName === 'colorFilter') {\r\n this._els.colorfilterThresholeRange.value = options.distance;\r\n } else if (filterName === 'removeWhite') {\r\n this._els.removewhiteDistanceRange.value = options.distance;\r\n } else if (filterName === 'pixelate') {\r\n this._els.pixelateRange.value = options.blocksize;\r\n } else if (filterName === 'brightness') {\r\n this._els.brightnessRange.value = options.brightness;\r\n } else if (filterName === 'noise') {\r\n this._els.noiseRange.value = options.noise;\r\n } else if (filterName === 'tint') {\r\n this._els.tintOpacity.value = options.alpha;\r\n this._els.filterTintColor.color = options.color;\r\n } else if (filterName === 'blend') {\r\n this._els.filterBlendColor.color = options.color;\r\n } else if (filterName === 'multiply') {\r\n this._els.filterMultiplyColor.color = options.color;\r\n }\r\n }\r\n\r\n /**\r\n * Get filter name\r\n * @param {string} type - filter type\r\n * @param {Object} options - filter options\r\n * @returns {string} filter name\r\n * @private\r\n */\r\n _getFilterNameFromOptions(type, options) {\r\n let filterName = type;\r\n\r\n if (type === 'removeColor') {\r\n filterName = snippet.isExisty(options.useAlpha) ? 'removeWhite' : 'colorFilter';\r\n } else if (type === 'blendColor') {\r\n filterName = {\r\n add: 'blend',\r\n multiply: 'multiply',\r\n tint: 'tint',\r\n }[options.mode];\r\n }\r\n\r\n return filterName;\r\n }\r\n\r\n /**\r\n * Add event for filter\r\n * @param {Function} applyFilter - actions for firter\r\n * @param {string} filterName - filter name\r\n * @param {boolean} [isLast] - Is last change\r\n */\r\n _changeFilterState(applyFilter, filterName, isLast = true) {\r\n const apply = this.checkedMap[filterName].checked;\r\n const type = filterNameMap[filterName];\r\n\r\n const checkboxGroup = this.checkedMap[filterName].closest('.tui-image-editor-checkbox-group');\r\n if (checkboxGroup) {\r\n if (apply) {\r\n checkboxGroup.classList.remove('tui-image-editor-disabled');\r\n } else {\r\n checkboxGroup.classList.add('tui-image-editor-disabled');\r\n }\r\n }\r\n applyFilter(apply, type, this._getFilterOption(filterName), !isLast);\r\n }\r\n\r\n /**\r\n * Get filter option\r\n * @param {String} type - filter type\r\n * @returns {Object} filter option object\r\n * @private\r\n */\r\n // eslint-disable-next-line complexity\r\n _getFilterOption(type) {\r\n const option = {};\r\n switch (type) {\r\n case 'removeWhite':\r\n option.color = '#FFFFFF';\r\n option.useAlpha = false;\r\n option.distance = parseFloat(this._els.removewhiteDistanceRange.value);\r\n break;\r\n case 'colorFilter':\r\n option.color = '#FFFFFF';\r\n option.distance = parseFloat(this._els.colorfilterThresholeRange.value);\r\n break;\r\n case 'pixelate':\r\n option.blocksize = toInteger(this._els.pixelateRange.value);\r\n break;\r\n case 'noise':\r\n option.noise = toInteger(this._els.noiseRange.value);\r\n break;\r\n case 'brightness':\r\n option.brightness = parseFloat(this._els.brightnessRange.value);\r\n break;\r\n case 'blend':\r\n option.mode = 'add';\r\n option.color = this._els.filterBlendColor.color;\r\n option.mode = this._els.blendType.value;\r\n break;\r\n case 'multiply':\r\n option.mode = 'multiply';\r\n option.color = this._els.filterMultiplyColor.color;\r\n break;\r\n case 'tint':\r\n option.mode = 'tint';\r\n option.color = this._els.filterTintColor.color;\r\n option.alpha = this._els.tintOpacity.value;\r\n break;\r\n case 'blur':\r\n option.blur = this._els.blurRange.value;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return option;\r\n }\r\n\r\n /**\r\n * Make submenu range and colorpicker control\r\n * @private\r\n */\r\n _makeControlElement() {\r\n this._els = {\r\n removewhiteDistanceRange: new Range(\r\n { slider: this.selector('.tie-removewhite-distance-range') },\r\n FILTER_RANGE.removewhiteDistanceRange\r\n ),\r\n brightnessRange: new Range(\r\n { slider: this.selector('.tie-brightness-range') },\r\n FILTER_RANGE.brightnessRange\r\n ),\r\n noiseRange: new Range({ slider: this.selector('.tie-noise-range') }, FILTER_RANGE.noiseRange),\r\n pixelateRange: new Range(\r\n { slider: this.selector('.tie-pixelate-range') },\r\n FILTER_RANGE.pixelateRange\r\n ),\r\n colorfilterThresholeRange: new Range(\r\n { slider: this.selector('.tie-colorfilter-threshole-range') },\r\n FILTER_RANGE.colorfilterThresholeRange\r\n ),\r\n filterTintColor: new Colorpicker(\r\n this.selector('.tie-filter-tint-color'),\r\n '#03bd9e',\r\n this.toggleDirection,\r\n this.usageStatistics\r\n ),\r\n filterMultiplyColor: new Colorpicker(\r\n this.selector('.tie-filter-multiply-color'),\r\n '#515ce6',\r\n this.toggleDirection,\r\n this.usageStatistics\r\n ),\r\n filterBlendColor: new Colorpicker(\r\n this.selector('.tie-filter-blend-color'),\r\n '#ffbb3b',\r\n this.toggleDirection,\r\n this.usageStatistics\r\n ),\r\n blurRange: FILTER_RANGE.blurFilterRange,\r\n };\r\n\r\n this._els.tintOpacity = this._pickerWithRange(this._els.filterTintColor.pickerControl);\r\n this._els.blendType = this._pickerWithSelectbox(this._els.filterBlendColor.pickerControl);\r\n\r\n this.colorPickerControls.push(this._els.filterTintColor);\r\n this.colorPickerControls.push(this._els.filterMultiplyColor);\r\n this.colorPickerControls.push(this._els.filterBlendColor);\r\n }\r\n\r\n /**\r\n * Make submenu control for picker & range mixin\r\n * @param {HTMLElement} pickerControl - pickerControl dom element\r\n * @returns {Range}\r\n * @private\r\n */\r\n _pickerWithRange(pickerControl) {\r\n const rangeWrap = document.createElement('div');\r\n const rangelabel = document.createElement('label');\r\n const slider = document.createElement('div');\r\n\r\n slider.id = 'tie-filter-tint-opacity';\r\n rangelabel.innerHTML = 'Opacity';\r\n rangeWrap.appendChild(rangelabel);\r\n rangeWrap.appendChild(slider);\r\n pickerControl.appendChild(rangeWrap);\r\n pickerControl.style.height = PICKER_CONTROL_HEIGHT;\r\n\r\n return new Range({ slider }, FILTER_RANGE.tintOpacityRange);\r\n }\r\n\r\n /**\r\n * Make submenu control for picker & selectbox\r\n * @param {HTMLElement} pickerControl - pickerControl dom element\r\n * @returns {HTMLElement}\r\n * @private\r\n */\r\n _pickerWithSelectbox(pickerControl) {\r\n const selectlistWrap = document.createElement('div');\r\n const selectlist = document.createElement('select');\r\n const optionlist = document.createElement('ul');\r\n\r\n selectlistWrap.className = 'tui-image-editor-selectlist-wrap';\r\n optionlist.className = 'tui-image-editor-selectlist';\r\n\r\n selectlistWrap.appendChild(selectlist);\r\n selectlistWrap.appendChild(optionlist);\r\n\r\n this._makeSelectOptionList(selectlist);\r\n\r\n pickerControl.appendChild(selectlistWrap);\r\n pickerControl.style.height = PICKER_CONTROL_HEIGHT;\r\n\r\n this._drawSelectOptionList(selectlist, optionlist);\r\n this._pickerWithSelectboxForAddEvent(selectlist, optionlist);\r\n\r\n return selectlist;\r\n }\r\n\r\n /**\r\n * Make selectbox option list custom style\r\n * @param {HTMLElement} selectlist - selectbox element\r\n * @param {HTMLElement} optionlist - custom option list item element\r\n * @private\r\n */\r\n _drawSelectOptionList(selectlist, optionlist) {\r\n const options = selectlist.querySelectorAll('option');\r\n snippet.forEach(options, (option) => {\r\n const optionElement = document.createElement('li');\r\n optionElement.innerHTML = option.innerHTML;\r\n optionElement.setAttribute('data-item', option.value);\r\n optionlist.appendChild(optionElement);\r\n });\r\n }\r\n\r\n /**\r\n * custome selectbox custom event\r\n * @param {HTMLElement} selectlist - selectbox element\r\n * @param {HTMLElement} optionlist - custom option list item element\r\n * @private\r\n */\r\n _pickerWithSelectboxForAddEvent(selectlist, optionlist) {\r\n optionlist.addEventListener('click', (event) => {\r\n const optionValue = event.target.getAttribute('data-item');\r\n const fireEvent = document.createEvent('HTMLEvents');\r\n\r\n selectlist.querySelector(`[value=\"${optionValue}\"]`).selected = true;\r\n fireEvent.initEvent('change', true, true);\r\n\r\n selectlist.dispatchEvent(fireEvent);\r\n\r\n this.selectBoxShow = false;\r\n optionlist.style.display = 'none';\r\n });\r\n\r\n selectlist.addEventListener('mousedown', (event) => {\r\n event.preventDefault();\r\n this.selectBoxShow = !this.selectBoxShow;\r\n optionlist.style.display = this.selectBoxShow ? 'block' : 'none';\r\n optionlist.setAttribute('data-selectitem', selectlist.value);\r\n optionlist.querySelector(`[data-item='${selectlist.value}']`).classList.add('active');\r\n });\r\n }\r\n\r\n /**\r\n * Make option list for select control\r\n * @param {HTMLElement} selectlist - blend option select list element\r\n * @private\r\n */\r\n _makeSelectOptionList(selectlist) {\r\n snippet.forEach(BLEND_OPTIONS, (option) => {\r\n const selectOption = document.createElement('option');\r\n selectOption.setAttribute('value', option);\r\n selectOption.innerHTML = option.replace(/^[a-z]/, ($0) => $0.toUpperCase());\r\n selectlist.appendChild(selectOption);\r\n });\r\n }\r\n}\r\n\r\nexport default Filter;\r\n"]},"metadata":{},"sourceType":"module"}