upgrade
This commit is contained in:
165
plugin/mindmap/edit-mindmap/vendor/js/component.js
vendored
Normal file
165
plugin/mindmap/edit-mindmap/vendor/js/component.js
vendored
Normal file
@@ -0,0 +1,165 @@
|
||||
/*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);
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user