summaryrefslogtreecommitdiffstats
path: root/src/rbox.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/rbox.js')
-rw-r--r--src/rbox.js60
1 files changed, 35 insertions, 25 deletions
diff --git a/src/rbox.js b/src/rbox.js
index 02405b0..5eb474f 100644
--- a/src/rbox.js
+++ b/src/rbox.js
@@ -1,32 +1,42 @@
// Get the rectangular box of a given element
SVG.RBox = function(element) {
- var box, zoom
- , e = element.doc().parent
- , zoom = element.doc().viewbox().zoom
-
- /* actual, native bounding box */
- box = element.node.getBoundingClientRect()
-
- /* get screen offset */
- this.x = box.left
- this.y = box.top
-
- /* subtract parent offset */
- this.x -= e.offsetLeft
- this.y -= e.offsetTop
-
- while (e = e.offsetParent) {
+ var e, zoom
+ , box = {}
+
+ /* initialize zero box */
+ this.x = 0
+ this.y = 0
+ this.width = 0
+ this.height = 0
+
+ if (element) {
+ e = element.doc().parent
+ zoom = element.doc().viewbox().zoom
+
+ /* actual, native bounding box */
+ box = element.node.getBoundingClientRect()
+
+ /* get screen offset */
+ this.x = box.left
+ this.y = box.top
+
+ /* subtract parent offset */
this.x -= e.offsetLeft
this.y -= e.offsetTop
- }
-
- /* calculate cumulative zoom from svg documents */
- e = element
- while (e = e.parent) {
- if (e.type == 'svg' && e.viewbox) {
- zoom *= e.viewbox().zoom
- this.x -= e.x() || 0
- this.y -= e.y() || 0
+
+ while (e = e.offsetParent) {
+ this.x -= e.offsetLeft
+ this.y -= e.offsetTop
+ }
+
+ /* calculate cumulative zoom from svg documents */
+ e = element
+ while (e = e.parent) {
+ if (e.type == 'svg' && e.viewbox) {
+ zoom *= e.viewbox().zoom
+ this.x -= e.x() || 0
+ this.y -= e.y() || 0
+ }
}
}