|
|
@@ -34,61 +34,61 @@ export default class Element extends Node {
|
|
|
this._domElement = null;
|
|
|
}
|
|
|
|
|
|
+ appendChildren( nodes ) {
|
|
|
+ this.insertChildren( this.getChildCount(), nodes );
|
|
|
+ }
|
|
|
+
|
|
|
bindDomElement( domElement ) {
|
|
|
this._domElement = domElement;
|
|
|
|
|
|
Element._domToViewMapping.set( domElement, this );
|
|
|
}
|
|
|
|
|
|
- getCorespondingDom() {
|
|
|
- return this._domElement;
|
|
|
- }
|
|
|
-
|
|
|
- // Note that created elements will not have coresponding DOM elements created it these did not exist before.
|
|
|
- static createFromDom( domElement ) {
|
|
|
- let viewElement = this.getCorespondingView( domElement );
|
|
|
+ cloneDomAttrs( element ) {
|
|
|
+ this.markToSync( 'ATTRIBUTES_NEED_UPDATE' );
|
|
|
|
|
|
- if ( viewElement ) {
|
|
|
- return viewElement;
|
|
|
+ for ( let i = element.attributes.length - 1; i >= 0; i-- ) {
|
|
|
+ let attr = element.attributes[ i ];
|
|
|
+ this.setAttr( attr.name, attr.value );
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- if ( domElement instanceof Text ) {
|
|
|
- return new ViewText( domElement.data );
|
|
|
- } else {
|
|
|
- viewElement = new Element( domElement.name );
|
|
|
- const attrs = domElement.attributes;
|
|
|
-
|
|
|
- for ( let i = attrs.length - 1; i >= 0; i-- ) {
|
|
|
- viewElement.setAttr( attrs[ i ].name, attrs[ i ].value );
|
|
|
- }
|
|
|
-
|
|
|
- for ( let childView of viewElement.getChildren() ) {
|
|
|
- domElement.appendChild( this.createFromDom( childView ) );
|
|
|
- }
|
|
|
+ getChild( index ) {
|
|
|
+ return this._children[ index ];
|
|
|
+ }
|
|
|
|
|
|
- return domElement;
|
|
|
- }
|
|
|
+ getChildCount() {
|
|
|
+ return this._children.length;
|
|
|
}
|
|
|
|
|
|
- // Coresponding elements exists only for rendered elementes.
|
|
|
- static getCorespondingView( domElement ) {
|
|
|
- return this._domToViewMapping.get( domElement );
|
|
|
+ getChildIndex( node ) {
|
|
|
+ return this._children.indexOf( node );
|
|
|
}
|
|
|
|
|
|
getChildren() {
|
|
|
return this._children[ Symbol.iterator ]();
|
|
|
}
|
|
|
|
|
|
- getChild( index ) {
|
|
|
- return this._children[ index ];
|
|
|
+ getCorespondingDom() {
|
|
|
+ return this._domElement;
|
|
|
}
|
|
|
|
|
|
- getChildCount() {
|
|
|
- return this._children.length;
|
|
|
+ getAttrKeys() {
|
|
|
+ return this._attrs.keys();
|
|
|
}
|
|
|
|
|
|
- getChildIndex( node ) {
|
|
|
- return this._children.indexOf( node );
|
|
|
+ getAttr( key ) {
|
|
|
+ return this._attrs.get( key );
|
|
|
+ }
|
|
|
+
|
|
|
+ hasAttr( key ) {
|
|
|
+ return this._attrs.has( key );
|
|
|
+ }
|
|
|
+
|
|
|
+ setAttr( key, value ) {
|
|
|
+ this.markToSync( 'ATTRIBUTES_NEED_UPDATE' );
|
|
|
+
|
|
|
+ this._attrs.set( key, value );
|
|
|
}
|
|
|
|
|
|
insertChildren( index, nodes ) {
|
|
|
@@ -106,8 +106,10 @@ export default class Element extends Node {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- appendChildren( nodes ) {
|
|
|
- this.insertChildren( this.getChildCount(), nodes );
|
|
|
+ removeAttr( key ) {
|
|
|
+ this.markToSync( 'ATTRIBUTES_NEED_UPDATE' );
|
|
|
+
|
|
|
+ return this._attrs.delete( key );
|
|
|
}
|
|
|
|
|
|
removeChildren( index, number ) {
|
|
|
@@ -120,37 +122,35 @@ export default class Element extends Node {
|
|
|
return new this._children.splice( index, number );
|
|
|
}
|
|
|
|
|
|
- getAttrKeys() {
|
|
|
- return this._attrs.keys();
|
|
|
- }
|
|
|
-
|
|
|
- getAttr( key ) {
|
|
|
- return this._attrs.get( key );
|
|
|
- }
|
|
|
+ // Note that created elements will not have coresponding DOM elements created it these did not exist before.
|
|
|
+ static createFromDom( domElement ) {
|
|
|
+ let viewElement = this.getCorespondingView( domElement );
|
|
|
|
|
|
- hasAttr( key ) {
|
|
|
- return this._attrs.has( key );
|
|
|
- }
|
|
|
+ if ( viewElement ) {
|
|
|
+ return viewElement;
|
|
|
+ }
|
|
|
|
|
|
- setAttr( key, value ) {
|
|
|
- this.markToSync( 'ATTRIBUTES_NEED_UPDATE' );
|
|
|
+ if ( domElement instanceof Text ) {
|
|
|
+ return new ViewText( domElement.data );
|
|
|
+ } else {
|
|
|
+ viewElement = new Element( domElement.name );
|
|
|
+ const attrs = domElement.attributes;
|
|
|
|
|
|
- this._attrs.set( key, value );
|
|
|
- }
|
|
|
+ for ( let i = attrs.length - 1; i >= 0; i-- ) {
|
|
|
+ viewElement.setAttr( attrs[ i ].name, attrs[ i ].value );
|
|
|
+ }
|
|
|
|
|
|
- cloneDomAttrs( element ) {
|
|
|
- this.markToSync( 'ATTRIBUTES_NEED_UPDATE' );
|
|
|
+ for ( let childView of viewElement.getChildren() ) {
|
|
|
+ domElement.appendChild( this.createFromDom( childView ) );
|
|
|
+ }
|
|
|
|
|
|
- for ( let i = element.attributes.length - 1; i >= 0; i-- ) {
|
|
|
- let attr = element.attributes[ i ];
|
|
|
- this.setAttr( attr.name, attr.value );
|
|
|
+ return domElement;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- removeAttr( key ) {
|
|
|
- this.markToSync( 'ATTRIBUTES_NEED_UPDATE' );
|
|
|
-
|
|
|
- return this._attrs.delete( key );
|
|
|
+ // Coresponding elements exists only for rendered elementes.
|
|
|
+ static getCorespondingView( domElement ) {
|
|
|
+ return this._domToViewMapping.get( domElement );
|
|
|
}
|
|
|
}
|
|
|
|