FileSidebar refactored

This commit is contained in:
Peter Papp
2021-04-20 08:11:05 +02:00
parent 7e8511ab3f
commit 25a28c37c8
19 changed files with 697 additions and 830 deletions
+7 -84
View File
@@ -33,13 +33,13 @@
"/chunks/database.js": "/chunks/database.js?id=7374830dc3cbddf41abb", "/chunks/database.js": "/chunks/database.js?id=7374830dc3cbddf41abb",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=6dccc2158cc6278f683d", "/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=6dccc2158cc6278f683d",
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=208de84df68177288a2a", "/chunks/environment-setup.js": "/chunks/environment-setup.js?id=208de84df68177288a2a",
"/chunks/files.js": "/chunks/files.js?id=3ca6e6d4ddf2031e98ba", "/chunks/files.js": "/chunks/files.js?id=ee5b19530d832c6f9f34",
"/chunks/files~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js?id=39233d603662ca3738e8", "/chunks/files~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js?id=39233d603662ca3738e8",
"/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.js?id=e43e627625b97e67fbe5", "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.js?id=4231d578d933b87cf7a2",
"/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~chunks/sha~8510f6c9.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~chunks/sha~8510f6c9.js?id=b4ccb4a816e5c72a0b85", "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~chunks/sha~8510f6c9.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~chunks/sha~8510f6c9.js?id=b4ccb4a816e5c72a0b85",
"/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared/file-browser~chunks/user~9058a49f.js": "/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared/file-browser~chunks/user~9058a49f.js?id=31a17ad1d2536342abbe", "/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared/file-browser~chunks/user~9058a49f.js": "/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared/file-browser~chunks/user~9058a49f.js?id=31a17ad1d2536342abbe",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.js?id=d8e418dc391a1245eb6e", "/chunks/files~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.js?id=5159a98127718c5fc768",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js?id=243b3903521d9cc036b9", "/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js?id=628ee9736f507e6213b4",
"/chunks/files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared/file-browser.js?id=44899a3c3880630dbcd9", "/chunks/files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared/file-browser.js?id=44899a3c3880630dbcd9",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=877a9289b77ac3885042", "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=877a9289b77ac3885042",
"/chunks/homepage.js": "/chunks/homepage.js?id=48e0e9b3c870c46218ce", "/chunks/homepage.js": "/chunks/homepage.js?id=48e0e9b3c870c46218ce",
@@ -54,8 +54,8 @@
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=66123f72696b47a986a2", "/chunks/plan-settings.js": "/chunks/plan-settings.js?id=66123f72696b47a986a2",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=08e2056bc3744b2ea8f9", "/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=08e2056bc3744b2ea8f9",
"/chunks/plans.js": "/chunks/plans.js?id=83fc2cc3cd4b76c8f8f0", "/chunks/plans.js": "/chunks/plans.js?id=83fc2cc3cd4b76c8f8f0",
"/chunks/platform.js": "/chunks/platform.js?id=7de76831b9b233a9620c", "/chunks/platform.js": "/chunks/platform.js?id=2abcf9db97eafddc7dfb",
"/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=3f3506a167632c79899f", "/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=7e8eacb61e51486a09d9",
"/chunks/profile.js": "/chunks/profile.js?id=1c1c666004fb44b1c404", "/chunks/profile.js": "/chunks/profile.js?id=1c1c666004fb44b1c404",
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=d0a44ee2cc3e9882c14a", "/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=d0a44ee2cc3e9882c14a",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=e00ee12cde704060e15b", "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=e00ee12cde704060e15b",
@@ -92,82 +92,5 @@
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js?id=57c854adb91ed9a9d088", "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js?id=57c854adb91ed9a9d088",
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5e36d91.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5e36d91.js?id=170765b4fd923b62195c", "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5e36d91.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5e36d91.js?id=170765b4fd923b62195c",
"/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js": "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js?id=66afa0e341251a68c3d3", "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js": "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js?id=66afa0e341251a68c3d3",
"/vendors~chunks/platform~chunks/shared.js": "/vendors~chunks/platform~chunks/shared.js?id=eb141834bc24b72d8e92", "/vendors~chunks/platform~chunks/shared.js": "/vendors~chunks/platform~chunks/shared.js?id=eb141834bc24b72d8e92"
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.ed4aa4d9cdbf399bb8eb.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.ed4aa4d9cdbf399bb8eb.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.2937f42c49871bbea723.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.2937f42c49871bbea723.hot-update.js",
"/js/main.b1a112ad8025b7e60222.hot-update.js": "/js/main.b1a112ad8025b7e60222.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.b1a112ad8025b7e60222.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.b1a112ad8025b7e60222.hot-update.js",
"/chunks/platform~chunks/shared.b1a112ad8025b7e60222.hot-update.js": "/chunks/platform~chunks/shared.b1a112ad8025b7e60222.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.1978470c56d801947def.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.1978470c56d801947def.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.130a1e368d7fa0f34231.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.130a1e368d7fa0f34231.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.958776fb22b8995b65cd.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.958776fb22b8995b65cd.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.e844b0db822a4765f50b.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.e844b0db822a4765f50b.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.eed0640f82236e5cbe2e.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.eed0640f82236e5cbe2e.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.295b6de96e933e1abf5a.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.295b6de96e933e1abf5a.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.d2e53d112b90ab60f9b3.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.d2e53d112b90ab60f9b3.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.a6f06951b14f1b1907ef.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.a6f06951b14f1b1907ef.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.bfe1a757c4d7bc436983.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.bfe1a757c4d7bc436983.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.ddbf17c6ba23d3b72637.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.ddbf17c6ba23d3b72637.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.923405e122d9419dd175.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.923405e122d9419dd175.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.eb9af826d3ef230e299c.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.eb9af826d3ef230e299c.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.03fab59547526170bcdb.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.03fab59547526170bcdb.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.eb59a5789483e851caca.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.eb59a5789483e851caca.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.4a93cb7f711f06b7b73c.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.4a93cb7f711f06b7b73c.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.2f24027d58e270f1def3.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.2f24027d58e270f1def3.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.1433160740dc1978d3c7.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.1433160740dc1978d3c7.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.0255a73df91d3e17f61e.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.0255a73df91d3e17f61e.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.deb78f7d49a111b8be99.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.deb78f7d49a111b8be99.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.bedefee114fc86a12a8e.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.bedefee114fc86a12a8e.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.a89ace5b05f0622976d4.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.a89ace5b05f0622976d4.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.7190c4b8cf084fa24bbd.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.7190c4b8cf084fa24bbd.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.2ad3802b22944072a4d8.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.2ad3802b22944072a4d8.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.0ae1abff12e4b773929d.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.0ae1abff12e4b773929d.hot-update.js",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.e24dc34e1dd1897ee6c0.hot-update.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.e24dc34e1dd1897ee6c0.hot-update.js",
"/chunks/platform~chunks/shared.e24dc34e1dd1897ee6c0.hot-update.js": "/chunks/platform~chunks/shared.e24dc34e1dd1897ee6c0.hot-update.js",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.dc5f9242a3f8d84783fa.hot-update.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.dc5f9242a3f8d84783fa.hot-update.js",
"/chunks/platform~chunks/shared.dc5f9242a3f8d84783fa.hot-update.js": "/chunks/platform~chunks/shared.dc5f9242a3f8d84783fa.hot-update.js",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.1dcb1f3bffb904d1b929.hot-update.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.1dcb1f3bffb904d1b929.hot-update.js",
"/chunks/platform~chunks/shared.1dcb1f3bffb904d1b929.hot-update.js": "/chunks/platform~chunks/shared.1dcb1f3bffb904d1b929.hot-update.js",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.1939c3343d4cf3b46a0c.hot-update.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.1939c3343d4cf3b46a0c.hot-update.js",
"/chunks/platform~chunks/shared.1939c3343d4cf3b46a0c.hot-update.js": "/chunks/platform~chunks/shared.1939c3343d4cf3b46a0c.hot-update.js",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.063b0ee4345da70adbca.hot-update.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.063b0ee4345da70adbca.hot-update.js",
"/chunks/platform~chunks/shared.063b0ee4345da70adbca.hot-update.js": "/chunks/platform~chunks/shared.063b0ee4345da70adbca.hot-update.js",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.6e59e9fb6c1024ffae9f.hot-update.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.6e59e9fb6c1024ffae9f.hot-update.js",
"/chunks/platform~chunks/shared.6e59e9fb6c1024ffae9f.hot-update.js": "/chunks/platform~chunks/shared.6e59e9fb6c1024ffae9f.hot-update.js",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.946fe783b2951fb83ad6.hot-update.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.946fe783b2951fb83ad6.hot-update.js",
"/chunks/platform~chunks/shared.946fe783b2951fb83ad6.hot-update.js": "/chunks/platform~chunks/shared.946fe783b2951fb83ad6.hot-update.js",
"/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.38769a23b59d7739e363.hot-update.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.38769a23b59d7739e363.hot-update.js",
"/chunks/platform~chunks/shared.38769a23b59d7739e363.hot-update.js": "/chunks/platform~chunks/shared.38769a23b59d7739e363.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.a7ac970765f1ccf5e744.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.a7ac970765f1ccf5e744.hot-update.js",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.0b77da78d7cba5e44f79.hot-update.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.0b77da78d7cba5e44f79.hot-update.js",
"/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.0b77da78d7cba5e44f79.hot-update.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.0b77da78d7cba5e44f79.hot-update.js",
"/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.96ba1d053470cd84ce0c.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.96ba1d053470cd84ce0c.hot-update.js",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.379cce4d30856289d2a7.hot-update.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.379cce4d30856289d2a7.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.5e3b4e6a65f68ebe30bb.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.5e3b4e6a65f68ebe30bb.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.6395ad8cac595b416627.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.6395ad8cac595b416627.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.dc7430f6107a255d197c.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.dc7430f6107a255d197c.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.f8e1c189ceeb02889eec.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.f8e1c189ceeb02889eec.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.dfac663edd589f64965a.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.dfac663edd589f64965a.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.941c56631fe3a660e4d1.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.941c56631fe3a660e4d1.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.9f1e5d309095a5796eea.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.9f1e5d309095a5796eea.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.5989b812dc41d63d0e95.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.5989b812dc41d63d0e95.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.e013cd479fd19ccddbe6.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.e013cd479fd19ccddbe6.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.2f842129f3a669ae7cee.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.2f842129f3a669ae7cee.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.aae056665f8b17717d92.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.aae056665f8b17717d92.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.49d4ced729a9742cb3f2.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.49d4ced729a9742cb3f2.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.7cf4e81b5d68422276bf.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.7cf4e81b5d68422276bf.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.569c20f57bd85c4fc19b.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.569c20f57bd85c4fc19b.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.2c67a5984c60bb8d01e8.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.2c67a5984c60bb8d01e8.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.28dbba2a9ccf0ee8cdc9.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.28dbba2a9ccf0ee8cdc9.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.35051d6f63aad11ffc08.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.35051d6f63aad11ffc08.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.0721be1f89b784180af6.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.0721be1f89b784180af6.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.ab71a7222a0d30f81ef8.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.ab71a7222a0d30f81ef8.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.76bde307652b00bc2a85.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.76bde307652b00bc2a85.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.2c02bef2390fcfa0b2bc.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.2c02bef2390fcfa0b2bc.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.ddfded4daf0a6f6c3ef3.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.ddfded4daf0a6f6c3ef3.hot-update.js",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.b8630bf97cecbcdeeeee.hot-update.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.b8630bf97cecbcdeeeee.hot-update.js",
"/chunks/shared.9de81482771485cc031e.hot-update.js": "/chunks/shared.9de81482771485cc031e.hot-update.js",
"/chunks/shared.bdfc66c82b10d1d35405.hot-update.js": "/chunks/shared.bdfc66c82b10d1d35405.hot-update.js",
"/chunks/shared.2b099d8fdabce8e5b8bb.hot-update.js": "/chunks/shared.2b099d8fdabce8e5b8bb.hot-update.js",
"/chunks/shared.1b09868b437140d17e65.hot-update.js": "/chunks/shared.1b09868b437140d17e65.hot-update.js"
} }
@@ -42,7 +42,7 @@
<FileSortingOptions /> <FileSortingOptions />
</PopoverItem> </PopoverItem>
</PopoverWrapper> </PopoverWrapper>
<ToolbarButton @click.native="$store.dispatch('fileInfoToggle')" :class="{'active': fileInfoVisible }" :action="$t('actions.info_panel')" source="info" /> <ToolbarButton @click.native="$store.dispatch('fileInfoToggle')" :class="{'active': isVisibleSidebar }" :action="$t('actions.info_panel')" source="info" />
</ToolbarGroup> </ToolbarGroup>
</ToolbarWrapper> </ToolbarWrapper>
</div> </div>
@@ -83,8 +83,8 @@
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
'isVisibleSidebar',
'FilePreviewType', 'FilePreviewType',
'fileInfoVisible',
'currentFolder', 'currentFolder',
'browseHistory', 'browseHistory',
'homeDirectory', 'homeDirectory',
@@ -155,27 +155,9 @@
} }
}, },
watch: { watch: {
query: debounce(function (value) { query(val) {
this.$searchFiles(val)
if (this.query !== '' && typeof this.query !== 'undefined') {
this.$store.dispatch('getSearchResult', value)
} else if (typeof value !== 'undefined') {
if (this.currentFolder) {
// Get back after delete query to previously folder
if (this.$isThisLocation('public')) {
this.$store.dispatch('browseShared', [{folder: this.currentFolder, back: true, init: false}])
} else {
this.$store.dispatch('getFolder', [{folder: this.currentFolder, back: true, init: false}])
} }
}
this.$store.commit('CHANGE_SEARCHING_STATE', false)
}
}, 300),
}, },
methods: { methods: {
showSortingMenu() { showSortingMenu() {
+17 -10
View File
@@ -1,17 +1,27 @@
<template> <template>
<MultiSelected :title="title" :subtitle="subtitle" id="multi-select-ui" v-show="isVisible"/> <TitlePreview
icon="check-square"
:title="title"
:subtitle="subtitle"
id="drag-ui"
v-show="isVisible"
/>
</template> </template>
<script> <script>
import MultiSelected from '@/components/FilesView/MultiSelected' import TitlePreview from '@/components/FilesView/TitlePreview'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { events } from '@/bus' import { events } from '@/bus'
export default { export default {
name: 'DragUI', name: 'DragUI',
components: { MultiSelected }, components: {
TitlePreview
},
computed: { computed: {
...mapGetters(['clipboard']), ...mapGetters([
'clipboard'
]),
title() { title() {
let filesLength = this.clipboard.length, let filesLength = this.clipboard.length,
hasDraggedItem = this.clipboard.includes(this.draggedItem) hasDraggedItem = this.clipboard.includes(this.draggedItem)
@@ -56,7 +66,6 @@ export default {
} }
}, },
created() { created() {
// Handle Drag & Drop Ghost show
events.$on('dragstart', data => { events.$on('dragstart', data => {
this.draggedItem = data this.draggedItem = data
@@ -65,9 +74,7 @@ export default {
}, 100) }, 100)
}) })
events.$on('drop', () => { events.$on('drop', () => this.isVisible = false)
this.isVisible = false
})
} }
} }
</script> </script>
@@ -76,7 +83,7 @@ export default {
@import '@assets/vuefilemanager/_variables'; @import '@assets/vuefilemanager/_variables';
@import '@assets/vuefilemanager/_mixins'; @import '@assets/vuefilemanager/_mixins';
#multi-select-ui { #drag-ui {
max-width: 300px; max-width: 300px;
min-width: 250px; min-width: 250px;
position: fixed; position: fixed;
@@ -89,7 +96,7 @@ export default {
} }
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
#multi-select-ui { #drag-ui {
background: $dark_mode_foreground; background: $dark_mode_foreground;
} }
} }
@@ -43,17 +43,20 @@
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
export default { export default {
name: 'EmptyPage', name: 'EmptyFilePage',
props: ['title', 'description'], props: [
'title',
'description'
],
components: { components: {
ButtonUpload, ButtonUpload,
Spinner Spinner,
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
'entries', 'currentFolder',
'isLoading', 'isLoading',
'currentFolder' 'entries',
]), ]),
isEmpty() { isEmpty() {
return this.entries && this.entries.length == 0 return this.entries && this.entries.length == 0
@@ -1,22 +1,23 @@
<template> <template>
<div class="file-content" id="file-content-id" :class="{ 'is-offset': filesInQueueTotal > 0, 'is-dragging': isDragging }" <div
@dragover.prevent :class="{'is-offset': filesInQueueTotal > 0, 'is-dragging': isDragging }"
class="file-content"
id="file-content-id"
@drop.stop.prevent="dropUpload($event)" @drop.stop.prevent="dropUpload($event)"
@keydown.delete="deleteItems"
@dragover="dragEnter" @dragover="dragEnter"
@dragleave="dragLeave" @dragleave="dragLeave"
@keydown.delete="deleteItems" @dragover.prevent
tabindex="-1" tabindex="-1"
> >
<div <div
:class="{'is-visible': isVisibleSidebar, 'mobile-multi-select': isMultiSelect}"
@click.self="filesContainerClick"
class="files-container" class="files-container"
ref="fileContainer" ref="fileContainer"
:class="{'is-fileinfo-visible': fileInfoVisible && !$isMinimalScale() , 'mobile-multi-select' : mobileMultiSelect}"
@click.self="filesContainerClick"
> >
<!--MobileToolbar-->
<MobileToolbar /> <MobileToolbar />
<!--Searchbar-->
<SearchBar v-model="query" @reset-query="query = ''" class="mobile-search" :placeholder="$t('inputs.placeholder_search_files')" /> <SearchBar v-model="query" @reset-query="query = ''" class="mobile-search" :placeholder="$t('inputs.placeholder_search_files')" />
<!--Mobile Actions--> <!--Mobile Actions-->
@@ -65,7 +66,7 @@
</div> </div>
<!--Show empty page if folder is empty--> <!--Show empty page if folder is empty-->
<EmptyPage v-if="! isSearching" /> <EmptyFilePage v-if="! isSearching" />
<!--Show empty page if no search results--> <!--Show empty page if no search results-->
<EmptyMessage <EmptyMessage
@@ -76,17 +77,8 @@
</div> </div>
<!--File Info Panel--> <!--File Info Panel-->
<div v-if="! $isMinimalScale()" class="file-info-container" :class="{ 'is-fileinfo-visible': fileInfoVisible }"> <div :class="{'is-visible': isVisibleSidebar }" class="file-info-container">
<!--File info panel--> <InfoSidebar />
<FileInfoPanel v-if="clipboard.length === 1" />
<MultiSelected v-if="clipboard.length > 1"
:title="$t('file_detail.selected_multiple')"
:subtitle="this.clipboard.length + ' ' + $tc('file_detail.items', this.clipboard.length)"
/>
<!--If file info panel empty show message-->
<EmptyMessage v-if="clipboard.length === 0" :message="$t('messages.nothing_to_preview')" icon="eye-off" />
</div> </div>
</div> </div>
</template> </template>
@@ -94,12 +86,11 @@
<script> <script>
import FileActionsMobile from '@/components/FilesView/FileActionsMobile' import FileActionsMobile from '@/components/FilesView/FileActionsMobile'
import MobileToolbar from '@/components/FilesView/MobileToolbar' import MobileToolbar from '@/components/FilesView/MobileToolbar'
import MultiSelected from '@/components/FilesView/MultiSelected' import EmptyFilePage from '@/components/FilesView/EmptyFilePage'
import FileInfoPanel from '@/components/FilesView/FileInfoPanel' import EmptyMessage from '@/components/FilesView/EmptyMessage'
import FileItemList from '@/components/FilesView/FileItemList' import FileItemList from '@/components/FilesView/FileItemList'
import FileItemGrid from '@/components/FilesView/FileItemGrid' import FileItemGrid from '@/components/FilesView/FileItemGrid'
import EmptyMessage from '@/components/FilesView/EmptyMessage' import InfoSidebar from '@/components/FilesView/InfoSidebar'
import EmptyPage from '@/components/FilesView/EmptyPage'
import SearchBar from '@/components/FilesView/SearchBar' import SearchBar from '@/components/FilesView/SearchBar'
import {mapGetters} from 'vuex' import {mapGetters} from 'vuex'
import {events} from '@/bus' import {events} from '@/bus'
@@ -109,19 +100,18 @@
name: 'FilesContainer', name: 'FilesContainer',
components: { components: {
FileActionsMobile, FileActionsMobile,
EmptyFilePage,
MobileToolbar, MobileToolbar,
MultiSelected,
FileInfoPanel,
FileItemList, FileItemList,
FileItemGrid, FileItemGrid,
EmptyMessage, EmptyMessage,
InfoSidebar,
SearchBar, SearchBar,
EmptyPage
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
'filesInQueueTotal', 'filesInQueueTotal',
'fileInfoVisible', 'isVisibleSidebar',
'FilePreviewType', 'FilePreviewType',
'currentFolder', 'currentFolder',
'isSearching', 'isSearching',
@@ -151,33 +141,15 @@
} }
}, },
watch: { watch: {
query: debounce(function (value) { query(val) {
this.$searchFiles(val)
if (this.query !== '' && typeof this.query !== 'undefined') {
this.$store.dispatch('getSearchResult', value)
} else if (typeof value !== 'undefined') {
if (this.currentFolder) {
// Get back after delete query to previously folder
if (this.$isThisLocation('public')) {
this.$store.dispatch('browseShared', [{folder: this.currentFolder, back: true, init: false}])
} else {
this.$store.dispatch('getFolder', [{folder: this.currentFolder, back: true, init: false}])
} }
}
this.$store.commit('CHANGE_SEARCHING_STATE', false)
}
}, 300),
}, },
data() { data() {
return { return {
draggingId: undefined, draggingId: undefined,
isDragging: false, isDragging: false,
mobileMultiSelect: false, isMultiSelect: false,
query: '', query: '',
} }
}, },
@@ -252,11 +224,11 @@
}, },
created() { created() {
events.$on('mobileSelecting:start', () => { events.$on('mobileSelecting:start', () => {
this.mobileMultiSelect = true this.isMultiSelect = true
}) })
events.$on('mobileSelecting:stop', () => { events.$on('mobileSelecting:stop', () => {
this.mobileMultiSelect = false this.isMultiSelect = false
}) })
events.$on('drop', () => { events.$on('drop', () => {
@@ -341,7 +313,7 @@
position: relative; position: relative;
scroll-behavior: smooth; scroll-behavior: smooth;
&.is-fileinfo-visible { &.is-visible {
flex: 0 1 100%; flex: 0 1 100%;
} }
@@ -1,218 +0,0 @@
<template>
<div class="file-info-content" v-if="clipboard.length === 1">
<div class="file-headline" spellcheck="false">
<FilePreviewDetail/>
<!--File info-->
<div class="flex">
<div class="icon">
<div class="icon-preview">
<image-icon v-if="fileType === 'image'" size="21"></image-icon>
<video-icon v-if="fileType === 'video'" size="21"></video-icon>
<folder-icon v-if="fileType === 'folder'" size="21"></folder-icon>
<file-icon v-if="fileType === 'file'" size="21"></file-icon>
</div>
</div>
<div class="file-info">
<span ref="name" class="name">{{ clipboard[0].name }}</span>
<span class="mimetype text-theme" v-if="clipboard[0].mimetype">.{{ clipboard[0].mimetype }}</span>
</div>
</div>
</div>
<!--Info list-->
<ListInfo>
<ListInfoItem v-if="clipboard[0].filesize"
:title="$t('file_detail.size')"
:content="clipboard[0].filesize">
</ListInfoItem>
<ListInfoItem v-if="$checkPermission(['master']) && clipboard[0].author !== 'user'"
:title="$t('file_detail.author')"
:content="$t('file_detail.author_participant')">
</ListInfoItem>
<ListInfoItem
:title="$t('file_detail.created_at')"
:content="clipboard[0].created_at">
</ListInfoItem>
<ListInfoItem v-if="$checkPermission(['master'])"
:title="$t('file_detail.where')">
<div class="action-button" @click="moveItem">
<span>{{ clipboard[0].parent ? clipboard[0].parent.name : $t('locations.home') }}</span>
<edit-2-icon size="10" class="edit-icon"></edit-2-icon>
</div>
</ListInfoItem>
<ListInfoItem v-if="$checkPermission('master') && clipboard[0].shared"
:title="$t('file_detail.shared')">
<div class="action-button" @click="shareItemOptions">
<span>{{ sharedInfo }}</span>
<edit-2-icon size="10" class="edit-icon"></edit-2-icon>
</div>
<div class="sharelink">
<lock-icon v-if="isLocked" @click="shareItemOptions" class="lock-icon" size="17"></lock-icon>
<unlock-icon v-if="! isLocked" @click="shareItemOptions" class="lock-icon" size="17"></unlock-icon>
<CopyInput class="copy-sharelink" size="small" :item="clipboard[0]"/>
</div>
</ListInfoItem>
<ListInfoItem v-if="canShowMetaData" :title="$t('file_detail_meta.meta_data')">
<ImageMetaData />
</ListInfoItem>
</ListInfo>
</div>
</template>
<script>
import {Edit2Icon, LockIcon, UnlockIcon, ImageIcon, VideoIcon, FolderIcon, FileIcon} from 'vue-feather-icons'
import FilePreviewDetail from '@/components/Others/FilePreviewDetail'
import ImageMetaData from '@/components/FilesView/ImageMetaData'
import CopyInput from '@/components/Others/Forms/CopyInput'
import ListInfoItem from '@/components/Others/ListInfoItem'
import ListInfo from '@/components/Others/ListInfo'
import {mapGetters} from 'vuex'
import {events} from "@/bus"
export default {
name: 'FileInfoPanel',
components: {
FilePreviewDetail,
ImageMetaData,
ListInfoItem,
ListInfo,
FolderIcon,
UnlockIcon,
VideoIcon,
CopyInput,
ImageIcon,
FileIcon,
Edit2Icon,
LockIcon,
},
computed: {
...mapGetters(['clipboard', 'permissionOptions']),
fileType() {
return this.clipboard[0].type
},
canShowMetaData() {
return this.clipboard[0].metadata && this.clipboard[0].metadata.ExifImageWidth
},
sharedInfo() {
// Get permission title
let title = this.permissionOptions.find(option => {
return option.value === this.clipboard[0].shared.permission
})
return title ? this.$t(title.label) : this.$t('shared.can_download')
},
sharedIcon() {
switch (this.clipboard[0].shared.permission) {
case 'editor':
return 'user-edit'
break
case 'visitor':
return 'user'
break
default:
return 'download'
}
},
isLocked() {
return this.clipboard[0].shared.is_protected
}
},
methods: {
shareItemOptions() {
// Open share item popup
events.$emit('popup:open', {name: 'share-edit', item: this.clipboard[0]})
},
moveItem() {
// Move item fire popup
events.$emit("popup:open", { name: "move", item: this.clipboard});
}
}
}
</script>
<style scoped lang="scss">
@import '@assets/vuefilemanager/_variables';
@import '@assets/vuefilemanager/_mixins';
.file-info-content {
padding-bottom: 20px;
}
.file-headline {
margin-bottom: 20px;
border-radius: 8px;
.flex {
display: flex;
align-items: flex-start;
}
.icon-preview {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
text-align: center;
cursor: pointer;
white-space: nowrap;
outline: none;
border: none;
}
.file-info {
padding-left: 10px;
width: 100%;
word-break: break-all;
.name {
@include font-size(14);
font-weight: 700;
line-height: 1.4;
display: block;
color: $text;
}
.mimetype {
@include font-size(12);
font-weight: 600;
display: block;
}
}
}
.sharelink {
display: flex;
width: 100%;
align-items: center;
margin-top: 10px;
.lock-icon {
display: inline-block;
width: 15px;
margin-right: 9px;
cursor: pointer;
}
.copy-sharelink {
width: 100%;
}
}
@media (prefers-color-scheme: dark) {
.file-headline {
.file-info {
.name {
color: $dark_mode_text_primary;
}
}
}
}
</style>
@@ -1,6 +1,5 @@
<template> <template>
<div class="file-wrapper" @mousedown.stop="clickedItem" @dblclick="goToItem" spellcheck="false"> <div class="file-wrapper" @mouseup.stop="clickedItem" @dblclick="goToItem" spellcheck="false">
<!--Grid preview-->
<div :draggable="canDrag" @dragstart="$emit('dragstart')" @drop=" <div :draggable="canDrag" @dragstart="$emit('dragstart')" @drop="
drop() drop()
area = false" @dragleave="dragLeave" @dragover.prevent="dragEnter" class="file-item" :class="{'is-clicked' : isClicked , 'no-clicked' : !isClicked && this.$isMobile(), 'is-dragenter': area }"> area = false" @dragleave="dragLeave" @dragover.prevent="dragEnter" class="file-item" :class="{'is-clicked' : isClicked , 'no-clicked' : !isClicked && this.$isMobile(), 'is-dragenter': area }">
@@ -1,6 +1,5 @@
<template> <template>
<div class="file-wrapper" @mousedown.stop="clickedItem" @dblclick="goToItem" spellcheck="false"> <div class="file-wrapper" @mouseup.stop="clickedItem" @dblclick="goToItem" spellcheck="false">
<!--List preview-->
<div <div
:draggable="canDrag" :draggable="canDrag"
@dragstart="$emit('dragstart')" @dragstart="$emit('dragstart')"
@@ -81,13 +80,15 @@ import {events} from '@/bus'
export default { export default {
name: 'FileItemList', name: 'FileItemList',
props: ['item'], props: [
'item'
],
components: { components: {
MoreVerticalIcon, MoreVerticalIcon,
UserPlusIcon, UserPlusIcon,
LinkIcon,
FolderIcon, FolderIcon,
CheckIcon, CheckIcon,
LinkIcon,
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
@@ -155,7 +156,6 @@ export default {
events.$emit('drop') events.$emit('drop')
}, },
showItemActions() { showItemActions() {
// Load file info detail
this.$store.commit('CLIPBOARD_CLEAR') this.$store.commit('CLIPBOARD_CLEAR')
this.$store.commit('ADD_ITEM_TO_CLIPBOARD', this.item) this.$store.commit('ADD_ITEM_TO_CLIPBOARD', this.item)
@@ -178,14 +178,15 @@ export default {
document.getSelection().removeAllRanges(); document.getSelection().removeAllRanges();
if ((e.ctrlKey || e.metaKey) && !e.shiftKey) { if ((e.ctrlKey || e.metaKey) && !e.shiftKey) {
// Click + Ctrl
// Click + Ctrl
if (this.clipboard.some(item => item.id === this.item.id)) { if (this.clipboard.some(item => item.id === this.item.id)) {
this.$store.commit('REMOVE_ITEM_FROM_CLIPBOARD', this.item) this.$store.commit('REMOVE_ITEM_FROM_CLIPBOARD', this.item)
} else { } else {
this.$store.commit('ADD_ITEM_TO_CLIPBOARD', this.item) this.$store.commit('ADD_ITEM_TO_CLIPBOARD', this.item)
} }
} else if (e.shiftKey) { } else if (e.shiftKey) {
// Click + Shift // Click + Shift
let lastItem = this.entries.indexOf(this.clipboard[this.clipboard.length - 1]) let lastItem = this.entries.indexOf(this.clipboard[this.clipboard.length - 1])
let clickedItem = this.entries.indexOf(this.item) let clickedItem = this.entries.indexOf(this.item)
@@ -207,6 +208,7 @@ export default {
} }
} }
} else { } else {
// Click // Click
this.$store.commit('CLIPBOARD_CLEAR') this.$store.commit('CLIPBOARD_CLEAR')
this.$store.commit('ADD_ITEM_TO_CLIPBOARD', this.item) this.$store.commit('ADD_ITEM_TO_CLIPBOARD', this.item)
@@ -23,7 +23,7 @@
<li v-if="clipboard.metadata.ColorSpace"> <li v-if="clipboard.metadata.ColorSpace">
<span> {{ $t('file_detail_meta.color_space') }}</span> <span> {{ $t('file_detail_meta.color_space') }}</span>
<b>{{ clipboard.metadata.ColorSpace}}</b> <b>{{ clipboard.metadata.ColorSpace }}</b>
</li> </li>
<!--TODO: Colour profile:sRGB IEC61966-2.1--> <!--TODO: Colour profile:sRGB IEC61966-2.1-->
@@ -70,20 +70,19 @@
<li v-if="clipboard.metadata.GPSLongitude"> <li v-if="clipboard.metadata.GPSLongitude">
<span>{{ $t('file_detail_meta.longitude') }}</span> <span>{{ $t('file_detail_meta.longitude') }}</span>
<b>{{ formatGps(clipboard.metadata.GPSLongitude,clipboard.metadata.GPSLongitudeRef) }}</b> <b>{{ formatGps(clipboard.metadata.GPSLongitude, clipboard.metadata.GPSLongitudeRef) }}</b>
</li> </li>
<li v-if="clipboard.metadata.GPSLatitude"> <li v-if="clipboard.metadata.GPSLatitude">
<span>{{ $t('file_detail_meta.latitude') }}</span> <span>{{ $t('file_detail_meta.latitude') }}</span>
<b>{{ formatGps(clipboard.metadata.GPSLatitude, clipboard.metadata.GPSLatitudeRef) }}</b> <b>{{ formatGps(clipboard.metadata.GPSLatitude, clipboard.metadata.GPSLatitudeRef) }}</b>
</li> </li>
</ul> </ul>
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import {mapGetters} from 'vuex'
import {split} from 'lodash' import {split} from 'lodash'
export default { export default {
@@ -96,10 +95,12 @@ export default {
methods: { methods: {
formatGps(location, ref) { formatGps(location, ref) {
let data = [] let data = []
location.forEach(location => { location.forEach(location => {
data.push(split(location , '/' , 2)[0]) data.push(split(location, '/', 2)[0])
}) })
return `${data[0]}° ${data[1]}' ${data[2].substr(0,4) / 100}" ${ref} `
return `${data[0]}° ${data[1]}' ${data[2].substr(0, 4) / 100}" ${ref} `
} }
}, },
@@ -0,0 +1,186 @@
<template>
<div class="info-wrapper">
<!--Is empty clipboard-->
<EmptyMessage
v-if="isEmpty"
:message="$t('messages.nothing_to_preview')"
icon="eye-off"
/>
<!--Multiple item selection-->
<div v-if="! isSingleFile && !isEmpty" class="info-headline">
<TitlePreview
icon="check-square"
:title="$t('file_detail.selected_multiple')"
:subtitle="this.clipboard.length + ' ' + $tc('file_detail.items', this.clipboard.length)"
/>
</div>
<!--Single file preview-->
<div v-if="isSingleFile && !isEmpty" class="info-headline">
<FilePreviewDetail />
<TitlePreview
:icon="clipboard[0].type"
:title="clipboard[0].name"
:subtitle="clipboard[0].mimetype"
/>
</div>
<!--File info-->
<ListInfo v-if="isSingleFile && !isEmpty">
<!--Filesize-->
<ListInfoItem
v-if="singleFile.filesize"
:title="$t('file_detail.size')"
:content="singleFile.filesize"
/>
<!--Participant-->
<ListInfoItem
v-if="$checkPermission(['master']) && singleFile.author !== 'user'"
:title="$t('file_detail.author')"
:content="$t('file_detail.author_participant')"
/>
<!--Created At-->
<ListInfoItem
:title="$t('file_detail.created_at')"
:content="singleFile.created_at"
/>
<!--Location-->
<ListInfoItem
v-if="$checkPermission(['master'])"
:title="$t('file_detail.where')"
>
<div class="action-button" @click="openMoveOptions">
<span>{{ singleFile.parent ? singleFile.parent.name : $t('locations.home') }}</span>
<edit-2-icon size="10" class="edit-icon" />
</div>
</ListInfoItem>
<!--Shared-->
<ListInfoItem
v-if="$checkPermission('master') && singleFile.shared"
:title="$t('file_detail.shared')"
>
<div @click="openShareOptions" class="action-button">
<span>{{ sharedInfo }}</span>
<edit-2-icon size="10" class="edit-icon" />
</div>
<div class="share-link">
<lock-icon v-if="isLocked" @click="openShareOptions" class="lock-icon" size="17" />
<unlock-icon v-if="! isLocked" @click="openShareOptions" class="lock-icon" size="17" />
<CopyInput :item="singleFile" class="copy-share-link" size="small" />
</div>
</ListInfoItem>
<!--Metadata-->
<ListInfoItem
v-if="canShowMetaData"
:title="$t('file_detail_meta.meta_data')"
>
<ImageMetaData />
</ListInfoItem>
</ListInfo>
</div>
</template>
<script>
import FilePreviewDetail from '@/components/Others/FilePreviewDetail'
import {Edit2Icon, LockIcon, UnlockIcon} from 'vue-feather-icons'
import ImageMetaData from '@/components/FilesView/ImageMetaData'
import EmptyMessage from '@/components/FilesView/EmptyMessage'
import TitlePreview from '@/components/FilesView/TitlePreview'
import CopyInput from '@/components/Others/Forms/CopyInput'
import ListInfoItem from '@/components/Others/ListInfoItem'
import ListInfo from '@/components/Others/ListInfo'
import {mapGetters} from 'vuex'
import {events} from "@/bus"
export default {
name: 'InfoSidebar',
components: {
FilePreviewDetail,
ImageMetaData,
EmptyMessage,
TitlePreview,
ListInfoItem,
UnlockIcon,
CopyInput,
Edit2Icon,
LockIcon,
ListInfo,
},
computed: {
...mapGetters([
'permissionOptions',
'clipboard',
]),
isEmpty() {
return this.clipboard.length === 0
},
isSingleFile() {
return this.clipboard.length === 1
},
singleFile() {
return this.clipboard[0]
},
canShowMetaData() {
return this.clipboard[0].metadata && this.clipboard[0].metadata.ExifImageWidth
},
isLocked() {
return this.clipboard[0].shared.is_protected
},
sharedInfo() {
let title = this.permissionOptions.find(option => {
return option.value === this.clipboard[0].shared.permission
})
return title ? this.$t(title.label) : this.$t('shared.can_download')
},
},
methods: {
openShareOptions() {
events.$emit('popup:open', {name: 'share-edit', item: this.clipboard[0]})
},
openMoveOptions() {
events.$emit("popup:open", {name: "move", item: this.clipboard});
}
}
}
</script>
<style scoped lang="scss">
.info-wrapper {
padding-bottom: 20px;
height: 100%;
}
.info-headline {
margin-bottom: 20px;
border-radius: 8px;
}
.share-link {
display: flex;
width: 100%;
align-items: center;
margin-top: 10px;
.lock-icon {
display: inline-block;
width: 15px;
margin-right: 9px;
cursor: pointer;
}
.copy-share-link {
width: 100%;
}
}
</style>
@@ -3,15 +3,17 @@
<!-- Go back--> <!-- Go back-->
<div @click="goBack" class="go-back-button"> <div @click="goBack" class="go-back-button">
<chevron-left-icon size="17" :class="{'is-visible': browseHistory.length > 1}" class="icon-back" /> <chevron-left-icon :class="{'is-visible': browseHistory.length > 1}" size="17" class="icon-back" />
</div> </div>
<!--Folder Title--> <!--Folder Title-->
<div class="directory-name">{{ directoryName }}</div> <div class="directory-name">
{{ directoryName }}
</div>
<!--More Actions--> <!--More Actions-->
<div class="more-actions-button"> <div class="more-actions-button">
<div class="tap-area" @click="showMobileNavigation" v-if="$checkPermission('master')"> <div v-if="$checkPermission('master')" @click="showMobileNavigation" class="tap-area">
<menu-icon size="17" /> <menu-icon size="17" />
</div> </div>
</div> </div>
@@ -38,7 +40,7 @@
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
'fileInfoVisible', 'isVisibleSidebar',
'FilePreviewType', 'FilePreviewType',
'currentFolder', 'currentFolder',
'browseHistory', 'browseHistory',
@@ -1,26 +1,41 @@
<template> <template>
<div class="wrapper"> <div class="wrapper">
<div class="icon-wrapper"> <div class="icon-wrapper">
<CheckSquareIcon class="icon text-theme" size="21" /> <CheckSquareIcon v-if="icon === 'check-square'" class="icon text-theme" size="21" />
<image-icon v-if="icon === 'image'" class="icon text-theme" size="21" />
<video-icon v-if="icon === 'video'" class="icon text-theme" size="21" />
<folder-icon v-if="icon === 'folder'" class="icon text-theme" size="21" />
<file-icon v-if="icon === 'file'" class="icon text-theme" size="21" />
</div> </div>
<div class="text"> <div class="text">
<span class="title">{{ title }}</span> <span class="title">{{ title }}</span>
<span class="count">{{ subtitle }}</span> <span class="subtitle">{{ subtitle }}</span>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import {CheckSquareIcon} from "vue-feather-icons" import {
CheckSquareIcon,
FolderIcon,
ImageIcon,
VideoIcon,
FileIcon,
} from "vue-feather-icons"
export default { export default {
name: 'MultiSelected', name: 'TitlePreview',
props: [ props: [
'subtitle',
'title', 'title',
'subtitle' 'icon',
], ],
components: { components: {
CheckSquareIcon CheckSquareIcon,
FolderIcon,
ImageIcon,
VideoIcon,
FileIcon,
}, },
} }
</script> </script>
@@ -31,7 +46,7 @@ export default {
.wrapper { .wrapper {
display: flex; display: flex;
justify-content: center; align-items: flex-start;
.text { .text {
padding-left: 10px; padding-left: 10px;
@@ -46,7 +61,7 @@ export default {
color: $text; color: $text;
} }
.count { .subtitle {
@include font-size(12); @include font-size(12);
font-weight: 600; font-weight: 600;
color: $text-muted; color: $text-muted;
@@ -55,17 +70,8 @@ export default {
} }
.icon-wrapper { .icon-wrapper {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
text-align: center;
cursor: pointer;
white-space: nowrap;
outline: none;
border: none;
polyline, path { polyline, path, rect, circle, polyline {
color: inherit; color: inherit;
} }
} }
@@ -78,7 +84,7 @@ export default {
color: $dark_mode_text_primary; color: $dark_mode_text_primary;
} }
.count { .subtitle {
color: $dark_mode_text_secondary; color: $dark_mode_text_secondary;
} }
} }
@@ -175,12 +175,12 @@ export default {
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
.input-wrapper { .input-wrapper {
background: $dark_mode_foreground; background: lighten($dark_mode_foreground, 3%);
.email-list { .email-list {
.email-input { .email-input {
background: $dark_mode_foreground; background: lighten($dark_mode_foreground, 3%);
color: $dark_mode_text_primary; color: $dark_mode_text_primary;
&::placeholder { &::placeholder {
@@ -190,6 +190,4 @@ export default {
} }
} }
} }
</style> </style>
@@ -85,7 +85,7 @@
.box-item { .box-item {
border-color: $dark_mode_border_color; border-color: $dark_mode_border_color;
background: $dark_mode_foreground; background: lighten($dark_mode_foreground, 3%);
} }
} }
} }
@@ -13,7 +13,7 @@
<div v-if="! isLoadingTree && navigation"> <div v-if="! isLoadingTree && navigation">
<ThumbnailItem v-if="clipboard.length < 2 || isSelectedItem" class="item-thumbnail" :item="pickedItem" info="location" /> <ThumbnailItem v-if="clipboard.length < 2 || isSelectedItem" class="item-thumbnail" :item="pickedItem" info="location" />
<MultiSelected class="multiple-selected" <TitlePreview class="multiple-selected"
:title="$t('file_detail.selected_multiple')" :title="$t('file_detail.selected_multiple')"
:subtitle="this.clipboard.length + ' ' + $tc('file_detail.items', this.clipboard.length)" :subtitle="this.clipboard.length + ' ' + $tc('file_detail.items', this.clipboard.length)"
v-if="clipboard.length > 1 && !isSelectedItem" /> v-if="clipboard.length > 1 && !isSelectedItem" />
@@ -43,7 +43,7 @@
<script> <script>
import PopupWrapper from '@/components/Others/Popup/PopupWrapper' import PopupWrapper from '@/components/Others/Popup/PopupWrapper'
import PopupActions from '@/components/Others/Popup/PopupActions' import PopupActions from '@/components/Others/Popup/PopupActions'
import MultiSelected from '@/components/FilesView/MultiSelected' import TitlePreview from '@/components/FilesView/TitlePreview'
import PopupContent from '@/components/Others/Popup/PopupContent' import PopupContent from '@/components/Others/Popup/PopupContent'
import PopupHeader from '@/components/Others/Popup/PopupHeader' import PopupHeader from '@/components/Others/Popup/PopupHeader'
import ThumbnailItem from '@/components/Others/ThumbnailItem' import ThumbnailItem from '@/components/Others/ThumbnailItem'
@@ -58,7 +58,7 @@
name: 'MoveItemPopup', name: 'MoveItemPopup',
components: { components: {
ThumbnailItem, ThumbnailItem,
MultiSelected, TitlePreview,
PopupWrapper, PopupWrapper,
PopupActions, PopupActions,
PopupContent, PopupContent,
+22 -18
View File
@@ -7,6 +7,28 @@ import axios from 'axios'
const Helpers = { const Helpers = {
install(Vue) { install(Vue) {
Vue.prototype.$searchFiles = debounce(function (value) {
if (value !== '' && typeof value !== 'undefined') {
this.$store.dispatch('getSearchResult', value)
} else if (typeof value !== 'undefined') {
if (this.$store.getters.currentFolder) {
// Get back after delete query to previously folder
if (this.$isThisLocation('public')) {
this.$store.dispatch('browseShared', [{folder: this.$store.getters.currentFolder, back: true, init: false}])
} else {
this.$store.dispatch('getFolder', [{folder: this.$store.getters.currentFolder, back: true, init: false}])
}
}
this.$store.commit('CHANGE_SEARCHING_STATE', false)
}
}, 300)
Vue.prototype.$updateText = debounce(function (route, name, value) { Vue.prototype.$updateText = debounce(function (route, name, value) {
let enableEmptyInput = ['mimetypes_blacklist', 'google_analytics', 'upload_limit'] let enableEmptyInput = ['mimetypes_blacklist', 'google_analytics', 'upload_limit']
@@ -253,24 +275,6 @@ const Helpers = {
}) })
} }
Vue.prototype.$isMinimalScale = function () {
let sizeType = store.getters.filesViewWidth
return sizeType === 'minimal-scale'
}
Vue.prototype.$isCompactScale = function () {
let sizeType = store.getters.filesViewWidth
return sizeType === 'compact-scale'
}
Vue.prototype.$isFullScale = function () {
let sizeType = store.getters.filesViewWidth
return sizeType === 'full-scale'
}
Vue.prototype.$isSomethingWrong = function () { Vue.prototype.$isSomethingWrong = function () {
events.$emit('alert:open', { events.$emit('alert:open', {
title: i18n.t('popup_error.title'), title: i18n.t('popup_error.title'),
+1 -1
View File
@@ -91,7 +91,7 @@ Vue.config.productionTip = false;
// Handle position of Drag & Drop Ghost // Handle position of Drag & Drop Ghost
document.addEventListener('drag', event => { document.addEventListener('drag', event => {
let multiSelect = document.getElementById('multi-select-ui') let multiSelect = document.getElementById('drag-ui')
multiSelect.style.top = event.clientY + 20 + 'px' multiSelect.style.top = event.clientY + 20 + 'px'
multiSelect.style.left = event.clientX + 'px' multiSelect.style.left = event.clientX + 'px'
+4 -4
View File
@@ -3,7 +3,7 @@ import axios from "axios";
import Vue from "vue"; import Vue from "vue";
const defaultState = { const defaultState = {
fileInfoPanelVisible: localStorage.getItem('file_info_visibility') === 'true' || false, isVisibleSidebar: localStorage.getItem('file_info_visibility') === 'true' || false,
FilePreviewType: localStorage.getItem('preview_type') || 'list', FilePreviewType: localStorage.getItem('preview_type') || 'list',
config: undefined, config: undefined,
index: undefined, index: undefined,
@@ -982,7 +982,7 @@ const actions = {
}, },
fileInfoToggle: (context, visibility = undefined) => { fileInfoToggle: (context, visibility = undefined) => {
if (!visibility) { if (!visibility) {
if (context.state.fileInfoPanelVisible) { if (context.state.isVisibleSidebar) {
context.commit('FILE_INFO_TOGGLE', false) context.commit('FILE_INFO_TOGGLE', false)
} else { } else {
context.commit('FILE_INFO_TOGGLE', true) context.commit('FILE_INFO_TOGGLE', true)
@@ -1025,7 +1025,7 @@ const mutations = {
state.config.stripe_public_key = data state.config.stripe_public_key = data
}, },
FILE_INFO_TOGGLE(state, isVisible) { FILE_INFO_TOGGLE(state, isVisible) {
state.fileInfoPanelVisible = isVisible state.isVisibleSidebar = isVisible
localStorage.setItem('file_info_visibility', isVisible) localStorage.setItem('file_info_visibility', isVisible)
}, },
@@ -1044,7 +1044,7 @@ const mutations = {
} }
const getters = { const getters = {
fileInfoVisible: state => state.fileInfoPanelVisible, isVisibleSidebar: state => state.isVisibleSidebar,
FilePreviewType: state => state.FilePreviewType, FilePreviewType: state => state.FilePreviewType,
expirationList: state => state.expirationList, expirationList: state => state.expirationList,
homeDirectory: state => state.homeDirectory, homeDirectory: state => state.homeDirectory,
+2 -2
View File
@@ -74,7 +74,7 @@
<script> <script>
import UpgradeSidebarBanner from '@/components/Others/UpgradeSidebarBanner' import UpgradeSidebarBanner from '@/components/Others/UpgradeSidebarBanner'
import TreeMenuNavigator from '@/components/Others/TreeMenuNavigator' import TreeMenuNavigator from '@/components/Others/TreeMenuNavigator'
import MultiSelected from '@/components/FilesView/MultiSelected' import TitlePreview from '@/components/FilesView/TitlePreview'
import ContentFileView from '@/components/Others/ContentFileView' import ContentFileView from '@/components/Others/ContentFileView'
import ContentSidebar from '@/components/Sidebar/ContentSidebar' import ContentSidebar from '@/components/Sidebar/ContentSidebar'
import ContentGroup from '@/components/Sidebar/ContentGroup' import ContentGroup from '@/components/Sidebar/ContentGroup'
@@ -94,7 +94,7 @@ export default {
UpgradeSidebarBanner, UpgradeSidebarBanner,
TreeMenuNavigator, TreeMenuNavigator,
ContentFileView, ContentFileView,
MultiSelected, TitlePreview,
ContentSidebar, ContentSidebar,
UploadCloudIcon, UploadCloudIcon,
ContentGroup, ContentGroup,