Subversion Repositories Applications.papyrus

Compare Revisions

Ignore whitespace Rev 2149 → Rev 2150

/trunk/api/js/dojo1.0/dijit/_editor/plugins/AlwaysShowToolbar.js
New file
0,0 → 1,147
if(!dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"] = true;
dojo.provide("dijit._editor.plugins.AlwaysShowToolbar");
 
dojo.declare("dijit._editor.plugins.AlwaysShowToolbar", null,
{
_handleScroll: true,
setEditor: function(e){
this.editor=e;
// setTimeout(dojo.hitch(this,this.enable),10000);
e.onLoadDeferred.addCallback(dojo.hitch(this,this.enable));
// this.scrollInterval = setInterval(dojo.hitch(this, "globalOnScrollHandler"), 100);
},
enable: function(d){
this._updateHeight();
this._connects=[dojo.connect(window,'onscroll',this,"globalOnScrollHandler"),
dojo.connect(this.editor,'onNormalizedDisplayChanged',this,"_updateHeight")];
return d;
},
_updateHeight: function(){
// summary:
// Updates the height of the editor area to fit the contents.
var e=this.editor;
if(!e.isLoaded){ return; }
if(e.height){ return; }
 
var height = dojo.marginBox(e.editNode).h;
if(dojo.isOpera){
height = e.editNode.scrollHeight;
}
// console.debug('height',height);
// alert(this.editNode);
 
//height maybe zero in some cases even though the content is not empty,
//we try the height of body instead
if(!height){
height = dojo.marginBox(e.document.body).h;
}
 
if(height == 0){
console.debug("Can not figure out the height of the editing area!");
return; //prevent setting height to 0
}
if(height != this._lastHeight){
this._lastHeight = height;
// this.editorObject.style.height = this._lastHeight + "px";
dojo.marginBox(e.iframe, { h: this._lastHeight });
// this.iframe.height=this._lastHeight+10+'px';
// this.iframe.style.height=this._lastHeight+'px';
}
},
_lastHeight: 0,
globalOnScrollHandler: function(){
var isIE = dojo.isIE && dojo.isIE<7;
if(!this._handleScroll){ return; }
var tdn = this.editor.toolbar.domNode;
var db = dojo.body;
 
if(!this._scrollSetUp){
this._scrollSetUp = true;
this._scrollThreshold = dojo._abs(tdn, true).y;
// console.log("threshold:", this._scrollThreshold);
//what's this for?? comment out for now
// if((isIE)&&(db)&&(dojo.style(db, "backgroundIimage")=="none")){
// db.style.backgroundImage = "url(" + dojo.uri.moduleUri("dijit", "templates/blank.gif") + ")";
// db.style.backgroundAttachment = "fixed";
// }
}
 
var scrollPos = dojo._docScroll().y;
 
if(scrollPos > this._scrollThreshold && scrollPos < this._scrollThreshold+this._lastHeight){
// dojo.debug(scrollPos);
if(!this._fixEnabled){
var tdnbox = dojo.marginBox(tdn);
this.editor.iframe.style.marginTop = tdnbox.h+"px";
 
if(isIE){
tdn.style.left = dojo._abs(tdn).x;
if(tdn.previousSibling){
this._IEOriginalPos = ['after',tdn.previousSibling];
}else if(tdn.nextSibling){
this._IEOriginalPos = ['before',tdn.nextSibling];
}else{
this._IEOriginalPos = ['last',tdn.parentNode];
}
dojo.body().appendChild(tdn);
dojo.addClass(tdn,'IEFixedToolbar');
}else{
with(tdn.style){
position = "fixed";
top = "0px";
}
}
 
dojo.marginBox(tdn, { w: tdnbox.w });
tdn.style.zIndex = 2000;
this._fixEnabled = true;
}
// if we're showing the floating toolbar, make sure that if
// we've scrolled past the bottom of the editor that we hide
// the toolbar for this instance of the editor.
 
// TODO: when we get multiple editor toolbar support working
// correctly, ensure that we check this against the scroll
// position of the bottom-most editor instance.
var eHeight = (this.height) ? parseInt(this.editor.height) : this.editor._lastHeight;
if(scrollPos > (this._scrollThreshold+eHeight)){
tdn.style.display = "none";
}else{
tdn.style.display = "";
}
}else if(this._fixEnabled){
this.editor.iframe.style.marginTop = '';
with(tdn.style){
position = "";
top = "";
zIndex = "";
display = "";
}
if(isIE){
tdn.style.left = "";
dojo.removeClass(tdn,'IEFixedToolbar');
if(this._IEOriginalPos){
dojo.place(tdn, this._IEOriginalPos[1], this._IEOriginalPos[0]);
this._IEOriginalPos = null;
}else{
dojo.place(tdn, this.editor.iframe,'before');
}
}
tdn.style.width = "";
this._fixEnabled = false;
}
},
destroy: function(){
this._IEOriginalPos = null;
this._handleScroll = false;
dojo.forEach(this._connects,dojo.disconnect);
// clearInterval(this.scrollInterval);
 
if(dojo.isIE && dojo.isIE<7){
dojo.removeClass(this.editor.toolbar.domNode,'IEFixedToolbar');
}
}
});
 
}