An unfinished system to manage all your paper documentation in an easy way.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

bs-custom-file-input.js 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /*!
  2. * bsCustomFileInput v1.3.2 (https://github.com/Johann-S/bs-custom-file-input)
  3. * Copyright 2018 - 2019 Johann-S <johann.servoire@gmail.com>
  4. * Licensed under MIT (https://github.com/Johann-S/bs-custom-file-input/blob/master/LICENSE)
  5. */
  6. (function (global, factory) {
  7. typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  8. typeof define === 'function' && define.amd ? define(factory) :
  9. (global = global || self, global.bsCustomFileInput = factory());
  10. }(this, function () { 'use strict';
  11. var Selector = {
  12. CUSTOMFILE: '.custom-file input[type="file"]',
  13. CUSTOMFILELABEL: '.custom-file-label',
  14. FORM: 'form',
  15. INPUT: 'input'
  16. };
  17. var textNodeType = 3;
  18. var getDefaultText = function getDefaultText(input) {
  19. var defaultText = '';
  20. var label = input.parentNode.querySelector(Selector.CUSTOMFILELABEL);
  21. if (label) {
  22. defaultText = label.innerHTML;
  23. }
  24. return defaultText;
  25. };
  26. var findFirstChildNode = function findFirstChildNode(element) {
  27. if (element.childNodes.length > 0) {
  28. var childNodes = [].slice.call(element.childNodes);
  29. for (var i = 0; i < childNodes.length; i++) {
  30. var node = childNodes[i];
  31. if (node.nodeType !== textNodeType) {
  32. return node;
  33. }
  34. }
  35. }
  36. return element;
  37. };
  38. var restoreDefaultText = function restoreDefaultText(input) {
  39. var defaultText = input.bsCustomFileInput.defaultText;
  40. var label = input.parentNode.querySelector(Selector.CUSTOMFILELABEL);
  41. if (label) {
  42. var element = findFirstChildNode(label);
  43. element.innerHTML = defaultText;
  44. }
  45. };
  46. var fileApi = !!window.File;
  47. var FAKE_PATH = 'fakepath';
  48. var FAKE_PATH_SEPARATOR = '\\';
  49. var getSelectedFiles = function getSelectedFiles(input) {
  50. if (input.hasAttribute('multiple') && fileApi) {
  51. return [].slice.call(input.files).map(function (file) {
  52. return file.name;
  53. }).join(', ');
  54. }
  55. if (input.value.indexOf(FAKE_PATH) !== -1) {
  56. var splittedValue = input.value.split(FAKE_PATH_SEPARATOR);
  57. return splittedValue[splittedValue.length - 1];
  58. }
  59. return input.value;
  60. };
  61. function handleInputChange() {
  62. var label = this.parentNode.querySelector(Selector.CUSTOMFILELABEL);
  63. if (label) {
  64. var element = findFirstChildNode(label);
  65. var inputValue = getSelectedFiles(this);
  66. if (inputValue.length) {
  67. element.innerHTML = inputValue;
  68. } else {
  69. restoreDefaultText(this);
  70. }
  71. }
  72. }
  73. function handleFormReset() {
  74. var customFileList = [].slice.call(this.querySelectorAll(Selector.INPUT)).filter(function (input) {
  75. return !!input.bsCustomFileInput;
  76. });
  77. for (var i = 0, len = customFileList.length; i < len; i++) {
  78. restoreDefaultText(customFileList[i]);
  79. }
  80. }
  81. var customProperty = 'bsCustomFileInput';
  82. var Event = {
  83. FORMRESET: 'reset',
  84. INPUTCHANGE: 'change'
  85. };
  86. var bsCustomFileInput = {
  87. init: function init(inputSelector, formSelector) {
  88. if (inputSelector === void 0) {
  89. inputSelector = Selector.CUSTOMFILE;
  90. }
  91. if (formSelector === void 0) {
  92. formSelector = Selector.FORM;
  93. }
  94. var customFileInputList = [].slice.call(document.querySelectorAll(inputSelector));
  95. var formList = [].slice.call(document.querySelectorAll(formSelector));
  96. for (var i = 0, len = customFileInputList.length; i < len; i++) {
  97. var input = customFileInputList[i];
  98. Object.defineProperty(input, customProperty, {
  99. value: {
  100. defaultText: getDefaultText(input)
  101. },
  102. writable: true
  103. });
  104. handleInputChange.call(input);
  105. input.addEventListener(Event.INPUTCHANGE, handleInputChange);
  106. }
  107. for (var _i = 0, _len = formList.length; _i < _len; _i++) {
  108. formList[_i].addEventListener(Event.FORMRESET, handleFormReset);
  109. Object.defineProperty(formList[_i], customProperty, {
  110. value: true,
  111. writable: true
  112. });
  113. }
  114. },
  115. destroy: function destroy() {
  116. var formList = [].slice.call(document.querySelectorAll(Selector.FORM)).filter(function (form) {
  117. return !!form.bsCustomFileInput;
  118. });
  119. var customFileInputList = [].slice.call(document.querySelectorAll(Selector.INPUT)).filter(function (input) {
  120. return !!input.bsCustomFileInput;
  121. });
  122. for (var i = 0, len = customFileInputList.length; i < len; i++) {
  123. var input = customFileInputList[i];
  124. restoreDefaultText(input);
  125. input[customProperty] = undefined;
  126. input.removeEventListener(Event.INPUTCHANGE, handleInputChange);
  127. }
  128. for (var _i2 = 0, _len2 = formList.length; _i2 < _len2; _i2++) {
  129. formList[_i2].removeEventListener(Event.FORMRESET, handleFormReset);
  130. formList[_i2][customProperty] = undefined;
  131. }
  132. }
  133. };
  134. return bsCustomFileInput;
  135. }));
  136. //# sourceMappingURL=bs-custom-file-input.js.map