diff options
Diffstat (limited to 'app/assets/javascripts/droplab')
-rw-r--r-- | app/assets/javascripts/droplab/constants.js | 9 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/drop_down.js | 174 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/drop_lab.js | 160 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/hook.js | 15 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/hook_button.js | 60 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/hook_input.js | 117 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/keyboard.js | 122 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/plugins/ajax.js | 54 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/plugins/ajax_filter.js | 113 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/plugins/filter.js | 96 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/plugins/input_setter.js | 50 | ||||
-rw-r--r-- | app/assets/javascripts/droplab/utils.js | 40 |
12 files changed, 0 insertions, 1010 deletions
diff --git a/app/assets/javascripts/droplab/constants.js b/app/assets/javascripts/droplab/constants.js deleted file mode 100644 index 6451af49d36..00000000000 --- a/app/assets/javascripts/droplab/constants.js +++ /dev/null @@ -1,9 +0,0 @@ -const DATA_TRIGGER = 'data-dropdown-trigger'; -const DATA_DROPDOWN = 'data-dropdown'; -const SELECTED_CLASS = 'droplab-item-selected'; -const ACTIVE_CLASS = 'droplab-item-active'; -const IGNORE_CLASS = 'droplab-item-ignore'; -// Matches `{{anything}}` and `{{ everything }}`. -const TEMPLATE_REGEX = /\{\{(.+?)\}\}/g; - -export { DATA_TRIGGER, DATA_DROPDOWN, SELECTED_CLASS, ACTIVE_CLASS, TEMPLATE_REGEX, IGNORE_CLASS }; diff --git a/app/assets/javascripts/droplab/drop_down.js b/app/assets/javascripts/droplab/drop_down.js deleted file mode 100644 index 05b741af191..00000000000 --- a/app/assets/javascripts/droplab/drop_down.js +++ /dev/null @@ -1,174 +0,0 @@ -import { SELECTED_CLASS, IGNORE_CLASS } from './constants'; -import utils from './utils'; - -class DropDown { - constructor(list, config = {}) { - this.currentIndex = 0; - this.hidden = true; - this.list = typeof list === 'string' ? document.querySelector(list) : list; - this.items = []; - this.eventWrapper = {}; - this.hideOnClick = config.hideOnClick !== false; - - if (config.addActiveClassToDropdownButton) { - this.dropdownToggle = this.list.parentNode.querySelector('.js-dropdown-toggle'); - } - - this.getItems(); - this.initTemplateString(); - this.addEvents(); - - this.initialState = list.innerHTML; - } - - getItems() { - this.items = [].slice.call(this.list.querySelectorAll('li')); - return this.items; - } - - initTemplateString() { - const items = this.items || this.getItems(); - - let templateString = ''; - if (items.length > 0) templateString = items[items.length - 1].outerHTML; - this.templateString = templateString; - - return this.templateString; - } - - clickEvent(e) { - if (e.target.tagName === 'UL') return; - if (e.target.closest(`.${IGNORE_CLASS}`)) return; - - const selected = e.target.closest('li'); - if (!selected) return; - - this.addSelectedClass(selected); - - e.preventDefault(); - if (this.hideOnClick) { - this.hide(); - } - - const listEvent = new CustomEvent('click.dl', { - detail: { - list: this, - selected, - data: e.target.dataset, - }, - }); - this.list.dispatchEvent(listEvent); - } - - addSelectedClass(selected) { - this.removeSelectedClasses(); - selected.classList.add(SELECTED_CLASS); - } - - removeSelectedClasses() { - const items = this.items || this.getItems(); - - items.forEach((item) => item.classList.remove(SELECTED_CLASS)); - } - - addEvents() { - this.eventWrapper.clickEvent = this.clickEvent.bind(this); - this.eventWrapper.closeDropdown = this.closeDropdown.bind(this); - - this.list.addEventListener('click', this.eventWrapper.clickEvent); - this.list.addEventListener('keyup', this.eventWrapper.closeDropdown); - } - - closeDropdown(event) { - // `ESC` key closes the dropdown. - if (event.keyCode === 27) { - event.preventDefault(); - return this.toggle(); - } - - return true; - } - - setData(data) { - this.data = data; - this.render(data); - } - - addData(data) { - this.data = (this.data || []).concat(data); - this.render(this.data); - } - - render(data) { - const children = data ? data.map(this.renderChildren.bind(this)) : []; - - if (this.list.querySelector('.filter-dropdown-loading')) { - return; - } - - const renderableList = this.list.querySelector('ul[data-dynamic]') || this.list; - - renderableList.innerHTML = children.join(''); - - const listEvent = new CustomEvent('render.dl', { - detail: { - list: this, - }, - }); - this.list.dispatchEvent(listEvent); - } - - renderChildren(data) { - const html = utils.template(this.templateString, data); - const template = document.createElement('div'); - - template.innerHTML = html; - DropDown.setImagesSrc(template); - template.firstChild.style.display = data.droplab_hidden ? 'none' : 'block'; - - return template.firstChild.outerHTML; - } - - show() { - if (!this.hidden) return; - this.list.style.display = 'block'; - this.currentIndex = 0; - this.hidden = false; - - if (this.dropdownToggle) this.dropdownToggle.classList.add('active'); - } - - hide() { - if (this.hidden) return; - this.list.style.display = 'none'; - this.currentIndex = 0; - this.hidden = true; - - if (this.dropdownToggle) this.dropdownToggle.classList.remove('active'); - } - - toggle() { - if (this.hidden) return this.show(); - - return this.hide(); - } - - destroy() { - this.hide(); - this.list.removeEventListener('click', this.eventWrapper.clickEvent); - this.list.removeEventListener('keyup', this.eventWrapper.closeDropdown); - } - - static setImagesSrc(template) { - const images = [...template.querySelectorAll('img[data-src]')]; - - images.forEach((image) => { - const img = image; - - img.src = img.getAttribute('data-src'); - img.removeAttribute('data-src'); - }); - } -} - -export default DropDown; diff --git a/app/assets/javascripts/droplab/drop_lab.js b/app/assets/javascripts/droplab/drop_lab.js deleted file mode 100644 index 6f068aaa800..00000000000 --- a/app/assets/javascripts/droplab/drop_lab.js +++ /dev/null @@ -1,160 +0,0 @@ -import { DATA_TRIGGER } from './constants'; -import HookButton from './hook_button'; -import HookInput from './hook_input'; -import Keyboard from './keyboard'; -import utils from './utils'; - -class DropLab { - constructor() { - this.ready = false; - this.hooks = []; - this.queuedData = []; - this.config = {}; - - this.eventWrapper = {}; - } - - loadStatic() { - const dropdownTriggers = [].slice.apply(document.querySelectorAll(`[${DATA_TRIGGER}]`)); - this.addHooks(dropdownTriggers); - } - - addData(...args) { - this.applyArgs(args, 'processAddData'); - } - - setData(...args) { - this.applyArgs(args, 'processSetData'); - } - - destroy() { - this.hooks.forEach((hook) => hook.destroy()); - this.hooks = []; - this.removeEvents(); - } - - applyArgs(args, methodName) { - if (this.ready) return this[methodName](...args); - - this.queuedData = this.queuedData || []; - this.queuedData.push(args); - - return this.ready; - } - - processAddData(trigger, data) { - this.processData(trigger, data, 'addData'); - } - - processSetData(trigger, data) { - this.processData(trigger, data, 'setData'); - } - - processData(trigger, data, methodName) { - this.hooks.forEach((hook) => { - if (Array.isArray(trigger)) hook.list[methodName](trigger); - - if (hook.trigger.id === trigger) hook.list[methodName](data); - }); - } - - addEvents() { - this.eventWrapper.documentClicked = this.documentClicked.bind(this); - document.addEventListener('click', this.eventWrapper.documentClicked); - } - - documentClicked(e) { - if (e.defaultPrevented) return; - - if (utils.isDropDownParts(e.target)) return; - - if (e.target.tagName !== 'UL') { - const closestUl = utils.closest(e.target, 'UL'); - if (utils.isDropDownParts(closestUl)) return; - } - - this.hooks.forEach((hook) => hook.list.hide()); - } - - removeEvents() { - document.removeEventListener('click', this.eventWrapper.documentClicked); - } - - changeHookList(trigger, list, plugins, config) { - const availableTrigger = - typeof trigger === 'string' ? document.getElementById(trigger) : trigger; - - this.hooks.forEach((hook, i) => { - const aHook = hook; - - aHook.list.list.dataset.dropdownActive = false; - - if (aHook.trigger !== availableTrigger) return; - - aHook.destroy(); - this.hooks.splice(i, 1); - this.addHook(availableTrigger, list, plugins, config); - }); - } - - addHook(hook, list, plugins, config) { - const availableHook = typeof hook === 'string' ? document.querySelector(hook) : hook; - let availableList; - - if (typeof list === 'string') { - availableList = document.querySelector(list); - } else if (list instanceof Element) { - availableList = list; - } else { - availableList = document.querySelector(hook.dataset[utils.toCamelCase(DATA_TRIGGER)]); - } - - availableList.dataset.dropdownActive = true; - - const HookObject = availableHook.tagName === 'INPUT' ? HookInput : HookButton; - this.hooks.push(new HookObject(availableHook, availableList, plugins, config)); - - return this; - } - - addHooks(hooks, plugins, config) { - hooks.forEach((hook) => this.addHook(hook, null, plugins, config)); - return this; - } - - setConfig(obj) { - this.config = obj; - } - - fireReady() { - const readyEvent = new CustomEvent('ready.dl', { - detail: { - dropdown: this, - }, - }); - document.dispatchEvent(readyEvent); - - this.ready = true; - } - - init(hook, list, plugins, config) { - if (hook) { - this.addHook(hook, list, plugins, config); - } else { - this.loadStatic(); - } - - this.addEvents(); - - Keyboard(); - - this.fireReady(); - - this.queuedData.forEach((data) => this.addData(data)); - this.queuedData = []; - - return this; - } -} - -export default DropLab; diff --git a/app/assets/javascripts/droplab/hook.js b/app/assets/javascripts/droplab/hook.js deleted file mode 100644 index 8a8dcde9f88..00000000000 --- a/app/assets/javascripts/droplab/hook.js +++ /dev/null @@ -1,15 +0,0 @@ -import DropDown from './drop_down'; - -class Hook { - constructor(trigger, list, plugins, config) { - this.trigger = trigger; - this.list = new DropDown(list, config); - this.type = 'Hook'; - this.event = 'click'; - this.plugins = plugins || []; - this.config = config || {}; - this.id = trigger.id; - } -} - -export default Hook; diff --git a/app/assets/javascripts/droplab/hook_button.js b/app/assets/javascripts/droplab/hook_button.js deleted file mode 100644 index c51d6167fa3..00000000000 --- a/app/assets/javascripts/droplab/hook_button.js +++ /dev/null @@ -1,60 +0,0 @@ -import Hook from './hook'; - -class HookButton extends Hook { - constructor(trigger, list, plugins, config) { - super(trigger, list, plugins, config); - - this.type = 'button'; - this.event = 'click'; - - this.eventWrapper = {}; - - this.addEvents(); - this.addPlugins(); - } - - addPlugins() { - this.plugins.forEach((plugin) => plugin.init(this)); - } - - clicked(e) { - e.preventDefault(); - - const buttonEvent = new CustomEvent('click.dl', { - detail: { - hook: this, - }, - bubbles: true, - cancelable: true, - }); - e.target.dispatchEvent(buttonEvent); - - this.list.toggle(); - } - - addEvents() { - this.eventWrapper.clicked = this.clicked.bind(this); - this.trigger.addEventListener('click', this.eventWrapper.clicked); - } - - removeEvents() { - this.trigger.removeEventListener('click', this.eventWrapper.clicked); - } - - restoreInitialState() { - this.list.list.innerHTML = this.list.initialState; - } - - removePlugins() { - this.plugins.forEach((plugin) => plugin.destroy()); - } - - destroy() { - this.restoreInitialState(); - - this.removeEvents(); - this.removePlugins(); - } -} - -export default HookButton; diff --git a/app/assets/javascripts/droplab/hook_input.js b/app/assets/javascripts/droplab/hook_input.js deleted file mode 100644 index c523dae347f..00000000000 --- a/app/assets/javascripts/droplab/hook_input.js +++ /dev/null @@ -1,117 +0,0 @@ -import Hook from './hook'; - -class HookInput extends Hook { - constructor(trigger, list, plugins, config) { - super(trigger, list, plugins, config); - - this.type = 'input'; - this.event = 'input'; - - this.eventWrapper = {}; - - this.addEvents(); - this.addPlugins(); - } - - addPlugins() { - this.plugins.forEach((plugin) => plugin.init(this)); - } - - addEvents() { - this.eventWrapper.mousedown = this.mousedown.bind(this); - this.eventWrapper.input = this.input.bind(this); - this.eventWrapper.keyup = this.keyup.bind(this); - this.eventWrapper.keydown = this.keydown.bind(this); - - this.trigger.addEventListener('mousedown', this.eventWrapper.mousedown); - this.trigger.addEventListener('input', this.eventWrapper.input); - this.trigger.addEventListener('keyup', this.eventWrapper.keyup); - this.trigger.addEventListener('keydown', this.eventWrapper.keydown); - } - - removeEvents() { - this.hasRemovedEvents = true; - - this.trigger.removeEventListener('mousedown', this.eventWrapper.mousedown); - this.trigger.removeEventListener('input', this.eventWrapper.input); - this.trigger.removeEventListener('keyup', this.eventWrapper.keyup); - this.trigger.removeEventListener('keydown', this.eventWrapper.keydown); - } - - input(e) { - if (this.hasRemovedEvents) return; - - this.list.show(); - - const inputEvent = new CustomEvent('input.dl', { - detail: { - hook: this, - text: e.target.value, - }, - bubbles: true, - cancelable: true, - }); - e.target.dispatchEvent(inputEvent); - } - - mousedown(e) { - if (this.hasRemovedEvents) return; - - const mouseEvent = new CustomEvent('mousedown.dl', { - detail: { - hook: this, - text: e.target.value, - }, - bubbles: true, - cancelable: true, - }); - e.target.dispatchEvent(mouseEvent); - } - - keyup(e) { - if (this.hasRemovedEvents) return; - - this.keyEvent(e, 'keyup.dl'); - } - - keydown(e) { - if (this.hasRemovedEvents) return; - - this.keyEvent(e, 'keydown.dl'); - } - - keyEvent(e, eventName) { - this.list.show(); - - const keyEvent = new CustomEvent(eventName, { - detail: { - hook: this, - text: e.target.value, - which: e.which, - key: e.key, - }, - bubbles: true, - cancelable: true, - }); - e.target.dispatchEvent(keyEvent); - } - - restoreInitialState() { - this.list.list.innerHTML = this.list.initialState; - } - - removePlugins() { - this.plugins.forEach((plugin) => plugin.destroy()); - } - - destroy() { - this.restoreInitialState(); - - this.removeEvents(); - this.removePlugins(); - - this.list.destroy(); - } -} - -export default HookInput; diff --git a/app/assets/javascripts/droplab/keyboard.js b/app/assets/javascripts/droplab/keyboard.js deleted file mode 100644 index fe1ea2fa6b0..00000000000 --- a/app/assets/javascripts/droplab/keyboard.js +++ /dev/null @@ -1,122 +0,0 @@ -/* eslint-disable */ - -import { ACTIVE_CLASS } from './constants'; - -const Keyboard = function () { - var currentKey; - var currentFocus; - var isUpArrow = false; - var isDownArrow = false; - var removeHighlight = function removeHighlight(list) { - var itemElements = Array.prototype.slice.call( - list.list.querySelectorAll('li:not(.divider):not(.hidden)'), - 0, - ); - var listItems = []; - for (var i = 0; i < itemElements.length; i++) { - var listItem = itemElements[i]; - listItem.classList.remove(ACTIVE_CLASS); - - if (listItem.style.display !== 'none') { - listItems.push(listItem); - } - } - return listItems; - }; - - var setMenuForArrows = function setMenuForArrows(list) { - var listItems = removeHighlight(list); - if (list.currentIndex > 0) { - if (!listItems[list.currentIndex - 1]) { - list.currentIndex = list.currentIndex - 1; - } - - if (listItems[list.currentIndex - 1]) { - var el = listItems[list.currentIndex - 1]; - var filterDropdownEl = el.closest('.filter-dropdown'); - el.classList.add(ACTIVE_CLASS); - - if (filterDropdownEl) { - var filterDropdownBottom = filterDropdownEl.offsetHeight; - var elOffsetTop = el.offsetTop - 30; - - if (elOffsetTop > filterDropdownBottom) { - filterDropdownEl.scrollTop = elOffsetTop - filterDropdownBottom; - } - } - } - } - }; - - var mousedown = function mousedown(e) { - var list = e.detail.hook.list; - removeHighlight(list); - list.show(); - list.currentIndex = 0; - isUpArrow = false; - isDownArrow = false; - }; - var selectItem = function selectItem(list) { - var listItems = removeHighlight(list); - var currentItem = listItems[list.currentIndex - 1]; - var listEvent = new CustomEvent('click.dl', { - detail: { - list: list, - selected: currentItem, - data: currentItem.dataset, - }, - }); - list.list.dispatchEvent(listEvent); - list.hide(); - }; - - var keydown = function keydown(e) { - var typedOn = e.target; - var list = e.detail.hook.list; - var currentIndex = list.currentIndex; - isUpArrow = false; - isDownArrow = false; - - if (e.detail.which) { - currentKey = e.detail.which; - if (currentKey === 13) { - selectItem(e.detail.hook.list); - return; - } - if (currentKey === 38) { - isUpArrow = true; - } - if (currentKey === 40) { - isDownArrow = true; - } - } else if (e.detail.key) { - currentKey = e.detail.key; - if (currentKey === 'Enter') { - selectItem(e.detail.hook.list); - return; - } - if (currentKey === 'ArrowUp') { - isUpArrow = true; - } - if (currentKey === 'ArrowDown') { - isDownArrow = true; - } - } - if (isUpArrow) { - currentIndex--; - } - if (isDownArrow) { - currentIndex++; - } - if (currentIndex < 0) { - currentIndex = 0; - } - list.currentIndex = currentIndex; - setMenuForArrows(e.detail.hook.list); - }; - - document.addEventListener('mousedown.dl', mousedown); - document.addEventListener('keydown.dl', keydown); -}; - -export default Keyboard; diff --git a/app/assets/javascripts/droplab/plugins/ajax.js b/app/assets/javascripts/droplab/plugins/ajax.js deleted file mode 100644 index 77d60454d1a..00000000000 --- a/app/assets/javascripts/droplab/plugins/ajax.js +++ /dev/null @@ -1,54 +0,0 @@ -/* eslint-disable */ - -import AjaxCache from '~/lib/utils/ajax_cache'; - -const Ajax = { - _loadData: function _loadData(data, config, self) { - if (config.loadingTemplate) { - var dataLoadingTemplate = self.hook.list.list.querySelector('[data-loading-template]'); - if (dataLoadingTemplate) dataLoadingTemplate.outerHTML = self.listTemplate; - } - - if (!self.destroyed) self.hook.list[config.method].call(self.hook.list, data); - }, - preprocessing: function preprocessing(config, data) { - let results = data; - - if (config.preprocessing && !data.preprocessed) { - results = config.preprocessing(data); - AjaxCache.override(config.endpoint, results); - } - - return results; - }, - init: function init(hook) { - var self = this; - self.destroyed = false; - var config = hook.config.Ajax; - this.hook = hook; - if (!config || !config.endpoint || !config.method) { - return; - } - if (config.method !== 'setData' && config.method !== 'addData') { - return; - } - if (config.loadingTemplate) { - var dynamicList = hook.list.list.querySelector('[data-dynamic]'); - var loadingTemplate = document.createElement('div'); - loadingTemplate.innerHTML = config.loadingTemplate; - loadingTemplate.setAttribute('data-loading-template', ''); - this.listTemplate = dynamicList.outerHTML; - dynamicList.outerHTML = loadingTemplate.outerHTML; - } - - return AjaxCache.retrieve(config.endpoint) - .then(self.preprocessing.bind(null, config)) - .then((data) => self._loadData(data, config, self)) - .catch(config.onError); - }, - destroy: function () { - this.destroyed = true; - }, -}; - -export default Ajax; diff --git a/app/assets/javascripts/droplab/plugins/ajax_filter.js b/app/assets/javascripts/droplab/plugins/ajax_filter.js deleted file mode 100644 index ac4d44adc17..00000000000 --- a/app/assets/javascripts/droplab/plugins/ajax_filter.js +++ /dev/null @@ -1,113 +0,0 @@ -/* eslint-disable */ -import AjaxCache from '../../lib/utils/ajax_cache'; - -const AjaxFilter = { - init: function (hook) { - this.destroyed = false; - this.hook = hook; - this.notLoading(); - - this.eventWrapper = {}; - this.eventWrapper.debounceTrigger = this.debounceTrigger.bind(this); - this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceTrigger); - this.hook.trigger.addEventListener('focus', this.eventWrapper.debounceTrigger); - - this.trigger(true); - }, - - notLoading: function notLoading() { - this.loading = false; - }, - - debounceTrigger: function debounceTrigger(e) { - var NON_CHARACTER_KEYS = [16, 17, 18, 20, 37, 38, 39, 40, 91, 93]; - var invalidKeyPressed = NON_CHARACTER_KEYS.indexOf(e.detail.which || e.detail.keyCode) > -1; - var focusEvent = e.type === 'focus'; - if (invalidKeyPressed || this.loading) { - return; - } - if (this.timeout) { - clearTimeout(this.timeout); - } - this.timeout = setTimeout(this.trigger.bind(this, focusEvent), 200); - }, - - trigger: function trigger(getEntireList) { - var config = this.hook.config.AjaxFilter; - var searchValue = this.trigger.value; - if (!config || !config.endpoint || !config.searchKey) { - return; - } - if (config.searchValueFunction) { - searchValue = config.searchValueFunction(); - } - if ( - (config.loadingTemplate && this.hook.list.data === undefined) || - this.hook.list.data.length === 0 - ) { - var dynamicList = this.hook.list.list.querySelector('[data-dynamic]'); - var loadingTemplate = document.createElement('div'); - loadingTemplate.innerHTML = config.loadingTemplate; - loadingTemplate.setAttribute('data-loading-template', true); - this.listTemplate = dynamicList.outerHTML; - dynamicList.outerHTML = loadingTemplate.outerHTML; - } - if (getEntireList) { - searchValue = ''; - } - if (config.searchKey === searchValue) { - return this.list.show(); - } - this.loading = true; - var params = config.params || {}; - params[config.searchKey] = searchValue; - var url = config.endpoint + this.buildParams(params); - return AjaxCache.retrieve(url) - .then((data) => { - this._loadData(data, config); - if (config.onLoadingFinished) { - config.onLoadingFinished(data); - } - }) - .catch(config.onError); - }, - - _loadData(data, config) { - const list = this.hook.list; - if ((config.loadingTemplate && list.data === undefined) || list.data.length === 0) { - const dataLoadingTemplate = list.list.querySelector('[data-loading-template]'); - if (dataLoadingTemplate) { - dataLoadingTemplate.outerHTML = this.listTemplate; - } - } - if (!this.destroyed) { - var hookListChildren = list.list.children; - var onlyDynamicList = - hookListChildren.length === 1 && hookListChildren[0].hasAttribute('data-dynamic'); - if (onlyDynamicList && data.length === 0) { - list.hide(); - } - list.setData.call(list, data); - } - this.notLoading(); - list.currentIndex = 0; - }, - - buildParams: function (params) { - if (!params) return ''; - var paramsArray = Object.keys(params).map(function (param) { - return param + '=' + (params[param] || ''); - }); - return '?' + paramsArray.join('&'); - }, - - destroy: function destroy() { - if (this.timeout) clearTimeout(this.timeout); - this.destroyed = true; - - this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceTrigger); - this.hook.trigger.removeEventListener('focus', this.eventWrapper.debounceTrigger); - }, -}; - -export default AjaxFilter; diff --git a/app/assets/javascripts/droplab/plugins/filter.js b/app/assets/javascripts/droplab/plugins/filter.js deleted file mode 100644 index 06391668928..00000000000 --- a/app/assets/javascripts/droplab/plugins/filter.js +++ /dev/null @@ -1,96 +0,0 @@ -/* eslint-disable */ - -const Filter = { - keydown: function (e) { - if (this.destroyed) return; - - var hiddenCount = 0; - var dataHiddenCount = 0; - - var list = e.detail.hook.list; - var data = list.data; - var value = e.detail.hook.trigger.value.toLowerCase(); - var config = e.detail.hook.config.Filter; - var matches = []; - var filterFunction; - // will only work on dynamically set data - if (!data) { - return; - } - - if (config && config.filterFunction && typeof config.filterFunction === 'function') { - filterFunction = config.filterFunction; - } else { - filterFunction = function (o) { - // cheap string search - o.droplab_hidden = o[config.template].toLowerCase().indexOf(value) === -1; - return o; - }; - } - - dataHiddenCount = data.filter(function (o) { - return !o.droplab_hidden; - }).length; - - matches = data.map(function (o) { - return filterFunction(o, value); - }); - - hiddenCount = matches.filter(function (o) { - return !o.droplab_hidden; - }).length; - - if (dataHiddenCount !== hiddenCount) { - list.setData(matches); - list.currentIndex = 0; - } - }, - - debounceKeydown: function debounceKeydown(e) { - if ( - [ - 13, // enter - 16, // shift - 17, // ctrl - 18, // alt - 20, // caps lock - 37, // left arrow - 38, // up arrow - 39, // right arrow - 40, // down arrow - 91, // left window - 92, // right window - 93, // select - ].indexOf(e.detail.which || e.detail.keyCode) > -1 - ) - return; - - if (this.timeout) clearTimeout(this.timeout); - this.timeout = setTimeout(this.keydown.bind(this, e), 200); - }, - - init: function init(hook) { - var config = hook.config.Filter; - - if (!config || !config.template) return; - - this.hook = hook; - this.destroyed = false; - - this.eventWrapper = {}; - this.eventWrapper.debounceKeydown = this.debounceKeydown.bind(this); - - this.hook.trigger.addEventListener('keydown.dl', this.eventWrapper.debounceKeydown); - this.hook.trigger.addEventListener('mousedown.dl', this.eventWrapper.debounceKeydown); - }, - - destroy: function destroy() { - if (this.timeout) clearTimeout(this.timeout); - this.destroyed = true; - - this.hook.trigger.removeEventListener('keydown.dl', this.eventWrapper.debounceKeydown); - this.hook.trigger.removeEventListener('mousedown.dl', this.eventWrapper.debounceKeydown); - }, -}; - -export default Filter; diff --git a/app/assets/javascripts/droplab/plugins/input_setter.js b/app/assets/javascripts/droplab/plugins/input_setter.js deleted file mode 100644 index 148d9a35b81..00000000000 --- a/app/assets/javascripts/droplab/plugins/input_setter.js +++ /dev/null @@ -1,50 +0,0 @@ -/* eslint-disable */ - -const InputSetter = { - init(hook) { - this.hook = hook; - this.destroyed = false; - this.config = hook.config.InputSetter || (this.hook.config.InputSetter = {}); - - this.eventWrapper = {}; - - this.addEvents(); - }, - - addEvents() { - this.eventWrapper.setInputs = this.setInputs.bind(this); - this.hook.list.list.addEventListener('click.dl', this.eventWrapper.setInputs); - }, - - removeEvents() { - this.hook.list.list.removeEventListener('click.dl', this.eventWrapper.setInputs); - }, - - setInputs(e) { - if (this.destroyed) return; - - const selectedItem = e.detail.selected; - - if (!Array.isArray(this.config)) this.config = [this.config]; - - this.config.forEach((config) => this.setInput(config, selectedItem)); - }, - - setInput(config, selectedItem) { - const input = config.input || this.hook.trigger; - const newValue = selectedItem.getAttribute(config.valueAttribute); - const inputAttribute = config.inputAttribute; - - if (input.hasAttribute(inputAttribute)) return input.setAttribute(inputAttribute, newValue); - if (input.tagName === 'INPUT') return (input.value = newValue); - return (input.textContent = newValue); - }, - - destroy() { - this.destroyed = true; - - this.removeEvents(); - }, -}; - -export default InputSetter; diff --git a/app/assets/javascripts/droplab/utils.js b/app/assets/javascripts/droplab/utils.js deleted file mode 100644 index d7f49bf19d8..00000000000 --- a/app/assets/javascripts/droplab/utils.js +++ /dev/null @@ -1,40 +0,0 @@ -/* eslint-disable */ - -import { template as _template } from 'lodash'; -import { DATA_TRIGGER, DATA_DROPDOWN, TEMPLATE_REGEX } from './constants'; - -const utils = { - toCamelCase(attr) { - return this.camelize(attr.split('-').slice(1).join(' ')); - }, - - template(templateString, data) { - const template = _template(templateString, { - escape: TEMPLATE_REGEX, - }); - - return template(data); - }, - - camelize(str) { - return str - .replace(/(?:^\w|[A-Z]|\b\w)/g, (letter, index) => { - return index === 0 ? letter.toLowerCase() : letter.toUpperCase(); - }) - .replace(/\s+/g, ''); - }, - - closest(thisTag, stopTag) { - while (thisTag && thisTag.tagName !== stopTag && thisTag.tagName !== 'HTML') { - thisTag = thisTag.parentNode; - } - return thisTag; - }, - - isDropDownParts(target) { - if (!target || !target.hasAttribute || target.tagName === 'HTML') return false; - return target.hasAttribute(DATA_TRIGGER) || target.hasAttribute(DATA_DROPDOWN); - }, -}; - -export default utils; |