summaryrefslogtreecommitdiff
path: root/build/resources/main/static/plugins/bs-custom-file-input/bs-custom-file-input.js
diff options
context:
space:
mode:
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.js167
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