Przeglądaj źródła

Started migration of File Manager to new UI

Toby Chui 2 lat temu
rodzic
commit
8d5554b225

+ 3 - 3
desktop.go

@@ -349,7 +349,7 @@ func setDesktopLocationFromPath(filename string, username string, x int, y int)
 	//Parse the location to json
 	jsonstring, err := json.Marshal(newLocation)
 	if err != nil {
-		log.Println("[Desktop] Unable to parse new file location on desktop for file: " + path)
+		systemWideLogger.PrintAndLog("Desktop", "Unable to parse new file location on desktop for file: "+path, err)
 		return err
 	}
 
@@ -477,7 +477,7 @@ func desktop_theme_handler(w http.ResponseWriter, r *http.Request) {
 		//List all the currnet themes in the list
 		themes, err := filepath.Glob("web/img/desktop/bg/*")
 		if err != nil {
-			log.Println("[Desktop] Unable to search bg from destkop image root. Are you sure the web data folder exists?")
+			systemWideLogger.PrintAndLog("Desktop", "Unable to search bg from destkop image root. Are you sure the web data folder exists?", err)
 			return
 		}
 		//Prase the results to json array
@@ -516,7 +516,7 @@ func desktop_theme_handler(w http.ResponseWriter, r *http.Request) {
 		//Return the results as JSON string
 		jsonString, err := json.Marshal(desktopThemeList)
 		if err != nil {
-			log.Println("[Desktop] Marshal desktop wallpaper list error: " + err.Error())
+			systemWideLogger.PrintAndLog("Desktop", "Unable to render desktop wallpaper list", err)
 			utils.SendJSONResponse(w, string("[]"))
 			return
 		}

+ 1 - 4
file_system.go

@@ -2577,7 +2577,7 @@ func system_fs_handleList(w http.ResponseWriter, r *http.Request) {
 	if !fshAbs.FileExists(realpath) {
 		//Path not exists
 		userRoot, _ := fshAbs.VirtualPathToRealPath("/", userinfo.Username)
-		if filepath.Clean(realpath) == filepath.Clean(userRoot) {
+		if filepath.Clean(realpath) == filepath.Clean(userRoot) || realpath == "" {
 			//Initiate user folder (Initiaed in user object)
 			err = fshAbs.MkdirAll(userRoot, 0775)
 			if err != nil {
@@ -2585,9 +2585,6 @@ func system_fs_handleList(w http.ResponseWriter, r *http.Request) {
 				utils.SendErrorResponse(w, "Unable to create user root folder due to file system error")
 				return
 			}
-		} else if !strings.Contains(filepath.ToSlash(filepath.Clean(currentDir)), "/") {
-			//User root not created. Create the root folder
-			//os.MkdirAll(filepath.Clean(realpath), 0775)
 		} else {
 			//Folder not exists
 			systemWideLogger.PrintAndLog("File System", "Requested path: "+realpath+" does not exists", nil)

+ 212 - 217
web/MDEditor/mde.html

@@ -1,218 +1,213 @@
-<html>
-    <head>
-        <title>Markdown Editor</title>
-        <script src="../script/jquery.min.js"></script>
-        <script src="../script/ao_module.js"></script>
-        <link rel="stylesheet" href="script/SimpleMDE/simplemde.min.css">
-        <script src="script/SimpleMDE/simplemde.min.js"></script>
-        <style>
-            html, body{
-                background-color:white;
-                height: calc(100% - 80px);
-            }
-            #maintext{
-                height:100% !important;
-            }
-        </style>
-    </head>
-    <body> 
-        <textarea id="maintext"></textarea>
-        <script>
-            var simplemde;          //SimpleMDE editor object
-            var filepath = "";      //Current editing filepath
-            var files = ao_module_loadInputFiles();
-            var originalTitle = "MDEditor";
-            var lastSaveContent = ""; //Content for last saved content
-            
-            $(window).on("keydown",function(event) {
-                if (event.which == 83 && event.ctrlKey){
-                    event.preventDefault();
-                    saveText();
-                }else if (event.target.tagName == "TEXTAREA"){
-                    //Some wierd hack to make SimpleMDE to work with ArozOS IME API
-                    if (parent.window.ime){
-                        parent.window.ime.focus = event.target;
-                        if (parent.window.ime.handler != null){
-                            parent.window.ime.handler(event);
-                        }
-                    }
-                    
-                }
-            });
-
-            if (files !== null && files.length > 0){
-                //Set the window name
-                ao_module_setWindowTitle("MDEditor - " + files[0].filename);
-                originalTitle = "MDEditor - " + files[0].filename;
-                //Check if there are more than 1 text files to be opened. If yes, open new windows.
-                if (files.length > 1){
-                    for (var i = 1; i < files.length; i++){
-                        var thisFilelist = [{
-                            filename: files[i].filename,
-                            filepath: files[i].filepath
-                        }];
-                        thisFilelist = encodeURIComponent(JSON.stringify(thisFilelist));
-                        ao_module_newfw({
-                            url: "MDEditor/mde.html#" + thisFilelist,
-                            width: 1080,
-                            height: 580,
-                            appicon: "MDEditor/img/notebook.png",
-                            title: "MDEditor",
-                        });
-                    }
-                }
-               
-                filepath = files[0].filepath;
-
-                //Check if this is json. If yes, parse it to string before displaying to prevent the [object Object] bug
-                var ext = filepath.split(".").pop();
-                var isJson = false;
-                if (ext == "json"){
-                    isJson = true;
-                }
-
-                //Load the file into the textarea
-                $.get("../../media?file=" + files[0].filepath + "#" + Date.now(),function(data){
-                    if (isJson){
-                        data = JSON.stringify(data);
-                    }
-                    $("#maintext").text(data);
-                    lastSaveContent = data;
-                    //Load Markdown Editor
-                    simplemde = new SimpleMDE({
-                        autofocus: true,
-                        element: document.getElementById("maintext"),
-                        forceSync: true,
-                        insertTexts: {
-                            horizontalRule: ["", "\n\n-----\n\n"],
-                            image: ["![](http://", ")"],
-                            link: ["[", "](http://)"],
-                            table: ["", "\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text     | Text      | Text     |\n\n"],
-                        },
-                        placeholder: "(Empty file)",
-                        //promptURLs: true,
-                        renderingConfig: {
-                            singleLineBreaks: true,
-                            codeSyntaxHighlighting: true,
-                        },
-                        toolbar: ["bold","italic","heading","|","code","quote","unordered-list","ordered-list","|","link","image","table","|","preview","side-by-side","fullscreen","|",
-                        {
-                            name: "savebtn",
-                            action: function(){
-                                saveText();
-                            },
-                            className: "fa fa-floppy-o",
-                            title: "Save",
-                        },"guide","|"],
-                        spellChecker: false,
-                        status: ["autosave", "lines", "words", "cursor"], // Optional usage
-                    });
-                });
-            }else{
-                simplemde = new SimpleMDE({ element: document.getElementById("maintext") });
-            }
-
-            function handleNewFileSave(filedata){
-                for (var i=0; i < filedata.length; i++){
-                    var thisFilename = filedata[i].filename;
-                    var thisFilepath = filedata[i].filepath;
-                    
-                    //Update the current editing filepath
-                    filepath = thisFilepath;
-
-                    ao_module_setWindowTitle("MDEditor - " + thisFilename);
-                    originalTitle = "MDEditor - " + thisFilename;
-                }
-
-                saveText();
-            }
-          
-            function saveText(callback=undefined){
-                if (filepath == ""){
-                    //This is a new file. Ask for save directory.
-                    ao_module_openFileSelector(handleNewFileSave, "user:/Desktop", "new",false, {
-                        defaultName: "Untitled.md"
-                    });
-                    return;
-                }
-                var newcontent = simplemde.value();
-                ao_module_agirun("./MDEditor/filesaver.js", {
-                    filepath: filepath, 
-                    content: newcontent
-                }, function(data){
-                    console.log(data);
-                    if (data.error !== undefined){
-                        alert(data.error);
-                    }else{
-                        //Save succeed. Update last saved content
-                        lastSaveContent = newcontent;
-
-                        //Update the title as well
-                        ao_module_setWindowTitle(originalTitle);
-
-                        if (callback != undefined){
-                            callback();
-                        }
-                    }
-                }, function(){
-                    alert("Save File Failed!")
-                });
-
-            }
-
-
-            setInterval(function(){
-                //Check if the content from last save matched the current value on simplemde 
-                if (!isSaved()){
-                    ao_module_setWindowTitle(originalTitle + " *");
-                }else{
-                    //No new changes
-                    ao_module_setWindowTitle(originalTitle);
-                }
-
-            }, 1000);
-
-            function isSaved(){
-                var currentContent = simplemde.value();
-                return (lastSaveContent == currentContent);
-            }
-
-            //Overwrite the ao_module_close function to allow 
-            if (!ao_module_virtualDesktop){
-                window.onbeforeunload = function(){
-                    if (!isSaved()){
-                        return "Content is not saved. Confirm Exit?";
-                    }
-                }
-            }
-
-            //Overwrite the close sequence
-            function ao_module_close(){
-                if (!isSaved()){
-                    //Not saved
-                    if (confirm("Some changes are not saved. Save before exit?")){
-                        saveText(function(){
-                            //Exit after save
-                            closeThisWindow();
-                        });
-                    }else{
-                        //User request not to save
-                        closeThisWindow();
-                    }
-                }else{
-                    //Saved. Exit
-                    closeThisWindow();
-                }
-            }
-
-            function closeThisWindow(){
-                if (!ao_module_virtualDesktop){
-                    window.close('','_parent','');
-                    window.location.href = ao_root + "SystemAO/closeTabInsturction.html";
-                    return;
-                }
-                parent.closeFwProcess(ao_module_windowID);
-            }
-       </script>
-    </body>
+<html>
+    <head>
+        <title>Markdown Editor</title>
+        <script src="../script/jquery.min.js"></script>
+        <script src="../script/ao_module.js"></script>
+        <link rel="stylesheet" href="script/SimpleMDE/simplemde.min.css">
+        <script src="script/SimpleMDE/simplemde.min.js"></script>
+        <style>
+            html, body{
+                background-color:white;
+                height: calc(100% - 80px);
+            }
+            #maintext{
+                height:100% !important;
+            }
+        </style>
+    </head>
+    <body> 
+        <textarea id="maintext"></textarea>
+        <script>
+            var simplemde;          //SimpleMDE editor object
+            var filepath = "";      //Current editing filepath
+            var files = ao_module_loadInputFiles();
+            var originalTitle = "MDEditor";
+            var lastSaveContent = ""; //Content for last saved content
+            
+            $(window).on("keydown",function(event) {
+                if (event.which == 83 && event.ctrlKey){
+                    event.preventDefault();
+                    saveText();
+                }else if (event.target.tagName == "TEXTAREA"){
+                    //Some wierd hack to make SimpleMDE to work with ArozOS IME API
+                    if (parent.window.ime){
+                        parent.window.ime.focus = event.target;
+                        if (parent.window.ime.handler != null){
+                            parent.window.ime.handler(event);
+                        }
+                    }
+                    
+                }
+            });
+
+            if (files !== null && files.length > 0){
+                //Set the window name
+                ao_module_setWindowTitle("MDEditor - " + files[0].filename);
+                originalTitle = "MDEditor - " + files[0].filename;
+                //Check if there are more than 1 text files to be opened. If yes, open new windows.
+                if (files.length > 1){
+                    for (var i = 1; i < files.length; i++){
+                        var thisFilelist = [{
+                            filename: files[i].filename,
+                            filepath: files[i].filepath
+                        }];
+                        thisFilelist = encodeURIComponent(JSON.stringify(thisFilelist));
+                        ao_module_newfw({
+                            url: "MDEditor/mde.html#" + thisFilelist,
+                            width: 1080,
+                            height: 580,
+                            appicon: "MDEditor/img/notebook.png",
+                            title: "MDEditor",
+                        });
+                    }
+                }
+               
+                filepath = files[0].filepath;
+
+                //Check if this is json. If yes, parse it to string before displaying to prevent the [object Object] bug
+                var ext = filepath.split(".").pop();
+                var isJson = false;
+                if (ext == "json"){
+                    isJson = true;
+                }
+
+                //Load the file into the textarea
+                $.get("../../media?file=" + files[0].filepath + "#" + Date.now(),function(data){
+                    if (isJson){
+                        data = JSON.stringify(data);
+                    }
+                    $("#maintext").text(data);
+                    lastSaveContent = data;
+                    //Load Markdown Editor
+                    simplemde = new SimpleMDE({
+                        autofocus: true,
+                        element: document.getElementById("maintext"),
+                        forceSync: true,
+                        insertTexts: {
+                            horizontalRule: ["", "\n\n-----\n\n"],
+                            image: ["![](http://", ")"],
+                            link: ["[", "](http://)"],
+                            table: ["", "\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text     | Text      | Text     |\n\n"],
+                        },
+                        placeholder: "(Empty file)",
+                        //promptURLs: true,
+                        renderingConfig: {
+                            singleLineBreaks: true,
+                            codeSyntaxHighlighting: true,
+                        },
+                        toolbar: ["bold","italic","heading","|","code","quote","unordered-list","ordered-list","|","link","image","table","|","preview","side-by-side","fullscreen","|",
+                        {
+                            name: "savebtn",
+                            action: function(){
+                                saveText();
+                            },
+                            className: "fa fa-floppy-o",
+                            title: "Save",
+                        },"guide","|"],
+                        spellChecker: false,
+                        status: ["autosave", "lines", "words", "cursor"], // Optional usage
+                    });
+                });
+            }else{
+                simplemde = new SimpleMDE({ element: document.getElementById("maintext") });
+            }
+
+            function handleNewFileSave(filedata){
+                for (var i=0; i < filedata.length; i++){
+                    var thisFilename = filedata[i].filename;
+                    var thisFilepath = filedata[i].filepath;
+                    
+                    //Update the current editing filepath
+                    filepath = thisFilepath;
+
+                    ao_module_setWindowTitle("MDEditor - " + thisFilename);
+                    originalTitle = "MDEditor - " + thisFilename;
+                }
+
+                saveText();
+            }
+          
+            function saveText(callback=undefined){
+                if (filepath == ""){
+                    //This is a new file. Ask for save directory.
+                    ao_module_openFileSelector(handleNewFileSave, "user:/Desktop", "new",false, {
+                        defaultName: "Untitled.md"
+                    });
+                    return;
+                }
+                var newcontent = simplemde.value();
+                ao_module_agirun("./MDEditor/filesaver.js", {
+                    filepath: filepath, 
+                    content: newcontent
+                }, function(data){
+                    console.log(data);
+                    if (data.error !== undefined){
+                        alert(data.error);
+                    }else{
+                        //Save succeed. Update last saved content
+                        lastSaveContent = newcontent;
+
+                        //Update the title as well
+                        ao_module_setWindowTitle(originalTitle);
+
+                        if (callback != undefined){
+                            callback();
+                        }
+                    }
+                }, function(){
+                    alert("Save File Failed!")
+                });
+
+            }
+
+
+            setInterval(function(){
+                //Check if the content from last save matched the current value on simplemde 
+                if (!isSaved()){
+                    ao_module_setWindowTitle(originalTitle + " *");
+                }else{
+                    //No new changes
+                    ao_module_setWindowTitle(originalTitle);
+                }
+
+            }, 1000);
+
+            function isSaved(){
+                var currentContent = simplemde.value();
+                return (lastSaveContent == currentContent);
+            }
+
+            //Overwrite the ao_module_close function to allow 
+            if (!ao_module_virtualDesktop){
+                window.onbeforeunload = function(){
+                    if (!isSaved()){
+                        return "Content is not saved. Confirm Exit?";
+                    }
+                }
+            }
+
+            //Overwrite the close sequence
+            function ao_module_close(){
+                if (!isSaved()){
+                    //Not saved
+                    if (confirm("Some changes are not saved. Save before exit?")){
+                        saveText(function(){
+                            //Exit after save
+                            closeThisWindow();
+                        });
+                    }else{
+                        //User request not to save
+                        closeThisWindow();
+                    }
+                }else{
+                    //Saved. Exit
+                    closeThisWindow();
+                }
+            }
+
+            function closeThisWindow(){
+                ao_module_closeHandler();
+            }
+       </script>
+    </body>
 </html>

+ 676 - 0
web/SystemAO/file_system/file_explorer.css

@@ -0,0 +1,676 @@
+/*
+    ArozOS File Manager css file
+*/
+body{
+    color:black;
+    height:100%;
+}
+h1, h2, h3, p, span, div { font-family: "Microsoft JhengHei","SimHei", "Apple LiGothic Medium", "STHeiti"}
+html{
+    height:100%;
+    overflow:hidden;
+}
+body.whiteTheme{
+    background-color:rgb(250, 250, 250);
+}
+.darkTheme{
+    background-color:#242330 !important;
+    color:white;
+}
+.whiteTheme{
+    color:#0d0d0d
+}
+
+/*
+
+    Navigation Bar
+    The top bar of the interface
+    see subparts for more detail configs
+*/
+.navibar{
+    position:fixed;
+    width:100%;
+    padding-left:12px;
+    padding-right:12px;
+    padding-top:6px;
+    padding-bottom:3px;
+    z-index: 99;
+}
+.navibar.darkTheme{
+    background-color:#17161f !important;
+    border-bottom:2px solid #34b7eb;
+
+}
+.navibar.whiteTheme{
+    /*box-shadow: 0 2px 4px 2px rgb(224, 224, 224);*/
+    background-color:#fcfcfc;
+    border-bottom:2px solid #34b7eb;
+}
+.whiteTheme .button.standard{
+    box-shadow: 0 1px 1px 0px rgb(190, 190, 190);
+    border: 0px;
+}
+
+.whiteTheme .button.standard:hover{
+    background-color:#82c2f0 !important;
+    color:white !important;
+}
+
+/*
+    File operation bar
+*/
+
+.fileOprBtn{
+    vertical-align: top;
+    border: 1px solid transparent;
+    cursor: pointer;
+    background-color: transparent;
+    width: 4em;
+    text-align: center;
+    padding-bottom: 0.4em;
+    padding-top: 0.5em;
+    border-radius: 0.4em;
+}
+
+.fileOprBtn:hover{
+    border: 1px solid #f0f0f0;
+    opacity: 0.8;
+}
+.fileOprBtn .opricon{
+    width: 100%;
+}
+.fileOprBtn .oprtxt{
+    color:rgb(56, 52, 52)
+}
+
+.twolines.fileOprBtn{
+    padding-top: 0.1em;
+    padding-bottom: 0.1em;
+}
+.twolines.fileOprBtn .opricon{
+    width: 80%;
+}
+.twolines.fileOprBtn .oprtxt{
+    font-size: 1em;
+}
+
+.fileoprSmallBtn{
+    cursor: pointer;
+    border: 1px solid transparent;
+    color:rgb(114, 114, 114);
+    background-color: transparent;
+    padding: 0.3em;
+    width: fit-content;
+    text-align: left;
+}
+
+.fileoprSmallBtn:hover{
+    opacity: 0.8;
+    border: 1px solid #f0f0f0;
+    border-radius: 0.4em;
+}
+
+.fileoprGroupDivider{
+    padding-right: 0.2em;
+    margin-right: 0.2em;
+    border-right: 1px solid #f0f0f0;
+}
+
+
+.rightPad{
+    margin-right:37px;
+}
+.addressBar{
+    width:100%;
+    padding:3px;
+    padding-left: 0px;
+    padding-right: 0px;
+    min-height: 35px;
+    padding-top:6px;
+}
+.breadcrumb.darkTheme{
+    background-color:transparent;
+}
+.section.darkTheme{
+    color:white !important;
+    background-color:transparent;
+}
+.selectable{
+    cursor:pointer;
+}
+.rightAlign{
+    position:absolute;
+    right:0px;
+    top:3px;
+}
+.addressText{
+    padding:5px;
+    border-radius: 3px;
+}
+.addressText.darkTheme{
+    border: 1px solid #262533;
+}
+.addressText.whiteTheme{
+    border: 1px solid #cfcfcf;
+}
+.divider{
+    color:#262533 !important;
+    background-color:transparent;
+}
+
+/*
+    Directory Sidebar
+*/
+#directorySidebar{
+    padding-top:1em;
+    padding-bottom: 1em;
+    overflow-y:auto;
+    padding-bottom:20px;
+    border-right:2px solid rgba(219, 226, 241, 0.7);
+    background-color:#f5f5f5;
+    color:rgb(44, 44, 44);
+    position:absolute;
+}
+
+.item.darkTheme{
+    color:white;
+}
+.rightmargin.icon{
+    margin-right:8px !important;
+}
+.dir{
+    cursor:pointer;
+}
+.dir:not(.active):hover{
+    color:#a3a3a3 !important;
+}
+.dir.active:hover{
+    background-color:#d2f2f7;
+}
+.dir.item{
+    padding-top: 0.4em !important;
+    padding-bottom: 0.4em !important;
+    padding-left: 1.4em !important;
+    padding-right: 1.4em !important;
+}
+.dir.item.whiteTheme{
+    color:rgb(78, 78, 78);
+}
+.vroot.active{
+    background-color: #dadada;
+}
+
+
+/*
+    Folder Viewer (Main viewer)
+*/
+#folderView{
+    position:absolute;
+    padding-left:2em;
+    padding-right:2em;
+    padding-top:2em;
+    overflow-y:auto;
+}
+#folderView.whiteTheme{
+    background-color:white;
+}
+
+.device{
+    cursor:pointer;
+}
+.device:hover{
+    color:#d1d1d1;
+}
+.accordion.darkTheme{
+    color:white !important;
+}
+.accordion.whiteTheme{
+    background-color:transparent !important;
+}
+.fileObject{
+    display:block !important;
+    cursor:pointer;
+    overflow-wrap: break-word !important;
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}
+.fileObject.darkTheme{
+    border:1px solid rgb(72, 69, 88) !important;
+}
+.segmented.list.darkTheme{
+    border:1px solid rgb(8, 8, 10) !important;
+    box-shadow: 0 0 0 0;
+    border-radius: 0px;
+}
+.fileObject.darkTheme:hover{
+    background-color:#17161f !important;
+}
+.fileObject.darkTheme:hover span{
+    background-color:#17161f !important;
+}
+.fileObject.whiteTheme:hover{
+    background-color:#f2f2f2 !important;
+}
+.fileObject.darkTheme.selected{
+    background-color:#100f16 !important;
+    
+}
+.fileObject.darkTheme.selected span{
+    background-color:#100f16 !important;
+    
+}
+.fileObject.whiteTheme.selected{
+    background-color:#d2f2f7 !important;
+    color:black !important;
+}
+.mobilePathDisplayWrapper{
+    width:100%;
+    margin-bottom:5px;
+}
+.ts.card.darkTheme{
+    border:1px solid rgb(72, 69, 88) !important;
+    box-shadow: 0 0 0 0 transparent;
+}
+.darkTheme.header{
+    color:white !important;
+    background-color:transparent !important;
+}
+.darkTheme.meta{
+    color:rgba(255, 255, 255, 0.836) !important;
+    background-color:transparent !important;
+}
+.darkTheme.description{
+    color:white !important;
+    background-color:transparent !important;
+}
+.whiteTheme.header{
+    background-color:transparent;
+}
+.whiteTheme.meta{
+    background-color:transparent;
+}
+.whiteTheme.description{
+    background-color:transparent;
+}
+#folderList{
+    margin-bottom:16px;
+}
+.msgbox{
+    padding:3px;
+}
+.closeMsgButton{
+    position:absolute;
+    top:8px;
+    right:12px;
+
+}
+.closeMsgButton{
+    cursor:pointer;
+}
+.popup{
+    position:fixed;
+    top:30px;
+    z-index:110;
+    left:34%;
+    right:34%;
+    bottom:30px;
+    padding-bottom:24px;
+    border: 0px solid transparent !important;
+}
+
+.popup.wide{
+    left:24%;
+    right:24%;
+}
+
+.popup.darkTheme{
+    -webkit-box-shadow: 3px 4px 5px 0px rgb(35, 33, 46) ;
+    -moz-box-shadow: 3px 4px 5px 0px rgb(35, 33, 46);
+    box-shadow: 3px 4px 5px 0px rgb(35, 33, 46) ;
+    border: 1px solid rgb(22, 21, 29);
+}
+
+.popup.whiteTheme{
+    -webkit-box-shadow:  3px 4px 5px 0px rgba(138,138,138,1);
+    -moz-box-shadow:  3px 4px 5px 0px rgba(138,138,138,1);
+    box-shadow:  3px 4px 5px 0px rgba(138,138,138,1);
+    border: 1px solid rgb(226, 226, 226);
+    background-color:white;
+}
+
+@media only screen and (max-width: 1920px) {
+    .popup{
+        left:35em;
+        right:35em;
+    }
+
+    .popup.wide{
+        left:20em;
+        right:20em;
+    }
+}
+
+@media only screen and (max-width: 1500px) {
+    .popup{
+        left:20em;
+        right:20em;
+    }
+    .popup.wide{
+        left:14em;
+        right:14em;
+    }
+}
+
+
+@media only screen and (max-width: 1200px) {
+    .popup{
+        left:14em;
+        right:14em;
+    }
+    .popup.wide{
+        left:5em;
+        right:5em;
+    }
+}
+
+@media only screen and (max-width: 800px) {
+    .popup{
+        left:5em;
+        right:5em;
+    }
+    .popup.wide{
+        left:2em;
+        right:2em;
+    }
+}
+
+@media only screen and (max-width: 600px) {
+    .popup{
+        position:fixed;
+        top:5%;
+        z-index:100;
+        left:1em;
+        right:1em;
+    }
+}
+
+.popupheader{
+    width:100%;
+    padding:3px;
+    padding-left:12px;
+    border-bottom:2px solid #34b7eb;
+    background-color: #171719;
+    color: white;
+    height:29px;
+}
+
+.popupcontent{
+    height: calc(100% - 29px);
+    overflow:auto;
+}
+
+.popupcloser{
+    position:absolute;
+    top:5px;
+    right:0px;
+    font-size: 120%;
+    cursor:pointer;
+}
+
+.popupbuttons{
+    cursor:pointer;
+    padding:5px;
+    padding-left:12px;
+    margin-bottom:4px;
+    border: 1px solid #dedede;
+    border-radius: 4px;
+}
+
+.popupbuttons.primary.whiteTheme{
+    background-color:#51aded;
+    box-shadow: 0 2px 1px 0px #34a2ee !important;
+    border: 1px solid transparent;
+    color:white;
+}
+
+.popupbuttons.negative{
+    background-color:#ed5151;
+    box-shadow: 0 2px 1px 0px #ee3434 !important;
+    border: 1px solid transparent;
+    color:white;
+}
+
+.popupbuttons.primary.darkTheme{
+    background-color:#413f57 !important;
+    box-shadow: 0 2px 1px 0px #3c3b50 !important;
+    border: 1px solid transparent;
+    color:white;
+}
+
+.popupbuttons.negative.darkTheme{
+    background-color:#ed5151 !important;
+}
+
+.popupbuttons.disabled{
+   opacity: 0.4;
+   pointer-events: none;
+}
+
+.popupbuttons.primary.disabled{
+    opacity: 0.4;
+    pointer-events: none;
+}
+
+.whiteTheme.allowHover:hover{
+    background-color:rgba(238, 238, 238, 0.932);
+}
+
+.whiteTheme.allowHover.primary:hover{
+    background-color:#76c0f5;
+}
+
+.allowHover.negative:hover{
+    background-color:#f57676;
+}
+
+.allowHover.negative.darkTheme:hover{
+    background-color:#f57676 !important;
+}
+
+.darkTheme.allowHover:hover{
+    background-color:#111017 !important;
+}
+
+.ts.list.darkTheme{
+    background-color:#464457 !important;
+}
+
+input.darkTheme{
+    color:white !important;
+}
+
+.ts.segmented.list.darkTheme .item{
+    color:white !important;
+}
+.newFileFormat{
+    cursor:pointer;
+}
+
+.popupWrapper{
+    position:fixed;
+    top:0px;
+    left:0px;
+    width:100%;
+    height:100%;
+    z-index:99;
+    background-color:rgba(27,27,27,0.5);
+    display:none;
+}
+@supports (backdrop-filter: none) {
+    .popupWrapper {
+        backdrop-filter: blur(5px);
+    }
+}
+.breadcrumb.whiteTheme{
+    background-color:white;
+}
+
+#openWithModuleList{
+    height:250px;
+    overflow-y:auto;
+}
+
+#openWith .segment.darkTheme{
+    color:white !important;
+}
+
+#openWithModuleList .item{
+    padding:8px;
+    padding-left:22px;
+    border-radius: 2px;
+    display: flex;
+    flex-wrap: wrap;        
+}
+
+#openWithModuleList.darkTheme .item.selected{
+    background-color:#100f16 !important;
+}
+#openWithModuleList.whiteTheme .item.selected{
+    background-color:#51aded !important;
+    color:white;
+}
+
+#openWithModuleList.darkTheme .item.selectable:hover{
+    background-color:rgba(250,250,250,0.05);
+}
+#openWithModuleList.whiteTheme .item.selectable:hover{
+    background-color:rgba(35,35,35,0.14);
+}
+.contextmenu.darkTheme .item{
+    color:white !important;
+}
+
+.contextmenu .item{
+    font-size:90% !important;
+}
+
+#uploadTab{
+    position:fixed;
+    right:0px;
+    bottom: 0px;
+    width:300px;
+    margin-bottom:0px !important;
+    padding:0px !important;
+}
+
+#uploadTab.darkTheme{
+   color:white;
+   background-color:rgba(35,35,35,0.14);
+   border: 1px solid #17161f !important;
+   box-shadow: 0px 0px 0px 0px rgba(0,0,0,0.75);
+}
+
+.statusBar{
+    height:32px;
+    background-color:#f5f5f5;
+    padding:8px;
+}
+
+.statusBar.whiteTheme{
+    color:rgb(78, 78, 78);
+}
+
+.statusBar.darkTheme{
+    background-color:#181720 !important;
+}
+
+.hideUploadButton{
+    float: right;
+    cursor:pointer;
+}
+
+.uploadList{
+    margin:8px;
+    padding-bottom:3px;
+    margin-bottom:0px;
+    max-height: 250px;
+    overflow-y:auto;
+}
+
+.uploadTask{
+    margin-top:6px;
+}
+.uploadTaskRemoveIcon{
+    position:absolute;
+    top:0px;
+    right:0px;
+    cursor:pointer;
+}
+.clearallButton{
+    padding:8px;
+    cursor:pointer;
+}
+
+.normal.object.whiteTheme{
+    color:#303030;
+}
+
+.normal.object.darkTheme{
+    color:white;
+}
+
+.sub.header.darkTheme{
+    color:rgb(190, 190, 190) !important;
+}
+
+.hex.foldername{
+    color:#2b9447 !important;
+}
+
+.um.filename{
+    color: #69aaff !important;
+}
+
+.dropdown.inverted:not(.icon){
+    background-color: #17161f !important;
+}
+
+.sharebtn{
+    cursor: pointer;
+
+}
+
+.sharebtn.darkTheme {
+    color: white !important;
+    background-color: transparent !important;
+}
+
+.sharebtn.whiteTheme:hover{
+    opacity: 0.5;
+}
+.sharebtn.darkTheme:hover{
+    opacity: 0.5;
+}
+
+i.blue{
+    color: #345eeb;
+}
+
+.fileObject.whiteTheme.hotSearchHighlight{
+    background-color: #d2f2f7 !important;
+}
+.fileObject.darkTheme.hotSearchHighlight span{
+    background-color: #d2f2f7 !important;
+}
+
+.fileObject.darkTheme.hotSearchHighlight{
+    background-color: #100f16 !important;
+}
+.fileObject.darkTheme.hotSearchHighlight span{
+    background-color: #100f16 !important;
+}
+

Plik diff jest za duży
+ 106 - 715
web/SystemAO/file_system/file_explorer.html


Plik diff jest za duży
+ 17 - 0
web/SystemAO/file_system/file_explorer_legacy.html


Plik diff jest za duży
+ 27 - 0
web/SystemAO/file_system/img/opr/copy.ai


+ 24 - 0
web/SystemAO/file_system/img/opr/copy.svg

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<polygon fill="#FFFFFF" stroke="#9FA0A0" stroke-width="3" stroke-miterlimit="10" points="78.125,32.875 78.125,83.25 
+	30.125,83.25 30.125,22 68.625,22 "/>
+<polyline fill="none" stroke="#9FA0A0" stroke-width="3" stroke-miterlimit="10" points="78.125,35.75 65.125,35.75 65.125,22 "/>
+<line fill="none" stroke="#65D0FF" stroke-width="3" stroke-miterlimit="10" x1="35.75" y1="38.667" x2="60.417" y2="38.667"/>
+<line fill="none" stroke="#65D0FF" stroke-width="3" stroke-miterlimit="10" x1="35.75" y1="45.167" x2="73.25" y2="45.167"/>
+<line fill="none" stroke="#65D0FF" stroke-width="3" stroke-miterlimit="10" x1="35.75" y1="51.25" x2="73.25" y2="51.25"/>
+<line fill="none" stroke="#65D0FF" stroke-width="3" stroke-miterlimit="10" x1="35.75" y1="57.833" x2="73.25" y2="57.833"/>
+<line fill="none" stroke="#65D0FF" stroke-width="3" stroke-miterlimit="10" x1="35.417" y1="64" x2="73.25" y2="64"/>
+<line fill="none" stroke="#65D0FF" stroke-width="3" stroke-miterlimit="10" x1="35.417" y1="70.75" x2="73.25" y2="70.75"/>
+<polygon fill="#FFFFFF" stroke="#9FA0A0" stroke-width="3" stroke-miterlimit="10" points="104.5,57.916 104.5,108.291 
+	56.5,108.291 56.5,47.041 95,47.041 "/>
+<polyline fill="none" stroke="#9FA0A0" stroke-width="3" stroke-miterlimit="10" points="104.5,60.791 91.5,60.791 91.5,47.041 "/>
+<line fill="none" stroke="#2EA7E0" stroke-width="3" stroke-miterlimit="10" x1="62.125" y1="63.708" x2="86.791" y2="63.708"/>
+<line fill="none" stroke="#2EA7E0" stroke-width="3" stroke-miterlimit="10" x1="62.125" y1="70.207" x2="99.625" y2="70.207"/>
+<line fill="none" stroke="#2EA7E0" stroke-width="3" stroke-miterlimit="10" x1="62.125" y1="76.291" x2="99.625" y2="76.291"/>
+<line fill="none" stroke="#2EA7E0" stroke-width="3" stroke-miterlimit="10" x1="62.125" y1="82.875" x2="99.625" y2="82.875"/>
+<line fill="none" stroke="#2EA7E0" stroke-width="3" stroke-miterlimit="10" x1="61.792" y1="89.041" x2="99.625" y2="89.041"/>
+<line fill="none" stroke="#2EA7E0" stroke-width="3" stroke-miterlimit="10" x1="61.792" y1="95.791" x2="99.625" y2="95.791"/>
+</svg>

Plik diff jest za duży
+ 27 - 0
web/SystemAO/file_system/img/opr/delete.ai


+ 8 - 0
web/SystemAO/file_system/img/opr/delete.svg

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<polygon fill="#EC0013" stroke="#C30D23" stroke-miterlimit="10" points="95.338,37.37 88.63,30.662 64,55.292 39.37,30.662 
+	32.662,37.37 57.292,62 32.662,86.63 39.369,93.338 64,68.707 88.63,93.338 95.338,86.631 70.707,62 "/>
+</svg>

Plik diff jest za duży
+ 27 - 0
web/SystemAO/file_system/img/opr/download.ai


+ 154 - 0
web/SystemAO/file_system/img/opr/download.svg

@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<image display="none" overflow="visible" width="347" height="333" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEA3ADcAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
+EAMCAwYAAAyIAAAUNgAAHuH/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
+Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
+JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAU0BXwMBIgACEQEDEQH/
+xADAAAEAAgMBAQAAAAAAAAAAAAAAAQQCAwUGBwEBAAIDAQAAAAAAAAAAAAAAAAEDAgQFBhAAAAQD
+BwMEAwEBAQEAAAAAAAECAxEzBCAxEhMUNAUQIRUwQTIGIiM1QCRCJREAAQIDBAgEBgICAwEAAAAA
+AQACMZEyIBEhAxAwcbFyM3OzQVGBEkBhoSKCslDBQlJiEyMEEgABAgQFBAEEAwEBAAAAAAAAAQIQ
+ETFxICGxMnJBUQNzMECBkRJSgoNhIv/aAAwDAQACEQMRAAAA9VSuUuL0pQpslAlAlAlAlAlAlAlA
+lAliJQJQJQJQJQiZQJQJRBlECdmrZZhbpXaWWIU2AAAACCYyZIjIYshiyGLIYshikRExEBGUomJC
+YEAADZr2WY26V2llgFNgAAACCXa3Ybu5y8JzZxgzIwZjBmMGaGDMa613XjlwI6vL5PQxkotEAAAD
+Zr2WY26V2llgFNgJBAAECY7ljRu7vMknPGEiEiEiEiEiNeyDVWuxhl5/Hp8vj9GSKc5CSJETBOzV
+tswt0rtLLEKbBBKlhZj0I58I6Lmk9Jy8Zj2e+pb7XOTE5YgAAAAQkQmDncbreb5m70p586uxemhK
+LqkLqtZwybdO3OLlK7SywCmxRvc23DzWWXT9PwOTj2F1PFw7g4Gr0pl7Dp0rvP3gjIQTGPOwjqR5
+vTVV6t5jp5z1GGVtszEiJg4XhPoHjtvUozeXU0lwVJsyU/UeZ9DwO3b3aN3P27lK7SzwCmxzelzb
+cPPdPmdP1/mYTG3pphAiU+4uU7nF7gYZMM+ThFTn5Y8zVy23e5tZ+M1dLmU6nX9D4f0m1s9acctj
+aRMHH8b7PxnQ5uRG7pAmCYmr6LzvofLels7dO7nb16ldpZ1hTY5vR51uHnunzOn6/wA1A2dMJAn3
+Fync4nbDHKPNek8vp16scrWpr2O5zuj0tnzXM9DytbTo36O+avZzE7nURMS5HjPZeM6PNzg29OCE
+JiYmt6HzvovMemsbtO7m716ldpZ1hTZHO6POtw890+Z0/XeagbWkEgT7i5TucTuBhlHmfTcfXw5O
+7RGhreq3eb73T2dfl91SjUxuUvQ41dqYne6aJg4/jPZ+M6PNyiY3NMCJxmJrei876Ly/pbG7Tu5u
+9epXaWdYU2OZ0+Zbh5/p8zp+u81A3NIRCQn3Fync4nbDHNq2xi81U9ZytOnjZ7NVWvpxt9KzGj6Z
+lubc5ROdqJg4/jfZeN6PNDc04EQEZVvRed9F5j01jdp3c3evUrtLOpExTY5vS5tuHnunzOn67zRE
+7mkiYhIT7i5TucTthjmABGOZGOQlEhMSImDj+M9n4vo83KDc00TEQEZV/Red9F5j01jbp3c3ev0b
+1HOoKbHN6XNtw8/0+Z0/XeaiJjb0gSmJPcXKdzidsTjnCRCRCRCQiREgiYOP4v2ni+jzZG1pwJiJ
+iYyr+i876LzHprG3Vt5u9epXaWdQU2Ob0ubbh5/p8zpev80iY2tIBMSn3Fync4nbTDHOUCUCUCUC
+UCUCYDj+K9r4ro82RtaaJiYCMtHovO+i8x6axt07ubvX6N6jnUFNjm9Lm24ef6XN6XrvNImNrSEz
+MCHt7ngWh0PfvAMcvfvAD37wEH0B8/H0B8/g+gvnw+gvno+hPnhPqvGbdezphfTAmAxnR6Lz3oPM
+elsbtO7m79+jeo2VEKbZ5vS5ttfnuhzHo+J0nMwtq60cfWduOBrifRx5uUekjzkp9HHnsj0DgSd1
+xJR2nHk67lDqOaOi58l+aMyuKkotRoJ3ZaZHoPP+g4vX37tO7n7t+ldpZ1hTYmM7MNs5T3eXhGwa
+8s4hizmWuc5NcbZNM7UNbZMtc5jCcxgzmGE5SYM5Nc5jCcplgzkwnKTXyezx9Hb0btO7n7l+ldpZ
+1hTYyxmzG1Oue1zs51yjNjExmxQzYjNhMspwznFJICRJMRDJgxy2TrGxrJ2zqkznWiNjWNvG6PJ0
+NvHdp3ae1fpXaWdYimyYREoyjKMSMZlCU4yTEiQQ2a7W9q6J3uloaG9LQ3jRG9XnUI4PXlCUoQlA
+lAAhMIbtO6zG/Su0c65gpsAiUIiM4Z4CJAARO3KM+pls7PL1Ni+nW2E62wa42k8LT3uLyOjrk0tk
+RMTAEEygAN2ndbhfo3qOdQU2AAImExGUJxTCQQuUmWPTcxdX03MTHTcwnpuYh03MHS0U0ZJida2A
+mAAAAN2ndbhfo3qOdQU2AAImCcZJxjKEwBAmUTEQEgCCUIShCYJImAEgAAN2ndbh/9oACAECAAEF
+AKkzzomImImImImImImImImImImImImImImImImImImImGTPNqZ1kzIiNCxgUQwqGFQwqGFQwqBo
+WkHC0xNqZ1koxbT+ECGFIwpGFIwpGFIU0hRP0ymlWWJtTO6EaR2PoRd2o4LRBaCWT7OWsi7wMQMG
+QYm1M4ROKmHIEw5DIcBMOkbccHoVrbi3DYdjp3Rp3QpC0Bju7UzgwUXaamStsqFsy8e0NC0QUUFG
+CCnEpGpTFLyVH1p6ZLidCgaJA0aCHJpJJMTqmcKedRGeVeUB2g58w6vClbhqNpglJWWBbLhn1oy/
+D/zAwojhyvxZnVM4U86hl+wO5z5isUZElGI2UmhDjSsbd5XCilwECBkUOV+LM6pnCnnUMv2B3OfM
+xVoihCjSaHSWTruI2EmaulFK6Ku5X4szqmcGJtHK6eznzCkxJ1hUUpcSEtKM20wLpRSuh3cr8WZ1
+TODE2jldPZz5iPXtYopXQ7uV+LM6pnCnnUMr2Hs58/QoZfsFXcp8GJ1TOFPOoZfsPZz5+hQ/D2Cr
+uU+DE6pnCnn0hfjAyHcKIzJdGoz0aholDRKGiUNEoaJQ0aho1CnbU2RRM4BV3K/Bg/21M4U85ioN
+Cdesa9YOvWPIrHkFjXrGvUNeoa9Q16hr1DXKGvWNeshrnBrVmOTOKGC/dUzhTzvYrrEBAQELELHJ
+ymZtTODBwdJ1BkTiIZiBmIGYgE4gJUlRiPSJQzEQzEDMQMxAzEDMQOQdQttibUzxARVAjWMShiUM
+SgWIz475lDpcTxQaJShEyGIxiMYjGIwpURTzamf1M42EoUs6ZnKb63nU06kGkzjZYnVM+2hxaDOu
+eidc8Nc8Nc8Nc8F1TqyMrTE6pn2+8Ch0j1wlbYnf/9oACAEDAAEFAGZcBAQEBAQEBAQEBAQEBAQE
+BAQEBAOl+tmXaxJBKIxEhEhEhEhEgSkgrTstmXZV8VqPFEx3ETETETETCVmRtvEpNl2WzLHYRESE
+Qfcl/O2hRoNpzGgj7RIRIEZB2WzLBwBuoIZiBmoBupCziv0KVaSRmtwzUDNQCUlQclsyw72RVVSk
+L16xrnAVc4EnEuhqIgdQkjJ5Jj26P1SmzKvXHXrBVyzOiOIdlMyw8cG64/zHcFGLfwCjgThxCGUq
+S6UFUz0etcZ4yxYohJ96AOymZYdl13zEQV7fwDlxpMwgoJdbMjTEnOld87jCb+PDspmWHZdd8+hX
+t/ALuNRkaFlB9yJsoM3eld8zvBX8eHZTMsPS66Z0K9v4dHG4molEEtKWbbWDrXfM7wm+hDspmWHp
+ddM6Fe38OsCHaxXfM7wm+gDspmWHpddM6Fe38PQrvmd4TfQB2UzLD0uumdCvb+HoV3zO8J+VAHZT
+MsOy62GOJRBGRKRWoJOubIa5sa5sa5sa5sa9sa5sa5sVDxOGcIQIIIsVAfd6WzLDxfrfpiWrx6I+
+PbBcegeOSPHoHj0Dx6BoEDx6B49A8egaBA8e2CoEGNAgFQoI6NMDelMSw9LPpH16L5vSmJYdIzQb
+SwbaxlrGWsYFjLWDIyBdLwRGZmhYwLGWoZahgUMChSIUlT0piV0gRiCSH4godDIo1hpIox6XBqYD
+6wEBCAdP9bEoQEAQiIiJg1kknHMai6Q7n2DL5KBn26RMRPo7LYlW1oSoipGoFSNDSNDSNDSNBLCU
+nadlsSrfYQ6QEBAdwdp2X//aAAgBAQABBQDlTMqjEoYlDEoYlDEoYlDEoYlDEoYlDEoYlDEoYlDE
+oYlDEoYlDEoYlDEoYlDEoGpQxKGJQxKGJQxKGJQxKGJQxKGJQxKGJQxKGJQxKGJQxKGJQp1KzOW3
+H+U/8tPM5bcf5TtQES9anmctuPUMElRllrGWsZaxlrGWsZaxlrGWsZaxlrGWsGhZDCsYFxNKkn6t
+PM5bcepeKVtJs5aBlJGUgZSBlIGUgZSBlIGUgZSBlIGUgZSBlIjWUiXUqQpCrMbdPM5bceoV1JJh
+07juO/o+6vlVUqXiUg0q9OnmctuLEfQK6kL9IL1VXmYqqVLqVoU2ZGR9I+hTzOW3FiHoEKSQC9U0
+kYwEMBDlEIQyUIejTzOW3Fk+3SIj1O72pC/T68BAcwRaZtRkViPSIiQiKeZy24sRD3LULS/N0I83
+Qg+doB56gB8/xwP7DxxEf2XjCTxz6H6T/Dz77bFEjmaEi8xRguYox5ijHl6MeWox5ajDXIUrysPS
+nmctuLHMPGzREk1GdI/HSVAOjqAdFUg6GqB8fVhzjatRcA2pvi+sREREREYiEREEcRGz9tQpfFt0
+70NM+NO8Mh4ZDwyXQllyKYpOjdN2mFPM5bcWOdMioac4PmZR7CBCBD8h3BQIcXDR9T6LWlBVPMNN
+hzl6pR+TqIt81VIOk5lh8JURpM+xWPsh/wDzk44RER36kfc+58eUKMjFMf7OW3FjntjTl+8yKMC6
+mZgzUCiY4rZ2FuE2mur1PKMzizTuPn42rFQwthfvxXKm2slEoiu6/ZP5yY2k3+9Af/GKY/2ctuLH
+PbCnnHfZSOL2ZdTHL1WEoQNV/Awx9hzsNWLj4SsU/TpKBdfsn88rSbz+XH7QU0zltxY57YU8477J
+Di9n1O6vUa6gzgZmQ4E4uGOcL/rMGfbhHjbrU3dfsn88j6xEREJvO+g2gppnLbixz2wp5x32DBDi
+9n1X8Xo5xin406hPG8e7TKHI8U9UvVfHqoyVhhxkfIFd1+yfzytJvO+g2gppnLbmxz2wp5x32DBD
+i9n1V3KrbNFRH8qaqXTO076HmxW1iKZqoqHKh5R9uHZUuuTd1+y/zk2k3nfx+zFNM5bc2Oe2FPOO
++wYIcXs7HMU5g7496CuOmccqEIar6xVU4R9oDgqRSGiu6/Zf5yb7Kbzv4/ZimmctubHPbGnnHfZI
+cVsuph1tLqa6iXTuwKKuxqqnlNGQ9+M4xT7jaCQlN3X7L/OTfZK/34/ZimmctubHPbGnnHfa4rZd
+T6OspdKp4ZRByhqUnpnoo46qWqi4MiUhtDZArH2b+cm+yV/vx+zFNM5bc9D6c7saaed9ritlbNJG
+MtuJJSCIhAuhWPs385N9krzFBtBTTOW3PQ+nO7Gmnnfa4rZenC19m/nJvsleYoNoKaZy25Oxz2xp
+px32uK2X+H7L/OTaK8xQbQU0zltydjntjTTjvtcVsv8AD9l/nJtFeYoNoKaZy+5sc7smJx32uK2X
++H7L/NTdZK8xQbQU0zltzY53ZU8477XFbL/D9l/mpusleYoNoKaZy25sc7sqecd9rijLR9hEhEhE
+hERESERERERERIRIRIRIYiH2Yy8anuVlN5ig2YppnLbmxzuyp5x39IGIGIGEkoJqaxCdfyA1/IDX
+8gNfyBDyHIDyHIDyHIDyHIEPI8gD5LkB5LkB5DkDHkOQHkeQHkeQHkeQHkeQDlRVukgoFZTed9Bs
+xTTOW3NjnNjTqwvG6gZiBmtjPaGc0M9oalgHVMDUsDUsDUMA6hgZ7Iz2RnNg3mxnNjObGc2DdbGa
+gZiBmIGYgZiBjQMaBiSMSRiIYiGMglZR96HaCmmctubHOROhguJk5GDgMlg0uhWYFKcBm6P3R/aP
+2j9gLMEHAROj9oInTGFwETgg4CJwQcBE4MLgwrGFYJDgwODAsYHBBwElccKwSVxwrhQx0gppnL7m
+w2lKlGy3DJaGS0MhkadkadoaVgaanGmpxpqcaanGnpxp6cadgadgZFONPTjT0401ONNTjT0409ON
+OwNOyNOwNOwNOwNOwNOwNOyNOyNO0MhoEw0MhsVaCS+KaZy+5sMfMiKMCECsQETETETBGYjaj07D
+t1jY7CAgO/Uu59o1pmdSKaZy+5sM9l+kX+cgQrIakU0zl9zYQZJVmtwzEQzUDMQM1AzEDNQM1oZr
+QzWgTrQzWgbzRBMFEdiPU1pSRPsmWcyM9kZ7Iz2RnsjPZGeyM9kZ7I1DAKpYIO1jKSUo1mKaZy25
+smRGO4/IRMRMRMRMdx3EFD8h+Q7gn3UlqHo6l4al4al4al4al4ah8KddUnuO47juO47iKhFQiYiY
+/IRMQ79KaZy256x6mkHZ79buhXppyw6cacacacachpyB05kFsmSPUiPcU0zltz0OyZeiZnGjYN5z
+KTHKSYykjKSMpIykjKSMpJDJSZVLJsOF29almctuRG2ZA7UIimp11C2mEspgQgUIEIEIEIEIEIEI
+EKilS+l1lTCrERH0KWZy25P0YW6euJps+V7+UIeUIeUIeUIeUIeUIeUIeUIeUIeUiKupS836tLM5
+fc+hC2fWHpd4F2LpH0qWZy+59I/RP/PSzOX3Po9+nYdh2t9vQ7juO/qUsz//2gAIAQICBj8Afy+g
+qVKlYeP2N1H8sUxJNXMzaptcbXG1xtd+Da78E1TImmLx+xuo/liS42lDNEKIUQohQoK1Uqd24vH7
+G6j+Uc1MlKiXGz7fBJSUzNcHj9jdR/KCSSZNGm0oJ/5Wo2fb4U/VptNqm1TM8fsbqP5QYndRZpQz
+yKncVOyxzhJMH7OqThMRU/nI8fsbqP5QZyFuJBbDrwmTJqKjSTormVgonsPH7G6j+UGXFvFR3KDO
+yrmIiCIoriWJRPYeP2N1H8oMuLeKjuQhPsT7E+wqJjUT2Hj9jdR/KDLn3io7lCRkmRKRNcaiew8f
+sbqP5QZc+8VHcsFPgUT2Hj9jdR/KDLi3io7l8KxUT2Hj9jdR/KDOQt4qO5fCsVE9h4/Y3Ufyh4+Q
+ufUrOEpyFX9jchuQ3IbkNyG5DchuM4VFE9h4/Y3Ufyh4+QuSLn1NrUNqG1DYhsQ2IbGm1psabENr
+Ta02obUNrSStbmJzPH7G6j+UPHygn0DOZ4/Y3UfygxVoimTkKoVKlSqEkWa4FXsTmhVCqFUKoVQY
+jVmqOPH7G6nk5QrIycZuNxuNxuUe5yrkhlC4+XYkqqVUqpVSqlVh4/Y3U8nLBQoUhJtVM9y1jmKi
+0VBVRMp5GeLx+xup5OXwTb1Ez2lSpUqSXrkZ4vH7G6nk5fNOePx+xup//9oACAEDAgY/AG2+lfxX
+QbbHUqVQqhVCqFUJTzM8T+LtBtsSi3KlSpUqVJ9ifXE/i7QbaGeBRb/BNCcjNMD+LtBtoZkplZG5
+DJZi/Cs1NxuQ3IZD+DtBtoKvYyMsyh2Ed3jnGcf1amRKRQlKpn/GY7i7QbaDrGaGUEuNtGZNRUb0
+P0dFIVEzP6DuLtBtoOtgS422Fzk6qMl94pFD+g7g7QbaDrYEuNtgzP1QT/kUih/mO4O0G2g6wlop
+cbaM0jOsUih/mO4O0G2g6wlopcbbDkZxSKH+Y7g7QbaDrCWilxtvhSKH+Y7g7QbaDrCWilxtvhSK
+H9B3B2g20HWKFIIqiJJTNFKKUUopRSilFKKZRS5/UdwdoNtB1iqpl0M3uNzjJ7jepm9Tc43KblNz
+jc43ONym9xucblJoq5GX8R3B2g20HWPt9C7iP4O0G2g5E6oUKFChQoZpgl1KFChQoUFVySmg/g7Q
+bbBQoZIdPwJQSUq4Gqvc6HT8FEKIdPwdPxB/B2g22GkZuoLllPA1U6CJ1xv4O0G2+CTihQoUKE0x
+v4O0G2+SpX4H8HaH/9oACAEBAQY/AG3G77BvcomaiZqJmomaiZqJmomaiZqJmomaiZqJmomaiZqJ
+momaiZqJmomaiZqJmomaiZqJmomaiZqJmomaiZqJmomaiZqJmomaiZqJmomaiZqJmomaiZqJmjia
+Mz9HJvAN7v4s8GZ+jk3gG938WeDM/RybwDe7W3rBpxUFBQUFBQUFBQUFBQUFAr7sNuuPBmfo5N4B
+vdrmm4KAVIVIVIVIVIVIVIVIVIVIVIVIVIX24OCLXRGtPBmfo5N4BvdrSm68oloucIr2uwu1h4Mz
+9HJvAN7taU3X3rBXtH3L2uENWeDM/RybwDe7WlN+C94GKBHjqjwZn6OTeAb3a3am/BEH5oai7x0H
+gzP0cm8A3usknBoiUWF3uPneqvqqvqqvqqvqq1X9Ufuxu81l5uXi1w/r4J2Y+AvQvP1Ufqqvqqvq
+o/VRUVcHXHwV59DoPBmfo5N4BvdZcWYFxAPqgB9znHFUKhctctctctcoi9ZLHC4gf0PgnhovOKoV
+KpVKpVKxFwV4NxBWW5xxu0HgzP0cm8A3us4/7BMu80cVFRUVBQWJWXstXuNyLcse9ywdcPJXh5vV
+7j7x5INcfY8+CvGItPu8joioqKioqKO1ZZ+Wg8GZ+jk3gG91m/8A5BMPzCNmKxN6ZsslzsAIr2Nw
+AOg+xvuIXLXtcPaVeMCE3IzaSYlXjEWXjzvUbZ2rLHy0O6eZ+jk3gG91n8gmbQjbZss/9DTVHYvn
+ozFBC7y0X+Pgv+p5vzGR2eFl3rqDtWXs0Hp5nbcm8A3us/kEzaEbeXssuN8CQr1eVmXaBsUFh4oZ
+d+D42XeuoO1ZezQenmdtybwDe6z+QTNoRt5eywVmX/7HQHMeAR4FOc9wIdC7QMxjw0XXXFfe8OJ8
+Ar2rJIjehYd66g7Vl7NB6eZ23JvAN7rP5BM2hG3l7LLx5m9YL3A/Z/kEHtgdBe70RzXm/wD1CJ8T
+BZbv9Y2X+uoKy9mg9PM7bk3gG91n8gmbQjby9lkZzYwdsV/ksYFBjjflORzCRcBferyf/MUhX+UF
+gjnOFzn/ANWX+upy9mg9PM7bk3gG91k8QTNoRt5eyy7LeMCFfd9hhovQyi4+wQCvMl/S97x/5/Ne
+1ouAsu9UdRl7NB6eZ23JvAN7rP5BM2hG3l7LXtcLwi7Iw+Suc03jyV3tdJXNaR8yg/8A+jEj/HwX
+taLmiCuGFl3qjqMvZod08ztuTeAb3WfyCZtRt5ezUQV/tChqH+uo9Vl7NDunmdtybwDe6z+QTNqN
+vL2fBP2HUeqy9mh3TzO25N4BvdZ/IJm1G3l7Pgneuo9Vl7NB6eZ23JvAN7rP5BM2o28vZ8E711Hq
+svZoPTzO25N4BvdZ/IJm3UZez4J3rqPVZezQenmdtybwDe6z+QTNuoy9nwTvXUeqy9mg9PM7bk3g
+G91n8gmbbZvEll3eX9KOiKjpjYioqKioqKin+MYLD66jL2aD08ztuTeAb3WfyCZttkefirmZrmhs
+Bfguc6ZXOdMrnOmVznTK5rplc50yuc6ZXNdMrmvmVzXTK5rplc50yuc6ZXOdMrnOmVznTK5zplFm
+Zmuc0+ZWOoy9mg9PM7bk3gG91k8QTSYKpVKpVKtVhcwLmBcwLmBVqtVrB6rCqCqVSqVSqVSqVSqV
+SqUVFRUdJKy9mh3Tze25N4BvdZIAJPuEEPtdIql0iqXSKpdIql0iqXyKpfIql8iqXyKpfIql8iqX
+yKpfIql8iqXyKpfIql8iqXyKpdIql0iqXSKpdIql0iqXSKpdIql0iqXSKpdIqDpFQdIql0iqXSKp
+dIql0ij9rpFZYOFw0Hp5vbcm8A3us+1w9wONxV4Y2QVDZBUNkFQJKgSWLGyC5bZBctsguW2QXLbI
+LltkFy2yC5bZBUNkFQ2QVDZBctsguW2QXLbIKhsguW2QXLbIKhsgqGyC5bZBctslQ2QVDZBUNkFQ
+2QVDZBUNkFQ2SobIK72tuPyCc0YBpuu0O6eb23JvAN7rMVHTBQ1nmoKChpgoavDE+CefnDQ7p5vb
+cm8A3u/iAsy6F+h3Tze25N4BvdZvKiAoqKioqKiqwqwqgqgqgqgrwcF5273G5VhVhVhVhVhVhVhV
+hVhVhVhX+8K8Ovw8EXGJ0Hp5vbcm8A3utQtwULGKubC1FYL715KIUQohRCiFEKIUVFRWJw0YHQen
+m9tybwDe74IDzWIULWEFePBY62/Qenm9tybwDe74G/wQdd9gxQ+SvtlvmnAj7fBY+Oud083tuTeA
+b3fAgNFzfEr2Dw8dF2oIMfAotfj5HXO6eb23JvAN7vgQ1rbj4lXXYeagoKCgoKCgoKCuuu8kBdj5
+653Tze25N4Bvd8bdfrndPN7bk3gG938W7p5vbcm8A3u/i3dPN7bl/9k=" transform="matrix(0.3272 0 0 0.3272 5.9824 3.0469)">
+</image>
+<rect x="19.833" y="28.5" fill="#322912" width="92.667" height="52.5"/>
+<rect x="19.833" y="81" fill="#DCDDDD" width="92.667" height="10.667"/>
+<rect x="50.167" y="101.167" fill="#DCDDDD" width="32.5" height="3.666"/>
+<rect x="59.833" y="91.667" fill="#C9CACA" width="13.5" height="9.5"/>
+<rect x="23.333" y="31.667" fill="#00A0E9" width="85.833" height="46"/>
+<polyline fill="none" stroke="#FFFFFF" stroke-width="8" stroke-miterlimit="10" points="55.591,51.929 66.042,63.104 
+	77.577,51.929 "/>
+<line fill="none" stroke="#FFFFFF" stroke-width="8" stroke-miterlimit="10" x1="66.042" y1="63.104" x2="66.043" y2="28.5"/>
+</svg>

Plik diff jest za duży
+ 27 - 0
web/SystemAO/file_system/img/opr/new_folder.ai


+ 15 - 0
web/SystemAO/file_system/img/opr/new_folder.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<rect x="26.2" y="17.403" fill="#F5D370" width="71.08" height="88.553"/>
+<g>
+	<g>
+		<polygon fill="#FFE79C" points="59.98,72.606 59.98,22.099 26.2,17.403 26.2,105.956 49.486,109.192 49.486,76.212 		"/>
+	</g>
+</g>
+<polygon fill="#FFFFFF" stroke="#727171" stroke-miterlimit="10" points="109.001,90.244 94.813,90.244 94.813,76.057 
+	87.313,76.057 87.313,90.244 73.126,90.244 73.126,97.744 87.313,97.744 87.313,111.932 94.813,111.932 94.813,97.744 
+	109.001,97.744 "/>
+</svg>

+ 16 - 0
web/SystemAO/file_system/img/opr/open.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g id="圖層_2">
+	<g>
+		<polygon fill="#FADA79" points="104.029,38.089 104.029,101.074 22.388,101.074 22.388,27.94 49.702,27.75 55.666,38.345 		"/>
+	</g>
+</g>
+<g id="圖層_3">
+	<g>
+		<polygon fill="#FFE79E" points="104.328,101.971 22.836,101.971 38.209,52.716 118.807,52.716 		"/>
+	</g>
+</g>
+</svg>

Plik diff jest za duży
+ 27 - 0
web/SystemAO/file_system/img/opr/paste.ai


+ 102 - 0
web/SystemAO/file_system/img/opr/paste.svg

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<image display="none" overflow="visible" width="256" height="256" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAnQCdAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
+EAMCAwYAAAYmAAAKUwAAEen/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
+Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
+JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAQEBAQMBIgACEQEDEQH/
+xADHAAEAAgMBAQAAAAAAAAAAAAAAAQQDBQcGAgEBAAMBAQAAAAAAAAAAAAAAAAEDBAIFEAAAAwUG
+BQUBAQEBAAAAAAAAAQURAgMEFBAgMDE0FRMzNQYWQCESMgdEUCIXEQAABAEEDggDBwQDAQAAAAAA
+AQIDBBGxcnMgMCExkcESMrLSM5M0NRDwUYGh0ZKiQGFxQSJS4hMjo2KCwgVQ4RQkEgABAgQGAQUB
+AQAAAAAAAAAAATEQIDCBQBGhsTKCIVBRkcESAiL/2gAMAwEAAhEDEQAAAPLYK+AvvY3qLPAPfoeA
+n3yXm595kvr5+6AOfugDn+u6l57mfBvfRTZ4J70eCe257Zxca9ZzsGvGwa8bBrxsGvHrFMafHkxw
+6x8/Xz52pExyfH3EtDj9V9+nl8k9aPJPWjydn0epq7tRMedpEGbl/T+X66ao10gAAAegBp8eTHDq
+8T8+dqDkBHz9rOccZCcUZkMGO0iUTFfSJiGXl/UOX7Kao10gAAAegBp8eTHDq/z9fPm6ggAgFynt
+7efhtGunVtoNXG1GqbUazQ+xdR4p7WOo47ou38tNEAAD0ANPjyY4dX+fr583UIhMAES2+o299exG
+6gAAAADBgs/ZxzSdx5QaUAHoAafHkxw6v8ffx5uoOZAEDb6jb317IbqAAAAAMf3GIzUcuI5Np+0c
+vNOD0ANPjyY4dW+fr583UI5mUABt9Rt7+NkN2cAAAAAACNfsaxwgHoAafHkxw6t8ffx5msOQhMwD
+cafcX17Ib8+PDaSqrRFVaFVaFVaFVaGHMRKncpnCwegBp8eTHDq3x9fHmaw5kAhBudNudFeyG/Pj
+w2kqq0RVWhVWhVWhVWhhzESp3KZwsHoAafHkxw6r8fePy9cwcyAITO50u50VbNDfnljwStqhFtUF
+tUFtUFtUFtgzRM07dQ4WD0ANPjyY4dU+PvH5WyUOZAEE7nS7rRXsh6GY+MErSqRaVRaVRaVRaVRa
+YssSqW6hwsHoAafHkxw6pj+8flbJg5kIEEzudLutNWzQ9DNKBKBKBKBKBKBKBNO3UOGA9ADT4c1c
+6jl5bky3dOcwRPT3MB0+OYjp244z02zj1Qvr+MNlKsskVlkVlkVlkVlkYspEqluocMB6AGnr2K4A
+AAA6ly3qR6sHxhspVlkississississjHkIlUt1DhoPQA09exXAAAAHUuW9RPVoEoEoEoEoEoEoE
+oE1bNU4cD0ANPXsVwAAAB1Hl1k7k4gO3uIDt7iA7e4gO3uIDt7iA7e4gO3uIDt9XjQpg9ADT1wAA
+AAAAAAAAAAAAA9AD/9oACAECAAEFAAcwQqCFQVx974u1LoqXRDiE/fPJ7MFnbMcuyUvnk9nZxog4
+0QcaIHor7xWSmV48ns7YDpPP8GGODDHBhjgww6467fPJ7O2W5mGeT2dstzMM8ns7ZXmYZ5PZ2yvM
+DTDTDTDTDTDTunk9nbK8yxpBpBpBpBpXTyeztleYPYew9h7D2HtdPJ/O2U5gYGGGGGGGGGHdPJ/O
+2U5uIcqRnSEKQhRuiFLlDeDTDTDTDTDTDTxWkGkGkGkGl/sf/9oACAEDAAEFABwzHDHDuOk0+EY4
+Rh5w3b5Z3of2sjXyzt+Do+Do+DoJ10rY18s7kQzJ35vD5vD5vD5vA3jO+WZXIv1wyzK5F+uGWZXI
+v1wyzK5F+oYQYQYQYQYQYV0syuRfrYwwwwwwwww7pZlcjfWz3HuPce497pZllbG+oaGkGkGkGkGl
+dLMsrY30xCjDjDjDjB+J8iDAwgwgwgwgwsX3HuPce49/9j//2gAIAQEAAQUAnl5ccnfIF4eQLw8g
+Xh5AvDyBeHkC8HF5ffedku9XnaDvcUHe4oO9xQd7ig73FB3uFCe7nTovkC8PIF4eQLw8gXh5AvDy
+BeHkC8PIF4eQLw8gXh5AvDyBeHkC8PIF4eQLw8gXhvCuFDXuum+8j9qJsGT2Ht8bD2+Nh7eGw9vD
+ZO33BKqCW5K7okjdEkbokjdEkbokglNJM1CAlT6zsXbw2Pt4bH28Nj7eE72ukTUtMQXpePhqGvlt
+QWluRibBeTPnLbQNoG0DaBtAhpLH5SBwVe5LcxUNs/hqGvltQWluP+7sCT+UrQCgFAKAUAKRYceH
+8Fq5LcxT12Goa+W1BaW6b8w6RxJ8cVRHFUxxVUcVWHFVw5AmXpm5LcxT12Goa+W1BaX0MtzFPXYa
+hr5bUFpcCSkKpzZSGykNlIbIQ2QhshDZCGxkHEb4PR/zZMjxf/MEkH+YJRF3L2vMIcbAUNfLagtL
+gI3KxFCUgzDnc3bMdFj31DXy2oLS4CNysSZda7PSMCbl+5O25hFmLyhr5bUFpcBG5WJHL/gia6oJ
+8vOS/cnbkwizF1Q18tqC0uAjcrEjfR3IyaFFOl52X7i7dmUWZuKGvltR/LgI3JxHnfkRwXjD0tEM
+HLTBCdkXZ2X7i7emUWZtUNfLaj+XARuT6AyIwtyErNplqhr5bUfy4CLyfQqRkSfaoa+W1H8uAi8m
+yNCdjO7fBG3wRt8EbfBG3wRt8EbfBG3wRt8EbfBG3wRBlocF6xX6Xaoa+W1H8uAi8n0Kv0u1Q18t
+qP5cBF5NkaI9Ddq4wq4wq4wq4wq4wq4wq4wq4wq4wq4wq4wgxokR6xX6Xaoa+W1B6bAReT6FX6Xa
+oa+W1B6bAROT6FX6Xaoa+W1B6bAROTZFhlFcoXBQuChcFC4KFwULgoXBQuChcFC4KFwQZZ2E9Yr9
+LtUNfLag9NgInI9CrdLtUNfLah7TYCJyLIsQ4blY+Kx8Vj4rHxWPisfFY+Kx8Vj4rHxWPiDGei2q
+3S7VDXy2oe02Aicj0Kt0y1Q18tqHtNgInI9CrdMtUNfCf+ESQnZRQkeHDIcOGOHDHDhjhwxw4Y4c
+McOGEYiKDZFhlFcoXBQuChcFC4KFwULgoXBQuChcFC4KFwQYBQbVbplqhrxCmY8EHPzpiunBXTgr
+pwV04K6cFdOCunB+eRIkVC9CrdMtUNfhfnHQLIsQ4blW+Kt8Vb4q3xVvirfFW+Kt8Vb4q3xVviDG
+eiWqvTLVDX4X5z0D0Kr0y1Q1+F+c9A9Cq9MtUNfhfnXQPQqnTLVDX4X510Bhhhhhhhhhhhhhhhhh
+hhhhhhhhhhhhhhhhhUI9stUNfhQFGfl4e8Ko3hVG8Ko3hVG8Ko3hVG8Ko3hVG8Ko3hVG8Ko3hVG8
+Ko3hVG8Ko3hVG8KoNXVHitUNf/gf/9oACAECAgY/ABtRtRtZP0NqNqeJ1LJBJFit/qdSyR5KclOS
+mSrmkVv9TqWTaTL+kz8HFDihxQ4of5TKdSybSdVqKWTaTqtRSybSdVqKWTaTqtRSybSdVgwwwww0
+qlk2k6rFxxxx5VLJtJ1WopZNpOq1XHHHP0ntlhGGGGG9Y//aAAgBAwIGPwAcfQfSTIfQfSjeZI/F
+NhhjNEj8VPHuOOOOeVzqXwN8DfA3wN4uOOOPSvFhhhhqV8DfA5YRxxxx/WP/2gAIAQEBBj8AiEp/
+2UUlKXVklJPuERESjuF94czi9+5rDmcXv3NYczi9+5rDmcXv3NYczi9+5rDmcXv3NYEgv9nFyqMi
+L/6HL5/3AlJ/2MSZHeMn3zmIcwid/EeQ5hE7+I8hzCJ38R5DmETv4jyHMInfxHkOYRO/iPIJaiP9
+lFZSilKSIdxmQ5nF79zWHM4vfuaw5nF79zWHM4vfuaw5nF79zWHM4vfuaw5nF79zWHM4vfuaw5nF
+79zWHM4vfuaw5nF79zWHM4vfuaw5nF79zWHM4vfuaw5nF79zWHM4vfuaw46I3y9YRNc5pGCSV9Rk
+RfUwh6NT+o44X2kSj7iURkQ4b2Nao4b2Nao4b2Nao4b2Naoyyh5DTdI8hv7Lv4QzlLSUqbl0bROE
+bROEbROEbROEbROESE4mU/mDJ1BOoSSpZEpVd/vIxw38bWqOG/ja1Rw38bWqOG/ja1QsoVv9N1JG
+ZFkpSfcaCILZVdNByS2yJrnNIw1TTOIehjsXC7UmXgIa5eRjF4XheF4Xgk5PtKcPF+LKPwsToqmD
+x/MpitkTXOaRhqmmcQ9DHYmXyMM3JZEjN8Bm+AzfAZvgM3wBHkhXzJVidFUxh36lMVsia5zSMNU0
+ziHoY7IktOqSRfZlHJ4C48fqV5i497l+YuPl6l+Y25epfmNun1L8xt04V+YKIiFpUZEZfdluy9pq
+sToqmMO/UpitkTXOaRhqmmcQ9DH8EdFUxh36lMVsia5zSMNU0ziHoY7SpWXkZJySSS4yG29v5htv
+b+Ybb2/mG29v5htvb+Ybb2/mG29v5htj9P8A2MonrshldT23PxBTq4t8lKvkWRJ2fhHFxHs1RL/6
+4j2aoy0mb0Es5EPSXSP8K5LTE1zmkYappnEPQx2lykU1tVDvoJxl0slSTvXQbjcrkE4f7a/tQf4V
+WiJrnNIw1TTOIehjtLlIprbL2BTL6CW04Uikn8wakka4Nw/2nOz+lXzs4muc0jDVNM4h6GO0uUim
+txF8guHiEE404UikmJSlcg3D/ad7P6VfOyia5zSMNU0ziHoY7S5SKa3F9OhbD6CW04UhkYMjI1wq
+z/ad/wAVfOxia5zSMNU0ziHoY7S5SKa2yDOPCLi1YTH3VqwmFwsa2TrSykOUrv1ISHKuFcP9l3/F
+XzsImuc0jDVNM4h6GO0uUim+BuiJafQSkfpqOTsMilIysImuc0jDVNM4h6GO0uUim+CiTO8TS5rC
+JrnNIw1TTOIehjtLlIpunJUZkV+4M5WEvIZysJeQzlYS8hnKwl5DOVhLyGcrCXkM5WEvIZysJeQz
+lYS8hnKwl5DOVhLyBqSZmZlJdk8umLqlzWETXOaRhqmmcQ9DHaXKRTfBRdUuawia5zSMNU0ziHoY
+7S5SxdOUlBrPsLqY4dXjqjh1eOqOHV46o4dXjqjh1eOqOHV46o4dXjqjh1eOqOHV46o4dXjqjh1e
+OqDJTRtkRSynL5F0xdUuawia5zSMNU0ziHoY7S5SxfBRdUuawia5zSMNU0ziGoY7S5SxfBRdUuaw
+ia5zSMNU0ziHoY7S5SxdOQZmRX5SGeoZ6hnqGeoZ6hnqGeoZ6hnqGeoZ6hlEozlKS70xdUuawia5
+zSMNU0ziGoY7S5SxfBRdUuawia5zSMNU0ziGoY7S5SxdOUSTUfYQ2KuvcNirr3DYq69w2KuvcNir
+r3DYq69w2KuvcNirr3DYq69w2KuvcNirr3A5UGiTt6YuqXNYRNc5pGGqaZxDUMdpcpYvgouqXNYR
+Nc5pGGqaZxD0MdpcpYvgouqXNYRNc5pGELv5KiPAcoZUh1KFoKT7xyENuzvCHEM7whxDO8IcQzvC
+HEM7whxDO8IcQzvCHEM7wg4RKSssq+g8or3b05BmZfMhnqGeoZ6hnqGeoZ6hnqGeoZ6hnqGeoHIo
+zl7emLqlzWETXOaR9B/pOKRLfyTkF19fqMbZeExtl4TG2XhMbZeExtl4TG2XhMbZeEwpTijUr9VV
+07p/BRdUuawia5zSO1nXK6cokmr5ENirr3DYq69w2KuvcNirr3DYq69w2KuvcNirr3DYq69w2Kuv
+cNirr3DYq69wOVBok7emLqlzWETXOaR2s65XwUXVLmsImuc0jtZ1yvgouqXMdhE1zmkdrOuX8FF1
+K5rCJrnNI7WdcoXheF4XheF4XheF4XheF4XheF4XheEXUrmsImuc0jtf6TEQ403LLkpUZFKf0HGP
+esxxj3rMcY96zHGPesxxj3rMcY96zHGPesxxj3rMcY96zHGPesxxj3rMcY96zHGPesxxj3rMcY96
+zHGPesxxj3rMGRxbpkdwyNZ2ETXOaR/8D//Z" transform="matrix(0.459 0 0 0.459 5.25 4.5)">
+</image>
+<path fill="#D0B065" stroke="#B28247" stroke-width="2" stroke-miterlimit="10" d="M81.61,90.593c0,0.923-0.748,1.671-1.671,1.671
+	H24.671c-0.923,0-1.672-0.748-1.672-1.671V20.698c0-0.924,0.749-1.672,1.672-1.672h55.268c0.923,0,1.671,0.749,1.671,1.672V90.593z"
+	/>
+<rect x="41.492" y="18.085" fill="#AFAFAF" stroke="#9FA0A0" stroke-width="2" stroke-miterlimit="10" width="22.985" height="10.552"/>
+<polygon fill="#FFFFFF" stroke="#9FA0A0" stroke-width="3" stroke-miterlimit="10" points="105.714,53.116 105.714,106.334 
+	55.004,106.334 55.004,41.627 95.679,41.627 "/>
+<polyline fill="none" stroke="#9FA0A0" stroke-width="3" stroke-miterlimit="10" points="105.714,56.153 91.98,56.153 91.98,41.627 
+	"/>
+<line fill="none" stroke="#DCDDDD" stroke-width="3" stroke-miterlimit="10" x1="60.947" y1="59.234" x2="87.006" y2="59.234"/>
+<line fill="none" stroke="#DCDDDD" stroke-width="3" stroke-miterlimit="10" x1="60.947" y1="66.101" x2="100.563" y2="66.101"/>
+<line fill="none" stroke="#DCDDDD" stroke-width="3" stroke-miterlimit="10" x1="60.947" y1="72.527" x2="100.563" y2="72.527"/>
+<line fill="none" stroke="#DCDDDD" stroke-width="3" stroke-miterlimit="10" x1="60.947" y1="79.484" x2="100.563" y2="79.484"/>
+<line fill="none" stroke="#DCDDDD" stroke-width="3" stroke-miterlimit="10" x1="60.595" y1="85.998" x2="100.563" y2="85.998"/>
+<line fill="none" stroke="#DCDDDD" stroke-width="3" stroke-miterlimit="10" x1="60.595" y1="93.129" x2="100.563" y2="93.129"/>
+</svg>

Plik diff jest za duży
+ 27 - 0
web/SystemAO/file_system/img/opr/share.ai


+ 11 - 0
web/SystemAO/file_system/img/opr/share.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<circle fill="#24CC29" cx="84.5" cy="42.833" r="13.833"/>
+<circle fill="#24CC29" cx="36.5" cy="67.334" r="13.833"/>
+<circle fill="#24CC29" cx="84.5" cy="92.167" r="13.833"/>
+<line fill="none" stroke="#24CC29" stroke-width="9" stroke-miterlimit="10" x1="36.5" y1="67.334" x2="84.5" y2="42.833"/>
+<line fill="none" stroke="#24CC29" stroke-width="9" stroke-miterlimit="10" x1="36.5" y1="67.334" x2="84.5" y2="92.166"/>
+</svg>

Plik diff jest za duży
+ 27 - 0
web/SystemAO/file_system/img/opr/upload.ai


+ 171 - 0
web/SystemAO/file_system/img/opr/upload.svg

@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g>
+	<circle fill="#86D1EF" cx="37.667" cy="71.896" r="25.083"/>
+	<circle fill="#86D1EF" cx="64.917" cy="58.895" r="36.249"/>
+	<circle fill="#86D1EF" cx="94.999" cy="76.729" r="20.417"/>
+	<path fill="#86D1EF" d="M96.416,95.146c0,1.104-0.777,2-1.738,2H37.156c-0.961,0-1.739-0.896-1.739-2v-31c0-1.106,0.778-2,1.739-2
+		h57.521c0.961,0,1.738,0.895,1.738,2V95.146z"/>
+</g>
+<image display="none" overflow="visible" width="512" height="512" xlink:href="data:image/jpeg;base64,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
+AeWG6LhvhCHNj7MT6vAf2QcwhzTaIs+jPyO7US5DbZJVDz2IQ+WGLXX08xw9ran8dujZzdMCIQPo
+NluBBs3CLT9bLIwIfajNJPhJoOAqkWfQ1LiGjpNhEfc+68eFln32kWQB9hhuiy7Ci5xLnG2TZPM8
+Pa2p/Hbo2c9+KM9o6KSRgKsxA/GaPhQu9Dhm9SF5LMJXkMwleQzCV5DMJXkMwleQzCV5DMJXkMwl
+eQzCV5DMJXkMwleQzCV5DMJXkMwleQzCV5DMJXkMwleQzCV5DMJXkMwleQzCV5DMJXkMwleQzCV5
+DMJXkMwleQzCV5DMJXkMwleQzCV5DMJXkMwleQzCV3YcNt8ErzQwfxAH60qmNFc/GJI5zh7W1P47
+dGz1A4e1tT+O3Rs9QOHtbU/jt0bPUDh7W1P47dGz1A4e1tT+O3Rs9QOHtbU/jt0bPUDh7W1P47dG
+z1A4e1tT+O3Rs9QOHtbU/jt0bPUDh7W1P47dGz1A4e1tRti2x/l+faHmLd5bvLd5bvLd5bvLd5bv
+Ld5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvL
+d5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5bvLd5f/AJX+H/t8zQf+
+S//Z" transform="matrix(0.2174 0 0 0.2174 8.354 3.207)">
+</image>
+<polyline fill="none" stroke="#FFFFFF" stroke-width="10" stroke-miterlimit="10" points="78.459,66.957 64.917,52.479 
+	49.973,66.957 "/>
+<line fill="none" stroke="#FFFFFF" stroke-width="10" stroke-miterlimit="10" x1="64.917" y1="52.479" x2="64.917" y2="97.313"/>
+</svg>

+ 679 - 635
web/SystemAO/locale/file_explorer.json

@@ -1,636 +1,680 @@
-{
-    "author": "tobychui",
-    "version": "1.0",
-    "keys": {
-        "zh-tw": {
-            "name": "繁體中文(台灣)",
-            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
-            "strings": {
-                "title/title": "檔案管理員",
-                "menu/button/download": "下載所選",
-                "menu/sort/asc": "檔名順序",
-                "menu/sort/desc": "檔名倒序",
-                "menu/sort/small": "小至大",
-                "menu/sort/large": "大至小",
-                "menu/sort/mostrecent": "新到舊",
-                "menu/sort/leastrecent": "舊到新",
-
-                "sidebar/vroot/user": "使用者",
-                "sidebar/vroot/fsh": "虛擬儲存裝置",
-
-                "sidebar/vroot/desktop": "桌面",
-                "sidebar/vroot/document": "文件",
-                "sidebar/vroot/music": "音樂",
-                "sidebar/vroot/photo": "圖片",
-                "sidebar/vroot/video": "影片",
-                "sidebar/vroot/trash": "回收箱",
-                "sidebar/vroot/download": "下載",
-                "sidebar/vroot/web": "網頁",
-                "sidebar/vroot/model": "模型",
-                "sidebar/vroot/appdata": "程序數據",
-
-                "func/search/typeToStart": "輸入關鍵字以開始搜尋",
-                "func/search/tip1": "在上面的輸入欄位輸入關鍵字,然後按「搜尋」按鈕以開始搜尋",
-                "func/search/tip2": "如你需要輸入萬用字元,請先輸入 / 號,例如: /*.mp3",
-
-                "opr/overwrite/title": "覆寫、保留或是跳過檔案",
-                "opr/overwrite/copying": "正在複製",
-                "opr/overwrite/files": "個檔案。來源:",
-                "opr/overwrite/to": " → 目的地:",
-                "opr/overwrite/dest": "目的地有 ",
-                "opr/overwrite/samename": " 個相同名稱的檔案",
-                "opr/overwrite/replace": "覆寫目的地檔案",
-                "opr/overwrite/skip": "跳過這些檔案",
-                "opr/overwrite/keep": "重新命名並保留目的地檔案",
-
-                "opr/per-remove/title": "永久移除檔案",
-                "opr/per-remove/questions": "確定<u>永久移除</u>以下檔案?<br>移除後檔案將<u>無法復原</u>",
-                "opr/per-remove/confirm": "確認永久移除所選檔案",
-                "opr/per-remove/cancel": "取消",
-
-                "opr/remove/title": "移動到資源回收箱",
-                "opr/remove/question": "確認移動所選檔案到資源回收箱?",
-                "opr/remove/confirm": "確認",
-                "opr/remove/cancel": "取消",
-
-                "opr/rename/title": "重新命名",
-                "opr/rename/instruction": "請在下方輸入欄輸入新檔案名稱",
-                "opr/rename/ok": "確認",
-                "opr/rename/cancel": "取消",
-
-                "opr/newfile/title": "創建檔案",
-                "opr/newfile/instruction": "選擇一種要新增的檔案格式樣本",
-                "opr/newfile/newempty": "或輸入檔案名稱以新增一個空白檔案",
-                "opr/newfile/create": "新增",
-                "opr/newfile/cancel": "取消",
-
-                "opr/newfolder/title": "創建資料夾",
-                "opr/newfolder/desc": "請在下方輸入欄輸入新資料夾名稱",
-                "opr/newfolder/alreadyExists": "此資料夾已存在",
-                "opr/newfolder/create": "創建",
-                "opr/newfolder/cancel": "取消",
-
-                "opr/share/title": "分享檔案",
-                "opr/share/settings": "分享設定",
-                "opr/share/setdesc": "更改誰能看到此檔案",
-                "opr/share/visableoption": "分享對像:",
-                "opr/share/anyone": "擁有連接的使用者",
-                "opr/share/anyonedesc": "任何擁有分享連接的使用者皆可下載此檔案",
-                "opr/share/signedin": "已登入的使用者",
-                "opr/share/signedindesc": "任何已登入並擁有分享連接的使用者皆可下載此檔案",
-                "opr/share/samegroup": "在同一權限群組內的使用者",
-                "opr/share/samegroupdesc": "任何擁有相同使用者權限的使用者皆可下載此檔案",
-                "opr/share/update": "更新權限",
-                "opr/share/remove": "移除檔案分享",
-                "opr/share/ok": "完成",
-
-                "opr/openwith/title": "使用 … 開啟",
-                "opr/openwith/desc": "選擇一個 WebApp 以開啟此檔案",
-                "opr/openwith/loading": "載入中…",
-                "opr/openwith/openWithWebApp": "使用所選的 WebApp 開啟檔案",
-                "opr/openwith/openWithWebAppInNewWindow": "使用所選的 WebApp 在新視窗開啟",
-                "opr/openwith/openInNewWindow": "直接於新視窗開啟檔案",
-                "opr/openwith/cancel": "取消",
-
-                "opr/shorcut/title": "在桌面建立捷徑",
-                "opr/shorcut/ok": "捷徑建立成功",
-                "opr/shorcut/error": "桌面建立捷徑失敗",
-
-                "opr/zip/zipping": "正在壓縮 ",
-                "opr/zip/unzipping": "正在解壓縮 ",
-                "opr/zip/nozipfile": "沒有已選擇的壓縮檔",
-                "opr/zip/file": " 個檔案",
-                "opr/zip/files": " 個檔案",
-
-                "contextmenu/open": "開啟",
-                "contextmenu/openWith": "使用 … 開啟",
-                "contextmenu/openNewWindow": "在新視窗開啟",
-                "contextmenu/openNewWindowVroot": "在新視窗開啟",
-                "contextmenu/openFileLocation": "開啟檔案位置",
-                "contextmenu/Share": "分享",
-                "contextmenu/MuitSelect": "切換多選",
-                "contextmenu/copy": "複製",
-                "contextmenu/paste": "貼上",
-                "contextmenu/cut": "剪下",
-                "contextmenu/newFile": "新增檔案",
-                "contextmenu/newFolder": "新增資料夾",
-                "contextmenu/upload": "上載",
-                "contextmenu/zip": "建立壓縮檔",
-                "contextmenu/unzip": "解壓縮至此",
-                "contextmenu/rename": "重新命名",
-                "contextmenu/delete": "刪除",
-                "contextmenu/backup": "備份及還原",
-                "contextmenu/refresh": "重新整理",
-                "contextmenu/download": "下載",
-                "contextmenu/sharemanager": "分享管理員",
-                "contextmenu/properties": "內容",
-
-                "upload/count/uploading": " 上載中",
-                "upload/count/pending": " 等待中",
-
-                "message/rename/success": "重新命名成功",
-                "message/copy/success": " 個檔案已複製",
-                "message/move/success": " 個檔案已移動",
-                "message/share/removed": "已停止檔案分享",
-                "message/paste/nothing": "沒有可貼上的檔案",
-                "message/remove/success": " 個檔案已被成功刪除",
-                "message/recycle/success": " 個檔案已被成功移動到資源回收箱",
-                "message/upload/started": "檔案上載已開始",
-                "message/zip/fail": "檔案壓縮失敗:原因不明",
-                "message/newfolder/success": "新資料夾建立完成",
-                "message/newItem/success": " 建立完成",
-                "message/nofileSelected": "沒有選擇檔案",
-                "message/moduleNotSupport": "此模組無法開啟任何檔案",
-                "message/unknownSize": "未知大小",
-                "message/loading": "載入中",
-                "message/initiating": "正在初始化",
-                "message/Permission Denied: You are not the file owner nor can write to this file": "存取被拒:您不是分享檔案者或有權訪問此檔案",
-                "message/Invalid path given": "檔案路徑無效",
-                "message/Unknown path given": "檔案路徑無效",
-                "message/Invalid keyword given":"關鍵字不可為空白",
-                "message/This directory is Read Only": "無法寫入到唯讀資料夾",
-                "message/Access Denied":"取存被拒",
-                "message/Given filename already exists":"此檔案名稱已存在",
-                "message/Given folder already exists":"此資料夾名稱已存在",
-                "message/Source file not exists":"來源檔案不存在",
-                "message/File already exists":"檔案已存在",
-                "message/Undefined dest location":"目標路徑不可為空白",
-                "message/Dest folder not found":"找不到目標資料夾",
-                "message/Invalid dir given":"資料夾路徑無效",
-                "message/Storage Quota Full":"儲存配額已滿",
-                "message/Unknown file opeartion given":"不支援的檔案動作請求",
-                "message/Preference value too long. Preference value can only store maximum 1024 characters.":"設定值太長。設定值只能夠少於 1024 字元",
-                "message/User not logged in":"使用者未登入",
-                "message/Folder not exists":"找不到資料夾",
-                "message/Failed to move file to trash":"無法移動到資源回收箱",
-                "message/Incompatible File System Type: Try SHIFT + DELETE to delete file permanently":"檔案系統不支援檔案回收:請使用 SHIFT + DELETE 以永久移除檔案",
-
-                "message/noMatchResults":"找不到匹配的檔案",
-                "message/noMatchResultsDesc":"伺服器找不到與此關鍵字匹配的檔案",
-                "message/noMatchResultsInst":"請檢查你的關鍵字或通配符是否正確。",
-
-                "message/folderCannotOpen":"無法開啟此資料夾",
-                "message/folderCannotOpen/codedesc":"伺服器端回傳以下錯誤訊息: ",
-
-                "message/destIdentical": "檔案來源及目的地相同",
-                "message/decodeFilelistFail": "載案置入失敗:無法讀取檔案列表",
-                "message/uploadFailed": "載案上載失敗:檔案太大或目標儲存裝置已滿",
-                "message/newFilenameIdentical": "重新命名失敗:新舊檔案名稱相同"
-            },
-            "titles": {
-                "Back": "上一頁",
-                "Parent Folder": "返回上層目錄",
-                "Open": "開啟",
-                "Open with": "以…開啟",
-                "Share File": "分享所選",
-                "Download": "下載",
-                "Copy": "複製",
-                "Paste": "貼上",
-                "Cut": "剪下",
-                "New File": "新增檔案",
-                "New Folder": "新增資料夾",
-                "Upload": "上載",
-                "Create Zip": "建立壓縮檔",
-                "Unzip Here": "解壓縮至此",
-                "Rename": "重新命名",
-                "Delete": "刪除",
-                "Refresh": "重新整理",
-                "Home": "根目錄",
-                "File Info": "檔案資訊",
-                "Toggle Folder List": "檢視根目錄列表",
-                "Dark Theme": "切換主題配色",
-                "Edit Path": "編輯路徑",
-                "Sorting Method": "檔案排序",
-                "Search": "搜尋",
-                "Block View": "顯示檔案預覽",
-                "List View": "顯示檔案列表",
-                "Case Sensitive": "區分大小寫",
-                "Clear Search": "清除搜尋結果"
-            },
-            "placeholder": {
-                "New Filename": "在此輸入新檔案名稱",
-                "New Folder Name": "在此輸入新資料夾名稱",
-                "File Search (Start wildcard search with / , e.g. /*.mp3)": "檔案搜尋(如要使用萬用字元,請先輸入 / 號,例如: /*.mp3)"
-
-            }
-        },
-        "zh-hk": {
-            "name": "繁體中文(香港)",
-            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
-            "strings": {
-                "title/title": "檔案管理員",
-                "menu/button/download": "下載所選",
-                "menu/sort/asc": "檔名順序",
-                "menu/sort/desc": "檔名倒序",
-                "menu/sort/small": "小至大",
-                "menu/sort/large": "大至小",
-                "menu/sort/mostrecent": "新到舊",
-                "menu/sort/leastrecent": "舊到新",
-
-                "sidebar/vroot/user": "使用者",
-                "sidebar/vroot/fsh": "虛擬儲存裝置",
-
-                "sidebar/vroot/desktop": "桌面",
-                "sidebar/vroot/document": "文件",
-                "sidebar/vroot/music": "音樂",
-                "sidebar/vroot/photo": "圖片",
-                "sidebar/vroot/video": "影片",
-                "sidebar/vroot/trash": "回收箱",
-                "sidebar/vroot/download": "下載",
-                "sidebar/vroot/web": "網頁",
-                "sidebar/vroot/model": "模型",
-                "sidebar/vroot/appdata": "程序數據",
-
-                "func/search/typeToStart": "輸入關鍵字以開始搜尋",
-                "func/search/tip1": "在上面的輸入欄位輸入關鍵字,然後按「搜尋」按鈕以開始搜尋",
-                "func/search/tip2": "如你需要輸入萬用字元,請先輸入 / 號,例如: /*.mp3",
-
-                "opr/overwrite/title": "覆寫、保留或是跳過檔案",
-                "opr/overwrite/copying": "正在複製",
-                "opr/overwrite/files": "個檔案。來源:",
-                "opr/overwrite/to": " → 目的地:",
-                "opr/overwrite/dest": "目的地有 ",
-                "opr/overwrite/samename": " 個相同名稱的檔案",
-                "opr/overwrite/replace": "覆寫目的地檔案",
-                "opr/overwrite/skip": "跳過這些檔案",
-                "opr/overwrite/keep": "重新命名並保留目的地檔案",
-
-                "opr/per-remove/title": "永久移除檔案",
-                "opr/per-remove/questions": "確定<u>永久移除</u>以下檔案?<br>移除後檔案將<u>無法復原</u>",
-                "opr/per-remove/confirm": "確認永久移除所選檔案",
-                "opr/per-remove/cancel": "取消",
-
-                "opr/remove/title": "移動到資源回收箱",
-                "opr/remove/question": "確認移動所選檔案到資源回收箱?",
-                "opr/remove/confirm": "確認",
-                "opr/remove/cancel": "取消",
-
-                "opr/rename/title": "重新命名",
-                "opr/rename/instruction": "請在下方輸入欄輸入新檔案名稱",
-                "opr/rename/ok": "確認",
-                "opr/rename/cancel": "取消",
-
-                "opr/newfile/title": "創建檔案",
-                "opr/newfile/instruction": "選擇一種要新增的檔案格式樣本",
-                "opr/newfile/newempty": "或輸入檔案名稱以新增一個空白檔案",
-                "opr/newfile/create": "新增",
-                "opr/newfile/cancel": "取消",
-
-                "opr/newfolder/title": "創建資料夾",
-                "opr/newfolder/desc": "請在下方輸入欄輸入新資料夾名稱",
-                "opr/newfolder/alreadyExists": "此資料夾已存在",
-                "opr/newfolder/create": "創建",
-                "opr/newfolder/cancel": "取消",
-
-                "opr/share/title": "分享檔案",
-                "opr/share/settings": "分享設定",
-                "opr/share/setdesc": "更改誰能看到此檔案",
-                "opr/share/visableoption": "分享對像:",
-                "opr/share/anyone": "擁有連接的使用者",
-                "opr/share/anyonedesc": "任何擁有分享連接的使用者皆可下載此檔案",
-                "opr/share/signedin": "已登入的使用者",
-                "opr/share/signedindesc": "任何已登入並擁有分享連接的使用者皆可下載此檔案",
-                "opr/share/samegroup": "在同一權限群組內的使用者",
-                "opr/share/samegroupdesc": "任何擁有相同使用者權限的使用者皆可下載此檔案",
-                "opr/share/update": "更新權限",
-                "opr/share/remove": "移除檔案分享",
-                "opr/share/ok": "完成",
-
-                "opr/openwith/title": "使用 … 開啟",
-                "opr/openwith/desc": "選擇一個 WebApp 以開啟此檔案",
-                "opr/openwith/loading": "載入中…",
-                "opr/openwith/openWithWebApp": "使用所選的 WebApp 開啟檔案",
-                "opr/openwith/openWithWebAppInNewWindow": "使用所選的 WebApp 在新視窗開啟",
-                "opr/openwith/openInNewWindow": "直接於新視窗開啟檔案",
-                "opr/openwith/cancel": "取消",
-
-                "opr/shorcut/title": "在桌面建立捷徑",
-                "opr/shorcut/ok": "捷徑建立成功",
-                "opr/shorcut/error": "桌面建立捷徑失敗",
-
-                "opr/zip/zipping": "正在壓縮 ",
-                "opr/zip/unzipping": "正在解壓縮 ",
-                "opr/zip/nozipfile": "沒有已選擇的壓縮檔",
-                "opr/zip/file": " 個檔案",
-                "opr/zip/files": " 個檔案",
-
-                "contextmenu/open": "開啟",
-                "contextmenu/openWith": "使用 … 開啟",
-                "contextmenu/openNewWindow": "在新視窗開啟",
-                "contextmenu/openNewWindowVroot": "在新視窗開啟",
-                "contextmenu/openFileLocation": "開啟檔案位置",
-                "contextmenu/Share": "分享",
-                "contextmenu/MuitSelect": "切換多選",
-                "contextmenu/copy": "複製",
-                "contextmenu/paste": "貼上",
-                "contextmenu/cut": "剪下",
-                "contextmenu/newFile": "新增檔案",
-                "contextmenu/newFolder": "新增資料夾",
-                "contextmenu/upload": "上載",
-                "contextmenu/zip": "建立壓縮檔",
-                "contextmenu/unzip": "解壓縮至此",
-                "contextmenu/rename": "重新命名",
-                "contextmenu/delete": "刪除",
-                "contextmenu/backup": "備份及還原",
-                "contextmenu/refresh": "重新整理",
-                "contextmenu/download": "下載",
-                "contextmenu/sharemanager": "分享管理員",
-                "contextmenu/properties": "內容",
-
-                "upload/count/uploading": " 上載中",
-                "upload/count/pending": " 等待中",
-
-                "message/rename/success": "重新命名成功",
-                "message/copy/success": " 個檔案已複製",
-                "message/move/success": " 個檔案已移動",
-                "message/share/removed": "已停止檔案分享",
-                "message/paste/nothing": "沒有可貼上的檔案",
-                "message/remove/success": " 個檔案已被成功刪除",
-                "message/recycle/success": " 個檔案已被成功移動到資源回收箱",
-                "message/upload/started": "檔案上載已開始",
-                "message/zip/fail": "檔案壓縮失敗:原因不明",
-                "message/newfolder/success": "新資料夾建立完成",
-                "message/newItem/success": " 建立完成",
-                "message/nofileSelected": "沒有選擇檔案",
-                "message/moduleNotSupport": "此模組無法開啟任何檔案",
-                "message/unknownSize": "未知大小",
-                "message/loading": "載入中",
-                "message/initiating": "正在初始化",
-                "message/Permission Denied: You are not the file owner nor can write to this file": "存取被拒:您不是分享檔案者或有權訪問此檔案",
-                "message/Invalid path given": "檔案路徑無效",
-                "message/Unknown path given": "檔案路徑無效",
-                "message/Invalid keyword given":"關鍵字不可為空白",
-                "message/This directory is Read Only": "無法寫入到唯讀資料夾",
-                "message/Access Denied":"取存被拒",
-                "message/Given filename already exists":"此檔案名稱已存在",
-                "message/Given folder already exists":"此資料夾名稱已存在",
-                "message/Source file not exists":"來源檔案不存在",
-                "message/File already exists":"檔案已存在",
-                "message/Undefined dest location":"目標路徑不可為空白",
-                "message/Dest folder not found":"找不到目標資料夾",
-                "message/Invalid dir given":"資料夾路徑無效",
-                "message/Storage Quota Full":"儲存配額已滿",
-                "message/Unknown file opeartion given":"不支援的檔案動作請求",
-                "message/Preference value too long. Preference value can only store maximum 1024 characters.":"設定值太長。設定值只能夠少於 1024 字元",
-                "message/User not logged in":"使用者未登入",
-                "message/Folder not exists":"找不到資料夾",
-                "message/Failed to move file to trash":"無法移動到資源回收箱",
-                "message/Incompatible File System Type: Try SHIFT + DELETE to delete file permanently":"檔案系統不支援檔案回收:請使用 SHIFT + DELETE 以永久移除檔案",
-
-                "message/noMatchResults":"找不到匹配的檔案",
-                "message/noMatchResultsDesc":"伺服器找不到與此關鍵字匹配的檔案",
-                "message/noMatchResultsInst":"請檢查你的關鍵字或通配符是否正確。",
-
-                "message/destIdentical": "檔案來源及目的地相同",
-                "message/decodeFilelistFail": "載案置入失敗:無法讀取檔案列表",
-                "message/uploadFailed": "載案上載失敗:檔案太大或目標儲存裝置已滿",
-                "message/newFilenameIdentical": "重新命名失敗:新舊檔案名稱相同"
-            },
-            "titles": {
-                "Back": "上一頁",
-                "Parent Folder": "返回上層目錄",
-                "Open": "開啟",
-                "Open with": "以…開啟",
-                "Share File": "分享所選",
-                "Download": "下載",
-                "Copy": "複製",
-                "Paste": "貼上",
-                "Cut": "剪下",
-                "New File": "新增檔案",
-                "New Folder": "新增資料夾",
-                "Upload": "上載",
-                "Create Zip": "建立壓縮檔",
-                "Unzip Here": "解壓縮至此",
-                "Rename": "重新命名",
-                "Delete": "刪除",
-                "Refresh": "重新整理",
-                "Home": "根目錄",
-                "File Info": "檔案資訊",
-                "Toggle Folder List": "檢視根目錄列表",
-                "Dark Theme": "切換主題配色",
-                "Edit Path": "編輯路徑",
-                "Sorting Method": "檔案排序",
-                "Search": "搜尋",
-                "Block View": "顯示檔案預覽",
-                "List View": "顯示檔案列表",
-                "Case Sensitive": "區分大小寫",
-                "Clear Search": "清除搜尋結果"
-            },
-            "placeholder": {
-                "New Filename": "在此輸入新檔案名稱",
-                "New Folder Name": "在此輸入新資料夾名稱",
-                "File Search (Start wildcard search with / , e.g. /*.mp3)": "檔案搜尋(如要使用萬用字元,請先輸入 / 號,例如: /*.mp3)"
-
-            }
-        },
-        "zh-cn": {
-            "name": "简体中文",
-            "fontFamily":"\"Microsoft YaHei\",\"SimHei\", \"PingFangSC-Medium\", \"STHeiti\"",
-            "strings": {
-                "title/title": "文件管理器",
-                "menu/button/download": "下载所选",
-                "menu/sort/asc": "文件名顺序排列",
-                "menu/sort/desc": "文件名倒序排列",
-                "menu/sort/small": "小至大",
-                "menu/sort/large": "大至小",
-                "menu/sort/mostrecent": "新到旧",
-                "menu/sort/leastrecent": "旧到新",
-
-                "sidebar/vroot/user": "使用者",
-                "sidebar/vroot/fsh": "虚拟储存装置",
-
-                "sidebar/vroot/desktop": "桌面",
-                "sidebar/vroot/document": "文件",
-                "sidebar/vroot/music": "音乐",
-                "sidebar/vroot/photo": "图片",
-                "sidebar/vroot/video": "影片",
-                "sidebar/vroot/trash": "回收箱",
-                "sidebar/vroot/download": "下载",
-                "sidebar/vroot/web": "网页",
-                "sidebar/vroot/model": "模型",
-                "sidebar/vroot/appdata": "程序数据",
-
-                "func/search/typeToStart": "输入关键字以开始搜索",
-                "func/search/tip1": "在上面的输入字段输入关键字,然后按「搜索」按钮以开始搜索",
-                "func/search/tip2": "如你需要输入通配符,请先输入 / 号,例如:/*.mp3",
-
-                "opr/overwrite/title": "复写、保留或是跳过文件",
-                "opr/overwrite/copying": "正在复制",
-                "opr/overwrite/files": "个文件。来源:",
-                "opr/overwrite/to": " → 目的地:",
-                "opr/overwrite/dest": "目的地有 ",
-                "opr/overwrite/samename": " 个相同名称的文件",
-                "opr/overwrite/replace": "复写目的地文件",
-                "opr/overwrite/skip": "跳过这些文件",
-                "opr/overwrite/keep": "重新命名并保留目的地文件",
-
-                "opr/per-remove/title": "永久移除文件",
-                "opr/per-remove/questions": "确定<u>永久移除</u>以下文件?<br>移除后文件将<u>无法复原</u>",
-                "opr/per-remove/confirm": "确认永久移除所选文件",
-                "opr/per-remove/cancel": "取消",
-
-                "opr/remove/title": "移动到资源回收箱",
-                "opr/remove/question": "确认移动所选文件到资源回收箱?",
-                "opr/remove/confirm": "确认",
-                "opr/remove/cancel": "取消",
-
-                "opr/rename/title": "重新命名",
-                "opr/rename/instruction": "请在下方输入栏输入新文件名称",
-                "opr/rename/ok": "确认",
-                "opr/rename/cancel": "取消",
-
-                "opr/newfile/title": "创建文件",
-                "opr/newfile/instruction": "选择一种要新增的文件格式样本",
-                "opr/newfile/newempty": "或输入文件名称以新增一个空白文件",
-                "opr/newfile/create": "新增",
-                "opr/newfile/cancel": "取消",
-
-                "opr/newfolder/title": "创建文件夹",
-                "opr/newfolder/desc": "请在下方输入栏输入新文件夹名称",
-                "opr/newfolder/alreadyExists": "此文件夹已存在",
-                "opr/newfolder/create": "创建",
-                "opr/newfolder/cancel": "取消",
-
-                "opr/share/title": "分享文件",
-                "opr/share/settings": "分享设置",
-                "opr/share/setdesc": "更改谁能看到此文件",
-                "opr/share/visableoption": "分享对象:",
-                "opr/share/anyone": "拥有连接的使用者",
-                "opr/share/anyonedesc": "任何拥有分享连接的使用者皆可下载此文件",
-                "opr/share/signedin": "已登入的使用者",
-                "opr/share/signedindesc": "任何已登入并拥有分享连接的使用者皆可下载此文件",
-                "opr/share/samegroup": "在同一权限群组内的使用者",
-                "opr/share/samegroupdesc": "任何拥有相同使用者权限的使用者皆可下载此文件",
-                "opr/share/update": "更新权限",
-                "opr/share/remove": "移除文件共享",
-                "opr/share/ok": "完成",
-
-                "opr/openwith/title": "使用 … 打开",
-                "opr/openwith/desc": "选择一个 WebApp 以打开此文件",
-                "opr/openwith/loading": "载入中…",
-                "opr/openwith/openWithWebApp": "使用所选的 WebApp 打开文件",
-                "opr/openwith/openWithWebAppInNewWindow": "使用所选的 WebApp 在新视窗打开",
-                "opr/openwith/openInNewWindow": "直接于新视窗打开文件",
-                "opr/openwith/cancel": "取消",
-
-                "opr/shortcut/title": "在桌面建立捷径", 
-                "opr/shortcut/ok": "捷径建立成功", 
-                "opr/shorcut/error": "桌面建立捷径失败",
-
-                "opr/zip/zipping": "正在压缩 ",
-                "opr/zip/unzipping": "正在解压缩 ",
-                "opr/zip/nozipfile": "没有已选择的压缩文件",
-                "opr/zip/file": " 个文件",
-                "opr/zip/files": " 个文件",
-
-                "contextmenu/open": "打开",
-                "contextmenu/openWith": "使用 … 打开",
-                "contextmenu/openNewWindow": "在新视窗打开",
-                "contextmenu/openNewWindowVroot": "在新视窗打开",
-                "contextmenu/openFileLocation": "打开文件位置",
-                "contextmenu/Share": "分享",
-                "contextmenu/MuitSelect": "切换多选",
-                "contextmenu/copy": "复制",
-                "contextmenu/paste": "粘贴",
-                "contextmenu/cut": "剪切",
-                "contextmenu/newFile": "新建文件",
-                "contextmenu/newFolder": "新建文件夹",
-                "contextmenu/upload": "上传",
-                "contextmenu/zip": "建立压缩档",
-                "contextmenu/unzip": "解压缩至此",
-                "contextmenu/rename": "重新命名",
-                "contextmenu/delete": "删除",
-                "contextmenu/backup": "备份及还原",
-                "contextmenu/refresh": "重新整理",
-                "contextmenu/download": "下载",
-                "contextmenu/sharemanager": "分享管理员",
-                "contextmenu/properties": "内容",
-
-                "upload/count/uploading": " 上传中",
-                "upload/count/pending": " 等待中",
-
-                "message/rename/success": "重新命名成功",
-                "message/copy/success": " 个文件已复制",
-                "message/move/success": " 个文件已移动",
-                "message/share/removed": "已停止文件分享",
-                "message/paste/nothing": "没有可粘贴的文件",
-                "message/remove/success": " 个文件已被成功删除",
-                "message/recycle/success": " 个文件已被成功移动到资源回收箱",
-                "message/upload/started": "文件上传已开始",
-                "message/zip/fail": "文件压缩失败:原因不明",
-                "message/newfolder/success": "新文件夹建立完成",
-                "message/newItem/success": " 建立完成",
-                "message/nofileSelected": "没有选择文件",
-                "message/moduleNotSupport": "此模块无法打开任何文件",
-                "message/unknownSize": "未知大小",
-                "message/loading": "载入中",
-                "message/initiating": "正在初始化",
-                "message/Permission Denied: You are not the file owner nor can write to this file": "存取被拒:您不是分享文件者或有權訪問此文件",
-                "message/Invalid path given": "文件路径无效",
-                "message/Unknown path given": "文件路径无效",
-                "message/Invalid keyword given":"关键字不可为空白", 
-                "message/This directory is Read Only": "无法写入到唯读资料夹",
-                "message/Access Denied":"取存被拒",
-                "message/Given filename already exists":"此文件名称已存在",
-                "message/Given folder already exists":"此资料夹名称已存在",
-                "message/Source file not exists":"来源文件不存在",
-                "message/File already exists":"文件已存在",
-                "message/Undefined dest location":"目标路径不可为空白",
-                "message/Dest folder not found":"找不到目标资料夹",
-                "message/Invalid dir given":"资料夹路径无效",
-                "message/Storage Quota Full":"储存配额已满",
-                "message/Unknown file opeartion given":"不支援的文件动作请求",
-                "message/Preference value too long. Preference value can only store maximum 1024 characters.":"设定值太长。设定值只能够少于 1024 字元",
-                "message/User not logged in":"使用者未登入",
-                "message/Folder not exists":"找不到资料夹", 
-                "message/Failed to move file to trash":"无法移动到资源回收箱",
-                "message/Incompatible File System Type: Try SHIFT + DELETE to delete file permanently":"档案系统不支援文件回收:请使用 SHIFT + DELETE 以永久移除文件",
-
-                "message/noMatchResults":"找不到匹配的文件",
-                "message/noMatchResultsDesc":"伺服器找不到与此关键字匹配的文件",
-                "message/noMatchResultsInst":"请检查你的关键字或通配符是否正确。", 
-
-                "message/destIdentical": "文件来源及目的地相同",
-                "message/decodeFilelistFail": "载案置入失败:无法读取文件列表",
-                "message/uploadFailed": "载案上传失败:文件太大或目标储存装置已满",
-                "message/newFilenameIdentical": "重新命名失败:新旧文件名称相同"
-            },
-            "titles": {
-                "Back": "上一页",
-                "Parent Folder": "返回上层目录",
-                "Open": "打开",
-                "Open with": "以…打开",
-                "Share File": "分享所选",
-                "Download": "下载",
-                "Copy": "复制",
-                "Paste": "粘贴",
-                "Cut": "剪切",
-                "New File": "新增文件",
-                "New Folder": "新增文件夹",
-                "Upload": "上传",
-                "Create Zip": "建立压缩档",
-                "Unzip Here": "解压缩至此",
-                "Rename": "重新命名",
-                "Delete": "删除",
-                "Refresh": "重新整理",
-                "Home": "根目录",
-                "File Info": "文件信息",
-                "Toggle Folder List": "检视根目录列表",
-                "Dark Theme": "切换主题配色",
-                "Edit Path": "编辑路径",
-                "Sorting Method": "文件排序",
-                "Search": "搜索",
-                "Block View": "显示文件预览",
-                "List View": "显示文件列表",
-                "Case Sensitive": "区分大小写",
-                "Clear Search": "清除搜索结果"
-            },
-            "placeholder": {
-                "New Filename": "在此输入新文件名称",
-                "New Folder Name": "在此输入新文件夹名称",
-                "File Search (Start wildcard search with / , e.g. /*.mp3)": "文件搜索(如要使用通配符,请先输入 / 号,例如:/*.mp3)"
-
-            }
-        }
-    }
+{
+    "author": "tobychui",
+    "version": "1.0",
+    "keys": {
+        "zh-tw": {
+            "name": "繁體中文(台灣)",
+            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
+            "strings": {
+                "title/title": "檔案管理員",
+                "menu/button/download": "下載所選",
+                "menu/sort/asc": "檔名順序",
+                "menu/sort/desc": "檔名倒序",
+                "menu/sort/small": "小至大",
+                "menu/sort/large": "大至小",
+                "menu/sort/mostrecent": "新到舊",
+                "menu/sort/leastrecent": "舊到新",
+
+                "fileopr/Back": "上一頁",
+                "fileopr/Parent Folder": "返回上層目錄",
+                "fileopr/Open": "開啟",
+                "fileopr/Open with": "以…開啟",
+                "fileopr/Share": "分享",
+                "fileopr/Download": "下載",
+                "fileopr/Copy": "複製",
+                "fileopr/Paste": "貼上",
+                "fileopr/Cut": "剪下",
+                "fileopr/New File": "新增檔案",
+                "fileopr/New Folder": "新增資料夾",
+                "fileopr/Upload": "上載",
+                "fileopr/Create Zip": "建立壓縮檔",
+                "fileopr/Unzip Here": "解壓縮至此",
+                "fileopr/Rename": "重新命名",
+                "fileopr/Delete": "刪除",
+                "fileopr/Refresh": "重新整理",
+                "fileopr/Home": "根目錄",
+                "fileopr/File Info": "檔案資訊",
+                "fileopr/Toggle Folder List": "檢視根目錄列表",
+                "fileopr/Dark Theme": "切換主題配色",
+                "fileopr/Edit Path": "編輯路徑",
+                "fileopr/Sorting Method": "檔案排序",
+                "fileopr/Search": "搜尋",
+                "fileopr/Block View": "顯示檔案預覽",
+                "fileopr/List View": "顯示檔案列表",
+                "fileopr/Case Sensitive": "區分大小寫",
+                "fileopr/Clear Search": "清除搜尋結果",
+
+                "sidebar/vroot/user": "使用者",
+                "sidebar/vroot/fsh": "虛擬儲存裝置",
+
+                "sidebar/vroot/desktop": "桌面",
+                "sidebar/vroot/document": "文件",
+                "sidebar/vroot/music": "音樂",
+                "sidebar/vroot/photo": "圖片",
+                "sidebar/vroot/video": "影片",
+                "sidebar/vroot/trash": "回收箱",
+                "sidebar/vroot/download": "下載",
+                "sidebar/vroot/web": "網頁",
+                "sidebar/vroot/model": "模型",
+                "sidebar/vroot/appdata": "程序數據",
+
+                "func/search/typeToStart": "輸入關鍵字以開始搜尋",
+                "func/search/tip1": "在上面的輸入欄位輸入關鍵字,然後按「搜尋」按鈕以開始搜尋",
+                "func/search/tip2": "如你需要輸入萬用字元,請先輸入 / 號,例如: /*.mp3",
+
+                "opr/overwrite/title": "覆寫、保留或是跳過檔案",
+                "opr/overwrite/copying": "正在複製",
+                "opr/overwrite/files": "個檔案。來源:",
+                "opr/overwrite/to": " → 目的地:",
+                "opr/overwrite/dest": "目的地有 ",
+                "opr/overwrite/samename": " 個相同名稱的檔案",
+                "opr/overwrite/replace": "覆寫目的地檔案",
+                "opr/overwrite/skip": "跳過這些檔案",
+                "opr/overwrite/keep": "重新命名並保留目的地檔案",
+
+                "opr/per-remove/title": "永久移除檔案",
+                "opr/per-remove/questions": "確定<u>永久移除</u>以下檔案?<br>移除後檔案將<u>無法復原</u>",
+                "opr/per-remove/confirm": "確認永久移除所選檔案",
+                "opr/per-remove/cancel": "取消",
+
+                "opr/remove/title": "移動到資源回收箱",
+                "opr/remove/question": "確認移動所選檔案到資源回收箱?",
+                "opr/remove/confirm": "確認",
+                "opr/remove/cancel": "取消",
+
+                "opr/rename/title": "重新命名",
+                "opr/rename/instruction": "請在下方輸入欄輸入新檔案名稱",
+                "opr/rename/ok": "確認",
+                "opr/rename/cancel": "取消",
+
+                "opr/newfile/title": "創建檔案",
+                "opr/newfile/instruction": "選擇一種要新增的檔案格式樣本",
+                "opr/newfile/newempty": "或輸入檔案名稱以新增一個空白檔案",
+                "opr/newfile/create": "新增",
+                "opr/newfile/cancel": "取消",
+
+                "opr/newfolder/title": "創建資料夾",
+                "opr/newfolder/desc": "請在下方輸入欄輸入新資料夾名稱",
+                "opr/newfolder/alreadyExists": "此資料夾已存在",
+                "opr/newfolder/create": "創建",
+                "opr/newfolder/cancel": "取消",
+
+                "opr/share/title": "分享檔案",
+                "opr/share/settings": "分享設定",
+                "opr/share/setdesc": "更改誰能看到此檔案",
+                "opr/share/visableoption": "分享對像:",
+                "opr/share/anyone": "擁有連接的使用者",
+                "opr/share/anyonedesc": "任何擁有分享連接的使用者皆可下載此檔案",
+                "opr/share/signedin": "已登入的使用者",
+                "opr/share/signedindesc": "任何已登入並擁有分享連接的使用者皆可下載此檔案",
+                "opr/share/samegroup": "在同一權限群組內的使用者",
+                "opr/share/samegroupdesc": "任何擁有相同使用者權限的使用者皆可下載此檔案",
+                "opr/share/update": "更新權限",
+                "opr/share/remove": "移除檔案分享",
+                "opr/share/ok": "完成",
+
+                "opr/openwith/title": "使用 … 開啟",
+                "opr/openwith/desc": "選擇一個 WebApp 以開啟此檔案",
+                "opr/openwith/loading": "載入中…",
+                "opr/openwith/openWithWebApp": "使用所選的 WebApp 開啟檔案",
+                "opr/openwith/openWithWebAppInNewWindow": "使用所選的 WebApp 在新視窗開啟",
+                "opr/openwith/openInNewWindow": "直接於新視窗開啟檔案",
+                "opr/openwith/cancel": "取消",
+
+                "opr/shorcut/title": "在桌面建立捷徑",
+                "opr/shorcut/ok": "捷徑建立成功",
+                "opr/shorcut/error": "桌面建立捷徑失敗",
+
+                "opr/zip/zipping": "正在壓縮 ",
+                "opr/zip/unzipping": "正在解壓縮 ",
+                "opr/zip/nozipfile": "沒有已選擇的壓縮檔",
+                "opr/zip/file": " 個檔案",
+                "opr/zip/files": " 個檔案",
+
+                "opr/confirmclose/title":"確認取消上傳",
+                "opr/confirmclose/desc":"此檔案管理員視窗正在上傳檔案到伺服器。關閉此視窗將會取消所有上傳工作。<br><b>確認取消上傳並關閉視窗?</b>",
+                "opr/confirmclose/cancelAndExit":"取消上傳並關閉視窗",
+                "opr/confirmclose/continue":"繼續上傳",
+
+                "contextmenu/open": "開啟",
+                "contextmenu/openWith": "使用 … 開啟",
+                "contextmenu/openNewWindow": "在新視窗開啟",
+                "contextmenu/openNewWindowVroot": "在新視窗開啟",
+                "contextmenu/openFileLocation": "開啟檔案位置",
+                "contextmenu/Share": "分享",
+                "contextmenu/MuitSelect": "切換多選",
+                "contextmenu/copy": "複製",
+                "contextmenu/paste": "貼上",
+                "contextmenu/cut": "剪下",
+                "contextmenu/newFile": "新增檔案",
+                "contextmenu/newFolder": "新增資料夾",
+                "contextmenu/upload": "上載",
+                "contextmenu/zip": "建立壓縮檔",
+                "contextmenu/unzip": "解壓縮至此",
+                "contextmenu/rename": "重新命名",
+                "contextmenu/delete": "刪除",
+                "contextmenu/backup": "備份及還原",
+                "contextmenu/refresh": "重新整理",
+                "contextmenu/download": "下載",
+                "contextmenu/sharemanager": "分享管理員",
+                "contextmenu/properties": "內容",
+
+                "upload/count/uploading": " 上載中",
+                "upload/count/pending": " 等待中",
+
+                "message/rename/success": "重新命名成功",
+                "message/copy/success": " 個檔案已複製",
+                "message/move/success": " 個檔案已移動",
+                "message/share/removed": "已停止檔案分享",
+                "message/paste/nothing": "沒有可貼上的檔案",
+                "message/remove/success": " 個檔案已被成功刪除",
+                "message/recycle/success": " 個檔案已被成功移動到資源回收箱",
+                "message/upload/started": "檔案上載已開始",
+                "message/zip/fail": "檔案壓縮失敗:原因不明",
+                "message/newfolder/success": "新資料夾建立完成",
+                "message/newItem/success": " 建立完成",
+                "message/nofileSelected": "沒有選擇檔案",
+                "message/moduleNotSupport": "此模組無法開啟任何檔案",
+                "message/unknownSize": "未知大小",
+                "message/loading": "載入中",
+                "message/initiating": "正在初始化",
+                "message/Permission Denied: You are not the file owner nor can write to this file": "存取被拒:您不是分享檔案者或有權訪問此檔案",
+                "message/Invalid path given": "檔案路徑無效",
+                "message/Unknown path given": "檔案路徑無效",
+                "message/Invalid keyword given":"關鍵字不可為空白",
+                "message/This directory is Read Only": "無法寫入到唯讀資料夾",
+                "message/Access Denied":"取存被拒",
+                "message/Given filename already exists":"此檔案名稱已存在",
+                "message/Given folder already exists":"此資料夾名稱已存在",
+                "message/Source file not exists":"來源檔案不存在",
+                "message/File already exists":"檔案已存在",
+                "message/Undefined dest location":"目標路徑不可為空白",
+                "message/Dest folder not found":"找不到目標資料夾",
+                "message/Invalid dir given":"資料夾路徑無效",
+                "message/Storage Quota Full":"儲存配額已滿",
+                "message/Unknown file opeartion given":"不支援的檔案動作請求",
+                "message/Preference value too long. Preference value can only store maximum 1024 characters.":"設定值太長。設定值只能夠少於 1024 字元",
+                "message/User not logged in":"使用者未登入",
+                "message/Folder not exists":"找不到資料夾",
+                "message/Failed to move file to trash":"無法移動到資源回收箱",
+                "message/Incompatible File System Type: Try SHIFT + DELETE to delete file permanently":"檔案系統不支援檔案回收:請使用 SHIFT + DELETE 以永久移除檔案",
+
+                "message/noMatchResults":"找不到匹配的檔案",
+                "message/noMatchResultsDesc":"伺服器找不到與此關鍵字匹配的檔案",
+                "message/noMatchResultsInst":"請檢查你的關鍵字或通配符是否正確。",
+
+                "message/folderCannotOpen":"無法開啟此資料夾",
+                "message/folderCannotOpen/codedesc":"伺服器端回傳以下錯誤訊息: ",
+
+                "message/destIdentical": "檔案來源及目的地相同",
+                "message/decodeFilelistFail": "載案置入失敗:無法讀取檔案列表",
+                "message/uploadFailed": "載案上載失敗:檔案太大或目標儲存裝置已滿",
+                "message/newFilenameIdentical": "重新命名失敗:新舊檔案名稱相同"
+            },
+            "titles": {
+                "Back": "上一頁",
+                "Parent Folder": "返回上層目錄",
+                "Open": "開啟",
+                "Open with": "以…開啟",
+                "Share File": "分享所選",
+                "Download": "下載",
+                "Copy": "複製",
+                "Paste": "貼上",
+                "Cut": "剪下",
+                "New File": "新增檔案",
+                "New Folder": "新增資料夾",
+                "Upload": "上載",
+                "Create Zip": "建立壓縮檔",
+                "Unzip Here": "解壓縮至此",
+                "Rename": "重新命名",
+                "Delete": "刪除",
+                "Refresh": "重新整理",
+                "Home": "根目錄",
+                "File Info": "檔案資訊",
+                "Toggle Folder List": "檢視根目錄列表",
+                "Dark Theme": "切換主題配色",
+                "Edit Path": "編輯路徑",
+                "Sorting Method": "檔案排序",
+                "Search": "搜尋",
+                "Block View": "顯示檔案預覽",
+                "List View": "顯示檔案列表",
+                "Case Sensitive": "區分大小寫",
+                "Clear Search": "清除搜尋結果"
+            },
+            "placeholder": {
+                "New Filename": "在此輸入新檔案名稱",
+                "New Folder Name": "在此輸入新資料夾名稱",
+                "File Search (Start wildcard search with / , e.g. /*.mp3)": "檔案搜尋(如要使用萬用字元,請先輸入 / 號,例如: /*.mp3)"
+
+            }
+        },
+        "zh-hk": {
+            "name": "繁體中文(香港)",
+            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
+            "strings": {
+                "title/title": "檔案管理員",
+                "menu/button/download": "下載所選",
+                "menu/sort/asc": "檔名順序",
+                "menu/sort/desc": "檔名倒序",
+                "menu/sort/small": "小至大",
+                "menu/sort/large": "大至小",
+                "menu/sort/mostrecent": "新到舊",
+                "menu/sort/leastrecent": "舊到新",
+
+                "sidebar/vroot/user": "使用者",
+                "sidebar/vroot/fsh": "虛擬儲存裝置",
+
+                "sidebar/vroot/desktop": "桌面",
+                "sidebar/vroot/document": "文件",
+                "sidebar/vroot/music": "音樂",
+                "sidebar/vroot/photo": "圖片",
+                "sidebar/vroot/video": "影片",
+                "sidebar/vroot/trash": "回收箱",
+                "sidebar/vroot/download": "下載",
+                "sidebar/vroot/web": "網頁",
+                "sidebar/vroot/model": "模型",
+                "sidebar/vroot/appdata": "程序數據",
+
+                "func/search/typeToStart": "輸入關鍵字以開始搜尋",
+                "func/search/tip1": "在上面的輸入欄位輸入關鍵字,然後按「搜尋」按鈕以開始搜尋",
+                "func/search/tip2": "如你需要輸入萬用字元,請先輸入 / 號,例如: /*.mp3",
+
+                "opr/overwrite/title": "覆寫、保留或是跳過檔案",
+                "opr/overwrite/copying": "正在複製",
+                "opr/overwrite/files": "個檔案。來源:",
+                "opr/overwrite/to": " → 目的地:",
+                "opr/overwrite/dest": "目的地有 ",
+                "opr/overwrite/samename": " 個相同名稱的檔案",
+                "opr/overwrite/replace": "覆寫目的地檔案",
+                "opr/overwrite/skip": "跳過這些檔案",
+                "opr/overwrite/keep": "重新命名並保留目的地檔案",
+
+                "opr/per-remove/title": "永久移除檔案",
+                "opr/per-remove/questions": "確定<u>永久移除</u>以下檔案?<br>移除後檔案將<u>無法復原</u>",
+                "opr/per-remove/confirm": "確認永久移除所選檔案",
+                "opr/per-remove/cancel": "取消",
+
+                "opr/remove/title": "移動到資源回收箱",
+                "opr/remove/question": "確認移動所選檔案到資源回收箱?",
+                "opr/remove/confirm": "確認",
+                "opr/remove/cancel": "取消",
+
+                "opr/rename/title": "重新命名",
+                "opr/rename/instruction": "請在下方輸入欄輸入新檔案名稱",
+                "opr/rename/ok": "確認",
+                "opr/rename/cancel": "取消",
+
+                "opr/newfile/title": "創建檔案",
+                "opr/newfile/instruction": "選擇一種要新增的檔案格式樣本",
+                "opr/newfile/newempty": "或輸入檔案名稱以新增一個空白檔案",
+                "opr/newfile/create": "新增",
+                "opr/newfile/cancel": "取消",
+
+                "opr/newfolder/title": "創建資料夾",
+                "opr/newfolder/desc": "請在下方輸入欄輸入新資料夾名稱",
+                "opr/newfolder/alreadyExists": "此資料夾已存在",
+                "opr/newfolder/create": "創建",
+                "opr/newfolder/cancel": "取消",
+
+                "opr/share/title": "分享檔案",
+                "opr/share/settings": "分享設定",
+                "opr/share/setdesc": "更改誰能看到此檔案",
+                "opr/share/visableoption": "分享對像:",
+                "opr/share/anyone": "擁有連接的使用者",
+                "opr/share/anyonedesc": "任何擁有分享連接的使用者皆可下載此檔案",
+                "opr/share/signedin": "已登入的使用者",
+                "opr/share/signedindesc": "任何已登入並擁有分享連接的使用者皆可下載此檔案",
+                "opr/share/samegroup": "在同一權限群組內的使用者",
+                "opr/share/samegroupdesc": "任何擁有相同使用者權限的使用者皆可下載此檔案",
+                "opr/share/update": "更新權限",
+                "opr/share/remove": "移除檔案分享",
+                "opr/share/ok": "完成",
+
+                "opr/openwith/title": "使用 … 開啟",
+                "opr/openwith/desc": "選擇一個 WebApp 以開啟此檔案",
+                "opr/openwith/loading": "載入中…",
+                "opr/openwith/openWithWebApp": "使用所選的 WebApp 開啟檔案",
+                "opr/openwith/openWithWebAppInNewWindow": "使用所選的 WebApp 在新視窗開啟",
+                "opr/openwith/openInNewWindow": "直接於新視窗開啟檔案",
+                "opr/openwith/cancel": "取消",
+
+                "opr/shorcut/title": "在桌面建立捷徑",
+                "opr/shorcut/ok": "捷徑建立成功",
+                "opr/shorcut/error": "桌面建立捷徑失敗",
+
+                "opr/zip/zipping": "正在壓縮 ",
+                "opr/zip/unzipping": "正在解壓縮 ",
+                "opr/zip/nozipfile": "沒有已選擇的壓縮檔",
+                "opr/zip/file": " 個檔案",
+                "opr/zip/files": " 個檔案",
+
+                "opr/confirmclose/title":"確認取消上傳",
+                "opr/confirmclose/desc":"此檔案管理員視窗正在上傳檔案到伺服器。關閉此視窗將會取消所有上傳工作。<br><b>確認取消上傳並關閉視窗?</b>",
+                "opr/confirmclose/cancelAndExit":"取消上傳並關閉視窗",
+                "opr/confirmclose/continue":"繼續上傳",
+
+                "contextmenu/open": "開啟",
+                "contextmenu/openWith": "使用 … 開啟",
+                "contextmenu/openNewWindow": "在新視窗開啟",
+                "contextmenu/openNewWindowVroot": "在新視窗開啟",
+                "contextmenu/openFileLocation": "開啟檔案位置",
+                "contextmenu/Share": "分享",
+                "contextmenu/MuitSelect": "切換多選",
+                "contextmenu/copy": "複製",
+                "contextmenu/paste": "貼上",
+                "contextmenu/cut": "剪下",
+                "contextmenu/newFile": "新增檔案",
+                "contextmenu/newFolder": "新增資料夾",
+                "contextmenu/upload": "上載",
+                "contextmenu/zip": "建立壓縮檔",
+                "contextmenu/unzip": "解壓縮至此",
+                "contextmenu/rename": "重新命名",
+                "contextmenu/delete": "刪除",
+                "contextmenu/backup": "備份及還原",
+                "contextmenu/refresh": "重新整理",
+                "contextmenu/download": "下載",
+                "contextmenu/sharemanager": "分享管理員",
+                "contextmenu/properties": "內容",
+
+                "upload/count/uploading": " 上載中",
+                "upload/count/pending": " 等待中",
+
+                "message/rename/success": "重新命名成功",
+                "message/copy/success": " 個檔案已複製",
+                "message/move/success": " 個檔案已移動",
+                "message/share/removed": "已停止檔案分享",
+                "message/paste/nothing": "沒有可貼上的檔案",
+                "message/remove/success": " 個檔案已被成功刪除",
+                "message/recycle/success": " 個檔案已被成功移動到資源回收箱",
+                "message/upload/started": "檔案上載已開始",
+                "message/zip/fail": "檔案壓縮失敗:原因不明",
+                "message/newfolder/success": "新資料夾建立完成",
+                "message/newItem/success": " 建立完成",
+                "message/nofileSelected": "沒有選擇檔案",
+                "message/moduleNotSupport": "此模組無法開啟任何檔案",
+                "message/unknownSize": "未知大小",
+                "message/loading": "載入中",
+                "message/initiating": "正在初始化",
+                "message/Permission Denied: You are not the file owner nor can write to this file": "存取被拒:您不是分享檔案者或有權訪問此檔案",
+                "message/Invalid path given": "檔案路徑無效",
+                "message/Unknown path given": "檔案路徑無效",
+                "message/Invalid keyword given":"關鍵字不可為空白",
+                "message/This directory is Read Only": "無法寫入到唯讀資料夾",
+                "message/Access Denied":"取存被拒",
+                "message/Given filename already exists":"此檔案名稱已存在",
+                "message/Given folder already exists":"此資料夾名稱已存在",
+                "message/Source file not exists":"來源檔案不存在",
+                "message/File already exists":"檔案已存在",
+                "message/Undefined dest location":"目標路徑不可為空白",
+                "message/Dest folder not found":"找不到目標資料夾",
+                "message/Invalid dir given":"資料夾路徑無效",
+                "message/Storage Quota Full":"儲存配額已滿",
+                "message/Unknown file opeartion given":"不支援的檔案動作請求",
+                "message/Preference value too long. Preference value can only store maximum 1024 characters.":"設定值太長。設定值只能夠少於 1024 字元",
+                "message/User not logged in":"使用者未登入",
+                "message/Folder not exists":"找不到資料夾",
+                "message/Failed to move file to trash":"無法移動到資源回收箱",
+                "message/Incompatible File System Type: Try SHIFT + DELETE to delete file permanently":"檔案系統不支援檔案回收:請使用 SHIFT + DELETE 以永久移除檔案",
+
+                "message/noMatchResults":"找不到匹配的檔案",
+                "message/noMatchResultsDesc":"伺服器找不到與此關鍵字匹配的檔案",
+                "message/noMatchResultsInst":"請檢查你的關鍵字或通配符是否正確。",
+
+                "message/destIdentical": "檔案來源及目的地相同",
+                "message/decodeFilelistFail": "載案置入失敗:無法讀取檔案列表",
+                "message/uploadFailed": "載案上載失敗:檔案太大或目標儲存裝置已滿",
+                "message/newFilenameIdentical": "重新命名失敗:新舊檔案名稱相同"
+            },
+            "titles": {
+                "Back": "上一頁",
+                "Parent Folder": "返回上層目錄",
+                "Open": "開啟",
+                "Open with": "以…開啟",
+                "Share File": "分享所選",
+                "Download": "下載",
+                "Copy": "複製",
+                "Paste": "貼上",
+                "Cut": "剪下",
+                "New File": "新增檔案",
+                "New Folder": "新增資料夾",
+                "Upload": "上載",
+                "Create Zip": "建立壓縮檔",
+                "Unzip Here": "解壓縮至此",
+                "Rename": "重新命名",
+                "Delete": "刪除",
+                "Refresh": "重新整理",
+                "Home": "根目錄",
+                "File Info": "檔案資訊",
+                "Toggle Folder List": "檢視根目錄列表",
+                "Dark Theme": "切換主題配色",
+                "Edit Path": "編輯路徑",
+                "Sorting Method": "檔案排序",
+                "Search": "搜尋",
+                "Block View": "顯示檔案預覽",
+                "List View": "顯示檔案列表",
+                "Case Sensitive": "區分大小寫",
+                "Clear Search": "清除搜尋結果"
+            },
+            "placeholder": {
+                "New Filename": "在此輸入新檔案名稱",
+                "New Folder Name": "在此輸入新資料夾名稱",
+                "File Search (Start wildcard search with / , e.g. /*.mp3)": "檔案搜尋(如要使用萬用字元,請先輸入 / 號,例如: /*.mp3)"
+
+            }
+        },
+        "zh-cn": {
+            "name": "简体中文",
+            "fontFamily":"\"Microsoft YaHei\",\"SimHei\", \"PingFangSC-Medium\", \"STHeiti\"",
+            "strings": {
+                "title/title": "文件管理器",
+                "menu/button/download": "下载所选",
+                "menu/sort/asc": "文件名顺序排列",
+                "menu/sort/desc": "文件名倒序排列",
+                "menu/sort/small": "小至大",
+                "menu/sort/large": "大至小",
+                "menu/sort/mostrecent": "新到旧",
+                "menu/sort/leastrecent": "旧到新",
+
+                "sidebar/vroot/user": "使用者",
+                "sidebar/vroot/fsh": "虚拟储存装置",
+
+                "sidebar/vroot/desktop": "桌面",
+                "sidebar/vroot/document": "文件",
+                "sidebar/vroot/music": "音乐",
+                "sidebar/vroot/photo": "图片",
+                "sidebar/vroot/video": "影片",
+                "sidebar/vroot/trash": "回收箱",
+                "sidebar/vroot/download": "下载",
+                "sidebar/vroot/web": "网页",
+                "sidebar/vroot/model": "模型",
+                "sidebar/vroot/appdata": "程序数据",
+
+                "func/search/typeToStart": "输入关键字以开始搜索",
+                "func/search/tip1": "在上面的输入字段输入关键字,然后按「搜索」按钮以开始搜索",
+                "func/search/tip2": "如你需要输入通配符,请先输入 / 号,例如:/*.mp3",
+
+                "opr/overwrite/title": "复写、保留或是跳过文件",
+                "opr/overwrite/copying": "正在复制",
+                "opr/overwrite/files": "个文件。来源:",
+                "opr/overwrite/to": " → 目的地:",
+                "opr/overwrite/dest": "目的地有 ",
+                "opr/overwrite/samename": " 个相同名称的文件",
+                "opr/overwrite/replace": "复写目的地文件",
+                "opr/overwrite/skip": "跳过这些文件",
+                "opr/overwrite/keep": "重新命名并保留目的地文件",
+
+                "opr/per-remove/title": "永久移除文件",
+                "opr/per-remove/questions": "确定<u>永久移除</u>以下文件?<br>移除后文件将<u>无法复原</u>",
+                "opr/per-remove/confirm": "确认永久移除所选文件",
+                "opr/per-remove/cancel": "取消",
+
+                "opr/remove/title": "移动到资源回收箱",
+                "opr/remove/question": "确认移动所选文件到资源回收箱?",
+                "opr/remove/confirm": "确认",
+                "opr/remove/cancel": "取消",
+
+                "opr/rename/title": "重新命名",
+                "opr/rename/instruction": "请在下方输入栏输入新文件名称",
+                "opr/rename/ok": "确认",
+                "opr/rename/cancel": "取消",
+
+                "opr/newfile/title": "创建文件",
+                "opr/newfile/instruction": "选择一种要新增的文件格式样本",
+                "opr/newfile/newempty": "或输入文件名称以新增一个空白文件",
+                "opr/newfile/create": "新增",
+                "opr/newfile/cancel": "取消",
+
+                "opr/newfolder/title": "创建文件夹",
+                "opr/newfolder/desc": "请在下方输入栏输入新文件夹名称",
+                "opr/newfolder/alreadyExists": "此文件夹已存在",
+                "opr/newfolder/create": "创建",
+                "opr/newfolder/cancel": "取消",
+
+                "opr/share/title": "分享文件",
+                "opr/share/settings": "分享设置",
+                "opr/share/setdesc": "更改谁能看到此文件",
+                "opr/share/visableoption": "分享对象:",
+                "opr/share/anyone": "拥有连接的使用者",
+                "opr/share/anyonedesc": "任何拥有分享连接的使用者皆可下载此文件",
+                "opr/share/signedin": "已登入的使用者",
+                "opr/share/signedindesc": "任何已登入并拥有分享连接的使用者皆可下载此文件",
+                "opr/share/samegroup": "在同一权限群组内的使用者",
+                "opr/share/samegroupdesc": "任何拥有相同使用者权限的使用者皆可下载此文件",
+                "opr/share/update": "更新权限",
+                "opr/share/remove": "移除文件共享",
+                "opr/share/ok": "完成",
+
+                "opr/openwith/title": "使用 … 打开",
+                "opr/openwith/desc": "选择一个 WebApp 以打开此文件",
+                "opr/openwith/loading": "载入中…",
+                "opr/openwith/openWithWebApp": "使用所选的 WebApp 打开文件",
+                "opr/openwith/openWithWebAppInNewWindow": "使用所选的 WebApp 在新视窗打开",
+                "opr/openwith/openInNewWindow": "直接于新视窗打开文件",
+                "opr/openwith/cancel": "取消",
+
+                "opr/shortcut/title": "在桌面建立捷径", 
+                "opr/shortcut/ok": "捷径建立成功", 
+                "opr/shorcut/error": "桌面建立捷径失败",
+
+                "opr/zip/zipping": "正在压缩 ",
+                "opr/zip/unzipping": "正在解压缩 ",
+                "opr/zip/nozipfile": "没有已选择的压缩文件",
+                "opr/zip/file": " 个文件",
+                "opr/zip/files": " 个文件",
+
+                "opr/confirmclose/title":"确认取消上传",
+                "opr/confirmclose/desc":"此档案管理员视窗正在上传档案到伺服器。关闭此视窗将会取消所有上传工作。<br><b>确认取消上传并关闭视窗?</b>",
+                "opr/confirmclose/cancelAndExit":"取消上传并关闭视窗",
+                "opr/confirmclose/continue":"继续上传",
+
+                "contextmenu/open": "打开",
+                "contextmenu/openWith": "使用 … 打开",
+                "contextmenu/openNewWindow": "在新视窗打开",
+                "contextmenu/openNewWindowVroot": "在新视窗打开",
+                "contextmenu/openFileLocation": "打开文件位置",
+                "contextmenu/Share": "分享",
+                "contextmenu/MuitSelect": "切换多选",
+                "contextmenu/copy": "复制",
+                "contextmenu/paste": "粘贴",
+                "contextmenu/cut": "剪切",
+                "contextmenu/newFile": "新建文件",
+                "contextmenu/newFolder": "新建文件夹",
+                "contextmenu/upload": "上传",
+                "contextmenu/zip": "建立压缩档",
+                "contextmenu/unzip": "解压缩至此",
+                "contextmenu/rename": "重新命名",
+                "contextmenu/delete": "删除",
+                "contextmenu/backup": "备份及还原",
+                "contextmenu/refresh": "重新整理",
+                "contextmenu/download": "下载",
+                "contextmenu/sharemanager": "分享管理员",
+                "contextmenu/properties": "内容",
+
+                "upload/count/uploading": " 上传中",
+                "upload/count/pending": " 等待中",
+
+                "message/rename/success": "重新命名成功",
+                "message/copy/success": " 个文件已复制",
+                "message/move/success": " 个文件已移动",
+                "message/share/removed": "已停止文件分享",
+                "message/paste/nothing": "没有可粘贴的文件",
+                "message/remove/success": " 个文件已被成功删除",
+                "message/recycle/success": " 个文件已被成功移动到资源回收箱",
+                "message/upload/started": "文件上传已开始",
+                "message/zip/fail": "文件压缩失败:原因不明",
+                "message/newfolder/success": "新文件夹建立完成",
+                "message/newItem/success": " 建立完成",
+                "message/nofileSelected": "没有选择文件",
+                "message/moduleNotSupport": "此模块无法打开任何文件",
+                "message/unknownSize": "未知大小",
+                "message/loading": "载入中",
+                "message/initiating": "正在初始化",
+                "message/Permission Denied: You are not the file owner nor can write to this file": "存取被拒:您不是分享文件者或有權訪問此文件",
+                "message/Invalid path given": "文件路径无效",
+                "message/Unknown path given": "文件路径无效",
+                "message/Invalid keyword given":"关键字不可为空白", 
+                "message/This directory is Read Only": "无法写入到唯读资料夹",
+                "message/Access Denied":"取存被拒",
+                "message/Given filename already exists":"此文件名称已存在",
+                "message/Given folder already exists":"此资料夹名称已存在",
+                "message/Source file not exists":"来源文件不存在",
+                "message/File already exists":"文件已存在",
+                "message/Undefined dest location":"目标路径不可为空白",
+                "message/Dest folder not found":"找不到目标资料夹",
+                "message/Invalid dir given":"资料夹路径无效",
+                "message/Storage Quota Full":"储存配额已满",
+                "message/Unknown file opeartion given":"不支援的文件动作请求",
+                "message/Preference value too long. Preference value can only store maximum 1024 characters.":"设定值太长。设定值只能够少于 1024 字元",
+                "message/User not logged in":"使用者未登入",
+                "message/Folder not exists":"找不到资料夹", 
+                "message/Failed to move file to trash":"无法移动到资源回收箱",
+                "message/Incompatible File System Type: Try SHIFT + DELETE to delete file permanently":"档案系统不支援文件回收:请使用 SHIFT + DELETE 以永久移除文件",
+
+                "message/noMatchResults":"找不到匹配的文件",
+                "message/noMatchResultsDesc":"伺服器找不到与此关键字匹配的文件",
+                "message/noMatchResultsInst":"请检查你的关键字或通配符是否正确。", 
+
+                "message/destIdentical": "文件来源及目的地相同",
+                "message/decodeFilelistFail": "载案置入失败:无法读取文件列表",
+                "message/uploadFailed": "载案上传失败:文件太大或目标储存装置已满",
+                "message/newFilenameIdentical": "重新命名失败:新旧文件名称相同"
+            },
+            "titles": {
+                "Back": "上一页",
+                "Parent Folder": "返回上层目录",
+                "Open": "打开",
+                "Open with": "以…打开",
+                "Share File": "分享所选",
+                "Download": "下载",
+                "Copy": "复制",
+                "Paste": "粘贴",
+                "Cut": "剪切",
+                "New File": "新增文件",
+                "New Folder": "新增文件夹",
+                "Upload": "上传",
+                "Create Zip": "建立压缩档",
+                "Unzip Here": "解压缩至此",
+                "Rename": "重新命名",
+                "Delete": "删除",
+                "Refresh": "重新整理",
+                "Home": "根目录",
+                "File Info": "文件信息",
+                "Toggle Folder List": "检视根目录列表",
+                "Dark Theme": "切换主题配色",
+                "Edit Path": "编辑路径",
+                "Sorting Method": "文件排序",
+                "Search": "搜索",
+                "Block View": "显示文件预览",
+                "List View": "显示文件列表",
+                "Case Sensitive": "区分大小写",
+                "Clear Search": "清除搜索结果"
+            },
+            "placeholder": {
+                "New Filename": "在此输入新文件名称",
+                "New Folder Name": "在此输入新文件夹名称",
+                "File Search (Start wildcard search with / , e.g. /*.mp3)": "文件搜索(如要使用通配符,请先输入 / 号,例如:/*.mp3)"
+
+            }
+        }
+    }
 }

+ 5 - 0
web/script/ao_module.js

@@ -220,6 +220,11 @@ function ao_module_getInstanceByPath(matchingPath){
 
 //Close the current window
 function ao_module_close(){
+    ao_module_closeHandler();
+}
+
+//Close handler for WebApp special handling of ao_module_close()
+function ao_module_closeHandler(){
     if (!ao_module_virtualDesktop){
         window.close('','_parent','');
         window.location.href = ao_root + "SystemAO/closeTabInsturction.html";

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików