Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F884195
Chart2D.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
Chart2D.js
View Options
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if
(
!
dojo
.
_hasResource
[
"dojox.charting.Chart2D"
]){
dojo
.
_hasResource
[
"dojox.charting.Chart2D"
]
=
true
;
dojo
.
provide
(
"dojox.charting.Chart2D"
);
dojo
.
require
(
"dojox.gfx"
);
dojo
.
require
(
"dojox.lang.functional"
);
dojo
.
require
(
"dojox.lang.functional.fold"
);
dojo
.
require
(
"dojox.lang.functional.reversed"
);
dojo
.
require
(
"dojox.charting.Theme"
);
dojo
.
require
(
"dojox.charting.Series"
);
dojo
.
require
(
"dojox.charting.axis2d.Default"
);
dojo
.
require
(
"dojox.charting.plot2d.Default"
);
dojo
.
require
(
"dojox.charting.plot2d.Lines"
);
dojo
.
require
(
"dojox.charting.plot2d.Areas"
);
dojo
.
require
(
"dojox.charting.plot2d.Markers"
);
dojo
.
require
(
"dojox.charting.plot2d.MarkersOnly"
);
dojo
.
require
(
"dojox.charting.plot2d.Scatter"
);
dojo
.
require
(
"dojox.charting.plot2d.Stacked"
);
dojo
.
require
(
"dojox.charting.plot2d.StackedLines"
);
dojo
.
require
(
"dojox.charting.plot2d.StackedAreas"
);
dojo
.
require
(
"dojox.charting.plot2d.Columns"
);
dojo
.
require
(
"dojox.charting.plot2d.StackedColumns"
);
dojo
.
require
(
"dojox.charting.plot2d.ClusteredColumns"
);
dojo
.
require
(
"dojox.charting.plot2d.Bars"
);
dojo
.
require
(
"dojox.charting.plot2d.StackedBars"
);
dojo
.
require
(
"dojox.charting.plot2d.ClusteredBars"
);
dojo
.
require
(
"dojox.charting.plot2d.Grid"
);
dojo
.
require
(
"dojox.charting.plot2d.Pie"
);
dojo
.
require
(
"dojox.charting.plot2d.Bubble"
);
dojo
.
require
(
"dojox.charting.plot2d.Candlesticks"
);
dojo
.
require
(
"dojox.charting.plot2d.OHLC"
);
(
function
(){
var
df
=
dojox
.
lang
.
functional
,
dc
=
dojox
.
charting
,
_1
=
df
.
lambda
(
"item.clear()"
),
_2
=
df
.
lambda
(
"item.purgeGroup()"
),
_3
=
df
.
lambda
(
"item.destroy()"
),
_4
=
df
.
lambda
(
"item.dirty = false"
),
_5
=
df
.
lambda
(
"item.dirty = true"
);
dojo
.
declare
(
"dojox.charting.Chart2D"
,
null
,{
constructor
:
function
(
_6
,
_7
){
if
(
!
_7
){
_7
=
{};
}
this
.
margins
=
_7
.
margins
?
_7
.
margins
:
{
l
:
10
,
t
:
10
,
r
:
10
,
b
:
10
};
this
.
stroke
=
_7
.
stroke
;
this
.
fill
=
_7
.
fill
;
this
.
theme
=
null
;
this
.
axes
=
{};
this
.
stack
=
[];
this
.
plots
=
{};
this
.
series
=
[];
this
.
runs
=
{};
this
.
dirty
=
true
;
this
.
coords
=
null
;
this
.
node
=
dojo
.
byId
(
_6
);
var
_8
=
dojo
.
marginBox
(
_6
);
this
.
surface
=
dojox
.
gfx
.
createSurface
(
this
.
node
,
_8
.
w
,
_8
.
h
);
},
destroy
:
function
(){
dojo
.
forEach
(
this
.
series
,
_3
);
dojo
.
forEach
(
this
.
stack
,
_3
);
df
.
forIn
(
this
.
axes
,
_3
);
this
.
surface
.
destroy
();
},
getCoords
:
function
(){
if
(
!
this
.
coords
){
this
.
coords
=
dojo
.
coords
(
this
.
node
,
true
);
}
return
this
.
coords
;
},
setTheme
:
function
(
_9
){
this
.
theme
=
_9
.
_clone
();
this
.
dirty
=
true
;
return
this
;
},
addAxis
:
function
(
_a
,
_b
){
var
_c
;
if
(
!
_b
||!
(
"type"
in
_b
)){
_c
=
new
dc
.
axis2d
.
Default
(
this
,
_b
);
}
else
{
_c
=
typeof
_b
.
type
==
"string"
?
new
dc
.
axis2d
[
_b
.
type
](
this
,
_b
)
:
new
_b
.
type
(
this
,
_b
);
}
_c
.
name
=
_a
;
_c
.
dirty
=
true
;
if
(
_a
in
this
.
axes
){
this
.
axes
[
_a
].
destroy
();
}
this
.
axes
[
_a
]
=
_c
;
this
.
dirty
=
true
;
return
this
;
},
getAxis
:
function
(
_d
){
return
this
.
axes
[
_d
];
},
removeAxis
:
function
(
_e
){
if
(
_e
in
this
.
axes
){
this
.
axes
[
_e
].
destroy
();
delete
this
.
axes
[
_e
];
this
.
dirty
=
true
;
}
return
this
;
},
addPlot
:
function
(
_f
,
_10
){
var
_11
;
if
(
!
_10
||!
(
"type"
in
_10
)){
_11
=
new
dc
.
plot2d
.
Default
(
this
,
_10
);
}
else
{
_11
=
typeof
_10
.
type
==
"string"
?
new
dc
.
plot2d
[
_10
.
type
](
this
,
_10
)
:
new
_10
.
type
(
this
,
_10
);
}
_11
.
name
=
_f
;
_11
.
dirty
=
true
;
if
(
_f
in
this
.
plots
){
this
.
stack
[
this
.
plots
[
_f
]].
destroy
();
this
.
stack
[
this
.
plots
[
_f
]]
=
_11
;
}
else
{
this
.
plots
[
_f
]
=
this
.
stack
.
length
;
this
.
stack
.
push
(
_11
);
}
this
.
dirty
=
true
;
return
this
;
},
removePlot
:
function
(
_12
){
if
(
_12
in
this
.
plots
){
var
_13
=
this
.
plots
[
_12
];
delete
this
.
plots
[
_12
];
this
.
stack
[
_13
].
destroy
();
this
.
stack
.
splice
(
_13
,
1
);
df
.
forIn
(
this
.
plots
,
function
(
idx
,
_14
,
_15
){
if
(
idx
>
_13
){
_15
[
_14
]
=
idx
-
1
;
}
});
this
.
dirty
=
true
;
}
return
this
;
},
addSeries
:
function
(
_16
,
_17
,
_18
){
var
run
=
new
dc
.
Series
(
this
,
_17
,
_18
);
if
(
_16
in
this
.
runs
){
this
.
series
[
this
.
runs
[
_16
]].
destroy
();
this
.
series
[
this
.
runs
[
_16
]]
=
run
;
}
else
{
this
.
runs
[
_16
]
=
this
.
series
.
length
;
this
.
series
.
push
(
run
);
}
run
.
name
=
_16
;
this
.
dirty
=
true
;
if
(
!
(
"ymin"
in
run
)
&&
"min"
in
run
){
run
.
ymin
=
run
.
min
;
}
if
(
!
(
"ymax"
in
run
)
&&
"max"
in
run
){
run
.
ymax
=
run
.
max
;
}
return
this
;
},
removeSeries
:
function
(
_19
){
if
(
_19
in
this
.
runs
){
var
_1a
=
this
.
runs
[
_19
],
_1b
=
this
.
series
[
_1a
].
plot
;
delete
this
.
runs
[
_19
];
this
.
series
[
_1a
].
destroy
();
this
.
series
.
splice
(
_1a
,
1
);
df
.
forIn
(
this
.
runs
,
function
(
idx
,
_1c
,
_1d
){
if
(
idx
>
_1a
){
_1d
[
_1c
]
=
idx
-
1
;
}
});
this
.
dirty
=
true
;
}
return
this
;
},
updateSeries
:
function
(
_1e
,
_1f
){
if
(
_1e
in
this
.
runs
){
var
run
=
this
.
series
[
this
.
runs
[
_1e
]];
run
.
data
=
_1f
;
run
.
dirty
=
true
;
this
.
_invalidateDependentPlots
(
run
.
plot
,
false
);
this
.
_invalidateDependentPlots
(
run
.
plot
,
true
);
}
return
this
;
},
resize
:
function
(
_20
,
_21
){
var
box
;
switch
(
arguments
.
length
){
case
0
:
box
=
dojo
.
marginBox
(
this
.
node
);
break
;
case
1
:
box
=
_20
;
break
;
default
:
box
=
{
w
:
_20
,
h
:
_21
};
break
;
}
dojo
.
marginBox
(
this
.
node
,
box
);
this
.
surface
.
setDimensions
(
box
.
w
,
box
.
h
);
this
.
dirty
=
true
;
this
.
coords
=
null
;
return
this
.
render
();
},
getGeometry
:
function
(){
var
ret
=
{};
df
.
forIn
(
this
.
axes
,
function
(
_22
){
if
(
_22
.
initialized
()){
ret
[
_22
.
name
]
=
{
name
:
_22
.
name
,
vertical
:
_22
.
vertical
,
scaler
:
_22
.
scaler
,
ticks
:
_22
.
ticks
};
}
});
return
ret
;
},
setAxisWindow
:
function
(
_23
,
_24
,
_25
){
var
_26
=
this
.
axes
[
_23
];
if
(
_26
){
_26
.
setWindow
(
_24
,
_25
);
}
return
this
;
},
setWindow
:
function
(
sx
,
sy
,
dx
,
dy
){
if
(
!
(
"plotArea"
in
this
)){
this
.
calculateGeometry
();
}
df
.
forIn
(
this
.
axes
,
function
(
_27
){
var
_28
,
_29
,
_2a
=
_27
.
getScaler
().
bounds
,
s
=
_2a
.
span
/
(
_2a
.
upper
-
_2a
.
lower
);
if
(
_27
.
vertical
){
_28
=
sy
;
_29
=
dy
/
s
/
_28
;
}
else
{
_28
=
sx
;
_29
=
dx
/
s
/
_28
;
}
_27
.
setWindow
(
_28
,
_29
);
});
return
this
;
},
calculateGeometry
:
function
(){
if
(
this
.
dirty
){
return
this
.
fullGeometry
();
}
dojo
.
forEach
(
this
.
stack
,
function
(
_2b
){
if
(
_2b
.
dirty
||
(
_2b
.
hAxis
&&
this
.
axes
[
_2b
.
hAxis
].
dirty
)
||
(
_2b
.
vAxis
&&
this
.
axes
[
_2b
.
vAxis
].
dirty
)){
_2b
.
calculateAxes
(
this
.
plotArea
);
}
},
this
);
return
this
;
},
fullGeometry
:
function
(){
this
.
_makeDirty
();
dojo
.
forEach
(
this
.
stack
,
_1
);
if
(
!
this
.
theme
){
this
.
setTheme
(
new
dojox
.
charting
.
Theme
(
dojox
.
charting
.
_def
));
}
dojo
.
forEach
(
this
.
series
,
function
(
run
){
if
(
!
(
run
.
plot
in
this
.
plots
)){
var
_2c
=
new
dc
.
plot2d
.
Default
(
this
,{});
_2c
.
name
=
run
.
plot
;
this
.
plots
[
run
.
plot
]
=
this
.
stack
.
length
;
this
.
stack
.
push
(
_2c
);
}
this
.
stack
[
this
.
plots
[
run
.
plot
]].
addSeries
(
run
);
},
this
);
dojo
.
forEach
(
this
.
stack
,
function
(
_2d
){
if
(
_2d
.
hAxis
){
_2d
.
setAxis
(
this
.
axes
[
_2d
.
hAxis
]);
}
if
(
_2d
.
vAxis
){
_2d
.
setAxis
(
this
.
axes
[
_2d
.
vAxis
]);
}
},
this
);
var
dim
=
this
.
dim
=
this
.
surface
.
getDimensions
();
dim
.
width
=
dojox
.
gfx
.
normalizedLength
(
dim
.
width
);
dim
.
height
=
dojox
.
gfx
.
normalizedLength
(
dim
.
height
);
df
.
forIn
(
this
.
axes
,
_1
);
dojo
.
forEach
(
this
.
stack
,
function
(
p
){
p
.
calculateAxes
(
dim
);
});
var
_2e
=
this
.
offsets
=
{
l
:
0
,
r
:
0
,
t
:
0
,
b
:
0
};
df
.
forIn
(
this
.
axes
,
function
(
_2f
){
df
.
forIn
(
_2f
.
getOffsets
(),
function
(
o
,
i
){
_2e
[
i
]
+=
o
;
});
});
df
.
forIn
(
this
.
margins
,
function
(
o
,
i
){
_2e
[
i
]
+=
o
;
});
this
.
plotArea
=
{
width
:
dim
.
width
-
_2e
.
l
-
_2e
.
r
,
height
:
dim
.
height
-
_2e
.
t
-
_2e
.
b
};
df
.
forIn
(
this
.
axes
,
_1
);
dojo
.
forEach
(
this
.
stack
,
function
(
_30
){
_30
.
calculateAxes
(
this
.
plotArea
);
},
this
);
return
this
;
},
render
:
function
(){
if
(
this
.
theme
){
this
.
theme
.
clear
();
}
if
(
this
.
dirty
){
return
this
.
fullRender
();
}
this
.
calculateGeometry
();
df
.
forEachRev
(
this
.
stack
,
function
(
_31
){
_31
.
render
(
this
.
dim
,
this
.
offsets
);
},
this
);
df
.
forIn
(
this
.
axes
,
function
(
_32
){
_32
.
render
(
this
.
dim
,
this
.
offsets
);
},
this
);
this
.
_makeClean
();
if
(
this
.
surface
.
render
){
this
.
surface
.
render
();
}
return
this
;
},
fullRender
:
function
(){
this
.
fullGeometry
();
var
_33
=
this
.
offsets
,
dim
=
this
.
dim
;
var
_34
=
df
.
foldl
(
this
.
stack
,
"z + plot.getRequiredColors()"
,
0
);
this
.
theme
.
defineColors
({
num
:
_34
,
cache
:
false
});
dojo
.
forEach
(
this
.
series
,
_2
);
df
.
forIn
(
this
.
axes
,
_2
);
dojo
.
forEach
(
this
.
stack
,
_2
);
this
.
surface
.
clear
();
var
t
=
this
.
theme
,
_35
=
t
.
plotarea
&&
t
.
plotarea
.
fill
,
_36
=
t
.
plotarea
&&
t
.
plotarea
.
stroke
;
if
(
_35
){
this
.
surface
.
createRect
({
x
:
_33
.
l
,
y
:
_33
.
t
,
width
:
dim
.
width
-
_33
.
l
-
_33
.
r
,
height
:
dim
.
height
-
_33
.
t
-
_33
.
b
}).
setFill
(
_35
);
}
if
(
_36
){
this
.
surface
.
createRect
({
x
:
_33
.
l
,
y
:
_33
.
t
,
width
:
dim
.
width
-
_33
.
l
-
_33
.
r
-
1
,
height
:
dim
.
height
-
_33
.
t
-
_33
.
b
-
1
}).
setStroke
(
_36
);
}
df
.
foldr
(
this
.
stack
,
function
(
z
,
_37
){
return
_37
.
render
(
dim
,
_33
),
0
;
},
0
);
_35
=
this
.
fill
?
this
.
fill
:
(
t
.
chart
&&
t
.
chart
.
fill
);
_36
=
this
.
stroke
?
this
.
stroke
:
(
t
.
chart
&&
t
.
chart
.
stroke
);
if
(
_35
==
"inherit"
){
var
_38
=
this
.
node
,
_35
=
new
dojo
.
Color
(
dojo
.
style
(
_38
,
"backgroundColor"
));
while
(
_35
.
a
==
0
&&
_38
!=
document
.
documentElement
){
_35
=
new
dojo
.
Color
(
dojo
.
style
(
_38
,
"backgroundColor"
));
_38
=
_38
.
parentNode
;
}
}
if
(
_35
){
if
(
_33
.
l
){
this
.
surface
.
createRect
({
width
:
_33
.
l
,
height
:
dim
.
height
+
1
}).
setFill
(
_35
);
}
if
(
_33
.
r
){
this
.
surface
.
createRect
({
x
:
dim
.
width
-
_33
.
r
,
width
:
_33
.
r
+
1
,
height
:
dim
.
height
+
1
}).
setFill
(
_35
);
}
if
(
_33
.
t
){
this
.
surface
.
createRect
({
width
:
dim
.
width
+
1
,
height
:
_33
.
t
}).
setFill
(
_35
);
}
if
(
_33
.
b
){
this
.
surface
.
createRect
({
y
:
dim
.
height
-
_33
.
b
,
width
:
dim
.
width
+
1
,
height
:
_33
.
b
+
2
}).
setFill
(
_35
);
}
}
if
(
_36
){
this
.
surface
.
createRect
({
width
:
dim
.
width
-
1
,
height
:
dim
.
height
-
1
}).
setStroke
(
_36
);
}
df
.
forIn
(
this
.
axes
,
function
(
_39
){
_39
.
render
(
dim
,
_33
);
});
this
.
_makeClean
();
if
(
this
.
surface
.
render
){
this
.
surface
.
render
();
}
return
this
;
},
connectToPlot
:
function
(
_3a
,
_3b
,
_3c
){
return
_3a
in
this
.
plots
?
this
.
stack
[
this
.
plots
[
_3a
]].
connect
(
_3b
,
_3c
)
:
null
;
},
_makeClean
:
function
(){
dojo
.
forEach
(
this
.
axes
,
_4
);
dojo
.
forEach
(
this
.
stack
,
_4
);
dojo
.
forEach
(
this
.
series
,
_4
);
this
.
dirty
=
false
;
},
_makeDirty
:
function
(){
dojo
.
forEach
(
this
.
axes
,
_5
);
dojo
.
forEach
(
this
.
stack
,
_5
);
dojo
.
forEach
(
this
.
series
,
_5
);
this
.
dirty
=
true
;
},
_invalidateDependentPlots
:
function
(
_3d
,
_3e
){
if
(
_3d
in
this
.
plots
){
var
_3f
=
this
.
stack
[
this
.
plots
[
_3d
]],
_40
,
_41
=
_3e
?
"vAxis"
:
"hAxis"
;
if
(
_3f
[
_41
]){
_40
=
this
.
axes
[
_3f
[
_41
]];
if
(
_40
&&
_40
.
dependOnData
()){
_40
.
dirty
=
true
;
dojo
.
forEach
(
this
.
stack
,
function
(
p
){
if
(
p
[
_41
]
&&
p
[
_41
]
==
_3f
[
_41
]){
p
.
dirty
=
true
;
}
});
}
}
else
{
_3f
.
dirty
=
true
;
}
}
}});
})();
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 6, 10:25 (1 w, 6 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24062
Default Alt Text
Chart2D.js (9 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment