瀏覽代碼

Add pushstate when previews are opened in lightbox and popstate when closed. Still work to do with potentially managing the popstate handler for files too. Potentially addresses the main problem in #59.

dom111 5 年之前
父節點
當前提交
34725983be
共有 3 個文件被更改,包括 23 次插入2 次删除
  1. 17 1
      src/lib/UI/NativeDOM.js
  2. 6 1
      src/lib/UI/NativeDOM/List/Item.js
  3. 0 0
      src/webdav-min.js

+ 17 - 1
src/lib/UI/NativeDOM.js

@@ -35,7 +35,20 @@ export default class NativeDOM extends UI {
     }
 
     window.addEventListener('popstate', () => {
-      this.trigger('go');
+      const url = location.pathname;
+
+      if (url.endsWith('/')) {
+        return this.trigger('go');
+      }
+
+      const parts = url.split(/\//),
+        // file = parts.pop(),
+        path = parts.join('/')
+      ;
+
+      this.trigger('go', path);
+
+      // trigger opening file
     });
 
     if (supportsDragDrop) {
@@ -196,5 +209,8 @@ export default class NativeDOM extends UI {
 
       document.title = `${decodeURIComponent(path)} | WebDAV`;
     });
+
+    this.on('preview:opened', (entry) => history.pushState(history.state, entry.fullPath, entry.fullPath));
+    this.on('preview:closed', (entry) => history.pushState(history.state, entry.path, entry.path));
   }
 }

+ 6 - 1
src/lib/UI/NativeDOM/List/Item.js

@@ -194,11 +194,16 @@ export default class Item extends Element {
               onShow(lightbox);
             }
           },
-          onClose: () => document.removeEventListener('keydown', escapeListener)
+          onClose: () => {
+            document.removeEventListener('keydown', escapeListener);
+            this.trigger('preview:closed', this.#entry);
+          }
         })
       ;
 
       lightbox.show();
+
+      this.trigger('preview:opened', this.#entry);
     };
 
     if (['video', 'audio', 'image', 'font', 'pdf'].includes(entry.type)) {

File diff suppressed because it is too large
+ 0 - 0
src/webdav-min.js


Some files were not shown because too many files changed in this diff