mirror of
https://framagit.org/fiat-tux/hat-softwares/lutim.git
synced 2026-05-06 21:42:42 +02:00
252 lines
8.6 KiB
JavaScript
252 lines
8.6 KiB
JavaScript
% # vim:set sw=4 ts=4 sts=4 ft=javascript expandtab:
|
|
window.gallery_url = '<%= prefix().'gallery' %>#';
|
|
window.zip_url = '<%= prefix().'zip' %>?i=';
|
|
window.random_url = '<%= prefix().'random' %>?i=';
|
|
window.short_hash = {};
|
|
window.zip_hash = {};
|
|
window.random_hash = {};
|
|
function addToShortHash(short) {
|
|
window.short_hash[short] = 1;
|
|
if (Object.keys(window.short_hash).length > 0) {
|
|
$('#gallery-url').removeClass('hidden');
|
|
$('#gallery-url-input').val(`${window.gallery_url}${Object.keys(window.short_hash).join(',')}`);
|
|
$('#gallery-url-link').attr('href', `${window.gallery_url}${Object.keys(window.short_hash).join(',')}`);
|
|
}
|
|
}
|
|
function rmFromShortHash(short) {
|
|
delete window.short_hash[short];
|
|
$('#gallery-url-input').val(`${window.gallery_url}${Object.keys(window.short_hash).join(',')}`);
|
|
$('#gallery-url-link').attr('href', `${window.gallery_url}${Object.keys(window.short_hash).join(',')}`);
|
|
if (Object.keys(window.short_hash).length === 0) {
|
|
$('#gallery-url').addClass('hidden');
|
|
}
|
|
}
|
|
function addToZipHash(short) {
|
|
window.zip_hash[short] = 1;
|
|
if (Object.keys(window.zip_hash).length > 0) {
|
|
$('#zip-url').removeClass('hidden');
|
|
$('#zip-url-input').val(`${window.zip_url}${Object.keys(window.zip_hash).join('&i=')}`);
|
|
$('#zip-url-link').attr('href', `${window.zip_url}${Object.keys(window.zip_hash).join('&i=')}`);
|
|
}
|
|
}
|
|
function rmFromZipHash(short) {
|
|
delete window.zip_hash[short];
|
|
$('#zip-url-input').val(`${window.zip_url}${Object.keys(window.zip_hash).join('&i=')}`);
|
|
$('#zip-url-link').attr('href', `${window.zip_url}${Object.keys(window.zip_hash).join('&i=')}`);
|
|
if (Object.keys(window.zip_hash).length === 0) {
|
|
$('#zip-url').addClass('hidden');
|
|
}
|
|
}
|
|
function addToRandomHash(short) {
|
|
window.random_hash[short] = 1;
|
|
if (Object.keys(window.random_hash).length > 0) {
|
|
$('#random-url').removeClass('hidden');
|
|
$('#random-url-input').val(`${window.random_url}${Object.keys(window.random_hash).join('&i=')}`);
|
|
$('#random-url-link').attr('href', `${window.random_url}${Object.keys(window.random_hash).join('&i=')}`);
|
|
}
|
|
}
|
|
function rmFromRandomHash(short) {
|
|
delete window.random_hash[short];
|
|
$('#random-url-input').val(`${window.random_url}${Object.keys(window.random_hash).join('&i=')}`);
|
|
$('#random-url-link').attr('href', `${window.random_url}${Object.keys(window.random_hash).join('&i=')}`);
|
|
if (Object.keys(window.random_hash).length === 0) {
|
|
$('#random-url').addClass('hidden');
|
|
}
|
|
}
|
|
/* Stolen from https://github.com/mozilla-services/push-dev-dashboard/blob/3ad4de737380d0842f40c82301d1f748c1b20f2b/push/static/js/validation.js */
|
|
function createNode(text) {
|
|
var node = document.createElement('pre');
|
|
node.classList.add('copy-node');
|
|
node.textContent = text;
|
|
return node;
|
|
}
|
|
|
|
function copyNode(node) {
|
|
var selection = getSelection();
|
|
selection.removeAllRanges();
|
|
|
|
var range = document.createRange();
|
|
range.selectNodeContents(node);
|
|
selection.addRange(range);
|
|
|
|
var success = document.execCommand('copy');
|
|
selection.removeAllRanges();
|
|
return success;
|
|
}
|
|
|
|
function copyText(text) {
|
|
var node = createNode(text);
|
|
document.body.appendChild(node);
|
|
var success = copyNode(node);
|
|
document.body.removeChild(node);
|
|
return success;
|
|
}
|
|
function copyLink(e) {
|
|
e.preventDefault();
|
|
var successful = copyText($(this).prop('href'));
|
|
var msg = successful ? 'successful' : 'unsuccessful';
|
|
console.debug(`Copying text command was ${msg}`);
|
|
if (!successful) {
|
|
badToast('<%= l('Unable to copy to clipboard') %>');
|
|
throw new Error(`Copying text command was ${msg}`);
|
|
} else {
|
|
goodToast('<%= l('Copied to clipboard') %>');
|
|
}
|
|
}
|
|
|
|
function copyInput(node) {
|
|
node.select();
|
|
var success = document.execCommand('copy');
|
|
getSelection().removeAllRanges();
|
|
return success;
|
|
}
|
|
function copyToClipboard(el) {
|
|
el = el.siblings('input');
|
|
try {
|
|
var successful = copyInput(el);
|
|
var msg = successful ? 'successful' : 'unsuccessful';
|
|
console.debug(`Copying text command was ${msg}`);
|
|
if (!successful) {
|
|
badToast('<%= l('Unable to copy to clipboard') %>');
|
|
throw new Error(`Copying text command was ${msg}`);
|
|
} else {
|
|
goodToast('<%= l('Copied to clipboard') %>');
|
|
}
|
|
} catch (err) {
|
|
prompt('<%= l('Hit Ctrl+C, then Enter to copy the short link') %>', el.val());
|
|
}
|
|
}
|
|
function copyAllToClipboard(e) {
|
|
e.preventDefault;
|
|
var text = new Array();
|
|
$('.view-link-input').each(function(index) {
|
|
text.push($(this).val());
|
|
});
|
|
|
|
try {
|
|
var successful = copyText(text.join("\n"));
|
|
var msg = successful ? 'successful' : 'unsuccessful';
|
|
console.debug(`Copying text command was ${msg}`);
|
|
if (!successful) {
|
|
throw new Error(`Copying text command was ${msg}`);
|
|
}
|
|
} catch (err) {
|
|
prompt('<%= l('Hit Ctrl+C, then Enter to copy the short link') %>', text.join(" "));
|
|
}
|
|
|
|
}
|
|
function clickOnCopyLink(e) {
|
|
e.preventDefault();
|
|
copyToClipboard($(this));
|
|
}
|
|
function delImageConfirm(e) {
|
|
e.preventDefault();
|
|
var short = $(this).attr('data-short');
|
|
if (confirm(`<%= l('Are you sure you want to delete the image ${short}?') %>`)) {
|
|
var token = $(this).attr('data-token');
|
|
var ext = $(this).attr('data-ext');
|
|
delImageRequest(short, token);
|
|
rmFromShortHash(`${short}.${ext}`);
|
|
rmFromZipHash(short);
|
|
rmFromRandomHash(short);
|
|
}
|
|
}
|
|
function delImage(e) {
|
|
e.preventDefault();
|
|
var short = $(this).attr('data-short');
|
|
var token = $(this).attr('data-token');
|
|
delImageRequest(short, token);
|
|
}
|
|
function delImageRequest(short, token) {
|
|
$.ajax({
|
|
url: `<%= url_for('/') %>d/${short}/${token}`,
|
|
method: 'GET',
|
|
data: {
|
|
_format: 'json'
|
|
},
|
|
success: function(data) {
|
|
if (data.success) {
|
|
$(`#alert-${short}`).remove();
|
|
evaluateCopyAll();
|
|
delItem(short);
|
|
goodToast('<%= l('Image deleted') %>');
|
|
} else {
|
|
badToast(data.msg);
|
|
}
|
|
},
|
|
error: function() {
|
|
},
|
|
complete: function() {
|
|
if (typeof evaluateMassDelete === "function") {
|
|
evaluateMassDelete();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
function link(url, dl, token, modify, only_url, ext) {
|
|
if (token !== undefined) {
|
|
if (modify !== undefined && modify === true) {
|
|
return `<%== url_for('/m/')->to_abs() %>${url}/${token}`;
|
|
}
|
|
var link = `<%== url_for('/')->to_abs() %>d/${url}/${token}`;
|
|
if (only_url !== undefined && only_url === true) {
|
|
return link;
|
|
}
|
|
return `<label class="sr-only" for="link-del-${url}"><%= l('Deletion link') %></label>
|
|
<div class="input-group input-group-sm">
|
|
<div class="input-group-btn adjust-addon">
|
|
<a href="#"
|
|
class="btn btn-default text-danger"
|
|
title="<%= l('Deletion link') %>"
|
|
id="del-${url}"
|
|
data-short="${url}"
|
|
data-ext="${ext}"
|
|
data-token="${token}">
|
|
<span class="icon icon-trash"></span>
|
|
</a>
|
|
</div>
|
|
<input type="text" class="form-control" id="link-del-${url}" value="${link}" readonly>
|
|
<a href="#" class="input-group-addon copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">
|
|
<span class="icon icon-clipboard"></span>
|
|
</a>
|
|
</div>`;
|
|
} else if (dl !== '') {
|
|
url = `${url}?${dl}`;
|
|
}
|
|
return `<%== prefix() %>${url}`;
|
|
}
|
|
|
|
function badToast(msg) {
|
|
Toastify({
|
|
text: msg,
|
|
duration: 6000,
|
|
newWindow: true,
|
|
close: true,
|
|
gravity: 'bottom',
|
|
positionLeft: false,
|
|
backgroundColor: '#f26163'
|
|
}).showToast();
|
|
}
|
|
|
|
function goodToast(msg) {
|
|
Toastify({
|
|
text: msg,
|
|
duration: 3000,
|
|
newWindow: true,
|
|
close: true,
|
|
gravity: 'bottom',
|
|
positionLeft: false
|
|
}).showToast();
|
|
}
|
|
|
|
function formatDate(unixTimestamp) {
|
|
return new Date(unixTimestamp * 1000).toLocaleString(window.navigator.language, {
|
|
year: 'numeric',
|
|
month: 'long',
|
|
day: 'numeric',
|
|
weekday: 'long',
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
})
|
|
}
|