UNPKG

@ribajs/core

Version:

Core module of Riba.js

246 lines 19.9 kB
import { parseType, PRIMITIVE, KEYPATH } from "@ribajs/utils"; import { Observer } from "./observer.js"; import { FORMATTER_ARGS, FORMATTER_SPLIT } from "./constants/formatter.js"; import { getInputValue } from "@ribajs/utils/src/dom.js"; export class Binder { static key = ""; static block = false; name; publishes = false; priority = 0; value; observer; view; el; type; formatters; formatterObservers = {}; keypath; args; model; marker; constructor(view, el, type, name, keypath, formatters, identifier) { this.view = view; this.el = el; this.type = type; this.name = name; this.keypath = keypath; this.formatters = formatters; this.model = undefined; if (identifier && type) { this.args = this.getStarArguments(identifier, type); } else { this.args = new Array(); } } observe(model, keypath, callback) { return new Observer(model, keypath, callback); } parseTarget() { if (this.keypath) { const token = parseType(this.keypath, true); if (token.type === PRIMITIVE) { this.value = token.value; } else if (token.type === KEYPATH) { this.observer = this.observe(this.view.models, this.keypath, this); this.model = this.observer.target; } else { throw new Error(`[${this.name}] Unknown type in token`); } } else { this.value = undefined; } } getIterationAlias(modelName) { return "%" + modelName + "%"; } parseFormatterArguments(args, formatterIndex) { return args .map((arg) => parseType(arg, true)) .map(({ type, value }, ai) => { if (type === PRIMITIVE) { const primitiveValue = value; return primitiveValue; } else if (type === KEYPATH) { const keypath = value; if (!this.formatterObservers[formatterIndex]) { this.formatterObservers[formatterIndex] = {}; } let observer = this.formatterObservers[formatterIndex][ai]; if (!observer) { observer = this.observe(this.view.models, keypath, this); this.formatterObservers[formatterIndex][ai] = observer; } return observer.value(); } else { throw new Error(`[${this.name}] Unknown argument type`); } }); } formattedValue(value, startIndex = 0) { if (this.formatters === null) { throw new Error(`[${this.name} formatters is null`); } let promised = false; const formatters = startIndex ? this.formatters.slice(startIndex) : this.formatters; return formatters.reduce((result, declaration, index) => { if (promised) { return result; } const args = declaration.match(FORMATTER_ARGS); if (args === null) { console.warn(new Error(`[${this.name}] No args matched with regex "FORMATTER_ARGS"!\nvalue: ${JSON.stringify(value)}\nresult: ${JSON.stringify(result)}\ndeclaration: ${JSON.stringify(declaration)}\nindex: ${index}\n`)); return result; } const id = args.shift(); if (!id) { throw new Error(`[${this.name}] No formatter id found in args!`); } if (!this.view.options.formatters) { throw new Error(`[${this.name}] No formatters are defined!`); } const formatter = this.view.options.formatters[id]; if (!formatter) { const error = new Error(`[${this.name}] No formatters with id "${id}" found!`); console.error(error, "html element: ", this.el); throw error; } const processedArgs = this.parseFormatterArguments(args, index); if (formatter && typeof formatter.read === "function") { result = formatter.read.apply(this.model, [result, ...processedArgs]); } if (index < formatters.length - 1 && result && typeof result.then === "function" && typeof result.catch === "function") { promised = true; return result.then((value) => this.formattedValue(value, index + 1)); } return result; }, value); } eventHandler(fn, el) { const handler = this.view.options.handler; return (ev) => { if (!handler) { throw new Error("No handler defined in binding.view.options.handler"); } handler.call(fn, this, ev, this, el); }; } set(value) { try { value = this.formattedValue(value); } catch (error) { console.error(error); return value; } if (typeof this.routine === "function") { if (value && typeof value.then === "function" && typeof value.catch === "function") { value .then((realValue) => { this.routine(this.el, realValue); }) .catch((error) => { console.error(error); }); } else { this.routine(this.el, value); } } } sync() { if (this.observer) { this.model = this.observer.target; this.set(this.observer.value()); } else { this.set(this.value); } } publish() { if (this.observer) { if (this.formatters === null) { throw new Error("formatters is null"); } const value = this.formatters.reduceRight((result, declaration, index) => { const args = declaration.split(FORMATTER_SPLIT); const id = args.shift(); if (!id) { throw new Error("id not defined"); } if (!this.view.options.formatters) { return undefined; } const formatter = this.view.options.formatters[id]; const processedArgs = this.parseFormatterArguments(args, index); if (formatter && typeof formatter.publish === "function") { result = formatter.publish(result, ...processedArgs); } return result; }, this._getValue(this.el)); this.observer.setValue(value); } } _bind() { this.parseTarget(); if (this.bind) { if (typeof this.bind !== "function") { throw new Error("the method bind is not a function"); } this.bind(this.el); } if (this.view.options.preloadData) { this.sync(); } } _unbind() { if (this.unbind) { this.unbind(this.el); } if (this.observer) { this.observer.unobserve(); } Object.keys(this.formatterObservers).forEach((fi) => { const args = this.formatterObservers[fi]; Object.keys(args).forEach((ai) => { args[ai].unobserve(); }); }); this.formatterObservers = {}; } _update(models = {}) { if (this.observer) { this.model = this.observer.target; } if (typeof this.update === "function") { this.update(models); } } _getValue(el) { if (typeof this.getValue === "function") { return this.getValue(el); } else { return getInputValue(el); } } getStarArguments(identifier, type) { const regexp = this.view.binderRegex(identifier); const match = type.match(regexp)?.slice(1) || []; return match; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU96QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUt6RCxNQUFNLE9BQWdCLE1BQU07SUFNMUIsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFLaEIsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFLckIsSUFBSSxDQUFTO0lBS2IsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUlsQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBNEJOLEtBQUssQ0FBTztJQUNaLFFBQVEsQ0FBWTtJQUNwQixJQUFJLENBQU87SUFDWCxFQUFFLENBQUk7SUFLTixJQUFJLENBQWdCO0lBQ3BCLFVBQVUsQ0FBa0I7SUFDNUIsa0JBQWtCLEdBQXVCLEVBQUUsQ0FBQztJQUM1QyxPQUFPLENBQVU7SUFLakIsSUFBSSxDQUF5QjtJQUs3QixLQUFLLENBQU87SUFLWixNQUFNLENBQVc7SUFjeEIsWUFDRSxJQUFVLEVBQ1YsRUFBSyxFQUNMLElBQW1CLEVBQ25CLElBQVksRUFDWixPQUEyQixFQUMzQixVQUEyQixFQUMzQixVQUF5QjtRQUV6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdB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