You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
346 lines
8.2 KiB
346 lines
8.2 KiB
<?xml version="1.0" encoding="utf-8" ?>
|
|
<jsml xmlns="http://cutesoft.net/jsml"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://cutesoft.net/jsml ../core/jsml.xsd">
|
|
<panel jsml-class="floatbox" width="100" height="61" border_color="darkgray" border_style="solid" border_width="1" back_color="white" overflow="visible">
|
|
<initialize>
|
|
self._element._floatboxinstance=self;
|
|
</initialize>
|
|
<method name="show" arguments="parentElement,x,y,option">
|
|
<![CDATA[
|
|
|
|
if(!x)x=0;if(!y)y=0;
|
|
if(!option)option={};
|
|
|
|
|
|
self._showtime=new Date().getTime();
|
|
|
|
self._fbOwner=parentElement;
|
|
|
|
var pose=parentElement||document.body;
|
|
var pare;
|
|
|
|
if(parentElement)
|
|
{
|
|
pare=parentElement.parentNode;
|
|
while(pare!=null&&!pare._floatboxinstance)pare=pare.parentNode;
|
|
}
|
|
|
|
if(pare!=null)
|
|
{
|
|
self._parentfloatbox=pare._floatboxinstance;
|
|
self._parentfloatbox._onchildshow(self);
|
|
}
|
|
else
|
|
{
|
|
if(window._currentfloatbox)
|
|
window._currentfloatbox._onothershow(self);
|
|
window._currentfloatbox=self;
|
|
}
|
|
|
|
|
|
var s=self._element.style;
|
|
|
|
s.boxShadow="3px 3px 12px #999999";
|
|
self._dommode='absolute';
|
|
self.set_parent(document.body);
|
|
|
|
var pos=jsml.calc_position(self._element,pose);
|
|
var ods;
|
|
var odsborder;
|
|
|
|
if(parentElement)
|
|
{
|
|
var w=self.get_width();
|
|
var h=self.get_height();
|
|
var pew=pose.offsetWidth;
|
|
var peh=pose.offsetHeight;
|
|
|
|
if(!self._overdiv&&!option.stopOverlay)
|
|
{
|
|
self._overdiv=document.createElement("DIV");
|
|
self._overdiv.setAttribute("unselectable","on");
|
|
self._overdiv.onselectstart=jsml.cancel_event_function;
|
|
ods=self._overdiv.style;
|
|
ods.position='absolute';
|
|
ods.top=pos.top+"px";
|
|
ods.left=pos.left+"px";
|
|
ods.width=pew-2+"px";
|
|
ods.height=peh-2+"px";
|
|
ods.border="solid 1px "+(self.get_border_color()||"darkgray");
|
|
|
|
if(false)
|
|
{
|
|
var trans=document.createElement("DIV");
|
|
self._overdiv.appendChild(trans);
|
|
trans.style.backgroundColor='white';
|
|
jsml.set_opacity(trans,1);
|
|
}
|
|
else
|
|
{
|
|
ods.backgroundColor=(self.get_back_color()||"white");
|
|
ods.overflow='hidden';
|
|
self._overdiv.innerHTML=parentElement.innerHTML;
|
|
if(parentElement.style.textAlign != "left")
|
|
self._overdiv.style.textAlign = parentElement.style.textAlign;
|
|
}
|
|
|
|
document.body.appendChild(self._overdiv);
|
|
|
|
if(option.stopToggle)
|
|
{
|
|
self._overdiv.onmousedown=jsml.cancel_bubble_function;
|
|
}
|
|
if(option.buttonClick)
|
|
{
|
|
self._overdiv.onclick=option.buttonClick
|
|
}
|
|
if(self._parentfloatbox)
|
|
{
|
|
self._overdiv.onmouseover=function()
|
|
{
|
|
self._parentfloatbox.clearclosechildtimer();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
jsml.set_opacity(self._element,1);
|
|
if(self._overdiv)jsml.set_opacity(self._overdiv,1);
|
|
|
|
function ResetBorderColor()
|
|
{
|
|
if(ods&&odsborder&&self.get_opacity()>50)
|
|
{
|
|
var bordercolor=self.get_border_color();
|
|
ods.borderLeftColor=bordercolor;
|
|
ods.borderTopColor=bordercolor;
|
|
ods.borderRightColor=bordercolor;
|
|
ods.borderBottomColor=bordercolor;
|
|
ods[odsborder]=(self.get_back_color()||"white");
|
|
}
|
|
}
|
|
|
|
var opacity=-40;
|
|
function NextOpacity()
|
|
{
|
|
clearTimeout(self.nextopacitytimerid);
|
|
|
|
opacity+=20;
|
|
if(opacity>=self.get_opacity())
|
|
{
|
|
opacity=self.get_opacity();
|
|
}
|
|
else
|
|
{
|
|
self.nextopacitytimerid=setTimeout(NextOpacity,30);
|
|
}
|
|
if(opacity>0)
|
|
{
|
|
jsml.set_opacity(self._element,opacity);
|
|
if(self._overdiv)jsml.set_opacity(self._overdiv,opacity);
|
|
ResetBorderColor();
|
|
}
|
|
}
|
|
|
|
function SetPosition()
|
|
{
|
|
pos=jsml.calc_position(self._element,pose);
|
|
|
|
pos.srcleft=pos.left;
|
|
pos.srctop=pos.top;
|
|
|
|
odsborder=null;
|
|
|
|
var nomovex=false;
|
|
var nomovey=false;
|
|
|
|
if(parentElement)
|
|
{
|
|
switch(option.floatMode)
|
|
{
|
|
case "l-t":
|
|
nomovex=true;
|
|
pos.left+=-w;
|
|
pos.top+=peh-h;
|
|
break;
|
|
case "t-l":
|
|
nomovey=true;
|
|
pos.left+=-w;
|
|
pos.top+=peh-h;
|
|
break;
|
|
case "l-b":
|
|
nomovex=true;
|
|
pos.left+=-w;
|
|
break;
|
|
case "b-l":
|
|
nomovey=true;
|
|
pos.left+=pew-w;
|
|
pos.top+=peh;
|
|
break;
|
|
case "r-t":
|
|
nomovex=true;
|
|
pos.left+=pew;
|
|
pos.top+=peh-h;
|
|
break;
|
|
case "t-r":
|
|
nomovey=true;
|
|
pos.top+=-h;
|
|
break;
|
|
case "r-b":
|
|
nomovex=true;
|
|
pos.left+=pew;
|
|
if(ods)
|
|
{
|
|
ods.width=pew-1+"px";
|
|
odsborder="borderRightColor";
|
|
}
|
|
break;
|
|
default:
|
|
case 'b-r':
|
|
nomovey=true;
|
|
pos.top+=peh;
|
|
if(ods)
|
|
{
|
|
ods.height=peh-1+"px";
|
|
odsborder="borderBottomColor";
|
|
}
|
|
break;
|
|
case 'none':
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(option.floatMirror!==false)
|
|
{
|
|
jsml.adjust_mirror(self._element,pose.nodeName=="BODY"?null:pose,pos,nomovex,nomovey);
|
|
if(pos.xflip)
|
|
{
|
|
if(odsborder=='borderRightColor')
|
|
{
|
|
odsborder='borderLeftColor';
|
|
pos.left+=1;
|
|
}
|
|
}
|
|
if(pos.yflip)
|
|
{
|
|
if(odsborder=='borderBottomColor')
|
|
{
|
|
odsborder='borderTopColor';
|
|
pos.top+=1;
|
|
}
|
|
ResetBorderColor();
|
|
}
|
|
}
|
|
|
|
s.left=(pos.left+x)+"px";
|
|
s.top=(pos.top+y)+"px";
|
|
}
|
|
|
|
self._reposfunc=SetPosition;
|
|
setTimeout(NextOpacity,20);
|
|
setTimeout(SetPosition,10);
|
|
|
|
]]>
|
|
</method>
|
|
<attach name="resize">
|
|
if(!self._reposfunc)return;
|
|
setTimeout(function(){self._reposfunc();},1);
|
|
</attach>
|
|
<property name="title">
|
|
<get>return self.get_text();</get>
|
|
<set>self.set_text(value);</set>
|
|
</property>
|
|
<property name="manualclose">
|
|
<get>return self._manualclose;</get>
|
|
<set>self._manualclose = value;</set>
|
|
</property>
|
|
<method name="dispose" overrideas="panel_dispose">
|
|
self.close("dispose");
|
|
</method>
|
|
<method name="close" arguments="reason">
|
|
<![CDATA[
|
|
if(window._currentfloatbox==self)
|
|
window._currentfloatbox=null;
|
|
self.close_child();
|
|
self.set_visible(false);
|
|
setTimeout(function(){
|
|
self.panel_dispose();
|
|
if(self._overdiv)
|
|
{
|
|
self._overdiv.parentNode.removeChild(self._overdiv);
|
|
self._overdiv=null;
|
|
}
|
|
},1);
|
|
self.invoke_event("closing");
|
|
]]>
|
|
</method>
|
|
<method name="startclosechildtimer">
|
|
<![CDATA[
|
|
var currentchild=self._childfloatbox;
|
|
clearTimeout(self._cctimerid);
|
|
self._cctimerid=setTimeout(function(){
|
|
if(currentchild==self._childfloatbox)
|
|
self.close_child();
|
|
},value||500);
|
|
]]>
|
|
</method>
|
|
<method name="clearclosechildtimer">
|
|
clearTimeout(self._cctimerid);
|
|
</method>
|
|
<attach name="mousehover">
|
|
if(self._parentfloatbox)self._parentfloatbox.clearclosechildtimer();
|
|
</attach>
|
|
<method name="close_child">
|
|
self.clearclosechildtimer();
|
|
if(!self._childfloatbox)return;
|
|
self._childfloatbox.close("close_child");
|
|
self._childfloatbox=null;
|
|
</method>
|
|
<method name="_onchildshow" arguments="childfloatbox">
|
|
self.clearclosechildtimer();
|
|
if(self._childfloatbox==childfloatbox)return;
|
|
if(self._childfloatbox)self._childfloatbox._onothershow();
|
|
self._childfloatbox=childfloatbox;
|
|
</method>
|
|
<method name="_onothershow" arguments="otherfloatbox">
|
|
self.close("other_show");
|
|
</method>
|
|
<method name="_onouterclick">
|
|
if(self.get_manualclose()) return;
|
|
self.close("outer_click");
|
|
</method>
|
|
<method name="_onmenuclick">
|
|
self.close("menu_click");
|
|
</method>
|
|
<method name="resize" arguments="width,height">
|
|
if(width)self.set_width(width);
|
|
if(height)self.set_height(height);
|
|
</method>
|
|
</panel>
|
|
|
|
<execute>
|
|
<![CDATA[
|
|
jsml.rtecommonlibraryloaded=true;
|
|
function tryclosefloatbox(e)
|
|
{
|
|
if(!window._currentfloatbox)return;
|
|
var e=e||window.event;
|
|
var pare=e.srcElement||e.target;
|
|
while(pare!=null&&!pare._floatboxinstance)pare=pare.parentNode;
|
|
if(pare)return;
|
|
window._currentfloatbox._onouterclick();
|
|
}
|
|
jsml.dom_attach_event(document,'mousedown',tryclosefloatbox);
|
|
jsml.dom_attach_event(document,'keydown',function(e)
|
|
{
|
|
var e=e||window.event;
|
|
if(e.keyCode!=27)return;
|
|
tryclosefloatbox(e)
|
|
});
|
|
]]>
|
|
</execute>
|
|
|
|
|
|
</jsml>
|