> Version 0.6 brings DashMachine one big step forward to being a finished product by adding a gui to edit the various settings in the config.ini. **Changelog** - improvements to /home including 'pinned' cards, multi-select tag filtering, 'action providers' allowing you to do web searches from the searchbar - rebuilt sidenav with list view, mirroring filter/search/collapse state of the homepage - /settings and /home now on same route - dynamic reloading of settings (no more page reloads) - dedicated config.ini editor slide-out - settings editor slide-out - card editor slide-out - better access group control - dedicated documentation pages - improved documentation - new system for automatically generating documentation for platforms - ability to load custom platforms - added an 'on_starup' method for platforms allowing for registering api routes. (example coming soon)
147 lines
4.4 KiB
JavaScript
147 lines
4.4 KiB
JavaScript
let tcdrop_files = {};
|
|
|
|
function tcdropValidateFilesLength(files, el){
|
|
let max_files = el.find(".tcdrop-form").attr('data-max-files');
|
|
if(max_files === -1){
|
|
tcdropValidateFilesType(files, el);
|
|
} else {
|
|
if (files.length > max_files) {
|
|
el.find('.tcdrop-form').trigger("reset");
|
|
el.find(".tcdrop-error-msg").removeClass('hide');
|
|
el.find(".tcdrop-error-msg-txt").text('Only ' + max_files + ' file(s) are allowed');
|
|
} else {
|
|
tcdropValidateFilesType(files, el);
|
|
}
|
|
}
|
|
}
|
|
|
|
function tcdropValidateFilesType(files, el){
|
|
let allowed_types_str = el.find(".tcdrop-form").attr('data-allowed-types');
|
|
if(allowed_types_str === 'all'){
|
|
tcdropCacheFile(files, el);
|
|
return;
|
|
}
|
|
let allowed_types = allowed_types_str.split(',');
|
|
let x = 0;
|
|
$.each(files, function(){
|
|
let file_ext = this.name.split('.');
|
|
if(allowed_types.includes(file_ext[1])){
|
|
x= x + 1;
|
|
}
|
|
});
|
|
if(x > 0){
|
|
tcdropCacheFile(files, el);
|
|
} else {
|
|
el.find('.tcdrop-form').trigger("reset");
|
|
el.find(".tcdrop-error-msg").removeClass('hide');
|
|
el.find(".tcdrop-error-msg-txt").text('Only ' + allowed_types.toString() + ' files are allowed');
|
|
}
|
|
}
|
|
|
|
function tcdropCacheFile(files, el){
|
|
el.find(".tcdrop-loading-upload").removeClass('hide');
|
|
let url = el.find(".tcdrop-form").attr('data-cache-url');
|
|
let fd = new FormData();
|
|
$.each(files, function(){
|
|
fd.set('file', this);
|
|
$.ajax({
|
|
url: url,
|
|
type: 'POST',
|
|
data: fd,
|
|
cache: false,
|
|
contentType: false,
|
|
processData: false,
|
|
success: function(data){
|
|
tcdrop_files[el.attr("id")].push(data.data.cached);
|
|
el.find(".tcdrop-error-msg").addClass('hide');
|
|
el.find(".tcdrop-files-ul").append(data.data.html);
|
|
el.find('.tcdrop-form').trigger("reset");
|
|
console.log(tcdrop_files);
|
|
}
|
|
}).done(function(){
|
|
tcdropHideDropArea(el);
|
|
el.find(".tcdrop-loading-upload").addClass('hide');
|
|
});
|
|
});
|
|
}
|
|
|
|
function tcdropHideDropArea(el){
|
|
let max_files = el.find(".tcdrop-form").attr('data-max-files');
|
|
if(tcdrop_files[el.attr("id")].length >= max_files){
|
|
el.find(".tcdrop-label").addClass('hide');
|
|
} else {
|
|
el.find(".tcdrop-label").removeClass('hide');
|
|
}
|
|
}
|
|
|
|
function tcdropClearCache(){
|
|
let url = $(".tcdrop-form").attr('data-clear-cache-url');
|
|
$(".tcdrop-form").each(function(e) {
|
|
tcdrop_files[$(this).parent().attr("id")] = [];
|
|
});
|
|
$('.tcdrop-form').trigger("reset");
|
|
$.ajax({
|
|
url: url,
|
|
type: 'GET'
|
|
});
|
|
}
|
|
|
|
function tcdropResetAll(){
|
|
$('.tcdrop-form').trigger("reset");
|
|
$(".tcdrop-error-msg").addClass('hide');
|
|
$(".tcdrop-label").removeClass('hide');
|
|
$(".tcdrop-file-li").addClass('hide');
|
|
tcdropClearCache();
|
|
}
|
|
|
|
function tcdropAddLocalFile(file, url, email_cache="false", el){
|
|
el = $(el);
|
|
el.find(".tcdrop-loading-upload").removeClass('hide');
|
|
$.ajax({
|
|
url: url,
|
|
type: 'GET',
|
|
data: {file: file, email_cache},
|
|
success: function(data){
|
|
tcdrop_files[el.attr("id")].push(data.data.file)
|
|
el.find(".tcdrop-error-msg").addClass('hide');
|
|
el.find(".tcdrop-files-ul").append(data.data.html)
|
|
el.find('.tcdrop-form').trigger("reset");
|
|
}
|
|
}).done(function(){
|
|
tcdropHideDropArea(el);
|
|
el.find(".tcdrop-loading-upload").addClass('hide');
|
|
});
|
|
}
|
|
let droppedFiles = false;
|
|
function initTCdrop(el){
|
|
el = $(el);
|
|
tcdrop_files[el.attr("id")] = [];
|
|
tcdropClearCache();
|
|
el.find('.tcdrop-form').unbind();
|
|
el.find(".tcdrop-input").unbind();
|
|
el.find(".tcdrop-error-msg-btn").unbind();
|
|
|
|
el.find('.tcdrop-form').on('drag dragstart dragend dragover dragenter dragleave drop', function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
})
|
|
.on('dragover dragenter', function() {
|
|
el.find(".tcdrop-label").addClass('tcdrop-file-hover');
|
|
})
|
|
.on('dragleave dragend drop', function() {
|
|
el.find(".tcdrop-label").removeClass('tcdrop-file-hover');
|
|
})
|
|
.on('drop', function(e) {
|
|
droppedFiles = e.originalEvent.dataTransfer.files;
|
|
el.find(".tcdrop-input").prop("files", e.originalEvent.dataTransfer.files);
|
|
tcdropValidateFilesLength(droppedFiles, el)
|
|
});
|
|
el.find(".tcdrop-input").on('change', function(e){
|
|
let files = this.files;
|
|
tcdropValidateFilesLength(files, el);
|
|
});
|
|
el.find(".tcdrop-error-msg-btn").on('click', function(){
|
|
el.find(".tcdrop-error-msg").addClass('hide');
|
|
});
|
|
}
|