file_explorer.html 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>File Manager</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
  7. <link rel="stylesheet" href="../../script/semantic/semantic.min.css">
  8. <link rel="icon" type="image/png" href="./img/small_icon.png">
  9. <link rel="manifest" crossorigin="use-credentials" href="manifest.json">
  10. <script type="text/javascript" src="../../script/jquery.min.js"></script>
  11. <script type="text/javascript" src="../../script/semantic/semantic.min.js"></script>
  12. <script type="text/javascript" src="../../script/ao_module.js"></script>
  13. <script type="text/javascript" src="../../script/applocale.js"></script>
  14. <script type="text/javascript" src="../../script/chunkupload.js"></script>
  15. <link rel="stylesheet" href="../../script/ao.css">
  16. <!-- Design tokens and components shared with the File Selector. Loaded
  17. before file_explorer.css so app rules can override them. -->
  18. <link rel="stylesheet" href="shared/fs-theme.css">
  19. <link rel="stylesheet" href="shared/fs-components.css">
  20. <link rel="stylesheet" href="file_explorer.css">
  21. <script>
  22. window.mobilecheck = function() {
  23. var check = false;
  24. (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
  25. return check;
  26. };
  27. </script>
  28. </head>
  29. <body class="whiteTheme">
  30. <div id="navibar" class="navibar">
  31. <!--
  32. Classic file operation toolbar. Kept for users who prefer it and
  33. shown by default; the preference lives server side under
  34. file_explorer/oprbar so it follows the user between browsers.
  35. Ignored on mobile, where the layout is different anyway.
  36. -->
  37. <div id="fileOprBar" class="fileOprBar">
  38. <button class="fileOprBtn" title="Open" onclick="openViaButton();" data-opr="open"><img class="opricon" src="img/opr/open.svg"><p class="oprtxt" locale="fileopr/Open">Open</p></button>
  39. <button class="fileOprBtn" title="Copy" onclick="copy();" data-opr="copy"><img class="opricon" src="img/opr/copy.svg"><p class="oprtxt" locale="fileopr/Copy">Copy</p></button>
  40. <button class="fileOprBtn" title="Paste" onclick="paste();" data-opr="paste"><img class="opricon" src="img/opr/paste.svg"><p class="oprtxt" locale="fileopr/Paste">Paste</p></button>
  41. <div class="fileoprGroupDivider">
  42. <button class="fileoprSmallBtn" title="Open with" onclick="openWith();" data-opr="openwith"><i class="external icon"></i> <span locale="fileopr/Open with">Open With</span></button><br>
  43. <button class="fileoprSmallBtn" title="Cut" onclick="cut();" data-opr="cut"><i class="blue cut icon"></i> <span locale="fileopr/Cut">Cut</span></button><br>
  44. <button class="fileoprSmallBtn" title="Rename" onclick="rename();" data-opr="rename"><i class="teal i cursor icon"></i> <span locale="fileopr/Rename">Rename</span></button>
  45. </div>
  46. <button class="fileOprBtn" title="Upload" onclick="upload(); exitMultiSelectMode();" data-opr="upload"><img class="opricon" src="img/opr/upload.svg"><p class="oprtxt" locale="fileopr/Upload">Upload</p></button>
  47. <button class="fileOprBtn" title="Download" onclick="downloadFile(); exitMultiSelectMode();" data-opr="download"><img class="opricon" src="img/opr/download.svg"><p class="oprtxt" locale="fileopr/Download">Download</p></button>
  48. <div class="fileoprGroupDivider"></div>
  49. <button class="twolines fileOprBtn" title="New Folder" onclick="newFolder(); exitMultiSelectMode();" data-opr="newfolder"><img class="opricon" src="img/opr/new_folder.svg"><p class="oprtxt" locale="fileopr/New Folder">New<br>Folder</p></button>
  50. <div class="fileoprGroupDivider">
  51. <button class="fileoprSmallBtn" title="New File" onclick="newfile();" data-opr="newfile"><i class="file outline icon"></i> <span locale="fileopr/New File">New File</span></button><br>
  52. <button class="fileoprSmallBtn" title="Create Zip" onclick="zipFile();" data-opr="zip"><i class="brown zip file icon"></i> <span locale="fileopr/Create Zip">Create Zip</span></button><br>
  53. <button class="fileoprSmallBtn" title="Unzip Here" onclick="unzipHere();" data-opr="unzip"><i class="inbox icon"></i> <span locale="fileopr/Unzip Here">Unzip Here</span></button><br>
  54. </div>
  55. <div class="fileoprGroupDivider">
  56. <button class="fileoprSmallBtn" title="Refresh" onclick="refreshList();" data-opr="refresh"><i class="green refresh icon"></i> <span locale="fileopr/Refresh">Refresh</span></button><br>
  57. <button class="fileoprSmallBtn" title="Home" onclick="openHomeDir();" data-opr="home"><i class="home icon"></i> <span locale="fileopr/Home">Home</span></button><br>
  58. <button class="fileoprSmallBtn" title="File Info" onclick="showFileProperties();" data-opr="fileinfo"><i class="blue info circle icon"></i> <span locale="fileopr/File Info">File Info</span></button><br>
  59. </div>
  60. <button class="fileOprBtn" title="Delete" onclick="deleteFile();" data-opr="delete"><img class="opricon" src="img/opr/delete.svg"><p class="oprtxt" locale="fileopr/Delete">Delete</p></button>
  61. <button class="fileOprBtn" title="Share File" onclick="shareFile();" data-opr="share"><img class="opricon" src="img/opr/share.svg"><p class="oprtxt" locale="fileopr/Share">Share</p></button>
  62. </div>
  63. <div class="fmNav">
  64. <div class="fmNavBtns">
  65. <button id="sidebarToggleBtn" class="fsIconBtn" title="Toggle Folder List" onclick="toggleSidebar();"><span data-fsicon="menu"></span></button>
  66. <button id="backbtn" class="fsIconBtn" title="Back" onclick="previosPath();"><span data-fsicon="back"></span></button>
  67. <button id="fwdbtn" class="fsIconBtn" title="Forward" onclick="forwardPath();"><span data-fsicon="forward"></span></button>
  68. <button id="ppbtn" class="fsIconBtn" title="Parent Folder" onclick="parentDir();"><span data-fsicon="up"></span></button>
  69. <button id="refreshbtn" class="fsIconBtn" title="Refresh" onclick="refreshList();"><span data-fsicon="refresh"></span></button>
  70. </div>
  71. <!-- Breadcrumb. Clicking the empty area switches it to a text field. -->
  72. <!-- Sort menu. Same shell as the overflow menu; the active mode
  73. carries the tick in the icon column on the left. -->
  74. <div class="fsMenu fmSortMenu" id="fmSortMenu">
  75. <div class="fsMenuHeader" locale="menu/sort/title">Sort items by</div>
  76. <div class="fsMenuItem fmSortOption" data-sort="default" onclick="setSortMode('default');"><span class="fsMenuIcon fmSortCheck" data-fsicon="check"></span><span locale="menu/sort/asc">Name (A to Z)</span></div>
  77. <div class="fsMenuItem fmSortOption" data-sort="reverse" onclick="setSortMode('reverse');"><span class="fsMenuIcon fmSortCheck" data-fsicon="check"></span><span locale="menu/sort/desc">Name (Z to A)</span></div>
  78. <div class="fsMenuItem fmSortOption" data-sort="smallToLarge" onclick="setSortMode('smallToLarge');"><span class="fsMenuIcon fmSortCheck" data-fsicon="check"></span><span locale="menu/sort/small">Size (Smallest)</span></div>
  79. <div class="fsMenuItem fmSortOption" data-sort="largeToSmall" onclick="setSortMode('largeToSmall');"><span class="fsMenuIcon fmSortCheck" data-fsicon="check"></span><span locale="menu/sort/large">Size (Largest)</span></div>
  80. <div class="fsMenuItem fmSortOption" data-sort="mostRecent" onclick="setSortMode('mostRecent');"><span class="fsMenuIcon fmSortCheck" data-fsicon="check"></span><span locale="menu/sort/mostrecent">Date (Newest)</span></div>
  81. <div class="fsMenuItem fmSortOption" data-sort="leastRecent" onclick="setSortMode('leastRecent');"><span class="fsMenuIcon fmSortCheck" data-fsicon="check"></span><span locale="menu/sort/leastrecent">Date (Oldest)</span></div>
  82. <div class="fsMenuItem fmSortOption" data-sort="fileTypeAsce" onclick="setSortMode('fileTypeAsce');"><span class="fsMenuIcon fmSortCheck" data-fsicon="check"></span><span locale="menu/sort/typeAsc">Type (A to Z)</span></div>
  83. <div class="fsMenuItem fmSortOption" data-sort="fileTypeDesc" onclick="setSortMode('fileTypeDesc');"><span class="fsMenuIcon fmSortCheck" data-fsicon="check"></span><span locale="menu/sort/typeDes">Type (Z to A)</span></div>
  84. <div class="fsMenuItem fmSortOption" data-sort="smart" onclick="setSortMode('smart');"><span class="fsMenuIcon fmSortCheck" data-fsicon="check"></span><span locale="menu/sort/smart">Smart</span></div>
  85. </div>
  86. <div class="fsPill fmPathbar" id="fmPathbar" onclick="showEditCurrentPathInput(event);">
  87. <button class="fmPathHome" title="Home" onclick="event.stopPropagation(); openHomeDir();"><span data-fsicon="home"></span></button>
  88. <div id="pathDisplayField" class="ui breadcrumb addressText pathDisplay">
  89. <div class="section selectable">user</div>
  90. <div class="divider">:/</div>
  91. <div class="section selectable">Desktop</div>
  92. </div>
  93. <div id="pathInputField" class="fmPathInput" style="display:none;">
  94. <input type="text" placeholder="Type a path and press enter" onkeydown="handleOpenPathKeydown(event);">
  95. <button class="fsIconBtn" title="Open" onclick="event.stopPropagation(); openEnteredPath(this);"><span data-fsicon="check"></span></button>
  96. </div>
  97. </div>
  98. <div class="fsPill fmSearch">
  99. <input autocomplete="off" id="searchInput" type="text" placeholder="Search" onkeydown="handleSearchFromPill(event);">
  100. <button class="fmCaseBtn" title="Case Sensitive" onclick="toggleCaseSensitive(this);">Aa</button>
  101. <span class="fmSearchIcon" data-fsicon="search"></span>
  102. </div>
  103. <!-- <div class="fsViewToggle fmViewToggle">
  104. <button class="videmode" mode="grid" title="Block View" onclick="changeViewMode(this);"><span data-fsicon="viewGrid"></span></button>
  105. <button class="videmode" mode="list" title="List View" onclick="changeViewMode(this);"><span data-fsicon="viewList"></span></button>
  106. <button class="videmode" mode="details" title="Detail View" onclick="changeViewMode(this);"><span data-fsicon="viewDetails"></span></button>
  107. </div>-->
  108. <button id="fmSortBtn" class="fsMoreBtn" title="Sort" onclick="toggleSortMenu(event);"><span data-fsicon="sort"></span></button>
  109. <button id="fmMoreBtn" class="fsMoreBtn" title="More Options" onclick="toggleFileOprMenu(event);"><span data-fsicon="more"></span></button>
  110. <!--
  111. Everything the old icon strip used to hold. The context menu
  112. covers per-item actions; this covers the rest.
  113. -->
  114. <div class="fsMenu fmMoreMenu" id="fmMoreMenu">
  115. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(openViaButton);" data-opr="open"><span class="fsMenuIcon" data-fsicon="open"></span><span locale="fileopr/Open">Open</span></div>
  116. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(openWith);" data-opr="openwith"><span class="fsMenuIcon" data-fsicon="openWith"></span><span locale="fileopr/Open with">Open With</span></div>
  117. <div class="fsMenuSep"></div>
  118. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(copy);" data-opr="copy"><span class="fsMenuIcon" data-fsicon="copy"></span><span locale="fileopr/Copy">Copy</span><span class="fsMenuShortcut">Ctrl + C</span></div>
  119. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(cut);" data-opr="cut"><span class="fsMenuIcon" data-fsicon="cut"></span><span locale="fileopr/Cut">Cut</span><span class="fsMenuShortcut">Ctrl + X</span></div>
  120. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(paste);" data-opr="paste"><span class="fsMenuIcon" data-fsicon="paste"></span><span locale="fileopr/Paste">Paste</span><span class="fsMenuShortcut">Ctrl + V</span></div>
  121. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(rename);" data-opr="rename"><span class="fsMenuIcon" data-fsicon="rename"></span><span locale="fileopr/Rename">Rename</span></div>
  122. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(deleteFile);" data-opr="delete"><span class="fsMenuIcon" data-fsicon="trash"></span><span locale="fileopr/Delete">Delete</span><span class="fsMenuShortcut">Del</span></div>
  123. <div class="fsMenuSep"></div>
  124. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(upload);" data-opr="upload"><span class="fsMenuIcon" data-fsicon="upload"></span><span locale="fileopr/Upload">Upload</span></div>
  125. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(downloadFile);" data-opr="download"><span class="fsMenuIcon" data-fsicon="download"></span><span locale="fileopr/Download">Download</span></div>
  126. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(shareFile);" data-opr="share"><span class="fsMenuIcon" data-fsicon="share"></span><span locale="fileopr/Share">Share</span></div>
  127. <div class="fsMenuSep"></div>
  128. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(newFolder);" data-opr="newfolder"><span class="fsMenuIcon" data-fsicon="newFolder"></span><span locale="fileopr/New Folder">New Folder</span></div>
  129. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(newfile);" data-opr="newfile"><span class="fsMenuIcon" data-fsicon="newFile"></span><span locale="fileopr/New File">New File</span></div>
  130. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(zipFile);" data-opr="zip"><span class="fsMenuIcon" data-fsicon="zip"></span><span locale="fileopr/Create Zip">Create Zip</span></div>
  131. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(unzipHere);" data-opr="unzip"><span class="fsMenuIcon" data-fsicon="unzip"></span><span locale="fileopr/Unzip Here">Unzip Here</span></div>
  132. <div class="fsMenuSep"></div>
  133. <div class="fsMenuItem fmMobileOnly" id="fmMultiSelectItem" onclick="toggleMobileMultiSelect();"><span class="fsMenuIcon" data-fsicon="selectAll"></span><span locale="fileopr/Multi Select">Multi-select</span><span class="fsMenuCheck" data-fsicon="check"></span></div>
  134. <div class="fsMenuItem" onclick="runFileOpr(selectAll);"><span class="fsMenuIcon" data-fsicon="selectAll"></span><span locale="fileopr/Select All">Select All</span><span class="fsMenuShortcut">Ctrl + A</span></div>
  135. <div class="fsMenuItem" onclick="runFileOpr(clearSelection);"><span class="fsMenuIcon" data-fsicon="clearSel"></span><span locale="fileopr/Clear Select">Clear Selection</span></div>
  136. <div class="fsMenuItem fmDupOfToolbar" onclick="runFileOpr(showFileProperties);" data-opr="fileinfo"><span class="fsMenuIcon" data-fsicon="info"></span><span locale="fileopr/File Info">File Info</span></div>
  137. <div class="fsMenuSep"></div>
  138. <div class="fsMenuItem" onclick="runFileOpr(toggleDarkTheme);"><span class="fsMenuIcon" data-fsicon="moon"></span><span locale="fileopr/Dark Theme">Dark Theme</span></div>
  139. <div class="fsMenuSep fmDupSep"></div>
  140. <div class="fsMenuItem" id="fmHiddenToggle" onclick="toggleHiddenFiles();"><span locale="fileopr/Hidden Files">Show Hidden Files</span><span class="fsMenuCheck" data-fsicon="check"></span></div>
  141. <div class="fsMenuItem" id="fmToolbarToggle" onclick="toggleFileOprBar();"><span locale="fileopr/Toolbar">Operation Toolbar</span><span class="fsMenuCheck" data-fsicon="check"></span></div>
  142. </div>
  143. </div>
  144. </div>
  145. <div id="mainWindow">
  146. <div id="directorySidebar">
  147. <div class="fsSideTitle" locale="sidebar/quickaccess">Quick Access</div>
  148. <div id="userroot" class="fmSideGroup"></div>
  149. <div class="fsSideTitle" locale="sidebar/devices">Devices</div>
  150. <div id="storageroot" class="fmSideGroup"></div>
  151. </div>
  152. <!-- Drag handles between the three panes. Desktop only; splitter.js
  153. leaves them hidden on the touch layout. -->
  154. <div class="fmSplitter" id="fmSidebarSplitter" title="Resize"></div>
  155. <div id="folderView" ondrop="drop(event)" ondragover="allowDrop(event)">
  156. <!--
  157. Sortable column header for the details view. It lives outside
  158. #folderList / #fileList because those are hidden individually
  159. when empty, and the header must stay visible either way.
  160. -->
  161. <div id="fmListHeader" style="display:none;"></div>
  162. <div id="folderList" class="fileviewList">
  163. </div>
  164. <div id="fileList" class="fileviewList">
  165. </div>
  166. <br>
  167. </div>
  168. <div class="fmSplitter" id="fmPropsSplitter" title="Resize" style="display:none;"></div>
  169. <div id="propertiesView" class="small" style="display:none;">
  170. <div class="preview" style="margin-top: 0.4em;">
  171. <img class="ui fluid image" >
  172. </div>
  173. <h3 class="ui header" style="margin-top: 0.4em;">
  174. <span class="filename" style="word-break: break-all;" locale="sidebar/default/nofileselected">No File Selected</span>
  175. <div class="sub header vpath" style="word-break: break-all;" locale="sidebar/default/instruction">Select a file to view file properties</div>
  176. </h3>
  177. <table class="ui very basic table">
  178. <tbody class="propertiesTable">
  179. </tbody>
  180. </table>
  181. <div style="height: 34px;">
  182. <div class="ui right floated buttons">
  183. <button style="min-width: 2.5em;" title="Share File" class="ui basic icon button shareBtn" onclick="shareFile();"><i class="share alternate icon"></i></button>
  184. <button style="min-width: 2.5em;" title="Expand Properties Sidebar" class="ui basic icon button sizeToggle" onclick="togglePreviewWindowSize();"><i class="expand icon"></i></button>
  185. </div>
  186. </div>
  187. </div>
  188. </div>
  189. <!-- Status bar: selection summary, tile zoom and view controls -->
  190. <div id="fmStatusBar">
  191. <span id="selectInfo"></span>
  192. <span id="fmSelectionSize"></span>
  193. <div class="fmStatusSpacer"></div>
  194. <div id="fmZoom" title="Thumbnail Size">
  195. <span class="fmZoomIcon" data-fsicon="viewGrid"></span>
  196. <input type="range" id="fmZoomSlider" min="100" max="170" step="10" value="170" oninput="setGridZoom(this.value);">
  197. </div>
  198. <div class="fsViewToggle fmStatusToggle">
  199. <button class="videmode" mode="grid" title="Block View" onclick="changeViewMode(this);"><span data-fsicon="viewGrid"></span></button>
  200. <button class="videmode" mode="list" title="List View" onclick="changeViewMode(this);"><span data-fsicon="viewList"></span></button>
  201. <button class="videmode" mode="details" title="Detail View" onclick="changeViewMode(this);"><span data-fsicon="viewDetails"></span></button>
  202. </div>
  203. <!-- Collapsed form of the transfer panel. Shown only while the list
  204. has tasks; uploadui.js drives its state. -->
  205. <button id="fmUploadListBtn" class="fmStatusBtn" title="Upload List" onclick="toggleUploadPanel();" style="display:none;"><span data-fsicon="cloudUpload"></span></button>
  206. <button id="togglePropertiesViewBtn" class="fmStatusBtn" title="Show Properties" onclick="togglePropertiesView(this);"><span data-fsicon="sidePanel"></span></button>
  207. </div>
  208. <!-- Other popup windows -->
  209. <div class="popupWrapper"></div>
  210. <!-- Overwrite Selection Box-->
  211. <div id="overwriteModeSelection" class="popup" style="display:none;">
  212. <div class="popupheader">
  213. <i class="paste icon"></i> <span locale="opr/overwrite/title">Replace, Keep or Skip Files</span>
  214. <div class="popupcloser" onclick="hideAllPopupWindows();">
  215. <i class="remove icon"></i>
  216. </div>
  217. </div>
  218. <div class="popupcontent">
  219. <small style="font-size:80%;"><span locale="opr/overwrite/copying">Copying</span> <span class="owm-fc"></span> <span locale="opr/overwrite/files">files from</span> <span class="owm-srcdir"></span> <span locale="opr/overwrite/to">to</span> <span class="owm-destdir"></span></small>
  220. <p><span locale="opr/overwrite/dest">The destination has </span><span class="owm-fc"></span> <span locale="opr/overwrite/samename">files with the same names.</span></p>
  221. <div class="popupbuttons allowHover primary" onclick="changeOverwriteRule(0,true);">
  222. <i class="checkmark icon"></i> <span locale="opr/overwrite/replace">Replace the files in the destination</span>
  223. </div>
  224. <div class="popupbuttons allowHover" onclick="changeOverwriteRule(1,true);">
  225. <i class="reply icon"></i> <span locale="opr/overwrite/skip">Skip these files</span>
  226. </div>
  227. <div class="popupbuttons allowHover" onclick="changeOverwriteRule(2,true);">
  228. <i class="undo icon"></i> <span locale="opr/overwrite/keep">Rename and keep the files</span>
  229. </div>
  230. </div>
  231. </div>
  232. <!-- Force delete confirmation box -->
  233. <div id="forceDeleteConfirmBox" class="popup" style="display:none;">
  234. <div class="popupheader">
  235. <i class="trash icon"></i> <span locale="opr/pre-remove/title">Permanently Remove Files</span>
  236. <div class="popupcloser" onclick="hideAllPopupWindows();">
  237. <i class="remove icon"></i>
  238. </div>
  239. </div>
  240. <div class="popupcontent">
  241. <p locale="opr/pre-remove/questions">Are you sure you want to remove these files <u>permanently?</u><br>This action is <u>irreversible</u>.</p>
  242. <div class="ui list deleteFilelist" style="max-height:350px;overflow-y:auto; ">
  243. </div>
  244. <div class="popupbuttons allowHover negative" onclick="forceDelete(true);">
  245. <i class="trash icon"></i> <span locale="opr/pre-remove/confirm">Confirm</span>
  246. </div>
  247. <div class="popupbuttons allowHover" onclick="cancelForceDelete();">
  248. <i class="remove icon"></i> <span locale="opr/pre-remove/cancel">Cancel</span>
  249. </div>
  250. </div>
  251. </div>
  252. <!-- Delete confirm box -->
  253. <div id="deleteConfirmBox" class="popup" style="display:none;">
  254. <div class="popupheader">
  255. <i class="recycle icon"></i> <span locale="opr/remove/title">Move files to Trash Bin</span>
  256. <div class="popupcloser" onclick="hideAllPopupWindows();">
  257. <i class="remove icon"></i>
  258. </div>
  259. </div>
  260. <div class="popupcontent">
  261. <p locale="opr/remove/question">Are you sure you want to move these files to trash bin?</p>
  262. <div class="ui list deleteFilelist" style="max-height:350px;overflow-y:auto; ">
  263. </div>
  264. <div class="popupbuttons allowHover primary" onclick="deleteFile(true);">
  265. <i class="recycle icon"></i> <span locale="opr/remove/confirm">Move to Trash</span>
  266. </div>
  267. <div class="popupbuttons allowHover negative" onclick="hideAllPopupWindows(); forceDelete();">
  268. <i class="trash icon"></i> <span locale="opr/pre-remove/title">Delete Permanently</span>
  269. </div>
  270. <div class="popupbuttons allowHover" onclick="cancelDelete(); ">
  271. <i class="remove icon"></i> <span locale="opr/remove/cancel">Cancel</span>
  272. </div>
  273. </div>
  274. </div>
  275. <!-- Rename tool box -->
  276. <div id="renameBox" class="popup" style="display:none;">
  277. <div class="popupheader">
  278. <i class="text cursor icon"></i> <span locale="opr/rename/title">Rename Files</span>
  279. <div class="popupcloser" onclick="hideAllPopupWindows();">
  280. <i class="remove icon"></i>
  281. </div>
  282. </div>
  283. <div class="popupcontent">
  284. <p locale="opr/rename/instruction">Enter the new filename for renaming. </p>
  285. <p class="multifileWarning"><i class="notice icon"></i> Other files will be named as file(#)</p>
  286. <div class="ui left icon small fluid input" style="margin-bottom:12px;">
  287. <input type="text" class="orgfn" placeholder="Original Filename" readonly="true">
  288. <i class="minus square icon" style="color:rgb(122, 176, 247)"></i>
  289. </div>
  290. <div class="ui left icon small fluid input" style="margin-bottom:12px;">
  291. <input type="text" class="newfn" placeholder="New Filename" onkeydown="handleEnterKeyDown(event, function(){confirmRename(true);})">
  292. <i class="add square icon" style="color:rgb(122, 176, 247)"></i>
  293. </div>
  294. <div class="popupbuttons allowHover primary" onclick="confirmRename(true);";>
  295. <i class="checkmark icon"></i> <span locale="opr/rename/ok">OK</span>
  296. </div>
  297. <div class="popupbuttons allowHover" onclick="hideAllPopupWindows();">
  298. <i class="remove icon"></i> <span locale="opr/rename/cancel">Cancel</span>
  299. </div>
  300. </div>
  301. </div>
  302. <!-- New File Dialog-->
  303. <div id="newFile" class="popup" style="display:none;">
  304. <div class="popupheader">
  305. <i class="add icon"></i> <span locale="opr/newfile/title">New File</span>
  306. <div class="popupcloser" onclick="hideAllPopupWindows();">
  307. <i class="remove icon"></i>
  308. </div>
  309. </div>
  310. <div class="popupcontent">
  311. <p locale="opr/newfile/instruction">Select a type of file to be created.</p>
  312. <div class="newfilelist" style="max-height:18em; overflow-y:scroll">
  313. <div class="item newFileFormat" ext="php">No Item</div>
  314. </div>
  315. <p locale="opr/newfile/newempty">Or create an empty file with given filename:</p>
  316. <div class="ui left icon small fluid input" style="margin-bottom:12px;">
  317. <input id="createNewFileName" type="text" placeholder="New Filename" onkeydown="handleEnterKeyDown(event, confirmNewFile);">
  318. <i class="add square icon" style="color:rgb(122, 176, 247)"></i>
  319. </div>
  320. <p class="duplicateWarning" style="color:#CE5F58; display:none;"><i class="caution sign icon"></i> The given filename already exist.</p>
  321. <div class="popupbuttons allowHover primary" onclick="confirmNewFile();";>
  322. <i class="add icon"></i> <span locale="opr/newfile/create">Create</span>
  323. </div>
  324. <div class="popupbuttons allowHover" onclick="hideAllPopupWindows();">
  325. <i class="remove icon"></i> <span locale="opr/newfile/cancel">Cancel</span>
  326. </div>
  327. </div>
  328. </div>
  329. <!-- New Folder Dialog-->
  330. <div id="newFolder" class="popup" style="display:none;">
  331. <div class="popupheader">
  332. <i class="folder icon"></i> <span locale="opr/newfolder/title">New Folder</span>
  333. <div class="popupcloser" onclick="hideAllPopupWindows();">
  334. <i class="remove icon"></i>
  335. </div>
  336. </div>
  337. <div class="popupcontent">
  338. <p locale="opr/newfolder/desc">Enter the new folder name to be created.</p>
  339. <div class="ui left icon small fluid input" style="margin-bottom:12px;">
  340. <input id="createNewFolder" type="text" placeholder="New Folder Name" onkeydown="handleEnterKeyDown(event, function(){newFolder(true);});">
  341. <i class="add square icon" style="color:rgb(122, 176, 247)"></i>
  342. </div>
  343. <p class="duplicateWarning" style="color:#CE5F58; display:none;"><i class="caution sign icon"></i> <span locale="opr/newfolder/alreadyExists">The given folder already exist.</span></p>
  344. <div class="popupbuttons allowHover primary" onclick="newFolder(true);";>
  345. <i class="add icon"></i> <span locale="opr/newfolder/create">Create</span>
  346. </div>
  347. <div class="popupbuttons allowHover" onclick="hideAllPopupWindows();">
  348. <i class="remove icon"></i> <span locale="opr/newfolder/cancel">Cancel</span>
  349. </div>
  350. </div>
  351. </div>
  352. <!-- Share File Dialog-->
  353. <div id="shareFile" class="popup" style="display:none;">
  354. <div class="popupheader">
  355. <i class="external icon"></i> <span locale="opr/share/title">Share File</span>
  356. <div class="popupcloser" onclick="hideShare();">
  357. <i class="remove icon"></i>
  358. </div>
  359. </div>
  360. <div>
  361. <iframe id="shareFileEmbedded" style="border: 0px solid transparent; width: 100%; height: 70vh;" allowtransparency="true">
  362. </iframe>
  363. </div>
  364. <div style="padding:12px;">
  365. <div class="ui divider"></div>
  366. <div id="sharingRemoveBtn" class="popupbuttons negative allowHover" onclick="removeSharing()">
  367. <i class="remove icon"></i> <span locale="opr/share/remove">Remove Sharing</span>
  368. </div>
  369. <div class="popupbuttons allowHover" onclick="hideShare();">
  370. <i class="checkmark icon"></i> <span locale="opr/share/ok">OK</span>
  371. </div>
  372. </div>
  373. </div>
  374. <!-- Open With Dialog-->
  375. <div id="openWith" class="popup" style="display:none;">
  376. <div class="popupheader">
  377. <i class="external icon"></i> <span locale="opr/openwith/title">Open File With</span>
  378. <div class="popupcloser desktopOnly" onclick="hideAllPopupWindows();">
  379. <i class="remove icon"></i>
  380. </div>
  381. </div>
  382. <div class="popupcontent">
  383. <p locale="opr/openwith/desc">Select a module from the list below:</p>
  384. <div id="openWithModuleList">
  385. <div class="openWithSectionLabel" id="openWithSuggestedLabel" locale="opr/openwith/suggested">Suggested WebApps</div>
  386. <div id="openWithSuggestedList">
  387. <div class="item">
  388. <div class="content">
  389. <div class="header" locale="opr/openwith/loading">Loading...</div>
  390. </div>
  391. </div>
  392. </div>
  393. <div class="openWithToggleRow" id="openWithToggleRow" style="display:none;" onclick="toggleOpenWithOtherModules();">
  394. <i class="caret right icon" id="openWithToggleIcon"></i>
  395. <span id="openWithToggleLabel" locale="opr/openwith/showAll">Other WebApps...</span>
  396. </div>
  397. <div id="openWithOtherList" style="display:none;"></div>
  398. </div>
  399. <div class="openWithModule popupbuttons allowHover primary" onclick="openWithSelectedModule(this);";>
  400. <i class="external icon"></i> <span locale="opr/openwith/openWithWebApp">Open with Selected Module</span>
  401. </div>
  402. <div class="openWithModule popupbuttons allowHover" onclick="openFileWithModuleInNewTab(this);">
  403. <i class="add icon"></i> <span locale="opr/openwith/openWithWebAppInNewWindow">Open in new tab</span>
  404. </div>
  405. <div class="popupbuttons allowHover vdonly" onclick="openRawFileInFloatWindow(this);">
  406. <i class="window restore outline icon"></i> <span locale="opr/openwith/openInNewWindow">Open File directly in floatWindow</span>
  407. </div>
  408. <div class="popupbuttons allowHover mobileOnly" onclick="hideAllPopupWindows();">
  409. <i class="remove icon"></i> <span locale="opr/openwith/cancel">Cancel</span>
  410. </div>
  411. </div>
  412. </div>
  413. <!-- Context Menu -->
  414. <div id="contextmenu" class="contextmenu" style="min-width:250px;">
  415. <div class="item" onclick="openViaButton();">
  416. <span locale="contextmenu/open">Open</span>
  417. </div>
  418. <div class="item fileonly" onclick="openWith();">
  419. <span locale="contextmenu/openWith">Open With</span> <i class="external icon"></i>
  420. </div>
  421. <div class="item folderonly" onclick="openSelectedFolderInNewWindow();">
  422. <span locale="contextmenu/openNewWindow">Open In New Window</span> <i class="external icon"></i>
  423. </div>
  424. <!-- This is the vroot alternative new windows-->
  425. <div class="item vrootonly" onclick="openSelectedVroot();">
  426. <span locale="contextmenu/openNewWindowVroot">Open In New Window</span> <i class="external icon"></i>
  427. </div>
  428. <div class="item shareonly" onclick="openFileLocation();">
  429. <span locale="contextmenu/openFileLocation">Open File Location</span> <i class="folder outline icon"></i>
  430. </div>
  431. <div class="item singleObjectOnlyHide" onclick="shareFile();">
  432. <span locale="contextmenu/Share">Share</span> <i class="share alternate icon"></i>
  433. </div>
  434. <div class="item mobileonly" onclick="toggleCtrl();">
  435. <span locale="contextmenu/MuitSelect">Multi-select</span> <i class="mouse pointer icon"></i>
  436. </div>
  437. <div class="item hasHotkey" onclick="copy();">
  438. <span locale="contextmenu/copy">Copy</span> <span class="description">Ctrl + C</span>
  439. </div>
  440. <div class="item allowNoSelection hasHotkey" onclick="paste();">
  441. <span locale="contextmenu/paste">Paste</span> <span class="description">Ctrl + V</span>
  442. </div>
  443. <div class="item hasHotkey" onclick="cut();">
  444. <span locale="contextmenu/cut">Cut</span> <span class="description">Ctrl + X</span>
  445. </div>
  446. <div class="divider vroothide noSelectionOnly"></div>
  447. <div class="item noSelectionOnly" onclick="newfile();">
  448. <span locale="contextmenu/newFile">New File</span> <i class="file outline icon"></i>
  449. </div>
  450. <div class="item noSelectionOnly" onclick="newFolder();">
  451. <span locale="contextmenu/newFolder">New Folder</span> <i class="folder outline icon"></i>
  452. </div>
  453. <div class="divider vroothide"></div>
  454. <div class="item noSelectionOnly" onclick="upload();">
  455. <span locale="contextmenu/upload">Upload</span> <i class="upload icon"></i>
  456. </div>
  457. <div class="item" onclick="zipFile();">
  458. <span locale="contextmenu/zip">Create Zip</span>
  459. </div>
  460. <div class="item zipFileOnly" onclick="unzipHere();">
  461. <span locale="contextmenu/unzip">Unzip Here</span> <i class="inbox icon"></i>
  462. </div>
  463. <div class="item" onclick="rename();">
  464. <span locale="contextmenu/rename">Rename</span>
  465. </div>
  466. <div class="item" onclick="deleteFile();">
  467. <span locale="contextmenu/delete">Delete</span> <i class="trash icon"></i>
  468. </div>
  469. <div class="item folderonly singleObjectOnlyHide" onclick="createDesktopShortcut();">
  470. <span locale="opr/shortcut/title">Create Shortcut on Desktop</span> <i class="external square icon"></i>
  471. </div>
  472. <div class="divider vroothide"></div>
  473. <div class="item noSelectionOnly" onclick="refreshList();">
  474. <span locale="contextmenu/refresh">Refresh</span> <i class="refresh icon"></i>
  475. </div>
  476. <div class="item" onclick="downloadFile();">
  477. <span locale="contextmenu/download">Download</span> <i class="download icon"></i>
  478. </div>
  479. <div class="item" onclick="showFileProperties();">
  480. <span locale="contextmenu/properties">Properties</span>
  481. </div>
  482. <!-- This properties shows the currentDirectory properties instead of the selected file properties-->
  483. <div class="item noSelectionOnly" onclick="showCurrentDirectoryProperties();">
  484. <span locale="contextmenu/properties">Properties</span>
  485. </div>
  486. <div class="item vrootonly" onclick="showSharesManager();">
  487. <span locale="contextmenu/sharemanager">Open Shares Manager</span> <i class="share alternate icon"></i>
  488. </div>
  489. <!-- This properties show the vroot properties -->
  490. <div class="item specialviewonly" onclick="createSpecialViewShortcut();">
  491. <span locale="opr/shortcut/create">Create Desktop Shortcut</span> <i class="external icon"></i>
  492. </div>
  493. <div class="item vrootonly" onclick="createVrootShortcut();">
  494. <span locale="opr/shortcut/create">Create Desktop Shortcut</span> <i class="external icon"></i>
  495. </div>
  496. <div class="item vrootonly" onclick="showVrootProperties();">
  497. <span locale="contextmenu/properties">Properties</span>
  498. </div>
  499. </div>
  500. <!--
  501. Toast. Lives at body level so its position:fixed is resolved against
  502. the viewport and cannot be captured by a transformed ancestor.
  503. -->
  504. <div id="msgbox" class="msgbox" style="display:none;">
  505. <i class="checkmark icon"></i>
  506. <span class="msgboxText">No Message</span>
  507. <div class="closeMsgButton" onclick="hideMsgBox();" data-fsicon="close"></div>
  508. </div>
  509. <!--
  510. Transfer panel. Shows one row per task - an upload, or the server
  511. side zipping a folder download starts in download.js - so its title
  512. and summary icon are deliberately generic. Rendering lives in
  513. js/explorer/uploadui.js; the markup below is only the shell.
  514. -->
  515. <div id="uploadTab" style="display:none;">
  516. <div class="uploadHeader">
  517. <span class="uploadHeaderTitle" id="uploadHeaderTitle">Tasks</span>
  518. <div class="uploadHeaderBtn" onclick="toggleUploadMinimize();" title="Minimize">
  519. <span data-fsicon="minus"></span>
  520. </div>
  521. <div class="uploadHeaderBtn" onclick="closeUploadTab();" title="Close">
  522. <span data-fsicon="close"></span>
  523. </div>
  524. </div>
  525. <div class="uploadList" id="uploadProgressList">
  526. </div>
  527. <div class="uploadSummary">
  528. <span class="uploadSummaryIcon" id="uploadSummaryIcon" data-fsicon="taskProgress"></span>
  529. <span class="uploadSummaryText" id="uploadSummaryText"></span>
  530. <!-- Only shown on the minimized card, where the header is hidden -->
  531. <div class="uploadHeaderBtn uploadCompactBtn" onclick="restoreUploadPanel();" title="Maximize">
  532. <span data-fsicon="maximize"></span>
  533. </div>
  534. <div class="uploadHeaderBtn uploadCompactBtn" onclick="closeUploadTab();" title="Close">
  535. <span data-fsicon="close"></span>
  536. </div>
  537. </div>
  538. <div class="uploadActions">
  539. <div class="uploadActionBtn" onclick="clearCompletedUploads();">
  540. <span data-fsicon="trash"></span>
  541. <span locale="upload/clearCompleted">Clear completed</span>
  542. </div>
  543. <div class="uploadActionBtn primary" onclick="cancelAllUploads();">
  544. <span locale="upload/cancelAll">Cancel all</span>
  545. </div>
  546. </div>
  547. </div>
  548. <!-- Permanent delete confirmation. The one action in the trash bin with
  549. nothing behind it - the bin is already the safety net - so it is the
  550. one that asks first. Raised by confirmTrashDelete() and
  551. confirmEmptyTrashBin() in js/explorer/trash.js. -->
  552. <div id="trashDeleteConfirmBox" class="popup" style="display:none;">
  553. <div class="popupheader">
  554. <i class="trash icon"></i> <span locale="trash/confirm/title">Delete Permanently?</span>
  555. <div class="popupcloser" onclick="hideAllPopupWindows();">
  556. <i class="remove icon"></i>
  557. </div>
  558. </div>
  559. <div class="popupcontent">
  560. <p><span class="trashConfirmDesc"></span></p>
  561. <div class="popupbuttons allowHover negative" onclick="trashDeleteConfirmed();">
  562. <i class="trash icon"></i> <span locale="trash/confirm/confirm">Delete Permanently</span>
  563. </div>
  564. <div class="popupbuttons allowHover" onclick="hideAllPopupWindows();">
  565. <i class="remove icon"></i> <span locale="trash/confirm/cancel">Cancel</span>
  566. </div>
  567. </div>
  568. </div>
  569. <!-- Trash bin full. Raised when the server refuses a recycle because the
  570. user's trash size limit would be exceeded; nothing has moved yet. -->
  571. <div id="trashFullBox" class="popup" style="display:none;">
  572. <div class="popupheader">
  573. <i class="trash icon"></i> <span locale="trash/full/title">Trash Bin Full</span>
  574. <div class="popupcloser" onclick="hideAllPopupWindows();">
  575. <i class="remove icon"></i>
  576. </div>
  577. </div>
  578. <div class="popupcontent">
  579. <p><span locale="trash/full/desc">The trash bin has reached its size limit, so these files cannot be moved into it.</span></p>
  580. <div class="popupbuttons allowHover primary" onclick="trashFullClearAndRecycle();">
  581. <i class="recycle icon"></i> <span locale="trash/full/clearfirst">Empty the trash bin and move them there</span>
  582. </div>
  583. <div class="popupbuttons allowHover negative" onclick="trashFullDeleteDirectly();">
  584. <i class="trash icon"></i> <span locale="trash/full/deletenow">Delete them permanently instead</span>
  585. </div>
  586. <div class="popupbuttons allowHover" onclick="hideAllPopupWindows();">
  587. <i class="remove icon"></i> <span locale="trash/full/cancel">Do nothing</span>
  588. </div>
  589. </div>
  590. </div>
  591. <!-- Trashed item details. Filled by js/explorer/trash.js; this is how
  592. the columns the narrow layout drops stay reachable. -->
  593. <div id="trashDetailsBox" class="popup" style="display:none;">
  594. <div class="popupheader">
  595. <i class="trash icon"></i> <span locale="trash/details">Details</span>
  596. <div class="popupcloser" onclick="hideAllPopupWindows();">
  597. <i class="remove icon"></i>
  598. </div>
  599. </div>
  600. <div class="popupcontent">
  601. <table class="fmTrashDetailTable"></table>
  602. <div class="popupbuttons allowHover primary fmTrashDetailRestore">
  603. <i class="checkmark icon"></i> <span locale="trash/restore">Restore</span>
  604. </div>
  605. <div class="popupbuttons allowHover" onclick="hideAllPopupWindows();">
  606. <i class="remove icon"></i> <span locale="opr/rename/cancel">Cancel</span>
  607. </div>
  608. </div>
  609. </div>
  610. <!-- Confirm Exit -->
  611. <!-- Open With Dialog-->
  612. <div id="confirmExit" class="popup" style="display:none;">
  613. <div class="popupheader">
  614. <i class="external icon"></i> <span locale="opr/confirmclose/title">Confirm Exit</span>
  615. <div class="popupcloser" onclick="hideAllPopupWindows();">
  616. <i class="remove icon"></i>
  617. </div>
  618. </div>
  619. <div class="popupcontent">
  620. <p locale="opr/confirmclose/desc">This file manager instance is currently uploading file to server. Closing this instance will cancel the upload tasks. <br>
  621. <b>Confirm Exit?</b></p>
  622. <div class="popupbuttons negative allowHover" onclick="ao_module_closeHandler(); hideAllPopupWindows();">
  623. <i class="trash icon"></i> <span locale="opr/confirmclose/cancelAndExit">Cancel Upload and Exit</span>
  624. </div>
  625. <div class="popupbuttons allowHover" onclick="hideAllPopupWindows();">
  626. <i class="checkmark icon"></i> <span locale="opr/confirmclose/continue">Continue Upload</span>
  627. </div>
  628. </div>
  629. </div>
  630. <!-- Shared with file_selector.html: file icons, thumbnails, opener lookup -->
  631. <script type="text/javascript" src="shared/specialpaths.js"></script>
  632. <script type="text/javascript" src="shared/fsicons.js"></script>
  633. <script type="text/javascript" src="shared/filethumb.js"></script>
  634. <!--
  635. File Manager modules. These are plain classic scripts, NOT ES modules:
  636. every top-level function must stay on the global scope because the markup
  637. wires handlers through inline on* attributes, and file_operation.html /
  638. file_share.html / desktop.html reach in from other frames.
  639. Order matters twice: util.js first (state.js calls lscheck() while it
  640. evaluates) and boot.js last. Keep these at the end of <body> - several
  641. modules bind to the DOM as they parse.
  642. -->
  643. <script type="text/javascript" src="js/explorer/util.js"></script>
  644. <script type="text/javascript" src="js/explorer/state.js"></script>
  645. <script type="text/javascript" src="js/explorer/ui.js"></script>
  646. <script type="text/javascript" src="js/explorer/pathbar.js"></script>
  647. <script type="text/javascript" src="js/explorer/sidebar.js"></script>
  648. <script type="text/javascript" src="js/explorer/viewmode.js"></script>
  649. <script type="text/javascript" src="js/explorer/splitter.js"></script>
  650. <script type="text/javascript" src="js/explorer/specialview.js"></script>
  651. <script type="text/javascript" src="js/explorer/trash.js"></script>
  652. <script type="text/javascript" src="js/explorer/search.js"></script>
  653. <script type="text/javascript" src="js/explorer/uploadui.js"></script>
  654. <script type="text/javascript" src="js/explorer/upload.js"></script>
  655. <script type="text/javascript" src="js/explorer/dragdrop.js"></script>
  656. <script type="text/javascript" src="js/explorer/clipboard.js"></script>
  657. <script type="text/javascript" src="js/explorer/rename.js"></script>
  658. <script type="text/javascript" src="js/explorer/delete.js"></script>
  659. <script type="text/javascript" src="js/explorer/create.js"></script>
  660. <script type="text/javascript" src="js/explorer/archive.js"></script>
  661. <script type="text/javascript" src="js/explorer/download.js"></script>
  662. <script type="text/javascript" src="js/explorer/open.js"></script>
  663. <script type="text/javascript" src="js/explorer/openwith.js"></script>
  664. <script type="text/javascript" src="js/explorer/share.js"></script>
  665. <script type="text/javascript" src="js/explorer/properties.js"></script>
  666. <script type="text/javascript" src="js/explorer/thumbnail.js"></script>
  667. <script type="text/javascript" src="js/explorer/render.js"></script>
  668. <script type="text/javascript" src="js/explorer/listing.js"></script>
  669. <script type="text/javascript" src="js/explorer/selection.js"></script>
  670. <script type="text/javascript" src="js/explorer/keyboard.js"></script>
  671. <script type="text/javascript" src="js/explorer/boot.js"></script>
  672. </body>
  673. </html>