UNPKG

@ribajs/core

Version:

Core module of Riba.js

175 lines 14.4 kB
import { parseTemplate } from "./parse-template.js"; import { parseType } from "@ribajs/utils"; import { View } from "./view.js"; import { Observer } from "./observer.js"; import { ModulesService } from "./services/module.service.js"; import { LifecycleService } from "./services/lifecycle.service.js"; export class Riba { static handler(context, ev, binder, el) { if (!this || !this.call) { const error = new Error(`[rv-${binder.type}="${binder.keypath}"] Event handler "${binder.keypath}" not found!"`); console.error(error, binder, el, binder.view.models); throw error; } this.call(context, ev, binder.view.models, el); } static instance; module; lifecycle = LifecycleService.getInstance(); binders = {}; components = {}; formatters = {}; adapters = {}; parseTemplate = parseTemplate; parseType = parseType; templateDelimiters = ["{", "}"]; rootInterface = "."; preloadData = true; removeBinderAttributes = true; blockNodeNames = ["SCRIPT", "STYLE", "TEMPLATE", "CODE"]; blockUnknownCustomElements = true; _prefix = ["rv"]; _fullPrefix = ["rv-"]; set prefix(value) { if (Array.isArray(value)) { this._prefix = []; this._fullPrefix = []; for (const val of value) { this._prefix.push(val); this._fullPrefix.push(val + "-"); } } } get prefix() { return this._prefix; } get fullPrefix() { return this._fullPrefix; } constructor() { this.module = new ModulesService(this.binders, this.components, this.formatters, this.adapters); if (Riba.instance) { return Riba.instance; } Riba.instance = this; } configure(options) { if (!options) { return; } for (const [option, value] of Object.entries(options)) { switch (option) { case "binders": this.binders = { ...this.binders, ...value }; break; case "formatters": this.formatters = { ...this.formatters, ...value }; break; case "components": this.components = { ...this.components, ...value }; break; case "adapters": this.adapters = { ...this.adapters, ...value }; break; case "prefix": this.prefix = value; break; case "parseTemplate": this.parseTemplate = value; break; case "parseType": this.parseType = value; break; case "templateDelimiters": this.templateDelimiters = value; break; case "rootInterface": this.rootInterface = value; break; case "preloadData": this.preloadData = value; break; case "blockNodeNames": this.blockNodeNames = value; break; case "blockUnknownCustomElements": this.blockUnknownCustomElements = Boolean(value); break; default: console.warn("Option not supported", option, value); break; } } } getViewOptions(options) { const viewOptions = { adapters: {}, binders: {}, components: {}, formatters: {}, attributeBinders: [], rootInterface: {}, }; if (options) { viewOptions.binders = { ...viewOptions.binders, ...options.binders }; viewOptions.formatters = { ...viewOptions.formatters, ...options.formatters, }; viewOptions.components = { ...viewOptions.components, ...options.components, }; viewOptions.adapters = { ...viewOptions.adapters, ...options.adapters, }; } if (options?.prefix && Array.isArray(options?.prefix)) { viewOptions.prefix = []; viewOptions.fullPrefix = []; for (const prefix of options.prefix) { viewOptions.prefix.push(prefix); viewOptions.fullPrefix.push(prefix + "-"); } } else { viewOptions.prefix = this.prefix; viewOptions.fullPrefix = this.fullPrefix; } viewOptions.templateDelimiters = options?.templateDelimiters || this.templateDelimiters; viewOptions.rootInterface = options?.rootInterface || this.rootInterface; viewOptions.removeBinderAttributes = typeof options?.removeBinderAttributes === "boolean" ? options.removeBinderAttributes : this.removeBinderAttributes; viewOptions.blockNodeNames = options?.blockNodeNames || this.blockNodeNames; viewOptions.preloadData = typeof options?.preloadData === "boolean" ? options.preloadData : this.preloadData; viewOptions.handler = options?.handler || Riba.handler; viewOptions.binders = { ...this.binders, ...viewOptions.binders }; viewOptions.formatters = { ...this.formatters, ...viewOptions.formatters }; viewOptions.components = { ...this.components, ...viewOptions.components }; viewOptions.adapters = { ...this.adapters, ...viewOptions.adapters }; if (!viewOptions.attributeBinders) { viewOptions.attributeBinders = []; } if (viewOptions.binders) { const attributeBinders = Object.keys(viewOptions.binders).filter((key) => key.indexOf("*") >= 1); viewOptions.attributeBinders.push(...attributeBinders); } return viewOptions; } bind(el, models = {}, options) { const viewOptions = this.getViewOptions(options); Observer.updateOptions(viewOptions); const view = new View(el, models, viewOptions); view.bind(); return view; } } window.Riba = Riba; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmliYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yaWJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsTUFBTSxPQUFPLElBQUk7SUFNUixNQUFNLENBQUMsT0FBTyxDQUVuQixPQUFZLEVBQ1osRUFBUyxFQUNULE1BQWMsRUFDZCxFQUFlO1FBRWYsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FDckIsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxPQUFPLHFCQUFxQixNQUFNLENBQUMsT0FBTyxlQUFlLENBQ3hGLENBQUM7WUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFHTyxNQUFNLENBQUMsUUFBUSxDQUFPO0lBRXZCLE1BQU0sQ0FBaUI7SUFFdkIsU0FBUyxHQUFHLGdCQUFnQixDQUFDLFdB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