You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

11 lines
9.0 KiB

  1. /**
  2. *
  3. * JQuery fn.gantt gantt chart plugin v0.2
  4. * Copyright 2011 by Marek Bielańczuk
  5. * http://mbielanczuk.com/
  6. * Released under the MIT and GPL Licenses.
  7. *
  8. * Date: Tue Jun 21 00:18:16 +0200 2011
  9. */
  10. jQuery.fn.gantt=function(w){var x={source:null,itemsPerPage:7,months:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],dow:["N","Pn","Wt","Śr","Cz","Pt","So"],startPos:new Date()};var w=jQuery.extend(x,w);var y=null;var z=0;var A=0;var B=0;var C=0;var D=0;var E=null;var F=null;var G=function(r){if(!w.source)return;jQuery.getJSON(w.source,function(a){y=a;C=y.length;A=Math.ceil(C/w.itemsPerPage);B=C-(Math.floor(C/w.itemsPerPage)*w.itemsPerPage);E=H.getMinDate();F=H.getMaxDate();var b=s();r.append(b);u();v();r.css({height:jQuery(".fn-gantt").height()+"px"});jQuery('.fn-gantt .dataPanel').css({'margin-left':D+'px'});var d=Math.round((w.startPos/1000-E/1000)/86400)-2;if(d>0){navigate(-1*d*H.getCellSize())}else{repositionLabel()}});var s=function(){var b=jQuery('<div class="leftPanel"/>').append(jQuery('<div class="row spacer"/>').css("height",H.getCellSize()*4+"px").css("width","100%"));jQuery.each(y,function(i,a){if(i>=z*w.itemsPerPage&&i<(z*w.itemsPerPage+w.itemsPerPage)){b.append(jQuery('<div class="row name"/>').append(jQuery('<span class="label"/>').html(a.name))).append(jQuery('<div class="row desc"/>').append(jQuery('<span class="label"/>').html(a.desc)))}});var c=jQuery('<div class="navigate" />').append(jQuery('<a href="javascript:///" class="nav-link nav-page-back"/>').html('&lt;').click(function(){navigatePage(-1)})).append(jQuery('<div class="page-number"/>').append(jQuery('<span/>').html(z+1+' of '+A))).append(jQuery('<a href="javascript:///" class="nav-link nav-page-next"/>').html('&gt;').click(function(){navigatePage(1)})).append(jQuery('<a href="javascript:///" class="nav-link nav-begin"/>').html('&#124;&lt;').click(function(){navigate('begin')})).append(jQuery('<a href="javascript:///" class="nav-link nav-prev-week"/>').html('&lt;&lt;').click(function(){navigate(H.getCellSize()*7)})).append(jQuery('<a href="javascript:///" class="nav-link nav-prev-day"/>').html('&lt;').click(function(){navigate(H.getCellSize())})).append(jQuery('<a href="javascript:///" class="nav-link nav-next-day"/>').html('&gt;').click(function(){navigate(H.getCellSize()*-1)})).append(jQuery('<a href="javascript:///" class="nav-link nav-next-week"/>').html('&gt;&gt;').click(function(){navigate(H.getCellSize()*-7)})).append(jQuery('<a href="javascript:///" class="nav-link nav-end"/>').html('&gt;&#124;').click(function(){navigate('end')}));var d=jQuery('<div class="fn-gantt" />');d.append(jQuery('<div class="fn-content"/>').append(b).append(jQuery('<div class="rightPanel"/>').append(t()))).append(jQuery('<div class="bottom"/>').append(c));return d};var t=function(){var e=H.parseDateRange(E,F);var f=jQuery("<div class='row'/>");var g=e[0].getFullYear();var h=0;var k=jQuery("<div class='row'/>");var l=e[0].getMonth();var m=0;var n=jQuery('<div class="row"/>');var o=jQuery('<div class="row"/>');var p=new Date();p=new Date(p.getFullYear(),p.getMonth(),p.getDate());jQuery.each(e,function(i,a){if(a.getFullYear()!=g){f.append(jQuery('<div class="row header year"/>').css("width",H.getCellSize()*h+"px").append(jQuery("<div class='label'/>").html(g)));g=a.getFullYear();h=0}h++;if(a.getMonth()!=l){k.append(jQuery('<div class="row header month"/>').css("width",H.getCellSize()*m+"px").append(jQuery("<div class='label'/>").html(w.months[l])));l=a.getMonth();m=0}m++;var b=(p-a==0)?' today':(w.hollydays&&w.hollydays.join().indexOf(a.getTime())>-1)?"hollyday":a.getDay()==6?"sa":(a.getDay()==0?"sn":"wd");n.append(jQuery('<div class="row day '+b+'" />').html(a.getDate()));o.append(jQuery('<div class="row day '+b+'" />').html(w.dow[a.getDay()]))});f.append(jQuery('<div class="row header year"/>').css("width",H.getCellSize()*h+"px").append(jQuery("<div class='label'/>").html(g)));k.append(jQuery('<div class="row header month"/>').css("width",H.getCellSize()*m+"px").append(jQuery("<div class='label'/>").html(w.months[l])));var q=jQuery("<div class='dataPanel'/>").css("width",e.length*H.getCellSize()+"px");q.append(f);q.append(k);q.append(n);q.append(o);jQuery.each(y,function(i,c){if(i>=z*w.itemsPerPage&&i<(z*w.itemsPerPage+w.itemsPerPage)){var d=jQuery('<div class="row">');jQuery.each(e,function(j,a){var b=(p-a==0)?' today':a.getDay()==6?' sa':(a.getDay()==0?' sn':'');d.append(jQuery('<div class="row day'+b+'" id="d'+i+'-'+H.genId(a.getTime())+'" />').html(a))});q.append(d)}});return q};createProgressBar=function(b,c,d){var f=H.getCellSize();var g=H.getProgressBarMargin()||0;var h=jQuery("<div class='bar' />").addClass(c).css({width:((f*++b)-g)});if(d){h.mouseover(function(e){var a=jQuery("<div class='fn-gantt-hint' />").html(d);jQuery("body").append(a);a.css('left',e.pageX);a.css('top',e.pageY);a.show()}).mouseout(function(){jQuery(".fn-gantt-hint").remove()}).mousemove(function(e){jQuery('.fn-gantt-hint').css('left',e.pageX);jQuery('.fn-gantt-hint').css('top',e.pageY+15)})}return h};var u=function(){if(w.hollydays){jQuery.each(y,function(i,b){jQuery.each(w.hollydays,function(j,a){jQuery('#d'+i+'-'+H.genId(H.dateDeserialize(a).getTime())).addClass("hollyday")})})}};var v=function(){jQuery.each(y,function(i,c){if(i>=z*w.itemsPerPage&&i<(z*w.itemsPerPage+w.itemsPerPage)){jQuery.each(c.values,function(j,a){var b=createProgressBar(Math.floor(((Date.parse(H.dateDeserialize(a.to))/1000)-(Date.parse(H.dateDeserialize(a.from))/1000))/86400),a.customClass?a.customClass:'',a.desc?a.desc:'');jQuery('#d'+i+'-'+H.genId(H.dateDeserialize(a.from).getTime())).append(b)})}})};navigate=function(a){switch(a){case'begin':jQuery('.fn-gantt .dataPanel').animate({'margin-left':'0px'},'fast',function(){repositionLabel()});break;case'end':var b=jQuery('.fn-gantt .dataPanel').width()-jQuery('.fn-gantt .rightPanel').width();jQuery('.fn-gantt .dataPanel').animate({'margin-left':'-'+b+'px'},'fast',function(){repositionLabel()});break;default:var c=(jQuery('.fn-gantt .dataPanel').width()-jQuery('.fn-gantt .rightPanel').width())*-1;var d=jQuery('.fn-gantt .dataPanel').css('margin-left').replace('px','');var a=parseInt(d)+a;if(a<=0&&a>=c)jQuery('.fn-gantt .dataPanel').animate({'margin-left':a+'px'},'fast',repositionLabel);break}};navigatePage=function(a){if((z+a)>=0&&(z+a)<Math.ceil(C/w.itemsPerPage)){z+=a;D=jQuery('.fn-gantt .dataPanel').css('margin-left').replace('px','');r.empty();G(r)}};repositionLabel=function(){jQuery('.fn-gantt .dataPanel').stop();var f={offset:jQuery('.fn-gantt .rightPanel').offset(),width:jQuery('.fn-gantt .rightPanel').width(),height:jQuery('.fn-gantt .rightPanel').height()};jQuery(".fn-gantt .rightPanel .year, .fn-gantt .rightPanel .month").each(function(i,a){var b={offset:jQuery(a).offset(),width:jQuery(a).width(),height:jQuery(a).height()};if(b.offset.left+b.width>f.offset.left&&b.offset.left<f.offset.left+f.width){var c={left:b.offset.left>f.offset.left?b.offset.left:f.offset.left,right:b.offset.left+b.width<f.offset.left+f.width?b.offset.left+b.width:f.offset.left+f.width};jQuery(a).children(".label").css("float","left");var d=jQuery(a).children(".label").width();var e=b.offset.left<f.offset.left?f.offset.left-b.offset.left:0;if(c.right-c.left>d)jQuery(a).children(".label").css("margin-left",e+(c.right-c.left)/2-d/2+"px")}})}};var H=new function(){this.getMaxDate=function(){var c=null;jQuery.each(y,function(i,b){jQuery.each(b.values,function(i,a){c=c<H.dateDeserialize(a.to)?H.dateDeserialize(a.to):c})});c.setDate(c.getDate()+2);if(c.getDate()<=4)c.setDate(c.getDate()+4);return c};this.getMinDate=function(){var c=null;jQuery.each(y,function(i,b){jQuery.each(b.values,function(i,a){c=c>H.dateDeserialize(a.from)||c==null?H.dateDeserialize(a.from):c})});c.setDate(c.getDate()-2);if(c.getDate()>=27)c.setDate(c.getDate()-4);return c};this.parseDateRange=function(a,b){var c=new Date(a.getTime());var d=new Date(b.getTime());var e=new Array();var i=0;do{e[i++]=new Date(c.getTime());c.setDate(c.getDate()+1)}while(c<=b);return e};this.dateDeserialize=function(a){return eval('new'+a.replace(/\//g,' '))};this.genId=function(a){var t=Math.floor(a/86400000);return t*86400000};var f=null;this.getCellSize=function(){if(!f){jQuery("body").append(jQuery("<div style='display: none; position: absolute;' class='fn-gantt' id='measureCellWidth'><div class='row'></div></div>"));f=jQuery('#measureCellWidth .row').height();jQuery('#measureCellWidth').empty().remove()}return f};this.getPageHeight=function(){return z+1==A?B*H.getCellSize():w.itemsPerPage*H.getCellSize()};var g=null;this.getProgressBarMargin=function(){if(!g){jQuery("body").append(jQuery("<div style='display: none; position: absolute;' id='measureBarWidth' ><div class='fn-gantt'><div class='rightPanel'><div class='dataPanel'><div class='row day'><div class='bar' /></div></div></div></div></div>"));g=parseInt(jQuery('#measureBarWidth .fn-gantt .rightPanel .day .bar').css("margin-left").replace("px",""));g+=parseInt(jQuery('#measureBarWidth .fn-gantt .rightPanel .day .bar').css("margin-right").replace("px",""));jQuery('#measureBarWidth').empty().remove()}return g}};jQuery(this).empty();G(jQuery(this))};