summaryrefslogtreecommitdiff
path: root/assets/js/src
diff options
context:
space:
mode:
Diffstat (limited to 'assets/js/src')
-rw-r--r--assets/js/src/analytic.js206
-rw-r--r--assets/js/src/base.js9
-rw-r--r--assets/js/src/board.js73
3 files changed, 197 insertions, 91 deletions
diff --git a/assets/js/src/analytic.js b/assets/js/src/analytic.js
index bec4d76e..a5df0ac6 100644
--- a/assets/js/src/analytic.js
+++ b/assets/js/src/analytic.js
@@ -6,6 +6,9 @@
var metrics = $("#chart").data("metrics");
var columns = [];
var groups = [];
+ var categories = [];
+ var inputFormat = d3.time.format("%Y-%m-%d");
+ var outputFormat = d3.time.format($("#chart").data("date-format"));
for (var i = 0; i < metrics.length; i++) {
@@ -19,7 +22,12 @@
}
}
else {
+
columns[j].push(metrics[i][j]);
+
+ if (j == 0) {
+ categories.push(outputFormat(inputFormat.parse(metrics[i][j])));
+ }
}
}
}
@@ -27,16 +35,13 @@
c3.generate({
data: {
columns: columns,
- x: metrics[0][0],
type: 'area-spline',
groups: [groups]
},
axis: {
x: {
- type: 'timeseries',
- tick: {
- format: $("#chart").data("date-format")
- }
+ type: 'category',
+ categories: categories
}
}
});
@@ -47,6 +52,9 @@
{
var metrics = $("#chart").data("metrics");
var columns = [[$("#chart").data("label-total")]];
+ var categories = [];
+ var inputFormat = d3.time.format("%Y-%m-%d");
+ var outputFormat = d3.time.format($("#chart").data("date-format"));
for (var i = 0; i < metrics.length; i++) {
@@ -66,21 +74,22 @@
columns[0][i] += metrics[i][j];
}
+
+ if (j == 0) {
+ categories.push(outputFormat(inputFormat.parse(metrics[i][j])));
+ }
}
}
}
c3.generate({
data: {
- columns: columns,
- x: metrics[0][0]
+ columns: columns
},
axis: {
x: {
- type: 'timeseries',
- tick: {
- format: $("#chart").data("date-format")
- }
+ type: 'category',
+ categories: categories
}
}
});
@@ -125,11 +134,13 @@
// Draw budget chart
function drawBudget()
{
+ var categories = [];
var metrics = $("#chart").data("metrics");
var labels = $("#chart").data("labels");
+ var inputFormat = d3.time.format("%Y-%m-%d");
+ var outputFormat = d3.time.format($("#chart").data("date-format"));
var columns = [
- [labels["date"]],
[labels["in"]],
[labels["left"]],
[labels["out"]]
@@ -141,30 +152,178 @@
colors[labels["out"]] = '#DF3A01';
for (var i = 0; i < metrics.length; i++) {
- columns[0].push(metrics[i]["date"]);
- columns[1].push(metrics[i]["in"]);
- columns[2].push(metrics[i]["left"]);
- columns[3].push(metrics[i]["out"]);
+ categories.push(outputFormat(inputFormat.parse(metrics[i]["date"])));
+ columns[0].push(metrics[i]["in"]);
+ columns[1].push(metrics[i]["left"]);
+ columns[2].push(metrics[i]["out"]);
}
c3.generate({
data: {
- x: columns[0][0],
columns: columns,
colors: colors,
type : 'bar'
},
+ bar: {
+ width: {
+ ratio: 0.25
+ }
+ },
+ grid: {
+ x: {
+ show: true
+ },
+ y: {
+ show: true
+ }
+ },
axis: {
x: {
- type: 'timeseries',
+ type: 'category',
+ categories: categories
+ }
+ }
+ });
+ }
+
+ // Draw chart for average time spent into each column
+ function drawAvgTimeColumn()
+ {
+ var metrics = $("#chart").data("metrics");
+ var plots = [$("#chart").data("label")];
+ var categories = [];
+
+ for (var column_id in metrics) {
+ plots.push(metrics[column_id].average);
+ categories.push(metrics[column_id].title);
+ }
+
+ c3.generate({
+ data: {
+ columns: [plots],
+ type: 'bar'
+ },
+ bar: {
+ width: {
+ ratio: 0.5
+ }
+ },
+ axis: {
+ x: {
+ type: 'category',
+ categories: categories
+ },
+ y: {
tick: {
- format: $("#chart").data("date-format")
+ format: formatDuration
}
}
+ },
+ legend: {
+ show: false
}
});
}
+ // Draw chart for average time spent into each column
+ function drawTaskTimeColumn()
+ {
+ var metrics = $("#chart").data("metrics");
+ var plots = [$("#chart").data("label")];
+ var categories = [];
+
+ for (var i = 0; i < metrics.length; i++) {
+ plots.push(metrics[i].time_spent);
+ categories.push(metrics[i].title);
+ }
+
+ c3.generate({
+ data: {
+ columns: [plots],
+ type: 'bar'
+ },
+ bar: {
+ width: {
+ ratio: 0.5
+ }
+ },
+ axis: {
+ x: {
+ type: 'category',
+ categories: categories
+ },
+ y: {
+ tick: {
+ format: formatDuration
+ }
+ }
+ },
+ legend: {
+ show: false
+ }
+ });
+ }
+
+ // Draw lead and cycle time for the project
+ function drawLeadAndCycleTime()
+ {
+ var metrics = $("#chart").data("metrics");
+ var cycle = [$("#chart").data("label-cycle")];
+ var lead = [$("#chart").data("label-lead")];
+ var categories = [];
+
+ var types = {};
+ types[$("#chart").data("label-cycle")] = 'area';
+ types[$("#chart").data("label-lead")] = 'area-spline';
+
+ var colors = {};
+ colors[$("#chart").data("label-lead")] = '#afb42b';
+ colors[$("#chart").data("label-cycle")] = '#4e342e';
+
+ for (var i = 0; i < metrics.length; i++) {
+ cycle.push(parseInt(metrics[i].avg_cycle_time));
+ lead.push(parseInt(metrics[i].avg_lead_time));
+ categories.push(metrics[i].day);
+ }
+
+ c3.generate({
+ data: {
+ columns: [
+ lead,
+ cycle
+ ],
+ types: types,
+ colors: colors
+ },
+ axis: {
+ x: {
+ type: 'category',
+ categories: categories
+ },
+ y: {
+ tick: {
+ format: formatDuration
+ }
+ }
+ }
+ });
+ }
+
+ function formatDuration(d)
+ {
+ if (d >= 86400) {
+ return Math.round(d/86400) + "d";
+ }
+ else if (d >= 3600) {
+ return Math.round(d/3600) + "h";
+ }
+ else if (d >= 60) {
+ return Math.round(d/60) + "m";
+ }
+
+ return d + "s";
+ }
+
jQuery(document).ready(function() {
if (Kanboard.Exists("analytic-task-repartition")) {
@@ -182,6 +341,15 @@
else if (Kanboard.Exists("budget-chart")) {
drawBudget();
}
+ else if (Kanboard.Exists("analytic-avg-time-column")) {
+ drawAvgTimeColumn();
+ }
+ else if (Kanboard.Exists("analytic-task-time-column")) {
+ drawTaskTimeColumn();
+ }
+ else if (Kanboard.Exists("analytic-lead-cycle-time")) {
+ drawLeadAndCycleTime();
+ }
});
})();
diff --git a/assets/js/src/base.js b/assets/js/src/base.js
index 2540f084..531488c9 100644
--- a/assets/js/src/base.js
+++ b/assets/js/src/base.js
@@ -277,6 +277,15 @@ var Kanboard = (function() {
constrainInput: false
});
+ // Datetime picker
+ $(".form-datetime").datetimepicker({
+ controlType: 'select',
+ oneLine: true,
+ dateFormat: 'yy-mm-dd',
+ // timeFormat: 'h:mm tt',
+ constrainInput: false
+ });
+
// Markdown Preview for textareas
$("#markdown-preview").click(Kanboard.MarkdownPreview);
$("#markdown-write").click(Kanboard.MarkdownWriter);
diff --git a/assets/js/src/board.js b/assets/js/src/board.js
index 01a16d59..d86610ef 100644
--- a/assets/js/src/board.js
+++ b/assets/js/src/board.js
@@ -20,7 +20,7 @@
});
Mousetrap.bind("s", function() {
- stack_toggle();
+ window.location = $(".board-display-mode").attr("href");
});
Mousetrap.bind("c", function() {
@@ -28,74 +28,6 @@
});
}
- // Collapse/Expand tasks
- function stack_load_events()
- {
- $(".filter-expand-link").click(function(e) {
- e.preventDefault();
- stack_expand();
- Kanboard.SetStorageItem(stack_key(), "expanded");
- });
-
- $(".filter-collapse-link").click(function(e) {
- e.preventDefault();
- stack_collapse();
- Kanboard.SetStorageItem(stack_key(), "collapsed");
- });
-
- stack_show();
- }
-
- function stack_key()
- {
- var projectId = $('#board').data('project-id');
- return "board_stacking_" + projectId;
- }
-
- function stack_collapse()
- {
- $(".filter-collapse").hide();
- $(".task-board-collapsed").show();
-
- $(".filter-expand").show();
- $(".task-board-expanded").hide();
- }
-
- function stack_expand()
- {
- $(".filter-collapse").show();
- $(".task-board-collapsed").hide();
-
- $(".filter-expand").hide();
- $(".task-board-expanded").show();
- }
-
- function stack_toggle()
- {
- var state = Kanboard.GetStorageItem(stack_key()) || "expanded";
-
- if (state === "expanded") {
- stack_collapse();
- Kanboard.SetStorageItem(stack_key(), "collapsed");
- }
- else {
- stack_expand();
- Kanboard.SetStorageItem(stack_key(), "expanded");
- }
- }
-
- function stack_show()
- {
- var state = Kanboard.GetStorageItem(stack_key()) || "expanded";
-
- if (state === "expanded") {
- stack_expand();
- }
- else {
- stack_collapse();
- }
- }
-
// Setup the board
function board_load_events()
{
@@ -243,7 +175,6 @@
$("#main").append(data);
Kanboard.InitAfterAjax();
board_load_events();
- stack_show();
compactview_reload();
}
});
@@ -263,7 +194,6 @@
Kanboard.InitAfterAjax();
board_unload_events();
board_load_events();
- stack_show();
compactview_reload();
}
}
@@ -312,7 +242,6 @@
if (Kanboard.Exists("board")) {
board_load_events();
- stack_load_events();
compactview_load_events();
keyboard_shortcuts();
}