UNPKG

jquery.gantt

Version:

A simple, lightweight jQuery gantt plugin.

8 lines 17.1 kB
/*! * Gantt v1.0.0 * https://github.com/oguzhanoya/jquery-gantt * * Copyright (c) 2017 oguzhanoya * Released under the MIT license */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(t.$)}(this,function(t){"use strict";t="default"in t?t.default:t;var e={data:[],dataURL:"",startDate:new Date,endDate:new Date,cellWidth:20,cellHeight:38,language:"en",stickyHeader:!1,mouseScroll:!1,mouseScrollpx:120,lazyLoad:!1,autoHide:!1,onInit:$.noop,onDestroy:$.noop},a={buildData:function(){var e=this.config.dataURL;return t.ajax({url:e,dataType:"jsonp",jsonp:"callback",crossDomain:!0,contentType:"application/json"})},initLazyLoad:function(){var t=this.config.startDate,e=this.config.endDate;t.setHours(0,0,0,0),e.setHours(0,0,0,0),this.scrollHandler()},renderLazyLoad:function(e,a,i){this.renderLazyLoadGrid(e,a,i);var n=t(this.element),s=t(".gantt-header-months",n),o=t(".gantt-header-days",n),r=t(".gantt-header-days-min",n),d=this.dateDiffInDays(a,i);this.renderLazyLoadEvents(e,d);for(var l=0;l<=d;l+=1){var c=t("<div>",{class:"gantt-header-month"}),h=t("<div>",{class:"gantt-header-day"}),g=t("<div>",{class:"gantt-header-day-min"}),f=a.getDate(),p=a.getMonth()+1,u=a.getFullYear(),v=this.daysInMonth(p,u)*this.config.cellWidth,y=this.config.region.monthNames[p-1],D=t(h).text(f).css("width",this.config.cellWidth),m=t(c).text(y+" "+u).css({width:v});o.append(D),r.append(g);var w=0===l,L=this.firstDayMonth(u,p);L.setHours(0,0,0,0);var T=this.firstDayMonth(this.config.endDate.getFullYear(),this.config.endDate.getMonth()+1);T.setHours(0,0,0,0);var H=this.isEqual(a,L),W=this.isEqual(a,T);(H||w)&&(w&&(v-=(f-1)*this.config.cellWidth),W&&(v=this.config.endDate.getDate()*this.config.cellWidth),s.append(m)),a.setDate(a.getDate()+1)}var k=t(".gantt-header-day",n).length*this.config.cellWidth;t(s,n).css({width:k}),t(o,n).css({width:k}),t(r,n).css({width:k});var M=t(".gantt-grid",n);t(M,n).css({width:k});var b=t(".gantt-grid-row",n);t(b,n).css({width:this.gridDefaults.gridtotalWidth});var x=t(".gantt-grid-col",n);t(x,n).css({height:this.gridDefaults.gridtotalHeight}),t(".gantt-event-row",n).css({width:this.gridDefaults.gridtotalWidth}),this.gridDefaults.eventsWidth=this.gridDefaults.gridtotalWidth},renderLazyLoadGrid:function(e,a,i){for(var n=t(this.element),s=this.dateDiffInDays(a,i),o=this.getTotalWidth(s),r=this.getTotalHeight(e.length),d=t(".gantt-grid",n),l=t(".gantt-grid-cols",n),c=t(".gantt-grid-rows",n),h=new Date(a.getTime()),g=0;g<=s;g+=1){var f=t("<div>",{class:"gantt-grid-col",width:this.config.cellWidth,height:r});f.css("width",this.config.cellWidth);var p=h.getMonth()+1,u=h.getFullYear(),v=this.lastDayMonth(u,p);this.isEqual(h,v)&&f.css("border-color","#bec5cc"),l.append(f),h.setDate(h.getDate()+1)}e.forEach(function(){var e=t("<div>",{class:"gantt-grid-row",width:o,height:this.config.cellHeight});c.append(e)},this),d.append(l).append(c),this.gridDefaults.gridtotalWidth+=o,this.gridDefaults.gridtotalHeight+=r},renderLazyLoadContainer:function(){var e=t("<div>",{class:"gantt-container"}),a=t("<div>",{class:"gantt-wrapper"}),i=t("<div>",{class:"gantt-header"}),n=t("<div>",{class:"gantt-header-months"}),s=t("<div>",{class:"gantt-header-days"}),o=t("<div>",{class:"gantt-header-days-min"}),r=t("<div>",{class:"gantt-grid"}),d=t("<div>",{class:"gantt-events"}),l=t("<div>",{class:"gantt-loading",style:"display: none"});i.append(t(n)),i.append(t(s)),i.append(t(o));var c=t("<div>",{class:"gantt-grid-cols"}),h=t("<div>",{class:"gantt-grid-rows"});return r.append(c).append(h),e.append(i).append(r).append(d),a.append('<div class="arrow arrow-left"><span class="arrow-icon"></span></div>').append(e).append('<div class="arrow arrow-right"><span class="arrow-icon"></span></div>').append(l),a},renderLazyLoadEvents:function(e){var a=t(this.element),i=t(".gantt-events",a);return e.forEach(function(e){var a=new Date(e.startdate),n=t("<div>",{class:"gantt-event-row",width:this.totalWidth}),s=t("<div>",{class:"gantt-event"}),o=(parseInt(e.minNight,10)+1)*this.config.cellWidth,r=this.dateDiffInDays(this.config.startDate,a),d=t.extend(e.tooltipData,{price:e.price}),l="";l="Tur"===e.type?"tourFly":"TurBus"===e.type?"tourBus":"cruise";var c=e.minNight+" Gece",h=t("<a>",{class:this.format("gantt-event-block {0}",l),width:o+"px",href:"/"+e.url,target:"_blank"}).text(c).css("line-height",this.config.cellHeight-28+"px").data("tooltip",this.tooltipView(d)),g=t('<div class="gantt-event-icon"><div class="'+l+'"></div></div>'),f=t("<div>",{class:"gantt-event-price"}).text(e.price.original.price+" "+e.price.original.priceType),p=t("<div>",{class:"gantt-event-desc"}).text(e.title),u=r*this.config.cellWidth+this.gridDefaults.eventsWidth;n.append(s.css("left",u).append(h).append(g).append(f).append(p)).css("height",this.config.cellHeight),i.append(n)},this),i}},i=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},n=function(){function t(t,e){for(var a=0;a<e.length;a++){var i=e[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,a,i){return a&&t(e.prototype,a),i&&t(e,i),e}}(),s=function(){function a(n,s){i(this,a);var o={gridtotalHeight:0,gridtotalWidth:0,eventsWidth:0},r=s.language||e.language;s.lang=a.LANGUAGES[r],this.config=t.extend({},e,s),this.gridDefaults=t.extend({},o),this.element=n,""===this.config.dataURL&&this.config.data.length<=0?console.warn("jquery-gantt: must provide a data source"):""===this.config.dataURL&&this.config.lazyLoad?console.warn("jquery-gantt: dataURL is required for lazyLoad"):this.init()}return n(a,[{key:"init",value:function(){var e=this;this.hook("onInit");var a="";t(this.element).html(a),this.config.endDate.getTime()>this.config.startDate.getTime()?(this.config.lazyLoad?(this.initLazyLoad(),a=this.renderLazyLoadContainer()):this.config.data.length<=0&&""!==this.config.dataURL?this.buildData().then(function(i){e.config.data=i.Items,a=e.renderContainer(),t(e.element).html(a),e.attachEvents(e.element,e.config),e.tooltipHover(),e.colHighlighter()}):a=this.renderContainer(),(this.config.data.length>0||this.config.lazyLoad)&&(t(this.element).html(a),this.attachEvents(this.element,this.config),this.tooltipHover(),this.colHighlighter())):console.warn("jquery-gantt: start-date is not greater than end-date")}},{key:"hook",value:function(t){void 0!==this.config[t]&&this.config[t].call(this.el)}},{key:"attachEvents",value:function(e,a){if(a.stickyHeader){var i=function(){var a=t(".gantt-wrapper",e).offset().top,i=t(".gantt-wrapper",e).height();a>=t(this).scrollTop()||t(this).scrollTop()>=a+i-80?(t(".gantt-header",e).css("position","static"),t(".arrow",e).css("position","static")):(t(".arrow",e).css({position:"relative",top:t(this).scrollTop()-a+"px"}),t(".gantt-header",e).css({position:"relative",top:t(this).scrollTop()-a+"px",left:t(this).scrollLeft+"px","z-index":1}))};t(window).scroll(i)}if(a.mouseScroll&&t(".gantt-container",e).on("wheel mousewheel",function(t){t.originalEvent.wheelDelta>0||t.originalEvent.detail<0?this.scrollLeft-=a.mouseScrollpx:this.scrollLeft+=a.mouseScrollpx}),a.lazyLoad){var n=this,s=!1;t(".gantt-container",e).scroll(function(){this.scrollWidth-this.clientWidth-this.scrollLeft<900&&!s&&(s=!0,n.scrollHandler(function(){s=!1}))})}t(".gantt-container",e).on("mousedown",function(e){return t(this).data("down",!0).data("x",e.clientX).data("scrollLeft",this.scrollLeft).addClass("dragging"),!1}).on("mouseup",function(){t(this).data("down",!1).removeClass("dragging")}).on("mousemove",function(i){if(!0===t(this).data("down")&&(this.scrollLeft=t(this).data("scrollLeft")+t(this).data("x")-i.clientX),a.autoHide){var n=this.scrollLeft,s=n/a.cellWidth;s=Math.floor(s);var o=s*a.cellWidth,r=t(".gantt-events",e).find(".gantt-event");t.each(r,function(e,a){var i=t(a).css("left");i=parseInt(i,10),i<=o?t(a).closest(".gantt-event-row").hide():t(a).closest(".gantt-event-row").show()});var d=new Date(a.startDate.getTime());d.setDate(d.getDate()+s)}}).on("mouseleave",function(){t(this).data("down",!1).removeClass("dragging")}),t(".arrow",e).on("click",function(){var a=t(this).hasClass("arrow-right"),i=t(".gantt-container",e).scrollLeft();a?t(".gantt-container",e).scrollLeft(i+240):t(".gantt-container",e).scrollLeft(i-240)})}},{key:"xhrRequest",value:function(e,a){var i=this,n=t(this.element),s=this.config.dataURL;return t.ajax({url:s,dataType:"jsonp",jsonp:"callback",contentType:"application/json",crossDomain:!0,data:{startDate:i.getFormattedDate(e),endDate:i.getFormattedDate(a)},beforeSend:function(){t(".gantt-loading",n).fadeIn()}})}},{key:"scrollHandler",value:function(e){var a=this,i=t(this.element),n=this.config.startDate,s=new Date(this.config.startDate.getTime());s.setMonth(s.getMonth()+2);var o=s.getMonth()+1,r=s.getFullYear();s=this.lastDayMonth(r,o);var d=this.config.endDate.getMonth()+1,l=this.config.endDate.getFullYear(),c=this.config.endDate.getDate();(r===l||r>l)&&(r>l&&(s.setMonth(d-1),s.setYear(l),s.setDate(c)),(o===d||o>d)&&(s.setMonth(d-1),s.setDate(c))),n.getTime()<=this.config.endDate.getTime()&&this.xhrRequest(n,s).done(function(t){a.renderLazyLoad(t.Items,n,s),a.tooltipHover(),a.colHighlighter(),"function"==typeof e&&e()}).always(function(){t(".gantt-loading",i).fadeOut()})}},{key:"renderHeader",value:function(e){var a=t("<div>",{class:"gantt-header"}),i=t("<div>",{class:"gantt-header-months"}),n=t("<div>",{class:"gantt-header-days"}),s=t("<div>",{class:"gantt-header-days-min"}),o=this.getTotalWidth(e);this.setHours();for(var r=new Date(this.config.startDate.getTime()),d=0;d<=e;d+=1){var l=t("<div>",{class:"gantt-header-month"}),c=t("<div>",{class:"gantt-header-day"}),h=t("<div>",{class:"gantt-header-day-min"}),g=r.getDay(),f=r.getDate(),p=r.getMonth()+1,u=r.getFullYear(),v=this.daysInMonth(p,u)*this.config.cellWidth,y=t(c).text(f).css("width",this.config.cellWidth);t(n).append(y);var D=this.config.lang.dayNamesMin[g],m=t(h).text(D).css({width:this.config.cellWidth});t(s).append(m);var w=0===d,L=this.firstDayMonth(u,p),T=this.firstDayMonth(this.config.endDate.getFullYear(),this.config.endDate.getMonth()+1);r.setHours(0,0,0,0);var H=this.isEqual(r,L),W=this.isEqual(r,T);if(H||w){w&&(v-=(f-1)*this.config.cellWidth),W&&(v=this.config.endDate.getDate()*this.config.cellWidth);var k=this.config.lang.monthNames[p-1],M=t(l).text(k+" "+u).css({width:v});t(i).append(M)}r.setDate(r.getDate()+1)}return a.append(t(i).css("width",o)),a.append(t(n).css("width",o)),a.append(t(s).css("width",o)),a}},{key:"renderContainer",value:function(){var e=t("<div>",{class:"gantt-container"}),a=t("<div>",{class:"gantt-wrapper"}),i=this.dateDiffInDays(this.config.startDate,this.config.endDate),n=this.renderHeader(i),s=this.renderGrid(i),o=this.renderEvents(i);return e.append(n).append(s).append(o),a.append('<div class="arrow arrow-left"><span class="arrow-icon"></span></div>').append(e).append('<div class="arrow arrow-right"><span class="arrow-icon"></span></div>'),a}},{key:"renderGrid",value:function(e){for(var a=this.config.data,i=this.getTotalWidth(e),n=this.getTotalHeight(a.length),s=t("<div>",{class:"gantt-grid",width:i}),o=t("<div>",{class:"gantt-grid-cols"}),r=t("<div>",{class:"gantt-grid-rows"}),d=new Date(this.config.startDate.getTime()),l=0;l<=e;l+=1){var c=t("<div>",{class:"gantt-grid-col",width:this.config.cellWidth,height:n});c.css("width",this.config.cellWidth);var h=d.getMonth()+1,g=d.getFullYear(),f=this.lastDayMonth(g,h);d.setHours(0,0,0,0),this.isEqual(d,f)&&c.css("border-color","#bec5cc"),o.append(c),d.setDate(d.getDate()+1)}return a.forEach(function(){var e=t("<div>",{class:"gantt-grid-row",width:i,height:this.config.cellHeight});r.append(e)},this),s.append(o).append(r),s}},{key:"renderEvents",value:function(e){var a=this.config.data,i=this.getTotalWidth(e),n=t("<div>",{class:"gantt-events",width:i});return a.forEach(function(e){var a=new Date(e.startdate),i=t("<div>",{class:"gantt-event-row",width:this.totalWidth}),s=t("<div>",{class:"gantt-event"}),o=(parseInt(e.minNight,10)+1)*this.config.cellWidth,r=this.dateDiffInDays(this.config.startDate,a),d=t.extend(e.tooltipData,{price:e.price}),l="";l="Tur"===e.type?"tourFly":"TurBus"===e.type?"tourBus":"cruise";var c=e.minNight+" Gece",h=t("<a>",{class:"gantt-event-block "+l,width:o+"px",href:""+e.url,target:"_blank"}).text(c).css("line-height",this.config.cellHeight-28+"px").data("tooltip",this.tooltipView(d)),g=t('<div class="gantt-event-icon"><div class="'+l+'"></div></div>'),f=t("<div>",{class:"gantt-event-price"}).text(e.price.original.price+" "+e.price.original.priceType),p=t("<div>",{class:"gantt-event-desc"}).text(e.title),u=r*this.config.cellWidth;i.append(s.css("left",u).append(h).append(g).append(f).append(p)).css("height",this.config.cellHeight),n.append(i)},this),n}},{key:"getTotalWidth",value:function(t){return 0===t?0:(t+1)*this.config.cellWidth}},{key:"getTotalHeight",value:function(t){return t*this.config.cellHeight}},{key:"setHours",value:function(){this.config.startDate.setHours(0,0,0,0),this.config.endDate.setHours(0,0,0,0)}},{key:"firstDayMonth",value:function(t,e){return new Date(t,e-1,1)}},{key:"lastDayMonth",value:function(t,e){return new Date(t,e,0)}},{key:"daysInMonth",value:function(t,e){return new Date(e,t,0).getDate()}},{key:"isEqual",value:function(t,e){return t.getTime()===e.getTime()}},{key:"dateDiffInDays",value:function(t,e){var a=Date.UTC(t.getFullYear(),t.getMonth(),t.getDate()),i=Date.UTC(e.getFullYear(),e.getMonth(),e.getDate());return Math.floor((i-a)/864e5)}},{key:"getFormattedDate",value:function(t){var e=t.getDate(),a=t.getMonth()+1;return t.getFullYear()+"-"+a+"-"+e}},{key:"tooltipView",value:function(t){return this.format('<div class="gantt-tooltip"> <div class="tooltip-content"> <img src="{0}" alt="tooltip-img"> <span class="title">{1}</span> <div class="desc"> {2} <br> {3} <br> {4} </div> </div> <div class="tooltip-action"> <span>Gidiş: <span class="desc">{5}</span></span><br> <span>Dönüş: <span class="desc">{6}</span></span> <div class="price"> <div class="tl">{7}</div> <div class="eur">{8}</div> </div> </div></div>',t.image,t.title,t.desc[0],t.desc[1],t.desc[2],t.dates.begin,t.dates.end,this.format("{0} {1}",t.price.converted.price,t.price.converted.priceType),this.format("{0} {1}",t.price.original.price,t.price.original.priceType))}},{key:"tooltipHover",value:function(){var e=t(this.element),a=this.config;t(".gantt-event-block",e).on("mouseenter",function(){var i=t(e).height(),n=t(e).offset().top,s=t(this).data("tooltip"),o=t(this).offset().left,r=t(this).offset().top;if(r>=i+n-168){s=t(s).css({left:o}),t("body").append(s);var d=t(".gantt-tooltip","body").outerHeight();t(".gantt-tooltip","body").css("top",r-d-12)}else s=t(s).css({top:r+a.cellHeight,left:o}),t("body").append(s);t(".gantt-tooltip","body").hide().fadeIn(250)}).on("mouseleave",function(){t(".gantt-tooltip","body").remove()})}},{key:"colHighlighter",value:function(){var e=t(this.element);t(".gantt-grid-col, .gantt-header-day, .gantt-header-day-min",e).on("mouseenter",function(){var a=t(this).index();t(".gantt-container",e).find(".gantt-grid-col").removeClass("active").eq(a).addClass("active"),t(".gantt-header",e).find(".gantt-header-days").find(".gantt-header-day").removeClass("active").eq(a).addClass("active"),t(".gantt-container",e).find(".gantt-header").find(".gantt-header-days-min").find(".gantt-header-day-min").removeClass("active").eq(a).addClass("active")}),t(".gantt-event-block",e).on("mousemove",function(){t(".gantt-container",e).find(".gantt-grid-col").removeClass("active"),t(".gantt-header",e).find(".gantt-header-days").find(".gantt-header-day").removeClass("active"),t(".gantt-container",e).find(".gantt-header").find(".gantt-header-days-min").find(".gantt-header-day-min").removeClass("active")})}},{key:"format",value:function(){for(var t=arguments[0],e=1;e<arguments.length;e+=1){var a=new RegExp("\\{"+(e-1)+"\\}","gm");t=t.replace(a,arguments[e])}return t}},{key:"destroy",value:function(){t(window).off("scroll"),this.element.empty(),this.element.removeData("plugin_Gantt"),this.hook("onDestroy")}}],[{key:"setDefaults",value:function(a){t.extend(e,a)}}]),a}();s.LANGUAGES={en:{monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"]}},t.extend(s.prototype,a);var o=t.fn.gantt;t.fn.gantt=function(e){return this.each(function(){t.data(this,"plugin_Gantt")||t.data(this,"plugin_Gantt",new s(t(this),e))})},t.fn.gantt.version="1.0.0",t.fn.gantt.l10n=s.LANGUAGES,t.fn.gantt.setDefaults=s.setDefaults,t.fn.gantt.noConflict=function(){return t.fn.gantt=o,this}});