Yusuf
2 years ago
10 changed files with 0 additions and 753 deletions
@ -1,246 +0,0 @@
|
||||
{ |
||||
"data": [ |
||||
{ |
||||
"id": 1, |
||||
"start_date": "2018-04-01 00:00:00", |
||||
"duration": 5, |
||||
"text": "Project #1", |
||||
"progress": 0.8, |
||||
"parent": 0, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 2, |
||||
"start_date": "2018-04-06 00:00:00", |
||||
"duration": 4, |
||||
"text": "Task #1", |
||||
"progress": 0.5, |
||||
"parent": 1, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 5, |
||||
"start_date": "2018-04-05 00:00:00", |
||||
"duration": 5, |
||||
"text": "Task #1.1", |
||||
"progress": 0.34, |
||||
"parent": 2, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 6, |
||||
"start_date": "2018-04-11 00:00:00", |
||||
"duration": 4, |
||||
"text": "Task #1.2", |
||||
"progress": 0.491477, |
||||
"parent": 2, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 3, |
||||
"start_date": "2018-04-03 00:00:00", |
||||
"duration": 6, |
||||
"text": "Task #2", |
||||
"progress": 0.7, |
||||
"parent": 1, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 7, |
||||
"start_date": "2018-04-07 00:00:00", |
||||
"duration": 5, |
||||
"text": "Task #2.1", |
||||
"progress": 0.2, |
||||
"parent": 3, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 8, |
||||
"start_date": "2018-04-06 00:00:00", |
||||
"duration": 4, |
||||
"text": "Task #2.2", |
||||
"progress": 0.9, |
||||
"parent": 3, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 4, |
||||
"start_date": "2018-04-07 00:00:00", |
||||
"duration": 2, |
||||
"text": "Task #3", |
||||
"progress": 0, |
||||
"parent": 1, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 9, |
||||
"start_date": "2018-04-06 00:00:00", |
||||
"duration": 5, |
||||
"text": "Task #3.1", |
||||
"progress": 1, |
||||
"parent": 4, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 10, |
||||
"start_date": "2018-04-06 00:00:00", |
||||
"duration": 3, |
||||
"text": "Task #3.2", |
||||
"progress": 0, |
||||
"parent": 4, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 11, |
||||
"start_date": "2018-04-06 00:00:00", |
||||
"duration": 4, |
||||
"text": "Task #3.3", |
||||
"progress": 0.33, |
||||
"parent": 4, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 12, |
||||
"start_date": "2018-04-02 00:00:00", |
||||
"duration": 8, |
||||
"text": "Project #2", |
||||
"progress": 0, |
||||
"parent": 0, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 13, |
||||
"start_date": "2018-04-02 00:00:00", |
||||
"duration": 10, |
||||
"text": "Task #1", |
||||
"progress": 0.2, |
||||
"parent": 12, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 14, |
||||
"start_date": "2018-04-04 00:00:00", |
||||
"duration": 4, |
||||
"text": "Task #2", |
||||
"progress": 0.9, |
||||
"parent": 12, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 18, |
||||
"start_date": "2018-04-05 00:00:00", |
||||
"duration": 5, |
||||
"text": "Task #2.1", |
||||
"progress": 0.3, |
||||
"parent": 14, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 19, |
||||
"start_date": "2018-04-05 00:00:00", |
||||
"duration": 6, |
||||
"text": "Task #2.2", |
||||
"progress": 0.453052, |
||||
"parent": 14, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 20, |
||||
"start_date": "2018-04-05 00:00:00", |
||||
"duration": 4, |
||||
"text": "Task #2.3", |
||||
"progress": 0.512605, |
||||
"parent": 14, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 21, |
||||
"start_date": "2018-04-05 00:00:00", |
||||
"duration": 6, |
||||
"text": "Task #2.4", |
||||
"progress": 0.7, |
||||
"parent": 14, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 15, |
||||
"start_date": "2018-04-05 00:00:00", |
||||
"duration": 3, |
||||
"text": "Task #3", |
||||
"progress": 0.6, |
||||
"parent": 12, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 16, |
||||
"start_date": "2018-04-01 00:00:00", |
||||
"duration": 3, |
||||
"text": "Task #4", |
||||
"progress": 0.214286, |
||||
"parent": 12, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 22, |
||||
"start_date": "2018-04-05 00:00:00", |
||||
"duration": 7, |
||||
"text": "Task #4.1", |
||||
"progress": 1, |
||||
"parent": 16, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 23, |
||||
"start_date": "2018-04-05 00:00:00", |
||||
"duration": 5, |
||||
"text": "Task #4.2", |
||||
"progress": 1, |
||||
"parent": 16, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 24, |
||||
"start_date": "2018-04-05 00:00:00", |
||||
"duration": 5, |
||||
"text": "Task #4.3", |
||||
"progress": 0, |
||||
"parent": 16, |
||||
"open": 0 |
||||
}, |
||||
{ |
||||
"id": 17, |
||||
"start_date": "2018-04-06 00:00:00", |
||||
"duration": 6, |
||||
"text": "Task #5", |
||||
"progress": 0.5, |
||||
"parent": 12, |
||||
"open": 0 |
||||
} |
||||
], |
||||
"links": [ |
||||
{ |
||||
"id": 1, |
||||
"source": 1, |
||||
"target": 2, |
||||
"type": "0" |
||||
}, |
||||
{ |
||||
"id": 2, |
||||
"source": 1, |
||||
"target": 3, |
||||
"type": "0" |
||||
}, |
||||
{ |
||||
"id": 3, |
||||
"source": 1, |
||||
"target": 4, |
||||
"type": "0" |
||||
}, |
||||
{ |
||||
"id": 4, |
||||
"source": 2, |
||||
"target": 6, |
||||
"type": "0" |
||||
} |
||||
] |
||||
} |
@ -1,230 +0,0 @@
|
||||
{ |
||||
"data": [ |
||||
{ |
||||
"id": 1, |
||||
"text": "Project #1", |
||||
"start_date": "2018-04-01 00:00", |
||||
"duration": 11, |
||||
"progress": 0.6, |
||||
"open": true, |
||||
"users": [ |
||||
"John", |
||||
"Mike", |
||||
"Anna" |
||||
], |
||||
"priority": "2", |
||||
"end_date": "2018-04-12 00:00", |
||||
"parent": 0, |
||||
"usage": [ |
||||
{ |
||||
"id": "1", |
||||
"value": "222" |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
"id": 2, |
||||
"text": "Task #1", |
||||
"start_date": "2018-04-03 00:00", |
||||
"duration": 5, |
||||
"parent": "1", |
||||
"progress": 1, |
||||
"open": true, |
||||
"users": [ |
||||
"John", |
||||
"Mike" |
||||
], |
||||
"priority": "1", |
||||
"end_date": "2018-04-08 00:00" |
||||
}, |
||||
{ |
||||
"id": 3, |
||||
"text": "Task #2", |
||||
"start_date": "2018-04-02 00:00", |
||||
"duration": 7, |
||||
"parent": "1", |
||||
"progress": 0.5, |
||||
"open": true, |
||||
"users": [ |
||||
"Anna" |
||||
], |
||||
"priority": "1", |
||||
"end_date": "2018-04-09 00:00" |
||||
}, |
||||
{ |
||||
"id": 7, |
||||
"text": "Task #2.1", |
||||
"start_date": "2018-04-03 00:00", |
||||
"duration": 2, |
||||
"parent": "3", |
||||
"progress": 1, |
||||
"open": true, |
||||
"users": [ |
||||
"Mike", |
||||
"Anna" |
||||
], |
||||
"priority": "2", |
||||
"end_date": "2018-04-05 00:00", |
||||
"usage": [ |
||||
{ |
||||
"id": "3", |
||||
"value": "1" |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
"id": 8, |
||||
"text": "Task #2.2", |
||||
"start_date": "2018-04-06 00:00", |
||||
"duration": 3, |
||||
"parent": "3", |
||||
"progress": 0.8, |
||||
"open": true, |
||||
"users": [ |
||||
"Anna" |
||||
], |
||||
"priority": "3", |
||||
"end_date": "2018-04-09 00:00" |
||||
}, |
||||
{ |
||||
"id": 9, |
||||
"text": "Task #2.3", |
||||
"start_date": "2018-04-10 00:00", |
||||
"duration": 4, |
||||
"parent": "3", |
||||
"progress": 0.2, |
||||
"open": true, |
||||
"users": [ |
||||
"Mike", |
||||
"Anna" |
||||
], |
||||
"priority": "1", |
||||
"end_date": "2018-04-14 00:00", |
||||
"usage": [ |
||||
{ |
||||
"id": "2", |
||||
"value": "50" |
||||
}, |
||||
{ |
||||
"id": "1", |
||||
"value": "2" |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
"id": 10, |
||||
"text": "Task #2.4", |
||||
"start_date": "2018-04-10 00:00", |
||||
"duration": 4, |
||||
"parent": "3", |
||||
"progress": 0, |
||||
"open": true, |
||||
"users": [ |
||||
"John", |
||||
"Mike" |
||||
], |
||||
"priority": "1", |
||||
"end_date": "2018-04-14 00:00" |
||||
}, |
||||
{ |
||||
"id": 4, |
||||
"text": "Task #3", |
||||
"start_date": "2018-04-02 00:00", |
||||
"duration": 6, |
||||
"parent": "1", |
||||
"progress": 0.8, |
||||
"open": true, |
||||
"users": [ |
||||
"Mike", |
||||
"Anna" |
||||
], |
||||
"priority": "2", |
||||
"end_date": "2018-04-08 00:00" |
||||
}, |
||||
{ |
||||
"id": 5, |
||||
"text": "Task #4", |
||||
"start_date": "2018-04-02 00:00", |
||||
"duration": 5, |
||||
"parent": "1", |
||||
"progress": 0.2, |
||||
"open": true, |
||||
"users": [ |
||||
"John" |
||||
], |
||||
"priority": "3", |
||||
"end_date": "2018-04-07 00:00" |
||||
}, |
||||
{ |
||||
"id": 11, |
||||
"text": "Task #4.1", |
||||
"start_date": "2018-04-03 00:00", |
||||
"duration": 4, |
||||
"parent": "5", |
||||
"progress": 0.5, |
||||
"open": true, |
||||
"users": [ |
||||
"John", |
||||
"Anna" |
||||
], |
||||
"priority": "3", |
||||
"end_date": "2018-04-07 00:00" |
||||
}, |
||||
{ |
||||
"id": 12, |
||||
"text": "Task #4.2", |
||||
"start_date": "2018-04-03 00:00", |
||||
"duration": 4, |
||||
"parent": "5", |
||||
"progress": 0.1, |
||||
"open": true, |
||||
"users": [ |
||||
"John" |
||||
], |
||||
"priority": "3", |
||||
"end_date": "2018-04-07 00:00" |
||||
}, |
||||
{ |
||||
"id": 13, |
||||
"text": "Task #4.3", |
||||
"start_date": "2018-04-03 00:00", |
||||
"duration": 5, |
||||
"parent": "5", |
||||
"progress": 0, |
||||
"open": true, |
||||
"users": [ |
||||
"Anna" |
||||
], |
||||
"priority": "3", |
||||
"end_date": "2018-04-08 00:00" |
||||
}, |
||||
{ |
||||
"id": 6, |
||||
"text": "Task #5", |
||||
"start_date": "2018-04-02 00:00", |
||||
"duration": 7, |
||||
"parent": "1", |
||||
"progress": 0, |
||||
"open": true, |
||||
"users": [ |
||||
"John" |
||||
], |
||||
"priority": "2", |
||||
"end_date": "2018-04-09 00:00" |
||||
} |
||||
], |
||||
"links": [ |
||||
{ |
||||
"id": "10", |
||||
"source": "11", |
||||
"target": "12", |
||||
"type": "1" |
||||
}, |
||||
{ |
||||
"id": "11", |
||||
"source": "11", |
||||
"target": "13", |
||||
"type": "1" |
||||
} |
||||
] |
||||
} |
@ -1,6 +0,0 @@
|
||||
const backend = require("./server"); |
||||
|
||||
const host = process.env.HOST || "127.0.0.1"; |
||||
const port = process.env.PORT || "9200"; |
||||
|
||||
backend(host, port); |
@ -1,16 +0,0 @@
|
||||
module.exports = { |
||||
data: function(task) { |
||||
task.open = task.open * 1; |
||||
task.progress = task.progress * 1; |
||||
task.duration = task.duration * 1; |
||||
task.id = task.id * 1; |
||||
task.parent = task.parent * 1; |
||||
return task; |
||||
}, |
||||
links: function(link){ |
||||
link.id = link.id * 1; |
||||
link.source = link.source * 1; |
||||
link.source = link.source * 1; |
||||
return link; |
||||
} |
||||
}; |
@ -1,16 +0,0 @@
|
||||
{ |
||||
"name": "dhtmlx-gantt-samples", |
||||
"version": "1.0.0", |
||||
"description": "Simple backend and REST api for dhtmlx gantt samples", |
||||
"main": "./index.js", |
||||
"scripts": { |
||||
"start": "node ./index.js" |
||||
}, |
||||
"author": "DHTMLX", |
||||
"license": "DHTMLX Evaluation License", |
||||
"dependencies": { |
||||
"body-parser": "^1.18.3", |
||||
"express": "^4.16.4", |
||||
"striptags": "^3.1.1" |
||||
} |
||||
} |
@ -1,92 +0,0 @@
|
||||
const actions = { |
||||
inserted: "inserted", |
||||
updated: "updated", |
||||
deleted: "deleted", |
||||
error: "error" |
||||
}; |
||||
|
||||
class Router { |
||||
constructor(root, storage) { |
||||
this.root = root; |
||||
this.storage = storage; |
||||
} |
||||
|
||||
_tryProcess(code, req, res) { |
||||
try { |
||||
code.call(this, req, res); |
||||
} catch (e) { |
||||
res.send({action: actions.error, message: e.message}); |
||||
} |
||||
} |
||||
|
||||
getData(req, res) { |
||||
res.send(this.storage.all()); |
||||
} |
||||
|
||||
insertTask(req, res) { |
||||
this._tryProcess(function (req, res) { |
||||
var insertedTask = this.storage.insert("data", req.body); |
||||
res.send({action: actions.inserted, tid: insertedTask.id}); |
||||
}, req, res); |
||||
|
||||
} |
||||
|
||||
updateTask(req, res) { |
||||
this._tryProcess(function (req, res) { |
||||
var sid = req.params.id; |
||||
|
||||
this.storage.update(sid, "data", req.body); |
||||
res.send({action: actions.updated}); |
||||
}, req, res) |
||||
} |
||||
|
||||
deleteTask(req, res) { |
||||
this._tryProcess(function (req, res) { |
||||
var sid = req.params.id; |
||||
this.storage.delete(sid, "data"); |
||||
res.send({action: actions.deleted}); |
||||
}, req, res); |
||||
} |
||||
|
||||
insertLink(req, res) { |
||||
this._tryProcess(function (req, res) { |
||||
var insertedLink = this.storage.insert("links", req.body); |
||||
res.send({action: actions.inserted, tid: insertedLink.id}); |
||||
}, req, res); |
||||
} |
||||
|
||||
updateLink(req, res) { |
||||
this._tryProcess(function (req, res) { |
||||
var sid = req.params.id; |
||||
this.storage.update(sid, "links", req.body); |
||||
res.send({action: actions.updated}); |
||||
}, req, res); |
||||
|
||||
} |
||||
|
||||
deleteLink(req, res) { |
||||
this._tryProcess(function (req, res) { |
||||
var sid = req.params.id; |
||||
this.storage.delete(sid, "links"); |
||||
res.send({action: actions.deleted}); |
||||
}, req, res); |
||||
|
||||
} |
||||
|
||||
connect(app) { |
||||
this._connect(app, ""); |
||||
this._connect(app, "/gantt/backend"); |
||||
this._connect(app, "/backend"); |
||||
} |
||||
|
||||
_connect(app, prefix){ |
||||
app.get(`${prefix}${this.root}`, this.getData.bind(this)); |
||||
app.post(`${prefix}${this.root}/task`, this.insertTask.bind(this)); |
||||
app.put(`${prefix}${this.root}/task/:id`, this.updateTask.bind(this)); |
||||
app.delete(`${prefix}${this.root}/task/:id`, this.deleteTask.bind(this)); |
||||
app.post(`${prefix}${this.root}/link`, this.insertLink.bind(this)); |
||||
app.put(`${prefix}${this.root}/link/:id`, this.updateLink.bind(this)); |
||||
app.delete(`${prefix}${this.root}/link/:id`, this.deleteLink.bind(this)); |
||||
} |
||||
} |
||||
module.exports = Router; |
@ -1,12 +0,0 @@
|
||||
var Router = require("./router"); |
||||
|
||||
class RouterDynamicLoading extends Router { |
||||
getData(req, res) { |
||||
this._tryProcess(function (req, res) { |
||||
var parentId = req.query.parent_id || 0; |
||||
res.send(this.storage.children(parentId)); |
||||
}, req, res); |
||||
} |
||||
} |
||||
|
||||
module.exports = RouterDynamicLoading; |
@ -1,41 +0,0 @@
|
||||
var express = require("express"); |
||||
var bodyParser = require("body-parser"); |
||||
var path = require("path"); |
||||
var Storage = require("./storage"); |
||||
var StorageTree = require("./storage_tree"); |
||||
var Router = require("./router"); |
||||
var RouterDynamicLoading = require("./router_dynamic_loading"); |
||||
var itemInitializer = require("./item_initializer"); |
||||
|
||||
module.exports = function (host = "127.0.0.1", port = "9200") { |
||||
|
||||
var app = express(); |
||||
|
||||
var storage = new Storage(require("./data.json"), itemInitializer); |
||||
var dynamicStorage = new StorageTree(require("./data-dynamic.json"), itemInitializer); |
||||
var router = new Router("/data", storage); |
||||
var dynLoading = new RouterDynamicLoading("/data-dynamic", dynamicStorage); |
||||
|
||||
app.use(bodyParser.json()); // for parsing application/json
|
||||
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
|
||||
app.use(function (req, res, next) { |
||||
res.header("Access-Control-Allow-Origin", "*"); |
||||
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); |
||||
res.header("Access-Control-Allow-Methods", "*"); |
||||
next(); |
||||
}); |
||||
|
||||
router.connect(app); |
||||
dynLoading.connect(app); |
||||
|
||||
app.use("/codebase", express.static(path.join(__dirname, "..", "codebase"))); |
||||
app.use("/samples", express.static(path.join(__dirname, "..", "samples"))); |
||||
app.use(/^\/$/, function (req, res) {//default url
|
||||
res.redirect("/samples"); |
||||
}); |
||||
|
||||
var server = app.listen(port, host, function () { |
||||
console.log("Server is running on port " + port + "..."); |
||||
}); |
||||
|
||||
}; |
@ -1,65 +0,0 @@
|
||||
const striptags = require("striptags"); |
||||
|
||||
class Storage { |
||||
constructor(data, initItem) { |
||||
this._data = data; |
||||
this._initItem = initItem; |
||||
} |
||||
all() { |
||||
return this._data; |
||||
} |
||||
get(id, table) { |
||||
return this._data[table].find(function(entry) { |
||||
return id === entry.id; |
||||
}); |
||||
} |
||||
delete(id, table) { |
||||
this._data[table] = this._data[table].filter(function(entry) { |
||||
return id !== entry.id; |
||||
}); |
||||
} |
||||
update(id, table, newData) { |
||||
return this._data[table].find(function(entry, index, arr) { |
||||
if (id == entry.id) { |
||||
var preparedItem = newData; |
||||
console.log(table) |
||||
if(this._initItem && this._initItem[table]){ |
||||
preparedItem = this._initItem[table](preparedItem); |
||||
} |
||||
arr[index] = _addId(id, sanitizeObject(preparedItem)); |
||||
return true; |
||||
} |
||||
}.bind(this)); |
||||
} |
||||
insert(table, data) { |
||||
data.id = uid(); |
||||
var preparedItem = data; |
||||
if(this._initItem && this._initItem[table]){ |
||||
preparedItem = this._initItem[table](data); |
||||
} |
||||
this._data[table].push(sanitizeObject(preparedItem)); |
||||
return data; |
||||
} |
||||
} |
||||
|
||||
var seed = Date.now(); |
||||
function uid(){ |
||||
return seed++; |
||||
} |
||||
|
||||
function sanitizeObject(data){ |
||||
for(var i in data){ |
||||
if(typeof data[i] === "string"){ |
||||
data[i] = striptags(data[i]); |
||||
}else if(typeof data[i] === "object"){ |
||||
sanitizeObject(data[i]); |
||||
} |
||||
} |
||||
return data; |
||||
} |
||||
|
||||
function _addId(id, data) { |
||||
return Object.assign(data, {id: id}); |
||||
} |
||||
|
||||
module.exports = Storage; |
@ -1,29 +0,0 @@
|
||||
var Storage = require("./storage"); |
||||
class StorageTree extends Storage{ |
||||
children(parentId = 0) { |
||||
var all = this._data.data; |
||||
|
||||
var loaded = this._data.data.filter(function(entry) { |
||||
return parentId == entry.parent; |
||||
}); |
||||
|
||||
var search = {}; |
||||
loaded.forEach(function(value){ |
||||
search[value.id] = value; |
||||
}); |
||||
|
||||
all.forEach(function(task){ |
||||
if(search[task.parent]) { |
||||
search[task.parent]["$has_child"] = true; |
||||
} |
||||
}); |
||||
|
||||
var links = this._data.links.filter(function(entry) { |
||||
return (search[entry.source] || search[entry.target]); |
||||
}); |
||||
|
||||
return {data: loaded, links: links}; |
||||
} |
||||
} |
||||
|
||||
module.exports = StorageTree; |
Loading…
Reference in new issue