var scheds = {}; function example() { var taskStatus = {'Stand':'Stand', 'Table ronde':'Table-ronde', 'Atelier':'Atelier', 'Concert':'Concert', 'Conference':'Conference', 'Repas':'Repas'} d3.json("le-prog-json", function(error, JsonContent) { if (error) return console.warn(error); $.each( JsonContent, function( EventType, ListEvType ) { $.each( ListEvType, function( Day, ListEvent ) { var placeNames = []; for ( var i = 0; i < ListEvent.length; i++) { placeNames.push(ListEvent[i]["placeName"]); // convert json text to js Date ListEvent[i]["startDate"] = new Date(ListEvent[i]["startDate"]); ListEvent[i]["endDate"] = new Date(ListEvent[i]["endDate"]); } //placeNames.push("unk") scheds[EventType+"_"+Day] = new d3.sched("SVG_"+Day) .taskTypes(placeNames) .taskStatus(taskStatus) .tickFormat("%H:%M"); //scheds[EventType+"_"+Day].timeDomainMode("fit"); //scheds[EventType+"_"+Day].margin(margin); scheds[EventType+"_"+Day](ListEvent); //scheds[EventType+"_"+Day].zoomed(); scheds[EventType+"_"+Day].redraw("SVG_"+Day, ListEvent) }); }); }); }; // Query Programme example(); function changeTimeDomain(timeDomainString) { this.timeDomainString = timeDomainString; switch (timeDomainString) { case "1hr": format = "%H:%M:%S"; sched.timeDomain([ d3.time.hour.offset(getEndDate(), -1), getEndDate() ]); break; case "3hr": format = "%H:%M"; sched.timeDomain([ d3.time.hour.offset(getEndDate(), -3), getEndDate() ]); break; case "6hr": format = "%H:%M"; sched.timeDomain([ d3.time.hour.offset(getEndDate(), -6), getEndDate() ]); break; case "1day": format = "%H:%M"; sched.timeDomain([ d3.time.day.offset(getEndDate(), -1), getEndDate() ]); break; case "1week": format = "%a %H:%M"; sched.timeDomain([ d3.time.day.offset(getEndDate(), -7), getEndDate() ]); break; default: format = "%H:%M" } sched.tickFormat(format); sched.redraw(tasks); } function getEndDate() { var lastEndDate = Date.now(); if (tasks.length > 0) { lastEndDate = tasks[tasks.length - 1].endDate; } return lastEndDate; } function addTask() { var lastEndDate = getEndDate(); var taskStatusKeys = Object.keys(taskStatus); var taskStatusName = taskStatusKeys[Math.floor(Math.random() * taskStatusKeys.length)]; var taskName = taskNames[Math.floor(Math.random() * taskNames.length)]; tasks.push({ "startDate" : d3.time.hour.offset(lastEndDate, Math.ceil(1 * Math.random())), "endDate" : d3.time.hour.offset(lastEndDate, (Math.ceil(Math.random() * 3)) + 1), "taskName" : taskName, "status" : taskStatusName }); changeTimeDomain(timeDomainString); sched.redraw(tasks); }; function removeTask() { tasks.pop(); changeTimeDomain(timeDomainString); sched.redraw(tasks); };