// vim:set sw=4 ts=4 sts=4 ft=javascript expandtab: // Add item to localStorage function addItem(item) { var files = localStorage.getItem(`${window.prefix}files`); if (files === null) { files = new Array(); } else { files = JSON.parse(files); } files.push(item); localStorage.setItem(`${window.prefix}files`, JSON.stringify(files)); } function delItem(name) { var files = localStorage.getItem(`${window.prefix}files`); if (files === null) { files = new Array(); } else { files = JSON.parse(files); } var i; for (i = 0; i < files.length; i++) { if (files[i].short === name) { files.splice(i, 1); } } localStorage.setItem(`${window.prefix}files`, JSON.stringify(files)); } function itemExists(name) { var files = localStorage.getItem(`${window.prefix}files`); if (files === null) { return false; } else { files = JSON.parse(files); var i; for (i = 0; i < files.length; i++) { if (files[i].short === name) { return true; } } return false; } } function invertSelection(event) { event.preventDefault(); $('input[type="checkbox"]').each(function() { var el = $(this); el.click(); if (el.attr('data-checked') && el.attr('data-checked') === 'data-checked') { el.attr('data-checked', null); } else { el.attr('data-checked', 'data-checked'); } }); evaluateMassDelete(); } function purgeExpired(event) { event.preventDefault(); var files = JSON.parse(localStorage.getItem(`${window.prefix}files`)); files.forEach(function(element, index, array) { $.ajax({ url: counterURL, method: 'POST', dataType: 'json', data: { short: element.short, token: element.token }, success: function(data, textStatus, jqXHR) { if (data.success) { if (data.deleted) { $(`#count-${data.short}`).parent().remove(); delItem(data.short); } } } }); }); } function exportStorage(event) { event.preventDefault(); var a = $(''); a.hide(); $('body').append(a); var storageData = [localStorage.getItem(`${window.prefix}files`)]; var exportFile = new Blob(storageData, {type : 'application/json'}); var url = window.URL.createObjectURL(exportFile); a.attr('href', url); a.attr('download', 'data.json'); $('#data-json')[0].click(); $('#data-json').remove(); } function importStorage(f) { var reader = new FileReader(); reader.addEventListener("loadend", function() { try { var newFiles = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(reader.result))); var i; var hasImported = 0; for (i = 0; i < newFiles.length; i++) { var item = newFiles[i]; if (validURL(item.url) && !itemExists(item.short)) { addItem(item); hasImported++; } } populateFilesTable(); Materialize.toast(i18n.importProcessed); } catch(err) { alert(err); } }); reader.readAsArrayBuffer(f[0]); } function validURL(str) { try { var url = new URL(str); if (url.host) { return true; } else { return false; } } catch(e) { return false; } } function delFile() { var dlink = $(this).attr('data-dlink'); var short = $(this).attr('data-short'); $.ajax({ url: dlink, method: 'GET', data: { _format: 'json' }, success: function(data) { if (data.success) { $(`#row-${short}`).remove(); delItem(short); } else { alert(data.msg); } evaluateMassDelete(); }, error: function() { }, complete: function() { } }); } function evaluateMassDelete() { if ($('input[data-checked="data-checked"]').length > 0) { $('#mass-delete').removeAttr('disabled'); $('#mass-delete').removeClass('disabled'); } else { $('#mass-delete').attr('disabled'); $('#mass-delete').addClass('disabled'); } } function massDelete(event) { event.preventDefault(); $('input[data-checked="data-checked"]').each(delFile); } function populateFilesTable() { $('#myfiles').empty(); var files = localStorage.getItem(`${window.prefix}files`); if (files === null) { var filesWithoutPrefix = localStorage.getItem('files'); if (filesWithoutPrefix !== null) { if (window.confirm(i18n.importFilesWithoutPrefix)) { localStorage.setItem(`${window.prefix}files`, filesWithoutPrefix); files = JSON.parse(filesWithoutPrefix); } else { localStorage.setItem(`${window.prefix}files`, JSON.stringify([])); files = new Array(); } } else { files = new Array(); } } else { files = JSON.parse(files); } files.sort(function(a, b) { if (a.created_at < b.created_at) { return -1; } else if (a.created_at > b.created_at) { return 1; } else { return 0 } }); files.forEach(function(element, index, array) { var del_view = (element.del_at_first_view) ? '' : ''; var dlink = `${actionURL}d/${element.short}/${element.token}`; var limit = (element.delay === 0) ? i18n.noExpiration : formatDate(element.delay * 86400 + element.created_at); var created_at = formatDate(element.created_at); var tr = $(``); tr.html(` ${escapeHtml(element.name)} ${del_view} ${created_at} ${limit} `); $('#myfiles').append(tr); $(`#del-${element.short}`).on('click', delFile); $(`label[for="check-${element.short}"]`).on('click', function(){ if ($(`#check-${element.short}`).attr('data-checked') && $(`#check-${element.short}`).attr('data-checked') === 'data-checked') { $(`#check-${element.short}`).attr('data-checked', null); } else { $(`#check-${element.short}`).attr('data-checked', 'data-checked'); } evaluateMassDelete(); }); $.ajax({ url: counterURL, method: 'POST', dataType: 'json', data: { short: element.short, token: element.token }, success: function(data, textStatus, jqXHR) { if (data.success) { $(`#count-${data.short}`).html(data.counter); if (data.deleted) { $(`#count-${data.short}`).parent().addClass('purple lighten-4'); } } else { alert(data.msg); $(`#count-${data.short}`).parent().remove(); if (data.missing) { delItem(data.short); } } } }); }); } function clickImport(event) { event.preventDefault(); $('#import').click(); }