mirror of https://github.com/ColorlibHQ/AdminLTE
added bs-custom-file-input plugin
parent
247b797c38
commit
acf9fe8403
|
@ -389,6 +389,11 @@ const Plugins = [
|
|||
from: 'node_modules/jquery-validation/dist/',
|
||||
to : 'plugins/jquery-validation'
|
||||
},
|
||||
// bs-custom-file-input
|
||||
{
|
||||
from: 'node_modules/bs-custom-file-input/dist/',
|
||||
to : 'plugins/bs-custom-file-input'
|
||||
},
|
||||
]
|
||||
|
||||
module.exports = Plugins
|
||||
|
|
|
@ -50,6 +50,7 @@ AdminLTE makes use of the following plugins. For documentation, updates or licen
|
|||
<li><a href="https://select2.org/" target="_blank">Select2</a></li>
|
||||
<li><a href="https://tempusdominus.github.io/bootstrap-4/" target="_blank">Tempus Dominus</a></li>
|
||||
<li><a href="https://github.com/istvan-ujjmeszaros/bootstrap-duallistbox#readme" target="_blank">Bootstrap4 Duallistbox</a></li>
|
||||
<li><a href="https://github.com/Johann-S/bs-custom-file-input#readme" target="_blank">bs-custom-file-input</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
|
|
|
@ -1840,6 +1840,11 @@
|
|||
"node-releases": "^1.1.36"
|
||||
}
|
||||
},
|
||||
"bs-custom-file-input": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/bs-custom-file-input/-/bs-custom-file-input-1.3.2.tgz",
|
||||
"integrity": "sha512-lzgtGX2GDo7nUmsTCcTvYkCc35d3/E14h+HXmFKV8z2EJmtkMcvYT8BsWOjK67+ogZR3kc8OfH5O8APjvDUtFg=="
|
||||
},
|
||||
"bs-recipes": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
"bootstrap-slider": "^10.6.2",
|
||||
"bootstrap-switch": "^3.4.0",
|
||||
"bootstrap4-duallistbox": "^4.0.1",
|
||||
"bs-custom-file-input": "^1.3.2",
|
||||
"chart.js": "^2.8.0",
|
||||
"datatables.net": "^1.10.20",
|
||||
"datatables.net-autofill-bs4": "^2.3.4",
|
||||
|
|
|
@ -1240,7 +1240,8 @@
|
|||
<input type="range" class="custom-range custom-range-teal" id="customRange1">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="customFile">Custom File</label>
|
||||
<!-- <label for="customFile">Custom File</label> -->
|
||||
|
||||
<div class="custom-file">
|
||||
<input type="file" class="custom-file-input" id="customFile">
|
||||
<label class="custom-file-label" for="customFile">Choose file</label>
|
||||
|
@ -1282,9 +1283,16 @@
|
|||
<script src="../../plugins/jquery/jquery.min.js"></script>
|
||||
<!-- Bootstrap 4 -->
|
||||
<script src="../../plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<!-- bs-custom-file-input -->
|
||||
<script src="../../plugins/bs-custom-file-input/bs-custom-file-input.min.js"></script>
|
||||
<!-- AdminLTE App -->
|
||||
<script src="../../dist/js/adminlte.min.js"></script>
|
||||
<!-- AdminLTE for demo purposes -->
|
||||
<script src="../../dist/js/demo.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
bsCustomFileInput.init();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,167 @@
|
|||
/*!
|
||||
* 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
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,7 @@
|
|||
/*!
|
||||
* 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(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).bsCustomFileInput=t()}(this,function(){"use strict";var d={CUSTOMFILE:'.custom-file input[type="file"]',CUSTOMFILELABEL:".custom-file-label",FORM:"form",INPUT:"input"},r=function(e){if(0<e.childNodes.length)for(var t=[].slice.call(e.childNodes),n=0;n<t.length;n++){var r=t[n];if(3!==r.nodeType)return r}return e},u=function(e){var t=e.bsCustomFileInput.defaultText,n=e.parentNode.querySelector(d.CUSTOMFILELABEL);n&&(r(n).innerHTML=t)},n=!!window.File,l=function(e){if(e.hasAttribute("multiple")&&n)return[].slice.call(e.files).map(function(e){return e.name}).join(", ");if(-1===e.value.indexOf("fakepath"))return e.value;var t=e.value.split("\\");return t[t.length-1]};function v(){var e=this.parentNode.querySelector(d.CUSTOMFILELABEL);if(e){var t=r(e),n=l(this);n.length?t.innerHTML=n:u(this)}}function p(){for(var e=[].slice.call(this.querySelectorAll(d.INPUT)).filter(function(e){return!!e.bsCustomFileInput}),t=0,n=e.length;t<n;t++)u(e[t])}var m="bsCustomFileInput",L="reset",h="change";return{init:function(e,t){void 0===e&&(e=d.CUSTOMFILE),void 0===t&&(t=d.FORM);for(var n,r,l,i=[].slice.call(document.querySelectorAll(e)),o=[].slice.call(document.querySelectorAll(t)),u=0,c=i.length;u<c;u++){var f=i[u];Object.defineProperty(f,m,{value:{defaultText:(n=f,r=void 0,void 0,r="",l=n.parentNode.querySelector(d.CUSTOMFILELABEL),l&&(r=l.innerHTML),r)},writable:!0}),v.call(f),f.addEventListener(h,v)}for(var a=0,s=o.length;a<s;a++)o[a].addEventListener(L,p),Object.defineProperty(o[a],m,{value:!0,writable:!0})},destroy:function(){for(var e=[].slice.call(document.querySelectorAll(d.FORM)).filter(function(e){return!!e.bsCustomFileInput}),t=[].slice.call(document.querySelectorAll(d.INPUT)).filter(function(e){return!!e.bsCustomFileInput}),n=0,r=t.length;n<r;n++){var l=t[n];u(l),l[m]=void 0,l.removeEventListener(h,v)}for(var i=0,o=e.length;i<o;i++)e[i].removeEventListener(L,p),e[i][m]=void 0}}});
|
||||
//# sourceMappingURL=bs-custom-file-input.min.js.map
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue