X-Git-Url: https://git.p6c8.net/jirafeau_project.git/blobdiff_plain/ac13b92b26d4fa871749fa22be8d8f41f5b9641d..463c260d3cf16d2fa2fbcba04bac446165d1a618:/lib/functions.js.php?ds=sidebyside diff --git a/lib/functions.js.php b/lib/functions.js.php index 1114dfd..64154d3 100644 --- a/lib/functions.js.php +++ b/lib/functions.js.php @@ -1,8 +1,9 @@ <?php /* * Jirafeau, your web file repository + * Copyright (C) 2008 Julien "axolotl" BERNARD <axolotl@magieeternelle.org> * Copyright (C) 2015 Jerome Jutteau <jerome@jutteau.fr> - * Copyright (C) 2015 Nicola Spanti (RyDroid) <dev@nicola-spanti.info> + * Copyright (C) 2024 Jirafeau project <https://gitlab.com/jirafeau> (see AUTHORS.md) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -18,12 +19,110 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ + function template_js_preview_link() { + ?> + if (!!document.getElementById('preview_link')) + { + document.getElementById('upload_finished_preview').style.display = 'none'; + var preview_link_href = 'f.php?h=' + reference + '&p=1'; + if (crypt_key.length > 0) + { + preview_link_href += '&k=' + crypt_key; + } + + // Test if content can be previewed + type = document.getElementById('file_select').files[0].type; + if ((type.startsWith('image/') + || type.startsWith('audio') + || type.startsWith('text/plain') + || type.startsWith('video/')) + && !type.includes('image/svg+xml')) + { + document.getElementById('preview_link').href = preview_link_href; + document.getElementById('preview_link_text').innerHTML = web_root + preview_link_href; + document.getElementById('upload_finished_preview').style.display = ''; + } + } + <?php + } +function template_js_download_page() { + ?> + // Download page + var download_link_href = 'f.php?h=' + reference; + if (crypt_key.length > 0) + { + download_link_href += '&k=' + crypt_key; + } + if (!!document.getElementById('upload_finished_download_page')) + { + document.getElementById('upload_link').href = download_link_href; + document.getElementById('upload_link_text').innerHTML = web_root + download_link_href; + } + <?php +} +function template_js_email_link() { + ?> + // Email link + var b = encodeURIComponent("<?php echo t("DL"); ?> \"" + filename + "\":") + "%0D" + "%0A"; + b += encodeURIComponent(web_root + download_link_href) + "%0D" + "%0A"; + if (false == isEmpty(date)) + { + b += "%0D" + "%0A" + encodeURIComponent("<?php echo t("VALID_UNTIL"); ?>: " + date.format('YYYY-MM-DD hh:mm (GMT O)')) + "%0D" + "%0A"; + document.getElementById('upload_link_email').href = "mailto:?body=" + b + "&subject=" + encodeURIComponent(filename); + } + <?php +} +function template_js_delete_link() { + ?> + // Delete link + var delete_link_href = 'f.php?h=' + reference + '&d=' + delete_code; + document.getElementById('delete_link').href = delete_link_href; + document.getElementById('delete_link_text').innerHTML = web_root + delete_link_href; + <?php +} + function template_js_direct_download() { + ?> + // Direct download link + var direct_download_link_href = 'f.php?h=' + reference + '&d=1'; + if (crypt_key.length > 0) + { + direct_download_link_href += '&k=' + crypt_key; + } + document.getElementById('direct_link').href = direct_download_link_href; + document.getElementById('direct_link_text').innerHTML = web_root + direct_download_link_href; + <?php + } + function template_js_date_function() { + ?> + // Validity date + if (isEmpty(date)) + { + document.getElementById('date').style.display = 'none'; + } + else { + document.getElementById('date').innerHTML = + '<span class="datetime"' + + 'data-datetime="' + + dateToUtcString(date) + ' (GMT"' + + 'title="' + + dateToUtcString(date) + ' (GMT)">' + + date.format('YYYY-MM-DD hh:mm (GMT O)') + + '</span>'; + document.getElementById('date').style.display = ''; + } + <?php + } + + + + header('Content-Type: text/javascript'); define('JIRAFEAU_ROOT', dirname(__FILE__) . '/../'); require(JIRAFEAU_ROOT . 'lib/settings.php'); require(JIRAFEAU_ROOT . 'lib/functions.php'); require(JIRAFEAU_ROOT . 'lib/lang.php'); + ?> // @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later var web_root = "<?php echo $cfg['web_root']; ?>"; @@ -123,6 +222,22 @@ function convertAllDatetimeFields() { } } +// evil copy and paste from show_link - TODO refactor show link +function show_link_from_php (file_name,file_type, reference, delete_code, crypt_key, date) +{ + <?php template_js_download_page(); ?> + + + var filename = file_name; + <?php template_js_email_link(); ?> + <?php template_js_delete_link(); ?> + <?php template_js_date_function(); ?> + var type = file_type; + <?php template_js_direct_download();?> +} + + + function show_link (reference, delete_code, crypt_key, date) { // Upload finished @@ -131,78 +246,23 @@ function show_link (reference, delete_code, crypt_key, date) document.getElementById('upload_finished').style.display = ''; document.title = "100% - <?php echo empty($cfg['title']) ? 'Jirafeau' : $cfg['title']; ?>"; - // Download page - var download_link_href = 'f.php?h=' + reference; - if (crypt_key.length > 0) - { - download_link_href += '&k=' + crypt_key; - } - if (!!document.getElementById('upload_finished_download_page')) - { - document.getElementById('upload_link').href = download_link_href; - document.getElementById('upload_link_text').innerHTML = web_root + download_link_href; - } - + <?php template_js_download_page(); ?> // Email link var filename = document.getElementById('file_select').files[0].name; - var b = encodeURIComponent("<?php echo t("DL"); ?> \"" + filename + "\":") + "%0D" + "%0A"; - b += encodeURIComponent(web_root + download_link_href) + "%0D" + "%0A"; - if (false == isEmpty(date)) - { - b += "%0D" + "%0A" + encodeURIComponent("<?php echo t("VALID_UNTIL"); ?>: " + date.format('YYYY-MM-DD hh:mm (GMT O)')) + "%0D" + "%0A"; - document.getElementById('upload_link_email').href = "mailto:?body=" + b + "&subject=" + encodeURIComponent(filename); - } - // Delete link - var delete_link_href = 'f.php?h=' + reference + '&d=' + delete_code; - document.getElementById('delete_link').href = delete_link_href; - document.getElementById('delete_link_text').innerHTML = web_root + delete_link_href; + <?php template_js_email_link(); ?> + + <?php template_js_delete_link(); ?> + <?php template_js_date_function(); ?> - // Validity date - if (isEmpty(date)) - { - document.getElementById('date').style.display = 'none'; - } - else { - document.getElementById('date').innerHTML = '<span class="datetime" title="' - + dateToUtcString(date) + ' (GMT)">' - + date.format('YYYY-MM-DD hh:mm (GMT O)') - + '</span>'; - 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_href = 'f.php?h=' + reference + '&p=1'; - if (crypt_key.length > 0) - { - preview_link_href += '&k=' + crypt_key; - } + + var type = document.getElementById('file_select').files[0].type; + <?php template_js_preview_link(); ?> - // Test if content can be previewed - type = document.getElementById('file_select').files[0].type; - if ((type.startsWith('image/') - || type.startsWith('audio') - || type.startsWith('text/plain') - || type.startsWith('video/')) - && !type.includes('image/svg+xml')) - { - document.getElementById('preview_link').href = preview_link_href; - document.getElementById('preview_link_text').innerHTML = web_root + preview_link_href; - document.getElementById('upload_finished_preview').style.display = ''; - } - } + <?php template_js_direct_download();?> - // Direct download link - var direct_download_link_href = 'f.php?h=' + reference + '&d=1'; - if (crypt_key.length > 0) - { - direct_download_link_href += '&k=' + crypt_key; - } - document.getElementById('direct_link').href = direct_download_link_href; - document.getElementById('direct_link_text').innerHTML = web_root + direct_download_link_href; // Hide preview and direct download link if password is set if (document.getElementById('input_key').value.length > 0) @@ -344,7 +404,7 @@ function add_time_string_to_date(d, time) return false; } -function classic_upload (file, time, password, one_time, upload_password) +function classic_upload (file, time, password, one_time) { // Delay time estimation init as we can't have file size upload_time_estimation_init(0); @@ -397,9 +457,6 @@ function classic_upload (file, time, password, one_time, upload_password) form.append ("key", password); if (one_time) form.append ("one_time_download", '1'); - if (upload_password.length > 0) - form.append ("upload_password", upload_password); - req.send (form); } @@ -416,7 +473,7 @@ var async_global_time; var async_global_transfering = 0; var async_global_last_code; -function async_upload_start (max_size, file, time, password, one_time, upload_password) +function async_upload_start (max_size, file, time, password, one_time) { async_global_transfered = 0; async_global_file = file; @@ -455,8 +512,6 @@ function async_upload_start (max_size, file, time, password, one_time, upload_pa form.append ("key", password); if (one_time) form.append ("one_time_download", '1'); - if (upload_password.length > 0) - form.append ("upload_password", upload_password); // Start time estimation upload_time_estimation_init(async_global_file.size); @@ -529,11 +584,11 @@ function async_upload_push (code) } else { - if (req.status == 413) // Request Entity Too Large - { - // lower async_global_max_size and retry - async_global_max_size = Math.max(1, parseInt (async_global_max_size * 0.8)); - } + // lower async_global_max_size and retry + // This can occurs in several cases: + // - Request Entity Too Large (413) due to server bad configuration relative to PHP configuration + // - Server Error (500) which can happen when PHP's `max_execution_time` is too low comparared to sent size + async_global_max_size = Math.max(1, parseInt (async_global_max_size * 0.5)); async_upload_push (async_global_last_code); return; } @@ -607,8 +662,7 @@ function upload (max_chunk_size) document.getElementById('file_select').files[0], document.getElementById('select_time').value, document.getElementById('input_key').value, - one_time, - document.getElementById('upload_password').value + one_time ); } else @@ -617,8 +671,7 @@ function upload (max_chunk_size) document.getElementById('file_select').files[0], document.getElementById('select_time').value, document.getElementById('input_key').value, - one_time, - document.getElementById('upload_password').value + one_time ); } } @@ -642,9 +695,11 @@ function upload_time_estimation_add(total_transfered_size) // Let's compute the current speed var d = new Date(); var speed = upload_time_estimation_moving_average_speed; - if (d.getTime() - upload_time_estimation_transfered_date != 0) + if (d.getTime() - upload_time_estimation_transfered_date != 0) { speed = (total_transfered_size - upload_time_estimation_transfered_size) / (d.getTime() - upload_time_estimation_transfered_date); + speed = Math.max(0, speed); + } // Let's compute moving average speed on 30 values var m = (upload_time_estimation_moving_average_speed * 29 + speed) / 30; // Update global values @@ -712,7 +767,7 @@ function milliseconds_to_time_string (milliseconds) function upload_time_estimation_time() { // Estimate remaining time - if (upload_time_estimation_moving_average_speed == 0) + if (upload_time_estimation_moving_average_speed <= 0) return 0; return (upload_time_estimation_total_size - upload_time_estimation_transfered_size) / upload_time_estimation_moving_average_speed; @@ -790,22 +845,37 @@ function addCopyListener(button_id, link_id) { } } +function copyTextToClipboard(text_id){ + var copyText = document.getElementById(text_id); + copyText.select(); + copyText.setSelectionRange(0, 99999); + navigator.clipboard.writeText(copyText.value); +} + +function addTextCopyListener(button_id, text_id) { + if(document.getElementById(button_id)){ + document.getElementById(button_id) + .addEventListener("click", function() { + copyTextToClipboard(text_id);}); + } +} + function set_dark_mode() { let steel_sheet = "<?php echo 'media/' . $cfg['dark_style'] . '/style.css.php'; ?>"; let shortcut_icon = "<?php echo 'media/' . $cfg['dark_style'] . '/favicon.ico'; ?>"; document.getElementById('stylesheet').href = steel_sheet; - document.getElementById('shortcut_icon').href = steel_sheet; + document.getElementById('shortcut_icon').href = shortcut_icon; } function set_light_mode() { let steel_sheet = "<?php echo 'media/' . $cfg['style'] . '/style.css.php'; ?>"; let shortcut_icon = "<?php echo 'media/' . $cfg['style'] . '/favicon.ico'; ?>"; document.getElementById('stylesheet').href = steel_sheet; - document.getElementById('shortcut_icon').href = steel_sheet; + document.getElementById('shortcut_icon').href = shortcut_icon; } function color_scheme_preferences() { - + let dark_mode_steel_sheet = "<?php echo 'media/' . $cfg['dark_style'] . '/style.css.php'; ?>" if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { set_dark_mode();