% # 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 `
`; } 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', }) }