diff options
-rw-r--r-- | jm2l/static/js/Schedule.js | 437 | ||||
-rw-r--r-- | jm2l/templates/Public/Programme.mako | 2 | ||||
-rw-r--r-- | jm2l/views.py | 4 |
3 files changed, 2 insertions, 441 deletions
diff --git a/jm2l/static/js/Schedule.js b/jm2l/static/js/Schedule.js deleted file mode 100644 index f017240..0000000 --- a/jm2l/static/js/Schedule.js +++ /dev/null @@ -1,437 +0,0 @@ -/** - * inspired from @author Dimitry Kudrayvtsev - * @author tr4ck3ur - */ - -d3.sched = function(EventType) { - var FIT_TIME_DOMAIN_MODE = "fit"; - var FIXED_TIME_DOMAIN_MODE = "fixed"; - var myname = EventType; - var margin = { - top : 15, - right : 10, - bottom : 10, - left : 50 - }; - var timeDomainStart = d3.time.hour.offset(new Date(),-2); - var timeDomainEnd = d3.time.hour.offset(new Date(),+2); - var timeDomainMode = FIT_TIME_DOMAIN_MODE;// fixed or fit - var taskTypes = []; - var taskStatus = []; - //var height = document.body.clientHeight - margin.top - margin.bottom-5; - height = 700; - //var width = document.body.clientWidth - margin.right - margin.left-5; - var width = 700;// - margin.right - margin.left; - var tickFormat = "%H:%M"; - var lastscale = -1; - - var xScale = d3.scale.ordinal() - .domain(taskTypes) - .rangeRoundBands([ 0, width - margin.left], .1); - - var yScale = d3.time.scale() - .domain([ timeDomainStart, timeDomainEnd ]) - .range([ 0, height - margin.top ]) //- margin.bottom ]); - .clamp(true); - - var xAxis = d3.svg.axis() - .scale(xScale) - .orient("left") - .tickSize(1); - - var yAxis = d3.svg.axis() - .scale(yScale) - .orient("bottom") - .tickFormat(d3.time.format(tickFormat)) - .tickSubdivide(true) - .tickSize(8).tickPadding(8); - - var keyFunction = function(d) { - return d.startDate + d.placeName + d.endDate; - }; - - var rectTransform = function(d) { - return "translate(" + xScale(d.placeName) + "," + yScale(d.startDate) + ")"; - }; - - var initTimeDomain = function(tasks) { - if (timeDomainMode === FIT_TIME_DOMAIN_MODE) { - if (tasks === undefined || tasks.length < 1) { - timeDomainStart = d3.time.day.offset(new Date(), -3); - timeDomainEnd = d3.time.hour.offset(new Date(), +3); - return; - } - tasks.sort(function(a, b) { - return a.endDate - b.endDate; - }); - timeDomainEnd = tasks[tasks.length - 1].endDate; - tasks.sort(function(a, b) { - return a.startDate - b.startDate; - }); - timeDomainStart = tasks[0].startDate; - } - }; - - var initAxis = function() { - - xScale = d3.scale.ordinal() - .domain(taskTypes) - .rangeRoundBands([ 0, width ], .1); - - yScale = d3.time.scale() - .domain([ timeDomainStart, timeDomainEnd ]) - .range([ 0, height - margin.top - margin.bottom ]) - .clamp(true); - - xAxis = d3.svg.axis() - .scale(xScale) - .orient("top") - .tickSize(1); - - yAxis = d3.svg.axis() - .scale(yScale) - .orient("left") - .tickFormat(d3.time.format(tickFormat)) - .tickSubdivide(true) - .tickSize(8) - .tickPadding(8); - }; - - function sched(tasks) { - - initTimeDomain(tasks); - initAxis(); - - function zoomed() { - var px = d3.event.translate[0]; - var py = d3.event.translate[1]; - var dx = 0; - timeDomainStart = d3.time.hour.offset( timeDomainStart, 0) - if (py>0) { - dx = timeDomainStart.getTime()-yScale.invert(py).getTime() - } else { - dx = -timeDomainStart.getTime()+yScale.invert(-py).getTime() - } - NewStart = d3.time.hour.offset( timeDomainStart.getTime()+dx, 0) - //NewEnd = d3.time.hour.offset( timeDomainStart.getTime()+dx, 0) //.3*d3.event.scale) - //yScale.domain([ NewStart , NewEnd ]) - - sched.timeDomainMode("fit") - //sched.timeDomain([ NewStart , NewEnd ]); - //timeDomainStart = NewStart - //timeDomainEnd = NewEnd - - var dy = py; - var dz = timeDomainEnd-timeDomainStart - if (py>0) - var dx = timeDomainStart-yScale.invert(py).getTime() - else - var dx = -timeDomainStart+yScale.invert(-py).getTime() - - //yScale.domain([ timeDomainStart, d3.time.hour.offset(timeDomainStart, d3.event.scale*4) ]) - // .range([ 0, height - margin.top - margin.bottom ]) - // .clamp(true); - - //yScale2.domain([ NewStart, d3.time.hour.offset(NewStart, d3.event.scale*4) ]) - // .range([ 0, height - margin.top - margin.bottom ]) - // .clamp(true); - - // - if (0 && lastscale!=d3.event.scale) { - lastscale = d3.event.scale; - yScale.domain([ timeDomainStart, d3.time.hour.offset(timeDomainStart, d3.event.scale*4) ]) - .range([ 0, height - margin.top - margin.bottom ]) - .clamp(true); - //Saved = chart.attr("transform"); - //coords = Saved.slice(Saved.search(/([0-9]+)/g),Saved.length-1).split(','); - //chart.attr("transform", "translate(" + px + "," + py + ")"); - //zoom.translate((80,120)) - //zoom.center([121, 21]) - //sched.redraw(this.id, tasks); - //zoom.translate() - - //chart.attr("transform", "translate(" + parseInt(coords[0])+px + "," + parseInt(coords[1])+py + ")"); - //chart.attr("transform", "translate(" + 121 + "," + 21 + ")"); - chart.attr("transform", "translate(" + px + "," + py + ")"); - } - // else { - // chart.attr("transform", "translate(" + px + "," + py + ")"); - //} - - var dxr = d3.time.hour.offset( timeDomainStart+dx, 0) - //ind.text( py +" "+ dz +" => "+ d3.event.scale ) - //if ( DragLimit.xmin < (-px) && (-px) < DragLimit.xmax ) { - // } else { - // d3.event.sourceEvent.stopPropagation(); - // } - - //sched.redraw(tasks); - - - //sched.timeDomain([ d3.time.hour.offset(mystart,0), d3.time.hour.offset(mystart, d3.event.scale) ]); - if (1) { - svg.select(".yAxis") - .attr("transform", "translate("+ margin.left +","+ margin.top +")")// + py + ")") - .transition() - .call(yAxis); - - //svg.select(".yAxis2") - // .attr("transform", "translate(80,0)") - // .call(yAxis2); - - svg.select(".xAxis") - .attr("transform", "translate("+ margin.left +","+ margin.top +")") - .transition() - .call(xAxis); - - chart.attr("transform", "translate("+ margin.left +","+ margin.top +")"); - } - - } - - var zoom = d3.behavior.zoom() - .scaleExtent([1, 4]) - .on("zoom", zoomed); - - var svg = d3.select("#Schedule_"+EventType) - .append("svg") - .attr("id", EventType) - .attr("class", "chart") - .attr("width", width + margin.left + margin.right) - .attr("height", height + margin.top + margin.bottom) - .call(zoom); - - var chart = svg.append("g") - .attr("class", "sched-chart"); - - chart.selectAll(".sched-chart") - .data(tasks, keyFunction).enter() - .append("rect") - .attr("class", function(d){ - if(taskStatus[d.status] == null) - { return "bar";} - return taskStatus[d.status]; - }); - - -if (0) { - chart.selectAll('.foreignObject') - .data(tasks, keyFunction).enter() - .append('foreignObject') - .attr("x", function(d){ - return xScale(d.placeName || "unk"); - }) - .attr("y", function(d){ - return yScale(d.startDate); - }) - //.attr("y", 0) - //.attr("x", 2) - //.attr("transform", rectTransform) - .attr("width", function(d) { - return xScale.rangeBand(); - }) - .attr("height", function(d) { - return (yScale(d.endDate) - yScale(d.startDate)); - }) - .append("xhtml:div") - .html(function(d) { - return '<div style="padding:2px;height:100%"><a href="/event/'+ d.uid + - '">' + d.desc + '</a></div>' - }); -} -/* svg.selectAll("text") - .data(tasks, keyFunction).enter() - .append("text") - .text(function(d) { return d.desc; }) - .attr("x", 2) - .attr("y", 16) - .attr("transform", rectTransform) - .attr("width", function(d) { - return x.rangeBand(); - }) - .fill('blue'); -*/ - - svg.append("g") - .attr("class", "xAxis axis"); - - svg.append("g") - .attr("class", "yAxis axis"); - - //zoomed(); - //sched.redraw(tasks); - return sched; - - }; - - sched.redraw = function(who, tasks) { - - //initTimeDomain(tasks); - //initAxis(); - var svg = d3.select("#"+who); - - var schedChartGroup = svg.select(".sched-chart"); - - var rect = schedChartGroup.selectAll("rect") - .data(tasks, keyFunction); - - rect.enter() - .insert("rect",":first-child") - .attr("rx", 5) - .attr("ry", 5) - .attr("class", function(d){ - if(taskStatus[d.status] == null) - { return "bar";} - return taskStatus[d.status]; - }) - //.transition() - .attr("x", function(d){ - return xScale(d.placeName || "unk"); - }) - .attr("y", function(d){ - return yScale(d.startDate); - }) - //.attr("transform", rectTransform) - .attr("width", function(d) { - return xScale.rangeBand(); - }) - .attr("height", function(d) { - return (yScale(d.endDate) - yScale(d.startDate)); - }); - - rect.transition() - //.attr("transform", rectTransform) - .attr("x", function(d){ - return xScale(d.placeName || "unk"); - }) - .attr("y", function(d){ - return yScale(d.startDate); - }) - .attr("width", function(d) { - return xScale.rangeBand(); - }) - .attr("height", function(d) { - return (yScale(d.endDate) - yScale(d.startDate)); - }); - - rect.exit() - .remove(); - - var content = schedChartGroup.selectAll("foreignObject") - .data(tasks, keyFunction); - - content.enter() - .insert("foreignObject",":first-child") - //.transition() - .attr("x", function(d){ - return xScale(d.placeName || "unk"); - }) - .attr("y", function(d){ - return yScale(d.startDate); - }) - //.attr("transform", rectTransform) - .attr("width", function(d) { - return xScale.rangeBand(); - }) - .attr("height", function(d) { - return (yScale(d.endDate) - yScale(d.startDate)); - }) - .append("xhtml:div") - .html(function(d) { - return '<div style="padding:2px;height:100%"><a href="/event/'+ d.uid + - '">' + d.desc + '</a></div>' - }); - - content.transition() - //.attr("transform", rectTransform) - .attr("x", function(d){ - return xScale(d.placeName || "unk"); - }) - .attr("y", function(d){ - return yScale(d.startDate); - }) - .attr("width", function(d) { - return xScale.rangeBand(); - }) - .attr("height", function(d) { - return (yScale(d.endDate) - yScale(d.startDate)); - }); - - content.exit() - .remove(); - - - - return sched; - }; - - sched.margin = function(value) { - if (!arguments.length) - return margin; - margin = value; - return sched; - }; - - sched.timeDomain = function(value) { - if (!arguments.length) - return [ timeDomainStart, timeDomainEnd ]; - timeDomainStart = +value[0], timeDomainEnd = +value[1]; - return sched; - }; - - /** - * @param {string} - * vale The value can be "fit" - the domain fits the data or - * "fixed" - fixed domain. - */ - sched.timeDomainMode = function(value) { - if (!arguments.length) - return timeDomainMode; - timeDomainMode = value; - return sched; - }; - - sched.taskTypes = function(value) { - if (!arguments.length) - return taskTypes; - taskTypes = value; - return sched; - }; - - sched.taskStatus = function(value) { - if (!arguments.length) - return taskStatus; - taskStatus = value; - return sched; - }; - - sched.width = function(value) { - if (!arguments.length) - return width; - width = +value; - return sched; - }; - - sched.height = function(value) { - if (!arguments.length) - return height; - height = +value; - return sched; - }; - - sched.tickFormat = function(value) { - if (!arguments.length) - return tickFormat; - tickFormat = value; - return sched; - }; - - sched.name = function(value) { - if (!arguments.length) - return myname; - myname = value; - return sched; - }; - - return sched; -}; diff --git a/jm2l/templates/Public/Programme.mako b/jm2l/templates/Public/Programme.mako index 1626bd2..a3274a1 100644 --- a/jm2l/templates/Public/Programme.mako +++ b/jm2l/templates/Public/Programme.mako @@ -151,6 +151,4 @@ if Counter==0: ##</div> <br/><br/> <script type="text/javascript" src="/vendor/d3js/d3.v3.min.js"></script> -##<script type="text/javascript" src="/js/Schedule.js"></script> <script type="text/javascript" src="/js/programme.js"></script> -##<script type="text/javascript" src="/js/sched.js"></script> diff --git a/jm2l/views.py b/jm2l/views.py index 5c1258e..b7b11a3 100644 --- a/jm2l/views.py +++ b/jm2l/views.py @@ -759,7 +759,7 @@ def edit_event(request): if TheEvent is None: raise HTTPNotFound(u"Cette réference n'existe pas") - if not (request.user.uid==1 or request.user in TheEvent.intervenants): + if request.user is None or not (request.user.Staff or request.user in TheEvent.intervenants): return HTTPForbidden(u"Vous n'êtes pas identifié comme étant un participant à cette intervention.") # Compute some field value from selected event if TheEvent.start_time in TheYear[0].AvailableTimeSlots: @@ -1063,7 +1063,7 @@ def notfound(reason, request): @forbidden_view_config() def forbidden(reason, request): - return Response('forbidden') + #return Response('forbidden') request.response.status = 404 return render_to_response('jm2l:templates/Errors/404.mak', { "reason":reason }, request=request)
\ No newline at end of file |