function translate (expr) { var lang_array = { "Access denied": "Accès interdit", "Action": "Action", "Actions": "Actions", "Admin interface": "Interface d'administration", "Administration password": "Mot de passe d'administration", "An error occurred.": "Une erreur s'est produite.", "Base address": "Adresse d'origine", "By using our services, you accept our": "En utilisant nos services, vous acceptez nos", "Choose the default language": "Choisissez la langue par défaut", "Clean": "Nettoyage", "Clean expired files": "Nettoyer les fichiers périmés", "Clean old unfinished transfers": "Nettoyer les anciens transferts inachevés", "Data directory": "Dossier de stockage des données", "Del file and links": "Supprimer fichier et liens", "Del link": "Supprimer le lien", "Delete link": "Lien de suppression", "Deleted links": "Liens supprimés", "Direct download link": "Lien de téléchargement direct", "Download": "Télécharger", "Download page": "Page de téléchargement", "Expire": "Expiration", "File has been deleted.": "Le fichier a été supprimé.", "File is too big": "Le fichier est trop volumineux", "File not available.": "Fichier non disponible.", "File size is limited to": "La taille de fichier est limité à", "File uploaded !": "Fichier envoyé !", "Filename": "Nom", "Finalisation": "Finalisation", "Give the password of this file": "Donnez le mot de passe pour ce fichier", "Here is a solution": "Une solution possible", "Information": "Information", "Installation of Jirafeau": "Installation de Jirafeau", "Installer script still present": "Le script d'installation est toujours présent", "Internal error during file creation.": "Erreur interne lors la création de fichier.", "Jirafeau Project": "Projet Jirafeau", "Jirafeau has an administration interface (through admin.php). You can set a password to access the interface or leave it empty to disable the interface.": "Jirafeau a une interface d'administration (accessible via admin.php). Vous pouvez saisir un mot de passe pour y accéder ou ne pas en mettre pour désactiver l'accès à l'interface.", "Jirafeau is internationalised. Choose a specific langage or choose Automatic (langage is provided by user's browser).": "Jirafeau supporte plusieurs langages. Choisissez un langage spécifique ou Automatique (la langue utilisée est alors fournie par le navigateur du visiteur).", "Jirafeau is now fully operational": "Jirafeau est maintenant utilisable", "Jirafeau is setting the website according to the configuration you provided.": "Jirafeau se configure selon les paramètres donnés.", "Jirafeau, your web file repository": "Jirafeau, votre dépôt de fichiers", "Link deleted": "Lien supprimé", "List": "Lister", "List all files": "Lister tous les fichiers", "Login": "Connexion", "Logout": "Déconnexion", "Maximum file size": "Taille maximale", "Next step": "Étape suivante", "None": "Aucune", "Number of cleaned files": "Nombre de fichiers nettoyés", "One day": "Une journée", "One hour": "Une heure", "One minute": "Une minute", "One month": "Un mois", "One time download": "Téléchargement unique", "One week": "Une semaine", "One year": "Une année", "Onetime": "Une fois", "Origin": "Origine", "Password": "Mot de passe", "Password protection": "Protection par mot de passe", "Please make sure to delete the installer script \"install.php\" before continuing.": "Merci de supprimer le fichier \"install.php\" avant de continuer.", "Preview": "Prévisualiser", "Previous step": "Étape précédente", "Retry this step": "Ressayer cette étape", "Search": "Rechercher", "Search a specific link": "Rechercher un lien particulier", "Search files by file hash": "Rechercher par empreinte de fichier", "Search files by name": "Rechercher les fichiers par leur nom", "Select a file": "Sélectionner un fichier à envoyer:", "Send": "Envoyer", "Size": "Taille", "Sorry, the admin interface is not enabled.": "Désolé, l'interface d'administration n'est pas activée.", "Sorry, the requested file is not found": "Désolé, le fichier que vous demandez n'existe pas ou n'existe plus", "Sorry, you are not authenticated on admin interface.": "Désolé, vous n'êtes pas authentifié sur l'interface d'administration.", "Term Of Service": "Conditions d'utilisation", "The async directory is not writable!": "Le dossier 'async' ne peut être écrit ! ", "The base address of Jirafeau is the first part of the URL, until (and including) the last slash. For example: \"http://www.example.com/\". Do not forget the trailing slash!": "L'adresse d'origine de Jirafeau est la première partie de l'URL (slash de fin inclue). Par exemple: \"http://www.exemple.com/\". N'oubliez pas le slash de fin !", "The data directory is where your files and information about your files will be stored. You should put it outside your web site, or at least restrict the access to this directory. Do not forget the trailing slash!": "Le dossier \"data\" est là où seront conservés les fichiers ainsi que leurs informations. Ce dossier ne devrait pas être accessible directement par l'utilisateur. N'oubliez pas le slash de fin !", "The file directory is not writable": "Le dossier 'file' ne peut être écrit", "The following directory could not be created": "Le dossier suivant ne peut être créé", "The following directory is not writable": "Le dossier suivant ne peut être créé", "The link directory is not writable": "Le dossier 'link' ne peut être écrit", "The local configuration file could not be created. Create a lib/config.local.php file and give the write permission to the web server (preferred solution), or give the write permission to the web server on the lib directory.": "Le fichier de configuration local ne peut être créé. Créez le fichier lib/config.local.php et donnez lui les droits d'écriture par le serveur web (solution préférable) ou bien donnez les accès en écriture au dossier lib.", "The local configuration is not writable by the web server. Give the write permission to the web server on the 'lib/config.local.php file.": "Le fichier de configuration local ne peut être écrit. Donnez les droits d'écriture au fichier lib/config.local.php par le serveur web.", "The time limit of this file has expired.": "La limite de temps est dépassée.", "This file is valid until the following date": "Ce fichier est valable jusqu'à la date suivante", "This file was generated by the install process. You can edit it. Please see config.original.php to understand the configuration items.": "Ce fichier a été généré par le processus d'installation. Vous pouvez l'éditer. Merci de se référer à config.original.php pour comprendre les éléments de configuration.", "Time limit": "Limite de temps", "Type": "Type", "Upload date": "Date d’envoi", "Upload password": "Mot de passe", "Uploading ...": "Envoi en cours ...", "View link": "Lien d'affichage", "Warning, this file will self-destruct after being read": "Attention, ce fichier s'auto-détruira après sa lecture", "Wrong password.": "Mot de passe invalide.", "You are about to download": "Vous êtes sur le point de télécharger", "You are now loggued out": "Vous êtes maintenant déconnecté", "You should create this directory manually.": "Vous devriez créer manuellement ce dossier.", "You should give the write permission to the web server on this directory.": "Vous devriez donner le droits d'écriture à ce répertoire pour le rendre accessible par le serveur web.", "file": "fichier", "link": "lien", "out of": "sur", "powered by Open-Source project Jirafeau": "Propulsé par le projet Open-Source Jirafeau", "step": "étape", "year": "année", "day": "jour", "minute": "minute", "hour": "heure", "second": "seconde", "less than a second": "moins d'une seconde" } ; if (lang_array.hasOwnProperty(expr)) return lang_array[expr]; return expr; } function show_link (url, reference, delete_code, crypt_key, date) { // Upload finished document.getElementById('uploading').style.display = 'none'; document.getElementById('upload').style.display = 'none'; document.getElementById('upload_finished').style.display = ''; document.title = 'Jirafeau - 100%'; // Download page var download_link = url + 'f.php?h=' + reference; var download_link_href = url + 'f.php?h=' + reference; if (crypt_key.length > 0) { download_link += '&k=' + crypt_key; download_link_href += '&k=' + crypt_key; } if (!!document.getElementById('upload_finished_download_page')) { document.getElementById('upload_link').innerHTML = download_link; document.getElementById('upload_link').href = download_link_href; } // Email link var filename = document.getElementById('file_select').files[0].name; var b = encodeURIComponent("Download file \"" + filename + "\":") + "%0D"; b += encodeURIComponent(download_link_href) + "%0D"; if (date) b += "%0D" + encodeURIComponent("This file will be available until " + date) + "%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; document.getElementById('delete_link').href = delete_link_href; // Validity date if (date) { document.getElementById('date').innerHTML = date; document.getElementById('validity').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'; if (crypt_key.length > 0) { preview_link += '&k=' + crypt_key; preview_link_href += '&k=' + crypt_key; } // Test if content can be previewed type = document.getElementById('file_select').files[0].type; if (type.indexOf("image") > -1 || type.indexOf("audio") > -1 || 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'; 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) { if (!!document.getElementById('preview_link')) document.getElementById('upload_finished_preview').style.display = 'none'; document.getElementById('upload_direct_download').style.display = 'none'; } } 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; } 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'; } function upload_progress (e) { if (e == undefined || e == null || !e.lengthComputable) return; // Init time estimation if needed if (upload_time_estimation_total_size == 0) upload_time_estimation_total_size = e.total; // Compute percentage var p = Math.round (e.loaded * 100 / e.total); var p_str = ' '; if (p != 100) p_str = p.toString() + '%'; // Update estimation speed upload_time_estimation_add(e.loaded); // Get speed string var speed_str = upload_time_estimation_speed_string(); speed_str = upload_speed_refresh_limiter(speed_str); // Get time string var time_str = chrono_update(upload_time_estimation_time()); show_upload_progression (p_str, speed_str, time_str); } function control_selected_file_size(max_size, error_str) { f_size = document.getElementById('file_select').files[0].size; if (max_size > 0 && f_size > max_size * 1024 * 1024) { pop_failure(error_str); document.getElementById('send').style.display = 'none'; } else { document.getElementById('options').style.display = ''; document.getElementById('send').style.display = ''; 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'; } } function pop_failure (e) { var text = "An error occured"; if (typeof e !== 'undefined') text = e; text = "

" + text + "

"; document.getElementById('error_pop').innerHTML = e; document.getElementById('uploading').style.display = 'none'; document.getElementById('error_pop').style.display = ''; document.getElementById('upload').style.display = ''; document.getElementById('send').style.display = ''; } function add_time_string_to_date(d, time) { if(typeof(d) != 'object' || !(d instanceof Date)) { return false; } if (time == 'minute') { d.setSeconds (d.getSeconds() + 60); return true; } if (time == 'hour') { d.setSeconds (d.getSeconds() + 3600); return true; } if (time == 'day') { d.setSeconds (d.getSeconds() + 86400); return true; } if (time == 'week') { d.setSeconds (d.getSeconds() + 604800); return true; } if (time == 'month') { d.setSeconds (d.getSeconds() + 2419200); return true; } if (time == 'year') { d.setSeconds (d.getSeconds() + 29030400); return true; } return false; } function classic_upload (url, file, time, password, one_time, upload_password) { // Delay time estimation init as we can't have file size upload_time_estimation_init(0); var req = new XMLHttpRequest (); req.upload.addEventListener ("progress", upload_progress, false); req.addEventListener ("error", pop_failure, false); req.addEventListener ("abort", pop_failure, false); req.onreadystatechange = function () { if (req.readyState == 4 && req.status == 200) { var res = req.responseText; if (res == "Error") { pop_failure (); return; } res = res.split ("\n"); if (time != 'none') { var d = new Date(); if(!add_time_string_to_date(d, time)) return; show_link (url, res[0], res[1], res[2], d.toString()); } else show_link (url, res[0], res[1], res[2]); } } req.open ("POST", url + 'script.php' , true); var form = new FormData(); form.append ("file", file); if (time) form.append ("time", time); if (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); } function check_html5_file_api () { return window.File && window.FileReader && window.FileList && window.Blob; } 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) { async_global_transfered = 0; async_global_url = url; async_global_file = file; async_global_max_size = max_size; async_global_time = time; var req = new XMLHttpRequest (); req.addEventListener ("error", pop_failure, false); req.addEventListener ("abort", pop_failure, false); req.onreadystatechange = function () { if (req.readyState == 4 && req.status == 200) { var res = req.responseText; if (res == "Error") { pop_failure (); 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); var form = new FormData(); form.append ("filename", async_global_file.name); form.append ("type", async_global_file.type); if (time) form.append ("time", time); if (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); // Start time estimation upload_time_estimation_init(async_global_file.size); req.send (form); } function async_upload_progress (e) { if (e == undefined || e == null || !e.lengthComputable && async_global_file.size != 0) return; // Compute percentage var p = Math.round ((e.loaded + async_global_transfered) * 100 / (async_global_file.size)); var p_str = ' '; if (p != 100) p_str = p.toString() + '%'; // Update estimation speed upload_time_estimation_add(e.loaded + async_global_transfered); // Get speed string var speed_str = upload_time_estimation_speed_string(); speed_str = upload_speed_refresh_limiter(speed_str); // Get time string var time_str = chrono_update(upload_time_estimation_time()); show_upload_progression (p_str, speed_str, time_str); } function async_upload_push (code) { if (async_global_transfered == async_global_file.size) { hide_upload_progression (); async_upload_end (code); return; } var req = new XMLHttpRequest (); req.upload.addEventListener ("progress", async_upload_progress, false); req.addEventListener ("error", pop_failure, false); req.addEventListener ("abort", pop_failure, false); req.onreadystatechange = function () { if (req.readyState == 4 && req.status == 200) { var res = req.responseText; if (res == "Error") { pop_failure (); 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); var chunk_size = parseInt (async_global_max_size * 0.50); var start = async_global_transfered; var end = start + chunk_size; if (end >= async_global_file.size) end = async_global_file.size; var blob = async_global_file.slice (start, end); async_global_transfering = end; var form = new FormData(); form.append ("ref", async_global_ref); form.append ("data", blob); form.append ("code", code); req.send (form); } function async_upload_end (code) { var req = new XMLHttpRequest (); req.addEventListener ("error", pop_failure, false); req.addEventListener ("abort", pop_failure, false); req.onreadystatechange = function () { if (req.readyState == 4 && req.status == 200) { var res = req.responseText; if (res == "Error") { pop_failure (); return; } res = res.split ("\n"); 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()); } else show_link (async_global_url, res[0], res[1], res[2]); } } req.open ("POST", async_global_url + 'script.php?end_async' , true); var form = new FormData(); form.append ("ref", async_global_ref); form.append ("code", code); req.send (form); } function upload (url, max_size) { if (check_html5_file_api () && document.getElementById('file_select').files[0].size >= max_size) { async_upload_start (url, max_size, document.getElementById('file_select').files[0], document.getElementById('select_time').value, document.getElementById('input_key').value, document.getElementById('one_time_download').checked, document.getElementById('upload_password').value ); } else { classic_upload (url, document.getElementById('file_select').files[0], document.getElementById('select_time').value, document.getElementById('input_key').value, document.getElementById('one_time_download').checked, document.getElementById('upload_password').value ); } } var upload_time_estimation_total_size = 42; var upload_time_estimation_transfered_size = 42; var upload_time_estimation_transfered_date = 42; var upload_time_estimation_moving_average_speed = 42; function upload_time_estimation_init(total_size) { upload_time_estimation_total_size = total_size; upload_time_estimation_transfered_size = 0; upload_time_estimation_moving_average_speed = 0; var d = new Date(); upload_time_estimation_transfered_date = d.getTime(); } 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) speed = (total_transfered_size - upload_time_estimation_transfered_size) / (d.getTime() - upload_time_estimation_transfered_date); // Let's compute moving average speed on 30 values var m = (upload_time_estimation_moving_average_speed * 29 + speed) / 30; // Update global values upload_time_estimation_transfered_size = total_transfered_size; upload_time_estimation_transfered_date = d.getTime(); upload_time_estimation_moving_average_speed = m; } function upload_time_estimation_speed_string() { // speed ms -> s var s = upload_time_estimation_moving_average_speed * 1000; var res = 0; var scale = ''; if (s <= 1000) { res = s.toString(); scale = "o/s"; } else if (s < 1000000) { res = Math.floor(s/100) / 10; scale = "Ko/s"; } else { res = Math.floor(s/100000) / 10; scale = "Mo/s"; } if (res == 0) return ''; return res.toString() + ' ' + scale; } function milliseconds_to_time_string (milliseconds) { function numberEnding (number) { return (number > 1) ? 's' : ''; } var temp = Math.floor(milliseconds / 1000); var years = Math.floor(temp / 31536000); if (years) { return years + ' ' + translate ('year') + numberEnding(years); } var days = Math.floor((temp %= 31536000) / 86400); if (days) { return days + ' ' + translate ('day') + numberEnding(days); } var hours = Math.floor((temp %= 86400) / 3600); if (hours) { return hours + ' ' + translate ('hour') + numberEnding(hours); } var minutes = Math.floor((temp %= 3600) / 60); if (minutes) { return minutes + ' ' + translate ('minute') + numberEnding(minutes); } var seconds = temp % 60; if (seconds) { return seconds + ' ' + translate ('second') + numberEnding(seconds); } return translate ('less than a second'); } function upload_time_estimation_time() { // Estimate remaining time 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; } var chrono_last_update = 0; var chrono_time_ms = 0; var chrono_time_ms_last_update = 0; function chrono_update(time_ms) { var d = new Date(); var chrono = 0; // Don't update too often if (d.getTime() - chrono_last_update < 3000 && chrono_time_ms_last_update > 0) chrono = chrono_time_ms; else { chrono_last_update = d.getTime(); chrono_time_ms = time_ms; chrono = time_ms; chrono_time_ms_last_update = d.getTime(); } // Adjust chrono for smooth estimation chrono = chrono - (d.getTime() - chrono_time_ms_last_update); // Let's update chronometer var time_str = ''; if (chrono > 0) time_str = milliseconds_to_time_string (chrono); return time_str; } var upload_speed_refresh_limiter_last_update = 0; var upload_speed_refresh_limiter_last_value = ''; function upload_speed_refresh_limiter(speed_str) { var d = new Date(); if (d.getTime() - upload_speed_refresh_limiter_last_update > 1500) { upload_speed_refresh_limiter_last_value = speed_str; upload_speed_refresh_limiter_last_update = d.getTime(); } return upload_speed_refresh_limiter_last_value; }