X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/e711290d8b1ce06b38e0560248806e8de2077870..refs/pull/4317/head:/resources/js/services/components.js diff --git a/resources/js/services/components.js b/resources/js/services/components.js index 102b24d45..beb0ce92f 100644 --- a/resources/js/services/components.js +++ b/resources/js/services/components.js @@ -19,44 +19,6 @@ const componentModelMap = {}; */ const elementComponentMap = new WeakMap(); -/** - * Initialize a component instance on the given dom element. - * @param {String} name - * @param {Element} element - */ -function initComponent(name, element) { - /** @type {Function|undefined} * */ - const componentModel = componentModelMap[name]; - if (componentModel === undefined) return; - - // Create our component instance - /** @type {Component} * */ - let instance; - try { - instance = new componentModel(); - instance.$name = name; - instance.$el = element; - const allRefs = parseRefs(name, element); - instance.$refs = allRefs.refs; - instance.$manyRefs = allRefs.manyRefs; - instance.$opts = parseOpts(name, element); - instance.setup(); - } catch (e) { - console.error('Failed to create component', e, name, element); - } - - // Add to global listing - if (typeof components[name] === 'undefined') { - components[name] = []; - } - components[name].push(instance); - - // Add to element mapping - const elComponents = elementComponentMap.get(element) || {}; - elComponents[name] = instance; - elementComponentMap.set(element, elComponents); -} - /** * Parse out the element references within the given element * for the given component name. @@ -93,13 +55,13 @@ function parseRefs(name, element) { /** * Parse out the element component options. - * @param {String} name + * @param {String} componentName * @param {Element} element * @return {Object} */ -function parseOpts(name, element) { +function parseOpts(componentName, element) { const opts = {}; - const prefix = `option:${name}:`; + const prefix = `option:${componentName}:`; for (const {name, value} of element.attributes) { if (name.startsWith(prefix)) { const optName = name.replace(prefix, ''); @@ -109,6 +71,44 @@ function parseOpts(name, element) { return opts; } +/** + * Initialize a component instance on the given dom element. + * @param {String} name + * @param {Element} element + */ +function initComponent(name, element) { + /** @type {Function|undefined} * */ + const ComponentModel = componentModelMap[name]; + if (ComponentModel === undefined) return; + + // Create our component instance + /** @type {Component} * */ + let instance; + try { + instance = new ComponentModel(); + instance.$name = name; + instance.$el = element; + const allRefs = parseRefs(name, element); + instance.$refs = allRefs.refs; + instance.$manyRefs = allRefs.manyRefs; + instance.$opts = parseOpts(name, element); + instance.setup(); + } catch (e) { + console.error('Failed to create component', e, name, element); + } + + // Add to global listing + if (typeof components[name] === 'undefined') { + components[name] = []; + } + components[name].push(instance); + + // Add to element mapping + const elComponents = elementComponentMap.get(element) || {}; + elComponents[name] = instance; + elementComponentMap.set(element, elComponents); +} + /** * Initialize all components found within the given element. * @param {Element|Document} parentElement