UNPKG

jetsum_dhtmlx_gantt

Version:

An open source JavaScript Gantt chart that helps you illustrate a project schedule in a nice-looking chart.

164 lines (146 loc) 5.19 kB
<!DOCTYPE html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>Tasks grouping</title> <script src="../../codebase/dhtmlxgantt.js?v=7.1.9"></script> <link rel="stylesheet" href="../../codebase/dhtmlxgantt.css?v=7.1.9"> <link rel="stylesheet" href="../common/controls_styles.css?v=7.1.9"> <style> html, body { height: 100%; padding: 0px; margin: 0px; overflow: hidden; } .summary-row, .summary-row.odd { background-color: #EEEEEE; font-weight: bold; } .gantt_grid div, .gantt_data_area div { font-size: 12px; } .summary-bar { opacity: 0.4; } </style> </head> <body> <div class="gantt_control"> <input type='button' id='default' onclick="showGroups()" value="Tree"> <input type='button' id='priority' onclick="showGroups('priority')" value="Group by priority"> <input type='button' id='user' onclick="showGroups('user')" value="Group by owner"> <input type='button' id='stage' onclick="showGroups('stage')" value="Group by stage"> </div> <div id="gantt_here" style='width:100%; height:calc(100vh - 52px);'></div> <script type="text/javascript"> gantt.plugins({ grouping: true }); // test data var tasks = { data: [ {id: 1, text: "Task #1", start_date: "02-04-2018 00:00", duration: 3, priority: 3, stage: 1, user: 3, open: true, parent: 0}, {id: 5, text: "Task #1.1", start_date: "05-04-2018 00:00", duration: 4, parent: 1, open: true, priority: 1, stage: 1, user: 1}, {id: 6, text: "Task #1.2", start_date: "11-04-2018 00:00", duration: 6, parent: 1, open: true, priority: 2, stage: 2, user: 3}, {id: 2, text: "Task #2", start_date: "11-04-2018 00:00", duration: 2, priority: 1, stage: 3, user: 0, open: true, parent: 0}, {id: 7, text: "Task #2.1", start_date: "13-04-2018 00:00", duration: 2, parent: 2, open: true, priority: 3, stage: 2, user: 2}, {id: 3, text: "Task #3", start_date: "11-04-2018 00:00", duration: 6, priority: 2, stage: 2, user: 1, open: true, parent: 0}, {id: 8, text: "Task #3.1", start_date: "09-04-2018 00:00", duration: 3, parent: 3, open: true, priority: 1, stage: 1, user: 3}, {id: 9, text: "Task #3.2", start_date: "12-04-2018 00:00", duration: 2, parent: 3, open: true, priority: 3, stage: 3, user: 1}, {id: 10, text: "Task #3.3", start_date: "17-04-2018 00:00", duration: 2, parent: 3, open: true, priority: 2, stage: 2, user: 0} ], links: [ {source: "1", target: "5", type: "0"}, {source: "5", target: "8", type: "0"}, {source: "3", target: "7", type: "0"}, {source: "6", target: "7", type: "0"}, {source: "2", target: "10", type: "0"} ] }; gantt.serverList("stage", [ {key: 1, label: "Planning"}, {key: 2, label: "Dev"}, {key: 3, label: "Testing"} ]); gantt.serverList("user", [ {key: 0, label: "N/A"}, {key: 1, label: "John"}, {key: 2, label: "Mike"}, {key: 3, label: "Anna"} ]); gantt.serverList("priority", [ {key: 1, label: "High"}, {key: 2, label: "Normal"}, {key: 3, label: "Low"} ]); // end text data gantt.config.order_branch = true; gantt.config.grid_width = 420; gantt.config.row_height = 24; gantt.config.grid_resize = true; gantt.i18n.setLocale({ labels:{ column_priority: 'Priority', section_priority: 'Priority', column_owner: 'Owner', section_owner: 'Owner', column_stage: 'Stage', section_stage: 'Stage', section_resources: 'Resources', } }); function byId(list, id) { for (var i = 0; i < list.length; i++) { if (list[i].key == id) return list[i].label || ""; } return ""; } gantt.config.columns = [ { name: "text", label: "Task name", tree: true, width: '*' }, { name: "priority", width: 80, align: "center", template: function (item) { return byId(gantt.serverList('priority'), item.priority) }}, { name: "owner", width: 80, align: "center", template: function (item) { return byId(gantt.serverList('user'), item.user) }}, { name: "stage", width: 80, align: "center", template: function (item) { return byId(gantt.serverList('stage'), item.stage) }}, { name: "add", width: 40} ]; gantt.config.lightbox.sections = [ {name: "description", height: 38, map_to: "text", type: "textarea", focus: true}, {name: "priority", height: 22, map_to: "priority", type: "select", options: gantt.serverList("priority")}, {name: "owner", height: 22, map_to: "user", type: "select", options: gantt.serverList("user")}, {name: "stage", height: 22, map_to: "stage", type: "select", options: gantt.serverList("stage")}, {name: "time", type: "duration", map_to: "auto"} ]; gantt.templates.grid_row_class = gantt.templates.task_row_class = function (start, end, task) { if (task.$virtual) return "summary-row" }; gantt.templates.task_class = function (start, end, task) { if (task.$virtual) return "summary-bar"; }; gantt.init("gantt_here"); gantt.sort("start_date"); gantt.parse(tasks); function showGroups(listname) { if (listname) { gantt.groupBy({ groups: gantt.serverList(listname), relation_property: listname, group_id: "key", group_text: "label" }); gantt.sort("start_date"); } else { gantt.groupBy(false); } } </script> </body>