I have a dojox.layout.FloatingPane (as a custom dijit) which can be positioned anywhere within its enclosing div. My problem is that the user can potentially drag the FloatingPane completely outside of its container and be unable to retrieve it. Is there any easy way to force the FloatingPane to remain entirely visible at all times?
Here’s my code:
dojo.provide("ne.trim.dijits.SearchDialog");
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dojox.layout.FloatingPane");
dojo.declare("ne.trim.dijits.SearchDialog", [dijit._Widget, dijit._Templated], {
templateString: dojo.cache("ne.trim.dijits", "templates/SearchDialog.html"),
initialised:false,
floatingPane: null,
postCreate: function() {
this.init();
},
init: function() {
console.debug("SearchDialog.init()", "start");
if ( this.initialised === false ) {
this.createSearchDialog();
}
//ne.trim.AppGlobals.searchDialog = this;
console.debug("SearchDialog.init()", "end");
},
createSearchDialog: function() {
var node = dojo.byId('searchbox');
floatingPane = new dojox.layout.FloatingPane({
title: "A floating pane",
resizable: true, dockable: true, constrainToContainer: true,
style: "position:absolute;top:100;right:100;width:400px;height:300px;z-index:100",
}, node );
this.initialised=true;
floatingPane.startup();
}
});
First of all, see the working example at jsFiddle: http://jsfiddle.net/phusick/3vTXW/
And now some explanation;) The DnD functionality of
FloatingPaneis achieved viadojo.dnd.Moveableclass instantialized in pane’spostCreatemethod. To constrain the movement of theFloatingPaneyou should use one of these moveables instead:dojo.dnd.parentConstainedMoveable– to constrain by a DOM nodedojo.dnd.boxConstrainedMoveable– to constrain by co-ordinates: {l: 10, t: 10, w: 100, h: 100}dojo.dnd.constrainedMoveable– to constrain by co-ordinates calculated in a provided functionFor more details see aforementioned jsFiddle.
According to documentation you should call
destroy()onMoveableinstance to remove it, but asFloatingPane‘s originalMoveableis not assigned to any object property, I do not destroy it, I just instantiate one of those threemoveableson the same DOM node in a subclass:Now you can use
ConstainedFloatingPaneinstead ofdojox.layout.FloatingPane: