logs in console, caching in getAgentProps, console createAgent independent of GUI

This commit is contained in:
STEINNI
2025-12-06 18:53:23 +00:00
parent 1143c52c11
commit c1d0a16cf3
26 changed files with 18025 additions and 100 deletions
+55 -11
View File
@@ -1,32 +1,77 @@
if(!app.helpers) app.helpers = {}
/**
* Mixing add-in methods to your view instance.
* All of this should not be a helper, but inherited this from WindozDomContent, but not my framework anymore.
* All of this should not be a helper, but inherited this from EICDomContent, but not my framework anymore.
* @category MyEic
*/
app.helpers.activeAttributes = {
/**
* setupTriggers adds all click (data-trigger) and change (data-change) handlers.
* handlers should have the signatue : onXyz(component, event), will spit a warning if the handler doesn't exist.
* setupTriggers is re-entrant: it can be called again after refreshing part of the view
* @param {eicui-components []} components : the view's components (usually result of ui.eicfy(this.el) )
*/
setupTriggers(components){ // Should inherit this from WindozDomContent, but not my framework anymore.
for(let component of components.filter(component => component.el.hasAttribute('data-trigger'))) {
_triggersRegister: { 'click': new WeakMap(), 'change': new WeakMap()},
setupTriggers(components = []){ // Should inherit this from EICDomContent, but not my framework anymore.
for(let component of components.filter(component => component.el.hasAttribute('data-trigger'))) { //components with or without click property
if(typeof this[component.el.dataset.trigger] !== 'function') {
console.warn(`data-trigger without corresponding method : ${component.el.dataset.trigger}`)
continue
}
component.click = this[component.el.dataset.trigger].bind(this, component)
if(component.click) component.click = this[component.el.dataset.trigger].bind(this, component)
else {
const oldTrigger = this._triggersRegister.click.get(component.el)
if(oldTrigger) component.el.removeEventListener('click', oldTrigger)
const newTrigger = this[component.el.dataset.trigger].bind(this, component)
this._triggersRegister.click.set(component.el, newTrigger)
component.el.addEventListener('click', newTrigger)
}
}
for(let component of components.filter(component => component.el.hasAttribute('data-change'))) {
if(this.el){ // for views and other content-based classes, add triggers on simple non-component elements
for(const el of this.el.querySelectorAll('[data-trigger]:not([data-eicui-id])')){
if(typeof this[el.dataset.trigger] !== 'function') {
console.warn(`data-trigger without corresponding method : ${el.dataset.trigger}`)
continue
}
const oldTrigger = this._triggersRegister.click.get(el)
if(oldTrigger) el.removeEventListener('click', oldTrigger)
const newTrigger = this[el.dataset.trigger].bind(this)
this._triggersRegister.click.set(el, newTrigger)
el.addEventListener('click', newTrigger)
}
}
for(let component of components.filter(component => component.el.hasAttribute('data-change'))) { //components with or without click property
if(typeof this[component.el.dataset.change] !== 'function') {
console.warn(`data-change without corresponding method : ${component.el.dataset.trigger}`)
console.warn(`data-change without corresponding method : ${component.el.dataset.change}`)
continue
}
component.el.addEventListener("change",this[component.el.dataset.change].bind(this, component))
if(component.el.type=='text') component.el.addEventListener("keyup",this[component.el.dataset.change].bind(this, component))
const oldTrigger = this._triggersRegister.change.get(component.el)
if(oldTrigger) {
component.el.removeEventListener('change', oldTrigger)
component.el.removeEventListener('keyup', oldTrigger)
}
const newTrigger = this[component.el.dataset.change].bind(this, component)
this._triggersRegister.change.set(component.el, newTrigger)
component.el.addEventListener("change", newTrigger)
if(component.el.type=='text') component.el.addEventListener("keyup", newTrigger)
}
if(this.el){ // for views and other content-based classes, add triggers on simple non-component elements
for(const el of this.el.querySelectorAll('[data-change]:not([data-eicui-id])')){
if(typeof this[el.dataset.change] !== 'function') {
console.warn(`data-change without corresponding method : ${el.dataset.change}`)
continue
}
const oldTrigger = this._triggersRegister.change.get(el)
if(oldTrigger) {
el.removeEventListener('change', oldTrigger)
el.removeEventListener('keyup', oldTrigger)
}
const newTrigger = this[el.dataset.change].bind(this)
this._triggersRegister.change.set(el, newTrigger)
el.addEventListener('change', newTrigger)
if(el.type=='text') el.addEventListener('keyup', newTrigger)
}
}
},
@@ -39,7 +84,7 @@ app.helpers.activeAttributes = {
* setupRefs is re-entrant: it can be called again after refreshing part of the view
* @param {eicui-components []} components : the view's components (usually result of ui.eicfy(this.el) )
*/
setupRefs(components = []){
setupRefs(components=[]){
if(!this.components) this.components = {}
for(let component of components.filter(component => component.el.hasAttribute('data-ref'))) {
this.components[component.el.dataset.ref] = component
@@ -61,7 +106,6 @@ app.helpers.activeAttributes = {
}
},
/**
* output (singular) : this.output('mydiv', '<p>Some markup</p>') places markup in a data-output node
* @param {*} name