X-Git-Url: https://git.p6c8.net/jirafeau.git/blobdiff_plain/ea78557b0c3dc4eaaaefc9abbaf8c2e476f64a78..8e1ce562b897ac32fdee24a6b67aa09e6ef54bfd:/lib/functions.js.php diff --git a/lib/functions.js.php b/lib/functions.js.php index 3b39c6d..7d248b5 100644 --- a/lib/functions.js.php +++ b/lib/functions.js.php @@ -39,63 +39,133 @@ function isEmpty(str) { return (!str || 0 === str.length); } -function show_link (url, reference, delete_code, crypt_key, date) +// Extend date object with format method +Date.prototype.format = function(format) { + format = format || 'YYYY-MM-DD hh:mm'; + + var zeropad = function(number, length) { + number = number.toString(); + length = length || 2; + while(number.length < length) + number = '0' + number; + return number; + }, + formats = { + YYYY: this.getFullYear(), + MM: zeropad(this.getMonth() + 1), + DD: zeropad(this.getDate()), + hh: zeropad(this.getHours()), + mm: zeropad(this.getMinutes()), + O: (function() { + localDate = new Date; + sign = (localDate.getTimezoneOffset() > 0) ? '-' : '+'; + offset = Math.abs(localDate.getTimezoneOffset()); + hours = zeropad(Math.floor(offset / 60)); + minutes = zeropad(offset % 60); + return sign + hours + ":" + minutes; + })() + }, + pattern = '(' + Object.keys(formats).join(')|(') + ')'; + + return format.replace(new RegExp(pattern, 'g'), function(match) { + return formats[match]; + }); +}; + +function dateFromUtcString(datestring) { + // matches »YYYY-MM-DD hh:mm« + var m = datestring.match(/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+)/); + return new Date(Date.UTC(+m[1], +m[2] - 1, +m[3], +m[4], +m[5], 0)); +} + +function dateFromUtcTimestamp(datetimestamp) { + return new Date(parseInt(datetimestamp) * 1000) +} + +function dateToUtcString(datelocal) { + return new Date( + datelocal.getUTCFullYear(), + datelocal.getUTCMonth(), + datelocal.getUTCDate(), + datelocal.getUTCHours(), + datelocal.getUTCMinutes(), + datelocal.getUTCSeconds() + ).format(); +} + +function dateToUtcTimestamp(datelocal) { + return (Date.UTC( + datelocal.getUTCFullYear(), + datelocal.getUTCMonth(), + datelocal.getUTCDate(), + datelocal.getUTCHours(), + datelocal.getUTCMinutes(), + datelocal.getUTCSeconds() + ) / 1000); +} + +function convertAllDatetimeFields() { + datefields = document.getElementsByClassName('datetime') + for(var i=0; i" + download_link_href) + "%0D"; if (false == isEmpty(date)) { - b += "%0D" + encodeURIComponent("This file will be available until " + date.toString()) + "%0D"; + b += "%0D" + encodeURIComponent("This file will be available until " + date.format('YYYY-MM-DD hh:mm (GMT O)')) + "%0D"; document.getElementById('upload_link_email').href = "mailto:?body=" + b + "&subject=" + encodeURIComponent(filename); } // Delete link - var delete_link = url + 'f.php?h=' + reference + '&d=' + delete_code; - var delete_link_href = url + 'f.php?h=' + reference + '&d=' + delete_code; - document.getElementById('delete_link').innerHTML = delete_link; + var delete_link_href = 'f.php?h=' + reference + '&d=' + delete_code; document.getElementById('delete_link').href = delete_link_href; // Validity date if (isEmpty(date)) { - document.getElementById('validity').style.display = 'none'; + document.getElementById('date').style.display = 'none'; } else { - document.getElementById('date').innerHTML = date.toString(); - document.getElementById('validity').style.display = ''; + document.getElementById('date').innerHTML = '' + + date.format('YYYY-MM-DD hh:mm (GMT O)') + + ''; + document.getElementById('date').style.display = ''; } // Preview link (if allowed) if (!!document.getElementById('preview_link')) { document.getElementById('upload_finished_preview').style.display = 'none'; - var preview_link = url + 'f.php?h=' + reference + '&p=1'; - var preview_link_href = url + 'f.php?h=' + reference + '&p=1'; + var preview_link_href = 'f.php?h=' + reference + '&p=1'; if (crypt_key.length > 0) { - preview_link += '&k=' + crypt_key; preview_link_href += '&k=' + crypt_key; } @@ -106,24 +176,19 @@ function show_link (url, reference, delete_code, crypt_key, date) type.indexOf("text") > -1 || type.indexOf("video") > -1) { - document.getElementById('preview_link').innerHTML = preview_link; document.getElementById('preview_link').href = preview_link_href; document.getElementById('upload_finished_preview').style.display = ''; } } // Direct download link - var direct_download_link = url + 'f.php?h=' + reference + '&d=1'; - var direct_download_link_href = url + 'f.php?h=' + reference + '&d=1'; + var direct_download_link_href = 'f.php?h=' + reference + '&d=1'; if (crypt_key.length > 0) { - direct_download_link += '&k=' + crypt_key; direct_download_link_href += '&k=' + crypt_key; } - document.getElementById('direct_link').innerHTML = direct_download_link; document.getElementById('direct_link').href = direct_download_link_href; - // Hide preview and direct download link if password is set if (document.getElementById('input_key').value.length > 0) { @@ -138,7 +203,7 @@ function show_upload_progression (percentage, speed, time_left) document.getElementById('uploaded_percentage').innerHTML = percentage; document.getElementById('uploaded_speed').innerHTML = speed; document.getElementById('uploaded_time').innerHTML = time_left; - document.title = 'Jirafeau - ' + percentage; + document.title = percentage + " - "; } function hide_upload_progression () @@ -146,7 +211,7 @@ function hide_upload_progression () document.getElementById('uploaded_percentage').style.display = 'none'; document.getElementById('uploaded_speed').style.display = 'none'; document.getElementById('uploaded_time').style.display = 'none'; - document.title = 'Jirafeau'; + document.title = ""; } function upload_progress (e) @@ -184,12 +249,13 @@ function control_selected_file_size(max_size, error_str) } else { - document.getElementById('options').style.display = ''; - document.getElementById('send').style.display = ''; + // add class to restyle upload form in next step + document.getElementById('upload').setAttribute('class', 'file-selected'); + // display options + document.getElementById('options').style.display = 'block'; + document.getElementById('send').style.display = 'block'; document.getElementById('error_pop').style.display = 'none'; - document.getElementById('file_select').style.left = 'inherit'; - document.getElementById('file_select').style.height = 'inherit'; - document.getElementById('file_select').style.opacity = '1'; + document.getElementById('send').focus(); } } @@ -252,7 +318,7 @@ function add_time_string_to_date(d, time) return false; } -function classic_upload (url, file, time, password, one_time, upload_password) +function classic_upload (file, time, password, one_time, upload_password) { // Delay time estimation init as we can't have file size upload_time_estimation_init(0); @@ -288,10 +354,10 @@ function classic_upload (url, file, time, password, one_time, upload_password) expiryDate = localDatetime; } - show_link (url, res[0], res[1], res[2], expiryDate); + show_link (res[0], res[1], res[2], expiryDate); } } - req.open ("POST", url + 'script.php' , true); + req.open ("POST", 'script.php' , true); var form = new FormData(); form.append ("file", file); @@ -313,17 +379,15 @@ function check_html5_file_api () } var async_global_transfered = 0; -var async_global_url = ''; var async_global_file; var async_global_ref = ''; var async_global_max_size = 0; var async_global_time; var async_global_transfering = 0; -function async_upload_start (url, max_size, file, time, password, one_time, upload_password) +function async_upload_start (max_size, file, time, password, one_time, upload_password) { async_global_transfered = 0; - async_global_url = url; async_global_file = file; async_global_max_size = max_size; async_global_time = time; @@ -349,7 +413,7 @@ function async_upload_start (url, max_size, file, time, password, one_time, uplo async_upload_push (code); } } - req.open ("POST", async_global_url + 'script.php?init_async' , true); + req.open ("POST", 'script.php?init_async' , true); var form = new FormData(); form.append ("filename", async_global_file.name); @@ -420,7 +484,7 @@ function async_upload_push (code) async_upload_push (code); } } - req.open ("POST", async_global_url + 'script.php?push_async' , true); + req.open ("POST", 'script.php?push_async' , true); var chunk_size = parseInt (async_global_max_size * 0.50); var start = async_global_transfered; @@ -467,10 +531,10 @@ function async_upload_end (code) expiryDate = localDatetime; } - show_link (async_global_url, res[0], res[1], res[2], expiryDate); + show_link (res[0], res[1], res[2], expiryDate); } } - req.open ("POST", async_global_url + 'script.php?end_async' , true); + req.open ("POST", 'script.php?end_async' , true); var form = new FormData(); form.append ("ref", async_global_ref); @@ -478,12 +542,12 @@ function async_upload_end (code) req.send (form); } -function upload (url, max_size) +function upload (max_size) { if (check_html5_file_api () && document.getElementById('file_select').files[0].size >= max_size) { - async_upload_start (url, + async_upload_start ( max_size, document.getElementById('file_select').files[0], document.getElementById('select_time').value, @@ -494,7 +558,7 @@ function upload (url, max_size) } else { - classic_upload (url, + classic_upload ( document.getElementById('file_select').files[0], document.getElementById('select_time').value, document.getElementById('input_key').value, @@ -543,17 +607,17 @@ function upload_time_estimation_speed_string() if (s <= 1000) { res = s.toString(); - scale = "o/s"; + scale = "Bit/s"; } else if (s < 1000000) { res = Math.floor(s/100) / 10; - scale = "Ko/s"; + scale = "KBit/s"; } else { res = Math.floor(s/100000) / 10; - scale = "Mo/s"; + scale = "Mbit/s"; } if (res == 0) return ''; @@ -563,7 +627,14 @@ function upload_time_estimation_speed_string() function milliseconds_to_time_string (milliseconds) { function numberEnding (number) { + var currentLanguage = ''; + + if(currentLanguage == 'de') { + return (number > 1) ? 'n' : ''; + } + else { return (number > 1) ? 's' : ''; + } } var temp = Math.floor(milliseconds / 1000); @@ -640,3 +711,31 @@ function upload_speed_refresh_limiter(speed_str) } return upload_speed_refresh_limiter_last_value; } + +// document.ready() +document.addEventListener('DOMContentLoaded', function(event) { + // Search for all datetime fields and convert the time to local timezone + convertAllDatetimeFields(); +}); + +// Add copy event listeners +function copyLinkToClipboard(link_id) { + var focus = document.activeElement; + var e = document.getElementById(link_id); + + var tmp = document.createElement("textarea"); + document.body.appendChild(tmp); + tmp.textContent = e.href; + tmp.focus(); + tmp.setSelectionRange(0, tmp.value.length); + document.execCommand("copy"); + document.body.removeChild(tmp); + + focus.focus(); +} + +function addCopyListener(button_id, link_id) { + document.getElementById(button_id) + .addEventListener("click", function() { + copyLinkToClipboard(link_id);}); +}