172 lines
3.6 KiB
JavaScript
172 lines
3.6 KiB
JavaScript
const Event = require('r3-event');
|
|
const Utils = require('r3-utils');
|
|
const R3Object = require('r3-r3-object.js');
|
|
|
|
/**
|
|
|
|
OPTIONS_START
|
|
runtime='default'
|
|
OPTIONS_END
|
|
|
|
INSTANCE_OPTIONS_MAPPING_START
|
|
INSTANCE_OPTIONS_MAPPING_END
|
|
|
|
LINKED_OBJECTS_START
|
|
LINKED_OBJECTS_END
|
|
|
|
EXCLUDED_FROM_INSTANCE_OPTIONS_START
|
|
runtime
|
|
EXCLUDED_FROM_INSTANCE_OPTIONS_END
|
|
|
|
**/
|
|
|
|
class Component extends R3Object {
|
|
|
|
//CONSTRUCTOR_EXTENDS_TEMPLATE_START
|
|
constructor(options) {
|
|
|
|
if (Utils.UndefinedOrNull(options)) {
|
|
options = {};
|
|
}
|
|
|
|
super(options);
|
|
|
|
this.emit(Event.OBJECT_CREATED, this);
|
|
|
|
//OPTIONS_INIT_START
|
|
if (typeof options === 'undefined') {
|
|
options = {};
|
|
}
|
|
if (Utils.UndefinedOrNull(options.runtime)) {
|
|
options.runtime = 'default';
|
|
}
|
|
//OPTIONS_INIT_END
|
|
|
|
//CUSTOM_OPTIONS_INIT_START
|
|
//CUSTOM_OPTIONS_INIT_END
|
|
|
|
Object.assign(this, options);
|
|
|
|
//CUSTOM_BEFORE_INIT_START
|
|
this.emit(Event.COMPONENT_INITIALIZED, this);
|
|
//CUSTOM_BEFORE_INIT_END
|
|
|
|
this.emit(Event.OBJECT_INITIALIZED, this);
|
|
}
|
|
//CONSTRUCTOR_EXTENDS_TEMPLATE_END
|
|
|
|
//CREATE_INSTANCE_TEMPLATE_START
|
|
createInstance() {
|
|
|
|
//CREATE_INSTANCE_BEFORE_START
|
|
this.emit(Event.CREATE_INSTANCE_BEFORE, this);
|
|
//CREATE_INSTANCE_BEFORE_END
|
|
|
|
//CUSTOM_CREATE_INSTANCE_START
|
|
//CUSTOM_CREATE_INSTANCE_END
|
|
|
|
//CREATE_INSTANCE_AFTER_START
|
|
this[this.runtime].createInstance(
|
|
this,
|
|
{
|
|
//CREATE_INSTANCE_OPTIONS_START
|
|
//CREATE_INSTANCE_OPTIONS_END
|
|
}
|
|
)
|
|
|
|
this.emit(Event.INSTANCE_CREATED, this);
|
|
//CREATE_INSTANCE_AFTER_END
|
|
|
|
}
|
|
//CREATE_INSTANCE_TEMPLATE_END
|
|
|
|
//UPDATE_INSTANCE_TEMPLATE_START
|
|
updateInstance(property) {
|
|
|
|
//UPDATE_INSTANCE_BEFORE_START
|
|
this.emit(Event.UPDATE_INSTANCE_BEFORE, this);
|
|
//UPDATE_INSTANCE_BEFORE_END
|
|
|
|
//UPDATE_INSTANCE_OPTIONS_START
|
|
//UPDATE_INSTANCE_OPTIONS_END
|
|
|
|
//CUSTOM_UPDATE_INSTANCE_START
|
|
//CUSTOM_UPDATE_INSTANCE_END
|
|
|
|
//UPDATE_INSTANCE_AFTER_START
|
|
this.emit(Event.UPDATE_INSTANCE_AFTER, this);
|
|
//UPDATE_INSTANCE_AFTER_END
|
|
|
|
}
|
|
//UPDATE_INSTANCE_TEMPLATE_END
|
|
|
|
//UPDATE_FROM_INSTANCE_TEMPLATE_START
|
|
updateFromInstance(property) {
|
|
|
|
//UPDATE_FROM_INSTANCE_BEFORE_START
|
|
this.emit(Event.UPDATE_FROM_INSTANCE_BEFORE, this);
|
|
//UPDATE_FROM_INSTANCE_BEFORE_END
|
|
|
|
//UPDATE_FROM_INSTANCE_OPTIONS_START
|
|
//UPDATE_FROM_INSTANCE_OPTIONS_END
|
|
|
|
//CUSTOM_UPDATE_FROM_INSTANCE_START
|
|
//CUSTOM_UPDATE_FROM_INSTANCE_END
|
|
|
|
//UPDATE_FROM_INSTANCE_AFTER_START
|
|
this.emit(Event.UPDATE_FROM_INSTANCE_AFTER, this);
|
|
//UPDATE_FROM_INSTANCE_AFTER_END
|
|
|
|
}
|
|
//UPDATE_FROM_INSTANCE_TEMPLATE_END
|
|
|
|
//DISPOSE_TEMPLATE_START
|
|
dispose() {
|
|
|
|
//DISPOSE_BEFORE_START
|
|
this.subscribe(
|
|
Event.INSTANCE_DISPOSED,
|
|
function(object) {
|
|
if (object === this) {
|
|
this.emit(Event.DISPOSE_OBJECT, this);
|
|
}
|
|
}
|
|
);
|
|
//DISPOSE_BEFORE_END
|
|
|
|
//CUSTOM_DISPOSE_START
|
|
//CUSTOM_DISPOSE_END
|
|
|
|
//DISPOSE_AFTER_START
|
|
this.disposeInstance();
|
|
//DISPOSE_AFTER_END
|
|
|
|
}
|
|
//DISPOSE_TEMPLATE_END
|
|
|
|
//DISPOSE_INSTANCE_TEMPLATE_START
|
|
disposeInstance() {
|
|
|
|
//DISPOSE_INSTANCE_BEFORE_START
|
|
console.log('Disposing instance of ' + this.name);
|
|
//DISPOSE_INSTANCE_BEFORE_END
|
|
|
|
//CUSTOM_DISPOSE_INSTANCE_START
|
|
//CUSTOM_DISPOSE_INSTANCE_END
|
|
|
|
//DISPOSE_INSTANCE_AFTER_START
|
|
this.emit(Event.DISPOSE_INSTANCE, this);
|
|
//DISPOSE_INSTANCE_AFTER_END
|
|
|
|
}
|
|
//DISPOSE_INSTANCE_TEMPLATE_END
|
|
|
|
//CUSTOM_IMPLEMENTATION_START
|
|
//CUSTOM_IMPLEMENTATION_END
|
|
|
|
}
|
|
|
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
|
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
|
|
|
|
module.exports = Component; |