UNPKG

dijit

Version:

Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u

115 lines (96 loc) 3.58 kB
define(["dojo/_base/kernel", "dojo/_base/array", "dojo/dom-geometry", "dojo/json"], function(dojo, array, geom, json){ function dijitById(id){ return dojo.global.require("dijit/registry").byId(id); } var exports = { checkInside: function(/*Widget*/ child, /*Widget*/ parent, /*String?*/ comment){ // summary: // Test that child is fully inside of parent child = dijitById(child); parent = dijitById(parent); var cp = geom.position(child.domNode, true), pp = geom.position(parent.domNode, true); // Adjust for IE10+ fractional values pp.w = Math.ceil(pp.w); doh.t( cp.y >= pp.y && cp.y+cp.h <= pp.y+pp.h && cp.x >= pp.x && cp.x+cp.w <= pp.x+pp.w, (comment ? comment + ": " : "") + child.region + " inside " + parent.id + json.stringify(cp) + json.stringify(pp) ); }, checkAbove: function(/*String*/ comment, /*Widget*/ above, /*Widget*/ below){ // summary: // Test that child is fully above parent above = dijitById(above); below = dijitById(below); var ap = geom.position(above.domNode, true), bp = geom.position(below.domNode, true); doh.t(ap.y+ap.h < bp.y, comment + " " + above.region + " above " + below.region + json.stringify(ap) + json.stringify(bp) ); }, checkLeft: function(/*String*/ comment, /*Widget*/ left, /*Widget*/ right){ // summary: // Test that child is fully left of parent left = dijitById(left); right = dijitById(right); var lp = geom.position(left.domNode, true), rp = geom.position(right.domNode, true); doh.t(lp.x+lp.w < rp.x, comment + " " + left.region + " to left of " + right.region + json.stringify(lp) + json.stringify(rp) ); }, checkBCpanes: function(/*BorderContainer*/ bc, /*String*/ comment){ // summary: // Check that all the panes in this BorderContainer are in sane // positions relative to each other. Assumes at most one pane // in each region. var children = bc.getChildren(), regions = {}; // Check all panes inside BorderContainer array.forEach(children, function(child, comment){ exports.checkInside(child, bc, comment); regions[child.region] = child; }); // Check pane positions relative to each other array.forEach(children, function(child){ switch(child.region){ case "top": array.forEach(bc.design == "sidebar" ? ["center", "bottom"] : ["left", "center", "right", "bottom"], function(region){ if(regions[region]){ exports.checkAbove(bc.id, child, regions[region], comment); } }); break; case "bottom": array.forEach(bc.design == "sidebar" ? ["center", "top"] : ["left", "center", "right", "top"], function(region){ if(regions[region]){ exports.checkAbove(bc.id, regions[region], child, comment); } }); break; case "left": array.forEach(bc.design == "sidebar" ? ["top", "center", "bottom", "right"] : ["right"], function(region){ if(regions[region]){ exports.checkLeft(bc.id, child, regions[region], comment); } }); break; case "right": array.forEach(bc.design == "sidebar" ? ["top", "center", "bottom", "left"] : ["left"], function(region){ if(regions[region]){ exports.checkLeft(bc.id, regions[region], child, comment); } }); break; } }); }, within: function(/*Number*/ a, /*Number*/ b, /*Number*/ range){ // summary: // Returns true if a and b are within range return Math.abs(a-b) <= range; } }; return exports; });