diff --git a/ng-app/src/lib/CenteredLayout.svelte b/ng-app/src/lib/CenteredLayout.svelte index fcf3195..cf608d6 100644 --- a/ng-app/src/lib/CenteredLayout.svelte +++ b/ng-app/src/lib/CenteredLayout.svelte @@ -62,7 +62,7 @@
diff --git a/ng-app/src/lib/FullLayout.svelte b/ng-app/src/lib/FullLayout.svelte index b3aed69..2e62566 100644 --- a/ng-app/src/lib/FullLayout.svelte +++ b/ng-app/src/lib/FullLayout.svelte @@ -25,6 +25,8 @@ // @ts-ignore import Logo from "./components/Logo.svelte"; import MenuItem from "./components/MenuItem.svelte"; + import PaneHeader from "./components/PaneHeader.svelte"; + import BranchIcon from "./components/BranchIcon.svelte"; // @ts-ignore import { t } from "svelte-i18n"; import { onMount, tick } from "svelte"; @@ -32,6 +34,7 @@ available_editors, available_viewers, set_editor, set_viewer, set_view_or_edit, toggle_live_edit, has_editor_chat, all_files_count, all_comments_count, nav_bar, save, hideMenu } from "../tab"; import ZeraIcon from "./ZeraIcon.svelte"; + import { Home, Bolt, @@ -76,6 +79,8 @@ WrenchScrewdriver, Sparkles, PaperClip, + XMark, + ArrowLeft, } from "svelte-heros-v2"; import NavBar from "./components/NavBar.svelte"; @@ -95,6 +100,109 @@ mobile = true; } + let panes_available = 0; + $: if (width < 983) { + panes_available = 0; + } else if (width >= 983 && width < 1304) { + panes_available = 1; + } else if (width >= 1304 && width < 1625) { + panes_available = 2; + } else if (width >= 1625) { + panes_available = 3; + }; + + let pane_left1_used: boolean | string = false; + let pane_left2_used: boolean | string = false; + let pane_right_used: boolean | string = false; + let pane_lefts_used = 0; + $: if (pane_left1_used && pane_left2_used) { + pane_lefts_used = 2; + } else if (pane_left1_used || pane_left2_used) { + pane_lefts_used = 1; + } else { + pane_lefts_used = 0; + }; + + $: if (panes_available == 0) { + pane_left1_used = false; + pane_left2_used = false; + pane_right_used = false; + if ($cur_tab.right_pane || $cur_tab.folders_pane || $cur_tab.toc_pane) { + $cur_tab.show_modal_menu = true; + } + } else { + if ($cur_tab.show_modal_menu && !$cur_tab.show_menu) { + $cur_tab.show_modal_menu = false; + } + if (panes_available == 1) { + if ($cur_tab.right_pane) { + pane_right_used = $cur_tab.right_pane; + pane_left1_used = false; + pane_left2_used = false; + } else if ($cur_tab.folders_pane) { + pane_left1_used = "folders"; + pane_right_used = false; + pane_left2_used = false; + } else if ($cur_tab.toc_pane) { + pane_left1_used = "toc"; + pane_right_used = false; + pane_left2_used = false; + } else { + pane_left1_used = false; + pane_left2_used = false; + pane_right_used = false; + } + } else if (panes_available == 2) { + if ($cur_tab.right_pane) { + pane_right_used = $cur_tab.right_pane; + pane_left2_used = false; + if ($cur_tab.folders_pane) { + pane_left1_used = "folders"; + } else if ($cur_tab.toc_pane) { + pane_left1_used = "toc"; + } else { + pane_left1_used = false; + } + } else { + pane_right_used = false; + if ($cur_tab.folders_pane) { + pane_left1_used = "folders"; + if ($cur_tab.toc_pane) { + pane_left2_used = "toc"; + } else { + pane_left2_used = false; + } + } else if ($cur_tab.toc_pane) { + pane_left1_used = "toc"; + pane_left2_used = false; + } else { + pane_left1_used = false; + pane_left2_used = false; + } + } + } else if (panes_available == 3) { + if ($cur_tab.right_pane) { + pane_right_used = $cur_tab.right_pane; + } else { + pane_right_used = false; + } + if ($cur_tab.folders_pane) { + pane_left1_used = "folders"; + if ($cur_tab.toc_pane) { + pane_left2_used = "toc"; + } else { + pane_left2_used = false; + } + } else if ($cur_tab.toc_pane) { + pane_left1_used = "toc"; + pane_left2_used = false; + } else { + pane_left1_used = false; + pane_left2_used = false; + } + } + } + let top; let shareMenu; let toolsMenu; @@ -112,6 +220,7 @@ } onMount(async () => {await open_doc(""); await scrollToTop()}); + $: activeUrl = "#" + $location; const launchAppStore = (class_name:string) => { @@ -126,7 +235,37 @@ const openPane = (pane:string) => { // TODO - hideMenu(); + if ( pane == "folders") { + $cur_tab.folders_pane = !$cur_tab.folders_pane; + if ($cur_tab.folders_pane) { + if (panes_available <= 1 ) { + $cur_tab.right_pane = ""; + } + } + } else if ( pane == "toc") { + $cur_tab.toc_pane = !$cur_tab.toc_pane; + if ($cur_tab.toc_pane) { + if (panes_available <= 1 ) { + $cur_tab.folders_pane = false; + $cur_tab.right_pane = ""; + } else if (panes_available == 2) { + if ($cur_tab.folders_pane && $cur_tab.right_pane) + $cur_tab.folders_pane = false; + } + } + } else { + if ($cur_tab.right_pane == pane) + $cur_tab.right_pane = ""; + else { + $cur_tab.right_pane = pane; + } + } + if (panes_available) { + hideMenu(); + } else { + $cur_tab.show_modal_menu = true; + $cur_tab.show_menu = false; + } } const openShare = (share:string) => { @@ -149,6 +288,29 @@ hideMenu(); } + const closeModal = () => { + cur_tab.update(ct => { + ct.show_menu = false; + ct.show_modal_menu = false; + if (!panes_available) { + $cur_tab.right_pane = ""; + $cur_tab.folders_pane = false; + $cur_tab.toc_pane = false; + } + return ct; + }); + } + + const closePaneInModal = () => { + cur_tab.update(ct => { + ct.show_menu = true; + $cur_tab.right_pane = ""; + $cur_tab.folders_pane = false; + $cur_tab.toc_pane = false; + return ct; + }); + } + const share_items = [ {n:"repost",i:Bolt}, {n:"dm",i:PaperAirplane}, @@ -173,6 +335,18 @@ {n:"dev",i:Beaker}, ]; + const pane_items = { + "folders":FolderOpen, + "toc":BookOpen, + "branches":BranchIcon, + "files":PaperClip, + "history":Clock, + "comments":ChatBubbleOvalLeft, + "info":InformationCircle, + "chat":ChatBubbleLeftRight, + "mc":Sparkles, + }; + let asideClass = "w-48"; let spanClass = "flex-1 ml-3 whitespace-nowrap"; let nonActiveClass = @@ -183,266 +357,265 @@ +
+
+ +
+ {#if !$cur_tab.show_menu} +
+ + Back to menu +
+ {/if} + {#if $cur_tab.show_menu || (!$cur_tab.folders_pane && !$cur_tab.toc_pane && !$cur_tab.right_pane)} + + {:else if $cur_tab.right_pane} +
+ + {$t(`doc.menu.items.${$cur_tab.right_pane}.label`)} +
+ {:else if $cur_tab.folders_pane} +
+ + {$t("doc.menu.items.folders.label")} +
+ {:else if $cur_tab.toc_pane} +
+ + {$t("doc.menu.items.toc.label")} +
+ + {/if} +
{#if mobile} @@ -453,7 +626,7 @@
{/if}
-
+
@@ -477,7 +650,7 @@ {:else}
- + @@ -599,65 +772,40 @@ - - - - -
+
+ {/if} +
+
- -
-
+
+ {#if pane_right_used} +
+
+ + +
+
+ {/if} {/if}