SuperX-Kernmodul
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.
 
 
 
 
 
 

129 lines
4.9 KiB

/*
DynAPI Distribution
BorderManager Class
The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
requires: Highlighter
*/
/* Outer Border uses Frame class with image support.
by:
Kevin Gargan (kevin[at]kegcl.demon.co.uk)
useage:
f=new Frame([widths],[sidecolors||sideimages],[cornerimages])
and
f.setBorder([widths],[sidecolors||sideimages],[cornerimages])
where
Parameter widths, sidecolors, sideimages and cornerimages may be scalar
or array defining top, right, bottom and left (defaulting like css). In
addition the corner images are defined as from top right, bottom right,
bottom left and top left.
e.g.
1,'white'
10,'tile.gif'
[1,2,3,4],['red','green','blue','yellow']
10,['t.gif','r.gif']
10,['t.gif','r.gif','b.gif','l.gif'],['tr.gif','br.gif','bl.gif','tl.gif']
*/
function Frame(widths,sideimgs,cornerimgs) {
this.DynLayer = DynLayer;
this.DynLayer();
this.setDefaults(widths,sideimgs,cornerimgs);
this.addChild(new Skin('n',this.sides[0]),'_fN');
this.addChild(new Skin('e',this.sides[1]),'_fE');
this.addChild(new Skin('s',this.sides[2]),'_fS');
this.addChild(new Skin('w',this.sides[3]),'_fW');
if(cornerimgs) {
this.addChild(new Skin('ne',this.corners[0]),'_fNE');
this.addChild(new Skin('se',this.corners[1]),'_fSE');
this.addChild(new Skin('sw',this.corners[2]),'_fSW');
this.addChild(new Skin('nw',this.corners[3]),'_fNW');
}
}
Frame._defaults=function(arry,def) {
var i=(arry==null)?[def]:(typeof(arry)!='object')?[arry]:arry, out=[];
out[0]=i[0];
out[1]=(i[1]!=null)?i[1]:out[0];
out[2]=(i[2]!=null)?i[2]:out[0];
out[3]=(i[3]!=null)?i[3]:out[1];
return out;
};
Frame._defaultCorners=function(haveCorners,ws,cimgs) {
var corners=[];
corners[0]=[haveCorners?ws[1]:0,haveCorners?ws[0]:0,null,null,null,cimgs[0]];
corners[1]=[haveCorners?ws[1]:0,haveCorners?ws[2]:0,null,null,null,cimgs[1]];
corners[2]=[haveCorners?ws[3]:0,haveCorners?ws[2]:0,null,null,null,cimgs[2]];
corners[3]=[haveCorners?ws[3]:0,haveCorners?ws[0]:0,null,null,null,cimgs[3]];
return corners;
};
Frame._defaultSides=function(ws,cs,simgs) {
var sides=[];
var isCol=(simgs[0].indexOf('.')<0); // Color or image.gif file.
sides[0]=[null,ws[0],ws[1],cs[3][0],isCol?simgs[0]:null,isCol?null:simgs[0]];
sides[1]=[ws[1],null,cs[0][1],ws[2],isCol?simgs[1]:null,isCol?null:simgs[1]];
sides[2]=[null,ws[2],cs[1][0],ws[3],isCol?simgs[2]:null,isCol?null:simgs[2]];
sides[3]=[ws[3],null,ws[0],cs[2][1],isCol?simgs[3]:null,isCol?null:simgs[3]];
return sides;
};
var p = dynapi.setPrototype('Frame','DynLayer');
p.setDefaults=function(widths,sideimgs,cornerimgs) {
this.widths=Frame._defaults(widths,0);
this.sideimgs=Frame._defaults(sideimgs,'black');
this.cornerimgs=Frame._defaults(cornerimgs,null);
this.corners=Frame._defaultCorners(cornerimgs,this.widths,this.cornerimgs);
this.sides=Frame._defaultSides(this.widths,this.corners,this.sideimgs);
};
p.setBorder=function(widths,sideimgs,cornerimgs) {
var wso=this.widths; // Widths old.
var eo=wso[1], wo=wso[3], no=wso[0], so=wso[2];
this.setDefaults(widths,sideimgs,cornerimgs);
this._fN.graft(this.sides[0]);
this._fE.graft(this.sides[1]);
this._fS.graft(this.sides[2]);
this._fW.graft(this.sides[3]);
if(cornerimgs) {
if(this._fNE==null) this.addChild(new Skin('ne',this.corners[0]),'_fNE');
else this._fNE.graft(this.corners[0]);
if(this._fSE==null) this.addChild(new Skin('se',this.corners[1]),'_fSE');
else this._fSE.graft(this.corners[1]);
if(this._fSW==null) this.addChild(new Skin('sw',this.corners[2]),'_fSW');
else this._fSW.graft(this.corners[2]);
if(this._fNW==null) this.addChild(new Skin('nw',this.corners[3]),'_fNW');
else this._fNW.graft(this.corners[3]);
}
else {
if(this._fNE) this._fNE.graft(this.corners[0]);
if(this._fSE) this._fSE.graft(this.corners[1]);
if(this._fSW) this._fSW.graft(this.corners[2]);
if(this._fNW) this._fNW.graft(this.corners[3]);
}
var ws=this.widths; // Widths new.
var de=ws[1]-eo, dw=ws[3]-wo, dn=ws[0]-no, ds=ws[2]-so; // Deltas.
this.setSize(this.w+de+dw,this.h+dn+ds);
var left=Math.ceil((ws[3]-ws[1])/2), top=Math.ceil((ws[0]-ws[2])/2);
this._fC.setAnchor({centerH:left,centerV:top});
};
p.addContent=function(c) {
if(c._fP) return;
else c._fP=this;
this.setLocation(c.x,c.y);
var ws=this.widths;
this.setSize(c.w+ws[1]+ws[3],c.h+ws[0]+ws[2]);
var left=Math.ceil((ws[3]-ws[1])/2), top=Math.ceil((ws[0]-ws[2])/2);
c.setAnchor({centerH:left,centerV:top});
return this.addChild(c,'_fC');
};
// Square Picture Frame
function SquarePictureFrame(widths,sideimgs,cornerimgs,image,w,h,color) {
this.Frame=Frame;
this.Frame(widths,sideimgs,cornerimgs);
if(color) this.setBgColor(color);
this.addContent(new DynLayer(image.getHTML(),null,null,w,h));
var longest=(w>h)?w:h, ws=this.widths;
this.setSize(longest+ws[1]+ws[3],longest+ws[0]+ws[2]);
};
p = dynapi.setPrototype('SquarePictureFrame','Frame');