132 lines
4.4 KiB
JavaScript
132 lines
4.4 KiB
JavaScript
|
define("dijit/_base/place", [
|
||
|
"dojo/_base/array", // array.forEach
|
||
|
"dojo/_base/lang", // lang.isArray, lang.mixin
|
||
|
"dojo/window", // windowUtils.getBox
|
||
|
"../place",
|
||
|
"../main" // export to dijit namespace
|
||
|
], function(array, lang, windowUtils, place, dijit){
|
||
|
|
||
|
// module:
|
||
|
// dijit/_base/place
|
||
|
|
||
|
|
||
|
var exports = {
|
||
|
// summary:
|
||
|
// Deprecated back compatibility module, new code should use dijit/place directly instead of using this module.
|
||
|
};
|
||
|
|
||
|
exports.getViewport = function(){
|
||
|
// summary:
|
||
|
// Deprecated method to return the dimensions and scroll position of the viewable area of a browser window.
|
||
|
// New code should use windowUtils.getBox()
|
||
|
|
||
|
return windowUtils.getBox();
|
||
|
};
|
||
|
|
||
|
exports.placeOnScreen = place.at;
|
||
|
|
||
|
exports.placeOnScreenAroundElement = function(node, aroundNode, aroundCorners, layoutNode){
|
||
|
// summary:
|
||
|
// Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object
|
||
|
// for the "around" argument and finds a proper processor to place a node.
|
||
|
// Deprecated, new code should use dijit/place.around() instead.
|
||
|
|
||
|
// Convert old style {"BL": "TL", "BR": "TR"} type argument
|
||
|
// to style needed by dijit.place code:
|
||
|
// [
|
||
|
// {aroundCorner: "BL", corner: "TL" },
|
||
|
// {aroundCorner: "BR", corner: "TR" }
|
||
|
// ]
|
||
|
var positions;
|
||
|
if(lang.isArray(aroundCorners)){
|
||
|
positions = aroundCorners;
|
||
|
}else{
|
||
|
positions = [];
|
||
|
for(var key in aroundCorners){
|
||
|
positions.push({aroundCorner: key, corner: aroundCorners[key]});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return place.around(node, aroundNode, positions, true, layoutNode);
|
||
|
};
|
||
|
|
||
|
exports.placeOnScreenAroundNode = exports.placeOnScreenAroundElement;
|
||
|
/*=====
|
||
|
exports.placeOnScreenAroundNode = function(node, aroundNode, aroundCorners, layoutNode){
|
||
|
// summary:
|
||
|
// Position node adjacent or kitty-corner to aroundNode
|
||
|
// such that it's fully visible in viewport.
|
||
|
// Deprecated, new code should use dijit/place.around() instead.
|
||
|
};
|
||
|
=====*/
|
||
|
|
||
|
exports.placeOnScreenAroundRectangle = exports.placeOnScreenAroundElement;
|
||
|
/*=====
|
||
|
exports.placeOnScreenAroundRectangle = function(node, aroundRect, aroundCorners, layoutNode){
|
||
|
// summary:
|
||
|
// Like dijit.placeOnScreenAroundNode(), except that the "around"
|
||
|
// parameter is an arbitrary rectangle on the screen (x, y, width, height)
|
||
|
// instead of a dom node.
|
||
|
// Deprecated, new code should use dijit/place.around() instead.
|
||
|
};
|
||
|
=====*/
|
||
|
|
||
|
exports.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
|
||
|
// summary:
|
||
|
// Deprecated method, unneeded when using dijit/place directly.
|
||
|
// Transforms the passed array of preferred positions into a format suitable for
|
||
|
// passing as the aroundCorners argument to dijit/place.placeOnScreenAroundElement.
|
||
|
// position: String[]
|
||
|
// This variable controls the position of the drop down.
|
||
|
// It's an array of strings with the following values:
|
||
|
//
|
||
|
// - before: places drop down to the left of the target node/widget, or to the right in
|
||
|
// the case of RTL scripts like Hebrew and Arabic
|
||
|
// - after: places drop down to the right of the target node/widget, or to the left in
|
||
|
// the case of RTL scripts like Hebrew and Arabic
|
||
|
// - above: drop down goes above target node
|
||
|
// - below: drop down goes below target node
|
||
|
//
|
||
|
// The list is positions is tried, in order, until a position is found where the drop down fits
|
||
|
// within the viewport.
|
||
|
// leftToRight: Boolean
|
||
|
// Whether the popup will be displaying in leftToRight mode.
|
||
|
|
||
|
var align = {};
|
||
|
array.forEach(position, function(pos){
|
||
|
var ltr = leftToRight;
|
||
|
switch(pos){
|
||
|
case "after":
|
||
|
align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
|
||
|
break;
|
||
|
case "before":
|
||
|
align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
|
||
|
break;
|
||
|
case "below-alt":
|
||
|
ltr = !ltr;
|
||
|
// fall through
|
||
|
case "below":
|
||
|
// first try to align left borders, next try to align right borders (or reverse for RTL mode)
|
||
|
align[ltr ? "BL" : "BR"] = ltr ? "TL" : "TR";
|
||
|
align[ltr ? "BR" : "BL"] = ltr ? "TR" : "TL";
|
||
|
break;
|
||
|
case "above-alt":
|
||
|
ltr = !ltr;
|
||
|
// fall through
|
||
|
case "above":
|
||
|
default:
|
||
|
// first try to align left borders, next try to align right borders (or reverse for RTL mode)
|
||
|
align[ltr ? "TL" : "TR"] = ltr ? "BL" : "BR";
|
||
|
align[ltr ? "TR" : "TL"] = ltr ? "BR" : "BL";
|
||
|
break;
|
||
|
}
|
||
|
});
|
||
|
return align;
|
||
|
};
|
||
|
|
||
|
lang.mixin(dijit, exports);
|
||
|
|
||
|
/*===== return exports; =====*/
|
||
|
return dijit; // for back compat :-(
|
||
|
});
|