%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/tjamichg/cursos.tjamich.gob.mx/plugin/mindmap/edit-mindmap/vendor/js/
Upload File :
Create Path :
Current File : /home/tjamichg/cursos.tjamich.gob.mx/plugin/mindmap/edit-mindmap/vendor/js/component.js

/*global kampfer*/
kampfer.require('Composition');
kampfer.require('dom');

kampfer.provide('Component');

kampfer.Component = kampfer.Composition.extend({

	initializer : function() {
		this._wasDecorated = false;
		this._inDocument = false;
	},
	
	_element : null,
	
	_doc : kampfer.global.document,
	
	_wasDecorated : null,
	
	_inDocument : null,
	
	addChild : function(child, render) {
		kampfer.Component.superClass.addChild.apply(this, arguments);
		if(child._inDocument && this._inDocument) {
		//如果父子component都在文档流中,那么将子component剪切到父component
			this._element.appendChild( child.getElement() );
		} else if(render) {
		//如果需要渲染子component,那么先确保父component已经生成了dom对象
		//注意:这是个强制行为
			if(!this._element) {
				this.createDom();
			}
			child.render();
		} else if(!child._inDocument && this._inDocument) {
		//如果子component不在文档流中,而父component在。那么如果子component已生成了dom对象,
		//就将子component插入文档流
			if( child.getElement() ) {
				child.enterDocument();
			}
		}
	},
	
	removeChild : function(child, unrender) {
		child = kampfer.Component.superClass.removeChild.apply(this, arguments);
		if(unrender) {
			child.exitDocument();
			var childElement = child.getElement();
			if(child.childElement) {
				child.childElement.parentNode.removeChild(child.childElement);
			}
		}
	},
	
	isInDocument : function() {
		return this._inDocument;
	},
	
	wasDecorated : function() {
		return this._wasDecorated;
	},
	
	render : function(parent) {
		if(!this._inDocument) {
			if(!this._element) {
				this.createDom();
			}
			
			this.enterDocument(parent);
			
			this.decorate();
			
			this.eachChild(function(child) {
				child.render();
			});
		}
	},
	
	createDom : function() {
		this._element = this._doc.createElement('div');
	},
	
	getElement : function() {
		return this._element;
	},
	
	/* 子类应该重写这个方法 */
	decorate : function() {
		if(!this._inDocument) {
			throw ('component not in document');
		}
		
		this._wasDecorated = true;
	},
	
	enterDocument : function(parent) {
		this._inDocument = true;
		
		if(parent && parent.nodeType) {
			parent.appendChild(this._element);
		} else if( this._parent && this._parent.getElement() ) {
			this._parent.getElement().appendChild(this._element);
		} else {
			this._doc.body.appendChild(this._element);
		}
	},
	
	exitDocument : function() {
		//if( this._parent && this._parent.getElement() ) {
		//	this._parent.getElement().removeChild(this._element);
		//} else {
		//	this._doc.body.removeChild(this._element);
		//}
		this._element.parentNode.removeChild(this._element);

		this._inDocument = false;
	},
	
	getPosition : function() {
		if(this._element) {
			return {
				left : parseInt( kampfer.dom.getStyle(this._element, 'left'), 10 ),
				top : parseInt( kampfer.dom.getStyle(this._element, 'top'), 10 )
			};
		}
	},
	
	setPosition : function(left, top) {
		if(this._element) {
			//kampfer.style.setStyle(this._element, {
			//	left : left + 'px',
			//	top : top + 'px'
			//});
			this._element.style.left = left + 'px';
			this._element.style.top = top + 'px';
		}
	},

	show : function() {
		if(this._element) {
			this.dispatch('beforeshow');
			this._element.style.display = 'block';
		}
	},

	hide : function() {
		if(this._element) {
			this.dispatch('beforehide');
			this._element.style.display = 'none';
		}
	},
	
	getSize : function() {
		if(this._inDocument) {
			return {
				width : this._element.offsetWidth,
				height : this._element.offsetHeight
			};
		}
	},

	dispose : function() {
		kampfer.Component.superClass.dispose.apply(this);
	}
	
});

Zerion Mini Shell 1.0