1 | define([ |
---|
2 | "dojo/_base/array", // array.forEach |
---|
3 | "dojo/_base/lang", // lang.isArray, lang.mixin |
---|
4 | "dojo/window", // windowUtils.getBox |
---|
5 | "../place", |
---|
6 | "../main" // export to dijit namespace |
---|
7 | ], function(array, lang, windowUtils, place, dijit){ |
---|
8 | |
---|
9 | // module: |
---|
10 | // dijit/_base/place |
---|
11 | |
---|
12 | |
---|
13 | var exports = { |
---|
14 | // summary: |
---|
15 | // Deprecated back compatibility module, new code should use dijit/place directly instead of using this module. |
---|
16 | }; |
---|
17 | |
---|
18 | exports.getViewport = function(){ |
---|
19 | // summary: |
---|
20 | // Deprecated method to return the dimensions and scroll position of the viewable area of a browser window. |
---|
21 | // New code should use windowUtils.getBox() |
---|
22 | |
---|
23 | return windowUtils.getBox(); |
---|
24 | }; |
---|
25 | |
---|
26 | exports.placeOnScreen = place.at; |
---|
27 | |
---|
28 | exports.placeOnScreenAroundElement = function(node, aroundNode, aroundCorners, layoutNode){ |
---|
29 | // summary: |
---|
30 | // Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object |
---|
31 | // for the "around" argument and finds a proper processor to place a node. |
---|
32 | // Deprecated, new code should use dijit/place.around() instead. |
---|
33 | |
---|
34 | // Convert old style {"BL": "TL", "BR": "TR"} type argument |
---|
35 | // to style needed by dijit.place code: |
---|
36 | // [ |
---|
37 | // {aroundCorner: "BL", corner: "TL" }, |
---|
38 | // {aroundCorner: "BR", corner: "TR" } |
---|
39 | // ] |
---|
40 | var positions; |
---|
41 | if(lang.isArray(aroundCorners)){ |
---|
42 | positions = aroundCorners; |
---|
43 | }else{ |
---|
44 | positions = []; |
---|
45 | for(var key in aroundCorners){ |
---|
46 | positions.push({aroundCorner: key, corner: aroundCorners[key]}); |
---|
47 | } |
---|
48 | } |
---|
49 | |
---|
50 | return place.around(node, aroundNode, positions, true, layoutNode); |
---|
51 | }; |
---|
52 | |
---|
53 | exports.placeOnScreenAroundNode = exports.placeOnScreenAroundElement; |
---|
54 | /*===== |
---|
55 | exports.placeOnScreenAroundNode = function(node, aroundNode, aroundCorners, layoutNode){ |
---|
56 | // summary: |
---|
57 | // Position node adjacent or kitty-corner to aroundNode |
---|
58 | // such that it's fully visible in viewport. |
---|
59 | // Deprecated, new code should use dijit/place.around() instead. |
---|
60 | }; |
---|
61 | =====*/ |
---|
62 | |
---|
63 | exports.placeOnScreenAroundRectangle = exports.placeOnScreenAroundElement; |
---|
64 | /*===== |
---|
65 | exports.placeOnScreenAroundRectangle = function(node, aroundRect, aroundCorners, layoutNode){ |
---|
66 | // summary: |
---|
67 | // Like dijit.placeOnScreenAroundNode(), except that the "around" |
---|
68 | // parameter is an arbitrary rectangle on the screen (x, y, width, height) |
---|
69 | // instead of a dom node. |
---|
70 | // Deprecated, new code should use dijit/place.around() instead. |
---|
71 | }; |
---|
72 | =====*/ |
---|
73 | |
---|
74 | exports.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){ |
---|
75 | // summary: |
---|
76 | // Deprecated method, unneeded when using dijit/place directly. |
---|
77 | // Transforms the passed array of preferred positions into a format suitable for |
---|
78 | // passing as the aroundCorners argument to dijit/place.placeOnScreenAroundElement. |
---|
79 | // position: String[] |
---|
80 | // This variable controls the position of the drop down. |
---|
81 | // It's an array of strings with the following values: |
---|
82 | // |
---|
83 | // - before: places drop down to the left of the target node/widget, or to the right in |
---|
84 | // the case of RTL scripts like Hebrew and Arabic |
---|
85 | // - after: places drop down to the right of the target node/widget, or to the left in |
---|
86 | // the case of RTL scripts like Hebrew and Arabic |
---|
87 | // - above: drop down goes above target node |
---|
88 | // - below: drop down goes below target node |
---|
89 | // |
---|
90 | // The list is positions is tried, in order, until a position is found where the drop down fits |
---|
91 | // within the viewport. |
---|
92 | // leftToRight: Boolean |
---|
93 | // Whether the popup will be displaying in leftToRight mode. |
---|
94 | |
---|
95 | var align = {}; |
---|
96 | array.forEach(position, function(pos){ |
---|
97 | var ltr = leftToRight; |
---|
98 | switch(pos){ |
---|
99 | case "after": |
---|
100 | align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR"; |
---|
101 | break; |
---|
102 | case "before": |
---|
103 | align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL"; |
---|
104 | break; |
---|
105 | case "below-alt": |
---|
106 | ltr = !ltr; |
---|
107 | // fall through |
---|
108 | case "below": |
---|
109 | // first try to align left borders, next try to align right borders (or reverse for RTL mode) |
---|
110 | align[ltr ? "BL" : "BR"] = ltr ? "TL" : "TR"; |
---|
111 | align[ltr ? "BR" : "BL"] = ltr ? "TR" : "TL"; |
---|
112 | break; |
---|
113 | case "above-alt": |
---|
114 | ltr = !ltr; |
---|
115 | // fall through |
---|
116 | case "above": |
---|
117 | default: |
---|
118 | // first try to align left borders, next try to align right borders (or reverse for RTL mode) |
---|
119 | align[ltr ? "TL" : "TR"] = ltr ? "BL" : "BR"; |
---|
120 | align[ltr ? "TR" : "TL"] = ltr ? "BR" : "BL"; |
---|
121 | break; |
---|
122 | } |
---|
123 | }); |
---|
124 | return align; |
---|
125 | }; |
---|
126 | |
---|
127 | lang.mixin(dijit, exports); |
---|
128 | |
---|
129 | /*===== return exports; =====*/ |
---|
130 | return dijit; // for back compat :-( |
---|
131 | }); |
---|