123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- /*!
- * bsCustomFileInput v1.3.2 (https://github.com/Johann-S/bs-custom-file-input)
- * Copyright 2018 - 2019 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.innerHTML;
- }
- 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.innerHTML = 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.innerHTML = 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
- document.addEventListener("DOMContentLoaded", function () {
- bsCustomFileInput.init()
- });
|