diff --git a/build/libifm.php b/build/libifm.php index de83065..511597d 100644 --- a/build/libifm.php +++ b/build/libifm.php @@ -559,66 +559,77 @@ f00bar; "ajax_request": "AJAX Request", "archivename": "Name of the archive", "archive_create_sucess": "Archive successfully created.", + "archive_create_error": "Could not create archive.", + "archive_invalid_format": "Invalid archive format given.", "cancel": "Cancel", "close": "Close", "copy": "Copy", + "copy_error": "The following files could not be copied:", + "copy_success": "File(s) copied successfully.", "create_archive": "Create archive", "data": "Data", "delete": "Delete", "directoryname": "Directory Name", "download": "Download", - "edit": "edit", + "edit": "Edit", "editor_options": "Editor Options", "error": "Error:", "extract": "extract", + "extract_error": "Could not extract archive.", "extract_filename": "Extract file - ", + "extract_success": "Archive extracted successfully.", "file_copy_to": "to", "file_delete_confirm": "Do you really want to delete the following file -", - "file_delete_error": "File(s) could not be deleted", - "file_delete_success": "File(s) successfully deleted", - "file_display_error": "This file can not be displayed or edited", - "file_edit_success": "File successfully edited / created.", + "file_delete_error": "File(s) could not be deleted.", + "file_delete_success": "File(s) successfully deleted.", + "file_display_error": "This file can not be displayed or edited.", "file_extract_error": "File could not be extracted: ", - "file_extract_success": "File successfully extracted", - "file_load_error": "The content of this file cannot be fetched", - "file_multi_delete_confirm": "Do you really want to delete these files -", + "file_extract_success": "File successfully extracted.", "file_new": "New File", + "file_open_error": "Could not open the file.", "file_rename": "Rename File", "file_rename_error": "File could not be renamed: ", - "file_rename_success": "File successfully renamed", + "file_rename_success": "File successfully renamed.", "file_save_confirm": "Do you want to save the following file -", "file_save_error": "File could not be edited or created: ", + "file_save_success": "File successfully edited / created.", "file_upload_error": "File could not be uploaded: ", - "file_upload_success": "File successfully uploaded", + "file_upload_success": "File successfully uploaded.", "filename": "Filename", "filename_new": "New Filename", "folder_create_error": "Directory could not be created: ", - "folder_create_success": "Directory sucessfully created", + "folder_create_success": "Directory sucessfully created.", "folder_new": "New Folder", - "folder_tree_load_error": "Error while fetching the folder tree", + "folder_tree_load_error": "Error while fetching the folder tree.", "footer": "IFM - improved file manager | ifm.php hidden |", - "general_error": "General error occured: No or broken response", + "general_error": "General error occured: No or broken response.", "github": "Visit the project on GitHub", "group": "Group", - "invalid_data": "Invalid data from server", + "invalid_data": "Invalid data from server.", + "invalid_dir": "Invalid directory given.", + "invalid_params": "Invalid parameter given.", "invalid_archive_format": "Invalid archive format given. Use zip, tar, tar.gz or tar.bz2.", "last_modified": "Last Modified", - "load_config_error": "Could not load configuration", - "load_template_error": "Could not load templates", - "load_text_error": "Could not load texts", + "load_config_error": "Could not load configuration.", + "load_template_error": "Could not load templates.", + "load_text_error": "Could not load texts.", "login": "Login", "logout": "Log Off", "method": "Method", "move": "Move", + "move_error": "The following files could not be moved:", + "move_success": "File(s) successfully moved.", + "nopermissions": "You don't have the permission to do that.", "options": "Options", "owner": "Owner", "password": "Password", "path_content": "Content of", + "pattern_error_slashes": "Pattern must not contain slashes.", "permission_change_error": "Permissions could not be changed: ", - "permission_change_success": "Permissions successfully changed", + "permission_change_success": "Permissions successfully changed.", "permissions": "Permissions", - "refresh": "refresh", - "rename": "rename", + "refresh": "Refresh", + "rename": "Rename", "rename_filename": "Rename file -", "request": "Request", "response": "Response", @@ -642,8 +653,128 @@ f00bar; f00bar; $i18n["en"] = json_decode( $i18n["en"], true ); +$i18n["de"] = <<<'f00bar' +{ + "ajax_request": "AJAX Request", + "archivename": "Name des Archivs", + "archive_create_sucess": "Das Archiv wurde erfolgreich erstellt.", + "archive_create_error": "Das Archiv konnte nicht erstellt werden.", + "archive_invalid_format": "Ungültiges Archivformat angegeben.", + "cancel": "Abbrechen", + "close": "Schließen", + "copy": "Kopieren", + "copy_error": "Folgende Dateien konnten nicht kopiert werden:", + "copy_success": "Datei(en) erfolgreich kopiert.", + "create_archive": "Archiv erstellen", + "data": "Daten", + "delete": "Löschen", + "directoryname": "Ordner Name", + "download": "Download", + "edit": "Bearbeiten", + "editor_options": "Editor Optionen", + "error": "Fehler:", + "extract": "Entpacken", + "extract_error": "Das Archiv konnte nicht entpackt werden.", + "extract_filename": "Folgende Datei entpacken -", + "extract_success": "Das Archiv wurde erfolgreich entpackt.", + "file_copy_to": "zu", + "file_delete_confirm": "Soll die folgende Datei wirklich gelöscht werden:", + "file_delete_error": "Folgende Dateien konnten nicht gelöscht werden:", + "file_delete_success": "Datei(en) erfolgreich gelöscht", + "file_display_error": "Die Datei kann nicht angezeigt oder geändert werden", + "file_extract_error": "Datei konnte nicht entpackt werden: ", + "file_extract_success": "Datei erfolgreich entpackt", + "file_new": "Neue Datei", + "file_open_error": "Die Datei konnte nicht geöffnet werden", + "file_load_error": "Der Inhalt der Datei konnte nicht geladen werden", + "file_multi_delete_confirm": "Sollen diese Dateien wirklich gelöscht werden -", + "file_new": "Neue Datei", + "file_no_permission": "Sie haben keine Berechtigung diese Datei zu erstellen/bearbeiten.", + "file_not_found": "Die Datei wurde nicht gefunden, oder kann nicht geoeffnet werden.", + "file_rename": "Datei umbenennen", + "file_rename_error": "Datei konnte nicht umbenannt werden: ", + "file_rename_success": "Datei erfogreich umbenannt.", + "file_save_error": "Datei konnte nicht gespeichert werden.", + "file_save_success": "Datei erfolgreich gespeichert.", + "file_save_confirm": "Soll diese Datei wirklich gelöscht werden -", + "file_save_confirm": "Soll diese Datei wirklich gespeichert werden -", + "file_save_error": "Datei konnte nicht geändert oder angelegt werden: ", + "file_upload_error": "Datei konnte nicht hochgeladen werden: ", + "file_upload_success": "Datei erfolgreich hochgeladen", + "filename": "Dateiname", + "filename_new": "Neuer Dateiname", + "filename_slashes": "Der Dateiname darf keine Schrägstriche enthalten.", + "folder_create_error": "Verzeichnis konnte nicht angelegt werden.", + "folder_create_success": "Verzeichnis erfolgreich angelegt.", + "folder_new": "Neue Ordner", + "folder_not_found": "Das Verzeichnis wurde nicht gefunden.", + "folder_tree_load_error": "Fehler bei Laden des Verzeichnisbaums.", + "footer": "IFM - verbesserter file manager | ifm.php versteckt |", + "general_error": "Genereller Fehler aufgetreten: Keine oder unvollständige Antwort", + "github": "Besuche das Projekt auf GitHub", + "group": "Gruppe", + "invalid_action": "Fehlerhafte Aktion übergeben.", + "invalid_archive_format": "Ungültiges Archiv-Format. Möglich sind zip, tar, tar.gz oder tar.bz2.", + "invalid_data": "Fehlerhafte Daten vom Server erhalten", + "invalid_dir": "Ungültiges Verzeichnis übergegeben.", + "invalid_filename": "Ungültiger Dateiname übergegeben.", + "invalid_params": "Ungültige Parameter übergegeben.", + "invalid_url": "Ungültige URL übergegeben.", + "json_encode_error": "Konnte die Antwort nicht als JSON formatieren:", + "last_modified": "Zuletzt geändert", + "load_config_error": "Konfiguration konnte nicht geladen werden", + "load_template_error": "Vorlagen konnten nicht geladen werden", + "load_text_error": "Texte konnten nicht geladen werden", + "login": "Anmeldung", + "login_failed": "Login fehlgeschlagen", + "logout": "Abmelden", + "method": "Methode", + "move": "Verschieben", + "move_error": "Folgende Dateien konnten nicht verschoben werden:", + "move_success": "Datei(en) erfolgreich verschoben.", + "nopermissions": "Sie haben nicht die nötige Berechtigung dafür.", + "options": "Optionen", + "owner": "Besitzer", + "password": "Passwort", + "path_content": "Inhalt von", + "pattern_error_slashes": "Das Muster darf keine Slashes enthalten.", + "permission_change_error": "Berechtigungen konnten nicht geändert werden: ", + "permission_change_success": "Berechtigungen erfolgreich geändert", + "permission_parse_error": "Berechtigungen konnten nicht identifiziert werden.", + "permissions": "Berechtigungen", + "refresh": "Auffrischen", + "rename": "Umbenennen", + "rename_filename": "Folgende Datei umbenennen -", + "request": "Anfrage", + "response": "Antwort", + "save": "Speichen", + "save_wo_close": "Speichen ohne schließen", + "search": "Suchen", + "search_pattern": "Muster", + "select_destination": "Zielort auswählen", + "size": "Größe", + "soft_tabs": "Leichte Tabulatoren", + "tab_size": "Tabulatoren Größe", + "tasks": "Aufgaben", + "toggle_nav": "Navigation umschalten", + "upload": "Hochladen", + "upload_drop": "Dateien zum hochladen hier hinziehen", + "upload_file": "Datei hochladen", + "upload_remote": "Hochladen von ausserhalb", + "upload_remote_url": "Entfernte URL zum hochladen", + "username": "Benutzername", + "word_wrap": "Zeilenumbruch" +} + +f00bar; +$i18n["de"] = json_decode( $i18n["de"], true ); $this->i18n = $i18n; + + if( in_array( $this->config['language'], array_keys( $this->i18n ) ) ) + $this->l = $this->i18n[$this->config['language']]; + else + $this->l = $this->i18n[0]; } /** @@ -1218,7 +1349,7 @@ function IFM( params ) { } else if( e.target.parentElement.name && e.target.parentElement.name.substring(0, 3) == "do-" ) { e.stopPropagation(); e.preventDefault(); - var item = self.fileCache.find( x => x.guid === e.target.parentElement.dataset.id ); + var item = self.fileCache.find( function( x ) { if( x.guid === e.target.parentElement.dataset.id ) return x; } ); switch( e.target.parentElement.name.substr( 3 ) ) { case "rename": self.showRenameFileDialog( item.name ); @@ -1483,7 +1614,7 @@ function IFM( params ) { dataType: "json", success: function( data ) { if( data.status == "OK" ) { - self.showMessage( self.i18n.file_edit_success, "s" ); + self.showMessage( self.i18n.file_save_success, "s" ); self.refreshFileTable(); } else self.showMessage( self.i18n.file_save_error + data.message, "e" ); }, @@ -2064,11 +2195,16 @@ function IFM( params ) { }, dataType: "json", success: function( data ) { - data.forEach( function(e) { - e.folder = e.name.substr( 0, e.name.lastIndexOf( '/' ) ); - e.linkname = e.name.substr( e.name.lastIndexOf( '/' ) + 1 ); - }); - updateResults( data ); + if( data.status == 'ERROR' ) { + self.hideModal(); + self.showMessage( data.message, "e" ); + } else { + data.forEach( function(e) { + e.folder = e.name.substr( 0, e.name.lastIndexOf( '/' ) ); + e.linkname = e.name.substr( e.name.lastIndexOf( '/' ) + 1 ); + }); + updateResults( data ); + } } }); } @@ -2660,8 +2796,8 @@ function IFM( params ) { if( self.config.ajaxrequest ) document.getElementById( 'buttonAjaxRequest' ).onclick = function() { self.showAjaxRequestDialog(); }; if( self.config.upload ) - document.addEventListener( 'drag', function( e ) { - if( e.dataTransfer.files.length > 0 ) { + document.addEventListener( 'dragover', function( e ) { + if( Array.prototype.indexOf.call(e.dataTransfer.types, "Files") != -1 ) { e.preventDefault(); e.stopPropagation(); var div = document.getElementById( 'filedropoverlay' ); @@ -2688,11 +2824,16 @@ function IFM( params ) { e.target.parentElement.style.display = 'none'; } }; + } else { + var div = document.getElementById( 'filedropoverlay' ); + if( div.style.display == 'block' ) + div.stye.display == 'none'; } }); // drag and drop of filetable items if( self.config.copymove ) { + var isFile = function(e) { return Array.prototype.indexOf.call(e.dataTransfer.types, "Files") != -1 }; document.addEventListener( 'dragstart', function( e ) { var selectedItems = document.getElementsByClassName( 'selectedItem' ); var data; @@ -2701,8 +2842,8 @@ function IFM( params ) { x => self.inArray( x.guid, [].slice.call( selectedItems ).map( function( e ) { return e.dataset.id; } ) - ) - ); + ) + ); else data = self.fileCache.find( x => x.guid === e.target.dataset.id ); e.dataTransfer.setData( 'text/plain', JSON.stringify( data ) ); @@ -2716,21 +2857,23 @@ function IFM( params ) { }); e.dataTransfer.setDragImage( dragImage, 0, 0 ); }); - document.addEventListener( 'dragover', function( e ) { e.preventDefault(); } ); + document.addEventListener( 'dragover', function( e ) { if( ! isFile( e ) && e.target.parentElement.classList.contains( 'isDir' ) ) e.preventDefault(); } ); document.addEventListener( 'dragenter', function( e ) { - if( e.target.parentElement.classList.contains( 'isDir' ) ) + if( ! isFile( e ) && e.target.tagName == "TD" && e.target.parentElement.classList.contains( 'isDir' ) ) e.target.parentElement.classList.add( 'highlightedItem' ); }); document.addEventListener( 'dragleave', function( e ) { - if( e.target.parentElement.classList.contains( 'isDir' ) ) + if( ! isFile( e ) && e.target.tagName == "TD" && e.target.parentElement.classList.contains( 'isDir' ) ) e.target.parentElement.classList.remove( 'highlightedItem' ); }); document.addEventListener( 'drop', function( e ) { - if( e.target.parentElement.classList.contains( 'isDir' ) ) { + if( ! isFile( e ) && e.target.tagName == "TD" && e.target.parentElement.classList.contains( 'isDir' ) ) { + e.preventDefault(); + e.stopPropagation(); try { var source = JSON.parse( e.dataTransfer.getData( 'text' ) ); - console.log( "source:" ); - console.log( source ); + self.log( "source:" ); + self.log( source ); var destination = self.fileCache.find( x => x.guid === e.target.firstElementChild.id ); if( ! Array.isArray( source ) ) source = [source]; @@ -2813,12 +2956,7 @@ function IFM( params ) { } elseif( $_REQUEST["api"] == "getTemplates" ) { $this->jsonResponse( $this->templates ); } elseif( $_REQUEST["api"] == "getI18N" ) { - if( isset( $this->i18n[$this->config['language']] ) ) - $this->jsonResponse( $this->i18n[$this->config['language']] ); - else { - foreach( $this->i18n as $lang ) break; - $this->jsonResponse( $lang ); - } + $this->jsonResponse( $this->l ); } elseif( $_REQUEST["api"] == "logout" ) { unset( $_SESSION ); session_destroy(); @@ -2875,6 +3013,7 @@ function IFM( params ) { api functions */ + private function getFiles( $dir ) { $this->chDirIfNecessary( $dir ); @@ -2988,14 +3127,14 @@ function IFM( params ) { private function searchItems( $d ) { $this->chDirIfNecessary( $d['dir'] ); if( strpos( $d['pattern'], '/' ) !== false ) { - echo json_decode( array( "status" => "ERROR", "message" => "Pattern must not contain slashes" ) ); + $this->jsonResponse( array( "status" => "ERROR", "message" => $this->l['pattern_error_slashes'] ) ); exit( 1 ); } try { $results = $this->searchItemsRecursive( $d['pattern'] ); $this->jsonResponse( $results ); } catch( Exception $e ) { - $this->jsonResponse( array( "status" => "ERROR", "message" => $e->getMessage() ) ); + $this->jsonResponse( array( "status" => "ERROR", "message" => $this->l['error'] . " " . $e->getMessage() ) ); } } @@ -3051,20 +3190,20 @@ function IFM( params ) { private function copyMove( $d ) { if( $this->config['copymove'] != 1 ) { - $this->jsonResponse( array( "status" => "ERROR", "message" => "No permission to copy or move files." ) ); + $this->jsonResponse( array( "status" => "ERROR", "message" => $this->l['nopermissions'] ) ); exit( 1 ); } $this->chDirIfNecessary( $d['dir'] ); if( ! isset( $d['destination'] ) || ! $this->isPathValid( realpath( $d['destination'] ) ) ) { - $this->jsonResponse( array( "status" => "ERROR", "message" => "Invalid destination directory given." ) ); + $this->jsonResponse( array( "status" => "ERROR", "message" => $this->l['invalid_dir'] ) ); exit( 1 ); } if( ! is_array( $d['filenames'] ) ) { - $this->jsonResponse( array( "status" => "ERROR", "message" => "Invalid parameters given" ) ); + $this->jsonResponse( array( "status" => "ERROR", "message" => $this->l['invalid_params'] ) ); exit( 1 ); } if( ! in_array( $d['action'], array( 'copy', 'move' ) ) ) { - $this->jsonResponse( array( "status" => "ERROR", "message" => "Invalid action given" ) ); + $this->jsonResponse( array( "status" => "ERROR", "message" => $this->l['invalid_action'] ) ); exit( 1 ); } $err = array(); $errFlag = -1; // -1 -> all errors; 0 -> at least some errors; 1 -> no errors @@ -3086,11 +3225,11 @@ function IFM( params ) { } $action = ( $d['action'] == "copy" ? "copied" : "moved" ); if( empty( $err ) ) { - $this->jsonResponse( array( "status" => "OK", "message" => "File(s) $action successfully", "errflag" => "1" ) ); + $this->jsonResponse( array( "status" => "OK", "message" => ( $d['action'] == "copy" ? $this->l['copy_success'] : $this->l['move_success'] ), "errflag" => "1" ) ); } else { - $errmsg = "The following files could not be copied/moved: