]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dijit/_editor/plugins/AlwaysShowToolbar.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dijit / _editor / plugins / AlwaysShowToolbar.js
diff --git a/static/dojo-release-1.1.1/dijit/_editor/plugins/AlwaysShowToolbar.js b/static/dojo-release-1.1.1/dijit/_editor/plugins/AlwaysShowToolbar.js
new file mode 100644 (file)
index 0000000..9879e88
--- /dev/null
@@ -0,0 +1,140 @@
+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", dijit._editor._Plugin,
+       {
+       _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.connect(window, 'onscroll', "globalOnScrollHandler");
+               this.connect(this.editor, 'onNormalizedDisplayChanged', "_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;
+               var s = tdn.style;
+
+               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){
+                                       s.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,'dijitIEFixedToolbar');
+                               }else{
+                                       s.position = "fixed";
+                                       s.top = "0px";
+                               }
+
+                               dojo.marginBox(tdn, { w: tdnbox.w });
+                               s.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;
+                       s.display = (scrollPos > this._scrollThreshold+eHeight) ? "none" : "";
+               }else if(this._fixEnabled){
+                       this.editor.iframe.style.marginTop = '';
+                       s.position = "";
+                       s.top = "";
+                       s.zIndex = "";
+                       s.display = "";
+                       if(isIE){
+                               s.left = "";
+                               dojo.removeClass(tdn,'dijitIEFixedToolbar');
+                               if(this._IEOriginalPos){
+                                       dojo.place(tdn, this._IEOriginalPos[1], this._IEOriginalPos[0]);
+                                       this._IEOriginalPos = null;
+                               }else{
+                                       dojo.place(tdn, this.editor.iframe, 'before');
+                               }
+                       }
+                       s.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, 'dijitIEFixedToolbar');
+               }
+       }
+});
+
+}