Skip to content
Snippets Groups Projects
Commit 842eeef9 authored by srosse's avatar srosse
Browse files

OO-3307: update d3.js to version 4.13.0, update charts in portfolio, QTI...

OO-3307: update d3.js to version 4.13.0, update charts in portfolio, QTI statistics and course statistics
parent 343b226b
No related branches found
No related tags found
No related merge requests found
Showing
with 17957 additions and 10325 deletions
...@@ -57,37 +57,31 @@ public class BarChartComponentRenderer extends DefaultComponentRenderer { ...@@ -57,37 +57,31 @@ public class BarChartComponentRenderer extends DefaultComponentRenderer {
.append("/* <![CDATA[ */ ") .append("/* <![CDATA[ */ ")
.append("jQuery(function () {\n") .append("jQuery(function () {\n")
.append("var placeholderheight = jQuery('#d").append(cmpId).append("d3holder').height();\n") .append("var placeholderheight = jQuery('#d").append(cmpId).append("d3holder').height();\n")
.append("var placeholderwidth = jQuery('#d").append(cmpId).append("d3holder').width();\n"); .append("var placeholderwidth = jQuery('#d").append(cmpId).append("d3holder').width();\n")
.append("var data = [").append(infos.getData()).append("];\n");
sb.append("var margin = {top: 20, right: 20, bottom: 30, left: 50},\n") sb.append("var margin = {top: 20, right: 20, bottom: 30, left: 50},\n")
.append(" width = placeholderwidth - margin.left - margin.right,\n") .append(" width = placeholderwidth - margin.left - margin.right,\n")
.append(" height = placeholderheight - margin.top - margin.bottom;\n") .append(" height = placeholderheight - margin.top - margin.bottom;\n")
.append("\n") .append("\n")
.append("var x = d3.scale.ordinal()\n") .append("var x = d3.scaleBand()\n")
.append(" .rangeRoundBands([0, width], .1);\n") .append(" .domain(data.map(function(d) { return d[0]; }))\n")
.append(" .rangeRound([0, width]).padding(.1);\n")
.append("\n") .append("\n")
.append("var y = d3.scale.linear()\n") .append("var y = d3.scaleLinear()\n")
.append(" .domain([0, d3.max(data, function(d) { return ").append(sum).append("; })])\n")
.append(" .range([height, 0]);\n") .append(" .range([height, 0]);\n")
.append("\n") .append("\n")
.append("var xAxis = d3.svg.axis()\n") .append("var xAxis = d3.axisBottom(x);\n")
.append(" .scale(x)\n")
.append(" .orient('bottom');\n")
.append("\n") .append("\n")
.append("var yAxis = d3.svg.axis()\n") .append("var yAxis = d3.axisLeft(y);\n");
.append(" .scale(y)\n")
.append(" .orient('left')\n");
sb.append("\n") sb.append("\n")
.append("var svg = d3.select('#d").append(cmpId).append("d3holder').append('svg')\n") .append("var svg = d3.select('#d").append(cmpId).append("d3holder').append('svg')\n")
.append(" .attr('width', width + margin.left + margin.right)\n") .append(" .attr('width', width + margin.left + margin.right)\n")
.append(" .attr('height', height + margin.top + margin.bottom)\n") .append(" .attr('height', height + margin.top + margin.bottom)\n")
.append(" .append('g')\n") .append(" .append('g')\n")
.append(" .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n") .append(" .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\n");
.append("\n")
.append("var data = [").append(infos.getData()).append("]\n")
.append("x.domain(data.map(function(d) { return d[0]; }));\n")
.append("y.domain([0, d3.max(data, function(d) { return ").append(sum).append("; })]);\n")
.append("\n");
//append x axis and legend //append x axis and legend
sb.append("svg.append('g')\n") sb.append("svg.append('g')\n")
...@@ -99,6 +93,7 @@ public class BarChartComponentRenderer extends DefaultComponentRenderer { ...@@ -99,6 +93,7 @@ public class BarChartComponentRenderer extends DefaultComponentRenderer {
.append(" .attr('y', 0)\n") .append(" .attr('y', 0)\n")
.append(" .attr('x', 0 - (width / 2))\n") .append(" .attr('x', 0 - (width / 2))\n")
.append(" .attr('dy', '1em')\n") .append(" .attr('dy', '1em')\n")
.append(" .attr('fill', '#000')\n")
.append(" .style('text-anchor', 'middle')\n") .append(" .style('text-anchor', 'middle')\n")
.append(" .text('").append(xLegend).append("');\n"); .append(" .text('").append(xLegend).append("');\n");
} }
...@@ -113,6 +108,7 @@ public class BarChartComponentRenderer extends DefaultComponentRenderer { ...@@ -113,6 +108,7 @@ public class BarChartComponentRenderer extends DefaultComponentRenderer {
.append(" .attr('y', 0 - margin.left)\n") .append(" .attr('y', 0 - margin.left)\n")
.append(" .attr('x', 0 - (height / 2))\n") .append(" .attr('x', 0 - (height / 2))\n")
.append(" .attr('dy', '1em')\n") .append(" .attr('dy', '1em')\n")
.append(" .attr('fill', '#000')\n")
.append(" .style('text-anchor', 'middle')\n") .append(" .style('text-anchor', 'middle')\n")
.append(" .text('").append(yLegend).append("');\n") .append(" .text('").append(yLegend).append("');\n")
.append("\n"); .append("\n");
...@@ -152,7 +148,7 @@ public class BarChartComponentRenderer extends DefaultComponentRenderer { ...@@ -152,7 +148,7 @@ public class BarChartComponentRenderer extends DefaultComponentRenderer {
sb.append(" .attr('fill', '").append(color).append("')\n") sb.append(" .attr('fill', '").append(color).append("')\n")
.append(" .attr('x', function(d) { return x(d[0]); })\n") .append(" .attr('x', function(d) { return x(d[0]); })\n")
.append(" .attr('y', function(d) { return y(d[").append((i+1)).append("]) ").append(correction).append(" ; })\n") .append(" .attr('y', function(d) { return y(d[").append((i+1)).append("]) ").append(correction).append(" ; })\n")
.append(" .attr('width', x.rangeBand())\n") .append(" .attr('width', x.bandwidth())\n")
.append(" .attr('height', function(d) { return height - y(d[").append((i+1)).append("]); });\n"); .append(" .attr('height', function(d) { return height - y(d[").append((i+1)).append("]); });\n");
} }
} }
......
...@@ -53,7 +53,6 @@ public class DefaultD3Component extends AbstractComponent { ...@@ -53,7 +53,6 @@ public class DefaultD3Component extends AbstractComponent {
@Override @Override
public void validate(UserRequest ureq, ValidationResult vr) { public void validate(UserRequest ureq, ValidationResult vr) {
super.validate(ureq, vr); super.validate(ureq, vr);
vr.getJsAndCSSAdder().addRequiredStaticJsFile("js/d3/d3.min.js"); vr.getJsAndCSSAdder().addRequiredStaticJsFile("js/d3/d3.min.js");
} }
} }
...@@ -67,7 +67,7 @@ public class RadarChartComponentRenderer extends DefaultComponentRenderer { ...@@ -67,7 +67,7 @@ public class RadarChartComponentRenderer extends DefaultComponentRenderer {
.append(" wrapWidth: 100,\n") .append(" wrapWidth: 100,\n")
.append(" format: '").append(soc.getFormat().format()).append("',") .append(" format: '").append(soc.getFormat().format()).append("',")
.append(" color: color,\n"); .append(" color: color,\n");
if(soc.getAxis() != null && soc.getAxis().size() > 0) { if(soc.getAxis() != null && !soc.getAxis().isEmpty()) {
sb.append(" axis: "); sb.append(" axis: ");
renderAxis(sb, soc.getAxis()); renderAxis(sb, soc.getAxis());
sb.append(",\n"); sb.append(",\n");
...@@ -98,7 +98,7 @@ public class RadarChartComponentRenderer extends DefaultComponentRenderer { ...@@ -98,7 +98,7 @@ public class RadarChartComponentRenderer extends DefaultComponentRenderer {
int numOfSeries = series.size(); int numOfSeries = series.size();
if(hasColor == numOfSeries) { if(hasColor == numOfSeries) {
sb.append(" var color = d3.scale.ordinal().range(["); sb.append(" var color = d3.scaleOrdinal().range([");
for(int i=0;i<numOfSeries; i++) { for(int i=0;i<numOfSeries; i++) {
if(i > 0) { if(i > 0) {
sb.append(","); sb.append(",");
...@@ -107,9 +107,9 @@ public class RadarChartComponentRenderer extends DefaultComponentRenderer { ...@@ -107,9 +107,9 @@ public class RadarChartComponentRenderer extends DefaultComponentRenderer {
} }
sb.append("]);\n"); sb.append("]);\n");
} else if(numOfSeries < 4) { } else if(numOfSeries < 4) {
sb.append(" var color = d3.scale.ordinal().range([\"#EDC951\",\"#CC333F\",\"#00A0B0\"]);\n"); sb.append(" var color = d3.scaleOrdinal().range([\"#EDC951\",\"#CC333F\",\"#00A0B0\"]);\n");
} else { } else {
sb.append(" var color = d3.scale.category10();\n"); sb.append(" var color = d3.scaleOrdinal(d3.schemeCategory10);\n");
} }
} }
......
...@@ -96,7 +96,7 @@ public class QTI21AssessmentTestStatisticsController extends BasicController imp ...@@ -96,7 +96,7 @@ public class QTI21AssessmentTestStatisticsController extends BasicController imp
mainVC = createVelocityContainer("statistics_assessment_test"); mainVC = createVelocityContainer("statistics_assessment_test");
mainVC.put("loadd3js", new StatisticsComponent("d3loader")); mainVC.put("loadd3js", new StatisticsComponent("d3loader"));
mainVC.contextPut("printMode", new Boolean(printMode)); mainVC.contextPut("printMode", Boolean.valueOf(printMode));
if(resourceResult.getCourseEntry() != null) { if(resourceResult.getCourseEntry() != null) {
mainVC.contextPut("courseId", resourceResult.getCourseEntry().getKey()); mainVC.contextPut("courseId", resourceResult.getCourseEntry().getKey());
} }
...@@ -160,15 +160,6 @@ public class QTI21AssessmentTestStatisticsController extends BasicController imp ...@@ -160,15 +160,6 @@ public class QTI21AssessmentTestStatisticsController extends BasicController imp
Object maxScoreObj = testNode == null ? null : testNode.getModuleConfiguration().get(IQEditController.CONFIG_KEY_MAXSCORE); Object maxScoreObj = testNode == null ? null : testNode.getModuleConfiguration().get(IQEditController.CONFIG_KEY_MAXSCORE);
if (maxScoreObj instanceof Float) { if (maxScoreObj instanceof Float) {
maxScoreSetting = (Float)maxScoreObj; maxScoreSetting = (Float)maxScoreObj;
} else {
// try to calculate max
float max = 0;
/*for (Item item: items) {
if(item.getQuestion() != null) {
max += item.getQuestion().getMaxValue();
}
}*/
maxScoreSetting = max > 0 ? max : null;
} }
} }
return maxScoreSetting; return maxScoreSetting;
...@@ -291,11 +282,8 @@ public class QTI21AssessmentTestStatisticsController extends BasicController imp ...@@ -291,11 +282,8 @@ public class QTI21AssessmentTestStatisticsController extends BasicController imp
} }
private void printPages(UserRequest ureq) { private void printPages(UserRequest ureq) {
ControllerCreator printControllerCreator = new ControllerCreator() { ControllerCreator printControllerCreator = (lureq, lwControl) -> {
@Override return new QTI21PrintController(lureq, lwControl, resourceResult);
public Controller createController(UserRequest lureq, WindowControl lwControl) {
return new QTI21PrintController(lureq, lwControl, resourceResult);
}
}; };
ControllerCreator layoutCtrlr = BaseFullWebappPopupLayoutFactory.createPrintPopupLayout(printControllerCreator); ControllerCreator layoutCtrlr = BaseFullWebappPopupLayoutFactory.createPrintPopupLayout(printControllerCreator);
openInNewBrowserWindow(ureq, layoutCtrlr); openInNewBrowserWindow(ureq, layoutCtrlr);
......
<div id="$r.getId('d3div')"><div id="$r.getId('d3holder')" class='d3chart' style='width:90%;'></div> <div id="$r.getId('d3div')"><div id="$r.getId('d3holder')" class='d3chart' style=''></div>
<script type='text/javascript'> <script type='text/javascript'>
/* <![CDATA[ */ /* <![CDATA[ */
jQuery(function () { jQuery(function () {
......
<div id="$r.getId('d3div')"><div id="$r.getId('d3holder')" class='d3chart' style='width:90%;'></div> <div id="$r.getId('d3div')"><div id="$r.getId('d3holder')" class='d3chart' style=''></div>
<script type='text/javascript'> <script type='text/javascript'>
/* <![CDATA[ */ /* <![CDATA[ */
jQuery(function () { jQuery(function () {
......
<div class="o_print_break_avoid"> <div class="o_print_break_avoid">
<h4>$r.translate("chart.duration.histogramm")</h4> <h4>$r.translate("chart.duration.histogramm")</h4>
<div id="$r.getId('d3div')"><div id='$r.getId("d3holder")' class='d3chart' style='width:90%;height:300px'></div> <div id="$r.getId('d3div')"><div id='$r.getId("d3holder")' class='d3chart' style='height:300px'></div>
<script type='text/javascript'> <script type='text/javascript'>
/* <![CDATA[ */ /* <![CDATA[ */
jQuery(function () { jQuery(function () {
......
<div class="o_print_break_avoid"> <div class="o_print_break_avoid">
<h4>$r.translate("chart.score.histogramm")</h4> <h4>$r.translate("chart.score.histogramm")</h4>
<div id="$r.getId('d3div')"><div id='$r.getId("d3holder")' class='d3chart' style='width:90%;height:300px'></div> <div id="$r.getId('d3div')"><div id='$r.getId("d3holder")' class='d3chart' style='min-height:300px'></div>
<script type='text/javascript'> <script type='text/javascript'>
/* <![CDATA[ */ /* <![CDATA[ */
jQuery(function () { jQuery(function () {
......
<div id="$r.getId('d3div')"><div id='$r.getId("d3holder")' class='d3chart' style='width:90%;height:300px'></div> <div id="$r.getId('d3div')"><div id='$r.getId("d3holder")' class='d3chart' style='min-height:300px'></div>
<script type='text/javascript'> <script type='text/javascript'>
/* <![CDATA[ */ /* <![CDATA[ */
jQuery(function () { jQuery(function () {
......
...@@ -12,9 +12,9 @@ jQuery(function () { ...@@ -12,9 +12,9 @@ jQuery(function () {
var vis = svg.selectAll('circle') var vis = svg.selectAll('circle')
.data(d); .data(d);
var r = d3.scale.ordinal() var r = d3.scaleBand()
.domain(d.map(function(d) { return d[3]; })) .domain(d.map(function(d) { return d[3]; }))
.rangeRoundBands([50, 0]); .rangeRound([50, 0]);
var node = vis.enter() var node = vis.enter()
.append('g') .append('g')
......
...@@ -65,7 +65,7 @@ public class TimelineComponentRenderer extends DefaultComponentRenderer { ...@@ -65,7 +65,7 @@ public class TimelineComponentRenderer extends DefaultComponentRenderer {
sb.append(" dateFormat: '").append(dateFormat).append("',\n"); sb.append(" dateFormat: '").append(dateFormat).append("',\n");
//values //values
sb.append(" values: ["); sb.append(" values: [");
if(cmp.getPoints() != null && cmp.getPoints().size() > 0) { if(cmp.getPoints() != null && !cmp.getPoints().isEmpty()) {
int numOfPoints = cmp.getPoints().size(); int numOfPoints = cmp.getPoints().size();
for(int i=0; i<numOfPoints; i++) { for(int i=0; i<numOfPoints; i++) {
TimelinePoint point = cmp.getPoints().get(i); TimelinePoint point = cmp.getPoints().get(i);
......
d3.js d3.js
----- -----
Version 3.5.14 Version 4.13.0
http://d3js.org http://d3js.org
\ No newline at end of file
This diff is collapsed.
source diff could not be displayed: it is too large. Options to address this: view the blob.
(function ($) { (function ($) {
$.fn.timeline = function(options) { $.fn.timeline = function(options) {
var settings = this.data("data-oo-timeline"); var settings = this.data("data-oo-timeline");
if(typeof timeline === "undefined") { if(typeof timeline === "undefined") {
settings = $.extend({ settings = $.extend({
parentContainerId:'', parentContainerId:'',
startTime: null, startTime: null,
endTime: null, endTime: null,
dateFormat: '%d.%m.%y', dateFormat: '%d.%m.%y',
dateLabel: 'Date', dateLabel: 'Date',
status: { draft: "Draft", published: "Published", inRevision: "In revision", closed: "Closed", deleted: "Deleted"}, status: { draft: "Draft", published: "Published", inRevision: "In revision", closed: "Closed", deleted: "Deleted"},
values: [] values: []
}, options ); }, options );
this.data("data-oo-timeline", settings); this.data("data-oo-timeline", settings);
createButtons(this, settings); createButtons(this, settings);
createGraph(this, settings); createGraph(this, settings);
timelineItems(this, settings); timelineItems(this, settings);
addHandlers(this, settings); addHandlers(this, settings);
} }
return this; return this;
}; };
...@@ -32,17 +32,16 @@ ...@@ -32,17 +32,16 @@
var slideDelta = (183 * 24 * 60 * 60 * 1000);//six month in milliseconds var slideDelta = (183 * 24 * 60 * 60 * 1000);//six month in milliseconds
var sliding = false; var sliding = false;
createButtons = function($obj, settings) { function createButtons($obj, settings) {
sliding = false; sliding = false;
var parentContainer = jQuery('#' + settings.parentContainerId); var parentContainer = jQuery('#' + settings.parentContainerId);
parentContainer.prepend( "<div class='o_timeline_up'><a href='javascript:;' onclick=''><i class='o_icon o_icon-lg o_icon o_icon_slide_up'> </i></a></div>" ); parentContainer.prepend( "<div class='o_timeline_up'><a href='javascript:;' onclick=''><i class='o_icon o_icon-lg o_icon o_icon_slide_up'> </i></a></div>" );
parentContainer.append("<div class='o_timeline_down'><a href='javascript:;' onclick=''><i class='o_icon o_icon-lg o_icon o_icon_slide_down'> </i></a></div>") parentContainer.append("<div class='o_timeline_down'><a href='javascript:;' onclick=''><i class='o_icon o_icon-lg o_icon o_icon_slide_down'> </i></a></div>")
} };
createGraph = function($obj, settings) { function createGraph ($obj, settings) {
this.parentContainer = jQuery('#' + settings.parentContainerId); this.parentContainer = jQuery('#' + settings.parentContainerId);
var placeholderwidth = parentContainer.width(); var placeholderwidth = parentContainer.width();
$obj.width(placeholderwidth); $obj.width(placeholderwidth);
var placeholderheight = $obj.height(); var placeholderheight = $obj.height();
if(parentContainer.height() < 500) { if(parentContainer.height() < 500) {
...@@ -59,77 +58,72 @@ ...@@ -59,77 +58,72 @@
width = placeholderwidth - margin.left - margin.right; width = placeholderwidth - margin.left - margin.right;
height = placeholderheight - margin.top - margin.bottom; height = placeholderheight - margin.top - margin.bottom;
var formatDate = d3.time.format(settings.dateFormat); var formatDate = d3.timeFormat(settings.dateFormat);
formatDates = function(d) { return formatDate(new Date(d)); }; formatDates = function(d) { return formatDate(new Date(d)); };
x = d3.scale.linear() x = d3.scaleLinear()
.domain([0, 1]) .domain([0, 1])
.range([0, width]); .range([0, width]);
xAxis = d3.svg.axis() xAxis = d3.axisBottom(x)
.scale(x) .ticks(0);
.ticks(0)
.orient('bottom');
var minTime = settings.startTime == null ? d3.min(data, function(d) { return d.time; }) : settings.startTime; var minTime = settings.startTime == null ? d3.min(data, function(d) { return d.time; }) : settings.startTime;
var maxTime = settings.endTime == null ? d3.max(data, function(d) { return d.time; }) : settings.endTime; var maxTime = settings.endTime == null ? d3.max(data, function(d) { return d.time; }) : settings.endTime;
y = d3.scale.linear() y = d3.scaleLinear()
.domain([minTime, maxTime]) .domain([minTime, maxTime])
.range([height, 0]); .range([height, 0]);
yAxis = d3.svg.axis() yAxis = d3.axisLeft(y)
.scale(y)
.orient('left')
.ticks(5) .ticks(5)
.tickFormat(formatDates) .tickFormat(formatDates)
.tickSize(-width, 5); .tickSize(-width, 5);
svg = d3.select('#' + $obj.attr('id')).append('svg') svg = d3.select('#' + $obj.attr('id')).append('svg')
.attr('width', width + margin.left + margin.right) .attr('width', width + margin.left + margin.right)
.attr('height', height + margin.top + margin.bottom) .attr('height', height + margin.top + margin.bottom)
.append('g') .append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'); .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
lineX = d3.scale.linear().domain([0, 1]).range([0, width]); lineX = d3.scaleLinear().domain([0, 1]).range([0, width]);
lineY = d3.scale.linear().domain([0, maxCurveY]).range([height, 0]); lineY = d3.scaleLinear().domain([0, maxCurveY]).range([height, 0]);
curveY = d3.scale.linear().domain([minTime, maxTime]).range([0, maxCurveY]); curveY = d3.scaleLinear().domain([minTime, maxTime]).range([0, maxCurveY]);
lineGenerator = d3.svg.line() lineGenerator = d3.line()
.x(function(d) { return lineX(curvedX(d.y)); }) .x(function(d) { return lineX(curvedX(d.y)); })
.y(function(d) { return lineY(d.y); }) .y(function(d) { return lineY(d.y); })
.interpolate("linear"); .curve(d3.curveLinear);
};
}
addHandlers = function($obj, settings) { function addHandlers($obj, settings) {
jQuery('#' + settings.parentContainerId + " .o_timeline_up a").on('click', function() { jQuery('#' + settings.parentContainerId + " .o_timeline_up a").on('click', function() {
slideUp(); slideUp();
}); });
jQuery('#' + settings.parentContainerId + " .o_timeline_down a").on('click', function() { jQuery('#' + settings.parentContainerId + " .o_timeline_down a").on('click', function() {
slideDown(); slideDown();
}); });
} };
slideUp = function() { function slideUp() {
if(sliding) return; if(sliding) return;
sliding = true; sliding = true;
endTime = endTime + slideDelta; endTime = endTime + slideDelta;
startTime = startTime + slideDelta; startTime = startTime + slideDelta;
updateTimeline(true); updateTimeline(true);
} };
slideDown = function() { function slideDown() {
if(sliding) return; if(sliding) return;
sliding = true; sliding = true;
endTime = endTime - slideDelta; endTime = endTime - slideDelta;
startTime = startTime - slideDelta; startTime = startTime - slideDelta;
updateTimeline(false); updateTimeline(false);
} };
updateTimeline = function(up) { function updateTimeline(up) {
try { try {
curveY.domain([startTime, endTime]); curveY.domain([startTime, endTime]);
y.domain([startTime, endTime]); y.domain([startTime, endTime]);
...@@ -139,20 +133,20 @@ ...@@ -139,20 +133,20 @@
} catch(e) { } catch(e) {
if(window.console) console.log(e); if(window.console) console.log(e);
} }
} };
drawAxis = function() { function drawAxis() {
svg.select('.y').call(yAxis); svg.select('.y').call(yAxis);
} };
drawDots = function(up) { function drawDots(up) {
var dots = svg.selectAll('.dot') var dots = svg.selectAll('.dot')
.data(data, idKey); .data(data, idKey);
dots dots
.transition() .transition()
.duration(1000) .duration(1000)
.ease("linear") .ease(d3.easeLinear)
.attrTween("cx", function(d) { .attrTween("cx", function(d) {
return function(t) { return function(t) {
var delta = (1.0 - t) * slideDelta; var delta = (1.0 - t) * slideDelta;
...@@ -160,14 +154,13 @@ ...@@ -160,14 +154,13 @@
return lineX(curvedX(curveY(time))); return lineX(curvedX(curveY(time)));
}; };
}) })
//.attr("cx", function(d) { return lineX(curvedX(curveY(d.time))); })
.attr("cy", function(d) { return y(d.time); }) .attr("cy", function(d) { return y(d.time); })
.each("end", function() { .on("end", function() {
sliding = false; sliding = false;
}); });
} };
timelineItems = function($obj, settings) { function timelineItems($obj, settings) {
// x-axis // x-axis
svg.append("g") svg.append("g")
.attr("class", "x axis") .attr("class", "x axis")
...@@ -205,9 +198,6 @@ ...@@ -205,9 +198,6 @@
.append('g') .append('g')
.append("circle") .append("circle")
.attr("r", function(d) { return (7 + Math.floor(Math.random() * 5)); }) .attr("r", function(d) { return (7 + Math.floor(Math.random() * 5)); })
//.append("ellipse")
//.attr("rx", function(d) { return (7 + Math.floor(Math.random() * 5)); })
//.attr("ry", function(d) { return (7 + Math.floor(Math.random() * 5)); })
.attr("id", idKey) .attr("id", idKey)
.attr("class", function(d) { return "dot o_pf_status_" + d.status; }) .attr("class", function(d) { return "dot o_pf_status_" + d.status; })
.attr("cx", function(d) { return lineX(curvedX(curveY(d.time))); }) .attr("cx", function(d) { return lineX(curvedX(curveY(d.time))); })
...@@ -229,13 +219,13 @@ ...@@ -229,13 +219,13 @@
} }
}); });
dots.exit(); dots.exit();
} };
idKey = function (d) { function idKey(d) {
return d.id; return d.id;
} };
curvedX = function(y) { function curvedX(y) {
return (1.5 + Math.sin(y * 1.1)) / 3; return (1.5 + Math.sin(y * 1.1)) / 3;
} };
}( jQuery )); }( jQuery ));
\ No newline at end of file
(function(f){f.fn.timeline=function(w){var x=this.data("data-oo-timeline");if(typeof timeline==="undefined"){x=f.extend({parentContainerId:"",startTime:null,endTime:null,dateFormat:"%d.%m.%y",dateLabel:"Date",status:{draft:"Draft",published:"Published",inRevision:"In revision",closed:"Closed",deleted:"Deleted"},values:[]},w);this.data("data-oo-timeline",x);createButtons(this,x);createGraph(this,x);timelineItems(this,x);addHandlers(this,x)}return this};var o;var d=10;var j,i,h,b;var l,r,n;var g,q,p,c,a;var t;var m,e;var v,u;var k=(183*24*60*60*1000);var s=false;createButtons=function(y,w){s=false;var x=jQuery("#"+w.parentContainerId);x.prepend("<div class='o_timeline_up'><a href='javascript:;' onclick=''><i class='o_icon o_icon-lg o_icon o_icon_slide_up'> </i></a></div>");x.append("<div class='o_timeline_down'><a href='javascript:;' onclick=''><i class='o_icon o_icon-lg o_icon o_icon_slide_down'> </i></a></div>")};createGraph=function(C,z){this.parentContainer=jQuery("#"+z.parentContainerId);var B=parentContainer.width();C.width(B);var A=C.height();if(parentContainer.height()<500){A=500}C.height(A);v=z.values;e=z.endTime;m=z.startTime;u=z.status;l={top:10,right:60,bottom:40,left:80};r=B-l.left-l.right;n=A-l.top-l.bottom;var y=d3.time.format(z.dateFormat);t=function(D){return y(new Date(D))};j=d3.scale.linear().domain([0,1]).range([0,r]);h=d3.svg.axis().scale(j).ticks(0).orient("bottom");var w=z.startTime==null?d3.min(v,function(D){return D.time}):z.startTime;var x=z.endTime==null?d3.max(v,function(D){return D.time}):z.endTime;i=d3.scale.linear().domain([w,x]).range([n,0]);b=d3.svg.axis().scale(i).orient("left").ticks(5).tickFormat(t).tickSize(-r,5);o=d3.select("#"+C.attr("id")).append("svg").attr("width",r+l.left+l.right).attr("height",n+l.top+l.bottom).append("g").attr("transform","translate("+l.left+","+l.top+")");q=d3.scale.linear().domain([0,1]).range([0,r]);p=d3.scale.linear().domain([0,d]).range([n,0]);a=d3.scale.linear().domain([w,x]).range([0,d]);g=d3.svg.line().x(function(D){return q(curvedX(D.y))}).y(function(D){return p(D.y)}).interpolate("linear")};addHandlers=function(x,w){jQuery("#"+w.parentContainerId+" .o_timeline_up a").on("click",function(){slideUp()});jQuery("#"+w.parentContainerId+" .o_timeline_down a").on("click",function(){slideDown()})};slideUp=function(){if(s){return}s=true;e=e+k;m=m+k;updateTimeline(true)};slideDown=function(){if(s){return}s=true;e=e-k;m=m-k;updateTimeline(false)};updateTimeline=function(w){try{a.domain([m,e]);i.domain([m,e]);drawAxis();drawDots(w)}catch(x){if(window.console){console.log(x)}}};drawAxis=function(){o.select(".y").call(b)};drawDots=function(w){var x=o.selectAll(".dot").data(v,idKey);x.transition().duration(1000).ease("linear").attrTween("cx",function(y){return function(z){var B=(1-z)*k;var A=w?(y.time+B):(y.time-B);return q(curvedX(a(A)))}}).attr("cy",function(y){return i(y.time)}).each("end",function(){s=false})};timelineItems=function(B,y){o.append("g").attr("class","x axis").attr("transform","translate(0,"+n+")").call(h);o.append("g").attr("class","y axis").call(b).append("text").attr("class","label").attr("transform","rotate(-90)").attr("y",6).attr("dy",".71em").attr("dx","-.71em").style("text-anchor","end").text("Date");var A=[];for(var x=0;x<(d*20);x++){A.push({y:(x==0?0:x/20)})}var w=o.append("path").data([A]).attr("d",g).attr("class","o_timeline_curve");var z=o.selectAll(".dot").data(v,idKey);z.enter().append("g").append("circle").attr("r",function(C){return(7+Math.floor(Math.random()*5))}).attr("id",idKey).attr("class",function(C){return"dot o_pf_status_"+C.status}).attr("cx",function(C){return q(curvedX(a(C.time)))}).attr("cy",function(C){return i(C.time)});jQuery("g .dot").tooltip({html:true,container:"body",title:function(){var F=jQuery(this).attr("id");var E;for(var D=v.length;D-->0;){if(F==v[D].id){E=v[D]}}var C=u[E.status];return"<p>"+E.title+"<br>Status: "+C+"</p>"}});z.exit()};idKey=function(w){return w.id};curvedX=function(w){return(1.5+Math.sin(w*1.1))/3}}(jQuery)); (function(h){h.fn.timeline=function(x){var y=this.data("data-oo-timeline");if(typeof timeline==="undefined"){y=h.extend({parentContainerId:"",startTime:null,endTime:null,dateFormat:"%d.%m.%y",dateLabel:"Date",status:{draft:"Draft",published:"Published",inRevision:"In revision",closed:"Closed",deleted:"Deleted"},values:[]},x);this.data("data-oo-timeline",y);j(this,y);r(this,y);D(this,y);p(this,y)}return this};var w;var d=10;var q,n,l,b;var t,B,v;var i,A,z,c,a;var E;var u,g;var I,G;var s=(183*24*60*60*1000);var C=false;function j(J,x){C=false;var y=jQuery("#"+x.parentContainerId);y.prepend("<div class='o_timeline_up'><a href='javascript:;' onclick=''><i class='o_icon o_icon-lg o_icon o_icon_slide_up'> </i></a></div>");y.append("<div class='o_timeline_down'><a href='javascript:;' onclick=''><i class='o_icon o_icon-lg o_icon o_icon_slide_down'> </i></a></div>")}function r(N,K){this.parentContainer=jQuery("#"+K.parentContainerId);var M=parentContainer.width();N.width(M);var L=N.height();if(parentContainer.height()<500){L=500}N.height(L);I=K.values;g=K.endTime;u=K.startTime;G=K.status;t={top:10,right:60,bottom:40,left:80};B=M-t.left-t.right;v=L-t.top-t.bottom;var J=d3.timeFormat(K.dateFormat);E=function(O){return J(new Date(O))};q=d3.scaleLinear().domain([0,1]).range([0,B]);l=d3.axisBottom(q).ticks(0);var x=K.startTime==null?d3.min(I,function(O){return O.time}):K.startTime;var y=K.endTime==null?d3.max(I,function(O){return O.time}):K.endTime;n=d3.scaleLinear().domain([x,y]).range([v,0]);b=d3.axisLeft(n).ticks(5).tickFormat(E).tickSize(-B,5);w=d3.select("#"+N.attr("id")).append("svg").attr("width",B+t.left+t.right).attr("height",v+t.top+t.bottom).append("g").attr("transform","translate("+t.left+","+t.top+")");A=d3.scaleLinear().domain([0,1]).range([0,B]);z=d3.scaleLinear().domain([0,d]).range([v,0]);a=d3.scaleLinear().domain([x,y]).range([0,d]);i=d3.line().x(function(O){return A(o(O.y))}).y(function(O){return z(O.y)}).curve(d3.curveLinear)}function p(y,x){jQuery("#"+x.parentContainerId+" .o_timeline_up a").on("click",function(){F()});jQuery("#"+x.parentContainerId+" .o_timeline_down a").on("click",function(){f()})}function F(){if(C){return}C=true;g=g+s;u=u+s;k(true)}function f(){if(C){return}C=true;g=g-s;u=u-s;k(false)}function k(x){try{a.domain([u,g]);n.domain([u,g]);e();m(x)}catch(y){if(window.console){console.log(y)}}}function e(){w.select(".y").call(b)}function m(x){var y=w.selectAll(".dot").data(I,H);y.transition().duration(1000).ease(d3.easeLinear).attrTween("cx",function(J){return function(K){var M=(1-K)*s;var L=x?(J.time+M):(J.time-M);return A(o(a(L)))}}).attr("cy",function(J){return n(J.time)}).on("end",function(){C=false})}function D(M,J){w.append("g").attr("class","x axis").attr("transform","translate(0,"+v+")").call(l);w.append("g").attr("class","y axis").call(b).append("text").attr("class","label").attr("transform","rotate(-90)").attr("y",6).attr("dy",".71em").attr("dx","-.71em").style("text-anchor","end").text("Date");var L=[];for(var y=0;y<(d*20);y++){L.push({y:(y==0?0:y/20)})}var x=w.append("path").data([L]).attr("d",i).attr("class","o_timeline_curve");var K=w.selectAll(".dot").data(I,H);K.enter().append("g").append("circle").attr("r",function(N){return(7+Math.floor(Math.random()*5))}).attr("id",H).attr("class",function(N){return"dot o_pf_status_"+N.status}).attr("cx",function(N){return A(o(a(N.time)))}).attr("cy",function(N){return n(N.time)});jQuery("g .dot").tooltip({html:true,container:"body",title:function(){var Q=jQuery(this).attr("id");var P;for(var O=I.length;O-->0;){if(Q==I[O].id){P=I[O]}}var N=G[P.status];return"<p>"+P.title+"<br>Status: "+N+"</p>"}});K.exit()}function H(x){return x.id}function o(x){return(1.5+Math.sin(x*1.1))/3}}(jQuery));
\ No newline at end of file \ No newline at end of file
...@@ -44,7 +44,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -44,7 +44,7 @@ import org.springframework.beans.factory.annotation.Autowired;
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
* *
*/ */
public class AccessTransactionTest extends OlatTestCase { public class AccessTransactionGatling extends OlatTestCase {
@Autowired @Autowired
private DB dbInstance; private DB dbInstance;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment