X-Git-Url: https://git.p6c8.net/jirafeau_mojo42.git/blobdiff_plain/deeb1323362ec6750535865e1e18ca37fe7728fc..8e63325625b85ee171cfeeaaf07338d74963af7c:/lib/functions.js.php?ds=sidebyside diff --git a/lib/functions.js.php b/lib/functions.js.php index fbce522..6ee335d 100644 --- a/lib/functions.js.php +++ b/lib/functions.js.php @@ -20,22 +20,100 @@ header('Content-Type: text/javascript'); -define ('JIRAFEAU_ROOT', dirname (__FILE__) . '/../'); -require (JIRAFEAU_ROOT . 'lib/config.original.php'); -require (JIRAFEAU_ROOT . 'lib/settings.php'); -require (JIRAFEAU_ROOT . 'lib/functions.php'); -require (JIRAFEAU_ROOT . 'lib/lang.php'); +define('JIRAFEAU_ROOT', dirname(__FILE__) . '/../'); + +require(JIRAFEAU_ROOT . 'lib/settings.php'); +require(JIRAFEAU_ROOT . 'lib/functions.php'); +require(JIRAFEAU_ROOT . 'lib/lang.php'); ?> function translate (expr) { - var lang_array = ; + var lang_array = ; if (lang_array.hasOwnProperty(expr)) return lang_array[expr]; return expr; } -function show_link (url, reference, delete_code, crypt_key, date) +function isEmpty(str) { + return (!str || 0 === str.length); +} + +// 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.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 (date) + if (isEmpty(date)) { - document.getElementById('date').innerHTML = date; - document.getElementById('validity').style.display = ''; + document.getElementById('date').style.display = 'none'; + } + else { + document.getElementById('date').innerHTML = '' + + date.format('YYYY-MM-DD hh:mm (GMT O)') + + ''; + document.getElementById('date').style.display = ''; } - else - document.getElementById('validity').style.display = 'none'; // 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; } @@ -99,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) { @@ -177,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(); } } @@ -232,6 +305,11 @@ function add_time_string_to_date(d, time) d.setSeconds (d.getSeconds() + 2419200); return true; } + if (time == 'quarter') + { + d.setSeconds (d.getSeconds() + 7257600); + return true; + } if (time == 'year') { d.setSeconds (d.getSeconds() + 29030400); @@ -240,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); @@ -254,24 +332,32 @@ function classic_upload (url, file, time, password, one_time, upload_password) if (req.readyState == 4 && req.status == 200) { var res = req.responseText; - if (res == "Error") + + // if response starts with "Error" then show a failure + if (/^Error/.test(res)) { - pop_failure (); + pop_failure (res); return; } + res = res.split ("\n"); + var expiryDate = ''; if (time != 'none') { - var d = new Date(); - if(!add_time_string_to_date(d, time)) + // convert time (local time + selected expiry date) + var localDatetime = new Date(); + if(!add_time_string_to_date(localDatetime, time)) + { + pop_failure ('Error: Date can not be parsed'); return; - show_link (url, res[0], res[1], res[2], d.toString()); + } + expiryDate = localDatetime; } - else - show_link (url, res[0], res[1], res[2]); + + 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); @@ -293,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; @@ -316,18 +400,20 @@ function async_upload_start (url, max_size, file, time, password, one_time, uplo if (req.readyState == 4 && req.status == 200) { var res = req.responseText; - if (res == "Error") + + if (/^Error/.test(res)) { - pop_failure (); + pop_failure (res); return; } + res = res.split ("\n"); async_global_ref = res[0]; var code = res[1]; 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); @@ -385,18 +471,20 @@ function async_upload_push (code) if (req.readyState == 4 && req.status == 200) { var res = req.responseText; - if (res == "Error") + + if (/^Error/.test(res)) { - pop_failure (); + pop_failure (res); return; } + res = res.split ("\n"); var code = res[0] async_global_transfered = async_global_transfering; 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; @@ -423,24 +511,30 @@ function async_upload_end (code) if (req.readyState == 4 && req.status == 200) { var res = req.responseText; - if (res == "Error") + + if (/^Error/.test(res)) { - pop_failure (); + pop_failure (res); return; } + res = res.split ("\n"); + var expiryDate = ''; if (async_global_time != 'none') { - var d = new Date(); - if(!add_time_string_to_date(d, async_global_time)) - return; - show_link (async_global_url, res[0], res[1], res[2], d.toString()); + // convert time (local time + selected expiry date) + var localDatetime = new Date(); + if(!add_time_string_to_date(localDatetime, async_global_time)) { + pop_failure ('Error: Date can not be parsed'); + return; + } + expiryDate = localDatetime; } - else - show_link (async_global_url, res[0], res[1], res[2]); + + 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); @@ -448,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, @@ -464,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, @@ -610,3 +704,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);}); +}