diff options
Diffstat (limited to 'build/resources/main/static/plugins/bs-custom-file-input/bs-custom-file-input.js')
-rw-r--r-- | build/resources/main/static/plugins/bs-custom-file-input/bs-custom-file-input.js | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/build/resources/main/static/plugins/bs-custom-file-input/bs-custom-file-input.js b/build/resources/main/static/plugins/bs-custom-file-input/bs-custom-file-input.js new file mode 100644 index 0000000..012425d --- /dev/null +++ b/build/resources/main/static/plugins/bs-custom-file-input/bs-custom-file-input.js @@ -0,0 +1,167 @@ +/*! + * bsCustomFileInput v1.3.4 (https://github.com/Johann-S/bs-custom-file-input) + * Copyright 2018 - 2020 Johann-S <johann.servoire@gmail.com> + * Licensed under MIT (https://github.com/Johann-S/bs-custom-file-input/blob/master/LICENSE) + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.bsCustomFileInput = factory()); +}(this, (function () { 'use strict'; + + var Selector = { + CUSTOMFILE: '.custom-file input[type="file"]', + CUSTOMFILELABEL: '.custom-file-label', + FORM: 'form', + INPUT: 'input' + }; + + var textNodeType = 3; + + var getDefaultText = function getDefaultText(input) { + var defaultText = ''; + var label = input.parentNode.querySelector(Selector.CUSTOMFILELABEL); + + if (label) { + defaultText = label.textContent; + } + + return defaultText; + }; + + var findFirstChildNode = function findFirstChildNode(element) { + if (element.childNodes.length > 0) { + var childNodes = [].slice.call(element.childNodes); + + for (var i = 0; i < childNodes.length; i++) { + var node = childNodes[i]; + + if (node.nodeType !== textNodeType) { + return node; + } + } + } + + return element; + }; + + var restoreDefaultText = function restoreDefaultText(input) { + var defaultText = input.bsCustomFileInput.defaultText; + var label = input.parentNode.querySelector(Selector.CUSTOMFILELABEL); + + if (label) { + var element = findFirstChildNode(label); + element.textContent = defaultText; + } + }; + + var fileApi = !!window.File; + var FAKE_PATH = 'fakepath'; + var FAKE_PATH_SEPARATOR = '\\'; + + var getSelectedFiles = function getSelectedFiles(input) { + if (input.hasAttribute('multiple') && fileApi) { + return [].slice.call(input.files).map(function (file) { + return file.name; + }).join(', '); + } + + if (input.value.indexOf(FAKE_PATH) !== -1) { + var splittedValue = input.value.split(FAKE_PATH_SEPARATOR); + return splittedValue[splittedValue.length - 1]; + } + + return input.value; + }; + + function handleInputChange() { + var label = this.parentNode.querySelector(Selector.CUSTOMFILELABEL); + + if (label) { + var element = findFirstChildNode(label); + var inputValue = getSelectedFiles(this); + + if (inputValue.length) { + element.textContent = inputValue; + } else { + restoreDefaultText(this); + } + } + } + + function handleFormReset() { + var customFileList = [].slice.call(this.querySelectorAll(Selector.INPUT)).filter(function (input) { + return !!input.bsCustomFileInput; + }); + + for (var i = 0, len = customFileList.length; i < len; i++) { + restoreDefaultText(customFileList[i]); + } + } + + var customProperty = 'bsCustomFileInput'; + var Event = { + FORMRESET: 'reset', + INPUTCHANGE: 'change' + }; + var bsCustomFileInput = { + init: function init(inputSelector, formSelector) { + if (inputSelector === void 0) { + inputSelector = Selector.CUSTOMFILE; + } + + if (formSelector === void 0) { + formSelector = Selector.FORM; + } + + var customFileInputList = [].slice.call(document.querySelectorAll(inputSelector)); + var formList = [].slice.call(document.querySelectorAll(formSelector)); + + for (var i = 0, len = customFileInputList.length; i < len; i++) { + var input = customFileInputList[i]; + Object.defineProperty(input, customProperty, { + value: { + defaultText: getDefaultText(input) + }, + writable: true + }); + handleInputChange.call(input); + input.addEventListener(Event.INPUTCHANGE, handleInputChange); + } + + for (var _i = 0, _len = formList.length; _i < _len; _i++) { + formList[_i].addEventListener(Event.FORMRESET, handleFormReset); + + Object.defineProperty(formList[_i], customProperty, { + value: true, + writable: true + }); + } + }, + destroy: function destroy() { + var formList = [].slice.call(document.querySelectorAll(Selector.FORM)).filter(function (form) { + return !!form.bsCustomFileInput; + }); + var customFileInputList = [].slice.call(document.querySelectorAll(Selector.INPUT)).filter(function (input) { + return !!input.bsCustomFileInput; + }); + + for (var i = 0, len = customFileInputList.length; i < len; i++) { + var input = customFileInputList[i]; + restoreDefaultText(input); + input[customProperty] = undefined; + input.removeEventListener(Event.INPUTCHANGE, handleInputChange); + } + + for (var _i2 = 0, _len2 = formList.length; _i2 < _len2; _i2++) { + formList[_i2].removeEventListener(Event.FORMRESET, handleFormReset); + + formList[_i2][customProperty] = undefined; + } + } + }; + + return bsCustomFileInput; + +}))); +//# sourceMappingURL=bs-custom-file-input.js.map |