blob: 1bb707de3122bdfdbc14c66569ed1ff9c394db2e [file] [log] [blame]
/*
Copyright (c) 2004-2006, The Dojo Foundation
All Rights Reserved.
Licensed under the Academic Free License version 2.1 or above OR the
modified BSD license. For more information on Dojo licensing, see:
http://dojotoolkit.org/community/licensing.shtml
*/
dojo.provide("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad", function (editor) {
if (editor.toolbarAlwaysVisible) {
var p = new dojo.widget.Editor2Plugin.AlwaysShowToolbar(editor);
}
});
dojo.declare("dojo.widget.Editor2Plugin.AlwaysShowToolbar", null, function (editor) {
this.editor = editor;
this.editor.registerLoadedPlugin(this);
this.setup();
}, {_scrollSetUp:false, _fixEnabled:false, _scrollThreshold:false, _handleScroll:true, setup:function () {
var tdn = this.editor.toolbarWidget;
if (!tdn.tbBgIframe) {
tdn.tbBgIframe = new dojo.html.BackgroundIframe(tdn.domNode);
tdn.tbBgIframe.onResized();
}
this.scrollInterval = setInterval(dojo.lang.hitch(this, "globalOnScrollHandler"), 100);
dojo.event.connect("before", this.editor.toolbarWidget, "destroy", this, "destroy");
}, globalOnScrollHandler:function () {
var isIE = dojo.render.html.ie;
if (!this._handleScroll) {
return;
}
var dh = dojo.html;
var tdn = this.editor.toolbarWidget.domNode;
var db = dojo.body();
if (!this._scrollSetUp) {
this._scrollSetUp = true;
var editorWidth = dh.getMarginBox(this.editor.domNode).width;
this._scrollThreshold = dh.abs(tdn, true).y;
if ((isIE) && (db) && (dh.getStyle(db, "background-image") == "none")) {
with (db.style) {
backgroundImage = "url(" + dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif") + ")";
backgroundAttachment = "fixed";
}
}
}
var scrollPos = (window["pageYOffset"]) ? window["pageYOffset"] : (document["documentElement"] || document["body"]).scrollTop;
if (scrollPos > this._scrollThreshold) {
if (!this._fixEnabled) {
var tdnbox = dojo.html.getMarginBox(tdn);
this.editor.editorObject.style.marginTop = tdnbox.height + "px";
if (isIE) {
tdn.style.left = dojo.html.abs(tdn, dojo.html.boxSizing.MARGIN_BOX).x;
if (tdn.previousSibling) {
this._IEOriginalPos = ["after", tdn.previousSibling];
} else {
if (tdn.nextSibling) {
this._IEOriginalPos = ["before", tdn.nextSibling];
} else {
this._IEOriginalPos = ["", tdn.parentNode];
}
}
dojo.body().appendChild(tdn);
dojo.html.addClass(tdn, "IEFixedToolbar");
} else {
with (tdn.style) {
position = "fixed";
top = "0px";
}
}
tdn.style.width = tdnbox.width + "px";
tdn.style.zIndex = 1000;
this._fixEnabled = true;
}
if (!dojo.render.html.safari) {
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.object || this.editor.iframe).style.marginTop = null;
with (tdn.style) {
position = "";
top = "";
zIndex = "";
display = "";
}
if (isIE) {
tdn.style.left = "";
dojo.html.removeClass(tdn, "IEFixedToolbar");
if (this._IEOriginalPos) {
dojo.html.insertAtPosition(tdn, this._IEOriginalPos[1], this._IEOriginalPos[0]);
this._IEOriginalPos = null;
} else {
dojo.html.insertBefore(tdn, this.editor.object || this.editor.iframe);
}
}
tdn.style.width = "";
this._fixEnabled = false;
}
}
}, destroy:function () {
this._IEOriginalPos = null;
this._handleScroll = false;
clearInterval(this.scrollInterval);
this.editor.unregisterLoadedPlugin(this);
if (dojo.render.html.ie) {
dojo.html.removeClass(this.editor.toolbarWidget.domNode, "IEFixedToolbar");
}
}});