diff --git a/src/public/javascripts/services/sidebar.js b/src/public/javascripts/services/sidebar.js
index 7e57d44b8..e7edd6f19 100644
--- a/src/public/javascripts/services/sidebar.js
+++ b/src/public/javascripts/services/sidebar.js
@@ -48,8 +48,7 @@ class Sidebar {
this.widgets = [];
this.$widgetContainer.empty();
- //const widgetClasses = [AttributesWidget, LinkMapWidget, NoteRevisionsWidget, NoteInfoWidget];
- const widgetClasses = [AttributesWidget];
+ const widgetClasses = [AttributesWidget, LinkMapWidget, NoteRevisionsWidget, NoteInfoWidget];
for (const widgetClass of widgetClasses) {
const widget = new widgetClass(this.ctx);
diff --git a/src/public/javascripts/widgets/link_map.js b/src/public/javascripts/widgets/link_map.js
index a6bac5f8e..4452649b3 100644
--- a/src/public/javascripts/widgets/link_map.js
+++ b/src/public/javascripts/widgets/link_map.js
@@ -3,6 +3,7 @@ import linkMapDialog from "../dialogs/link_map.js";
import server from "../services/server.js";
import treeCache from "../services/tree_cache.js";
import linkService from "../services/link.js";
+import StandardWidget from "./standard_widget.js";
let linkMapContainerIdCtr = 1;
@@ -22,21 +23,15 @@ const linkOverlays = [
} ]
];
-class LinkMapWidget {
+class LinkMapWidget extends StandardWidget {
/**
* @param {TabContext} ctx
- * @param {jQuery} $widget
+ * @param {object} state
*/
- constructor(ctx, $widget) {
- this.ctx = ctx;
- this.$widget = $widget;
- this.$widget.on('show.bs.collapse', () => this.renderBody());
- this.$widget.on('show.bs.collapse', () => this.ctx.stateChanged());
- this.$widget.on('hide.bs.collapse', () => this.ctx.stateChanged());
- this.$title = this.$widget.find('.widget-title');
+ constructor(ctx, state) {
+ super(ctx, state,'link-map');
+
this.$title.text("Link map");
- this.$headerActions = this.$widget.find('.widget-header-actions');
- this.$bodyWrapper = this.$widget.find('.body-wrapper');
const $showFullButton = $("").append("show full").addClass('widget-header-action');
$showFullButton.click(() => {
@@ -46,15 +41,10 @@ class LinkMapWidget {
this.$headerActions.append($showFullButton);
}
- async renderBody() {
- if (!this.isVisible()) {
- return;
- }
+ async doRenderBody() {
+ this.$body.html(TPL);
- const $body = this.$widget.find('.card-body');
- $body.html(TPL);
-
- this.$linkMapContainer = $body.find('.link-map-container');
+ this.$linkMapContainer = this.$body.find('.link-map-container');
this.$linkMapContainer.attr("id", "link-map-container-" + linkMapContainerIdCtr++);
await libraryLoader.requireLibrary(libraryLoader.LINK_MAP);
@@ -233,17 +223,6 @@ class LinkMapWidget {
noteIdToId(noteId) {
return "link-map-note-" + noteId;
}
-
- getWidgetState() {
- return {
- id: 'attributes',
- visible: this.isVisible()
- };
- }
-
- isVisible() {
- return this.$bodyWrapper.is(":visible");
- }
}
export default LinkMapWidget;
\ No newline at end of file
diff --git a/src/public/javascripts/widgets/note_info.js b/src/public/javascripts/widgets/note_info.js
index 705b59648..0d001d95a 100644
--- a/src/public/javascripts/widgets/note_info.js
+++ b/src/public/javascripts/widgets/note_info.js
@@ -1,3 +1,5 @@
+import StandardWidget from "./standard_widget.js";
+
const TPL = `
@@ -23,36 +25,25 @@ const TPL = `
`;
-class NoteInfoWidget {
+class NoteInfoWidget extends StandardWidget {
/**
* @param {TabContext} ctx
- * @param {jQuery} $widget
+ * @param {object} state
*/
- constructor(ctx, $widget) {
- this.ctx = ctx;
- this.$widget = $widget;
- this.$widget.on('show.bs.collapse', () => this.renderBody());
- this.$widget.on('show.bs.collapse', () => this.ctx.stateChanged());
- this.$widget.on('hide.bs.collapse', () => this.ctx.stateChanged());
- this.$title = this.$widget.find('.widget-title');
+ constructor(ctx, state) {
+ super(ctx, state, 'note-info');
+
this.$title.text("Note info");
- this.$bodyWrapper = this.$widget.find('.body-wrapper');
}
- async renderBody() {
- if (!this.isVisible()) {
- return;
- }
+ async doRenderBody() {
+ this.$body.html(TPL);
- const $body = this.$widget.find('.card-body');
-
- $body.html(TPL);
-
- const $noteId = $body.find(".note-info-note-id");
- const $dateCreated = $body.find(".note-info-date-created");
- const $dateModified = $body.find(".note-info-date-modified");
- const $type = $body.find(".note-info-type");
- const $mime = $body.find(".note-info-mime");
+ const $noteId = this.$body.find(".note-info-note-id");
+ const $dateCreated = this.$body.find(".note-info-date-created");
+ const $dateModified = this.$body.find(".note-info-date-modified");
+ const $type = this.$body.find(".note-info-type");
+ const $mime = this.$body.find(".note-info-mime");
const note = this.ctx.note;
@@ -65,20 +56,9 @@ class NoteInfoWidget {
syncDataReceived(syncData) {
if (syncData.find(sd => sd.entityName === 'notes' && sd.entityId === this.ctx.note.noteId)) {
- this.renderBody();
+ this.doRenderBody();
}
}
-
- getWidgetState() {
- return {
- id: 'attributes',
- visible: this.isVisible()
- };
- }
-
- isVisible() {
- return this.$bodyWrapper.is(":visible");
- }
}
export default NoteInfoWidget;
\ No newline at end of file
diff --git a/src/public/javascripts/widgets/note_revisions.js b/src/public/javascripts/widgets/note_revisions.js
index 9f210d778..e16ecd30c 100644
--- a/src/public/javascripts/widgets/note_revisions.js
+++ b/src/public/javascripts/widgets/note_revisions.js
@@ -1,42 +1,33 @@
import server from "../services/server.js";
+import StandardWidget from "./standard_widget.js";
const TPL = `
`;
-class NoteRevisionsWidget {
+class NoteRevisionsWidget extends StandardWidget {
/**
* @param {TabContext} ctx
- * @param {jQuery} $widget
+ * @param {object} state
*/
- constructor(ctx, $widget) {
- this.ctx = ctx;
- this.$widget = $widget;
- this.$widget.on('show.bs.collapse', () => this.renderBody());
- this.$widget.on('show.bs.collapse', () => this.ctx.stateChanged());
- this.$widget.on('hide.bs.collapse', () => this.ctx.stateChanged());
- this.$title = this.$widget.find('.widget-title');
+ constructor(ctx, state) {
+ super(ctx, state, 'note-revisions');
+
this.$title.text("Note revisions");
- this.$bodyWrapper = this.$widget.find('.body-wrapper');
}
- async renderBody() {
- if (!this.isVisible()) {
- return;
- }
-
- const $body = this.$widget.find('.card-body');
+ async doRenderBody() {
const revisionItems = await server.get(`notes/${this.ctx.note.noteId}/revisions`);
if (revisionItems.length === 0) {
- $body.text("No revisions yet...");
+ this.$body.text("No revisions yet...");
return;
}
- $body.html(TPL);
+ this.$body.html(TPL);
- const $list = $body.find('.note-revision-list');
+ const $list = this.$body.find('.note-revision-list');
for (const item of revisionItems) {
$list.append($('').append($("", {
@@ -50,20 +41,9 @@ class NoteRevisionsWidget {
syncDataReceived(syncData) {
if (syncData.find(sd => sd.entityName === 'note_revisions' && sd.noteId === this.ctx.note.noteId)) {
- this.renderBody();
+ this.doRenderBody();
}
}
-
- getWidgetState() {
- return {
- id: 'attributes',
- visible: this.isVisible()
- };
- }
-
- isVisible() {
- return this.$bodyWrapper.is(":visible");
- }
}
export default NoteRevisionsWidget;
\ No newline at end of file
diff --git a/src/public/javascripts/widgets/standard_widget.js b/src/public/javascripts/widgets/standard_widget.js
index 09d21110d..cef7e60e5 100644
--- a/src/public/javascripts/widgets/standard_widget.js
+++ b/src/public/javascripts/widgets/standard_widget.js
@@ -8,7 +8,7 @@ const WIDGET_TPL = `
-
@@ -18,17 +18,19 @@ class StandardWidget {
/**
* @param {TabContext} ctx
* @param {object} state
- * @param {string} widgetId
+ * @param {string} widgetName
*/
- constructor(ctx, state, widgetId) {
+ constructor(ctx, state, widgetName) {
this.ctx = ctx;
- this.widgetId = widgetId;
+ this.widgetName = widgetName;
+
+ const widgetId = `tab-${ctx.tabId}-widget-${widgetName}`;
this.$widget = $(WIDGET_TPL);
- this.$widget.find('[data-target]').attr('data-target', "#widget-" + widgetId);
+ this.$widget.find('[data-target]').attr('data-target', "#" + widgetId);
this.$bodyWrapper = this.$widget.find('.body-wrapper');
- this.$bodyWrapper.attr('id', "widget-" + widgetId);
+ this.$bodyWrapper.attr('id', widgetId);
if (state && state.visible) {
this.$bodyWrapper.addClass("show");
@@ -62,7 +64,7 @@ class StandardWidget {
getWidgetState() {
return {
- id: this.widgetId,
+ name: this.widgetName,
visible: this.isVisible()
};
}