+
+
+% if (defined(config('hosted_by'))) {
+
+ <%== config('hosted_by') %>
+
+% }
+
+
+% if (defined(config('broadcast_message'))) {
+
+ <%== config('broadcast_message') %>
+
+% }
+% if (defined(stash('stop_upload'))) {
+
+ <%= stash('stop_upload') %>
+
+% }
+ <%= content %>
+
+% if (defined(config('piwik_img'))) {
+
 %>)
+% }
+ %= javascript '/js/jquery-3.2.1.min.js'
+ %= javascript '/partial/manifest.js'
+ %= javascript '/js/toastify.js'
+ %= javascript '/js/bootstrap.min.js'
+ %= javascript '/partial/common.js'
+% if (current_route 'stats') {
+ %= javascript '/js/lutim.js'
+ %= javascript '/js/raphael-min.js'
+ %= javascript '/js/morris-0.5.1.min.js'
+ %= javascript '/js/stats.js'
+ %= javascript '/partial/raw.js'
+% } elsif (!(current_route 'about')) {
+ %= javascript '/js/lutim.js'
+ %= javascript '/js/dmuploader.min.js'
+% }
+% if (current_route 'index') {
+ %= javascript '/partial/lutim.js'
+% }
+% if (current_route 'gallery') {
+ %= javascript '/js/photoswipe.min.js'
+ %= javascript '/js/photoswipe-ui-default.min.js'
+ %= javascript '/js/jszip.min.js'
+ %= javascript '/js/FileSaver.min.js'
+ %= javascript '/partial/gallery.js'
+ %= javascript '/partial/lutim.js'
+% }
+% if (current_route 'myfiles') {
+ %= javascript '/js/moment-with-locales.min.js'
+ %= javascript '/partial/myfiles.js'
+% }
+
+
diff --git a/themes/korrigan/templates/partial/lutim.js.ep b/themes/korrigan/templates/partial/lutim.js.ep
new file mode 100644
index 0000000..fb8a8f7
--- /dev/null
+++ b/themes/korrigan/templates/partial/lutim.js.ep
@@ -0,0 +1,494 @@
+% # vim:set sw=4 ts=4 sts=4 ft=javascript expandtab:
+function selectInput() {
+ $(this).select();
+}
+function cleanName(name, empty) {
+ if (typeof(name) === 'undefined') {
+ return name;
+ }
+ if (empty !== undefined && empty !== null && empty) {
+ return name.replace(/&(l|g)t;/g, '').replace(/"/g, '\'');
+ } else {
+ return name.replace(//g, '>');
+ }
+}
+function tw_url(url) {
+ return btn = [
+ '
',
+ '',
+ ''
+ ].join('');
+}
+function modifyImage(e) {
+ e.preventDefault();
+ var url = $(this).data('modlink');
+ var short = $(this).data('modshort');
+ modify(url, short);
+}
+function modify(url, short) {
+ var limit = $('#day-'+short).val();
+ var del_at_view = ($('#first-view-'+short).prop('checked')) ? 1 : 0;
+ $.ajax({
+ url : url,
+ type : 'POST',
+ data : {
+ 'image_url' : '<%== url_for('/')->to_abs() %>'+short,
+ 'format' : 'json',
+ 'delete-day' : limit,
+ 'first-view' : del_at_view
+ },
+ success: function(data) {
+ updateItem(short, limit, del_at_view);
+ goodToast(data.msg);
+ },
+ error: function() {
+ badToast('<%= l('Error while trying to modify the image.') %>');
+ }
+ });
+}
+
+function buildMessage(success, msg) {
+ if(success) {
+ var s_url = link([msg.short, '.', msg.ext].join(''), '');
+ var thumb = (msg.thumb !== null) ? [
+ '
'
+ ].join('') : ''
+ return [
+ '
',
+ '
',
+ '
',
+ '
',
+ '
'
+ ].join('');
+ } else {
+ return [
+ '
',
+ '',
+ '<%= l('Something bad happened') %>
',
+ cleanName(msg.filename, false),
+ '
',
+ cleanName(msg.msg, false),
+ '
'
+ ].join('');
+ }
+}
+function bindddz(firstview, deleteday) {
+ $('#drag-and-drop-zone').dmUploader({
+ url: '<%== url_for('/') %>',
+ dataType: 'json',
+ allowedTypes: 'image/*',
+ maxFileSize: <%= config('max_file_size') %>,
+ onNewFile: function(id, file){
+ $('.messages').append([
+ '
',
+ cleanName(file.name), '
',
+ '
',
+ '
',
+ ' 0%',
+ '
',
+ '
',
+ '
'
+ ].join(''));
+ },
+ onUploadProgress: function(id, percent){
+ var percentStr = ' '+percent+'%';
+ $('#'+id).prop('aria-valuenow', percent);
+ $('#'+id).css('width', percent+'%');
+ $('#'+id+'-text').html(percentStr);
+ },
+ onUploadSuccess: function(id, data){
+ data.msg.filename = cleanName(data.msg.filename);
+ $('#'+id+'-div').remove();
+ if ($('#copy-all').length === 0 && data.success) {
+ $('.messages').prepend([
+ '
'
+ ].join(''));
+ }
+ $('.messages').append(buildMessage(data.success, data.msg));
+ $('#del-'+data.msg.real_short).on('click', function(e) {
+ e.preventDefault();
+ rmFromShortHash(data.msg.short+'.'+data.msg.ext)
+ rmFromZipHash(data.msg.short);
+ rmFromRandomHash(data.msg.short);
+ });
+ $('#del-'+data.msg.real_short).on('click', delImage);
+ if (data.success) {
+ addToShortHash(data.msg.short+'.'+data.msg.ext);
+ addToZipHash(data.msg.short);
+ addToRandomHash(data.msg.short);
+ $('.close').unbind('click', evaluateCopyAll);
+ $('.close').on('click', evaluateCopyAll);
+ $('input[type=\'text\']').unbind("click", selectInput);
+ $('input[type=\'text\']').on("click", selectInput);
+ $('.copy-all-to-clipboard-link').unbind('click', copyAllToClipboard);
+ $('.copy-all-to-clipboard-link').on('click', copyAllToClipboard);
+ $('.modify-image').unbind('click', modifyImage);
+ $('.modify-image').on('click', modifyImage);
+ $('.copy-to-clipboard-link').unbind('click', clickOnCopyLink);
+ $('.copy-to-clipboard-link').on('click', clickOnCopyLink);
+ addItem(data.msg);
+ }
+ },
+ onUploadError: function(id, message){
+ $('.messages').append(buildMessage(false, ''));
+ },
+ onFileSizeError: function(file){
+ $('.messages').append(buildMessage(false, { filename: file.name, msg: '<%= l('The file exceed the size limit (%1)', config('max_file_size')) %>'}));
+ }
+ });
+}
+
+function upload_url(e) {
+ e.preventDefault();
+ var val = $('#lutim-file-url').val();
+ if (val !== undefined && val !== '') {
+ $('#lutim-file-url').prop('disabled', 'disabled');
+ $('.hidden-spin').css('display', 'block');
+ $.ajax({
+ url : '<%== url_for('/') %>',
+ type : 'POST',
+ data : {
+ 'lutim-file-url' : val,
+ 'format' : 'json',
+ 'first-view' : ($('#first-view').prop('checked')) ? 1 : 0,
+ 'crypt' : ($('#crypt').prop('checked')) ? 1 : 0,
+ 'delete-day' : $('#delete-day').val()
+ },
+ success: function(data) {
+ data.msg.filename = cleanName(data.msg.filename);
+ $('.messages').append(buildMessage(data.success, data.msg));
+ if (data.success) {
+ if ($('#copy-all').length === 0) {
+ $('.messages').prepend([
+ '
'
+ ].join(''));
+ }
+ $('#lutim-file-url').val('');
+ addToShortHash(data.msg.short+'.'+data.msg.ext);
+ addToZipHash(data.msg.short);
+ addToRandomHash(data.msg.short);
+ $('#del-'+data.msg.real_short).on('click', delImage);
+ $('.close').unbind('click', evaluateCopyAll);
+ $('.close').on('click', evaluateCopyAll);
+ addItem(data.msg);
+ }
+ },
+ error: function() {
+ $('.messages').append(buildMessage(false, ''));
+ },
+ complete: function() {
+ $('#lutim-file-url').prop('disabled', '');
+ $('.hidden-spin').css('display', 'none');
+ $('.copy-all-to-clipboard-link').unbind('click', copyAllToClipboard);
+ $('.copy-all-to-clipboard-link').on('click', copyAllToClipboard);
+ $('.modify-image').unbind('click', modifyImage);
+ $('.modify-image').on('click', modifyImage);
+ $('.copy-to-clipboard-link').unbind('click', clickOnCopyLink);
+ $('.copy-to-clipboard-link').on('click', clickOnCopyLink);
+ }
+ });
+ }
+}
+
+function fileUpload(file) {
+ var fd = new FormData();
+ fd.append('file', file);
+
+ fd.append('format', 'json');
+ fd.append('first-view', ($('#first-view').prop('checked')) ? 1 : 0);
+ fd.append('crypt', ($('#crypt').prop('checked')) ? 1 : 0);
+ fd.append('delete-day', ($('#delete-day').val()));
+
+ $('.messages').append([
+ '
', cleanName(file.name), '
',
+ '
',
+ '
',
+ ' 0%',
+ '
',
+ '
',
+ '
'
+ ].join(''));
+ // Ajax Submit
+ $.ajax({
+ url: '<%== url_for('/') %>',
+ type: 'POST',
+ dataType: 'json',
+ data: fd,
+ cache: false,
+ contentType: false,
+ processData: false,
+ forceSync: false,
+ xhr: function(){
+ var xhrobj = $.ajaxSettings.xhr();
+ if(xhrobj.upload){
+ xhrobj.upload.addEventListener('progress', function(event) {
+ var percent = 0;
+ var position = event.loaded || event.position;
+ var total = event.total || e.totalSize;
+ if(event.lengthComputable){
+ percent = Math.ceil(position / total * 100);
+ }
+
+ var percentStr = ' '+percent+'%';
+ $('#1').prop('aria-valuenow', percent);
+ $('#1').css('width', percent+'%');
+ $('#1-text').html(percentStr);
+ }, false);
+ }
+
+ return xhrobj;
+ },
+ success: function (data, message, xhr){
+ $('#1-div').remove();
+ if ($('#copy-all').length === 0 && data.success) {
+ $('.messages').prepend([
+ '
'
+ ].join(''));
+ }
+ data.msg.filename = cleanName(data.msg.filename);
+ $('.messages').append(buildMessage(data.success, data.msg));
+ if (data.success) {
+ $('.close').unbind('click', evaluateCopyAll);
+ $('.close').on('click', evaluateCopyAll);
+ addItem(data.msg);
+ }
+ },
+ error: function (xhr, status, errMsg){
+ $('.messages').append(buildMessage(false, ''));
+ },
+ complete: function () {
+ $('.copy-all-to-clipboard-link').unbind('click', copyAllToClipboard);
+ $('.copy-all-to-clipboard-link').on('click', copyAllToClipboard);
+ $('.modify-image').unbind('click', modifyImage);
+ $('.modify-image').on('click', modifyImage);
+ $('.copy-to-clipboard-link').unbind('click', clickOnCopyLink);
+ $('.copy-to-clipboard-link').on('click', clickOnCopyLink);
+ }
+ });
+}
+
+function initPaste() {
+ /*
+ actually FF and Chrome doesn't handle paste events the same way...
+ for ff we need to create a editable div and register an event to it.
+ When user paste, the image is "really" pasted in the div. Then, we need to iterate throught
+ the div childs to get images. Previsouly FF didn't have the paste event so it was esay to figure on wich browser we were.
+ But firefox now have a paste event so I test it...
+
+ on Chrome the file object is directlyt in the clipboard.
+ */
+ var b = 'FF';
+ try {
+ //FF
+ var cbe = new ClipboardEvent('hop');
+ } catch(hop) {
+ //under webkkit Clipboard doesn't have arguments...
+ b = 'WK'
+ }
+ if (b === 'FF') {
+ var pasteDiv = document.createElement('div');
+ pasteDiv.addEventListener('paste', onPasteFF);
+ pasteDiv.setAttribute('class', 'pasteZone');
+ pasteDiv.setAttribute('contenteditable', true);
+
+ document.getElementsByTagName('body')[0].appendChild(pasteDiv);
+ pasteDiv.focus();
+
+ document.addEventListener('click', function(event) {
+ var t = $(event.target);
+
+ switch (t[0].nodeName.toUpperCase()) {
+ case 'A':
+ case 'BUTTON':
+ case 'INPUT':
+ case 'SELECT':
+ case 'SPAN':
+ case 'LABEL':
+ break;
+ default:
+ if (t[0].parentNode.nodeName.toUpperCase() !== 'SELECT') {
+ pasteDiv.focus();
+ }
+ }
+ });
+ } else {
+ document.addEventListener('paste', onPaste);
+ }
+}
+
+function waitforpastedata(elem, savedcontent) {
+ if (elem.childNodes && elem.childNodes.length > 0) {
+ processpaste(elem, savedcontent);
+ } else {
+ var that = {
+ e: elem,
+ s: savedcontent
+ };
+ that.callself = function () {
+ waitforpastedata(that.e, that.s);
+ }
+ setTimeout(that.callself, 20);
+ }
+}
+
+function processpaste(elem, savedcontent) {
+ var pasteZone = document.getElementsByClassName('pasteZone')[0];
+ var f = new Image();
+
+ f.onload = function(){
+ var canvas = document.createElement('canvas');
+ canvas.width = f.width;
+ canvas.height = f.height;
+
+ var ctx = canvas.getContext('2d');
+ ctx.drawImage(f, 0, 0, canvas.width, canvas.height);
+
+ canvas.toBlob(function(blob) {
+ var url = window.URL.createObjectURL(blob);
+ fileUpload(blob);
+ });
+ }
+
+ f.src = pasteZone.childNodes[0].src;
+
+ pasteZone.innerHTML = '';
+}
+
+function onPasteFF(e) {
+ var pasteZone = document.getElementsByClassName('pasteZone')[0];
+ waitforpastedata(pasteZone, 'savedcontent');
+}
+
+function onPaste(e) {
+ var items = e.clipboardData.items;
+ for(var i = 0; i < items.length; i++) {
+ var item = items[i];
+ if (/image/.test(item.type)) {
+ var file = item.getAsFile();
+ fileUpload(file);
+ } else {
+ //not image..
+ }
+ }
+}