浏览代码

Added details view mode to File Manager

Toby Chui 2 年之前
父节点
当前提交
888313a100

+ 251 - 222
web/SystemAO/file_system/file_explorer.css

@@ -1,6 +1,34 @@
 /*
     ArozOS File Manager css file
+
+    This file is used to overwrite the default css
+    on segmentic ui (or formantic if it is later upgraded)
+*/
+
+/*
+    Color definations
 */
+:root {
+    --fileopr_btnTxt: rgb(114, 114, 114);
+    --divider: #f0f0f0;
+    --navi_bgcolor: #fcfcfc;
+    --navi_theme: #92cfe7;
+    --dark_theme_toggle: #333333;
+    --dir_item_color: rgb(78, 78, 78);
+    --text_color: rgb(114, 114, 114);
+    --text_color_secondary: rgb(139, 139, 139);
+    --text_color_invert: rgb(182, 182, 182);
+    --text_active: #23cc28;
+
+    --dir_hover_text: #a3a3a3;
+    --dir_hover_background: #f3f3f3;
+    --dir_hover_active: #c9e7f1;
+
+    --folder_view_background: #ffffff;
+    --folder_view_share: #24cc29;
+}
+
+
 body{
     color:black;
     height:100%;
@@ -10,20 +38,14 @@ html{
     height:100%;
     overflow:hidden;
 }
-body.whiteTheme{
+body{
     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
 */
@@ -36,22 +58,19 @@ body.whiteTheme{
     padding-bottom:3px;
     z-index: 99;
 }
-.navibar.darkTheme{
-    background-color:#17161f !important;
-    border-bottom:2px solid #34b7eb;
 
-}
-.navibar.whiteTheme{
+.navibar{
     /*box-shadow: 0 2px 4px 2px rgb(224, 224, 224);*/
-    background-color:#fcfcfc;
-    border-bottom:2px solid #34b7eb;
+    background-color:var(--navi_bgcolor);
+    border-bottom:2px solid var(--navi_theme);
 }
-.whiteTheme .button.standard{
+
+.button.standard{
     box-shadow: 0 1px 1px 0px rgb(190, 190, 190);
     border: 0px;
 }
 
-.whiteTheme .button.standard:hover{
+.button.standard:hover{
     background-color:#82c2f0 !important;
     color:white !important;
 }
@@ -65,7 +84,6 @@ body.whiteTheme{
     border: 1px solid transparent;
     cursor: pointer;
     background-color: transparent;
-    /*width: 4em;*/
     text-align: center;
     padding-bottom: 0.4em;
     padding-top: 0.5em;
@@ -106,56 +124,111 @@ body.whiteTheme{
 
 .fileoprSmallBtn:hover{
     opacity: 0.8;
-    border: 1px solid #f0f0f0;
+    border: 1px solid var(--divider);
     border-radius: 0.4em;
 }
 
 .fileoprGroupDivider{
     padding-right: 0.2em;
     margin-right: 0.2em;
-    border-right: 1px solid #f0f0f0;
+    border-right: 1px solid var(--divider);
+}
+
+/*
+    Address and search bar
+*/
+.navibarBtn{
+    cursor: pointer;
+    border: 1px solid transparent;
+    color:rgb(114, 114, 114);
+    background-color: transparent;
+    padding: 0.3em;
+    display: inline-block;
+    border-radius: 0.4em;
+    padding-right: 0.1em;
+    padding-bottom: 0.4em;
+}
+
+.navibarBtn:hover{
+    opacity: 0.8;
+    border: 1px solid var(--divider);
+}
+
+.navibarBtn.disabled{
+    pointer-events: none;
+    opacity: 0.5;
+    user-select: none;
 }
 
+/* Special button for switching over to dark theme*/
+.navibarBtn.DarkThemeToggle{
+    color:var(--text_color_invert);
+    background-color: var(--dark_theme_toggle);
+}
 
-.rightPad{
-    margin-right:37px;
+.navibarBtn.DarkThemeToggle:hover{
+    border: 1px solid transparent;
 }
+
+.navibarBtn:hover{
+    opacity: 0.8;
+}
+
 .addressBar{
+    border-top: 1px solid var(--divider);
     width:100%;
-    padding:3px;
-    padding-left: 0px;
-    padding-right: 0px;
+    padding: 0.4em;
+    padding-left: 0;
+    padding-right: 0;
+    padding-top: 0.6em;
     min-height: 35px;
-    padding-top:6px;
+    margin-top:0.4em;
+    vertical-align: top;
+    display: flex;
 }
-.breadcrumb.darkTheme{
-    background-color:transparent;
+
+.addressText{
+    margin-left: 0.4em !important;
+    padding:5px;
+    border-radius: 0.4em;
+    border: 1px solid #cfcfcf;
+    flex-grow: 1;
 }
-.section.darkTheme{
-    color:white !important;
-    background-color:transparent;
+
+#pathInputField{
+    margin-left: 0.4em !important;
+    font-size: 1rem;
+    height: 27px;
 }
+
+
 .selectable{
     cursor:pointer;
 }
-.rightAlign{
-    position:absolute;
-    right:0px;
-    top:3px;
-}
-.addressText{
-    padding:5px;
-    border-radius: 3px;
-}
-.addressText.darkTheme{
-    border: 1px solid #262533;
+
+/*
+    Search bar
+*/
+.searchbar{
+    width:100%;
+    padding: 0.4em;
+    padding-left: 0;
+    padding-right: 0;
+    min-height: 35px;
+    margin-top:0.4em;
+    vertical-align: top;
+    display: flex;
+    align-items: center;
 }
-.addressText.whiteTheme{
-    border: 1px solid #cfcfcf;
+
+.searchbar .searInputBar{
+    flex-grow: 1;
 }
-.divider{
-    color:#262533 !important;
-    background-color:transparent;
+
+.searchbar .navibarBtn.active{
+    color: var(--text_active);
+    font-weight: bold;
+    
 }
 
 /*
@@ -172,9 +245,7 @@ body.whiteTheme{
     position:absolute;
 }
 
-.item.darkTheme{
-    color:white;
-}
+
 .rightmargin.icon{
     margin-right:8px !important;
 }
@@ -182,24 +253,27 @@ body.whiteTheme{
     cursor:pointer;
 }
 .dir:not(.active):hover{
-    color:#a3a3a3 !important;
+    color: var(--dir_hover_text) !important;
 }
 .dir.active:hover{
-    background-color:#d2f2f7;
+    background-color:var(--dir_hover_active);
 }
 .dir.item{
     padding-top: 0.4em !important;
     padding-bottom: 0.4em !important;
     padding-left: 1.4em !important;
     padding-right: 1.4em !important;
+    color:var(--dir_item_color);
 }
-.dir.item.whiteTheme{
-    color:rgb(78, 78, 78);
-}
+
 .vroot.active{
     background-color: #dadada;
 }
 
+.mobilePathDisplayWrapper{
+    width:100%;
+    margin-bottom:5px;
+}
 
 /*
     Folder Viewer (Main viewer)
@@ -210,95 +284,144 @@ body.whiteTheme{
     padding-right:2em;
     padding-top:2em;
     overflow-y:auto;
-}
-#folderView.whiteTheme{
-    background-color:white;
+    background-color: var(--folder_view_background);
 }
 
-.device{
-    cursor:pointer;
-}
-.device:hover{
-    color:#d1d1d1;
-}
-.accordion.darkTheme{
-    color:white !important;
+#folderList{
+    margin-bottom:1em;
 }
-.accordion.whiteTheme{
-    background-color:transparent !important;
+
+.fileviewList{
+    position: relative;
 }
-.fileObject{
+
+/* Common spacing for list view and grid view */
+.fileviewList .fileObject.item,.fileviewList .fileObject.card{
     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;
+    border: 1px solid var(--divider);
 }
-.fileObject.darkTheme{
-    border:1px solid rgb(72, 69, 88) !important;
+
+.fileviewList .fileObject.item:hover,.fileviewList .fileObject.card:hover{
+    background-color:#f2f2f2 !important;
 }
-.segmented.list.darkTheme{
-    border:1px solid rgb(8, 8, 10) !important;
-    box-shadow: 0 0 0 0;
-    border-radius: 0px;
+
+.fileviewList .fileObject.item.selected, .fileviewList .fileObject.card.selected{
+    background-color:#d2f2f7 !important;
+    color:black !important;
 }
-.fileObject.darkTheme:hover{
-    background-color:#17161f !important;
+
+/* Filelist in list mode */
+.fileviewList .fileObject.item{
+    padding: 0.8em;
+    padding-left: 1.2em;
+    padding-right: 1em;
 }
-.fileObject.darkTheme:hover span{
-    background-color:#17161f !important;
+
+.fileviewList .fileObject.item:first-child{
+    border-top-left-radius: 0.4em;
+    border-top-right-radius: 0.4em;
 }
-.fileObject.whiteTheme:hover{
-    background-color:#f2f2f2 !important;
+
+.fileviewList .fileObject.item:last-child{
+    border-bottom-left-radius: 0.4em;
+    border-bottom-right-radius: 0.4em;
 }
-.fileObject.darkTheme.selected{
-    background-color:#100f16 !important;
-    
+
+.fileviewList .fileObject.item:not(:first-child) {
+    border-top: 0;
 }
-.fileObject.darkTheme.selected span{
-    background-color:#100f16 !important;
-    
+
+/* Filelist in grid mode */
+.fileviewList .fileObject.card{
+    border-radius: 0.4em;
+    position: relative;
+    margin-bottom:1em;
 }
-.fileObject.whiteTheme.selected{
-    background-color:#d2f2f7 !important;
-    color:black !important;
+
+.fileviewList .fileObject.card img{
+    width: 148px;
+    height: 148px;
 }
-.mobilePathDisplayWrapper{
-    width:100%;
-    margin-bottom:5px;
+
+.fileviewList .fileObject.card .content{
+    padding-left: 1em;
+    padding-right: 1em;
+    padding-top: 1em;
+    padding-bottom: 0.4em;
 }
-.ts.card.darkTheme{
-    border:1px solid rgb(72, 69, 88) !important;
-    box-shadow: 0 0 0 0 transparent;
+
+.fileviewList .fileObject.card .content .header{
+    font-size: 1.2em;
+    font-weight: bold;
+    color: var(--text_color);
 }
-.darkTheme.header{
-    color:white !important;
-    background-color:transparent !important;
+
+.fileviewList .fileObject.card .content .meta{
+    font-size: 0.9em;
+    color: var(--text_color_secondary);
 }
-.darkTheme.meta{
-    color:rgba(255, 255, 255, 0.836) !important;
-    background-color:transparent !important;
+
+.fileviewList .fileObject.card .content .description{
+    font-size: 1em;
+    color: var(--text_color);
+    position: absolute;
+    bottom: 1em;
+    left: 1em;
 }
-.darkTheme.description{
-    color:white !important;
-    background-color:transparent !important;
+
+/* fileview in detail mode */
+.fileviewList .fileObject.details{
+    cursor:pointer;
+    user-select: none;
+    border: 1px solid var(--divider);
 }
-.whiteTheme.header{
-    background-color:transparent;
+
+.fileviewList .fileObject.details:hover{
+    background-color:#f2f2f2 !important;
 }
-.whiteTheme.meta{
-    background-color:transparent;
+
+.fileviewList .fileObject.details.selected{
+    background-color:#d2f2f7 !important;
+    color:black !important;
 }
-.whiteTheme.description{
-    background-color:transparent;
+
+.fileviewList .detailTableContent tr td:first-child{
+    padding-left: 1em !important;
 }
-#folderList{
-    margin-bottom:16px;
+
+.fileviewList .fileObject.details .light-text{
+    color: var(--text_color_secondary);
+}
+
+/* Share button */
+.sharebtn{
+    cursor: pointer;
+    border: 1px solid transparent;
+    background-color: transparent;
+    color: var(--folder_view_share);
+}
+
+.sharebtn:hover{
+    opacity: 0.5;
 }
+
+
+/*
+    Context Menu
+
+    This is a complete rewrite / re-implement of the 
+    ts contextmenu after migration
+
+
+*/
+
+.contextmenu{
+    
+}
+
 .msgbox{
     padding:3px;
 }
@@ -327,14 +450,7 @@ body.whiteTheme{
     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{
+.popup{
     -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);
@@ -430,7 +546,7 @@ body.whiteTheme{
     border-radius: 4px;
 }
 
-.popupbuttons.primary.whiteTheme{
+.popupbuttons.primary{
     background-color:#51aded;
     box-shadow: 0 2px 1px 0px #34a2ee !important;
     border: 1px solid transparent;
@@ -444,17 +560,6 @@ body.whiteTheme{
     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;
@@ -465,11 +570,11 @@ body.whiteTheme{
     pointer-events: none;
 }
 
-.whiteTheme.allowHover:hover{
+.allowHover:hover{
     background-color:rgba(238, 238, 238, 0.932);
 }
 
-.whiteTheme.allowHover.primary:hover{
+.allowHover.primary:hover{
     background-color:#76c0f5;
 }
 
@@ -477,25 +582,6 @@ body.whiteTheme{
     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;
 }
@@ -515,7 +601,7 @@ input.darkTheme{
         backdrop-filter: blur(5px);
     }
 }
-.breadcrumb.whiteTheme{
+.breadcrumb{
     background-color:white;
 }
 
@@ -524,10 +610,6 @@ input.darkTheme{
     overflow-y:auto;
 }
 
-#openWith .segment.darkTheme{
-    color:white !important;
-}
-
 #openWithModuleList .item{
     padding:8px;
     padding-left:22px;
@@ -536,23 +618,14 @@ input.darkTheme{
     flex-wrap: wrap;        
 }
 
-#openWithModuleList.darkTheme .item.selected{
-    background-color:#100f16 !important;
-}
-#openWithModuleList.whiteTheme .item.selected{
+#openWithModuleList .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{
+#openWithModuleList .item.selectable:hover{
     background-color:rgba(35,35,35,0.14);
 }
-.contextmenu.darkTheme .item{
-    color:white !important;
-}
 
 .contextmenu .item{
     font-size:90% !important;
@@ -567,26 +640,16 @@ input.darkTheme{
     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{
+.statusBar{
     color:rgb(78, 78, 78);
 }
 
-.statusBar.darkTheme{
-    background-color:#181720 !important;
-}
 
 .hideUploadButton{
     float: right;
@@ -615,18 +678,10 @@ input.darkTheme{
     cursor:pointer;
 }
 
-.normal.object.whiteTheme{
+.normal.object{
     color:#303030;
 }
 
-.normal.object.darkTheme{
-    color:white;
-}
-
-.sub.header.darkTheme{
-    color:rgb(190, 190, 190) !important;
-}
-
 .hex.foldername{
     color:#2b9447 !important;
 }
@@ -639,38 +694,12 @@ input.darkTheme{
     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{
+.fileObject.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;
-}
-

+ 201 - 123
web/SystemAO/file_system/file_explorer.html

@@ -27,13 +27,15 @@
     <body class="whiteTheme">
         <div id="navibar" class="navibar whiteTheme">
             <!-- File Opr Group-->
-            <button class="fileOprBtn" title="Open" onclick="openViaButton();"><img class="opricon" src="img/opr/open.svg"><p class="oprtxt" locale="fileopr/Open">Open</p></button>
-            <button class="fileOprBtn" title="Copy" onclick="copy();"><img class="opricon" src="img/opr/copy.svg"><p class="oprtxt" locale="fileopr/Copy">Copy</p></button>
-            <button class="fileOprBtn" title="Paste" onclick="paste();"><img class="opricon" src="img/opr/paste.svg"><p class="oprtxt" locale="fileopr/Paste">Paste</p></button>
-            <div class="fileoprGroupDivider" style="display: inline-block; vertical-align: top;">
-                <button class="fileoprSmallBtn" title="Open with" onclick="openWith();"><i class="external icon"></i> <span locale="fileopr/Open with">Open With</span></button><br>
-                <button class="fileoprSmallBtn" title="Cut" onclick="cut();"><i class="blue cut icon"></i> <span locale="fileopr/Cut">Cut</span></button><br>
-                <button class="fileoprSmallBtn" title="Rename" onclick="rename();"><i class="teal i cursor icon"></i> <span locale="fileopr/Rename">Rename</span></button>
+            <div class="btnGroup" style="display:inline-block;">
+                <button class="fileOprBtn" title="Open" onclick="openViaButton();"><img class="opricon" src="img/opr/open.svg"><p class="oprtxt" locale="fileopr/Open">Open</p></button>
+                <button class="fileOprBtn" title="Copy" onclick="copy();"><img class="opricon" src="img/opr/copy.svg"><p class="oprtxt" locale="fileopr/Copy">Copy</p></button>
+                <button class="fileOprBtn" title="Paste" onclick="paste();"><img class="opricon" src="img/opr/paste.svg"><p class="oprtxt" locale="fileopr/Paste">Paste</p></button>
+                <div class="fileoprGroupDivider" style="display: inline-block; vertical-align: top;">
+                    <button class="fileoprSmallBtn" title="Open with" onclick="openWith();"><i class="external icon"></i> <span locale="fileopr/Open with">Open With</span></button><br>
+                    <button class="fileoprSmallBtn" title="Cut" onclick="cut();"><i class="blue cut icon"></i> <span locale="fileopr/Cut">Cut</span></button><br>
+                    <button class="fileoprSmallBtn" title="Rename" onclick="rename();"><i class="teal i cursor icon"></i> <span locale="fileopr/Rename">Rename</span></button>
+                </div>
             </div>
             <button class="fileOprBtn" title="Upload" onclick="upload();"><img class="opricon" src="img/opr/upload.svg"><p class="oprtxt" locale="fileopr/Upload">Upload</p></button>
             <button class="fileOprBtn" title="Download" onclick="downloadFile();"><img class="opricon" src="img/opr/download.svg"><p class="oprtxt" locale="fileopr/Download">Download</p></button>
@@ -51,45 +53,47 @@
             </div>
             <button class="fileOprBtn" title="Delete" onclick="deleteFile();"><img class="opricon" src="img/opr/delete.svg"><p class="oprtxt" locale="fileopr/Delete">Delete</p></button>
             <button class="fileOprBtn" title="Share File" onclick="shareFile();"><img class="opricon" src="img/opr/share.svg"><p class="oprtxt" locale="fileopr/Share">Share</p></button>
-            
+            <div class="fileoprGroupDivider" style="display: inline-block; vertical-align: top; height: 80px;"></div>
+            <div style="display: inline-block; vertical-align: top;">
+                <select id="sortingMethodSelector" title="Sorting Method" class="ui basic borderless mini dropdown" onchange="updateSortingMethods();" autocomplete="off">
+                    <option value="default" locale="menu/sort/asc">Ascending</option>
+                    <option value="reverse" locale="menu/sort/desc">Descending</option>
+                    <option value="smallToLarge" locale="menu/sort/small">Smallest</option>
+                    <option value="largeToSmall" locale="menu/sort/large"> Largest</option>
+                    <option value="mostRecent" locale="menu/sort/mostrecent">Most Recent</option>
+                    <option value="leastRecent" locale="menu/sort/leastrecent">Least Recent</option>
+                </select>
+               <div class="buttons">
+                    <!-- Viewport-->
+                    <button class="ui icon tiny button basic videmode" mode="grid" title="Block View" onclick="changeViewMode(this);"><i class="block layout icon"></i></button>
+                    <button class="ui icon tiny button basic videmode" mode="list" title="List View" onclick="changeViewMode(this);"><i class="align justify icon"></i></button>
+                    <button class="ui icon tiny button basic videmode" mode="details" title="Detail View" onclick="changeViewMode(this);"><i class="list ul icon"></i></button>
+               </div>   
+            </div>
             <br>
-            <!-- Address group -->
-            <!-- Search group -->
             <!-- Directoy navigations -->
-            <button id="backbtn" class="ui icon tiny button standard whiteTheme" onclick="previosPath();" title="Back"><i class="left arrow icon"></i></button>
-            <button id="ppbtn" class="ui icon tiny button standard whiteTheme rightPad" onclick="parentDir();" title="Parent Folder"><i class="up arrow icon"></i></button>
-             
-             
-             <div class="addressBar">
-                <button class="ui icon tiny button standard whiteTheme" onclick="toggleSidebar();"  title="Toggle Folder List"><i class="content icon"></i></button>
-                <button  class="ui icon tiny button inverted" title="Dark Theme" onclick="toggleDarkTheme();"><i class="moon icon" id="darkthemebtn"></i></button>
-                <button class="ui tiny icon button standard whiteTheme" title="Edit Path" onclick="showEditCurrentPathInput(event)"><i class="ui edit icon"></i></button>
-                <div id="pathDisplayField" class="ui breadcrumb whiteTheme addressText pathDisplay desktopOnly" ondblclick="showEditCurrentPathInput(event);">
-                    <div class="section whiteTheme selectable"><i class="folder icon"></i> user</div>
-                    <div class="divider whiteTheme">:/</div>
-                    <div class="section whiteTheme selectable">Desktop</div>
+            <div class="addressBar">
+                <button id="backbtn" class="navibarBtn" onclick="previosPath();" title="Back"><i class="left arrow icon"></i></button>
+                <button id="ppbtn" class="navibarBtn" onclick="parentDir();" title="Parent Folder"><i class="up arrow icon"></i></button>
+
+                <button class="navibarBtn" onclick="toggleSidebar();"  title="Toggle Folder List"><i class="content icon"></i></button>
+                <button  class="navibarBtn DarkThemeToggle" title="Dark Theme" onclick="toggleDarkTheme();"><i class="moon icon" id="darkthemebtn"></i></button>
+
+                <div id="pathDisplayField" class="ui breadcrumb addressText pathDisplay desktopOnly" ondblclick="showEditCurrentPathInput(event);">
+                    <div class="section selectable"><i class="folder icon"></i> user</div>
+                    <div class="divider">:/</div>
+                    <div class="section selectable">Desktop</div>
                 </div>
-                
-                <div id="pathInputField" class="ui action mini input whiteTheme" style="display:none;">
+                <button id="editPathBtn" class="navibarBtn" style="margin-left: 0.4em;" title="Edit Path" onclick="showEditCurrentPathInput(event)"><i class="ui edit icon"></i></button>
+                <div id="pathInputField" class="ui action mini input" style="display:none;">
                     <input type="text" style="min-width: 200px;" class="whiteTheme" placeholder="Type a path and press enter" onkeydown="handleOpenPathKeydown(event);">
-                    <button class="ui icon button" title="Open" onclick="openEnteredPath(this);">
+                    <button class="ui icon basic button" title="Open" onclick="openEnteredPath(this);">
                         <i class="checkmark icon"></i>
                     </button>
                 </div>
-                <div class="rightAlign">
-                    <select id="sortingMethodSelector" title="Sorting Method" class="ui basic borderless mini dropdown" onchange="updateSortingMethods();" autocomplete="off">
-                        <option value="default" locale="menu/sort/asc">Ascending</option>
-                        <option value="reverse" locale="menu/sort/desc">Descending</option>
-                        <option value="smallToLarge" locale="menu/sort/small">Smallest</option>
-                        <option value="largeToSmall" locale="menu/sort/large"> Largest</option>
-                        <option value="mostRecent" locale="menu/sort/mostrecent">Most Recent</option>
-                        <option value="leastRecent" locale="menu/sort/leastrecent">Least Recent</option>
-                    </select>
-                    <button id="searhbtn" class="ui icon tiny button standard whiteTheme"  title="Search" onclick="toggleSearch();"><i class="search icon"></i></button>
-                    <button class="ui icon tiny button standard whiteTheme videmode" mode="grid" title="Block View" onclick="changeViewMode(this);"><i class="block layout icon"></i></button>
-                    <button class="ui icon tiny button standard whiteTheme videmode" mode="list" title="List View" onclick="changeViewMode(this);"><i class="align justify icon"></i></button>
-                </div>
-             </div>
+                <button id="searhbtn" class="navibarBtn"  title="Search" onclick="toggleSearch();"><i class="search icon"></i></button>
+            </div>
+            
              <div class="mobilePathDisplayWrapper">
                 <div id="mobilePathDisplay" style="width:100%;" class="ui pathDisplay breadcrumb whiteTheme addressText mobileOnly">
                     <div class="section whiteTheme selectable"><i class="folder icon"></i> user</div>
@@ -97,15 +101,15 @@
                     <div class="section whiteTheme selectable">Desktop</div>
                 </div>
              </div>
-             <div class="searchbar" style="z-index:999; display:none;">
-                <div style="width: 80%; display:inline-block; margin-top:-4px;">
+             <div class="searchbar" style="display:none;">
+                <div class="searInputBar" style="width: 80%; display:inline-block; margin-top:-4px;">
                     <div class="ui mini fluid input">
                         <input autocomplete="off" id="searchInput" type="text" class="whiteTheme" placeholder="File Search (Start wildcard search with / , e.g. /*.mp3)" onkeypress="handleSearchBarPress(event);">
                     </div>
                 </div>
-                <button class="ui icon tiny button standard whiteTheme" title="Case Sensitive" onclick="toggleCaseSensitive(this);">Aa</button>
-                <button class="ui icon tiny button standard whiteTheme" title="Search" onclick="handleSearch();"><i class="search icon"></i></button>
-                <button class="ui icon tiny button standard whiteTheme" title="Clear Search" onclick="hideSearchBar();"><i class="remove icon"></i></button>
+                <button class="navibarBtn" title="Case Sensitive" onclick="toggleCaseSensitive(this);" style="margin-left: 0.4em;">Aa</button>
+                <button class="navibarBtn" title="Search" onclick="handleSearch();"><i class="search icon"></i></button>
+                <button class="navibarBtn" title="Clear Search" onclick="hideSearchBar();"><i class="red remove icon"></i></button>
             </div>
              <div class="msgbox" style="z-index:999; display:none;">
                 <i class="checkmark icon"></i> <span>No Message</span>
@@ -128,10 +132,10 @@
                 </div>
             </div>
             <div id="folderView" ondrop="drop(event)" ondragover="allowDrop(event)">
-                <div id="folderList" class="ui segmented fluid list">
+                <div id="folderList" class="fileviewList">
 
                 </div>
-                <div id="fileList" class="ui segmented fluid list">
+                <div id="fileList" class="fileviewList">
 
                 </div>
                 <br>
@@ -415,7 +419,7 @@
         </div>
 
         <!-- Context Menu -->
-        <div id="contextmenu" class="ui small contextmenu visible whiteTheme" style="min-width:250px;">
+        <div id="contextmenu" class="contextmenu" style="min-width:250px;">
             <div class="item" onclick="openViaButton();">
                 <i class="folder open icon"></i> <span locale="contextmenu/open">Open</span>
             </div>
@@ -593,7 +597,7 @@
             let isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
 
             //Intiiation functions
-            $(document).ready(function(){
+            $(document).ready(function(){ 
                 if (applocale){
                     //Applocale found. Do localization
                     applocale.init("../locale/file_explorer.json", function(){
@@ -601,6 +605,7 @@
                         initRootDirs();
                         initSystemInfo();
                         initUploadMode();
+                        $(".dropdown").dropdown();
                     });
                 }else{
                     //Applocale not found. Is this a trim down version of ArozOS?
@@ -612,6 +617,7 @@
                     initRootDirs();
                     initSystemInfo();
                     initUploadMode();
+                    $(".dropdown").dropdown();
                 }
            
                 if (isMobile){
@@ -629,13 +635,9 @@
                     $(".desktopOnly").hide();
                     $(".mobileOnly").show();
 
-                    //Adjust minor css on mobile devices
-                    $(".rightPad").css("margin-right", "37px");
                 }else{
                     $(".mobileOnly").hide();
                     $(".desktopOnly").show();
-
-                    $(".rightPad").css("margin-right", "37px");
                 }
                 //Initialize view mode buttons
                 updateViewmodeButtons();
@@ -727,8 +729,14 @@
                         }
 
                     });
-                }, 5000)
+                }, 5000);
+
 
+                //Update the window sizes for special cases
+                if (window.innerWidth < 620 && !isMobile){
+                    toggleSidebar(false);
+                }
+                initWindowSizes(false);
             });
 
             //END OF INIT FUNCTIONS
@@ -760,7 +768,7 @@
                                 var icon = specifcRootInfo[0];
                                 var displayName = specifcRootInfo[1];
                                 var vpath = thisRootObject.Filepath;
-                                $("#userroot").append(`<div class="dir item userroot" filepath="${vpath}" type="folder" onclick="openthis(this);"><i class="${icon} rightmargin icon"></i> ${displayName}</div>`);
+                                $("#userroot").append(`<div class="dir item userrootfolder" filepath="${vpath}" type="folder" onclick="openthis(this);"><i class="${icon} rightmargin icon"></i> ${displayName}</div>`);
                             }
                         }
                     }   
@@ -793,7 +801,7 @@
                             if (usagePercentage > 90){
                                 className = "negative";
                             }
-                            $("#deviceList").append(`<div class="dir item ${currentTheme}" filepath="${drivePath}" ><i class="disk outline rightmargin icon"></i> ${drivePath} 
+                            $("#deviceList").append(`<div class="dir item" filepath="${drivePath}" ><i class="disk outline rightmargin icon"></i> ${drivePath} 
                                 <div style="width:100px;height:15px !important; position:absolute;right:3px;top:6px;"">
                                     <div class="ui ${className} tiny progress">
                                         <div class="bar" style="width: ${usagePercentage}%"></div>
@@ -908,19 +916,12 @@
 
                 //Add loading screen to the folderlists and fileList
                 $("#fileList").html("");
-                if (currentTheme == "darkTheme"){
-                    $("#folderList").html(`<div style="height: 100px;">
-                        <div class="ui active dimmer">
-                            <div class="ui text loader">${applocale.getString("message/loading", "Loading")}</div>
-                        </div>
-                    </div>`);
-                }else{
-                    $("#folderList").html(`<div style="height: 100px;">
-                        <div class="ui active inverted dimmer">
-                            <div class="ui text loader">${applocale.getString("message/loading", "Loading")}</div>
-                        </div>
-                    </div>`);
-                }
+                $("#folderList").html(`<div style="height: 100px;">
+                    <div class="ui active inverted dimmer">
+                        <div class="ui text loader">${applocale.getString("message/loading", "Loading")}</div>
+                    </div>
+                </div>`);
+                
 
                 //Highlight the target vroot name on the side bar
                 $(".vroot.active").removeClass("active");
@@ -999,10 +1000,10 @@
                                     
                                     //Print folder not found exception
                                     $("#folderList").show();
-                                    $("#folderList").html(`<div class="ui basic segment ${currentTheme}">
+                                    $("#folderList").html(`<div class="ui basic segment">
                                         <div class="ui header">
-                                            <i class="remove icon ${currentTheme}"></i> <span class="${currentTheme}">${applocale.getString("message/folderCannotOpen","This Folder Cannot Be Opened")}</span>
-                                            <div class="sub header ${currentTheme}" style="margin-top:12px;">${applocale.getString("message/folderCannotOpen/codedesc","The server return the following error message:")} <br><code>${data.error.toUpperCase()}</code><br>
+                                            <i class="remove icon"></i> <span>${applocale.getString("message/folderCannotOpen","This Folder Cannot Be Opened")}</span>
+                                            <div class="sub header" style="margin-top:12px;">${applocale.getString("message/folderCannotOpen/codedesc","The server return the following error message:")} <br><code>${data.error.toUpperCase()}</code><br>
                                                 ${new Date().toLocaleString(undefined, {year: 'numeric', month: '2-digit', day: '2-digit', weekday:"long", hour: '2-digit', hour12: false, minute:'2-digit', second:'2-digit'})}</div>
                                         </div>
                                     </div>`);
@@ -1051,13 +1052,37 @@
                 $("#folderList").html("");
                 //Build the css strcture of the list
                 if (viewMode == "list"){
-                    $("#fileList").attr("class",`ts segmented fluid list ${currentTheme}`);
-                    $("#folderList").attr("class",`ts segmented fluid list ${currentTheme}`);
+
                 }else if (viewMode == "details"){
-                    
+                    //Append the table structure to the corrisponding elements
+                    $("#folderList").append(`<table class="ui very basic compact unstackable table"  style="padding-right: 2em;">
+                        <thead>
+                            <tr>
+                                <th><span class="foldercounter"></span>${applocale.getString("view/details/folders", " Folders")}</th>
+                                <th>${applocale.getString("view/details/modTime", "Last Modification")}</th>
+                                <th>${applocale.getString("view/details/shared", "Shared")}</th>
+                            </tr>
+                        </thead>
+                        <tbody class="folderDetailList detailTableContent">
+                            
+                        </tbody>
+                    </table>`);
+                    $("#fileList").append(`<table class="ui very basic compact unstackable table" style="padding-right: 2em;">
+                        <thead>
+                            <tr>
+                                <th><span class="filecounter"></span>${applocale.getString("view/details/files", " Files")}</th>
+                                <th>${applocale.getString("view/details/ext", "Extension")}</th>
+                                <th>${applocale.getString("view/details/size", "Filesize")}</th>
+                                <th class="collapsing">${applocale.getString("view/details/modTime", "Last Modification")}</th>
+                                <th>${applocale.getString("view/details/shared", "Shared")}</th>
+                            </tr>
+                        </thead>
+                        <tbody class="fileDetailList detailTableContent">
+                            
+                        </tbody>
+                    </table>`);
                 }else if (viewMode == "grid"){
-                    $("#fileList").attr("class",`${currentTheme}`).css("vertical-align","top");
-                    $("#folderList").attr("class",`${currentTheme}`).css("vertical-align","top");
+                  
                 }
             
                 var files = [];
@@ -1097,12 +1122,13 @@
                     var filesize = folders[i].Filesize;
                     var Displaysize = folders[i].Displaysize;
                     var isShared = folders[i].IsShared;
+                    var modTime = folders[i].ModTime;
                     var ext = getExtFromPath(filepath);
                     //var icon = ao_module_utils.getIconFromExt(ext);
                     var icon = "folder";
                     var shareicon = "";
                     if (isShared == true){
-                        shareicon = `<button class="sharebtn ${currentTheme}" onclick='handleShareFilebuttonClick(event, this);' style="margin-left: 4px; height: 16px;">
+                        shareicon = `<button class="sharebtn" onclick='handleShareFilebuttonClick(event, this);' style="margin-left: 4px; height: 16px;">
                             <i class='share alternate icon'></i>
                         </button>`
                     }
@@ -1123,7 +1149,7 @@
 
                         }
                        
-                        $("#folderList").append(`<div class="fileObject item ${currentTheme}" draggable="true" ondragstart="onFileObjectDragStart(this,event);" ondrop="dropToFolder(event)" ondragover="allowDrop(event)" fileID="${i}" filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);" type="folder">
+                        $("#folderList").append(`<div class="fileObject item" draggable="true" ondragstart="onFileObjectDragStart(this,event);" ondrop="dropToFolder(event)" ondragover="allowDrop(event)" fileID="${i}" filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);" type="folder">
                             <span style="display:inline-block !important;word-break: break-all;" class="${textclass}">
                                 <i class="${icon} icon" style="margin-right:12px; color:#eab54e;"></i>  ${displayName} ${shareicon}
                             </span></div>`);
@@ -1144,14 +1170,27 @@
                             displayName = displayName.substring(0,16) + "...";
                         }
                         $("#folderList").append(`
-                        <div class="ui card fileObject ${currentTheme}" draggable="true" ondragstart="onFileObjectDragStart(this,event);" ondrop="dropToFolder(event)" ondragover="allowDrop(event)" fileID="${i}" filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);" type="folder" style="width:${gridSize}px; display:inline-block !important;vertical-align:top; height:15em; margin-top:0px !important; overflow:hidden;">
+                        <div class="fileObject card" draggable="true" ondragstart="onFileObjectDragStart(this,event);" ondrop="dropToFolder(event)" ondragover="allowDrop(event)" fileID="${i}" filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);" type="folder" style="width:${gridSize}px; display:inline-block !important;vertical-align:top; height:15em; margin-top:0px !important; overflow:hidden;">
                             <div class="image" style="text-align: center;">
                                 <img draggable="true"ondragstart="disableDrag(event);" src="../../img/desktop/files_icon/${filesIconTheme}/folder.png" style="height: 148px; width: 148px; display: inline-block;">
                             </div>
                             <div class="content" style="font-size: 12px;">
-                                <div class="header ${currentTheme} ${textclass}" title="${filename}">${displayName} ${shareicon}</div>
+                                <div class="header ${textclass}" title="${filename}">${displayName} ${shareicon}</div>
                             </div>
                         </div>`);
+                    }else if (viewMode == "details"){
+                        let isSharedIcon = '<i class="ui grey remove icon" style="margin-left: 8px;"></i>';
+                        if (isShared){
+                            isSharedIcon = shareicon;
+                        }
+
+                        //Convert the unix timestamp to datetime
+                        var date = new Date(modTime * 1000);
+                        $("#folderList").find(".folderDetailList").append(`<tr class="fileObject details" draggable="true" ondragstart="onFileObjectDragStart(this,event);" ondrop="dropToFolder(event)" ondragover="allowDrop(event)" fileID="${i}" filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);" type="folder">
+                            <td><i class="${icon} icon" style="margin-right:12px; color:#eab54e;"></i>  ${filename}</td>
+                            <td class="light-text">${date.toLocaleDateString("default") + " " + date.toLocaleTimeString("default")}</td>
+                            <td>${isSharedIcon}</td>
+                        </tr>`);
                     }
                 }
 
@@ -1160,6 +1199,7 @@
                 }else{
                     $("#folderList").show();
                 }
+
             
                 //List all files
                 var fl = folders.length;
@@ -1170,7 +1210,9 @@
                     var filesize = files[i].Filesize;
                     var Displaysize = files[i].Displaysize;
                     var isShared = files[i].IsShared;
+                    var modTime = files[i].ModTime;
                     var ext = getExtFromPath(filepath);
+                    
                     var icon = "file outline";
                     if (ext == ""){
                         icon = "file outline";
@@ -1189,7 +1231,7 @@
 
                     var shareicon = "";
                     if (isShared){
-                        shareicon = `<button class="sharebtn ${currentTheme}" onclick='handleShareFilebuttonClick(event, this);' style="margin-left: 4px; height: 16px;">
+                        shareicon = `<button class="sharebtn" onclick='handleShareFilebuttonClick(event, this);' style="margin-left: 4px; height: 16px;">
                             <i class='share alternate icon'></i>
                         </button>`
                     }
@@ -1202,9 +1244,6 @@
                     if (viewMode == "list"){
                         var displayName = filename;
                         var textclass = "normal object";
-                        if (currentTheme == "darkTheme"){
-                            textclass += " darkTheme";
-                        }
 
                         if (ext == "shortcut"){
                             //This is a shortcut file
@@ -1231,7 +1270,7 @@
                             }
                             filename = ao_module_codec.decodeUmFilename(filename);
                         }
-                        $("#fileList").append(`<div class="fileObject item ${currentTheme}" draggable="true" ondragstart="onFileObjectDragStart(this,event);"  fileID="${fl + i}"  filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);"  type="${fileType}" filesize="${filesize}" displaysize="${Displaysize}">
+                        $("#fileList").append(`<div class="fileObject item" draggable="true" ondragstart="onFileObjectDragStart(this,event);"  fileID="${fl + i}"  filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);"  type="${fileType}" filesize="${filesize}" displaysize="${Displaysize}">
                             <span style="display:inline-block !important;word-break: break-all;text-overflow: ellipsis !important;overflow: hidden;" class="${textclass}">
                                 <i class="${icon} icon" style="margin-right:12px;"></i>  
                                 ${displayName}  ${shareicon}
@@ -1273,21 +1312,53 @@
                        
                         
                         $("#fileList").append(`
-                        <div class="ui card fileObject ${currentTheme}" draggable="true" ondragstart="onFileObjectDragStart(this,event);" fileID="${fl + i}" filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);" type="${fileType}" style="width:${gridSize}px; display:inline-block !important;vertical-align:top; height:20em;  margin-top:0px !important;  overflow:hidden;">
+                        <div class="fileObject card" draggable="true" ondragstart="onFileObjectDragStart(this,event);" fileID="${fl + i}" filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);" type="${fileType}" style="width:${gridSize}px; display:inline-block !important;vertical-align:top; height:20em;  margin-top:0px !important;  overflow:hidden;">
                             <div class="image" style="text-align: center !important;">
                                 <img draggable="true"ondragstart="disableDrag(event);" style="height: 148px; width: 148px; display:inline-block;" src="${imagePath}">
                             </div>
                             <div class="content">
-                                <div class="header ${currentTheme} ${textclass}" title="${filename}" style="text-overflow: ellipsis; font-size: 100%">${displayName} ${shareicon}</div>
-                                <div class="meta ${currentTheme}">
+                                <div class="header ${textclass}" title="${filename}" style="text-overflow: ellipsis; font-size: 100%">${displayName} ${shareicon}</div>
+                                <div class="meta">
                                     <div>${ext}</div>
                                 </div>
-                                <div class="description ${currentTheme}">
+                                <div class="description">
                                     ${Displaysize}
                                 </div>
                             </div>
                         </div>
                         `);
+                    }else if (viewMode == "details"){
+                        if (ext == "shortcut"){
+                            //This is a shortcut file
+                            displayName = files[i].Shortcut.Name;
+
+                            //Adjust the icon based on its shortcut ype
+                            switch(files[i].Shortcut.Type){
+                                case "folder":
+                                    icon = "blue folder";
+                                    break;
+                                case "module":
+                                    icon = "blue play circle";
+                                    break;
+                                default: 
+                                    icon = "blue external";
+                            }
+                        }
+
+                        let isSharedIcon = '<i class="ui grey remove icon" style="margin-left: 8px;"></i>';
+                        if (isShared){
+                            isSharedIcon = shareicon;
+                        }
+
+                        var date = new Date(modTime * 1000);
+
+                        $("#fileList").find(".fileDetailList").append(`<tr class="fileObject details" draggable="true" ondragstart="onFileObjectDragStart(this,event);" ondrop="dropToFolder(event)" ondragover="allowDrop(event)" fileID="${i}" filename="${filename}" filepath="${filepath}" ondblclick="openthis(this,event);" type="folder">
+                            <td><i class="${icon} icon" style="margin-right:12px;"></i>  ${filename}</td>
+                            <td class="light-text">${ext}</td>
+                            <td class="light-text">${Displaysize} <br>(${filesize} bytes)</td>
+                            <td class="light-text">${date.toLocaleDateString("default") + " " + date.toLocaleTimeString("default")}</td>
+                            <td>${isSharedIcon}</td>
+                        </tr>`);
                     }
                 }
                 if (files.length == 0){
@@ -1305,8 +1376,15 @@
                     enableAutoRefresh = true;
                 });
 
-                //If viewmode is grid, load file thumbnails
-                if (viewMode == "grid"){
+                //Finish up the rendering
+                if (viewMode == "list"){
+
+                }else if (viewMode == "details"){
+                    //Load the statistic of the folder details
+                    $("#folderList").find(".foldercounter").text(folders.length);
+                    $("#fileList").find(".filecounter").text(files.length);
+                }else if (viewMode == "grid"){
+                    //If viewmode is grid, load file thumbnails
                     startThumbnailLoader();
                 }
 
@@ -1793,6 +1871,7 @@
             function showEditCurrentPathInput(e){
                 e.preventDefault();
                 $("#pathInputField").find("input").val(currentPath);
+                $("#editPathBtn").hide();
                 if (isMobile){
                     $("#mobilePathDisplay").hide();
                     $(".mobilePathDisplayWrapper").append($("#pathInputField"));
@@ -1817,6 +1896,9 @@
                 newPath = newPath.split("\\").join("/");
                 listDirectory(newPath);
                 hideManualOpenPathInput();
+
+                //Restore the edit btn
+                $("#editPathBtn").show();
             }
 
             function hideManualOpenPathInput(){
@@ -2340,7 +2422,7 @@
                         var ext = thisfilename.split(".").pop();
                         var icon = ao_module_utils.getIconFromExt(ext);
                         deletePendingList.push(thispath);
-                        $(listObject).append(`<div class="item ${currentTheme}" ><span style="display:inline-block;">${thisfilename}</span></div>`);
+                        $(listObject).append(`<div class="item" ><span style="display:inline-block;">${thisfilename}</span></div>`);
                     });
                     showPopupWrapper();
                     $("#forceDeleteConfirmBox").fadeIn(100);
@@ -2380,7 +2462,7 @@
                         var thisfilename = $(this).attr('filename');
                         var thisFilepath = $(this).attr('filepath');
                         deleteFileList.push(thisFilepath);
-                        $("#deleteConfirmBox").find(".deleteFilelist").append(`<div class="item ${currentTheme}" ><span style="display:inline-block;">${thisfilename}</span></div>`);
+                        $("#deleteConfirmBox").find(".deleteFilelist").append(`<div class="item" ><span style="display:inline-block;">${thisfilename}</span></div>`);
                     });
                     if (deleteFileList.length == 0){
                         //No files selected
@@ -2490,23 +2572,23 @@
                 var l = pathInfo.length;
                 //Append the starting vdir
                 $(".pathDisplay").html("");
-                $(".pathDisplay").append(`<div class="section ${currentTheme} selectable" onclick="rootDir();"><i class="folder icon"></i> ${vdID}</div>`);
-                $(".pathDisplay").append(`<div class="divider ${currentTheme} whiteTheme">/</div>`);
+                $(".pathDisplay").append(`<div class="section selectable" onclick="rootDir();"><i class="folder icon"></i> ${vdID}</div>`);
+                $(".pathDisplay").append(`<div class="divider whiteTheme">/</div>`);
                 //console.log(pathInfo);
                 if (l > 3){
                     //E.g. user:/Desktop/test/boo/ => Display as user:/.../test/boo/
-                    $(".pathDisplay").append(`<div class="section ${currentTheme}">...</div>`);
-                    $(".pathDisplay").append(`<div class="divider ${currentTheme} whiteTheme">/</div>`);
-                    $(".pathDisplay").append(`<div class="section ${currentTheme} selectable"  onclick="parentDir();">${shortenLongFoldername(pathInfo[l-2], 40)}</div>`);
-                    $(".pathDisplay").append(`<div class="divider ${currentTheme} whiteTheme">/</div>`);
-                    $(".pathDisplay").append(`<div class="section ${currentTheme} selectable" onclick="refreshList();">${shortenLongFoldername(pathInfo[l-1], 60)}</div>`);
+                    $(".pathDisplay").append(`<div class="section">...</div>`);
+                    $(".pathDisplay").append(`<div class="divider whiteTheme">/</div>`);
+                    $(".pathDisplay").append(`<div class="section selectable"  onclick="parentDir();">${shortenLongFoldername(pathInfo[l-2], 40)}</div>`);
+                    $(".pathDisplay").append(`<div class="divider whiteTheme">/</div>`);
+                    $(".pathDisplay").append(`<div class="section selectable" onclick="refreshList();">${shortenLongFoldername(pathInfo[l-1], 60)}</div>`);
                 }else if (l == 3){
-                    $(".pathDisplay").append(`<div class="section ${currentTheme} selectable"  onclick="parentDir();">${shortenLongFoldername(pathInfo[l-2], 40)}</div>`);
-                    $(".pathDisplay").append(`<div class="divider ${currentTheme} whiteTheme">/</div>`);
-                    $(".pathDisplay").append(`<div class="section ${currentTheme} selectable" onclick="refreshList();">${shortenLongFoldername(pathInfo[l-1], 60)}</div>`);
+                    $(".pathDisplay").append(`<div class="section selectable"  onclick="parentDir();">${shortenLongFoldername(pathInfo[l-2], 40)}</div>`);
+                    $(".pathDisplay").append(`<div class="divider whiteTheme">/</div>`);
+                    $(".pathDisplay").append(`<div class="section selectable" onclick="refreshList();">${shortenLongFoldername(pathInfo[l-1], 60)}</div>`);
                 }else if (l == 2){
                     //E.g. user:/Desktop or user:/
-                    $(".pathDisplay").append(`<div class="section ${currentTheme} selectable" onclick="refreshList();">${shortenLongFoldername(pathInfo[1], 80)}</div>`);
+                    $(".pathDisplay").append(`<div class="section selectable" onclick="refreshList();">${shortenLongFoldername(pathInfo[1], 80)}</div>`);
                 }
 
                 //Update the manual input field as well
@@ -3230,13 +3312,6 @@
             }
 
             // ============================== WINDOW RESIZE FUNCTIONS =====================
-            $(document).ready(function(data){
-                if (window.innerWidth < 620 && !isMobile){
-                    toggleSidebar(false);
-                }
-                initWindowSizes(false);
-            });
-
             $(window).on("resize",function(){
                 initWindowSizes(false);
                 if (!isMobile && window.innerWidth < 620 && sideBarShown == true){
@@ -3261,6 +3336,8 @@
                     $(object).parent().parent().addClass("selected");
                 }else if (viewMode == "grid"){
                     $(object).parent().parent().parent().addClass("selected");
+                }else if (viewMode == "details"){
+                    $(object).parent().parent().addClass("selected");
                 }
                
                 shareFile();
@@ -3281,7 +3358,10 @@
 
                 });
 
-                if (selectedFiles.length != 1){
+                if (selectedFiles.length == 0){
+                    console.log("No file is selected for sharing");
+                    return;
+                }else if (selectedFiles > 1){
                     //Try to share more than 1 files, which is not supported
                     console.log("Multi share is current not supported");
                     return
@@ -3504,8 +3584,6 @@
                     if (ao_module_virtualDesktop){
                         parent.initTheme("whiteTheme");
                     }
-
-                    $(".rightPad").css("margin-right", "37px");
                     
                 }else{
                     //Set to DarkTheme
@@ -4532,10 +4610,10 @@
 
             //Clear current folderlist
             $("#folderList").show();
-            $("#folderList").html(`<div class="ui basic segment ${currentTheme}">
+            $("#folderList").html(`<div class="ui basic segment">
                 <div class="ui header">
-                    <i class="arrow up icon ${currentTheme}"></i> <span class="${currentTheme}">${applocale.getString("func/search/typeToStart", "Type to Start Search")}</span>
-                    <div class="sub header ${currentTheme}" style="margin-top:12px;">${applocale.getString("func/search/tip1", "Type something in the search bar to start searching.")}<br>
+                    <i class="arrow up icon"></i> <span>${applocale.getString("func/search/typeToStart", "Type to Start Search")}</span>
+                    <div class="sub header" style="margin-top:12px;">${applocale.getString("func/search/tip1", "Type something in the search bar to start searching.")}<br>
                         ${applocale.getString("func/search/tip2", `Start wildcard matching with "/" (slash) and your wildcard string (e.g. /*.mp3)`)}</div>
                 </div>
             </div>`);
@@ -4610,8 +4688,8 @@
 
         function handleSearch(){
             var keyword = $("#searchInput").val();
-            $("#folderList").html(`<div class="ui basic segment ${currentTheme}">
-                <i class="loading spinner icon ${currentTheme}"></i> <span class="${currentTheme}">Searching</span>
+            $("#folderList").html(`<div class="ui basic segment">
+                <i class="loading spinner icon"></i> <span>Searching</span>
             </div>`);
             $("#fileList").hide();
             $("#fileList").html("");
@@ -4628,10 +4706,10 @@
                         console.log(data);
                         if (data.length == 0){
                             $("#folderList").show();
-                            $("#folderList").html(`<div class="ui basic segment ${currentTheme}">
-                                <div class="ui header ${currentTheme}">
-                                    <i class="question icon" ${currentTheme}></i> <span class="${currentTheme}">${applocale.getString("message/noMatchResults","No Matching Results")}</span>
-                                    <div class="sub header ${currentTheme}">${applocale.getString("message/noMatchResultsDesc","The host return no matching results for your keyword")} "${keyword}". <br>${applocale.getString("message/noMatchResultsInst","Check your spelling and your wildcard characters.")}</div>
+                            $("#folderList").html(`<div class="ui basic segment">
+                                <div class="ui header">
+                                    <i class="question icon"></i> <span>${applocale.getString("message/noMatchResults","No Matching Results")}</span>
+                                    <div class="sub header">${applocale.getString("message/noMatchResultsDesc","The host return no matching results for your keyword")} "${keyword}". <br>${applocale.getString("message/noMatchResultsInst","Check your spelling and your wildcard characters.")}</div>
                                 </div>
                             </div>`);
                         }else{

文件差异内容过多而无法显示
+ 3 - 3
web/SystemAO/file_system/img/opr/paste.ai


+ 1 - 1
web/SystemAO/file_system/img/opr/paste.svg

@@ -88,7 +88,7 @@ zHGPesxxj3rMGRxbpkdwyNZ2ETXOaR/8D//Z" transform="matrix(0.459 0 0 0.459 5.25 4.5
 <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"/>
+<rect x="41.492" y="18.085" fill="#DCDDDD" 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 

+ 8 - 0
web/SystemAO/locale/file_explorer.json

@@ -44,6 +44,14 @@
                 "fileopr/Case Sensitive": "區分大小寫",
                 "fileopr/Clear Search": "清除搜尋結果",
 
+                "view/details/folders": " 個資料夾",
+                "view/details/files": " 個檔案",
+                "view/details/ext": " 副檔名",
+                "view/details/modTime": " 上次儲存日期",
+                "view/details/shared": " 已分享",
+                "view/details/size": " 大小",
+
+
                 "sidebar/vroot/user": "使用者",
                 "sidebar/vroot/fsh": "虛擬儲存裝置",
 

部分文件因为文件数量过多而无法显示