Files

292 lines
5.1 KiB
JavaScript
Raw Permalink Normal View History

2025-12-25 11:16:59 +01:00
/*
Copyright (c) 2020, 2023, The Unified Company.
This code is part of Unify.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE,
as published by the Free Software Foundation.
See the GNU AFFERO GENERAL PUBLIC LICENSE, for more details.
https://unifyjs.org
*/
import document from '../unify/document.js';
import tools from '../unify/tools.js';
export default class dom{
addDOMToSelector = true;
setElement() {
var objectName = tools.createCSSClassName( object );
element.className = this.getClassName( object.editable, objectName ); //tools.cleanRollup( objectName )
}
getClassName( editable, objectName ) {
if( editable ) {
return objectName + "Element";
} else {
return objectName + "Grid grid";
}
}
createSetter( object ) {
object.__defineSetter__( "text", function( value ){
if( typeof value == "number" ) {
value = value.toString();
}
object.__text = value;
object.updateElementContent();
});
}
createGetter( object ) {
object.__defineGetter__( "text", function(){
return object.__text;
});
}
createSetterAndGetters( object ) {
object.__text = object.text;
this.createSetter( object );
this.createGetter( object );
}
createDOMElements( object, objectName ) {
object.elements = [];
if( object.layers == 2 ) {
object.boxElement = this.createDiv( objectName, "box", object.id );
object.elements.push( object.boxElement );
}
object.defaultElement = this.createDiv( objectName, "grid", object.id );
if( object.useCustomElement ) {
object.element = object.customElement;
} else {
object.element = object.defaultElement;
}
object.elements.push( object.element );
}
addClasses( object, objectName ) {
var type = "Element";
var mainClassName = objectName; //tools.cleanRollup( );
object.customElement.classList.add( mainClassName + type );
object.customElement.classList.add( type );
object.customElement.classList.add( this.device );
object.customElement.classList.add( this.tint );
object.customElement.classList.add( this.os );
}
updateZIndex( object ) {
if( !object.zIndex && object.setZIndex ) {
object.element.style["z-index"] = tools.getApplicationDepth( object );
if( object.inverseZIndex ) {
object.element.style["z-index"] = 1000 - tools.getApplicationDepth( object )
}
}
}
attachUnifyObjectToElements( object ) {
for( var c = 0; c < object.elements.length; c++ ) {
object.elements[ c ].object = object;
}
}
parseObject( object ) {
var objectName = tools.createCSSClassName( object );
this.createDOMElements( object, objectName );
if( object.customElement ) {
this.addClasses( object, objectName );
} else {
object.customElement = object.defaultElement;
}
this.createSetterAndGetters( object );
object.updateElementContent();
this.updateZIndex( object );
this.attachUnifyObjectToElements( object );
if( !object.selector && object.parent && object.addToDom ) {
this.parseProperty( objectName, object, object.parent );
}
}
addElementToDOMParent( object, propertyValue ) {
if( propertyValue.propertyName[0] == "_" ) {
object.elements[ object.elements.length - 1 ].prepend( propertyValue.elements[0] );
} else {
if( object.elements ) {
object.elements[ object.elements.length - 1 ].appendChild( propertyValue.elements[0] );
}
}
}
addElementToBody( propertyValue ) {
document.body.appendChild( propertyValue.elements[0] );
}
parseProperty( propertyName, propertyValue, object ) {
if( tools.isUnifyObject( propertyName, propertyValue ) ) {
if( propertyValue.absolute ) {
this.addElementToBody( propertyValue );
return true;
}
this.addElementToDOMParent( object, propertyValue );
}
}
parseInnerElements( object ){
var elements = object.elements;
for( var c = elements.length - 1; c > 0; c--) {
elements[ c - 1 ].appendChild( elements[c] );
}
if( object.selector && this.addDOMToSelector ) {
this.appendToSelector( object, elements );
}
}
appendToSelector( object, elements ) {
var selector = object.selector;
var element = document.querySelector( selector );
if( element ) {
element.appendChild( elements[0] );
}
}
createDiv( divName, type, id ){
var div = document.createElement("div");
var mainClassName = divName + tools.CamelCase( type.toUpperCase() ); //tools.cleanRollup(
div.classList.add( mainClassName );
if( id ) {
div.classList.add( mainClassName.replace( "_" + id, "" ).replace(id, "") );
}
div.classList.add( type );
div.classList.add( this.device );
div.classList.add( this.tint );
div.classList.add( this.os );
return div;
}
}