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.
185 lines
5.9 KiB
185 lines
5.9 KiB
2 years ago
|
/*
|
||
|
DynAPI Distribution
|
||
|
HTMLComponent (HC) Class - See also quickref.htmlcomponent.html
|
||
|
|
||
|
The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
|
||
|
|
||
|
Requires: DynElement
|
||
|
|
||
|
*/
|
||
|
|
||
|
function HTMLComponent(css){
|
||
|
this.DynElement = DynElement;
|
||
|
this.DynElement();
|
||
|
this._class = css||'';
|
||
|
this._defEvtResponse = false; // default event response type;
|
||
|
this.HC = HTMLComponent;
|
||
|
this.FSO = null;
|
||
|
};
|
||
|
HTMLComponent.FSO = null;
|
||
|
HTMLComponent.pixel = dynapi.functions.getImage(dynapi.library.path+'gui/images/pixel.gif',1,1);
|
||
|
HTMLComponent._lyrSetLocation = function(x,y){
|
||
|
if(dynapi.ua.ns4) {
|
||
|
this.left=x;
|
||
|
this.top=y;
|
||
|
}
|
||
|
else if(dynapi.ua.ie) {
|
||
|
this.style.pixelLeft=x;
|
||
|
this.style.pixelTop=y;
|
||
|
}
|
||
|
else {
|
||
|
this.style.left=x+'px';
|
||
|
this.style.top=y+'px';
|
||
|
}
|
||
|
};
|
||
|
HTMLComponent._lyrSetVisible = function(b){
|
||
|
if(this._visible!=b) {
|
||
|
if(dynapi.ua.ns4) this.visibility = b? "inherit" : "hide";
|
||
|
else this.style.visibility = b? "inherit" : "hidden";
|
||
|
}
|
||
|
};
|
||
|
HTMLComponent.buildLayer = function(id,attribs,html) {
|
||
|
var t;
|
||
|
if(dynapi.ua.ns4) t='\n<layer name="'+id+'" '+(attribs||'')+'>'+(html||'')+'</layer>';
|
||
|
else t='<div id="'+id+'" '+(attribs||'')+'>'+(html||'')+'</div>'
|
||
|
return t;
|
||
|
};
|
||
|
HTMLComponent.getLayerById = function(id,doc){
|
||
|
var lyr;
|
||
|
doc=doc||document;
|
||
|
if(dynapi.ua.ie) lyr = doc.all[id];
|
||
|
else if(dynapi.ua.dom) lyr = doc.getElementById(id);
|
||
|
else if(dynapi.ua.ns4) {
|
||
|
lyr=doc.layers[id];
|
||
|
if(!lyr){
|
||
|
var i,layers;
|
||
|
layers = doc.layers;
|
||
|
for (i=0;i<layers.length;i++){
|
||
|
lyr=layers[i];
|
||
|
if (lyr.id == id) break;
|
||
|
else if (lyr.layers.length){
|
||
|
lyr = this.getLayerById(id,lyr);
|
||
|
if (lyr) break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(lyr && !lyr.setLocation) lyr.setLocation = this._lyrSetLocation;
|
||
|
if(lyr && !lyr.setVisible) lyr.setVisible = this._lyrSetVisible;
|
||
|
return lyr;
|
||
|
};
|
||
|
HTMLComponent.writeStyle = dynapi.document.writeStyle;
|
||
|
HTMLComponent.setFlashSound = function(fs){
|
||
|
this.FSO = fs; // sets FSO for all HCs
|
||
|
};
|
||
|
var p = dynapi.setPrototype('HTMLComponent','DynElement');
|
||
|
// Design Properties
|
||
|
p.backCol = '#FFFFFF';
|
||
|
p.foreCol = '#000000';
|
||
|
p.sndOnClick = ''; // FSO format: target@frame
|
||
|
p.sndOnMouseover = ''; // example: /click@start
|
||
|
p.sndOnMouseout = ''; // where /click is targeted instance
|
||
|
p.sndOnChange = ''; // and start is the name of the label or frame
|
||
|
p.sndOnKeypress = '';
|
||
|
// Methods
|
||
|
p._assignElm = p._create = p._destroyAllChildren = p.getInnerHTML = dynapi.functions.Null;
|
||
|
p._remove = function(){
|
||
|
var p=this.parent;
|
||
|
if (p && this._alias) p[this._alias]=null;
|
||
|
this.elm=null;
|
||
|
};
|
||
|
p._destroy = function(){
|
||
|
this._remove();
|
||
|
this.parent = this.css = this.doc = null;
|
||
|
DynObject.all[this.id] = null;
|
||
|
};
|
||
|
p._createInserted = function(){
|
||
|
this._assignElm();
|
||
|
DynElement._flagCreate(this);
|
||
|
};
|
||
|
p._inlineEvents = ' onclick="return htc._e(\'click\',this,event);" '
|
||
|
+' onmouseover="return htc._e(\'mouseover\',this,event);" '
|
||
|
+' onmousedown="return htc._e(\'mousedown\',this,event);" '
|
||
|
+' onmouseout="return htc._e(\'mouseout\',this,event);" '
|
||
|
+' onfocus="return htc._e(\'focus\',this,event);" '
|
||
|
+' onblur="return htc._e(\'blur\',this,event);" ';
|
||
|
p._generateInlineEvents = function(htc){
|
||
|
return this._inlineEvents.replace(/htc/g,htc.toString());
|
||
|
};
|
||
|
// event handler
|
||
|
p._e = function(evt,elm,args){
|
||
|
this._evtResponse = this._defEvtResponse;
|
||
|
if(elm && !this.elm) this._assignElm(elm);
|
||
|
this._ePlaySnd(evt); // plays a sound
|
||
|
this.invokeEvent(evt,null,args);
|
||
|
return this._evtResponse;
|
||
|
};
|
||
|
// sound event handler
|
||
|
p._ePlaySnd = function(evt){
|
||
|
var snd = (evt+'');
|
||
|
snd='sndOn'+(snd.substr(0,1).toUpperCase()+snd.substr(1));
|
||
|
if(this[snd]) this.playSound(this[snd]);
|
||
|
};
|
||
|
p.allowEvent = function(){ this._evtResponse = true;};
|
||
|
p.cancelEvent = function(){ this._evtResponse = false;};
|
||
|
p.getOuterHTML = function() {
|
||
|
return this.getInnerHTML();
|
||
|
};
|
||
|
p.getElm = function(){
|
||
|
if(!this.e) this._assignElm();
|
||
|
return this.elm;
|
||
|
};
|
||
|
p.getCss = function(){
|
||
|
if(!this.css) this._assignElm();
|
||
|
return this.css;
|
||
|
};
|
||
|
p.playSound = function(t){
|
||
|
if(!t) return;
|
||
|
var fs = this.FSO||this.HC.FSO;
|
||
|
t = t.split('@'); // separate target and frame
|
||
|
if(fs) fs.gotoAndPlay(t[0],t[1]);
|
||
|
};
|
||
|
p.setFlashSound = HTMLComponent.setFlashSound; // sets FSO only for this HC
|
||
|
|
||
|
|
||
|
// HTML Cell - usage: var t = HTMLCell()
|
||
|
HTMLCell = function(css,id,text,w,h,evt,backCol,padding,absolute,cssText){
|
||
|
var tag,str='';
|
||
|
id =(id||'');
|
||
|
cssText = (cssText||'');
|
||
|
text = (text||'');
|
||
|
// In IE4 width must be a miniumum of 3 pixels.
|
||
|
if (dynapi.ua.def) {
|
||
|
str += '<div id="' + id + '" style="left:0px; top:0px; position: '+(absolute? 'absolute':'relative')+'; width: ' + w + '; height: ' + h + '; visibility: inherit; ';
|
||
|
if (backCol) str += 'background: ' + backCol + '; ';
|
||
|
str += '" ';
|
||
|
}else if (dynapi.ua.ns4) {
|
||
|
tag = (absolute)? 'layer':'ilayer';
|
||
|
str += '<'+tag+(absolute? ' left="0" top="0" ':' clip="0 0 0,0" onload="this.clip.width=this.document.width;this.clip.height=this.document.height-19;"')+' id="' + id + '" width="' + w + '" height="' + h + '" visibility="inherit" ';
|
||
|
if (backCol) str += 'bgcolor="' + backCol + '" ';
|
||
|
}
|
||
|
if (css) str += 'class="' + css + '" ';
|
||
|
if(evt) str += evt; // Add mouse event handlers.
|
||
|
str+='>';
|
||
|
|
||
|
// In IE/NS6+, add padding if there's a border to emulate NS4's layer padding.
|
||
|
str += '<table width="' + (w - 8) + '" border="0" cellspacing="0" cellpadding="' + ((!dynapi.ua.ns4 && css)? padding : 0) + '"><tr>'
|
||
|
+'<td class="' + cssText + '" align="left" height="' + (h - 7) + '">' + text +'</td>'
|
||
|
+'</tr></table>' + (dynapi.ua.ns4 ? '</'+tag+'>' : '</div>');
|
||
|
return str;
|
||
|
};
|
||
|
|
||
|
// HTML Text - usage: var t = HTMLText()
|
||
|
HTMLText = function(css,text,color,family,size,bold,italics,underline){
|
||
|
var t = (text||'');
|
||
|
if(css) return '<span class="'+css+'">'+t+'</span>';
|
||
|
else {
|
||
|
var fs =(size==null)? '':' size="'+size+'" ';
|
||
|
var ff =(family==null)? '':' name="'+family+'" ';
|
||
|
var fc =(color==null)? '':' color="'+color+'" ';
|
||
|
if(bold) t='<b>'+t+'</b>';
|
||
|
if(italics) t='<i>'+t+'</i>';
|
||
|
if(underline) t='<u>'+t+'</u>';
|
||
|
return '<font'+ff+fs+fc+'>'+t+'</font>';
|
||
|
}
|
||
|
};
|