Subversion Repositories Applications.papyrus

Rev

Rev 1372 | Blame | Last modification | View Log | RSS feed

/*
        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");
        }
}});