104 lines
3.1 KiB
JavaScript
104 lines
3.1 KiB
JavaScript
kampfer.require('Component');
|
|
kampfer.require('events');
|
|
kampfer.require('Menu');
|
|
kampfer.require('dom');
|
|
|
|
kampfer.provide('mindMap.Window');
|
|
|
|
|
|
//TODO 构造器使用与menu相同的逻辑
|
|
kampfer.mindMap.Window = kampfer.Component.extend({
|
|
initializer : function(id) {
|
|
var type = kampfer.type(id),
|
|
that = this, scrollX, scrollY, x, y;
|
|
|
|
if(type === 'string') {
|
|
this._element = this._doc.getElementById(id);
|
|
this._id = id;
|
|
|
|
if(!this._element) {
|
|
this.render();
|
|
}
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
this.beDraged = false;
|
|
|
|
kampfer.events.addListener(this._element, 'mousedown', function(event) {
|
|
scrollX = kampfer.dom.scrollLeft(that._element);
|
|
scrollY = kampfer.dom.scrollTop(that._element);
|
|
x = event.pageX;
|
|
y = event.pageY;
|
|
|
|
if(event.which === 1) {
|
|
//不存在map或已经开始拖拽不执行处理逻辑
|
|
if( !that.beDraged && kampfer.mindMap.map && event.target.getAttribute('role') === 'map') {
|
|
that.beDraged = true;
|
|
}
|
|
}
|
|
});
|
|
|
|
kampfer.events.addListener(this._element, 'mouseup', function(event) {
|
|
if(that.beDraged) {
|
|
that.beDraged = false;
|
|
return false;
|
|
}
|
|
});
|
|
|
|
kampfer.events.addListener(this._element, 'mousemove', function(event) {
|
|
if(that.beDraged) {
|
|
that.scrollLeft(scrollX + x - event.pageX);
|
|
that.scrollTop(scrollY + y - event.pageY);
|
|
|
|
return false;
|
|
}
|
|
});
|
|
|
|
kampfer.events.addListener(this._element, 'contextmenu', function(event) {
|
|
var role = event.target.getAttribute('role'),
|
|
scrollX = kampfer.mindMap.window.scrollLeft(),
|
|
scrollY = kampfer.mindMap.window.scrollTop();
|
|
|
|
var menu;
|
|
if(role === 'content' || role === 'caption' || role === 'node') {
|
|
menu = kampfer.mindMap.nodeContextMenu;
|
|
} else if(role === 'map') {
|
|
menu = kampfer.mindMap.contextMenu;
|
|
}
|
|
|
|
if(menu) {
|
|
menu.setPosition(event.pageX + scrollX, event.pageY + scrollY);
|
|
menu.show();
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
kampfer.events.addListener(this._element, 'click', function() {
|
|
kampfer.mindMap.contextMenu.hide();
|
|
kampfer.mindMap.nodeContextMenu.hide();
|
|
});
|
|
},
|
|
|
|
scrollLeft : function(offset) {
|
|
var offsetX = kampfer.dom.scrollLeft(this._element, offset);
|
|
if(typeof offsetX === 'number') {
|
|
return offsetX;
|
|
}
|
|
},
|
|
|
|
scrollTop : function(offset) {
|
|
var offsetY = kampfer.dom.scrollTop(this._element, offset);
|
|
if(typeof offsetY === 'number') {
|
|
return offsetY;
|
|
}
|
|
},
|
|
|
|
beDraged : null,
|
|
|
|
dispose : function() {
|
|
kampfer.mindMap.Window.superClass.dispose.apply(this);
|
|
kampfer.events.removeListener(this._element);
|
|
}
|
|
}); |