sample skeleton application with dojo toolkit & arcgis js api v 4.30
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

115 lines
3.5 KiB

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;
});