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.

416 lines
9.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">
<execute>
plugin.header_attribute_name="class";
</execute>
<panel jsml-class="elementtoolbar_tag_a" overflow="visible" width="10" height="10" dock ="fill" padding="5,6,7,6">
<label dock="left" text="@GOTOLINK" padding="0,2,0,2" overflow_x="visible" height="10" width="10" />
<label dock="left" text="http://" text_color="darkblue" vertical_align="middle" padding="0,3,0,3" overflow_x="visible" height="10" width="50">
<attach name="loadvalue">
<![CDATA[
if(!plugin.selectednode)return;
var s=plugin.selectednode.GetAttribute("href")||"";
if(s.length>77)
{
self.set_text(s.substring(0,73)+"....");
self.set_tooltip(s);
}
else
{
self.set_text(s);
self.set_tooltip(null);
}
self.set_cursor("pointer");
self._content.style.textDecoration="underline";
]]>
</attach>
<attach name="click">
var url=plugin.selectednode.GetAttribute("href");
if(url)window.open(url);
</attach>
</label>
<label dock="left" text="-" padding="0,2,0,2" overflow_x="visible" height="10" width="10" />
<label dock="left" text="@CHANGE" text_color="darkblue" vertical_align="middle" padding="0,3,0,3" overflow_x="visible" height="10" width="10">
<attach name="loadvalue">
self.set_cursor("pointer");
self._content.style.textDecoration="underline";
</attach>
<attach name="click">
editor.ExecUICommand(null,"InsertLink");
</attach>
</label>
<label dock="left" text="-" padding="0,2,0,2" overflow_x="visible" height="10" width="10" />
<label dock="left" text="@REMOVE" text_color="darkblue" vertical_align="middle" padding="0,3,0,3" overflow_x="visible" height="10" width="10">
<attach name="loadvalue">
self.set_cursor("pointer");
self._content.style.textDecoration="underline";
</attach>
<attach name="click">
editor.ExecUICommand(null,"UnLink");
</attach>
</label>
</panel>
<panel jsml-class="elementtoolbar">
<panel jsml-local="toolbar" overflow="visible" width="10" height="10" back_color="#E1EFFF">
<initialize>
self._estyle.border="solid 1px #A8CDFC";
</initialize>
</panel>
<method name="jsml_append" arguments="panel">
panel._dommode='absolute';
panel.set_parent(document.body);
self.hidepanel(panel,true);
if(!self.panels)self.panels=[];
self.panels.push(panel);
</method>
<method name="invoke_recursive" overrideas="panel_invoke_recursive">
<![CDATA[
self.panel_invoke_recursive();
for(var i=0;i<self.panels.length;i++)
self.panels[i].invoke_recursive.apply(self.panels[i],arguments);
]]>
</method>
<method name="hidepanel" arguments="panel,hidenow">
<![CDATA[
if(panel.ishided)return;
panel.ishided=true;
function hideit()
{
panel.set_visibility("hidden");
panel._estyle.left="-1000px";
panel._estyle.top="-1000px";
}
if(hidenow)
{
hideit();
return;
}
setTimeout(function()
{
if(!panel.ishided)return;
hideit();
},5);
]]>
</method>
<method name="showpanel" arguments="panel,pos,mode,edge,xoffset,yoffset">
<![CDATA[
panel.ishided=false;
panel.set_visibility("visible");
var pew=pos.width;
var peh=pos.height;
if(edge=="w"||edge=="s")panel.set_width(pew);
if(edge=="h"||edge=="s")panel.set_height(peh);
var w=panel.get_current_width();
var h=panel.get_current_height();
panel._estyle.zIndex=editor._config.ctrltool_zindex;
pos={left:pos.left,top:pos.top}
var nomovey,nomovex;
var fmpair=mode?mode.split('-'):[];
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;
case "c":
case "m":
if(fmpair[0]=="t"||fmpair[0]=="b")
{
pos.left+=Math.floor((pew-w)/2)
}
else
{
pos.top+=Math.floor((peh-h)/2)
}
break;
}
if(xoffset)pos.left+=xoffset;
if(yoffset)pos.top+=yoffset;
if(pos.left<10)pos.left=10
panel._estyle.left=pos.left+"px";
panel._estyle.top=pos.top+"px";
]]>
</method>
<method name="calc_ctrl_pos" arguments="ctrl,autoadjust">
<![CDATA[
var viewnode=ctrl.GetViewNode();
var fp=jsml.get_scrollposition(editor._config.skin_frame);
var pos=jsml.get_clientposition(viewnode,editor.GetWindow());
pos.width=viewnode.offsetWidth;
pos.height=viewnode.offsetHeight;
var zoom=parseInt(editor.GetWindow().document.body.style.zoom)||100;
if(zoom!=100)
{
pos.top=pos.top*zoom/100;
pos.left=pos.left*zoom/100;
pos.width=pos.width*zoom/100;
pos.height=pos.height*zoom/100;
}
if(autoadjust)
{
fp.width=editor._config.skin_frame.offsetWidth-1;
fp.height=editor._config.skin_frame.offsetHeight-1;
pos.left-=1;
pos.top-=1;
pos.width+=2;
pos.height+=2;
if(pos.top<0)
{
pos.height-=-pos.top;
pos.top=0;
}
if(pos.left<0)
{
pos.left=0;
pos.width-=-pos.left;
}
if(pos.left+pos.width>fp.width)
{
var sub=pos.left+pos.width-fp.width;
pos.width-=sub;
}
if(pos.top+pos.height>fp.height)
{
var sub=pos.top+pos.height-fp.height;
pos.height-=sub;
}
}
pos.left+=fp.left;
pos.top+=fp.top;
return pos;
]]>
</method>
<method name="startmonitor">
<![CDATA[
plugin.selectedprovider=editor.CreateControlProvider(plugin.selectednode);
self.docversion=null;
self.docstop=null;
self.lastupdatetime=null;
self.lastpos=null;
self.updatepos();
]]>
</method>
<method name="updatepos">
<![CDATA[
clearTimeout(self.updateposid);
self.updateposid=setTimeout(self.delegate_updatepos,10);
var now=new Date().getTime();
var ver=editor.GetContentVersion();
var doc=editor.GetWindow().document;
var sct=Math.max(doc.body.scrollTop,doc.documentElement.scrollTop);
if(self.docversion==ver&&self.docstop==sct)
{
if(now-(self.lastupdatetime||0)<200)
return;
}
self.docversion=ver;
self.docstop=sct
self.lastupdatetime=now;
var pos;
try
{
pos=self.calc_ctrl_pos(plugin.selectednode,true);
}
catch(x)
{
return;
}
if(self.lastpos&&self.lastpos.top==pos.top&&self.lastpos.left==pos.left
&&self.lastpos.width==pos.width&&self.lastpos.height==pos.height)
{
return;
}
self.lastpos=pos;
var ctrlpos=pos;
var clsname="elementtoolbar_tag_"+plugin.selectednode.GetNameLower();
if(jsml.class_exists(clsname))
{
var keyname="pageinst_"+plugin.selectednode.GetNameLower();
self.pageinst=self[keyname];
if(!self.pageinst)
{
self.pageinst=jsml.class_create_instance(clsname);
self.pageinst.invoke_recursive("editor_ready",editor);
self[keyname]=self.pageinst;
}
if(self.pageinst.get_parent()==null)
{
toolbar.append_child(self.pageinst);
self.pageinst.invoke_recursive("loadvalue");
}
self.showpanel(toolbar,pos,"b-c" ,"")
}
]]>
</method>
<method name="stopmonitor">
<![CDATA[
clearTimeout(self.updateposid);
for(var i=0;i<self.panels.length;i++)
self.hidepanel(self.panels[i]);
self.lastpos=null;
if(self.pageinst)self.pageinst.set_parent(null);
]]>
</method>
<method name="updatecontrols">
<![CDATA[
if(!editor.IsTabEdit())
{
if(plugin.selectednode)
{
self.stopmonitor();
plugin.selectednode=null;
}
return;
}
var node=null;
var control;
if(!editor.GetDragControl())
{
node=editor.GetPointNode();
var link=editor.IsIncludedByTag("a");
if(editor._config.showlinkbar&&link&&link.GetAttribute("href"))
{
if(editor.GetSelectionType()!="Control")
{
control=link;
}
}
}
if(plugin.selectednode==control)
{
return;
}
jsml.suppend_layout();
if(plugin.selectednode)
{
self.stopmonitor();
plugin.selectednode=null;
}
if(control)
{
plugin.selectednode=control;
toolbar._rtenode=plugin.selectednode;
self.startmonitor();
}
jsml.resume_layout();
]]>
</method>
<initialize>
<![CDATA[
self.delegate_updatepos=self.delegate(self.updatepos);
editor.AttachEvent("SelectionChanged",function(editor,e)
{
self.updatecontrols();
});
editor.AttachEvent("TabModeChanged",function(editor,e)
{
self.updatecontrols();
});
]]>
</initialize>
</panel>
<execute>
<![CDATA[
plugin.Execute=function(element,arg1,arg2)
{
}
plugin.elementtoolbar=jsml.class_create_instance("elementtoolbar");
plugin.elementtoolbar.invoke_recursive("editor_ready",editor);
]]>
</execute>
</jsml>