Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
MUR Drupal
d3-library
Commits
ec0f410c
Commit
ec0f410c
authored
Jul 01, 2013
by
Mike Bostock
Browse files
Merge branch 'fix-transform-interpolate' into 3.2.3
parents
580577ba
afede9f1
Changes
14
Hide whitespace changes
Inline
Side-by-side
d3.js
View file @
ec0f410c
...
...
@@ -4891,122 +4891,12 @@ d3 = function() {
return
"
#
"
+
d3_rgb_hex
(
Math
.
round
(
ar
+
br
*
t
))
+
d3_rgb_hex
(
Math
.
round
(
ag
+
bg
*
t
))
+
d3_rgb_hex
(
Math
.
round
(
ab
+
bb
*
t
));
};
}
d3
.
transform
=
function
(
string
)
{
var
g
=
d3_document
.
createElementNS
(
d3
.
ns
.
prefix
.
svg
,
"
g
"
);
return
(
d3
.
transform
=
function
(
string
)
{
if
(
string
!=
null
)
{
g
.
setAttribute
(
"
transform
"
,
string
);
var
t
=
g
.
transform
.
baseVal
.
consolidate
();
}
return
new
d3_transform
(
t
?
t
.
matrix
:
d3_transformIdentity
);
})(
string
);
};
function
d3_transform
(
m
)
{
var
r0
=
[
m
.
a
,
m
.
b
],
r1
=
[
m
.
c
,
m
.
d
],
kx
=
d3_transformNormalize
(
r0
),
kz
=
d3_transformDot
(
r0
,
r1
),
ky
=
d3_transformNormalize
(
d3_transformCombine
(
r1
,
r0
,
-
kz
))
||
0
;
if
(
r0
[
0
]
*
r1
[
1
]
<
r1
[
0
]
*
r0
[
1
])
{
r0
[
0
]
*=
-
1
;
r0
[
1
]
*=
-
1
;
kx
*=
-
1
;
kz
*=
-
1
;
}
this
.
rotate
=
(
kx
?
Math
.
atan2
(
r0
[
1
],
r0
[
0
])
:
Math
.
atan2
(
-
r1
[
0
],
r1
[
1
]))
*
d3_degrees
;
this
.
translate
=
[
m
.
e
,
m
.
f
];
this
.
scale
=
[
kx
,
ky
];
this
.
skew
=
ky
?
Math
.
atan2
(
kz
,
ky
)
*
d3_degrees
:
0
;
}
d3_transform
.
prototype
.
toString
=
function
()
{
return
"
translate(
"
+
this
.
translate
+
"
)rotate(
"
+
this
.
rotate
+
"
)skewX(
"
+
this
.
skew
+
"
)scale(
"
+
this
.
scale
+
"
)
"
;
};
function
d3_transformDot
(
a
,
b
)
{
return
a
[
0
]
*
b
[
0
]
+
a
[
1
]
*
b
[
1
];
}
function
d3_transformNormalize
(
a
)
{
var
k
=
Math
.
sqrt
(
d3_transformDot
(
a
,
a
));
if
(
k
)
{
a
[
0
]
/=
k
;
a
[
1
]
/=
k
;
}
return
k
;
}
function
d3_transformCombine
(
a
,
b
,
k
)
{
a
[
0
]
+=
k
*
b
[
0
];
a
[
1
]
+=
k
*
b
[
1
];
return
a
;
}
var
d3_transformIdentity
=
{
a
:
1
,
b
:
0
,
c
:
0
,
d
:
1
,
e
:
0
,
f
:
0
};
d3
.
interpolateNumber
=
d3_interpolateNumber
;
function
d3_interpolateNumber
(
a
,
b
)
{
b
-=
a
=
+
a
;
return
function
(
t
)
{
return
a
+
b
*
t
;
};
}
d3
.
interpolateTransform
=
d3_interpolateTransform
;
function
d3_interpolateTransform
(
a
,
b
)
{
var
s
=
[],
q
=
[],
n
,
A
=
d3
.
transform
(
a
),
B
=
d3
.
transform
(
b
),
ta
=
A
.
translate
,
tb
=
B
.
translate
,
ra
=
A
.
rotate
,
rb
=
B
.
rotate
,
wa
=
A
.
skew
,
wb
=
B
.
skew
,
ka
=
A
.
scale
,
kb
=
B
.
scale
;
if
(
ta
[
0
]
!=
tb
[
0
]
||
ta
[
1
]
!=
tb
[
1
])
{
s
.
push
(
"
translate(
"
,
null
,
"
,
"
,
null
,
"
)
"
);
q
.
push
({
i
:
1
,
x
:
d3_interpolateNumber
(
ta
[
0
],
tb
[
0
])
},
{
i
:
3
,
x
:
d3_interpolateNumber
(
ta
[
1
],
tb
[
1
])
});
}
else
if
(
tb
[
0
]
||
tb
[
1
])
{
s
.
push
(
"
translate(
"
+
tb
+
"
)
"
);
}
else
{
s
.
push
(
""
);
}
if
(
ra
!=
rb
)
{
if
(
ra
-
rb
>
180
)
rb
+=
360
;
else
if
(
rb
-
ra
>
180
)
ra
+=
360
;
q
.
push
({
i
:
s
.
push
(
s
.
pop
()
+
"
rotate(
"
,
null
,
"
)
"
)
-
2
,
x
:
d3_interpolateNumber
(
ra
,
rb
)
});
}
else
if
(
rb
)
{
s
.
push
(
s
.
pop
()
+
"
rotate(
"
+
rb
+
"
)
"
);
}
if
(
wa
!=
wb
)
{
q
.
push
({
i
:
s
.
push
(
s
.
pop
()
+
"
skewX(
"
,
null
,
"
)
"
)
-
2
,
x
:
d3_interpolateNumber
(
wa
,
wb
)
});
}
else
if
(
wb
)
{
s
.
push
(
s
.
pop
()
+
"
skewX(
"
+
wb
+
"
)
"
);
}
if
(
ka
[
0
]
!=
kb
[
0
]
||
ka
[
1
]
!=
kb
[
1
])
{
n
=
s
.
push
(
s
.
pop
()
+
"
scale(
"
,
null
,
"
,
"
,
null
,
"
)
"
);
q
.
push
({
i
:
n
-
4
,
x
:
d3_interpolateNumber
(
ka
[
0
],
kb
[
0
])
},
{
i
:
n
-
2
,
x
:
d3_interpolateNumber
(
ka
[
1
],
kb
[
1
])
});
}
else
if
(
kb
[
0
]
!=
1
||
kb
[
1
]
!=
1
)
{
s
.
push
(
s
.
pop
()
+
"
scale(
"
+
kb
+
"
)
"
);
}
n
=
q
.
length
;
return
function
(
t
)
{
var
i
=
-
1
,
o
;
while
(
++
i
<
n
)
s
[(
o
=
q
[
i
]).
i
]
=
o
.
x
(
t
);
return
s
.
join
(
""
);
};
}
d3
.
interpolateObject
=
d3_interpolateObject
;
function
d3_interpolateObject
(
a
,
b
)
{
var
i
=
{},
c
=
{},
k
;
for
(
k
in
a
)
{
if
(
k
in
b
)
{
i
[
k
]
=
d3_interpolate
ByName
(
k
)
(
a
[
k
],
b
[
k
]);
i
[
k
]
=
d3_interpolate
(
a
[
k
],
b
[
k
]);
}
else
{
c
[
k
]
=
a
[
k
];
}
...
...
@@ -5021,6 +4911,13 @@ d3 = function() {
return
c
;
};
}
d3
.
interpolateNumber
=
d3_interpolateNumber
;
function
d3_interpolateNumber
(
a
,
b
)
{
b
-=
a
=
+
a
;
return
function
(
t
)
{
return
a
+
b
*
t
;
};
}
d3
.
interpolateString
=
d3_interpolateString
;
function
d3_interpolateString
(
a
,
b
)
{
var
m
,
i
,
j
,
s0
=
0
,
s1
=
0
,
s
=
[],
q
=
[],
n
,
o
;
...
...
@@ -5094,9 +4991,6 @@ d3 = function() {
while
(
--
i
>=
0
&&
!
(
f
=
d3
.
interpolators
[
i
](
a
,
b
)))
;
return
f
;
}
function
d3_interpolateByName
(
name
)
{
return
name
==
"
transform
"
?
d3_interpolateTransform
:
d3_interpolate
;
}
d3
.
interpolators
=
[
function
(
a
,
b
)
{
var
t
=
typeof
b
;
return
(
t
===
"
string
"
?
d3_rgb_names
.
has
(
b
)
||
/^
(
#|rgb
\(
|hsl
\()
/
.
test
(
b
)
?
d3_interpolateRgb
:
d3_interpolateString
:
b
instanceof
d3_Color
?
d3_interpolateRgb
:
t
===
"
object
"
?
Array
.
isArray
(
b
)
?
d3_interpolateArray
:
d3_interpolateObject
:
d3_interpolateNumber
)(
a
,
b
);
...
...
@@ -5249,6 +5143,109 @@ d3 = function() {
return
Math
.
round
(
a
+
b
*
t
);
};
}
d3
.
transform
=
function
(
string
)
{
var
g
=
d3_document
.
createElementNS
(
d3
.
ns
.
prefix
.
svg
,
"
g
"
);
return
(
d3
.
transform
=
function
(
string
)
{
if
(
string
!=
null
)
{
g
.
setAttribute
(
"
transform
"
,
string
);
var
t
=
g
.
transform
.
baseVal
.
consolidate
();
}
return
new
d3_transform
(
t
?
t
.
matrix
:
d3_transformIdentity
);
})(
string
);
};
function
d3_transform
(
m
)
{
var
r0
=
[
m
.
a
,
m
.
b
],
r1
=
[
m
.
c
,
m
.
d
],
kx
=
d3_transformNormalize
(
r0
),
kz
=
d3_transformDot
(
r0
,
r1
),
ky
=
d3_transformNormalize
(
d3_transformCombine
(
r1
,
r0
,
-
kz
))
||
0
;
if
(
r0
[
0
]
*
r1
[
1
]
<
r1
[
0
]
*
r0
[
1
])
{
r0
[
0
]
*=
-
1
;
r0
[
1
]
*=
-
1
;
kx
*=
-
1
;
kz
*=
-
1
;
}
this
.
rotate
=
(
kx
?
Math
.
atan2
(
r0
[
1
],
r0
[
0
])
:
Math
.
atan2
(
-
r1
[
0
],
r1
[
1
]))
*
d3_degrees
;
this
.
translate
=
[
m
.
e
,
m
.
f
];
this
.
scale
=
[
kx
,
ky
];
this
.
skew
=
ky
?
Math
.
atan2
(
kz
,
ky
)
*
d3_degrees
:
0
;
}
d3_transform
.
prototype
.
toString
=
function
()
{
return
"
translate(
"
+
this
.
translate
+
"
)rotate(
"
+
this
.
rotate
+
"
)skewX(
"
+
this
.
skew
+
"
)scale(
"
+
this
.
scale
+
"
)
"
;
};
function
d3_transformDot
(
a
,
b
)
{
return
a
[
0
]
*
b
[
0
]
+
a
[
1
]
*
b
[
1
];
}
function
d3_transformNormalize
(
a
)
{
var
k
=
Math
.
sqrt
(
d3_transformDot
(
a
,
a
));
if
(
k
)
{
a
[
0
]
/=
k
;
a
[
1
]
/=
k
;
}
return
k
;
}
function
d3_transformCombine
(
a
,
b
,
k
)
{
a
[
0
]
+=
k
*
b
[
0
];
a
[
1
]
+=
k
*
b
[
1
];
return
a
;
}
var
d3_transformIdentity
=
{
a
:
1
,
b
:
0
,
c
:
0
,
d
:
1
,
e
:
0
,
f
:
0
};
d3
.
interpolateTransform
=
d3_interpolateTransform
;
function
d3_interpolateTransform
(
a
,
b
)
{
var
s
=
[],
q
=
[],
n
,
A
=
d3
.
transform
(
a
),
B
=
d3
.
transform
(
b
),
ta
=
A
.
translate
,
tb
=
B
.
translate
,
ra
=
A
.
rotate
,
rb
=
B
.
rotate
,
wa
=
A
.
skew
,
wb
=
B
.
skew
,
ka
=
A
.
scale
,
kb
=
B
.
scale
;
if
(
ta
[
0
]
!=
tb
[
0
]
||
ta
[
1
]
!=
tb
[
1
])
{
s
.
push
(
"
translate(
"
,
null
,
"
,
"
,
null
,
"
)
"
);
q
.
push
({
i
:
1
,
x
:
d3_interpolateNumber
(
ta
[
0
],
tb
[
0
])
},
{
i
:
3
,
x
:
d3_interpolateNumber
(
ta
[
1
],
tb
[
1
])
});
}
else
if
(
tb
[
0
]
||
tb
[
1
])
{
s
.
push
(
"
translate(
"
+
tb
+
"
)
"
);
}
else
{
s
.
push
(
""
);
}
if
(
ra
!=
rb
)
{
if
(
ra
-
rb
>
180
)
rb
+=
360
;
else
if
(
rb
-
ra
>
180
)
ra
+=
360
;
q
.
push
({
i
:
s
.
push
(
s
.
pop
()
+
"
rotate(
"
,
null
,
"
)
"
)
-
2
,
x
:
d3_interpolateNumber
(
ra
,
rb
)
});
}
else
if
(
rb
)
{
s
.
push
(
s
.
pop
()
+
"
rotate(
"
+
rb
+
"
)
"
);
}
if
(
wa
!=
wb
)
{
q
.
push
({
i
:
s
.
push
(
s
.
pop
()
+
"
skewX(
"
,
null
,
"
)
"
)
-
2
,
x
:
d3_interpolateNumber
(
wa
,
wb
)
});
}
else
if
(
wb
)
{
s
.
push
(
s
.
pop
()
+
"
skewX(
"
+
wb
+
"
)
"
);
}
if
(
ka
[
0
]
!=
kb
[
0
]
||
ka
[
1
]
!=
kb
[
1
])
{
n
=
s
.
push
(
s
.
pop
()
+
"
scale(
"
,
null
,
"
,
"
,
null
,
"
)
"
);
q
.
push
({
i
:
n
-
4
,
x
:
d3_interpolateNumber
(
ka
[
0
],
kb
[
0
])
},
{
i
:
n
-
2
,
x
:
d3_interpolateNumber
(
ka
[
1
],
kb
[
1
])
});
}
else
if
(
kb
[
0
]
!=
1
||
kb
[
1
]
!=
1
)
{
s
.
push
(
s
.
pop
()
+
"
scale(
"
+
kb
+
"
)
"
);
}
n
=
q
.
length
;
return
function
(
t
)
{
var
i
=
-
1
,
o
;
while
(
++
i
<
n
)
s
[(
o
=
q
[
i
]).
i
]
=
o
.
x
(
t
);
return
s
.
join
(
""
);
};
}
function
d3_uninterpolateNumber
(
a
,
b
)
{
b
=
b
-
(
a
=
+
a
)
?
1
/
(
b
-
a
)
:
0
;
return
function
(
x
)
{
...
...
@@ -7506,7 +7503,7 @@ d3 = function() {
for
(
value
in
nameNS
)
this
.
attr
(
value
,
nameNS
[
value
]);
return
this
;
}
var
interpolate
=
d3_interpolate
ByName
(
nameNS
)
,
name
=
d3
.
ns
.
qualify
(
nameNS
);
var
interpolate
=
nameNS
==
"
transform
"
?
d3_interpolateTransform
:
d3_interpolate
,
name
=
d3
.
ns
.
qualify
(
nameNS
);
function
attrNull
()
{
this
.
removeAttribute
(
name
);
}
...
...
@@ -7557,14 +7554,13 @@ d3 = function() {
}
priority
=
""
;
}
var
interpolate
=
d3_interpolateByName
(
name
);
function
styleNull
()
{
this
.
style
.
removeProperty
(
name
);
}
function
styleString
(
b
)
{
return
b
==
null
?
styleNull
:
(
b
+=
""
,
function
()
{
var
a
=
d3_window
.
getComputedStyle
(
this
,
null
).
getPropertyValue
(
name
),
i
;
return
a
!==
b
&&
(
i
=
interpolate
(
a
,
b
),
function
(
t
)
{
return
a
!==
b
&&
(
i
=
d3_
interpolate
(
a
,
b
),
function
(
t
)
{
this
.
style
.
setProperty
(
name
,
i
(
t
),
priority
);
});
});
...
...
d3.min.js
View file @
ec0f410c
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/interpolate/interpolate.js
View file @
ec0f410c
import
"
../color/color
"
;
import
"
../color/rgb
"
;
import
"
rgb
"
;
import
"
transform
"
;
import
"
object
"
;
import
"
array
"
;
import
"
number
"
;
...
...
@@ -15,12 +14,6 @@ function d3_interpolate(a, b) {
return
f
;
}
function
d3_interpolateByName
(
name
)
{
return
name
==
"
transform
"
?
d3_interpolateTransform
:
d3_interpolate
;
}
d3
.
interpolators
=
[
function
(
a
,
b
)
{
var
t
=
typeof
b
;
...
...
src/interpolate/object.js
View file @
ec0f410c
...
...
@@ -8,7 +8,7 @@ function d3_interpolateObject(a, b) {
k
;
for
(
k
in
a
)
{
if
(
k
in
b
)
{
i
[
k
]
=
d3_interpolate
ByName
(
k
)
(
a
[
k
],
b
[
k
]);
i
[
k
]
=
d3_interpolate
(
a
[
k
],
b
[
k
]);
}
else
{
c
[
k
]
=
a
[
k
];
}
...
...
src/transition/attr.js
View file @
ec0f410c
import
"
../core/ns
"
;
import
"
../interpolate/interpolate
"
;
import
"
../interpolate/transform
"
;
import
"
transition
"
;
import
"
tween
"
;
...
...
@@ -13,7 +14,7 @@ d3_transitionPrototype.attr = function(nameNS, value) {
return
this
;
}
var
interpolate
=
d3_interpolate
ByName
(
nameNS
)
,
var
interpolate
=
nameNS
==
"
transform
"
?
d3_interpolateTransform
:
d3_interpolate
,
name
=
d3
.
ns
.
qualify
(
nameNS
);
// For attr(string, null), remove the attribute with the specified name.
...
...
src/transition/style.js
View file @
ec0f410c
...
...
@@ -22,8 +22,6 @@ d3_transitionPrototype.style = function(name, value, priority) {
priority
=
""
;
}
var
interpolate
=
d3_interpolateByName
(
name
);
// For style(name, null) or style(name, null, priority), remove the style
// property with the specified name. The priority is ignored.
function
styleNull
()
{
...
...
@@ -36,7 +34,7 @@ d3_transitionPrototype.style = function(name, value, priority) {
function
styleString
(
b
)
{
return
b
==
null
?
styleNull
:
(
b
+=
""
,
function
()
{
var
a
=
d3_window
.
getComputedStyle
(
this
,
null
).
getPropertyValue
(
name
),
i
;
return
a
!==
b
&&
(
i
=
interpolate
(
a
,
b
),
function
(
t
)
{
this
.
style
.
setProperty
(
name
,
i
(
t
),
priority
);
});
return
a
!==
b
&&
(
i
=
d3_
interpolate
(
a
,
b
),
function
(
t
)
{
this
.
style
.
setProperty
(
name
,
i
(
t
),
priority
);
});
});
}
...
...
test/interpolate/array-test.js
View file @
ec0f410c
...
...
@@ -6,7 +6,7 @@ var suite = vows.describe("d3.interpolateArray");
suite
.
addBatch
({
"
interpolateArray
"
:
{
topic
:
load
(
"
interpolate/array
"
).
expression
(
"
d3.interpolateArray
"
)
.
document
()
,
topic
:
load
(
"
interpolate/array
"
).
expression
(
"
d3.interpolateArray
"
),
"
interpolates defined elements
"
:
function
(
interpolate
)
{
assert
.
deepEqual
(
interpolate
([
2
,
12
],
[
4
,
24
])(.
5
),
[
3
,
18
]);
},
...
...
test/interpolate/interpolate-test.js
View file @
ec0f410c
...
...
@@ -6,7 +6,7 @@ var suite = vows.describe("d3.interpolate");
suite
.
addBatch
({
"
interpolate
"
:
{
topic
:
load
(
"
interpolate/interpolate
"
)
.
document
()
,
topic
:
load
(
"
interpolate/interpolate
"
),
"
when b is a number
"
:
{
"
interpolates numbers
"
:
function
(
d3
)
{
...
...
test/interpolate/object-test.js
View file @
ec0f410c
...
...
@@ -6,7 +6,7 @@ var suite = vows.describe("d3.interpolateObject");
suite
.
addBatch
({
"
interpolateObject
"
:
{
topic
:
load
(
"
interpolate/object
"
).
expression
(
"
d3.interpolateObject
"
)
.
document
()
,
topic
:
load
(
"
interpolate/object
"
).
expression
(
"
d3.interpolateObject
"
),
"
interpolates defined properties
"
:
function
(
interpolate
)
{
assert
.
deepEqual
(
interpolate
({
a
:
2
,
b
:
12
},
{
a
:
4
,
b
:
24
})(.
5
),
{
a
:
3
,
b
:
18
});
},
...
...
test/scale/identity-test.js
View file @
ec0f410c
...
...
@@ -6,7 +6,7 @@ var suite = vows.describe("d3.scale.identity");
suite
.
addBatch
({
"
identity
"
:
{
topic
:
load
(
"
scale/identity
"
).
expression
(
"
d3.scale.identity
"
)
.
document
()
,
topic
:
load
(
"
scale/identity
"
).
expression
(
"
d3.scale.identity
"
),
"
domain and range
"
:
{
"
are identical
"
:
function
(
identity
)
{
...
...
test/scale/linear-test.js
View file @
ec0f410c
...
...
@@ -6,7 +6,7 @@ var suite = vows.describe("d3.scale.linear");
suite
.
addBatch
({
"
linear
"
:
{
topic
:
load
(
"
scale/linear
"
,
"
interpolate/hsl
"
)
.
document
()
,
// beware instanceof d3_Color
topic
:
load
(
"
scale/linear
"
,
"
interpolate/hsl
"
),
// beware instanceof d3_Color
"
domain
"
:
{
"
defaults to [0, 1]
"
:
function
(
d3
)
{
...
...
test/scale/log-test.js
View file @
ec0f410c
...
...
@@ -6,7 +6,7 @@ var suite = vows.describe("d3.scale.log");
suite
.
addBatch
({
"
log
"
:
{
topic
:
load
(
"
scale/log
"
,
"
interpolate/hsl
"
)
.
document
()
,
// beware instanceof d3_Color
topic
:
load
(
"
scale/log
"
,
"
interpolate/hsl
"
),
// beware instanceof d3_Color
"
domain
"
:
{
"
defaults to [1, 10], exactly
"
:
function
(
d3
)
{
...
...
test/scale/pow-test.js
View file @
ec0f410c
...
...
@@ -6,7 +6,7 @@ var suite = vows.describe("d3.scale.pow");
suite
.
addBatch
({
"
pow
"
:
{
topic
:
load
(
"
scale/pow
"
,
"
interpolate/hsl
"
)
.
document
()
,
// beware instance of d3_Colorr
topic
:
load
(
"
scale/pow
"
,
"
interpolate/hsl
"
),
// beware instance of d3_Colorr
"
domain
"
:
{
"
defaults to [0, 1]
"
:
function
(
d3
)
{
...
...
test/scale/sqrt-test.js
View file @
ec0f410c
...
...
@@ -6,7 +6,7 @@ var suite = vows.describe("d3.scale.sqrt");
suite
.
addBatch
({
"
sqrt
"
:
{
topic
:
load
(
"
scale/sqrt
"
,
"
interpolate/hsl
"
)
.
document
()
,
// beware instanceof d3_Color
topic
:
load
(
"
scale/sqrt
"
,
"
interpolate/hsl
"
),
// beware instanceof d3_Color
"
domain
"
:
{
"
defaults to [0, 1]
"
:
function
(
d3
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment