Separate nav ui components

cap
Varun Patil 2022-12-09 21:05:48 -08:00
parent 8520d0dc1e
commit 294c4f8a60
13 changed files with 461 additions and 108 deletions

View File

@ -57,6 +57,14 @@ class PageController extends Controller
return null;
}
// send html page
if ($this->request->getParam('ionic')) {
header('Content-Type: text/html; charset=utf-8');
header('Content-Security-Policy: default-src \'self\' \'unsafe-eval\' \'unsafe-inline\' data: blob: filesystem:; img-src * data: blob: filesystem:; media-src * data: blob: filesystem:; connect-src * data: blob: filesystem:; style-src * \'unsafe-inline\' data: blob: filesystem:; font-src * data: blob: filesystem:; frame-src * data: blob: filesystem:; worker-src * data: blob: filesystem:; object-src * data: blob: filesystem:;');
readfile(__DIR__.'/../../src/index.html');
exit;
}
// Scripts
Util::addScript($this->appName, 'memories-main');
$this->eventDispatcher->dispatchTyped(new LoadSidebar());

View File

@ -1,55 +1,43 @@
<template>
<FirstStart v-if="isFirstStart" />
<NcContent
app-name="memories"
v-else
:class="{
'remove-gap': removeOuterGap,
}"
>
<NcAppNavigation v-if="showNavigation" ref="nav">
<template id="app-memories-navigation" #list>
<NcAppNavigationItem
<UiContent app-name="memories" v-else>
<UiNavigation v-if="showNavigation" ref="nav">
<template #list>
<UiNavigationItem
v-for="item in navItems"
:key="item.name"
:to="{ name: item.name }"
:title="item.title"
@click="linkClick"
exact
>
<component :is="item.icon" slot="icon" :size="20" />
</NcAppNavigationItem>
</UiNavigationItem>
</template>
<template #footer>
<NcAppNavigationSettings :title="t('memories', 'Settings')">
<UiNavigationSettings :title="t('memories', 'Settings')">
<Settings />
</NcAppNavigationSettings>
</UiNavigationSettings>
</template>
</NcAppNavigation>
</UiNavigation>
<NcAppContent>
<div class="outer">
<UiAppContent>
<router-view />
</div>
</NcAppContent>
</NcContent>
</UiAppContent>
</UiContent>
</template>
<script lang="ts">
import { Component, Mixins, Watch } from "vue-property-decorator";
import NcContent from "@nextcloud/vue/dist/Components/NcContent";
import NcAppContent from "@nextcloud/vue/dist/Components/NcAppContent";
import NcAppNavigation from "@nextcloud/vue/dist/Components/NcAppNavigation";
const NcAppNavigationItem = () =>
import("@nextcloud/vue/dist/Components/NcAppNavigationItem");
const NcAppNavigationSettings = () =>
import("@nextcloud/vue/dist/Components/NcAppNavigationSettings");
import UiContent from "./components/ui/UiContent.vue";
import UiAppContent from "./components/ui/UiAppContent.vue";
import UiNavigation from "./components/ui/UiNavigation.vue";
import UiNavigationItem from "./components/ui/UiNavigationItem.vue";
import UiNavigationSettings from "./components/ui/UiNavigationSettings.vue";
import { generateUrl } from "@nextcloud/router";
import { getCurrentUser } from "@nextcloud/auth";
import { translate as t } from "@nextcloud/l10n";
import Timeline from "./components/Timeline.vue";
@ -72,11 +60,11 @@ import MapIcon from "vue-material-design-icons/Map.vue";
@Component({
components: {
NcContent,
NcAppContent,
NcAppNavigation,
NcAppNavigationItem,
NcAppNavigationSettings,
UiContent,
UiAppContent,
UiNavigation,
UiNavigationItem,
UiNavigationSettings,
Timeline,
Settings,
@ -164,11 +152,6 @@ export default class App extends Mixins(GlobalMixin, UserConfig) {
private navItems = [];
get ncVersion() {
const version = (<any>window.OC).config.version.split(".");
return Number(version[0]);
}
get recognize() {
if (!this.config_recognizeEnabled) {
return false;
@ -201,10 +184,6 @@ export default class App extends Mixins(GlobalMixin, UserConfig) {
return this.config_albumsEnabled;
}
get removeOuterGap() {
return this.ncVersion >= 25;
}
get showNavigation() {
return this.$route.name !== "folder-share";
}
@ -264,6 +243,7 @@ export default class App extends Mixins(GlobalMixin, UserConfig) {
async beforeMount() {
if ("serviceWorker" in navigator) {
return;
// Use the window load event to keep the page load performant
window.addEventListener("load", async () => {
try {
@ -282,8 +262,8 @@ export default class App extends Mixins(GlobalMixin, UserConfig) {
}
linkClick() {
const nav: any = this.$refs.nav;
if (globalThis.windowInnerWidth <= 1024) nav?.toggleNavigation(false);
if (globalThis.windowInnerWidth <= 1024)
(<any>this.$refs.nav)?.toggleNavigation(false);
}
doRouteChecks() {
@ -312,53 +292,11 @@ export default class App extends Mixins(GlobalMixin, UserConfig) {
}
</script>
<style scoped lang="scss">
.outer {
padding: 0 0 0 44px;
height: 100%;
width: 100%;
}
@media (max-width: 768px) {
.outer {
padding: 0px;
// Get rid of padding on img-outer (1px on mobile)
// Also need to make sure we don't end up with a scrollbar -- see below
margin-left: -1px;
width: calc(100% + 3px); // 1px extra here because ... reasons
}
}
</style>
<style lang="scss">
body {
overflow: hidden;
}
// Nextcloud 25+: get rid of gap and border radius at right
#content-vue.remove-gap {
// was var(--body-container-radius)
// now set on #app-navigation-vue
border-radius: 0;
width: calc(100% - var(--body-container-margin) * 1); // was *2
// Reduce size of navigation. NC <25 doesn't like this on mobile.
#app-navigation-vue {
max-width: 250px;
}
}
// Prevent content overflow on NC <25
#content-vue {
max-height: 100vh;
// https://bugs.webkit.org/show_bug.cgi?id=160953
overflow: visible;
#app-navigation-vue {
border-top-left-radius: var(--body-container-radius);
border-bottom-left-radius: var(--body-container-radius);
}
margin: 0;
padding: 0;
}
// Top bar is above everything else on mobile

23
src/bootstrap.ts 100644
View File

@ -0,0 +1,23 @@
globalThis.OC ||= {
webroot: "",
isUserAdmin: () => true,
L10N: {
translate: (app, text, vars, count, options) => text,
translatePlural: (app, textSingular, textPlural, count, vars, options) =>
textSingular,
},
config: {
modRewriteWorking: true,
version: "25.0.0.15",
},
coreApps: ["core"],
appswebroots: {
memories: "/apps/memories",
},
} as any;
globalThis.OCA ||= {};

View File

@ -78,7 +78,7 @@ export default class FolderShareModal extends Mixins(GlobalMixin, UserConfig) {
public open() {
this.folderPath = utils.getFolderRoutePath(this.config_foldersPath);
this.show = true;
globalThis.OCA.Files.Sidebar.setActiveTab("sharing");
globalThis.OCA.Files?.Sidebar?.setActiveTab("sharing");
this.refreshUrls();
}

View File

@ -62,7 +62,7 @@ export default class Modal extends Vue {
mounted() {
if (this.sidebar) {
globalThis.OCA.Files.Sidebar.open(this.sidebar);
globalThis.OCA.Files?.Sidebar?.open(this.sidebar);
}
}

View File

@ -0,0 +1,38 @@
<template>
<NcAppContent>
<div class="outer">
<slot />
</div>
</NcAppContent>
</template>
<script lang="ts">
import { Component, Vue } from "vue-property-decorator";
import NcAppContent from "@nextcloud/vue/dist/Components/NcAppContent";
@Component({
components: {
NcAppContent,
},
})
export default class UiAppContent extends Vue {}
</script>
<style scoped lang="scss">
.outer {
padding: 0 0 0 44px;
height: 100%;
width: 100%;
}
@media (max-width: 768px) {
.outer {
padding: 0px;
// Get rid of padding on img-outer (1px on mobile)
// Also need to make sure we don't end up with a scrollbar -- see below
margin-left: -1px;
width: calc(100% + 3px); // 1px extra here because ... reasons
}
}
</style>

View File

@ -0,0 +1,60 @@
<template>
<NcContent
app-name="memories"
:class="{
'remove-gap': removeOuterGap,
}"
>
<slot />
</NcContent>
</template>
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
import NcContent from "@nextcloud/vue/dist/Components/NcContent";
@Component({
components: {
NcContent,
},
})
export default class UiContent extends Vue {
@Prop() public appName!: string;
get removeOuterGap() {
return this.ncVersion >= 25;
}
get ncVersion() {
const version = (<any>window.OC).config.version.split(".");
return Number(version[0]);
}
}
</script>
<style lang="scss">
// Nextcloud 25+: get rid of gap and border radius at right
#content-vue.remove-gap {
// was var(--body-container-radius)
// now set on #app-navigation-vue
border-radius: 0;
width: calc(100% - var(--body-container-margin) * 1); // was *2
// Reduce size of navigation. NC <25 doesn't like this on mobile.
#app-navigation-vue {
max-width: 250px;
}
}
// Prevent content overflow on NC <25
#content-vue {
max-height: 100vh;
// https://bugs.webkit.org/show_bug.cgi?id=160953
overflow: visible;
#app-navigation-vue {
border-top-left-radius: var(--body-container-radius);
border-bottom-left-radius: var(--body-container-radius);
}
}
</style>

View File

@ -0,0 +1,26 @@
<template>
<NcAppNavigation ref="nav">
<template slot="list">
<slot name="list" />
</template>
<template slot="footer">
<slot name="footer" />
</template>
</NcAppNavigation>
</template>
<script lang="ts">
import { Component, Vue } from "vue-property-decorator";
import NcAppNavigation from "@nextcloud/vue/dist/Components/NcAppNavigation";
@Component({
components: {
NcAppNavigation,
},
})
export default class UiNavigation extends Vue {
public toggleNavigation() {
(<any>this.$refs.nav)?.toggleNavigation(false);
}
}
</script>

View File

@ -0,0 +1,23 @@
<template>
<NcAppNavigationItem :title="title" :to="to" @click="click" exact>
<template slot="icon">
<slot name="icon" />
</template>
</NcAppNavigationItem>
</template>
<script lang="ts">
import { Component, Emit, Prop, Vue } from "vue-property-decorator";
import NcAppNavigationItem from "@nextcloud/vue/dist/Components/NcAppNavigationItem";
@Component({
components: {
NcAppNavigationItem,
},
})
export default class UiNavigationItem extends Vue {
@Prop() title!: string;
@Prop() to!: { name: string };
@Emit("click") public click() {}
}
</script>

View File

@ -0,0 +1,19 @@
<template>
<NcAppNavigationSettings :title="title">
<slot />
</NcAppNavigationSettings>
</template>
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
import NcAppNavigationSettings from "@nextcloud/vue/dist/Components/NcAppNavigationSettings";
@Component({
components: {
NcAppNavigationSettings,
},
})
export default class UiNavigationSettings extends Vue {
@Prop() title!: string;
}
</script>

View File

@ -969,8 +969,8 @@ export default class Viewer extends Mixins(GlobalMixin) {
private async openSidebar(photo?: IPhoto) {
const fInfo = await dav.getFiles([photo || this.currentPhoto]);
globalThis.OCA?.Files?.Sidebar?.setFullScreenMode?.(true);
globalThis.OCA.Files.Sidebar.setActiveTab("memories-metadata");
globalThis.OCA.Files.Sidebar.open(fInfo[0].filename);
globalThis.OCA.Files?.Sidebar?.setActiveTab("memories-metadata");
globalThis.OCA.Files?.Sidebar?.open(fInfo[0].filename);
}
private async updateSizeWithoutAnim() {

216
src/index.html 100644
View File

@ -0,0 +1,216 @@
<!DOCTYPE html>
<html>
<head>
<title>Memories</title>
<link
rel="stylesheet"
media=""
href="/apps/theming/theme/default.css?plain=1"
class="theme"
/><link
rel="stylesheet"
media="(prefers-color-scheme: light)"
href="/apps/theming/theme/light.css?plain=1"
class="theme"
/><link
rel="stylesheet"
media="(prefers-color-scheme: dark)"
href="/apps/theming/theme/dark.css?plain=1"
class="theme"
/><link
rel="stylesheet"
media="(prefers-contrast: more)"
href="/apps/theming/theme/light-highcontrast.css?plain=1"
class="theme"
/><link
rel="stylesheet"
media="(prefers-color-scheme: dark) and (prefers-contrast: more)"
href="/apps/theming/theme/dark-highcontrast.css?plain=1"
class="theme"
/><link
rel="stylesheet"
media=""
href="/apps/theming/theme/light.css?plain=0"
class="theme"
/><link
rel="stylesheet"
media=""
href="/apps/theming/theme/dark.css?plain=0"
class="theme"
/><link
rel="stylesheet"
media=""
href="/apps/theming/theme/light-highcontrast.css?plain=0"
class="theme"
/><link
rel="stylesheet"
media=""
href="/apps/theming/theme/dark-highcontrast.css?plain=0"
class="theme"
/><link
rel="stylesheet"
media=""
href="/apps/theming/theme/opendyslexic.css?plain=0"
class="theme"
/>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script defer src="js/memories-main.js"></script>
</head>
<body>
<div id="content" class="app-memories" role="main">
<div id="app-content-vue"></div>
</div>
<input
type="hidden"
id="initial-state-comments-max-message-length"
value="MTAwMA=="
/>
<input
type="hidden"
id="initial-state-comments-maxAutoCompleteResults"
value="MTA="
/>
<input
type="hidden"
id="initial-state-memories-timelinePath"
value="IlwvXC9QaG90b3Mi"
/>
<input
type="hidden"
id="initial-state-memories-foldersPath"
value="IlwvIg=="
/>
<input
type="hidden"
id="initial-state-memories-showHidden"
value="ImZhbHNlIg=="
/>
<input
type="hidden"
id="initial-state-memories-systemtags"
value="dHJ1ZQ=="
/>
<input type="hidden" id="initial-state-memories-maps" value="ZmFsc2U=" />
<input
type="hidden"
id="initial-state-memories-recognize"
value="dHJ1ZQ=="
/>
<input
type="hidden"
id="initial-state-memories-facerecognitionInstalled"
value="dHJ1ZQ=="
/>
<input
type="hidden"
id="initial-state-memories-facerecognitionEnabled"
value="dHJ1ZQ=="
/>
<input type="hidden" id="initial-state-memories-albums" value="dHJ1ZQ==" />
<input
type="hidden"
id="initial-state-memories-version"
value="IjQuOS4yIg=="
/>
<input
type="hidden"
id="initial-state-memories-notranscode"
value="ZmFsc2U="
/>
<input
type="hidden"
id="initial-state-notifications-sound_notification"
value="dHJ1ZQ=="
/>
<input
type="hidden"
id="initial-state-notifications-sound_talk"
value="dHJ1ZQ=="
/>
<input
type="hidden"
id="initial-state-notifications-throttled_push_notifications"
value="ZmFsc2U="
/>
<input
type="hidden"
id="initial-state-theming-background"
value="ImthbWlsLXBvcmVtYmluc2tpLWNsb3Vkcy5qcGci"
/>
<input
type="hidden"
id="initial-state-theming-themingDefaultBackground"
value="IiI="
/>
<input
type="hidden"
id="initial-state-theming-shippedBackgrounds"
value="eyJhbmF0b2x5LW1pa2hhbHRzb3YtYnV0dGVyZmx5LXdpbmctc2NhbGUuanBnIjp7ImF0dHJpYnV0aW9uIjoiQnV0dGVyZmx5IHdpbmcgc2NhbGUgKEFuYXRvbHkgTWlraGFsdHNvdiwgQ0MgQlktU0EpIiwiYXR0cmlidXRpb25fdXJsIjoiaHR0cHM6XC9cL2NvbW1vbnMud2lraW1lZGlhLm9yZ1wvd2lraVwvRmlsZTolRDAlQTclRDAlQjUlRDElODglRDElODMlRDAlQjklRDAlQkElRDAlQjhfJUQwJUJBJUQxJTgwJUQxJThCJUQwJUJCJUQwJUIwXyVEMCVCMSVEMCVCMCVEMCVCMSVEMCVCRSVEMSU4NyVEMCVCQSVEMCVCOC5qcGciLCJwcmltYXJ5X2NvbG9yIjoiI2E1M2MxNyJ9LCJiZXJuaWUtY2V0b25pYS1hdXJhdGEtdGFrZS1vZmYtY29tcG9zaXRpb24uanBnIjp7ImF0dHJpYnV0aW9uIjoiQ2V0b25pYSBhdXJhdGEgdGFrZSBvZmYgY29tcG9zaXRpb24gKEJlcm5pZSwgUHVibGljIERvbWFpbikiLCJhdHRyaWJ1dGlvbl91cmwiOiJodHRwczpcL1wvY29tbW9ucy53aWtpbWVkaWEub3JnXC93aWtpXC9GaWxlOkNldG9uaWFfYXVyYXRhX3Rha2Vfb2ZmX2NvbXBvc2l0aW9uXzA1MTcyMDA5LmpwZyIsInRoZW1pbmciOiJkYXJrIiwicHJpbWFyeV9jb2xvciI6IiM1NjYzM2QifSwiZGVqYW4ta3JzbWFub3ZpYy1yaWJiZWQtcmVkLW1ldGFsLmpwZyI6eyJhdHRyaWJ1dGlvbiI6IlJpYmJlZCByZWQgbWV0YWwgKERlamFuIEtyc21hbm92aWMsIENDIEJZKSIsImF0dHJpYnV0aW9uX3VybCI6Imh0dHBzOlwvXC93d3cuZmxpY2tyLmNvbVwvcGhvdG9zXC9kZWphbmtyc21hbm92aWNcLzQyOTcxNDU2Nzc0XC8iLCJwcmltYXJ5X2NvbG9yIjoiIzljNDIzNiJ9LCJlZHVhcmRvLW5ldmVzLXBlZHJhLWF6dWwuanBnIjp7ImF0dHJpYnV0aW9uIjoiUGVkcmEgYXp1bCBtaWxreSB3YXkgKEVkdWFyZG8gTmV2ZXMsIENDIEJZLVNBKSIsImF0dHJpYnV0aW9uX3VybCI6Imh0dHBzOlwvXC9jb21tb25zLndpa2ltZWRpYS5vcmdcL3dpa2lcL0ZpbGU6UGVkcmFfQXp1bF9NaWxreV9XYXkuanBnIiwicHJpbWFyeV9jb2xvciI6IiM0ZjYwNzEifSwiZXVyb3BlYW4tc3BhY2UtYWdlbmN5LWJhcmVudHMtYmxvb20uanBnIjp7ImF0dHJpYnV0aW9uIjoiQmFyZW50cyBibG9vbSAoRXVyb3BlYW4gU3BhY2UgQWdlbmN5LCBDQyBCWS1TQSkiLCJhdHRyaWJ1dGlvbl91cmwiOiJodHRwczpcL1wvd3d3LmVzYS5pbnRcL0VTQV9NdWx0aW1lZGlhXC9JbWFnZXNcLzIwMTZcLzA4XC9CYXJlbnRzX2Jsb29tIiwicHJpbWFyeV9jb2xvciI6IiMzOTY0NzUifSwiaGFubmVzLWZyaXR6LWZsaXBwaXR5LWZsb3BwaXR5LmpwZyI6eyJhdHRyaWJ1dGlvbiI6IkZsaXBwaXR5IGZsb3BwaXR5IChIYW5uZXMgRnJpdHosIENDIEJZLVNBKSIsImF0dHJpYnV0aW9uX3VybCI6Imh0dHA6XC9cL2hhbm5lcy5waG90b3NcL2ZsaXBwaXR5LWZsb3BwaXR5IiwicHJpbWFyeV9jb2xvciI6IiM5ODQxNWEifSwiaGFubmVzLWZyaXR6LXJvdWxldHRlLmpwZyI6eyJhdHRyaWJ1dGlvbiI6IlJvdWxldHRlIChIYW5uZXMgRnJpdHosIENDIEJZLVNBKSIsImF0dHJpYnV0aW9uX3VybCI6Imh0dHA6XC9cL2hhbm5lcy5waG90b3NcL3JvdWxldHRlIiwicHJpbWFyeV9jb2xvciI6IiM4NDUzMzQifSwiaGFubmVzLWZyaXR6LXNlYS1zcHJheS5qcGciOnsiYXR0cmlidXRpb24iOiJTZWEgc3ByYXkgKEhhbm5lcyBGcml0eiwgQ0MgQlktU0EpIiwiYXR0cmlidXRpb25fdXJsIjoiaHR0cDpcL1wvaGFubmVzLnBob3Rvc1wvc2VhLXNwcmF5IiwicHJpbWFyeV9jb2xvciI6IiM0ZjYwNzEifSwia2FtaWwtcG9yZW1iaW5za2ktY2xvdWRzLmpwZyI6eyJhdHRyaWJ1dGlvbiI6IkNsb3VkcyAoS2FtaWwgUG9yZW1iaVx1MDE0NHNraSwgQ0MgQlktU0EpIiwiYXR0cmlidXRpb25fdXJsIjoiaHR0cHM6XC9cL3d3dy5mbGlja3IuY29tXC9waG90b3NcL3Bhc3pjemFrMDAwXC84NzE1ODUxNTIxXC8iLCJwcmltYXJ5X2NvbG9yIjoiIzAwODJjOSJ9LCJiZXJuYXJkLXNwcmFnZy1uZXctemVhbGFuZC1mZXJuLmpwZyI6eyJhdHRyaWJ1dGlvbiI6Ik5ldyB6ZWFsYW5kIGZlcm4gKEJlcm5hcmQgU3ByYWdnLCBDQzApIiwiYXR0cmlidXRpb25fdXJsIjoiaHR0cHM6XC9cL2NvbW1vbnMud2lraW1lZGlhLm9yZ1wvd2lraVwvRmlsZTpOWl9GZXJuLihCbGVjaG51bV9jaGFtYmVyc2lpKV8oMTEyNjM1MzQ5MzYpLmpwZyIsInByaW1hcnlfY29sb3IiOiIjMzE2YjI2In0sInJhd3BpeGVsLXBpbmstdGFwaW9jYS1idWJibGVzLmpwZyI6eyJhdHRyaWJ1dGlvbiI6IlBpbmsgdGFwaW9jYSBidWJibGVzIChSYXdwaXhlbCwgQ0MgQlkpIiwiYXR0cmlidXRpb25fdXJsIjoiaHR0cHM6XC9cL3d3dy5mbGlja3IuY29tXC9waG90b3NcL2J5cmF3cGl4ZWxcLzI3NjY1MTQwMjk4XC9pblwvcGhvdG9zdHJlYW1cLyIsInRoZW1pbmciOiJkYXJrIiwicHJpbWFyeV9jb2xvciI6IiM3YjRlN2UifSwibmFzYS13YXhpbmctY3Jlc2NlbnQtbW9vbi5qcGciOnsiYXR0cmlidXRpb24iOiJXYXhpbmcgY3Jlc2NlbnQgbW9vbiAoTkFTQSwgUHVibGljIERvbWFpbikiLCJhdHRyaWJ1dGlvbl91cmwiOiJodHRwczpcL1wvd3d3Lm5hc2EuZ292XC9pbWFnZS1mZWF0dXJlXC9hLXdheGluZy1jcmVzY2VudC1tb29uIiwicHJpbWFyeV9jb2xvciI6IiMwMDVhYzEifSwidG9tbXktY2hhdS1hbHJlYWR5LmpwZyI6eyJhdHRyaWJ1dGlvbiI6IkNpdHlzY2FwZSAoVG9tbXkgQ2hhdSwgQ0MgQlkpIiwiYXR0cmlidXRpb25fdXJsIjoiaHR0cHM6XC9cL3d3dy5mbGlja3IuY29tXC9waG90b3NcLzkwOTc1NjkzQE4wNVwvMTY5MTA5OTkzNjgiLCJwcmltYXJ5X2NvbG9yIjoiIzZhMmFmNCJ9LCJ0b21teS1jaGF1LWxpb24tcm9jay1oaWxsLmpwZyI6eyJhdHRyaWJ1dGlvbiI6Ikxpb24gcm9jayBoaWxsIChUb21teSBDaGF1LCBDQyBCWSkiLCJhdHRyaWJ1dGlvbl91cmwiOiJodHRwczpcL1wvd3d3LmZsaWNrci5jb21cL3Bob3Rvc1wvOTA5NzU2OTNATjA1XC8xNzEzNjQ0MDI0NiIsInRoZW1pbmciOiJkYXJrIiwicHJpbWFyeV9jb2xvciI6IiM3ZjRmNzAifSwibGFsaS1tYXNyaWVyYS15ZWxsb3ctYnJpY2tzLmpwZyI6eyJhdHRyaWJ1dGlvbiI6IlllbGxvdyBicmlja3MgKExhbGkgTWFzcmllcmEsIENDIEJZKSIsImF0dHJpYnV0aW9uX3VybCI6Imh0dHBzOlwvXC93d3cuZmxpY2tyLmNvbVwvcGhvdG9zXC92aXN1YWxwYW5pY1wvMzk4MjQ2NDQ0NyIsInRoZW1pbmciOiJkYXJrIiwicHJpbWFyeV9jb2xvciI6IiM3ZjU3MDAifX0="
/>
<input
type="hidden"
id="initial-state-theming-data"
value="eyJuYW1lIjoiTmV4dGNsb3VkIiwidXJsIjoiaHR0cHM6XC9cL25leHRjbG91ZC5jb20iLCJzbG9nYW4iOiJhIHNhZmUgaG9tZSBmb3IgYWxsIHlvdXIgZGF0YSIsImNvbG9yIjoiIzAwODJjOSIsImRlZmF1bHRDb2xvciI6IiMwMDgyYzkiLCJpbXByaW50VXJsIjoiIiwicHJpdmFjeVVybCI6IiIsImludmVydGVkIjpmYWxzZSwiY2FjaGVCdXN0ZXIiOiJiMGQ1ZmZkMCIsImVuYWJsZWRUaGVtZXMiOlsiZGVmYXVsdCJdfQ=="
/>
<input
type="hidden"
id="initial-state-theming-shortcutsDisabled"
value="ZmFsc2U="
/>
<input
type="hidden"
id="initial-state-core-active-app"
value="Im1lbW9yaWVzIg=="
/>
<input
type="hidden"
id="initial-state-core-apps"
value="eyJkYXNoYm9hcmQiOnsiaWQiOiJkYXNoYm9hcmQiLCJvcmRlciI6Ii0xIiwiaHJlZiI6IlwvYXBwc1wvZGFzaGJvYXJkXC8iLCJpY29uIjoiXC9hcHBzXC9kYXNoYm9hcmRcL2ltZ1wvZGFzaGJvYXJkLnN2ZyIsInR5cGUiOiJsaW5rIiwibmFtZSI6IkRhc2hib2FyZCIsImFjdGl2ZSI6ZmFsc2UsImNsYXNzZXMiOiIiLCJ1bnJlYWQiOjB9LCJmaWxlcyI6eyJpZCI6ImZpbGVzIiwib3JkZXIiOiIwIiwiaHJlZiI6IlwvYXBwc1wvZmlsZXNcLyIsImljb24iOiJcL2FwcHNcL2ZpbGVzXC9pbWdcL2FwcC5zdmciLCJ0eXBlIjoibGluayIsIm5hbWUiOiJGaWxlcyIsImFjdGl2ZSI6ZmFsc2UsImNsYXNzZXMiOiIiLCJ1bnJlYWQiOjB9LCJwaG90b3MiOnsiaWQiOiJwaG90b3MiLCJvcmRlciI6IjEiLCJocmVmIjoiXC9hcHBzXC9waG90b3NcLyIsImljb24iOiJcL2FwcHNcL3Bob3Rvc1wvaW1nXC9hcHAuc3ZnIiwidHlwZSI6ImxpbmsiLCJuYW1lIjoiUGhvdG9zIiwiYWN0aXZlIjpmYWxzZSwiY2xhc3NlcyI6IiIsInVucmVhZCI6MH0sImNhbGVuZGFyIjp7ImlkIjoiY2FsZW5kYXIiLCJvcmRlciI6IjUiLCJocmVmIjoiXC9hcHBzXC9jYWxlbmRhclwvIiwiaWNvbiI6IlwvY3VzdG9tX2FwcHNcL2NhbGVuZGFyXC9pbWdcL2NhbGVuZGFyLnN2ZyIsInR5cGUiOiJsaW5rIiwibmFtZSI6IkNhbGVuZGFyIiwiYWN0aXZlIjpmYWxzZSwiY2xhc3NlcyI6IiIsInVucmVhZCI6MH0sIm1lbW9yaWVzIjp7ImlkIjoibWVtb3JpZXMiLCJvcmRlciI6MTAwLCJocmVmIjoiXC9hcHBzXC9tZW1vcmllc1wvIiwiaWNvbiI6IlwvYXBwc1wvbWVtb3JpZXNcL2ltZ1wvYXBwLnN2ZyIsInR5cGUiOiJsaW5rIiwibmFtZSI6Ik1lbW9yaWVzIiwiYWN0aXZlIjp0cnVlLCJjbGFzc2VzIjoiIiwidW5yZWFkIjowfX0="
/>
<input
type="hidden"
id="initial-state-core-projects_enabled"
value="dHJ1ZQ=="
/>
<input
type="hidden"
id="initial-state-core-config"
value="eyJzZXNzaW9uX2xpZmV0aW1lIjoxNDQwLCJzZXNzaW9uX2tlZXBhbGl2ZSI6dHJ1ZSwiYXV0b19sb2dvdXQiOmZhbHNlLCJ2ZXJzaW9uIjoiMjUuMC4wLjE1IiwidmVyc2lvbnN0cmluZyI6IjI1LjAuMCBSQzMiLCJlbmFibGVfYXZhdGFycyI6dHJ1ZSwibG9zdF9wYXNzd29yZF9saW5rIjpudWxsLCJtb2RSZXdyaXRlV29ya2luZyI6dHJ1ZSwic2hhcmluZy5tYXhBdXRvY29tcGxldGVSZXN1bHRzIjoyNSwic2hhcmluZy5taW5TZWFyY2hTdHJpbmdMZW5ndGgiOjAsImJsYWNrbGlzdF9maWxlc19yZWdleCI6IlxcLihwYXJ0fGZpbGVwYXJ0KSQiLCJsb2dsZXZlbCI6MX0="
/>
<input
type="hidden"
id="initial-state-core-capabilities"
value="eyJjb3JlIjp7InBvbGxpbnRlcnZhbCI6NjAsIndlYmRhdi1yb290IjoicmVtb3RlLnBocFwvd2ViZGF2IiwicmVmZXJlbmNlLWFwaSI6dHJ1ZSwicmVmZXJlbmNlLXJlZ2V4IjoiKFxcc3xcXG58XikoaHR0cHM/OlxcXC9cXFwvKSgoPzpbLUEtWjAtOStfXStcXC4pK1stQS1aXSsoPzpcXFwvWy1BLVowLTkrJkAjJT89fl98ITosLjsoKV0qKSopKFxcc3xcXG58JCkifSwibWV0YWRhdGFBdmFpbGFibGUiOnsic2l6ZSI6WyJcL2ltYWdlXFxcLy4qXC8iXSwiZ3BzIjpbIlwvaW1hZ2VcXFwvLipcLyJdfSwiZmlsZXMiOnsiYmlnZmlsZWNodW5raW5nIjp0cnVlLCJibGFja2xpc3RlZF9maWxlcyI6WyIuaHRhY2Nlc3MiXSwiY29tbWVudHMiOnRydWUsInVuZGVsZXRlIjp0cnVlfSwib2NtIjp7ImVuYWJsZWQiOnRydWUsImFwaVZlcnNpb24iOiIxLjAtcHJvcG9zYWwxIiwiZW5kUG9pbnQiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAyNVwvb2NtIiwicmVzb3VyY2VUeXBlcyI6W3sibmFtZSI6ImZpbGUiLCJzaGFyZVR5cGVzIjpbInVzZXIiLCJncm91cCJdLCJwcm90b2NvbHMiOnsid2ViZGF2IjoiXC9wdWJsaWMucGhwXC93ZWJkYXZcLyJ9fV19LCJkYXYiOnsiY2h1bmtpbmciOiIxLjAiLCJidWxrdXBsb2FkIjoiMS4wIn0sImZhY2VyZWNvZ25pdGlvbiI6eyJ2ZXJzaW9uIjoiMC45LjEwLWJldGEuMiIsImFwaVZlcnNpb25zIjpbInYxIiwiMi4wIl0sImVuYWJsZWQiOnRydWV9LCJmaWxlc19zaGFyaW5nIjp7ImFwaV9lbmFibGVkIjp0cnVlLCJwdWJsaWMiOnsiZW5hYmxlZCI6dHJ1ZSwicGFzc3dvcmQiOnsiZW5mb3JjZWQiOmZhbHNlLCJhc2tGb3JPcHRpb25hbFBhc3N3b3JkIjpmYWxzZX0sImV4cGlyZV9kYXRlIjp7ImVuYWJsZWQiOmZhbHNlfSwibXVsdGlwbGVfbGlua3MiOnRydWUsImV4cGlyZV9kYXRlX2ludGVybmFsIjp7ImVuYWJsZWQiOmZhbHNlfSwiZXhwaXJlX2RhdGVfcmVtb3RlIjp7ImVuYWJsZWQiOmZhbHNlfSwic2VuZF9tYWlsIjpmYWxzZSwidXBsb2FkIjp0cnVlLCJ1cGxvYWRfZmlsZXNfZHJvcCI6dHJ1ZX0sInJlc2hhcmluZyI6dHJ1ZSwidXNlciI6eyJzZW5kX21haWwiOmZhbHNlLCJleHBpcmVfZGF0ZSI6eyJlbmFibGVkIjp0cnVlfX0sImdyb3VwX3NoYXJpbmciOnRydWUsImdyb3VwIjp7ImVuYWJsZWQiOnRydWUsImV4cGlyZV9kYXRlIjp7ImVuYWJsZWQiOnRydWV9fSwiZGVmYXVsdF9wZXJtaXNzaW9ucyI6MzEsImZlZGVyYXRpb24iOnsib3V0Z29pbmciOnRydWUsImluY29taW5nIjp0cnVlLCJleHBpcmVfZGF0ZSI6eyJlbmFibGVkIjp0cnVlfSwiZXhwaXJlX2RhdGVfc3VwcG9ydGVkIjp7ImVuYWJsZWQiOnRydWV9fSwic2hhcmVlIjp7InF1ZXJ5X2xvb2t1cF9kZWZhdWx0IjpmYWxzZSwiYWx3YXlzX3Nob3dfdW5pcXVlIjp0cnVlfSwic2hhcmVieW1haWwiOnsiZW5hYmxlZCI6dHJ1ZSwic2VuZF9wYXNzd29yZF9ieV9tYWlsIjp0cnVlLCJ1cGxvYWRfZmlsZXNfZHJvcCI6eyJlbmFibGVkIjp0cnVlfSwicGFzc3dvcmQiOnsiZW5hYmxlZCI6dHJ1ZSwiZW5mb3JjZWQiOmZhbHNlfSwiZXhwaXJlX2RhdGUiOnsiZW5hYmxlZCI6dHJ1ZSwiZW5mb3JjZWQiOmZhbHNlfX19LCJub3RpZmljYXRpb25zIjp7Im9jcy1lbmRwb2ludHMiOlsibGlzdCIsImdldCIsImRlbGV0ZSIsImRlbGV0ZS1hbGwiLCJpY29ucyIsInJpY2gtc3RyaW5ncyIsImFjdGlvbi13ZWIiLCJ1c2VyLXN0YXR1cyJdLCJwdXNoIjpbImRldmljZXMiLCJvYmplY3QtZGF0YSIsImRlbGV0ZSJdLCJhZG1pbi1ub3RpZmljYXRpb25zIjpbIm9jcyIsImNsaSJdfSwicHJvdmlzaW9uaW5nX2FwaSI6eyJ2ZXJzaW9uIjoiMS4xNS4wIiwiQWNjb3VudFByb3BlcnR5U2NvcGVzVmVyc2lvbiI6MiwiQWNjb3VudFByb3BlcnR5U2NvcGVzRmVkZXJhdGVkRW5hYmxlZCI6dHJ1ZSwiQWNjb3VudFByb3BlcnR5U2NvcGVzUHVibGlzaGVkRW5hYmxlZCI6dHJ1ZX0sInRoZW1pbmciOnsibmFtZSI6Ik5leHRjbG91ZCIsInVybCI6Imh0dHBzOlwvXC9uZXh0Y2xvdWQuY29tIiwic2xvZ2FuIjoiYSBzYWZlIGhvbWUgZm9yIGFsbCB5b3VyIGRhdGEiLCJjb2xvciI6IiMwMDgyYzkiLCJjb2xvci10ZXh0IjoiI2ZmZmZmZiIsImNvbG9yLWVsZW1lbnQiOiIjMDA4MmM5IiwiY29sb3ItZWxlbWVudC1icmlnaHQiOiIjMDA4MmM5IiwiY29sb3ItZWxlbWVudC1kYXJrIjoiIzAwODJjOSIsImxvZ28iOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAyNVwvY29yZVwvaW1nXC9sb2dvXC9sb2dvLnN2Zz92PTI1NDg2OCIsImJhY2tncm91bmQiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAyNVwvY29yZVwvaW1nXC9iYWNrZ3JvdW5kLnBuZz92PTI1NDg2OCIsImJhY2tncm91bmQtcGxhaW4iOmZhbHNlLCJiYWNrZ3JvdW5kLWRlZmF1bHQiOnRydWUsImxvZ29oZWFkZXIiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAyNVwvY29yZVwvaW1nXC9sb2dvXC9sb2dvLnN2Zz92PTI1NDg2OCIsImZhdmljb24iOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAyNVwvY29yZVwvaW1nXC9sb2dvXC9sb2dvLnN2Zz92PTI1NDg2OCJ9LCJ1c2VyX3N0YXR1cyI6eyJlbmFibGVkIjp0cnVlLCJzdXBwb3J0c19lbW9qaSI6dHJ1ZX0sIndlYXRoZXJfc3RhdHVzIjp7ImVuYWJsZWQiOnRydWV9fQ=="
/>
<input
type="hidden"
id="initial-state-unified-search-limit-default"
value="NQ=="
/>
<input
type="hidden"
id="initial-state-unified-search-min-search-length"
value="MQ=="
/>
<input
type="hidden"
id="initial-state-unified-search-live-search"
value="dHJ1ZQ=="
/>
<input
type="hidden"
id="initial-state-user_status-status"
value="eyJ1c2VySWQiOiJhZG1pbiIsIm1lc3NhZ2UiOm51bGwsIm1lc3NhZ2VJZCI6bnVsbCwibWVzc2FnZUlzUHJlZGVmaW5lZCI6ZmFsc2UsImljb24iOm51bGwsImNsZWFyQXQiOm51bGwsInN0YXR1cyI6Im9ubGluZSIsInN0YXR1c0lzVXNlckRlZmluZWQiOmZhbHNlfQ=="
/>
<input
type="hidden"
id="initial-state-user_status-profileEnabled"
value="eyJwcm9maWxlRW5hYmxlZCI6dHJ1ZX0="
/>
</body>
</html>

View File

@ -1,5 +1,7 @@
/// <reference types="@nextcloud/typings" />
import "./bootstrap";
import "reflect-metadata";
import Vue from "vue";
import VueVirtualScroller from "vue-virtual-scroller";
@ -70,21 +72,21 @@ Vue.use(VueVirtualScroller);
// TODO: remove when we have a proper fileinfo standalone library
// original scripts are loaded from
// https://github.com/nextcloud/server/blob/5bf3d1bb384da56adbf205752be8f840aac3b0c5/lib/private/legacy/template.php#L120-L122
window.addEventListener("DOMContentLoaded", () => {
if (!globalThis.OCA.Files) {
globalThis.OCA.Files = {};
}
// register unused client for the sidebar to have access to its parser methods
Object.assign(
globalThis.OCA.Files,
{
App: {
fileList: { filesClient: (<any>globalThis.OC.Files).getClient() },
},
},
globalThis.OCA.Files
);
});
// window.addEventListener("DOMContentLoaded", () => {
// if (!globalThis.OCA.Files) {
// globalThis.OCA.Files = {};
// }
// // register unused client for the sidebar to have access to its parser methods
// Object.assign(
// globalThis.OCA.Files,
// {
// App: {
// fileList: { filesClient: (<any>globalThis.OC.Files).getClient() },
// },
// },
// globalThis.OCA.Files
// );
// });
export default new Vue({
el: "#content",