sidebar pulled outside of the tab content and added splitter

This commit is contained in:
zadam 2019-12-23 15:50:24 +01:00
parent 81e2baeee5
commit d29c5c4758
9 changed files with 91 additions and 75 deletions

View File

@ -194,7 +194,7 @@ export default class SidebarOptions {
const sidebarMinWidth = this.$sidebarMinWidth.val(); const sidebarMinWidth = this.$sidebarMinWidth.val();
// need to find them dynamically since they change // need to find them dynamically since they change
const $sidebar = $(".note-detail-sidebar"); const $sidebar = $("#right-pane");
const $content = $(".note-detail-content"); const $content = $(".note-detail-content");

View File

@ -287,10 +287,10 @@ function registerEntrypoints() {
searchNotesService.searchInSubtree(node.data.noteId); searchNotesService.searchInSubtree(node.data.noteId);
}); });
Split(['#left-pane', '#center-pane'], { Split(['#left-pane', '#center-pane', '#right-pane'], {
sizes: [25, 75], sizes: [25, 50, 25],
gutterSize: 5 gutterSize: 5
}) });
} }
export default { export default {

View File

@ -2,6 +2,23 @@ import bundleService from "./bundle.js";
import ws from "./ws.js"; import ws from "./ws.js";
import optionsService from "./options.js"; import optionsService from "./options.js";
const $sidebar = $("#right-pane");
const $sidebarContainer = $sidebar.find('.sidebar-container');
const $showSideBarButton = $sidebar.find(".show-sidebar-button");
const $hideSidebarButton = $sidebar.find(".hide-sidebar-button");
$hideSidebarButton.on('click', () => {
$sidebar.hide();
$showSideBarButton.show();
});
// FIXME shoud run note loaded!
$showSideBarButton.on('click', () => {
$sidebar.show();
$showSideBarButton.hide();
});
class Sidebar { class Sidebar {
/** /**
* @param {TabContext} ctx * @param {TabContext} ctx
@ -14,30 +31,18 @@ class Sidebar {
widgets: [] widgets: []
}, state); }, state);
this.widgets = []; this.widgets = [];
this.$sidebar = ctx.$tabContent.find(".note-detail-sidebar");
this.$widgetContainer = this.$sidebar.find(".note-detail-widget-container");
this.$showSideBarButton = this.ctx.$tabContent.find(".show-sidebar-button");
this.$hideSidebarButton = this.$sidebar.find(".hide-sidebar-button");
this.$hideSidebarButton.on('click', () => { this.$widgetContainer = $sidebar.find(`.sidebar-widget-container[data-tab-id=${this.ctx.tabId}]`);
this.$sidebar.hide();
this.$showSideBarButton.show();
this.ctx.stateChanged();
});
this.$showSideBarButton.on('click', () => { if (this.$widgetContainer.length === 0) {
this.$sidebar.show(); this.$widgetContainer = $(`<div class="sidebar-widget-container">`).attr('data-tab-id', this.ctx.tabId);
this.$showSideBarButton.hide();
this.ctx.stateChanged();
this.noteLoaded();
});
this.$showSideBarButton.toggle(!state.visible); $sidebarContainer.append(this.$widgetContainer);
this.$sidebar.toggle(state.visible); }
} }
isVisible() { isVisible() {
return this.$sidebar.css("display") !== "none"; return $sidebar.css("display") !== "none";
} }
getSidebarState() { getSidebarState() {
@ -91,6 +96,12 @@ class Sidebar {
this.renderWidgets(widgets); this.renderWidgets(widgets);
} }
show() {
$sidebarContainer.find('.sidebar-widget-container').each((i, el) => {
$(el).toggle($(el).attr('data-tab-id') === this.ctx.tabId);
});
}
// it's important that this method is sync so that the whole render-update is atomic // it's important that this method is sync so that the whole render-update is atomic
// otherwise we could get race issues (doubled widgets etc.) // otherwise we could get race issues (doubled widgets etc.)
renderWidgets(widgets) { renderWidgets(widgets) {

View File

@ -251,6 +251,10 @@ class TabContext {
this.$tabContent.show(); this.$tabContent.show();
if (this.sidebar) {
this.sidebar.show();
}
this.setCurrentNotePathToHash(); this.setCurrentNotePathToHash();
this.setTitleBar(); this.setTitleBar();
} }

View File

@ -410,18 +410,18 @@ body {
border-color: var(--button-border-color); border-color: var(--button-border-color);
} }
.note-detail-sidebar { #right-pane {
overflow: auto; overflow: auto;
padding-top: 12px; padding-top: 12px;
padding-left: 7px; padding-left: 7px;
font-size: 90%; font-size: 90%;
} }
.note-detail-sidebar .card { #right-pane .card {
border: 0; border: 0;
} }
.note-detail-sidebar .card-header { #right-pane .card-header {
background: inherit; background: inherit;
padding: 5px 10px 5px 10px; padding: 5px 10px 5px 10px;
width: 99%; /* to give minimal right margin */ width: 99%; /* to give minimal right margin */
@ -434,7 +434,7 @@ body {
justify-content: space-between; justify-content: space-between;
} }
.note-detail-sidebar .widget-title { #right-pane .widget-title {
border-radius: 0; border-radius: 0;
padding: 0; padding: 0;
border: 0; border: 0;
@ -444,29 +444,29 @@ body {
color: var(--muted-text-color) !important; color: var(--muted-text-color) !important;
} }
.note-detail-sidebar .widget-header-action { #right-pane .widget-header-action {
color: var(--link-color) !important; color: var(--link-color) !important;
cursor: pointer; cursor: pointer;
} }
.note-detail-sidebar .widget-help { #right-pane .widget-help {
color: var(--muted-text-color); color: var(--muted-text-color);
position: relative; position: relative;
top: 2px; top: 2px;
} }
.note-detail-sidebar .widget-help.no-link:hover { #right-pane .widget-help.no-link:hover {
cursor: default; cursor: default;
text-decoration: none; text-decoration: none;
} }
.note-detail-sidebar .card-body { #right-pane .card-body {
width: 100%; width: 100%;
padding: 8px; padding: 8px;
border: 0; border: 0;
} }
.note-detail-sidebar .card-body ul { #right-pane .card-body ul {
padding-left: 25px; padding-left: 25px;
margin-bottom: 5px; margin-bottom: 5px;
} }

39
src/views/center.ejs Normal file
View File

@ -0,0 +1,39 @@
<div id="center-pane">
<div id="note-tab-container">
<div class="note-tab-content note-tab-content-template">
<div class="note-detail-content" style="width: <%= contentWidthPercent %>%">
<% include title.ejs %>
<div class="note-detail-script-area"></div>
<table class="note-detail-promoted-attributes"></table>
<div class="note-detail-component-wrapper">
<div class="note-detail-text note-detail-component">
<div class="note-detail-text-editor" tabindex="10000"></div>
</div>
<div class="note-detail-code note-detail-component">
<div class="note-detail-code-editor"></div>
</div>
<% include details/empty.ejs %>
<% include details/search.ejs %>
<% include details/render.ejs %>
<% include details/file.ejs %>
<% include details/image.ejs %>
<% include details/relation_map.ejs %>
<% include details/protected_session_password.ejs %>
<% include details/book.ejs %>
</div>
</div>
</div>
</div>
</div>

View File

@ -182,9 +182,9 @@
<div class="dropdown-menu dropdown-menu-sm" id="context-menu-container"></div> <div class="dropdown-menu dropdown-menu-sm" id="context-menu-container"></div>
</div> </div>
<div id="center-pane"> <% include center.ejs %>
<% include tabs.ejs %>
</div> <% include sidebar.ejs %>
</div> </div>
<% include dialogs/about.ejs %> <% include dialogs/about.ejs %>

View File

@ -1,7 +1,8 @@
<div class="note-detail-sidebar hide-in-zen-mode" style="width: <%= sidebarWidthPercent %>%; min-width: <%= sidebarMinWidth %>px"> <div id="right-pane" class="hide-in-zen-mode">
<div style="text-align: center; margin-bottom: 5px;"> <div style="text-align: center; margin-bottom: 5px;">
<button class="hide-sidebar-button">hide sidebar <span class="bx bx-chevrons-right"></span></button> <button class="hide-sidebar-button">hide sidebar <span class="bx bx-chevrons-right"></span></button>
</div> </div>
<div class="note-detail-widget-container"></div> <div class="sidebar-container">
</div>
</div> </div>

View File

@ -1,39 +0,0 @@
<div id="note-tab-container">
<div class="note-tab-content note-tab-content-template">
<div class="note-detail-content" style="width: <%= contentWidthPercent %>%">
<% include title.ejs %>
<div class="note-detail-script-area"></div>
<table class="note-detail-promoted-attributes"></table>
<div class="note-detail-component-wrapper">
<div class="note-detail-text note-detail-component">
<div class="note-detail-text-editor" tabindex="10000"></div>
</div>
<div class="note-detail-code note-detail-component">
<div class="note-detail-code-editor"></div>
</div>
<% include details/empty.ejs %>
<% include details/search.ejs %>
<% include details/render.ejs %>
<% include details/file.ejs %>
<% include details/image.ejs %>
<% include details/relation_map.ejs %>
<% include details/protected_session_password.ejs %>
<% include details/book.ejs %>
</div>
</div>
<% include sidebar.ejs %>
</div>
</div>