diff --git a/public/assets/pages/ctrl_viewerpage.js b/public/assets/pages/ctrl_viewerpage.js index 16fc2faf..307efb91 100644 --- a/public/assets/pages/ctrl_viewerpage.js +++ b/public/assets/pages/ctrl_viewerpage.js @@ -50,6 +50,16 @@ function loadModule(appName) { throw new ApplicationError("Internal Error", `Unknown opener app "${appName}" at "${getCurrentPath()}"`); } }; +const loadModuleWithMemory = (function() { + const memory = {}; + return function(appName) { + if (memory[appName]) return Promise.resolve(memory[appName]); + return loadModule(appName).then((module) => { + memory[appName] = module; + return module; + }); + }; +})(); export default WithShell(async function(render) { const $page = createElement(`
`); @@ -58,7 +68,7 @@ export default WithShell(async function(render) { // feature: render viewer application effect(rxjs.of(getConfig("mime", {})).pipe( rxjs.map((mimes) => opener(basename(getCurrentPath()), mimes)), - rxjs.mergeMap(([opener, opts]) => rxjs.from(loadModule(opener)).pipe(rxjs.switchMap(async(module) => { + rxjs.mergeMap(([opener, opts]) => rxjs.from(loadModuleWithMemory(opener)).pipe(rxjs.switchMap(async(module) => { module.default(createRender($page), { ...opts, acl$: options(), getFilename, getDownloadUrl }); }))), rxjs.catchError(ctrlError()), diff --git a/public/assets/pages/viewerpage/application_image.css b/public/assets/pages/viewerpage/application_image.css index b89db984..db269403 100644 --- a/public/assets/pages/viewerpage/application_image.css +++ b/public/assets/pages/viewerpage/application_image.css @@ -76,11 +76,8 @@ body:not(.dark-mode) .component_imageviewer .component_image_container .fullscre z-index: 1; min-width: 0px; transition: 0.15s ease min-width; - background: #949290; - color: var(--dark); -} -.dark-mode .component_imageviewer .images_aside { background: #f2f2f2; + color: var(--dark); } .component_imageviewer .images_aside.open { min-width: 300px; @@ -129,6 +126,12 @@ body:not(.dark-mode) .component_imageviewer .component_image_container .fullscre height: 18px; float: right; cursor: pointer; + padding: 5px; + margin: -5px -5px 0 0; +} +.component_imageviewer .images_aside .header .component_icon:hover { + background: #0000000a; + border-radius: 50%; } .component_imageviewer .images_aside [data-bind="body"] { padding: 10px 20px 0px 20px; @@ -154,7 +157,7 @@ body:not(.dark-mode) .component_imageviewer .component_image_container .fullscre display: flex; justify-content: space-between; margin: 5px 0; - border-top: 1px solid #ffffff15; + border-top: 1px solid #0000000a; padding-top: 5px; text-align: right; font-size: 0.85em; @@ -163,5 +166,5 @@ body:not(.dark-mode) .component_imageviewer .component_image_container .fullscre margin-right: 5px; } .component_imageviewer .images_aside .meta_key .value { - color: var(--bg-color); + color: var(--light); } diff --git a/public/assets/pages/viewerpage/application_image.js b/public/assets/pages/viewerpage/application_image.js index 9d49d19a..98fa6739 100644 --- a/public/assets/pages/viewerpage/application_image.js +++ b/public/assets/pages/viewerpage/application_image.js @@ -14,11 +14,9 @@ import notification from "../../components/notification.js"; import t from "../../locales/index.js"; import ctrlError from "../ctrl_error.js"; -import { transition } from "./common.js"; - import componentMetadata, { init as initMetadata } from "./application_image_metadata.js"; +import componentToolbox, { init as initToolbox } from "./application_image_toolbox.js"; import ctrlDownloader, { init as initDownloader } from "./application_downloader.js"; -import componentPager, { init as initPager } from "./component_pager.js"; import { renderMenubar, buttonDownload, buttonFullscreen } from "./component_menubar.js"; @@ -33,14 +31,13 @@ export default function(render, { getFilename, getDownloadUrl, mime, hasMenubar