mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-22 16:23:06 +03:00
Also changed public user settings to be stored in session rather than DB. Cleaned existing list view type logic.
87 lines
3.0 KiB
JavaScript
87 lines
3.0 KiB
JavaScript
import dropdown from "./dropdown";
|
|
import overlay from "./overlay";
|
|
import backToTop from "./back-to-top";
|
|
import notification from "./notification";
|
|
import chapterToggle from "./chapter-toggle";
|
|
import expandToggle from "./expand-toggle";
|
|
import entitySelectorPopup from "./entity-selector-popup";
|
|
import entitySelector from "./entity-selector";
|
|
import sidebar from "./sidebar";
|
|
import pagePicker from "./page-picker";
|
|
import pageComments from "./page-comments";
|
|
import wysiwygEditor from "./wysiwyg-editor";
|
|
import markdownEditor from "./markdown-editor";
|
|
import editorToolbox from "./editor-toolbox";
|
|
import imagePicker from "./image-picker";
|
|
import collapsible from "./collapsible";
|
|
import toggleSwitch from "./toggle-switch";
|
|
import pageDisplay from "./page-display";
|
|
import shelfSort from "./shelf-sort";
|
|
import homepageControl from "./homepage-control";
|
|
import headerMobileToggle from "./header-mobile-toggle";
|
|
import listSortControl from "./list-sort-control";
|
|
|
|
|
|
const componentMapping = {
|
|
'dropdown': dropdown,
|
|
'overlay': overlay,
|
|
'back-to-top': backToTop,
|
|
'notification': notification,
|
|
'chapter-toggle': chapterToggle,
|
|
'expand-toggle': expandToggle,
|
|
'entity-selector-popup': entitySelectorPopup,
|
|
'entity-selector': entitySelector,
|
|
'sidebar': sidebar,
|
|
'page-picker': pagePicker,
|
|
'page-comments': pageComments,
|
|
'wysiwyg-editor': wysiwygEditor,
|
|
'markdown-editor': markdownEditor,
|
|
'editor-toolbox': editorToolbox,
|
|
'image-picker': imagePicker,
|
|
'collapsible': collapsible,
|
|
'toggle-switch': toggleSwitch,
|
|
'page-display': pageDisplay,
|
|
'shelf-sort': shelfSort,
|
|
'homepage-control': homepageControl,
|
|
'header-mobile-toggle': headerMobileToggle,
|
|
'list-sort-control': listSortControl,
|
|
};
|
|
|
|
window.components = {};
|
|
|
|
const componentNames = Object.keys(componentMapping);
|
|
|
|
/**
|
|
* Initialize components of the given name within the given element.
|
|
* @param {String} componentName
|
|
* @param {HTMLElement|Document} parentElement
|
|
*/
|
|
function initComponent(componentName, parentElement) {
|
|
let elems = parentElement.querySelectorAll(`[${componentName}]`);
|
|
if (elems.length === 0) return;
|
|
|
|
let component = componentMapping[componentName];
|
|
if (typeof window.components[componentName] === "undefined") window.components[componentName] = [];
|
|
for (let j = 0, jLen = elems.length; j < jLen; j++) {
|
|
let instance = new component(elems[j]);
|
|
if (typeof elems[j].components === 'undefined') elems[j].components = {};
|
|
elems[j].components[componentName] = instance;
|
|
window.components[componentName].push(instance);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Initialize all components found within the given element.
|
|
* @param parentElement
|
|
*/
|
|
function initAll(parentElement) {
|
|
if (typeof parentElement === 'undefined') parentElement = document;
|
|
for (let i = 0, len = componentNames.length; i < len; i++) {
|
|
initComponent(componentNames[i], parentElement);
|
|
}
|
|
}
|
|
|
|
window.components.init = initAll;
|
|
|
|
export default initAll;
|