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.
2220 lines
54 KiB
2220 lines
54 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">
|
|
|
|
<execute>
|
|
<![CDATA[
|
|
jsml.brsw1=["border-top-width","border-right-width","border-bottom-width","border-left-width"];
|
|
jsml.brsw2=["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"];
|
|
if(!jsml.rteallpngurl)jsml.rteallpngurl="{folder}images/all.png?{timems}";
|
|
jsml.grayimagemap={}
|
|
jsml.loadgrayimagepending={};
|
|
jsml.loadgrayimage=function(url,callback)
|
|
{
|
|
var targetval=jsml.grayimagemap[url];
|
|
if(targetval)
|
|
{
|
|
callback(targetval);
|
|
return;
|
|
}
|
|
var pending=jsml.loadgrayimagepending[url];
|
|
if(pending)
|
|
{
|
|
pending.callbacks.push(callback);
|
|
return;
|
|
}
|
|
pending={url:url,callbacks:[callback]};
|
|
var img=document.createElement("img");
|
|
img.onload=function()
|
|
{
|
|
var canvas=document.createElement("CANVAS");
|
|
var w=img.width;
|
|
var h=img.height;
|
|
canvas.width = w;
|
|
canvas.height = h;
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.drawImage(img,0,0);
|
|
var imgdata = ctx.getImageData(0, 0, w, h);
|
|
var data = imgdata.data;
|
|
var times = w * h;
|
|
for (var i = 0; i < times; i++) {
|
|
var gray = (data[i * 4] * 299 + data[i * 4 + 1] * 587 + data[i * 4+2] * 114 + 500) / 1000;
|
|
data[i * 4] = gray;
|
|
data[i * 4 + 1] = gray;
|
|
data[i * 4 + 2] = gray;
|
|
}
|
|
imgdata.data = data;
|
|
ctx.putImageData(imgdata, 0, 0);
|
|
targetval=canvas.toDataURL();
|
|
jsml.grayimagemap[url]=targetval;
|
|
for(var i=0;i<pending.callbacks.length;i++)
|
|
pending.callbacks[i](targetval);
|
|
}
|
|
img.setAttribute("src",url);
|
|
}
|
|
]]>
|
|
</execute>
|
|
|
|
<jsml-def name="rteborderstyle">
|
|
<attach name="attach_dom">
|
|
<![CDATA[
|
|
if(self._border)return;
|
|
var sty=jsml.msie?self._element.currentStyle:window.getComputedStyle(self._element,null);
|
|
var arr=jsml.msie?jsml.brsw2:jsml.brsw1;
|
|
var bor=[];
|
|
for(var i=0;i<arr.length;i++)
|
|
{
|
|
var val=jsml.msie?sty[arr[i]]:sty.getPropertyValue(arr[i]);
|
|
bor[i]=parseInt(val)||0;
|
|
}
|
|
self.set_border_width(bor);
|
|
]]>
|
|
</attach>
|
|
</jsml-def>
|
|
|
|
<jsml-def name="rtemousecontrol">
|
|
<jsml-ref name="rteborderstyle"/>
|
|
<initialize>
|
|
self._element.ondragstart=new Function("","return false");
|
|
</initialize>
|
|
<attach name="mousehover">
|
|
if(self._hovered)return;
|
|
self._hovered=true;
|
|
self.invoke_event("tooglecssclass","hovered",self._hovered);
|
|
</attach>
|
|
<attach name="mousedown" arguments="jevent,devent">
|
|
self._isclicked=true;
|
|
self.invoke_event("tooglecssclass","clicked",self._isclicked);
|
|
if(devent)devent.cancel_default();
|
|
</attach>
|
|
<attach name="mouseup">
|
|
self._isclicked=false;
|
|
self.invoke_event("tooglecssclass","clicked",self._isclicked);
|
|
</attach>
|
|
<attach name="mouseleave">
|
|
<![CDATA[
|
|
self._hovered=false;
|
|
setTimeout(function()
|
|
{
|
|
if(self._hovered)return;
|
|
self._isclicked=false;
|
|
self.invoke_event("tooglecssclass","hovered",self._hovered);
|
|
self.invoke_event("tooglecssclass","clicked",self._isclicked);
|
|
},1);
|
|
]]>
|
|
</attach>
|
|
<attach name="detach_dom">
|
|
self._hovered=false;
|
|
self._isclicked=false;
|
|
self.invoke_event("tooglecssclass","hovered",self._hovered);
|
|
self.invoke_event("tooglecssclass","clicked",self._isclicked);
|
|
</attach>
|
|
</jsml-def>
|
|
|
|
<jsml-def name="rtebuttoncontrol">
|
|
<jsml-ref name="rtemousecontrol"/>
|
|
<initialize>
|
|
self.toggle_css_class("tbcontrol",true);
|
|
</initialize>
|
|
<property name="checked">
|
|
<get>return self._checked</get>
|
|
<set>self._checked=!!value;this.invoke_event("set_checked");</set>
|
|
</property>
|
|
<property name="disabled">
|
|
<get>return self._disabled</get>
|
|
<set>self._disabled=!!value;this.invoke_event("set_disabled");</set>
|
|
</property>
|
|
<attach name="set_checked">
|
|
self.invoke_event("tooglecssclass","checked",self._checked);
|
|
</attach>
|
|
<attach name="set_disabled">
|
|
self.invoke_event("tooglecssclass","disabled",self._disabled);
|
|
</attach>
|
|
<attach name="tooglecssclass" arguments="jevent,name,mode">
|
|
self.toggle_css_class("tbcontrol_"+name,mode);
|
|
</attach>
|
|
</jsml-def>
|
|
|
|
<jsml-def name="rtecommandcontrol">
|
|
<property name="command">
|
|
<get>
|
|
return self._command;
|
|
</get>
|
|
<set>
|
|
self._command=value;
|
|
self.update_image();
|
|
</set>
|
|
</property>
|
|
<property name="arguments">
|
|
<get>
|
|
return self._arguments;
|
|
</get>
|
|
<set>
|
|
self._arguments=value;
|
|
</set>
|
|
</property>
|
|
<property name="imagename">
|
|
<get>
|
|
return self._imagename;
|
|
</get>
|
|
<set>
|
|
self._imagename=value;
|
|
self.update_image();
|
|
</set>
|
|
</property>
|
|
<method name="find_config">
|
|
<![CDATA[
|
|
for(var ctrl=self;ctrl!=null;ctrl=ctrl.get_jsml_parent())
|
|
if(ctrl._rteconfig)return ctrl._rteconfig;
|
|
var editor=self.find_editor();
|
|
if(editor)return editor._config;
|
|
]]>
|
|
</method>
|
|
<method name="find_editor">
|
|
<![CDATA[
|
|
if(self._rteinstance)return self._rteinstance;
|
|
for(var ctrl=self;ctrl!=null;ctrl=ctrl.get_jsml_parent())
|
|
{
|
|
if(!ctrl._rteinstance)continue;
|
|
self._rteinstance=ctrl._rteinstance;
|
|
return ctrl._rteinstance;
|
|
}
|
|
]]>
|
|
</method>
|
|
<method name="_ResetFCButton" arguments="cmd,node">
|
|
var editor=self.find_editor();if(!editor)return;
|
|
editor._ResetFCButton(self._element,cmd||self.get_command(),node,function(){self.invoke_event("mousehover")},function(){self.invoke_event("mouseleave")},function(){self.invoke_event("mousedown")},function(){self.invoke_event("mouseup")},function(){self.invoke_event("fcclick")});
|
|
</method>
|
|
|
|
<method name="change_src" arguments="image,value">
|
|
<![CDATA[
|
|
|
|
|
|
if(!value||!self._config||self._config.color!="gray")
|
|
{
|
|
image.set_src(value);
|
|
return;
|
|
}
|
|
if(!jsml.html5)
|
|
{
|
|
image.set_src(value);
|
|
image._img.style.filter="progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)";
|
|
if(image._grayhandlerattached)return;
|
|
image._grayhandlerattached=true;
|
|
image.attach_event("mousehover",function(je,e)
|
|
{
|
|
self._hovered=true;
|
|
image._img.style.filter="";
|
|
});
|
|
image.attach_event("mouseleave",function(je,e)
|
|
{
|
|
self._hovered=false;
|
|
setTimeout(function()
|
|
{
|
|
if(self._hovered)return;
|
|
image._img.style.filter="progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)";
|
|
},11);
|
|
});
|
|
return;
|
|
}
|
|
jsml.loadgrayimage(value,function(targetval)
|
|
{
|
|
image.set_src(targetval);
|
|
if(image._grayhandlerattached)return;
|
|
image._grayhandlerattached=true;
|
|
image.attach_event("mousehover",function(je,e)
|
|
{
|
|
self._hovered=true;
|
|
image._img.setAttribute("src",value);
|
|
});
|
|
image.attach_event("mouseleave",function(je,e)
|
|
{
|
|
self._hovered=false;
|
|
setTimeout(function()
|
|
{
|
|
if(self._hovered)return;
|
|
image._img.setAttribute("src",targetval);
|
|
},11);
|
|
});
|
|
});
|
|
]]>
|
|
</method>
|
|
<method name="update_image">
|
|
<![CDATA[
|
|
|
|
var image=self.image||self;
|
|
|
|
if(!self._dom_attached)return;
|
|
var imgname=self._imagename||self._command;
|
|
if(!imgname)
|
|
return;
|
|
|
|
imgname=imgname.toLowerCase();
|
|
|
|
var padding=self._savedpadding;
|
|
if(padding==null)
|
|
{
|
|
padding=image.get_padding().concat();
|
|
self._savedpadding=padding;
|
|
}
|
|
|
|
var imgfile="images/"+imgname+".png";
|
|
if(jsml.html5)
|
|
{
|
|
if(self._config&&self._config._rte_image_cache)
|
|
{
|
|
var dataurl=self._config._rte_image_cache[imgfile];
|
|
if(dataurl)
|
|
{
|
|
padding=padding.concat();
|
|
padding[0]+=-1;
|
|
padding[1]+=1;
|
|
padding[2]+=1;
|
|
padding[3]+=-1;
|
|
if(self.get_width()<=22)image.set_padding(padding);
|
|
self.change_src(image,dataurl);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
var config=self._config;
|
|
if(config.allimageindexdata&&!(jsml.mobile||config.skin=="phone"))
|
|
{
|
|
var dict=self._config.allimageindexdata_dict;
|
|
if(dict==null)
|
|
{
|
|
dict={};
|
|
var arr=self._config.allimageindexdata.split(',');
|
|
for(var i=0;i<arr.length;i++)
|
|
dict[arr[i]]=i;
|
|
self._config.allimageindexdata_dict=dict;
|
|
}
|
|
var index=dict[imgname];
|
|
if(typeof(index)=="number")
|
|
{
|
|
self.change_src(image,jsml.rteallpngurl);
|
|
padding=padding.concat();
|
|
padding[0]+=-index*20;
|
|
image.set_padding(padding);
|
|
return;
|
|
}
|
|
}
|
|
|
|
self.change_src(image,"{folder}"+imgfile);
|
|
|
|
]]>
|
|
</method>
|
|
<attach name="attach_dom">
|
|
self._config=self.find_config();
|
|
self.update_image();
|
|
</attach>
|
|
<attach name="click">
|
|
self.exec_command();
|
|
</attach>
|
|
<method name="exec_command" arguments="suffix,splitcmd">
|
|
<![CDATA[
|
|
var editor=self.find_editor();
|
|
if(!editor)return;
|
|
if(!splitcmd)
|
|
{
|
|
splitcmd=self.get_command();
|
|
if(!splitcmd)return;
|
|
if(suffix)splitcmd+=suffix;
|
|
}
|
|
var args=self.get_arguments();
|
|
if(!args)args=[];
|
|
else args=args.split(',');
|
|
var target=self._commandelement||self._element;
|
|
editor.ExecUICommand(target,splitcmd,args[0],args[1],args[2],args[3]);
|
|
]]>
|
|
</method>
|
|
|
|
</jsml-def>
|
|
|
|
<jsml-def name="rtetoolbarcontrol">
|
|
|
|
<jsml-ref name="rtecommandcontrol" />
|
|
|
|
<attach name="contextmenu" arguments="je,de">
|
|
de.cancel_default();
|
|
</attach>
|
|
|
|
<property name="noactive">
|
|
<get>return self._noactive;</get>
|
|
<set>self._noactive=value;</set>
|
|
</property>
|
|
<attach name="editor_ready" arguments="jevent,arg0">
|
|
<![CDATA[
|
|
self._rteinstance=arg0;
|
|
self._rteinstanceeventid=self._rteinstance.AttachEvent("UpdateUI",function(editor,e){
|
|
self.invoke_event("update_statusui");
|
|
});
|
|
self.invoke_event("update_statusui");
|
|
]]>
|
|
</attach>
|
|
<attach name="disposing">
|
|
if(self._rteinstanceeventid)self._rteinstance.DetachEvent("UpdateUI",self._rteinstanceeventid);
|
|
</attach>
|
|
<attach name="update_statusui">
|
|
<![CDATA[
|
|
var command=self.get_command();
|
|
if(!command)return;
|
|
|
|
var dc=!self._rteinstance.IsCommandReady(command)
|
|
if(dc!=(!!self._disabled))
|
|
{
|
|
self.set_disabled(dc);
|
|
}
|
|
var qc=this._noactive?false:(!!self._rteinstance.IsCommandActive(command));
|
|
if(qc!=(!!self._checked))
|
|
{
|
|
self.set_checked(qc);
|
|
}
|
|
]]>
|
|
</attach>
|
|
</jsml-def>
|
|
|
|
<jsml-def name="rtecommandcolor">
|
|
<panel id="colorpanel" width="16" height="4" left="2" bottom="2" back_color="transparent" />
|
|
|
|
<attach name="update_statusui">
|
|
<![CDATA[
|
|
var image=self.image;
|
|
var editor=self._rteinstance;
|
|
var cmdlower=self.get_command().toLowerCase();
|
|
var colorpanel=self.find_child("colorpanel");
|
|
if(cmdlower=='forecolor')
|
|
{
|
|
var color=editor.current_forecolor||editor._config.default_forecolor;
|
|
colorpanel.set_back_color(color);
|
|
}
|
|
if(cmdlower=='backcolor')
|
|
{
|
|
var color=editor.current_backcolor||editor._config.default_backcolor;
|
|
colorpanel.set_back_color(color);
|
|
}
|
|
]]>
|
|
</attach>
|
|
</jsml-def>
|
|
|
|
|
|
<panel jsml-class="panelbutton" cursor="pointer">
|
|
<jsml-ref name="rtebuttoncontrol"/>
|
|
|
|
<initialize>
|
|
self.toggle_css_class("panelbutton");
|
|
</initialize>
|
|
<attach name="tooglecssclass" arguments="jevent,name,mode">
|
|
self.toggle_css_class("panelbutton_"+name,mode);
|
|
</attach>
|
|
</panel>
|
|
|
|
<image jsml-class="imagebutton" cursor="pointer" overflow="none">
|
|
<jsml-ref name="rtebuttoncontrol" />
|
|
<jsml-ref name="rtetoolbarcontrol"/>
|
|
<initialize>
|
|
self.toggle_css_class("imagebutton");
|
|
</initialize>
|
|
<attach name="tooglecssclass" arguments="jevent,name,mode">
|
|
self.toggle_css_class("imagebutton_"+name,mode);
|
|
</attach>
|
|
</image>
|
|
|
|
<image jsml-class="image_skin_base" cursor="pointer" width="22" height="20" overflow="none">
|
|
<jsml-ref name="rtebuttoncontrol" />
|
|
<jsml-ref name="rtetoolbarcontrol"/>
|
|
</image>
|
|
|
|
<panel jsml-class="splitbtn_skin_base" dock="left" cursor="pointer">
|
|
<image jsml-member="image" css_class="splitbtnimage" dock="left" width="20" overflow="none"/>
|
|
<image jsml-member="split" css_class="splitbtnsplit" dock="left" width="10" overflow="none" border_width="0,0,0,1" src="{folder}images/tbdown.gif">
|
|
<attach name="click" arguments="jevent,devent">
|
|
instance.invoke_event("splitclick");
|
|
devent.cancel();
|
|
</attach>
|
|
</image>
|
|
|
|
<jsml-ref name="rtebuttoncontrol" />
|
|
<jsml-ref name="rtetoolbarcontrol"/>
|
|
|
|
<initialize>
|
|
self.toggle_css_class("splitbtn_skin");
|
|
</initialize>
|
|
<attach name="tooglecssclass" arguments="jevent,name,mode">
|
|
self.toggle_css_class("splitbtn_skin_"+name,mode);
|
|
</attach>
|
|
<property name="splitcommand">
|
|
<get>return self._splitcmd;</get>
|
|
<set>self._splitcmd=value;</set>
|
|
</property>
|
|
<attach name="splitclick">
|
|
self.exec_command("_dropdown",self._splitcmd);
|
|
</attach>
|
|
</panel>
|
|
|
|
<panel jsml-class="dropdown_skin_base" dock="left" margin="1,0,1,1">
|
|
<image jsml-local="split" css_class="dropdownsplit" dock="right" width="12" overflow="none" vertical_align="middle" border_width="0,0,0,1" padding="2,0,0,1" src="{folder}images/tbdown.gif"/>
|
|
<label jsml-local="label" css_class="dropdownlabel" dock="fill" font="Normal 11px Tahoma, Verdana, Arial, sans-serif" margin="1,0,0,5" vertical_align="middle" />
|
|
|
|
<jsml-ref name="rtebuttoncontrol"/>
|
|
|
|
<property name="arguments">
|
|
<get>
|
|
return self._arguments;
|
|
</get>
|
|
<set>
|
|
self._arguments=value;
|
|
</set>
|
|
</property>
|
|
<property name="command">
|
|
<get>
|
|
return self._command;
|
|
</get>
|
|
<set>
|
|
self._command=value;
|
|
</set>
|
|
</property>
|
|
<property name="stylename">
|
|
<get>
|
|
return self._stylename;
|
|
</get>
|
|
<set>
|
|
self._stylename=value;
|
|
</set>
|
|
</property>
|
|
<attach name="set_text">
|
|
label.set_text(self.get_text());
|
|
</attach>
|
|
<attach name="editor_ready" arguments="jevent,arg0">
|
|
<![CDATA[
|
|
self._rteinstance=arg0;
|
|
|
|
self._rteinstanceeventid=self._rteinstance.AttachEvent("UpdateUI",function(editor,e){
|
|
|
|
if(!self._stylename)
|
|
return;
|
|
|
|
var val=editor.QueryStyle(self._stylename);
|
|
if(val)
|
|
{
|
|
if(self._stylename=="paragraph")
|
|
val=this.GetLangText("paragraph_"+val);
|
|
label.set_text(val)
|
|
}
|
|
else
|
|
{
|
|
label.set_text(self.get_text())
|
|
}
|
|
|
|
});
|
|
|
|
]]>
|
|
</attach>
|
|
<attach name="disposing">
|
|
if(self._rteinstanceeventid)self._rteinstance.DetachEvent("UpdateUI",self._rteinstanceeventid);
|
|
</attach>
|
|
<method name="find_editor">
|
|
<![CDATA[
|
|
for(var ctrl=self;ctrl!=null;ctrl=ctrl.get_jsml_parent())
|
|
if(ctrl._rteinstance)return ctrl._rteinstance;
|
|
]]>
|
|
</method>
|
|
<attach name="mousedown">
|
|
<![CDATA[
|
|
var editor=self.find_editor();
|
|
if(!editor)return;
|
|
if(self.get_command())
|
|
{
|
|
var args=self.get_arguments();
|
|
if(!args)
|
|
args=[];
|
|
else
|
|
args=args.split(',');
|
|
editor.ExecUICommand(self._element,self.get_command(),args[0],args[1],args[2],args[3]);
|
|
}
|
|
]]>
|
|
</attach>
|
|
<attach name="mousehover">
|
|
<![CDATA[
|
|
if(!jsml._currentfloatbox)
|
|
return;
|
|
if(self.get_command()!="ShowXmlFloatbox")
|
|
return;
|
|
var editor=self.find_editor();
|
|
if(!editor)return;
|
|
|
|
return;//auto toggle opened floatbox?
|
|
|
|
if(new Date().getTime()-jsml._currentfloatbox._showtime<11)
|
|
return;
|
|
self.invoke_event("click");
|
|
|
|
]]>
|
|
</attach>
|
|
<attach name="attach_dom,editor_ready">
|
|
<![CDATA[
|
|
if(self.preloadedurl)
|
|
return;
|
|
if(self.get_command()!="ShowXmlFloatbox")
|
|
return;
|
|
var editor=self.find_editor();
|
|
if(!editor)return;
|
|
|
|
if(editor._config._debugmode)
|
|
return;
|
|
|
|
self.preloadedurl=true;
|
|
var args=self.get_arguments();
|
|
if(!args)return;
|
|
args=args.split(',');
|
|
|
|
setTimeout(function(){
|
|
editor.PreloadDialogUrl(args[0]);
|
|
},2000);
|
|
]]>
|
|
</attach>
|
|
|
|
|
|
</panel>
|
|
|
|
<panel jsml-class="rtemenuspliter" css_class="menuspliter" dock="top" margin="3,-2,2,24" height="1" border_width="1,0,1,0">
|
|
<initialize>
|
|
self._estyle.borderTopColor='#eeeeee';
|
|
self._estyle.borderBottomColor='#ffffff';
|
|
</initialize>
|
|
</panel>
|
|
|
|
<panel jsml-class="rtemenuitem" css_class="menuitem" dock="top" height="22" overflow_x="visible" cursor="pointer">
|
|
<image jsml-member="image" css_class="menuitemimage" dock="left" width="20" overflow="none"></image>
|
|
<image jsml-member="arrow" css_class="menuitemarrow" dock="right" width="12" vertical_align="middle" overflow="none" src="{folder}images/arrow_r.gif" visible="false" />
|
|
<label jsml-member="label" css_class="menuitemlabel" height="22" dock="fill" overflow_x="visible" margin="0,0,0,6" vertical_align="middle" cursor="pointer"/>
|
|
|
|
<!--important:_onmenuclick must be called before the button command be sent-->
|
|
<attach name="click,fcclick">
|
|
if(self._disabled)return;
|
|
var floatbox=self.find_parent("floatbox");
|
|
if(floatbox)floatbox._onmenuclick();
|
|
</attach>
|
|
|
|
<jsml-ref name="rtebuttoncontrol" />
|
|
<jsml-ref name="rtetoolbarcontrol" />
|
|
|
|
<attach name="tooglecssclass" arguments="jevent,name,mode">
|
|
self.toggle_css_class("menuitem_"+name,mode);
|
|
</attach>
|
|
|
|
|
|
<property name="src">
|
|
<get>return self.image.get_src();</get>
|
|
<set>self.image.set_src(value);</set>
|
|
</property>
|
|
<property name="text">
|
|
<get>return self.label.get_text();</get>
|
|
<set>self.label.set_text(value);</set>
|
|
</property>
|
|
<property name="htmlcode">
|
|
<get>return self.label._content.innerHTML;</get>
|
|
<set>self.label._content.innerHTML=value;self.label.invoke_notify_content();</set>
|
|
</property>
|
|
<property name="arrow">
|
|
<get>
|
|
return self.arrow.get_visible();
|
|
</get>
|
|
<set>
|
|
self.arrow.set_visible(value);
|
|
</set>
|
|
</property>
|
|
<property name="xmlfile">
|
|
<get>
|
|
return self.xmlfilepath;
|
|
</get>
|
|
<set>
|
|
self.xmlfilepath=value;
|
|
</set>
|
|
</property>
|
|
<attach name="mousehover" arguments="je,e">
|
|
<![CDATA[
|
|
self._hovered=true;
|
|
|
|
self.image.invoke_event("mousehover",[je,e]);
|
|
|
|
var editor=self.find_editor();
|
|
|
|
if(!self.xmlfilepath)
|
|
{
|
|
var pare=self._element.parentNode;
|
|
while(pare!=null&&!pare._floatboxinstance)pare=pare.parentNode;
|
|
if(pare)
|
|
{
|
|
var fb=pare._floatboxinstance;
|
|
if(fb._childfloatbox!=self.currentdialog)
|
|
{
|
|
var timeout=editor?editor._config.floatbox_leaveclosetimer:500;
|
|
fb.startclosechildtimer(timeout);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
if(!editor||self._disabled)
|
|
return;
|
|
|
|
setTimeout(function()
|
|
{
|
|
if(!self._hovered||!self.get_visible())
|
|
return;
|
|
|
|
if(self.currentdialog&&self.currentdialog.get_visible())
|
|
return;
|
|
|
|
var option={floatboxClass:self._floatboxClass||"floatbox",control:self,floatMode:'r-b',stopToggle:true};
|
|
if(self.get_command())
|
|
{
|
|
option.buttonClick=function()
|
|
{
|
|
self.invoke_event("click");
|
|
}
|
|
}
|
|
if(self.initoption)self.initoption(option);
|
|
self.currentdialog=editor.ShowXmlFloatBox(editor.BuildDialogUrl(self.xmlfilepath),option);
|
|
},333);
|
|
]]>
|
|
</attach>
|
|
<attach name="mouseleave" arguments="je,e">
|
|
self._hovered=false;
|
|
self.image.invoke_event("mouseleave",[je,e]);
|
|
</attach>
|
|
</panel>
|
|
|
|
<panel jsml-class="rtemenuopener" jsml-base="rtemenuitem" arrow="true">
|
|
<property name="menuclass">
|
|
<get>
|
|
return self._menuclass;
|
|
</get>
|
|
<set>
|
|
self._menuclass=value;
|
|
</set>
|
|
</property>
|
|
<attach name="mousehover">
|
|
<![CDATA[
|
|
if(!self._menuclass)return;
|
|
var editor=self.find_editor();
|
|
|
|
if(!editor||self._disabled)
|
|
return;
|
|
|
|
setTimeout(function()
|
|
{
|
|
if(!self._hovered||!self.get_visible())
|
|
return;
|
|
|
|
if(self.currentdialog&&self.currentdialog.get_visible())
|
|
return;
|
|
|
|
var newoption={control:self,floatMode:'r-b',stopToggle:true};
|
|
newoption.buttonClick=function()
|
|
{
|
|
self.invoke_event("click");
|
|
}
|
|
if(self.initoption)self.initoption(newoption);
|
|
self.currentdialog=jsml.class_create_instance(self._menuclass);
|
|
self.currentdialog.invoke_recursive("editor_ready",editor);
|
|
self.currentdialog.show(newoption);
|
|
},11);
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
|
|
<panel jsml-class="floatbox" width="60" height="40" border_color="darkgray" border_style="solid" border_width="1" back_color="white" overflow="visible" visible="false">
|
|
<initialize>
|
|
self._element._floatboxinstance=self;
|
|
</initialize>
|
|
<method name="show" arguments="option">
|
|
<![CDATA[
|
|
if(!option)option={};
|
|
if(!option.floatMode)option.floatMode="b-r"
|
|
|
|
var anchor=option.anchor;
|
|
|
|
if(!anchor&&option.control)
|
|
anchor=option.control._element;
|
|
|
|
var x=parseInt(option.x)||0;
|
|
var y=parseInt(option.y)||0;
|
|
|
|
self._closed=false;
|
|
|
|
self._fbOwner=anchor;
|
|
|
|
self._showtime=new Date().getTime();
|
|
self._stopdispose=option.stopDispose;
|
|
|
|
var pose=anchor||document.body;
|
|
var pare;
|
|
|
|
if(anchor)
|
|
{
|
|
pare=anchor.parentNode;
|
|
while(pare!=null&&!pare._floatboxinstance)pare=pare.parentNode;
|
|
}
|
|
|
|
if(pare!=null)
|
|
{
|
|
self._parentfloatbox=pare._floatboxinstance;
|
|
self._parentfloatbox._onchildshow(self);
|
|
}
|
|
else
|
|
{
|
|
if(jsml._currentfloatbox)
|
|
jsml._currentfloatbox._onothershow(self);
|
|
jsml._currentfloatbox=self;
|
|
}
|
|
|
|
|
|
self.set_visibility("hidden");
|
|
self.set_visible(true);
|
|
|
|
var s=self._estyle;
|
|
s.top=s.left='0px';
|
|
s.boxShadow="3px 3px 12px #999999";
|
|
if(!self.get_parent())
|
|
{
|
|
self._dommode='absolute';
|
|
self.set_parent(document.body);
|
|
}
|
|
|
|
var bgcolor=jsml.get_current_style(self._element,"background-color")||"white";
|
|
var bordercolor=self.get_border_color()||"darkgray";
|
|
|
|
var ods;
|
|
var odsborder;
|
|
|
|
self._disposeoverdiv();
|
|
|
|
var w,h,pew,peh,pos;
|
|
|
|
function InitPosInfo()
|
|
{
|
|
w=self.get_current_width();
|
|
h=self.get_current_height();
|
|
pos=jsml.calc_position(self._element,pose);
|
|
pew=pose.offsetWidth;
|
|
peh=pose.offsetHeight;
|
|
var s=pose.style;
|
|
if(!parseInt(s.borderTopWidth))
|
|
{
|
|
peh++;
|
|
pos.top--;
|
|
|
|
}
|
|
if(!parseInt(s.borderLeftWidth))
|
|
{
|
|
pew++;
|
|
pos.left--;
|
|
}
|
|
if(!parseInt(s.borderRightWidth))pew++;
|
|
if(!parseInt(s.borderBottomWidth))peh++;
|
|
}
|
|
|
|
|
|
function CreateOverlay()
|
|
{
|
|
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.width=Math.max(0,pew-2)+"px";
|
|
ods.height=Math.max(0,peh-2)+"px";
|
|
ods.border="solid 1px "+bordercolor;
|
|
ods.zIndex=self._estyle.zIndex;
|
|
ods.top="-1000px";
|
|
ods.left="-1000px";
|
|
|
|
ods.backgroundColor=(bgcolor);
|
|
ods.overflow='hidden';
|
|
self._overdiv.innerHTML=anchor.innerHTML;
|
|
function removebgc(nodes)
|
|
{
|
|
for(var i=0;i<nodes.length;i++)
|
|
{
|
|
var child=nodes.item(i);
|
|
if(!child.style)
|
|
continue;
|
|
|
|
if(child.childNodes)
|
|
removebgc(child.childNodes);
|
|
if(child.nodeName=="DIV")
|
|
child.style.borderColor=jsml.msie6?bgcolor:'transparent';
|
|
child.style.backgroundColor=jsml.msie6?bgcolor:'transparent';
|
|
}
|
|
}
|
|
removebgc(self._overdiv.childNodes);
|
|
|
|
self._overdiv.oncontextmenu=jsml.cancel_event_function;
|
|
|
|
self._overdiv.onmousedown=function(e)
|
|
{
|
|
if(!option.buttonClick&&!option.stopToggle&&(new Date().getTime()-self._showtime>400))
|
|
self.close("outer_click");
|
|
return jsml.cancel_bubble_function(e);
|
|
}
|
|
|
|
self._overdiv.onclick=function()
|
|
{
|
|
if(option.buttonClick)
|
|
{
|
|
self.close();
|
|
option.buttonClick();
|
|
}
|
|
}
|
|
|
|
self._overdiv.onmouseover=function()
|
|
{
|
|
if(self._parentfloatbox)
|
|
{
|
|
self._parentfloatbox.clearclosechildtimer();
|
|
}
|
|
|
|
if(option.control)
|
|
{
|
|
option.control.invoke_event("mousehover");
|
|
}
|
|
}
|
|
self._overdiv.onmouseout=function()
|
|
{
|
|
if(option.control)
|
|
{
|
|
option.control.invoke_event("mouseleave");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
document.body.appendChild(self._overdiv);
|
|
|
|
if(option.onoverlay)
|
|
{
|
|
option.onoverlay(self._overdiv,self);
|
|
}
|
|
|
|
}
|
|
|
|
function ResetBorderColor()
|
|
{
|
|
if(ods&&odsborder&&self.get_opacity()>70)
|
|
{
|
|
ods.borderTopColor=bordercolor;
|
|
ods.borderLeftColor=bordercolor;
|
|
ods.borderRightColor=bordercolor;
|
|
ods.borderBottomColor=bordercolor;
|
|
ods[odsborder]=bgcolor;
|
|
}
|
|
}
|
|
|
|
var opacity=60;
|
|
function NextOpacity()
|
|
{
|
|
clearTimeout(self.nextopacitytimerid);
|
|
|
|
if(!self._closed&&self._parentfloatbox&&self._parentfloatbox._closed)
|
|
{
|
|
//sometimes, unknown condition
|
|
self.close();
|
|
return;
|
|
}
|
|
|
|
opacity+=10;
|
|
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()
|
|
{
|
|
if(self._closed)
|
|
return;
|
|
|
|
InitPosInfo();
|
|
|
|
if(ods)
|
|
{
|
|
ods.top=pos.top+"px";
|
|
ods.left=pos.left+"px";
|
|
}
|
|
else
|
|
{
|
|
pos.top+=y;
|
|
pos.left+=x;
|
|
}
|
|
|
|
pos.srcleft=pos.left;
|
|
pos.srctop=pos.top;
|
|
|
|
odsborder=null;
|
|
|
|
var nomovex=false;
|
|
var nomovey=false;
|
|
|
|
if(anchor)
|
|
{
|
|
var fmpair=option.floatMode.split('-');
|
|
|
|
if(ods)
|
|
{
|
|
switch(fmpair[0])
|
|
{
|
|
case "t":
|
|
ods.top=pos.top-1+"px";
|
|
//ods.height=Math.max(0,peh+1)+"px";
|
|
ods.borderTopWidth="2px";
|
|
odsborder="borderTopColor";
|
|
break;
|
|
case "r":
|
|
ods.width=Math.max(0,pew-1)+"px";
|
|
odsborder="borderRightColor";
|
|
break;
|
|
case "b":
|
|
ods.height=peh-1+"px";
|
|
odsborder="borderBottomColor";
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch(fmpair[0])
|
|
{
|
|
case "t":
|
|
nomovey=true;
|
|
pos.top+=-h;
|
|
break;
|
|
case "b":
|
|
nomovey=true;
|
|
pos.top+=peh;
|
|
break;
|
|
case "l":
|
|
nomovex=true;
|
|
pos.left+=-w;
|
|
break;
|
|
case "r":
|
|
nomovex=true;
|
|
pos.left+=pew;
|
|
break;
|
|
}
|
|
|
|
switch(fmpair[1])
|
|
{
|
|
case "l":
|
|
if(pew<w)pos.left+=pew-w;
|
|
break;
|
|
case "r":
|
|
if(pew>w)pos.left+=pew-w;
|
|
break;
|
|
case "t":
|
|
if(peh<h)pos.top+=peh-h;
|
|
break;
|
|
case "b":
|
|
if(peh>h)pos.top+=peh-h;
|
|
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.top=pos.top+"px";
|
|
s.left=pos.left+"px";
|
|
}
|
|
|
|
|
|
InitPosInfo();
|
|
|
|
jsml.set_opacity(self._element,opacity);
|
|
|
|
if(anchor && !option.stopOverlay)
|
|
{
|
|
CreateOverlay();
|
|
jsml.set_opacity(self._overdiv,1);
|
|
}
|
|
|
|
self._reposfunc=SetPosition;
|
|
SetPosition();
|
|
|
|
setTimeout(NextOpacity,1);
|
|
setTimeout(SetPosition,10);
|
|
|
|
setTimeout(function()
|
|
{
|
|
self.set_visibility("visible");
|
|
},20);
|
|
|
|
self.invoke_recursive("showing");
|
|
|
|
]]>
|
|
</method>
|
|
<attach name="resize">
|
|
if(!self._reposfunc)return;
|
|
self._reposfunc();
|
|
setTimeout(function(){self._reposfunc();},1);
|
|
</attach>
|
|
<property name="title">
|
|
<get>return self.get_text();</get>
|
|
<set>self.set_text(value);</set>
|
|
</property>
|
|
<method name="dispose" overrideas="panel_dispose">
|
|
self.panel_dispose();
|
|
self.close("dispose");
|
|
</method>
|
|
<method name="_disposeoverdiv">
|
|
<![CDATA[
|
|
if(self._overdiv)
|
|
{
|
|
if(self._overdiv.parentNode)
|
|
{
|
|
self._overdiv.parentNode.removeChild(self._overdiv);
|
|
self._overdiv.onclick=jsml.empty_function;
|
|
self._overdiv.onmousedown=jsml.empty_function;
|
|
self._overdiv.onmouseover=jsml.empty_function;
|
|
self._overdiv.onmouseout=jsml.empty_function;
|
|
}
|
|
}
|
|
self._overdiv=null;
|
|
]]>
|
|
</method>
|
|
<method name="close" arguments="reason">
|
|
<![CDATA[
|
|
if(self._closed)return;
|
|
self._closed=true;
|
|
|
|
if(jsml._currentfloatbox==self)
|
|
jsml._currentfloatbox=null;
|
|
|
|
self._disposeoverdiv();
|
|
if(!self._stopdispose)
|
|
{
|
|
setTimeout(function(){
|
|
self.panel_dispose();
|
|
},1);
|
|
}
|
|
|
|
self.set_visible(false);
|
|
|
|
self.close_child();
|
|
|
|
if(self._parentfloatbox&&reason!="child_close")
|
|
self._parentfloatbox._onchildclose(reason)
|
|
|
|
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">
|
|
self.close("outer_click");
|
|
</method>
|
|
<method name="_onmenuclick">
|
|
self.close("menu_click");
|
|
</method>
|
|
<method name="_onchildclose">
|
|
<![CDATA[
|
|
switch(value)
|
|
{
|
|
case "other_show":
|
|
case "outer_click":
|
|
case "close_child":
|
|
break;
|
|
case "menu_click":
|
|
default:
|
|
self.close("child_close");
|
|
break;
|
|
}
|
|
]]>
|
|
</method>
|
|
<method name="resize" arguments="width,height">
|
|
if(width)self.set_width(width);
|
|
if(height)self.set_height(height);
|
|
</method>
|
|
</panel>
|
|
|
|
<panel jsml-class="floatmenu" jsml-base="floatbox" css_class="floatmenu" width="160" height="22" padding="3,3,3,2">
|
|
|
|
<jsml-ref name="rteborderstyle"/>
|
|
|
|
<initialize>
|
|
self._element.oncontextmenu=jsml.cancel_event_function;
|
|
</initialize>
|
|
|
|
<attach name="showing">
|
|
self.invoke_recursive("updateui");
|
|
</attach>
|
|
|
|
<method name="close" arguments="reason" overrideas="floatbox_close">
|
|
<![CDATA[
|
|
if(!reason||reason=="menu_click")
|
|
{
|
|
self.close_recursive();
|
|
}
|
|
else
|
|
{
|
|
self.floatbox_close(reason);
|
|
}
|
|
]]>
|
|
</method>
|
|
|
|
<method name="close_recursive">
|
|
<![CDATA[
|
|
var pare=self._fbOwner;
|
|
while(pare!=null&&!pare._floatboxinstance)pare=pare.parentNode;
|
|
if(pare&&pare._floatboxinstance.is_jsml_type("floatmenu"))
|
|
pare._floatboxinstance._onmenuclick();
|
|
else
|
|
self.close("dispose");
|
|
]]>
|
|
</method>
|
|
<attach name="editor_ready" arguments="jevent,editor">
|
|
<![CDATA[
|
|
self._rteinstance=editor;
|
|
self._estyle.zIndex=editor._config.dialog_zindex
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
|
|
<panel jsml-class="rtepluginholder" overflow="visible">
|
|
<property name="plugin">
|
|
<get>
|
|
return self.rtepluginname;
|
|
</get>
|
|
<set>
|
|
self.rtepluginname=value;
|
|
</set>
|
|
</property>
|
|
<property name="configname">
|
|
<get>
|
|
return self.rteconfigname;
|
|
</get>
|
|
<set>
|
|
self.rteconfigname=value;
|
|
</set>
|
|
</property>
|
|
<attach name="editor_ready" arguments="jevent,arg0">
|
|
<![CDATA[
|
|
self._rteinstance=arg0;
|
|
if(!self.rtepluginname)return;
|
|
if(self._rteinstance._config["show"+self.rtepluginname]===false)
|
|
return jsml.dispose_delay(self);
|
|
setTimeout(function()
|
|
{
|
|
self._rteinstance.LoadPlugin(self.rtepluginname,function(plugin)
|
|
{
|
|
if(!plugin||!plugin.LoadUI)return;
|
|
plugin.LoadUI(self);
|
|
});
|
|
},self._rteinstance._config.delay_plugin||2000);
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
|
|
<panel jsml-class="scrollitemspanel" dock="fill" overflow_x="none" overflow_y="scroll">
|
|
<!--
|
|
<panel jsml-local="noitempanel" dock="fill" vertical_align="middle" horizontal_align="center" visible="false">
|
|
<label text="@noitems" overflow="visible" width="10"/>
|
|
</panel>
|
|
-->
|
|
<initialize>
|
|
self._itemheight=21;
|
|
self._itemwidth=-1;
|
|
</initialize>
|
|
<method name="get_demand_content_height">
|
|
<![CDATA[
|
|
if(!self._items)return 0;
|
|
var colcount=self.calc_column_count();
|
|
if(colcount==1)
|
|
return self._items.length * self._itemheight+12;
|
|
return Math.ceil(self._items.length/colcount) * self._itemheight+12;
|
|
]]>
|
|
</method>
|
|
<method name="calc_column_count">
|
|
<![CDATA[
|
|
if(self._itemwidth<=0)
|
|
return 1;
|
|
var cw=self.get_client_width()-16;
|
|
return Math.floor(cw/self._itemwidth)||1;
|
|
]]>
|
|
</method>
|
|
<property name="itemheight">
|
|
<get>
|
|
return self._itemheight;
|
|
</get>
|
|
<set>
|
|
self._itemheight=parseInt(value)||22;
|
|
</set>
|
|
</property>
|
|
<property name="itemwidth">
|
|
<get>
|
|
return self._itemwidth;
|
|
</get>
|
|
<set>
|
|
self._itemwidth=parseInt(value)||-1;
|
|
</set>
|
|
</property>
|
|
<method name="reset_items">
|
|
<![CDATA[
|
|
//noitempanel.set_visible(true);
|
|
self.disposeslots();
|
|
var cs=self.get_children();
|
|
for(var i=cs.length-1;i>=1;i--)cs[i].set_parent(null);
|
|
self._items=null;
|
|
self._slots=null;
|
|
self._scroll_y=0;
|
|
]]>
|
|
</method>
|
|
<method name="add_items" arguments="arr,ctrlfunc">
|
|
<![CDATA[
|
|
|
|
self.ctrlfunc=ctrlfunc;
|
|
if(!self._items)
|
|
{
|
|
self._items=[];
|
|
self._slots=[];
|
|
}
|
|
self._items=self._items.concat(arr);
|
|
//noitempanel.set_visible(!self._items.length);
|
|
self._draw_visible_items();
|
|
self.invoke_notify_content();
|
|
]]>
|
|
</method>
|
|
<method name="foreach_slot" arguments="func">
|
|
<![CDATA[
|
|
if(!self._slots)return;
|
|
for(var i=0;i<self._slots.length;i++)
|
|
{
|
|
var s=self._slots[i];
|
|
if(s)func(s);
|
|
}
|
|
]]>
|
|
</method>
|
|
|
|
<method name="_draw_visible_items">
|
|
<![CDATA[
|
|
if(!self._items)return;
|
|
|
|
var KEEP_HEAD_COUNT=20;
|
|
|
|
self._drawtime=1+(self._drawtime||0);
|
|
var dt=self._drawtime;
|
|
|
|
var colcount=self.calc_column_count();
|
|
|
|
var sy=self._scroll_y||0;
|
|
var ch=self.get_client_height();
|
|
var cw=self.get_client_width()-16;
|
|
var ww=Math.floor(cw/colcount);
|
|
|
|
var start=Math.floor(sy*colcount/self._itemheight);
|
|
var count=Math.ceil(ch*colcount/self._itemheight);
|
|
|
|
if(start>colcount)start-=colcount;
|
|
count+=colcount*4;
|
|
|
|
var usedown=false;
|
|
var lastsy=self.lastscrolly||0;
|
|
if(sy>=lastsy)
|
|
usedown=true;
|
|
self.lastscrolly=sy;
|
|
|
|
var index=usedown?start:start+count-1;
|
|
if(index>self._items.length-1)index=self._items.length-1;
|
|
|
|
function NextClean()
|
|
{
|
|
if(self._jsml_disposed||dt!=self._drawtime)
|
|
return;
|
|
|
|
var ctrl=self._childs[index];
|
|
if( ctrl._slotindex>KEEP_HEAD_COUNT && (ctrl._slotindex<start-colcount||ctrl._slotindex>start+count+colcount) )
|
|
{
|
|
ctrl.set_parent(null);
|
|
}
|
|
index--;
|
|
if(index<0)
|
|
return;
|
|
setTimeout(NextClean,1);
|
|
}
|
|
|
|
function DoNextStep()
|
|
{
|
|
if(self._jsml_disposed||dt!=self._drawtime)
|
|
return;
|
|
|
|
var ctrl=self._slots[index];
|
|
if(!ctrl)
|
|
{
|
|
var item=self._items[index];
|
|
if(!item)return;
|
|
ctrl=self.ctrlfunc(item);
|
|
ctrl.set_dock("none");
|
|
ctrl._slotindex=index;
|
|
self._slots[index]=ctrl;
|
|
}
|
|
ctrl.set_top(Math.floor(index/colcount)*self._itemheight);
|
|
ctrl.set_left( (index%colcount)*ww );
|
|
ctrl.set_width(ww);
|
|
ctrl.set_visible(true);
|
|
if(!ctrl._jsml_parent)
|
|
{
|
|
//TODO:find a good position for the ctrl.
|
|
self.append_child(ctrl);
|
|
}
|
|
|
|
if(usedown)
|
|
index++;
|
|
else
|
|
index--;
|
|
|
|
if(index<start||index>=start+count)
|
|
{
|
|
index=self._childs.length-1;
|
|
NextClean();
|
|
}
|
|
else
|
|
{
|
|
setTimeout(DoNextStep,1);
|
|
}
|
|
}
|
|
|
|
new function()
|
|
{
|
|
for(var i=0;i<self._slots.length;i++)
|
|
{
|
|
var s=self._slots[i];
|
|
if(!s)continue;
|
|
if(s._slotindex<start||s._slotindex>=start+count)
|
|
s.set_visible(false);
|
|
}
|
|
}
|
|
|
|
setTimeout(DoNextStep,100);//DoNextStep();
|
|
|
|
]]>
|
|
</method>
|
|
<method name="disposeslots">
|
|
<![CDATA[
|
|
if(!self._slots)return;
|
|
for(var i=0;i<self._slots.length;i++)
|
|
{
|
|
var s=self._slots[i];
|
|
if(!s||s._jsml_disposed)continue;
|
|
s.dispose();
|
|
}
|
|
self._slots=null;
|
|
]]>
|
|
</method>
|
|
<attach name="disposing">
|
|
self.disposeslots();
|
|
</attach>
|
|
<attach name="scroll">
|
|
self._draw_visible_items();
|
|
</attach>
|
|
<attach name="resize">
|
|
self._draw_visible_items();
|
|
</attach>
|
|
</panel>
|
|
|
|
|
|
<panel jsml-class="rtepropctrl">
|
|
<method name="find_editor">
|
|
<![CDATA[
|
|
if(self._rteinstance)return self._rteinstance;
|
|
for(var ctrl=self;ctrl!=null;ctrl=ctrl.get_jsml_parent())
|
|
{
|
|
if(!ctrl._rteinstance)continue;
|
|
self._rteinstance=ctrl._rteinstance;
|
|
return ctrl._rteinstance;
|
|
}
|
|
]]>
|
|
</method>
|
|
<method name="find_node">
|
|
<![CDATA[
|
|
for(var p=self;p&&p.get_parent;p=p.get_parent())
|
|
if(p._rtenode)
|
|
return p._rtenode;
|
|
]]>
|
|
</method>
|
|
<property name="propname">
|
|
<get>
|
|
return self._propname;
|
|
</get>
|
|
<set>
|
|
self._propname=value;
|
|
</set>
|
|
</property>
|
|
<property name="propsuffix">
|
|
<get>
|
|
return self._propsuffix;
|
|
</get>
|
|
<set>
|
|
self._propsuffix=value;
|
|
</set>
|
|
</property>
|
|
<property name="ctrl_value">
|
|
<get>
|
|
</get>
|
|
<set>
|
|
</set>
|
|
</property>
|
|
<property name="node_value">
|
|
<get>
|
|
<![CDATA[
|
|
if(self._propname=='#')return;
|
|
var node=self.find_node();
|
|
if(node&&self._propname)
|
|
{
|
|
var mode="attribute";
|
|
var name=self._propname+(self._propsuffix||"");
|
|
var pair=name.split(':');
|
|
if(pair.length==2)
|
|
{
|
|
mode=pair[0];
|
|
name=pair[1];
|
|
}
|
|
if(mode=="style")
|
|
return node.GetStyle(name);
|
|
if(mode=="attribute")
|
|
return node.GetAttribute(name);
|
|
}
|
|
self.set_opacity(50);
|
|
]]>
|
|
</get>
|
|
<set>
|
|
<![CDATA[
|
|
if(self._propname=='#')return;
|
|
var node=self.find_node();
|
|
if(node&&self._propname)
|
|
{
|
|
if(value!=null)
|
|
value=String(value).replace(/(^\s+|\s+$)/g,"")
|
|
if(value==""&&!self._nonull)
|
|
value=null;
|
|
|
|
var mode="attribute";
|
|
var name=self._propname+(self._propsuffix||"");
|
|
var pair=name.split(':');
|
|
if(pair.length==2)
|
|
{
|
|
mode=pair[0];
|
|
name=pair[1];
|
|
}
|
|
if(mode=="style")
|
|
return node.SetStyle(name,value);
|
|
if(mode=="attribute")
|
|
return node.SetAttribute(name,value);
|
|
}
|
|
self.set_opacity(50);
|
|
]]>
|
|
</set>
|
|
</property>
|
|
<property name="nonull">
|
|
<get>
|
|
return self._nonull;
|
|
</get>
|
|
<set>
|
|
self._nonull=value;
|
|
</set>
|
|
</property>
|
|
<property name="suffix">
|
|
<get>
|
|
return self._suffix;
|
|
</get>
|
|
<set>
|
|
self._suffix=value;
|
|
</set>
|
|
</property>
|
|
<attach name="attach_dom,loadvalue">
|
|
<![CDATA[
|
|
var val=self.get_node_value();
|
|
if(val&&self._suffix)
|
|
{
|
|
var str=String(val);
|
|
var slen=self._suffix.length;
|
|
if(str.length>=slen&&str.substr(str.length-slen,slen)==self._suffix)
|
|
{
|
|
val=str.substr(0,str.length-slen);
|
|
}
|
|
}
|
|
self.set_ctrl_value(val);
|
|
if(self.get_opacity()!=100)
|
|
{
|
|
var node=self.find_node();
|
|
if(node)self.set_opacity(100);
|
|
}
|
|
]]>
|
|
</attach>
|
|
<attach name="change,savevalue" arguments="je">
|
|
<![CDATA[
|
|
if(je.jsml_name=="change"&&self._stopupdate)
|
|
return;
|
|
var val=self.get_ctrl_value();
|
|
if(val&&self._suffix)
|
|
{
|
|
var str=String("");
|
|
var slen=self._suffix.length;
|
|
if( ! (str.length>=slen&&str.substr(str.length-slen,slen)==self._suffix) )
|
|
{
|
|
val=val+self._suffix
|
|
}
|
|
}
|
|
self.set_node_value(val);
|
|
self.bubble_event("rtepropsaved");
|
|
]]>
|
|
</attach>
|
|
<property name="autoupdate">
|
|
<get>
|
|
return !self._stopupdate;
|
|
</get>
|
|
<set>
|
|
self._stopupdate=value;
|
|
</set>
|
|
</property>
|
|
<property name="text">
|
|
<get>
|
|
return self.get_ctrl_value()
|
|
</get>
|
|
<set>
|
|
self.set_ctrl_value(value);
|
|
self.invoke_event("savevalue");
|
|
</set>
|
|
</property>
|
|
|
|
</panel>
|
|
|
|
<panel jsml-class="rteproptextbox" jsml-base="rtepropctrl" border_width="1" border_color="#cccccc">
|
|
<textbox dock="fill" jsml-local="textbox" jsml-member="textbox" border_width="0">
|
|
<initialize>
|
|
self._input.style.textIndent="2px";
|
|
</initialize>
|
|
<attach name="change,keyup">
|
|
instance.invoke_event("change");
|
|
</attach>
|
|
</textbox>
|
|
<attach name="set_disabled">
|
|
textbox.set_disabled(self.get_disabled());
|
|
</attach>
|
|
<property name="ctrl_value">
|
|
<get>
|
|
return textbox.get_text();
|
|
</get>
|
|
<set>
|
|
textbox.set_text(String(value||""));
|
|
</set>
|
|
</property>
|
|
</panel>
|
|
|
|
<label jsml-class="rtepropunitbox_item" dock="top" width="45" vertical_align="middle" padding="0,0,0,5" cursor="pointer">
|
|
<attach name="mousehover">
|
|
self.set_back_color("darkblue");
|
|
self.set_text_color("white");
|
|
</attach>
|
|
<attach name="mouseleave">
|
|
self.set_back_color("");
|
|
self.set_text_color("");
|
|
</attach>
|
|
<attach name="click">
|
|
jsml.rtepropunitbox_panel.close();
|
|
var box=jsml.rtepropunitbox_panel.currentbox;
|
|
jsml.rtepropunitbox_panel.currentbox=null;
|
|
if(box)box.invoke_event("clickitem",self.get_text());
|
|
</attach>
|
|
</label>
|
|
|
|
<panel jsml-base="floatbox" id="rtepropunitbox_panel_id">
|
|
<initialize>
|
|
jsml.rtepropunitbox_panel=self;
|
|
self._element.style.zIndex=88888888;
|
|
</initialize>
|
|
<label jsml-base="rtepropunitbox_item" text="px" />
|
|
<label jsml-base="rtepropunitbox_item" text="%" />
|
|
<label jsml-base="rtepropunitbox_item" text="pt" />
|
|
<label jsml-base="rtepropunitbox_item" text="em" />
|
|
<label jsml-base="rtepropunitbox_item" text="pc" />
|
|
<label jsml-base="rtepropunitbox_item" text="cm" />
|
|
<label jsml-base="rtepropunitbox_item" text="mm" />
|
|
<label jsml-base="rtepropunitbox_item" text="in" />
|
|
</panel>
|
|
|
|
<panel jsml-class="rtepropunitbox" jsml-base="rtepropctrl" back_color="white" border_width="1" border_color="#cccccc" width="60">
|
|
<panel dock="right" jsml-local="image" width="9" vertical_align="middle" cursor="pointer">
|
|
<image width="7" height="10" vertical_align="middle" horizontal_align="center" overflow="none" src="{folder}images/tbdown.gif" />
|
|
<attach name="click" arguments="jevent,devent">
|
|
if(instance.get_disabled())return;
|
|
jsml.rtepropunitbox_panel.currentbox=instance;
|
|
jsml.rtepropunitbox_panel.show({control:label,stopDispose:true,stopOverlay:true});
|
|
</attach>
|
|
</panel>
|
|
<label dock="right" jsml-local="label" text="px" border_width="0" vertical_align="middle" text_align="right" width="17" cursor="pointer">
|
|
<attach name="click">
|
|
if(instance.get_disabled())return;
|
|
jsml.rtepropunitbox_panel.currentbox=instance;
|
|
jsml.rtepropunitbox_panel.show({control:label,stopDispose:true,stopOverlay:true});
|
|
</attach>
|
|
</label>
|
|
<textbox jsml-local="textbox" dock="fill" border_width="0" width="45">
|
|
<initialize>
|
|
self._input.style.textIndent="2px";
|
|
</initialize>
|
|
<attach name="change,keyup">
|
|
instance.onchange();
|
|
instance.invoke_event("change");
|
|
</attach>
|
|
</textbox>
|
|
|
|
<attach name="set_disabled">
|
|
textbox.set_disabled(self.get_disabled());
|
|
textbox.set_back_color(self.get_disabled()?"#dddddd":"");
|
|
label.set_back_color(self.get_disabled()?"#dddddd":"");
|
|
image.set_back_color(self.get_disabled()?"#dddddd":"");
|
|
</attach>
|
|
<property name="ctrl_value">
|
|
<get>
|
|
var value=textbox.get_text().replace(/(^\s+|\s+$)/g,"");
|
|
if(!value)return null;
|
|
value=parseInt(value);
|
|
if(isNaN(value))return null;
|
|
return value+label.get_text();
|
|
</get>
|
|
<set>
|
|
textbox.set_text(value);
|
|
self.onchange(true);
|
|
</set>
|
|
</property>
|
|
<method name="onchange" arguments="translateit">
|
|
<![CDATA[
|
|
var value=textbox.get_text().replace(/(^\s+|\s+$)/g,"");
|
|
var arr=["%","px","pt","em","pc","cm","mm","in"]
|
|
for(var i=0;i<arr.length;i++)
|
|
{
|
|
if(value.indexOf(arr[i])==-1)
|
|
continue;
|
|
label.set_text(arr[i]);
|
|
if(translateit)
|
|
{
|
|
textbox.set_text(value.replace(arr[i],""));
|
|
}
|
|
else
|
|
{
|
|
label.set_visible(false);
|
|
image.set_visible(false);
|
|
}
|
|
return;
|
|
}
|
|
label.set_visible(true);
|
|
image.set_visible(true);
|
|
]]>
|
|
</method>
|
|
<attach name="clickitem" arguments="je,suffix">
|
|
<![CDATA[
|
|
label.set_text(suffix);
|
|
var value=textbox.get_text().replace(/(^\s+|\s+$)/g,"");
|
|
if(value&&value!=parseInt(value))
|
|
{
|
|
textbox.set_txt(parseInt(value)||"");
|
|
}
|
|
self.invoke_event("change");
|
|
]]>
|
|
</attach>
|
|
</panel>
|
|
|
|
<panel jsml-class="rtepropnumupdown" jsml-base="rtepropctrl" height="18" border_width="1" border_color="#cccccc">
|
|
<panel dock="right" width="15" border_width="0,0,0,1" border_color="#eeeeee">
|
|
<image dock="top" jsml-local="image" height="8" overflow="none" jsml-base="imagebutton" cursor="default" padding="0,-3,0,3" src="{folder}images/numup.gif">
|
|
<attach name="mousedown" arguments="je,de">
|
|
<![CDATA[
|
|
instance.imageadd(1,self);
|
|
de.cancel();
|
|
]]>
|
|
</attach>
|
|
</image>
|
|
<image dock="bottom" jsml-local="image" height="8" overflow="none" jsml-base="imagebutton" cursor="default" padding="0,-3,0,3" src="{folder}images/numdown.gif">
|
|
<attach name="mousedown" arguments="je,de">
|
|
<![CDATA[
|
|
instance.imageadd(-1,self);
|
|
de.cancel();
|
|
]]>
|
|
</attach>
|
|
</image>
|
|
</panel>
|
|
<textbox dock="fill" jsml-local="textbox" border_width="0" >
|
|
<initialize>
|
|
self._input.style.textIndent="2px";
|
|
</initialize>
|
|
<attach name="change,keyup">
|
|
instance.invoke_event("change");
|
|
</attach>
|
|
</textbox>
|
|
<attach name="set_disabled">
|
|
textbox.set_disabled(self.get_disabled());
|
|
</attach>
|
|
<property name="ctrl_value">
|
|
<get>
|
|
return textbox.get_text();
|
|
</get>
|
|
<set>
|
|
textbox.set_text(String(value||""));
|
|
</set>
|
|
</property>
|
|
|
|
<property name="min_value">
|
|
<get>
|
|
return null;
|
|
</get>
|
|
<set>
|
|
self._min_value=parseInt(value);
|
|
</set>
|
|
</property>
|
|
<property name="max_value">
|
|
<get>
|
|
return null;
|
|
</get>
|
|
<set>
|
|
self._max_value=parseInt(value);
|
|
</set>
|
|
</property>
|
|
<method name="imageadd" arguments="value,image">
|
|
<![CDATA[
|
|
function addfunc()
|
|
{
|
|
var val=parseInt(textbox.get_text())||0;
|
|
val+=value;
|
|
if(self._max_value!=null&&val>self._max_value)
|
|
val=self._max_value;
|
|
if(self._min_value!=null&&val<self._min_value)
|
|
val=self._min_value;
|
|
textbox.set_text(String(val));
|
|
self.invoke_event("change");
|
|
}
|
|
|
|
addfunc();
|
|
var captured=true;
|
|
jsml.startcapture(null,function()
|
|
{
|
|
captured=false;
|
|
image.invoke_event("mouseup");
|
|
},"default");
|
|
function ontimeout()
|
|
{
|
|
if(!captured)return;
|
|
addfunc();
|
|
setTimeout(ontimeout,100);
|
|
}
|
|
setTimeout(ontimeout,500);
|
|
|
|
]]>
|
|
</method>
|
|
</panel>
|
|
|
|
<panel jsml-class="rtepropcolorbox" jsml-base="rtepropctrl">
|
|
<image dock="right" jsml-local="image" src="{folder}images/colorbox.gif" width="19" horizontal_align="center" cursor="pointer">
|
|
<attach name="click">
|
|
instance.showdropdown(self);
|
|
</attach>
|
|
</image>
|
|
<textbox dock="fill" jsml-local="textbox" border_width="1" border_color="#cccccc" margin="0,2,0,0" font_size="11px">
|
|
<initialize>
|
|
self._input.style.textIndent="2px";
|
|
</initialize>
|
|
<attach name="change,keyup">
|
|
instance.invoke_event("change");
|
|
</attach>
|
|
<attach name="mouseup">
|
|
instance.showdropdown(image);
|
|
</attach>
|
|
</textbox>
|
|
|
|
<attach name="change,setvalue,loadvalue,attach_dom">
|
|
image.set_back_color(textbox.get_text());
|
|
textbox.set_back_color(textbox.get_text());
|
|
</attach>
|
|
|
|
<method name="showdropdown" arguments="img">
|
|
<![CDATA[
|
|
var option={floatMode:"b-l"};
|
|
option.setcolor=function(val)
|
|
{
|
|
textbox.set_text(val);
|
|
self.invoke_event("change");
|
|
};
|
|
self.find_editor().ExecShowXmlFloatbox(img._element,"colorpicker.xml",option);
|
|
]]>
|
|
</method>
|
|
<attach name="set_disabled">
|
|
textbox.set_disabled(self.get_disabled());
|
|
</attach>
|
|
<property name="ctrl_value">
|
|
<get>
|
|
return textbox.get_text();
|
|
</get>
|
|
<set>
|
|
textbox.set_text(String(value||""));
|
|
image.set_back_color(textbox.get_text());
|
|
textbox.set_back_color(textbox.get_text());
|
|
</set>
|
|
</property>
|
|
</panel>
|
|
|
|
|
|
<panel jsml-class="rtepropdropdown" jsml-base="rtepropctrl" border_width="1" border_color="#cccccc">
|
|
<dropdown dock="fill" jsml-local="dropdown" border_width="0">
|
|
<attach name="change,keyup">
|
|
instance.invoke_event("change");
|
|
</attach>
|
|
</dropdown>
|
|
<method name="jsml_append" overrideas="panel_jsml_append">
|
|
<![CDATA[
|
|
if(dropdown==value)
|
|
self.append_child(value)
|
|
else
|
|
dropdown.jsml_append(value);
|
|
]]>
|
|
</method>
|
|
<attach name="set_disabled">
|
|
dropdown.set_disabled(self.get_disabled());
|
|
</attach>
|
|
<property name="editable">
|
|
<get>
|
|
return dropdown.get_editable();
|
|
</get>
|
|
<set>
|
|
dropdown.set_editable(value);
|
|
</set>
|
|
|
|
</property>
|
|
<property name="ctrl_value">
|
|
<get>
|
|
return dropdown.get_text();
|
|
</get>
|
|
<set>
|
|
dropdown.set_text(String(value||""));
|
|
</set>
|
|
</property>
|
|
</panel>
|
|
|
|
<panel jsml-class="rtepropcheckbox" jsml-base="rtepropctrl" width="20" height="20">
|
|
<checkbox dock="fill" jsml-local="checkbox">
|
|
<attach name="change,keyup,click">
|
|
instance.invoke_event("change");
|
|
</attach>
|
|
</checkbox>
|
|
<attach name="set_disabled">
|
|
checkbox.set_disabled(self.get_disabled());
|
|
</attach>
|
|
<method name="toggle_checked">
|
|
checkbox.set_checked(!checkbox.get_checked());
|
|
self.invoke_event("change");
|
|
</method>
|
|
<property name="truestring">
|
|
<get>
|
|
return self._truestring;
|
|
</get>
|
|
<set>
|
|
self._truestring=value;
|
|
</set>
|
|
</property>
|
|
<property name="falsestring">
|
|
<get>
|
|
return self._falsestring;
|
|
</get>
|
|
<set>
|
|
self._falsestring=value;
|
|
</set>
|
|
</property>
|
|
<property name="defaultstring">
|
|
<get>
|
|
return self._defaultstring;
|
|
</get>
|
|
<set>
|
|
self._defaultstring=value;
|
|
</set>
|
|
</property>
|
|
<property name="ctrl_value">
|
|
<get>
|
|
return (checkbox.get_checked()?self._truestring:self._falsestring)||"";
|
|
</get>
|
|
<set>
|
|
if(!value)value=self._defaultstring;
|
|
checkbox.set_checked(self._truestring==value)
|
|
</set>
|
|
</property>
|
|
</panel>
|
|
|
|
<panel jsml-class="rtebtngroup_float" overflow="visible">
|
|
<image jsml-base="imagebutton" dock="left" src="{folder}images/floatleft.gif" width="22" tooltip="@FLOATLEFT">
|
|
<attach name="attach_dom,loadvalue">
|
|
self.set_checked(instance.get_align()=="left")
|
|
</attach>
|
|
<attach name="click">
|
|
instance.set_align("left");
|
|
</attach>
|
|
</image>
|
|
<image jsml-base="imagebutton" dock="left" src="{folder}images/floatnone.gif" width="22" tooltip="@FLOATNONE">
|
|
<attach name="attach_dom,loadvalue">
|
|
self.set_checked(instance.get_align()=="none")
|
|
</attach>
|
|
<attach name="click">
|
|
instance.set_align("none");
|
|
</attach>
|
|
</image>
|
|
<image jsml-base="imagebutton" dock="left" src="{folder}images/floatblock.gif" width="22" tooltip="@FLOATFULL">
|
|
<attach name="attach_dom,loadvalue">
|
|
self.set_checked(instance.get_align()=="block")
|
|
</attach>
|
|
<attach name="click">
|
|
instance.set_align("block");
|
|
</attach>
|
|
</image>
|
|
<image jsml-base="imagebutton" dock="left" src="{folder}images/floatright.gif" width="22" tooltip="@FLOATRIGHT">
|
|
<attach name="attach_dom,loadvalue">
|
|
self.set_checked(instance.get_align()=="right")
|
|
</attach>
|
|
<attach name="click">
|
|
instance.set_align("right");
|
|
</attach>
|
|
</image>
|
|
<method name="find_node">
|
|
<![CDATA[
|
|
for(var p=self;p&&p.get_parent;p=p.get_parent())
|
|
if(p._rtenode)
|
|
return p._rtenode;
|
|
]]>
|
|
</method>
|
|
<method name="get_align">
|
|
<![CDATA[
|
|
var node=self.find_node();
|
|
if(!node)return;
|
|
return node.GetAlignMode();
|
|
]]>
|
|
</method>
|
|
<method name="set_align" arguments="mode">
|
|
<![CDATA[
|
|
var node=self.find_node();
|
|
if(!node)return;
|
|
node.SetAlignMode(mode);
|
|
instance.invoke_recursive("loadvalue");
|
|
]]>
|
|
</method>
|
|
</panel>
|
|
|
|
|
|
<jsml-def name="linktree">
|
|
<method name="loadgroupcontent" arguments="group,element">
|
|
<![CDATA[
|
|
|
|
if(group.groups.length+group.links.length==0)
|
|
{
|
|
element.style.textIndent="6px";
|
|
element.innerHTML="(Empty)";
|
|
return;
|
|
}
|
|
|
|
var table=document.createElement("TABLE");
|
|
table.cellSpacing=0;
|
|
table.cellPadding=0;
|
|
|
|
var cg1=document.createElement("COLGROUP");
|
|
cg1.style.width="16px";
|
|
table.appendChild(cg1);
|
|
|
|
for(var i=0;i<group.groups.length;i++)
|
|
{
|
|
self.linktree_addgroup(group.groups[i],table);
|
|
}
|
|
for(var i=0;i<group.links.length;i++)
|
|
{
|
|
self.linktree_addlink(group.links[i],table);
|
|
}
|
|
|
|
element.appendChild(table);
|
|
|
|
container.invoke_notify_content();
|
|
|
|
]]>
|
|
</method>
|
|
<method name="linktree_addgroup" arguments="group,table">
|
|
<![CDATA[
|
|
var closedimg="<img src='{folder}dialogs/images/tree_closed.gif' style='width:13px;height:13px;'/>";
|
|
var openedimg="<img src='{folder}dialogs/images/tree_opened.gif' style='width:13px;height:13px;'/>";
|
|
|
|
var loaded=false;
|
|
var opened=false;
|
|
|
|
var row1=table.insertRow(-1);
|
|
var row2=table.insertRow(-1);
|
|
var td11=row1.insertCell(-1);
|
|
var td12=row1.insertCell(-1);
|
|
var td21=row2.insertCell(-1);
|
|
var td22=row2.insertCell(-1);
|
|
|
|
td11.style.cursor="pointer";
|
|
td11.style.verticalAlign="middle";
|
|
td11.style.fontSize="1px";
|
|
td11.style.lineHeight="1px";
|
|
td11.style.padding="0px";
|
|
td11.innerHTML=closedimg;
|
|
|
|
td12.className="rtelinktreegroup";
|
|
td12.innerHTML=jsml.html_encode(group.text);
|
|
|
|
row2.style.display='none';
|
|
|
|
function toggleit()
|
|
{
|
|
if(!loaded)
|
|
{
|
|
loaded=true;
|
|
self.loadgroupcontent(group,td22);
|
|
}
|
|
if(!opened)
|
|
{
|
|
row2.style.display='';
|
|
td11.innerHTML=openedimg;
|
|
opened=true;
|
|
}
|
|
else
|
|
{
|
|
row2.style.display='none';
|
|
td11.innerHTML=closedimg;
|
|
opened=false;
|
|
}
|
|
container.invoke_notify_content();
|
|
}
|
|
|
|
td11.onclick=toggleit;
|
|
td12.onclick=toggleit;
|
|
]]>
|
|
</method>
|
|
<method name="linktree_addlink" arguments="link,table">
|
|
<![CDATA[
|
|
var row1=table.insertRow(-1);
|
|
var td11=row1.insertCell(-1);
|
|
var td12=row1.insertCell(-1);
|
|
|
|
td11.innerHTML="<img src='{folder}dialogs/images/url_icon.gif' style='width:13px;height:13px;'/>"
|
|
td11.style.verticalAlign="middle";
|
|
|
|
td12.className="rtelinktreeitem";
|
|
td12.innerHTML=jsml.html_encode(link.text);
|
|
if(link.href)td12.setAttribute("title",link.href);
|
|
|
|
td12.onmouseover=new Function("","this.style.color='#0000FF'");
|
|
td12.onmouseout=new Function("","this.style.color=''");
|
|
|
|
td12.onclick=function()
|
|
{
|
|
self.invoke_event("clicklink",link);
|
|
}
|
|
|
|
]]>
|
|
</method>
|
|
</jsml-def>
|
|
|
|
|
|
<execute>
|
|
<![CDATA[
|
|
jsml.rtecommonlibraryloaded=true;
|
|
function tryclosefloatbox(e)
|
|
{
|
|
if(!jsml._currentfloatbox)return;
|
|
var e=e||window.event;
|
|
var pare=e.srcElement||e.target;
|
|
while(pare!=null&&!pare._floatboxinstance)pare=pare.parentNode;
|
|
if(pare)return;
|
|
jsml._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)
|
|
});
|
|
jsml.floatbox_allowautofloatbox=function(element)
|
|
{
|
|
var fb=jsml._currentfloatbox;
|
|
if(!fb)return true;
|
|
if(fb._closed)return true;
|
|
for(;fb&&!fb._closed;fb=fb._childfloatbox)
|
|
{
|
|
for(var p=element;p!=null;p=p.parentNode)
|
|
if(p==fb._element)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
]]>
|
|
</execute>
|
|
|
|
|
|
|
|
|
|
</jsml>
|