diff --git a/index.html b/index.html index dd193db..75f41b9 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ - + jQuery.Gantt @@ -185,7 +185,7 @@

"days" - string ("months", "weeks", "days", "hours") + string ("months", "weeks", "days", "hours12", "hours6", "hours3", "hours") @@ -196,7 +196,7 @@

"months" - string ("months", "weeks", "days", "hours") + string ("months", "weeks", "days", "hours12", "hours6", "hours3", "hours") @@ -207,7 +207,7 @@

"hours" - string ("months", "weeks", "days", "hours") + string ("months", "weeks", "days", "hours12", "hours6", "hours3", "hours") diff --git a/js/jquery.fn.gantt.js b/js/jquery.fn.gantt.js index 564f419..54f630d 100644 --- a/js/jquery.fn.gantt.js +++ b/js/jquery.fn.gantt.js @@ -100,14 +100,14 @@ // `getRepDate` returns the milliseconds since the epoch for a given date // depending on the active scale - Date.prototype.getRepDate = function (scale) { - switch (scale) { - case "hours": - return this.getTime(); + Date.prototype.getRepDate = function (scaleGroup) { + switch (scaleGroup) { case "weeks": return this.getDayForWeek().getTime(); case "months": return new Date(this.getFullYear(), this.getMonth(), 1).getTime(); + case "hours": + /* falls through */ case "days": /* falls through */ default: @@ -169,7 +169,24 @@ $.fn.gantt = function (options) { - var scales = ["hours", "days", "weeks", "months"]; + var scales = ["hours", "hours3", "hours6", "hours12", "days", "weeks", "months"]; + var scaleSettings = { + "hours": {scaleGroup: "hours", scaleStep: 1}, + "hours3": {scaleGroup: "hours", scaleStep: 3}, + "hours6": {scaleGroup: "hours", scaleStep: 6}, + "hours12": {scaleGroup: "hours", scaleStep: 12}, + "days": {scaleGroup: "days"}, + "weeks": {scaleGroup: "weeks"}, + "months": {scaleGroup: "months"}, + }; + + var scaleGroupSttings = { + "hours": {headerRows: 5}, + "days": {headerRows: 4}, + "weeks": {headerRows: 3}, + "months": {headerRows: 2}, + }; + //Default settings var settings = { source: [], @@ -199,6 +216,13 @@ // read options $.extend(settings, options); + settings.scale = ($.inArray(settings.scale, scales) >= 0) ? settings.scale : "days"; + settings.maxScale = ($.inArray(settings.maxScale, scales) >= 0) ? settings.maxScale : scales[scales.length - 1]; + settings.minScale = ($.inArray(settings.minScale, scales) >= 0) ? settings.minScale : scales[0]; + + settings.maxScale = ($.inArray(settings.scale, scales) <= $.inArray(settings.maxScale, scales) ? settings.maxScale : settings.scale); + settings.minScale = ($.inArray(settings.scale, scales) >= $.inArray(settings.minScale, scales) ? settings.minScale : settings.scale); + // can't use cookie if don't have `$.cookie` settings.useCookie = settings.useCookie && $.isFunction($.cookie); @@ -319,9 +343,10 @@ // Create and return the left panel with labels leftPanel: function (element) { /* Left panel */ + var headerRows = scaleGroupSttings[element.scaleGroup].headerRows; var ganttLeftPanel = $('
') .append($('
') - .css("height", tools.getCellSize() * element.headerRows) + .css("height", tools.getCellSize() * headerRows) .css("width", "100%")); var entries = []; @@ -373,21 +398,8 @@ var corrX/* <- never used? */, corrY; var leftpanel = $(element).find(".fn-gantt .leftPanel"); var datapanel = $(element).find(".fn-gantt .dataPanel"); - switch (settings.scale) { - case "months": - corrY = tools.getCellSize(); - break; - case "hours": - corrY = tools.getCellSize() * 4; - break; - case "days": - corrY = tools.getCellSize() * 3; - break; - case "weeks": - /* falls through */ - default: - corrY = tools.getCellSize() * 2; - } + + corrY = tools.getCellSize() * (scaleGroupSttings[element.scaleGroup].headerRows -1); /* Adjust, so get middle of elm corrY -= Math.floor(tools.getCellSize() / 2); @@ -451,11 +463,12 @@ var rday, dayClass; var dataPanel; - // Setup the headings based on the chosen `settings.scale` - switch (settings.scale) { + // Setup the headings based on scaleGroup + switch (element.scaleGroup) { // **Hours** case "hours": - range = tools.parseTimeRange(element.dateStart, element.dateEnd, element.scaleStep); + var scaleStep = scaleSettings[settings.scale].scaleStep; + range = tools.parseTimeRange(element.dateStart, element.dateEnd, scaleStep); year = range[0].getFullYear(); month = range[0].getMonth(); @@ -526,7 +539,7 @@ '" id="dh-' + rday.getTime() + '" data-offset="' + i * tools.getCellSize() + - '" data-repdate="' + rday.getRepDate(settings.scale) + + '" data-repdate="' + rday.getRepDate(element.scaleGroup) + '">
' + rday.getHours() + '
'); @@ -626,7 +639,7 @@ '
' + + '" data-repdate="' + rday.getRepDate(element.scaleGroup) + '">' + '
' + week + '
'); } @@ -679,7 +692,7 @@ monthArr.push( '
' + + '" data-repdate="' + rday.getRepDate(element.scaleGroup) + '">' + (1 + rday.getMonth()) + '
'); } @@ -756,12 +769,12 @@ '
' + + '" data-repdate="' + rday.getRepDate(element.scaleGroup) + '">' + '
' + rday.getDate() + '
'); dowArr.push( '
' + + '" data-repdate="' + rday.getRepDate(element.scaleGroup) + '">' + '
' + settings.dow[day] + '
'); } //for @@ -823,28 +836,12 @@ .append($('