e3230f8f21
Fixed broken build system in broken webpack version. Also updates module system to standardise on ES6 import/exports, Especially since babel has changed it's 'default' logic for the old module system.
82 lines
No EOL
2.8 KiB
JavaScript
82 lines
No EOL
2.8 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";
|
|
|
|
|
|
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,
|
|
};
|
|
|
|
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; |