Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F886214
svg_attach.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Subscribers
None
svg_attach.js
View Options
dojo
.
require
(
"dojox.gfx.svg"
);
dojo
.
experimental
(
"dojox.gfx.svg_attach"
);
(
function
(){
dojox
.
gfx
.
attachNode
=
function
(
node
){
// summary: creates a shape from a Node
// node: Node: an SVG node
if
(
!
node
)
return
null
;
var
s
=
null
;
switch
(
node
.
tagName
.
toLowerCase
()){
case
dojox
.
gfx
.
Rect
.
nodeType
:
s
=
new
dojox
.
gfx
.
Rect
(
node
);
attachRect
(
s
);
break
;
case
dojox
.
gfx
.
Ellipse
.
nodeType
:
s
=
new
dojox
.
gfx
.
Ellipse
(
node
);
attachShape
(
s
,
dojox
.
gfx
.
defaultEllipse
);
break
;
case
dojox
.
gfx
.
Polyline
.
nodeType
:
s
=
new
dojox
.
gfx
.
Polyline
(
node
);
attachShape
(
s
,
dojox
.
gfx
.
defaultPolyline
);
break
;
case
dojox
.
gfx
.
Path
.
nodeType
:
s
=
new
dojox
.
gfx
.
Path
(
node
);
attachShape
(
s
,
dojox
.
gfx
.
defaultPath
);
break
;
case
dojox
.
gfx
.
Circle
.
nodeType
:
s
=
new
dojox
.
gfx
.
Circle
(
node
);
attachShape
(
s
,
dojox
.
gfx
.
defaultCircle
);
break
;
case
dojox
.
gfx
.
Line
.
nodeType
:
s
=
new
dojox
.
gfx
.
Line
(
node
);
attachShape
(
s
,
dojox
.
gfx
.
defaultLine
);
break
;
case
dojox
.
gfx
.
Image
.
nodeType
:
s
=
new
dojox
.
gfx
.
Image
(
node
);
attachShape
(
s
,
dojox
.
gfx
.
defaultImage
);
break
;
case
dojox
.
gfx
.
Text
.
nodeType
:
var
t
=
node
.
getElementsByTagName
(
"textPath"
);
if
(
t
&&
t
.
length
){
s
=
new
dojox
.
gfx
.
TextPath
(
node
);
attachShape
(
s
,
dojox
.
gfx
.
defaultPath
);
attachTextPath
(
s
);
}
else
{
s
=
new
dojox
.
gfx
.
Text
(
node
);
attachText
(
s
);
}
attachFont
(
s
);
break
;
default
:
//console.debug("FATAL ERROR! tagName = " + node.tagName);
return
null
;
}
if
(
!
(
s
instanceof
dojox
.
gfx
.
Image
)){
attachFill
(
s
);
attachStroke
(
s
);
}
attachTransform
(
s
);
return
s
;
// dojox.gfx.Shape
};
dojox
.
gfx
.
attachSurface
=
function
(
node
){
// summary: creates a surface from a Node
// node: Node: an SVG node
var
s
=
new
dojox
.
gfx
.
Surface
();
s
.
rawNode
=
node
;
var
def_elems
=
node
.
getElementsByTagName
(
"defs"
);
if
(
def_elems
.
length
==
0
){
return
null
;
// dojox.gfx.Surface
}
s
.
defNode
=
def_elems
[
0
];
return
s
;
// dojox.gfx.Surface
};
var
attachFill
=
function
(
object
){
// summary: deduces a fill style from a node.
// object: dojox.gfx.Shape: an SVG shape
var
fill
=
object
.
rawNode
.
getAttribute
(
"fill"
);
if
(
fill
==
"none"
){
object
.
fillStyle
=
null
;
return
;
}
var
fillStyle
=
null
,
gradient
=
dojox
.
gfx
.
svg
.
getRef
(
fill
);
if
(
ref
){
switch
(
gradient
.
tagName
.
toLowerCase
()){
case
"lineargradient"
:
fillStyle
=
_getGradient
(
dojox
.
gfx
.
defaultLinearGradient
,
gradient
);
dojo
.
forEach
([
"x1"
,
"y1"
,
"x2"
,
"y2"
],
function
(
x
){
fillStyle
[
x
]
=
gradient
.
getAttribute
(
x
);
});
break
;
case
"radialgradient"
:
fillStyle
=
_getGradient
(
dojox
.
gfx
.
defaultRadialGradient
,
gradient
);
dojo
.
forEach
([
"cx"
,
"cy"
,
"r"
],
function
(
x
){
fillStyle
[
x
]
=
gradient
.
getAttribute
(
x
);
});
fillStyle
.
cx
=
gradient
.
getAttribute
(
"cx"
);
fillStyle
.
cy
=
gradient
.
getAttribute
(
"cy"
);
fillStyle
.
r
=
gradient
.
getAttribute
(
"r"
);
break
;
case
"pattern"
:
fillStyle
=
dojo
.
lang
.
shallowCopy
(
dojox
.
gfx
.
defaultPattern
,
true
);
dojo
.
forEach
([
"x"
,
"y"
,
"width"
,
"height"
],
function
(
x
){
fillStyle
[
x
]
=
gradient
.
getAttribute
(
x
);
});
fillStyle
.
src
=
gradient
.
firstChild
.
getAttributeNS
(
dojox
.
gfx
.
svg
.
xmlns
.
xlink
,
"href"
);
break
;
}
}
else
{
fillStyle
=
new
dojo
.
Color
(
fill
);
var
opacity
=
rawNode
.
getAttribute
(
"fill-opacity"
);
if
(
opacity
!=
null
){
fillStyle
.
a
=
opacity
;
}
}
object
.
fillStyle
=
fillStyle
;
};
var
_getGradient
=
function
(
defaultGradient
,
gradient
){
var
fillStyle
=
dojo
.
clone
(
defaultGradient
);
fillStyle
.
colors
=
[];
for
(
var
i
=
0
;
i
<
gradient
.
childNodes
.
length
;
++
i
){
fillStyle
.
colors
.
push
({
offset
:
gradient
.
childNodes
[
i
].
getAttribute
(
"offset"
),
color
:
new
dojo
.
Color
(
gradient
.
childNodes
[
i
].
getAttribute
(
"stop-color"
))
});
}
return
fillStyle
;
};
var
attachStroke
=
function
(
object
){
// summary: deduces a stroke style from a node.
// object: dojox.gfx.Shape: an SVG shape
var
rawNode
=
object
.
rawNode
,
stroke
=
rawNode
.
getAttribute
(
"stroke"
);
if
(
stroke
==
null
||
stroke
==
"none"
){
object
.
strokeStyle
=
null
;
return
;
}
var
strokeStyle
=
object
.
strokeStyle
=
dojo
.
clone
(
dojox
.
gfx
.
defaultStroke
);
var
color
=
new
dojo
.
Color
(
stroke
);
if
(
color
){
strokeStyle
.
color
=
color
;
strokeStyle
.
color
.
a
=
rawNode
.
getAttribute
(
"stroke-opacity"
);
strokeStyle
.
width
=
rawNode
.
getAttribute
(
"stroke-width"
);
strokeStyle
.
cap
=
rawNode
.
getAttribute
(
"stroke-linecap"
);
strokeStyle
.
join
=
rawNode
.
getAttribute
(
"stroke-linejoin"
);
if
(
strokeStyle
.
join
==
"miter"
){
strokeStyle
.
join
=
rawNode
.
getAttribute
(
"stroke-miterlimit"
);
}
strokeStyle
.
style
=
rawNode
.
getAttribute
(
"dojoGfxStrokeStyle"
);
}
};
var
attachTransform
=
function
(
object
){
// summary: deduces a transformation matrix from a node.
// object: dojox.gfx.Shape: an SVG shape
var
matrix
=
object
.
rawNode
.
getAttribute
(
"transform"
);
if
(
matrix
.
match
(
/^matrix\(.+\)$/
)){
var
t
=
matrix
.
slice
(
7
,
-
1
).
split
(
","
);
object
.
matrix
=
dojox
.
gfx
.
matrix
.
normalize
({
xx
:
parseFloat
(
t
[
0
]),
xy
:
parseFloat
(
t
[
2
]),
yx
:
parseFloat
(
t
[
1
]),
yy
:
parseFloat
(
t
[
3
]),
dx
:
parseFloat
(
t
[
4
]),
dy
:
parseFloat
(
t
[
5
])
});
}
else
{
object
.
matrix
=
null
;
}
};
var
attachFont
=
function
(
object
){
// summary: deduces a font style from a Node.
// object: dojox.gfx.Shape: an SVG shape
var
fontStyle
=
object
.
fontStyle
=
dojo
.
clone
(
dojox
.
gfx
.
defaultFont
),
r
=
object
.
rawNode
;
fontStyle
.
style
=
r
.
getAttribute
(
"font-style"
);
fontStyle
.
variant
=
r
.
getAttribute
(
"font-variant"
);
fontStyle
.
weight
=
r
.
getAttribute
(
"font-weight"
);
fontStyle
.
size
=
r
.
getAttribute
(
"font-size"
);
fontStyle
.
family
=
r
.
getAttribute
(
"font-family"
);
};
var
attachShape
=
function
(
object
,
def
){
// summary: builds a shape from a node.
// object: dojox.gfx.Shape: an SVG shape
// def: Object: a default shape template
var
shape
=
object
.
shape
=
dojo
.
clone
(
def
),
r
=
object
.
rawNode
;
for
(
var
i
in
shape
)
{
shape
[
i
]
=
r
.
getAttribute
(
i
);
}
};
var
attachRect
=
function
(
object
){
// summary: builds a rectangle shape from a node.
// object: dojox.gfx.Shape: an SVG shape
attachShape
(
object
,
dojox
.
gfx
.
defaultRect
);
object
.
shape
.
r
=
Math
.
min
(
object
.
rawNode
.
getAttribute
(
"rx"
),
object
.
rawNode
.
getAttribute
(
"ry"
));
};
var
attachText
=
function
(
object
){
// summary: builds a text shape from a node.
// object: dojox.gfx.Shape: an SVG shape
var
shape
=
object
.
shape
=
dojo
.
clone
(
dojox
.
gfx
.
defaultText
),
r
=
object
.
rawNode
;
shape
.
x
=
r
.
getAttribute
(
"x"
);
shape
.
y
=
r
.
getAttribute
(
"y"
);
shape
.
align
=
r
.
getAttribute
(
"text-anchor"
);
shape
.
decoration
=
r
.
getAttribute
(
"text-decoration"
);
shape
.
rotated
=
parseFloat
(
r
.
getAttribute
(
"rotate"
))
!=
0
;
shape
.
kerning
=
r
.
getAttribute
(
"kerning"
)
==
"auto"
;
shape
.
text
=
r
.
firstChild
.
nodeValue
;
};
var
attachTextPath
=
function
(
object
){
// summary: builds a textpath shape from a node.
// object: dojox.gfx.Shape: an SVG shape
var
shape
=
object
.
shape
=
dojo
.
clone
(
dojox
.
gfx
.
defaultTextPath
),
r
=
object
.
rawNode
;
shape
.
align
=
r
.
getAttribute
(
"text-anchor"
);
shape
.
decoration
=
r
.
getAttribute
(
"text-decoration"
);
shape
.
rotated
=
parseFloat
(
r
.
getAttribute
(
"rotate"
))
!=
0
;
shape
.
kerning
=
r
.
getAttribute
(
"kerning"
)
==
"auto"
;
shape
.
text
=
r
.
firstChild
.
nodeValue
;
};
})();
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 6, 23:36 (2 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26523
Default Alt Text
svg_attach.js (7 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment