mirror of
https://github.com/Username-ejg-not-available/snake-vuejs.git
synced 2024-10-27 19:24:01 +00:00
72 lines
1.7 KiB
JavaScript
72 lines
1.7 KiB
JavaScript
|
export default class Transliterator {
|
||
|
constructor(components) {
|
||
|
this.components = components;
|
||
|
this.execute();
|
||
|
}
|
||
|
|
||
|
execute() {
|
||
|
for (const Comp of this.components) {
|
||
|
|
||
|
const method_list = Object.getOwnPropertyNames(Comp.prototype);
|
||
|
|
||
|
const watch = {}
|
||
|
const methods = {}
|
||
|
const computed = {}
|
||
|
|
||
|
for (let x of method_list) {
|
||
|
if (x.startsWith("watch_")) {
|
||
|
let name = x.substr(6);
|
||
|
const handler = function(...args) {
|
||
|
return Comp.prototype[x].bind(this)(...args);
|
||
|
}
|
||
|
watch[name] = handler;
|
||
|
} else if (x.startsWith("compute_")) {
|
||
|
let name = x.substr(8);
|
||
|
const handler = function(...args) {
|
||
|
return Comp.prototype[x].bind(this)(...args);
|
||
|
}
|
||
|
computed[name] = handler;
|
||
|
} else {
|
||
|
const handler = function(...args) {
|
||
|
return Comp.prototype[x].bind(this)(...args);
|
||
|
}
|
||
|
methods[x] = handler;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Vue.component(Comp.tag,{
|
||
|
props: Comp.props,
|
||
|
template: Comp.template,
|
||
|
data: () => {
|
||
|
return new Comp();
|
||
|
},
|
||
|
watch,
|
||
|
computed,
|
||
|
methods,
|
||
|
created: function() {
|
||
|
if (typeof this.on_create === 'function') this.on_create();
|
||
|
},
|
||
|
updated: function() {
|
||
|
if (typeof this.on_update === 'function') this.on_update();
|
||
|
},
|
||
|
mounted: function() {
|
||
|
if (typeof this.on_mount === 'function') this.on_mount();
|
||
|
},
|
||
|
destroyed: function() {
|
||
|
if (typeof this.on_destroy === 'function') this.on_destroy();
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export class Component {
|
||
|
static get tag() { return ""; }
|
||
|
static get props() { return {} }
|
||
|
static get template() { return ""; }
|
||
|
|
||
|
on_create() {}
|
||
|
on_update() {}
|
||
|
on_mount() {}
|
||
|
on_destroy() {}
|
||
|
}
|