Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
1ffb0911
Commit
1ffb0911
authored
Dec 19, 2012
by
Valera Rozuvan
Committed by
Alexander Kryklia
Jan 15, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
GST work in progress.
parent
3eb3d7db
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
102 additions
and
43 deletions
+102
-43
common/lib/xmodule/xmodule/js/src/graphical_slider_tool/graph.js
+102
-43
No files found.
common/lib/xmodule/xmodule/js/src/graphical_slider_tool/graph.js
View file @
1ffb0911
...
...
@@ -22,6 +22,10 @@ define('Graph', ['logme'], function (logme) {
plotDiv
.
width
(
300
);
}
// Sometimes, when height is not explicitly set via CSS (or by some
// other means), it is 0 pixels by default. When Flot will try to plot
// a graph in this DIV with 0 height, then it will raise an error. To
// prevent this, we will set it to be equal to the width.
if
(
plotDiv
.
height
()
===
0
)
{
plotDiv
.
height
(
plotDiv
.
width
());
}
...
...
@@ -84,7 +88,7 @@ define('Graph', ['logme'], function (logme) {
return
;
function
processTicks
(
ticksStr
,
ticksObj
,
unitsType
)
{
var
ticksBlobs
,
tempFloat
;
var
ticksBlobs
,
tempFloat
,
tempTicks
,
c1
,
c2
;
// The 'ticks' setting is a string containing 3 floating-point
// numbers.
...
...
@@ -137,13 +141,83 @@ define('Graph', ['logme'], function (logme) {
// units: change last tick to units
if
(
typeof
config
.
plot
[
unitsType
]
===
'string'
)
{
var
ticks
=
_
.
map
(
_
.
range
(
ticksObj
.
min
,
ticksObj
.
max
+
ticksObj
.
tickSize
,
ticksObj
.
tickSize
),
function
(
x
){
return
[
x
,
x
>
ticksObj
.
max
-
ticksObj
.
tickSize
?
config
.
plot
[
unitsType
]
:
x
];
});
tempTicks
=
[];
for
(
c1
=
ticksObj
.
min
;
c1
<=
ticksObj
.
max
;
c1
+=
ticksObj
.
tickSize
)
{
c2
=
roundToPrec
(
c1
,
ticksObj
.
tickSize
);
tempTicks
.
push
([
c2
,
c2
]);
}
tempTicks
.
pop
();
tempTicks
.
push
([
roundToPrec
(
ticksObj
.
max
,
ticksObj
.
tickSize
),
config
.
plot
[
unitsType
]
]);
ticksObj
.
tickSize
=
null
;
ticksObj
.
ticks
=
ticks
;
ticksObj
.
ticks
=
tempTicks
;
}
return
;
function
roundToPrec
(
num
,
prec
)
{
var
c1
,
tn1
,
tn2
,
digitsBefore
,
digitsAfter
;
tn1
=
Math
.
abs
(
num
);
tn2
=
Math
.
abs
(
prec
);
// Find out number of digits BEFORE the decimal point.
c1
=
0
;
tn1
=
Math
.
abs
(
num
);
while
(
tn1
>=
1
)
{
c1
+=
1
;
tn1
/=
10
;
}
digitsBefore
=
c1
;
// Find out number of digits AFTER the decimal point.
c1
=
0
;
tn1
=
Math
.
abs
(
num
);
while
(
Math
.
round
(
tn1
)
!==
tn1
)
{
c1
+=
1
;
tn1
*=
10
;
}
digitsAfter
=
c1
;
// For precision, find out number of digits AFTER the
// decimal point.
c1
=
0
;
while
(
Math
.
round
(
tn2
)
!==
tn2
)
{
c1
+=
1
;
tn2
*=
10
;
}
// If precision is more than 1 (no digits after decimal
// points).
if
(
c1
===
0
)
{
return
num
;
}
// If the precision contains digits after the decimal
// point, we apply special rules.
else
{
tn1
=
Math
.
abs
(
num
);
if
(
digitsAfter
>
c1
)
{
tn1
=
tn1
.
toPrecision
(
digitsBefore
+
c1
);
}
else
{
tn1
=
tn1
.
toPrecision
(
digitsBefore
+
digitsAfter
);
}
}
if
(
num
<
0
)
{
return
-
tn1
;
}
return
tn1
;
}
}
}
...
...
@@ -190,46 +264,39 @@ define('Graph', ['logme'], function (logme) {
try
{
xrange
.
max
=
Function
.
apply
(
null
,
allParamNames
);
}
catch
(
err
)
{
logme
(
'ERROR: could not create a function from the string "'
+
config
.
plot
.
xrange
.
m
in
+
'" for xrange.min
.'
);
logme
(
'ERROR: could not create a function from the string "'
+
config
.
plot
.
xrange
.
m
ax
+
'" for xrange.max
.'
);
return
false
;
}
allParamNames
.
pop
();
logme
(
'xrange = '
,
xrange
);
// The user can specify the number of points. However, internally
// we will use it to generate a 'step' - i.e. the distance (on
// x-axis) between two adjacent points.
if
(
typeof
config
.
plot
.
num_points
===
'string'
)
{
tempNum
=
parseInt
(
config
.
plot
.
num_points
,
10
);
if
(
isNaN
(
tempNum
)
===
true
)
{
logme
(
'ERROR: Could not parse the number of points.'
);
logme
(
'config.plot.num_points = '
,
config
.
plot
.
num_points
);
if
(
typeof
config
.
plot
.
num_points
!==
'string'
)
{
logme
(
'ERROR: config.plot.num_points is not a string.'
);
logme
(
'config.plot.num_points = '
,
config
.
plot
.
num_points
);
return
false
;
}
if
(
(
tempNum
<
2
)
&&
(
tempNum
>
1000
)
)
{
logme
(
'ERROR: Number of points is outside the allowed range [2, 1000]'
);
logme
(
'config.plot.num_points = '
+
tempNum
);
return
false
;
}
return
false
;
}
tempNum
=
parseInt
(
config
.
plot
.
num_points
,
10
);
if
(
isFinite
(
tempNum
)
===
false
)
{
logme
(
'ERROR: Expected config.plot.num_points to be a a valid integer. It is not.'
);
logme
(
'config.plot.num_points = '
,
config
.
plot
.
num_points
);
numPoints
=
tempNum
;
}
else
{
logme
(
'MESSAGE: config.plot.num_points is not a string.'
);
logme
(
'Will set number of points to {width of graph} / 10.'
);
return
false
;
}
numPoints
=
plotDiv
.
width
()
/
10.0
;
if
(
(
tempNum
<
2
)
&&
(
tempNum
>
1000
)
)
{
logme
(
'ERROR: Number of points is outside the allowed range [2, 1000]'
);
logme
(
'config.plot.num_points = '
+
tempNum
);
logme
(
'numPoints = '
+
numPoints
)
;
return
false
;
}
numPoints
=
tempNum
;
return
true
;
}
...
...
@@ -311,8 +378,6 @@ define('Graph', ['logme'], function (logme) {
// will break.
funcString
=
$
(
'<div>'
).
html
(
funcString
).
text
();
logme
(
'funcString = '
+
funcString
);
// Some defaults. If no options are set for the graph, we will
// make sure that at least a line is drawn for a function.
newFunctionObject
=
{
...
...
@@ -324,8 +389,6 @@ define('Graph', ['logme'], function (logme) {
// XML.
paramNames
=
state
.
getAllParameterNames
();
logme
(
'allParamNames = '
,
paramNames
);
// The 'x' is always one of the function parameters.
paramNames
.
push
(
'x'
);
...
...
@@ -333,8 +396,6 @@ define('Graph', ['logme'], function (logme) {
// the Function constructor.
paramNames
.
push
(
funcString
);
console
.
log
(
'paramNames = '
,
paramNames
);
// Create the function from the function string, and all of the
// available parameters AND the 'x' variable as it's parameters.
// For this we will use the built-in Function object
...
...
@@ -431,8 +492,6 @@ define('Graph', ['logme'], function (logme) {
end
=
xrange
.
max
.
apply
(
window
,
paramValues
);
step
=
(
end
-
start
)
/
(
numPoints
-
1
);
logme
(
'start = '
+
start
+
', end = '
+
end
+
', step = '
+
step
);
// Generate the data points.
for
(
x
=
start
;
x
<=
end
;
x
+=
step
)
{
...
...
Write
Preview
Markdown
is supported
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