/*!
 * 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