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.
391 lines
9.8 KiB
391 lines
9.8 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">
|
|
|
|
<htmlcontrol jsml-class="setstylesdialogitem" dock="top" overflow="visible" font_size="11px" vertical_align="middle" margin="2" padding="2,2,2,4" border_width="1" border_color="transparent" cursor="pointer" unselectable="true">
|
|
<initialize>
|
|
self._estyle.fontFamily='"Segoe UI","Lucida Grande", Tahoma, Verdana, Arial, sans-serif';
|
|
</initialize>
|
|
<attach name="mousehover" arguments="je,e">
|
|
self.set_border_color('#DCAC6C');
|
|
self.set_back_color('#FFF5D4');
|
|
self.set_text_color('blue');
|
|
</attach>
|
|
<attach name="mouseleave">
|
|
self.set_border_color('white');
|
|
self.set_back_color('');
|
|
self.set_text_color('');
|
|
</attach>
|
|
<attach name="click">
|
|
editor.FormatApplyData(self._painterdata);
|
|
dialog.close();
|
|
</attach>
|
|
</htmlcontrol>
|
|
|
|
<panel jsml-class="setstyles_dialog" dock="fill" width="240" overflow="visible">
|
|
|
|
<panel jsml-local="mainpanel" dock="fill" >
|
|
|
|
<panel dock="fill" overflow="scroll" padding="8">
|
|
<panel dock="top" overflow="visible" jsml-local="panelstatic">
|
|
</panel>
|
|
<panel jsml-base="rtemenuspliter" margin="3" />
|
|
<panel dock="top" overflow="visible">
|
|
<label dock="left" vertical_align="middle" horizontal_align="left" padding="0,0,0,3" text="@RECENTSTYLE|:" width="120" />
|
|
<image jsml-base="imagebutton" left="180" width="20" height="20" tooltip="@quickstyle" src="{folder}images/icon_add.png" padding="1,-1,-1,1">
|
|
<attach name="click">
|
|
editor.ExecCommand("formatpainterfetch");
|
|
instance._reloadtab=true;
|
|
instance.loadstyles("history",panelhistory);
|
|
</attach>
|
|
</image>
|
|
</panel>
|
|
<panel dock="top" overflow="visible" jsml-local="panelhistory">
|
|
</panel>
|
|
</panel>
|
|
|
|
</panel>
|
|
|
|
<initialize>
|
|
<![CDATA[
|
|
self.stylearray=[];
|
|
self.readmap={};
|
|
var totallen=0;
|
|
|
|
jsml.suppend_layout();
|
|
|
|
self.loadstyles("static",panelstatic);
|
|
totallen+=self.stylearray.length;
|
|
self.loadstyles("history",panelhistory);
|
|
totallen+=self.stylearray.length;
|
|
|
|
var height=120+28*Math.ceil(totallen/1);
|
|
if(height<200)height=200;
|
|
if(height>366)height=366;
|
|
mainpanel.set_height(height);
|
|
jsml.resume_layout();
|
|
]]>
|
|
</initialize>
|
|
|
|
<method name="loadstyles" arguments="styletab,itemspanel">
|
|
<![CDATA[
|
|
|
|
var reload=self._reloadtab;
|
|
self._reloadtab=null;
|
|
|
|
editor.SetLocalData("Styles","ActiveTab",styletab)
|
|
|
|
itemspanel.dispose_children();
|
|
self.stylearray=self.readmap[styletab];
|
|
if(reload||!self.stylearray)
|
|
{
|
|
self.stylearray=[];
|
|
switch(styletab)
|
|
{
|
|
case "static":
|
|
self.loadstylefromstaticfile();
|
|
self.loadstylefromcontentcss();
|
|
break;
|
|
case "document":
|
|
self.loadstylefromdocument();
|
|
break;
|
|
case "history":
|
|
self.loadstylefromhistory();
|
|
//if(self.stylearray.length<=20)
|
|
// self.loadstylefromstaticfile();
|
|
//if(self.stylearray.length<=20)
|
|
// self.loadstylefromcontentcss();
|
|
if(self.stylearray.length>12)
|
|
self.stylearray.length=12;
|
|
break;
|
|
}
|
|
self.readmap[styletab]=self.stylearray;
|
|
}
|
|
|
|
self.appendstyles(itemspanel);
|
|
|
|
]]>
|
|
</method>
|
|
|
|
<method name="loadstylefromstaticfile">
|
|
<![CDATA[
|
|
var arr=[editor._config.folder+"config/staticstyles.xml?"+editor._config._urlsuffix];
|
|
arr=arr.concat(editor._config.stylexmlurlarray||[]);
|
|
for(var i=0;i<arr.length;i++)
|
|
{
|
|
var xh=jsml.xmlhttp();
|
|
xh.open("GET",arr[i],false);
|
|
xh.send("");
|
|
var xd=xh.responseXML;
|
|
if(!xd)continue;
|
|
var cns=xd.documentElement.childNodes;
|
|
for(var ci=0;ci<cns.length;ci++)
|
|
{
|
|
var node=cns.item(ci);
|
|
if(node.nodeName!="style")continue;
|
|
var data={};
|
|
var attrs=node.attributes;
|
|
for(var ai=0;ai<attrs.length;ai++)
|
|
{
|
|
var attr=attrs.item(ai);
|
|
data[attr.nodeName]=attr.nodeValue;
|
|
}
|
|
self.stylearray.push(data);
|
|
}
|
|
}
|
|
]]>
|
|
</method>
|
|
|
|
<method name="loadstylefromcontentcss">
|
|
<![CDATA[
|
|
|
|
if(!editor._config.autoparseclasses)
|
|
return;
|
|
|
|
var contentcss=editor._config.contentcss;
|
|
if(!contentcss&&!editor._config.contentcsstext)
|
|
return;
|
|
|
|
var disableclasslist=editor._config.disableclasslist
|
|
var disableclassmap;
|
|
if(disableclasslist)
|
|
{
|
|
disableclassmap={}
|
|
disableclasslist=disableclasslist.toLowerCase().split(',');
|
|
for(var i=0;i<disableclasslist.length;i++)
|
|
{
|
|
disableclassmap[disableclasslist[i]]=true;
|
|
}
|
|
}
|
|
|
|
contentcss=contentcss?contentcss.split(','):[];
|
|
for(var i=0;i<contentcss.length;i++)
|
|
{
|
|
if(!contentcss[i])
|
|
continue;
|
|
contentcss[i]=editor.MakeAbsoluteUrl(contentcss[i])
|
|
}
|
|
|
|
function ParseCssText(text)
|
|
{
|
|
if(!text)return "";
|
|
var sb=[];
|
|
var pairs=text.split(';');
|
|
for(var pi=0;pi<pairs.length;pi++)
|
|
{
|
|
var pair=pairs[pi].split(':');
|
|
if(pair.length!=2)
|
|
continue;
|
|
var n=pair[0].replace(/(^\s+|\s+$)/g,"").toLowerCase();
|
|
switch(n)
|
|
{
|
|
case "vertical-align":
|
|
case "font-weight":
|
|
case "font-style":
|
|
case "text-decoration":
|
|
case "color":
|
|
case "background-color":
|
|
case "font-size":
|
|
case "font-family":
|
|
sb.push(n+":"+pair[1]);
|
|
break;
|
|
}
|
|
}
|
|
return sb.join(";");
|
|
}
|
|
function ParseStyleSheet(ss)
|
|
{
|
|
var rs=ss.rules||ss.cssRules;
|
|
for(var ri=0;ri<rs.length;ri++)
|
|
{
|
|
var r=rs.item(ri);
|
|
var rts=r.selectorText.split(',');
|
|
var cst=null;
|
|
for(var rti=0;rti<rts.length;rti++)
|
|
{
|
|
var rt=rts[rti].replace(/(^\s+|\s+$)/g,"").split('.');
|
|
if(rt.length!=2)
|
|
continue;
|
|
if(rt[0]!=""&&rt[0].toLowerCase()!="span")
|
|
continue;
|
|
if(!rt[1].match(/^[a-z0-9]+$/i))
|
|
continue;
|
|
if(disableclassmap&&disableclassmap[rt[1]])
|
|
continue;
|
|
if(cst==null)
|
|
cst=ParseCssText(r.style.cssText);
|
|
if(!cst)
|
|
break;
|
|
self.stylearray.push({cssclass:rt[1],stylevalue:cst});
|
|
}
|
|
}
|
|
}
|
|
|
|
var sss=editor.GetWindow().document.styleSheets;
|
|
for(var ssi=0;ssi<sss.length;ssi++)
|
|
{
|
|
var ss=sss.item(ssi);
|
|
var url=ss.href;
|
|
if(!url)
|
|
{
|
|
if(!ss.ownerNode)
|
|
continue;
|
|
|
|
if(ss.ownerNode.getAttribute("_from")=="contentcsstext")
|
|
{
|
|
ParseStyleSheet(ss);
|
|
continue;
|
|
}
|
|
url=ss.ownerNode.getAttribute("originalurl");
|
|
if(!url)
|
|
continue;
|
|
}
|
|
for(var i=0;i<contentcss.length;i++)
|
|
{
|
|
if(!contentcss[i])
|
|
continue;
|
|
if(url.indexOf(contentcss[i])==-1)
|
|
continue;
|
|
ParseStyleSheet(ss);
|
|
break;
|
|
}
|
|
}
|
|
|
|
]]>
|
|
</method>
|
|
|
|
<method name="loadstylefromhistory">
|
|
self.stylearray=self.stylearray.concat(editor.LoadHistoryStyles());
|
|
</method>
|
|
|
|
<method name="loadstylefromdocument">
|
|
<![CDATA[
|
|
|
|
function ScanNode(node)
|
|
{
|
|
var c=0;
|
|
if(node.GetChildCount)
|
|
c=node.GetChildCount();
|
|
if(c==0)
|
|
{
|
|
var d=editor.FormatFindData(node,self.stylearray);
|
|
if(d)
|
|
{
|
|
self.stylearray.push(d);
|
|
}
|
|
return;
|
|
}
|
|
for(var i=0;i<c;i++)
|
|
{
|
|
var subnode=node.GetChildAt(i);
|
|
ScanNode(subnode);
|
|
}
|
|
}
|
|
var sel=editor.SaveBookmark();
|
|
ScanNode(editor.GetBodyNode());
|
|
editor.RestoreBookmark(sel);
|
|
|
|
]]>
|
|
</method>
|
|
|
|
<method name="appendstyles" arguments="itemspanel">
|
|
<![CDATA[
|
|
|
|
for(var i=0;i<self.stylearray.length;i++)
|
|
{
|
|
var data=self.stylearray[i];
|
|
|
|
var item=jsml.class_create_instance("setstylesdialogitem");
|
|
var div=document.createElement("DIV");
|
|
div.innerHTML="AaBbCc";
|
|
|
|
for(var n in data)
|
|
{
|
|
var v=data[n];
|
|
if(!v)continue;
|
|
|
|
switch(n)
|
|
{
|
|
case "name":
|
|
case "value":
|
|
break;
|
|
default:
|
|
item.set_tooltip( (item.get_tooltip()||"") +" "+n+"="+v);
|
|
break;
|
|
}
|
|
|
|
switch(n)
|
|
{
|
|
case "subscript":
|
|
if(!data.name)div.innerHTML="AaB<sub>bCc</sub>";
|
|
break;
|
|
case "superscript":
|
|
if(!data.name)div.innerHTML="AaB<sup>bCc</sup>";
|
|
break;
|
|
case "name":
|
|
if(v.charAt(0)=='@')
|
|
v=editor.GetLangText(v.substring(1));
|
|
div.innerHTML="<table style='width:192px'><tr><td>'"+v+"'</td><td style='text-align:right;font-size:10px;font-weight:normal;font-style:normal;color:#999999'>style</td></tr></table>";
|
|
break;
|
|
case "bold":
|
|
div.style.fontWeight="bold";
|
|
break;
|
|
case "italic":
|
|
div.style.fontStyle="italic";
|
|
break;
|
|
case "underline":
|
|
div.style.textDecoration=(div.style.textDecoration||"")+" underline";
|
|
break;
|
|
case "linethrough":
|
|
div.style.textDecoration=(div.style.textDecoration||"")+" line-through";
|
|
break;
|
|
case "overline":
|
|
div.style.textDecoration=(div.style.textDecoration||"")+" overline";
|
|
break;
|
|
case "mark":
|
|
div.style.backgroundColor='yellow';
|
|
break;
|
|
case "forecolor":
|
|
div.style.color=v;
|
|
break;
|
|
case "backcolor":
|
|
div.style.backgroundColor=v;
|
|
break;
|
|
case "fontsize":
|
|
div.style.fontSize=v;
|
|
break;
|
|
case "fontname":
|
|
div.style.fontFamily=v;
|
|
break;
|
|
case "cssclass":
|
|
div.className=v;
|
|
div.innerHTML="<table style='width:192px'><tr><td>'"+v+"'</td><td style='text-align:right;font-size:10px;font-weight:normal;font-style:normal;color:#999999'>class</td></tr></table>";
|
|
break;
|
|
case "cssstyle":
|
|
case "stylevalue":
|
|
div.style.cssText+=";"+v;
|
|
break;
|
|
}
|
|
}
|
|
|
|
div.style.textAlign="left";
|
|
div.style.width="190px";
|
|
|
|
item._painterdata=data;
|
|
item._content.appendChild(div);
|
|
itemspanel.append_child(item);
|
|
}
|
|
|
|
]]>
|
|
</method>
|
|
|
|
<attach name="keydown" arguments="je,e">
|
|
if(e.keyCode==27)dialog.close();
|
|
</attach>
|
|
</panel>
|
|
|
|
<panel jsml-base="setstyles_dialog"/>
|
|
|
|
|
|
</jsml>
|