Files
mixly3/common/modules/mixly-modules/common/sidebars-manager.js

144 lines
4.2 KiB
JavaScript

goog.loadJs('common', () => {
goog.require('path');
goog.require('Mixly.Env');
goog.require('Mixly.Msg');
goog.require('Mixly.Registry');
goog.require('Mixly.Events');
goog.require('Mixly.HTMLTemplate');
goog.require('Mixly.SideBarLocalStorage');
goog.require('Mixly.SideBarLibs');
goog.require('Mixly.PagesManager');
goog.require('Mixly.IdGenerator');
goog.provide('Mixly.SideBarsManager');
goog.provide('Mixly.LeftSideBarsManager');
goog.provide('Mixly.RightSideBarsManager');
const {
Env,
Msg,
Registry,
Events,
HTMLTemplate,
SideBarLocalStorage,
SideBarLibs,
PagesManager,
IdGenerator,
Boards
} = Mixly;
class SideBarsManager extends PagesManager {
static {
HTMLTemplate.add(
'html/sidebar/left-sidebars-manager.html',
new HTMLTemplate(goog.readFileSync(path.join(Env.templatePath, 'html/sidebar/left-sidebars-manager.html')))
);
HTMLTemplate.add(
'html/sidebar/left-sidebars-tab.html',
new HTMLTemplate(goog.readFileSync(path.join(Env.templatePath, 'html/sidebar/left-sidebars-tab.html')))
);
HTMLTemplate.add(
'html/sidebar/right-sidebars-manager.html',
new HTMLTemplate(goog.readFileSync(path.join(Env.templatePath, 'html/sidebar/right-sidebars-manager.html')))
);
HTMLTemplate.add(
'html/sidebar/right-sidebars-tab.html',
new HTMLTemplate(goog.readFileSync(path.join(Env.templatePath, 'html/sidebar/right-sidebars-tab.html')))
);
this.typesRegistry = new Registry();
this.managersRegistry = new Registry();
this.typesRegistry.register(['#default', 'local_storage'], SideBarLocalStorage);
this.typesRegistry.register(['libs'], SideBarLibs);
this.Align = {
LEFT: 0,
RIGHT: 1,
0: 'LEFT',
1: 'RIGHT'
};
this.getMain = function() {
if (!this.managersRegistry.length()) {
return null;
}
const key = this.managersRegistry.keys()[0];
return this.managersRegistry.getItem(key);
}
this.add = function(manager) {
this.managersRegistry.register(manager.id, manager);
}
this.remove = function(manager) {
this.managersRegistry.unregister(manager.id);
}
}
#shown_ = false;
constructor(element, align = SideBarsManager.Align.LEFT) {
let managerHTMLTemplate = '', tabHTMLTemplate = '';
if (align === SideBarsManager.Align.RIGHT) {
managerHTMLTemplate = HTMLTemplate.get('html/sidebar/right-sidebars-manager.html');
tabHTMLTemplate = HTMLTemplate.get('html/sidebar/right-sidebars-tab.html');
} else {
managerHTMLTemplate = HTMLTemplate.get('html/sidebar/left-sidebars-manager.html');
tabHTMLTemplate = HTMLTemplate.get('html/sidebar/left-sidebars-tab.html');
}
const $manager = $(managerHTMLTemplate.render());
const $tab = $(tabHTMLTemplate.render());
super({
parentElem: element,
managerContentElem: $manager[0],
bodyElem: $manager.find('.body')[0],
tabElem: $manager.find('.tabs')[0],
tabContentElem: $tab[0],
typesRegistry: SideBarsManager.typesRegistry
});
this.id = IdGenerator.generate();
this.addEventsType(['show', 'hide']);
SideBarsManager.add(this);
}
show() {
this.runEvent('show');
}
hide() {
this.runEvent('hide');
}
toggle() {
this.isShown() ? this.hide() : this.show();
}
isShown() {
return this.#shown_;
}
dispose() {
SideBarsManager.remove(this);
super.dispose();
}
}
class LeftSideBarsManager extends SideBarsManager {
constructor(element) {
super(element, SideBarsManager.Align.LEFT);
}
}
class RightSideBarsManager extends SideBarsManager {
constructor(element) {
super(element, SideBarsManager.Align.RIGHT);
}
}
Mixly.SideBarsManager = SideBarsManager;
Mixly.LeftSideBarsManager = LeftSideBarsManager;
Mixly.RightSideBarsManager = RightSideBarsManager;
});