| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /**
- * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
- 'use strict';
- import EmitterMixin from '../emittermixin.js';
- import Renderer from './renderer.js';
- import Converter from './converter.js';
- import objectUtils from '../lib/lodash/object.js';
- export default class TreeView {
- constructor( domRoot ) {
- /**
- * Root of the DOM.
- */
- this.domRoot = domRoot;
- this.observers = new Set();
- this.converter = new Converter();
- /**
- * Root of the view
- */
- this.viewRoot = this.converter.domToView( domRoot , { bind: true, withChildren: false } );
- this.viewRoot.setTreeView( this );
- this.renderer = new Renderer( this.converter );
- this.renderer.markToSync( 'CHILDREN', this.viewRoot );
- this.viewRoot.on( 'change', ( evt, type, node ) => {
- this.renderer.markToSync( type, node );
- } );
- }
- addObserver( observer ) {
- this.observers.add( observer );
- observer.init( this );
- observer.attach();
- }
- render() {
- for ( let observer of this.observers ) {
- observer.detach();
- }
- this.renderer.render();
- for ( let observer of this.observers ) {
- observer.attach();
- }
- }
- }
- objectUtils.extend( TreeView.prototype, EmitterMixin );
- /**
- * Enum representing type of the change.
- * Possible values:
- *
- * * `CHILDREN` - for child list changes,
- * * `ATTRIBUTES` - for element attributes changes,
- * * `TEXT` - for text nodes changes.
- *
- * @typedef {String} treeView.ChangeType
- */
|