145 lines
4.9 KiB
JavaScript
Raw Normal View History

2009-06-07 18:59:43 +00:00
/*
2011-07-27 14:53:32 -03:00
* Copyright [2011] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
mindplot.Tip = new Class({
initialize:function(divContainer) {
this.options = {
panel:null,
container:null,
divContainer:divContainer,
content:null,
onShowComplete:Class.empty,
onHideComplete:Class.empty,
width:null,
height:null,
form:null
};
2009-06-07 18:59:43 +00:00
this.buildTip();
2011-07-27 14:53:32 -03:00
this._isMouseOver = false;
this._open = false;
},
2011-07-27 14:53:32 -03:00
buildTip : function() {
2009-06-07 18:59:43 +00:00
var opts = this.options;
var panel = new Element('div').addClass('bubbleContainer');
2011-07-28 13:06:15 -03:00
if ($defined(opts.height))
2009-06-07 18:59:43 +00:00
panel.setStyle('height', opts.height);
2011-07-28 13:06:15 -03:00
if ($defined(opts.width))
2009-06-07 18:59:43 +00:00
panel.setStyle('width', opts.width);
2011-07-28 13:06:15 -03:00
if (!$defined(opts.divContainer)) {
2011-07-27 14:53:32 -03:00
opts.divContainer = document.body;
2009-06-07 18:59:43 +00:00
}
panel.injectTop(opts.divContainer);
opts.panel = $(panel);
2011-07-27 14:53:32 -03:00
opts.panel.setStyle('opacity', 0);
opts.panel.addEvent('mouseover', function() {
this._isMouseOver = true;
}.bind(this));
opts.panel.addEvent('mouseleave', function(event) {
this.close(event);
}.bindWithEvent(this));//this.close.bindWithEvent(this)
2009-06-07 18:59:43 +00:00
2011-07-27 14:53:32 -03:00
},
2011-07-27 14:53:32 -03:00
click : function(event, el) {
2009-06-07 18:59:43 +00:00
return this.open(event, el);
2011-07-27 14:53:32 -03:00
},
2011-07-27 14:53:32 -03:00
open : function(event, content, source) {
this._isMouseOver = true;
2009-06-07 18:59:43 +00:00
this._evt = new Event(event);
2011-07-27 14:53:32 -03:00
this.doOpen.delay(500, this, [content,source]);
},
2011-07-27 14:53:32 -03:00
doOpen : function(content, source) {
2011-07-28 13:06:15 -03:00
if ($defined(this._isMouseOver) && !$defined(this._open) && !$defined(this._opening)) {
2011-07-27 14:53:32 -03:00
this._opening = true;
2009-06-07 18:59:43 +00:00
var container = new Element('div');
$(content).inject(container);
2011-07-27 14:53:32 -03:00
this.options.content = content;
this.options.container = container;
2009-06-07 18:59:43 +00:00
$(this.options.container).inject(this.options.panel);
2011-07-27 14:53:32 -03:00
this.init(this._evt, source);
$(this.options.panel).effect('opacity', {duration:500, onComplete:function() {
this._open = true;
this._opening = false;
}.bind(this)}).start(0, 100);
2009-06-07 18:59:43 +00:00
}
2011-07-27 14:53:32 -03:00
},
2011-07-27 14:53:32 -03:00
updatePosition : function(event) {
2009-06-07 18:59:43 +00:00
this._evt = new Event(event);
2011-07-27 14:53:32 -03:00
},
2011-07-27 14:53:32 -03:00
close : function(event) {
this._isMouseOver = false;
this.doClose.delay(50, this, new Event(event));
},
2011-07-27 14:53:32 -03:00
doClose : function(event) {
2009-06-07 18:59:43 +00:00
2011-07-28 13:06:15 -03:00
if (!$defined(this._isMouseOver) && $defined(this._opening))
2011-07-27 14:53:32 -03:00
this.doClose.delay(500, this, this._evt);
2009-06-07 18:59:43 +00:00
2011-07-28 13:06:15 -03:00
if (!$defined(this._isMouseOver) && $defined(this._open)) {
2009-06-07 18:59:43 +00:00
this.forceClose();
}
2011-07-27 14:53:32 -03:00
},
2011-07-27 14:53:32 -03:00
forceClose : function() {
this.options.panel.effect('opacity', {duration:100, onComplete:function() {
this._open = false;
2009-06-07 18:59:43 +00:00
$(this.options.panel).setStyles({left:0,top:0});
2011-07-26 15:07:53 -03:00
$(this.options.container).dispose();
2011-07-27 14:53:32 -03:00
}.bind(this)}).start(100, 0);
},
2011-07-27 14:53:32 -03:00
init : function(event, source) {
2009-06-07 18:59:43 +00:00
var opts = this.options;
var coordinates = $(opts.panel).getCoordinates();
var width = coordinates.width; //not total width, but close enough
var height = coordinates.height; //not total height, but close enough
var offset = designer.getWorkSpace().getScreenManager().getWorkspaceIconPosition(source);
var containerCoords = $(opts.divContainer).getCoordinates();
var screenWidth = containerCoords.width;
var screenHeight = containerCoords.height;
2011-07-26 15:07:53 -03:00
$(this.options.panel).dispose();
2009-06-07 18:59:43 +00:00
this.buildTip();
$(this.options.container).inject(this.options.panel);
this.moveTopic(offset, $(opts.panel).getCoordinates().height);
2011-07-27 14:53:32 -03:00
},
2009-06-07 18:59:43 +00:00
2011-07-27 14:53:32 -03:00
moveTopic : function(offset, panelHeight) {
2009-06-07 18:59:43 +00:00
var opts = this.options;
var width = $(opts.panel).getCoordinates().width;
2011-07-27 14:53:32 -03:00
$(opts.panel).setStyles({left:offset.x - (width / 2), top:offset.y - (panelHeight * 2) + 35});
}
});
2009-06-07 18:59:43 +00:00
2011-07-27 14:53:32 -03:00
mindplot.Tip.getInstance = function(divContainer) {
2009-06-07 18:59:43 +00:00
var result = mindplot.Tip.instance;
2011-07-27 14:53:32 -03:00
if (!$defined(result)) {
2009-06-07 18:59:43 +00:00
mindplot.Tip.instance = new mindplot.Tip(divContainer);
result = mindplot.Tip.instance;
}
return result;
2011-07-27 14:53:32 -03:00
}