diff --git a/core/doctype/event/event_calendar.js b/core/doctype/event/event_calendar.js index 047c8541e3..981beb2f35 100644 --- a/core/doctype/event/event_calendar.js +++ b/core/doctype/event/event_calendar.js @@ -1,4 +1,4 @@ -wn.views.calendar["Event"] = wn.views.Calendar.extend({ +wn.views.calendar["Event"] = { field_map: { "start": "starts_on", "end": "ends_on", @@ -12,4 +12,4 @@ wn.views.calendar["Event"] = wn.views.Calendar.extend({ "Private": "info" }, get_events_method: "core.doctype.event.event.get_events" -}) \ No newline at end of file +} \ No newline at end of file diff --git a/public/build.json b/public/build.json index 95413d372c..507400e1f4 100644 --- a/public/build.json +++ b/public/build.json @@ -109,9 +109,9 @@ "lib/public/js/wn/views/moduleview.js", "lib/public/js/wn/views/listview.js", "lib/public/js/wn/views/formview.js", - "lib/public/js/wn/views/load_reportview.js", "lib/public/js/wn/views/reportview.js", "lib/public/js/wn/views/calendar.js", + "lib/public/js/wn/views/ganttview.js", "lib/public/js/wn/views/query_report.js", "lib/public/js/wn/views/grid_report.js", "lib/public/js/wn/views/communication.js", diff --git a/public/js/legacy/webpage/loaders.js b/public/js/legacy/webpage/loaders.js index b8432b1483..a222b55d45 100644 --- a/public/js/legacy/webpage/loaders.js +++ b/public/js/legacy/webpage/loaders.js @@ -40,12 +40,8 @@ var load_doc = loaddoc; function new_doc(doctype, in_form) { wn.model.with_doctype(doctype, function() { - if(!in_form && locals.DocType[doctype].in_dialog) { - var new_name = wn.model.make_new_doc_and_get_name(doctype); - _f.edit_record(doctype, new_name); - } else { - wn.views.formview.create(doctype); - } + var new_name = wn.model.make_new_doc_and_get_name(doctype); + wn.set_route("Form", doctype, new_name); }) } var newdoc = new_doc; diff --git a/public/js/legacy/widgets/form/form.js b/public/js/legacy/widgets/form/form.js index 1a6336ea09..9c8a72adb6 100644 --- a/public/js/legacy/widgets/form/form.js +++ b/public/js/legacy/widgets/form/form.js @@ -392,10 +392,8 @@ _f.Frm.prototype.refresh = function(docname) { scroll(0, 0); this.docname = docname; } - if(!this.meta.istable) { - cur_frm = this; - this.parent.cur_frm = this; - } + + cur_frm = this; if(this.docname) { // document to show @@ -613,11 +611,6 @@ _f.Frm.prototype.edit_doc = function() { this.refresh(); } -_f.Frm.prototype.show_doc = function(dn) { - this.refresh(dn); -} - - _f.Frm.prototype.runscript = function(scriptname, callingfield, onrefresh) { var me = this; if(this.docname) { diff --git a/public/js/lib/jQuery.Gantt/css/style.css b/public/js/lib/jQuery.Gantt/css/style.css index 909199b2b3..6089ff1859 100644 --- a/public/js/lib/jQuery.Gantt/css/style.css +++ b/public/js/lib/jQuery.Gantt/css/style.css @@ -33,6 +33,12 @@ /* === LEFT PANEL === */ +.fn-gantt * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + .fn-gantt .leftPanel { float: left; width: 225px; @@ -42,11 +48,12 @@ z-index: 20; } -.fn-gantt .row { +.fn-gantt .row, .row .fn-gantt .row { float: left; height: 24px; line-height: 24px; margin-left: -24px; + margin-right: 0px; } .fn-gantt .leftPanel .fn-label { @@ -84,7 +91,7 @@ } .fn-gantt .spacer { - margin: -2px 0 1px 0; + margin: -2px 0 1px 0 !important; border-bottom: none; background-color: #f6f6f6; } @@ -108,11 +115,11 @@ .fn-gantt .day, .fn-gantt .date { overflow: visible; width: 24px; - line-height: 24px; + line-height: 23px; text-align: center; border-left: 1px solid #DDD; border-bottom: 1px solid #DDD; - margin: -1px 0 0 -1px; + margin: 0 0 0 -1px !important; font-size: 11px; color: #484a4d; text-shadow: 0 1px 0 rgba(255,255,255,0.75); diff --git a/public/js/lib/jQuery.Gantt/js/jquery.fn.gantt.js b/public/js/lib/jQuery.Gantt/js/jquery.fn.gantt.js index fbb0bfb31b..2a83e83649 100644 --- a/public/js/lib/jQuery.Gantt/js/jquery.fn.gantt.js +++ b/public/js/lib/jQuery.Gantt/js/jquery.fn.gantt.js @@ -1,6 +1,27 @@ +// jQuery Gantt Chart +// ================== + +// Basic usage: + +// $(".selector").gantt({ +// source: "ajax/data.json", +// scale: "weeks", +// minScale: "weeks", +// maxScale: "months", +// onItemClick: function(data) { +// alert("Item clicked - show some details"); +// }, +// onAddClick: function(dt, rowId) { +// alert("Empty space clicked - add an item!"); +// }, +// onRender: function() { +// console.log("chart rendered"); +// } +// }); + +// /*jshint shadow:true, unused:false, laxbreak:true, evil:true*/ /*globals jQuery, alert*/ - (function ($) { "use strict"; @@ -9,7 +30,7 @@ var cookieKey = "jquery.fn.gantt"; var scales = ["hours", "days", "weeks", "months"]; - + //Default settings var settings = { source: null, itemsPerPage: 7, @@ -28,6 +49,11 @@ scrollToToday: true }; + // custom selector `:findday` used to match on specified day in ms. + // + // The selector is passed a date in ms and elements are added to the + // selection filter if the element date matches, as determined by the + // id attribute containing a parsable date in ms. $.extend($.expr[":"], { findday: function (a, i, m) { var cd = new Date(parseInt(m[3], 10)); @@ -40,7 +66,7 @@ return cd.getTime() === ed.getTime(); } }); - + // custom selector `:findweek` used to match on specified week in ms. $.extend($.expr[":"], { findweek: function (a, i, m) { var cd = new Date(parseInt(m[3], 10)); @@ -52,7 +78,7 @@ return cd === ed; } }); - + // custom selector `:findmonth` used to match on specified month in ms. $.extend($.expr[":"], { findmonth: function (a, i, m) { var cd = new Date(parseInt(m[3], 10)); @@ -65,6 +91,12 @@ } }); + // Date prototype helpers + // ====================== + + // `getWeekId` returns a string in the form of 'dh-YYYY-WW', where WW is + // the week # for the year. + // It is used to add an id to the week divs Date.prototype.getWeekId = function () { var y = this.getFullYear(); var w = this.getDayForWeek().getWeekOfYear(); @@ -75,8 +107,8 @@ return 'dh-' + y + "-" + w; }; - - + // `getRepDate` returns the seconds since the epoch for a given date + // depending on the active scale Date.prototype.genRepDate = function () { switch (settings.scale) { case "hours": @@ -89,11 +121,15 @@ return this.getTime(); } }; + + // `getDayOfYear` returns the day number for the year Date.prototype.getDayOfYear = function () { var fd = new Date(this.getFullYear(), 0, 0); var sd = new Date(this.getFullYear(), this.getMonth(), this.getDate()); return Math.ceil((sd - fd) / 86400000); }; + + // `getWeekOfYear` returns the week number for the year Date.prototype.getWeekOfYear = function () { var ys = new Date(this.getFullYear(), 0, 1); var sd = new Date(this.getFullYear(), this.getMonth(), this.getDate()); @@ -104,9 +140,14 @@ return Math.ceil(daysCount / 7); }; + + // `getDaysInMonth` returns the number of days in a month Date.prototype.getDaysInMonth = function () { return 32 - new Date(this.getFullYear(), this.getMonth(), 32).getDate(); }; + + // `hasWeek` returns `true` if the date resides on a week boundary + // **????????????????? Don't know if this is true** Date.prototype.hasWeek = function () { var df = new Date(this.valueOf()); df.setDate(df.getDate() - df.getDay()); @@ -119,6 +160,9 @@ return (df.getMonth() === this.getMonth() && dt.getDate() < 4) || (df.getMonth() !== this.getMonth() && dt.getDate() >= 4); } }; + + // `getDayForWeek` returns the Date object for the starting date of + // the week # for the year Date.prototype.getDayForWeek = function () { var df = new Date(this.valueOf()); df.setDate(df.getDate() - df.getDay()); @@ -131,11 +175,14 @@ } }; - /** - * Core functions for creating grid. - */ - var core = { + // Grid management + // =============== + + // Core object is responsible for navigation and rendering + var core = { + // Return the element whose topmost point lies under the given point + // Normalizes for IE elementFromPoint: function (x, y) { if ($.browser.msie) { @@ -148,13 +195,12 @@ return document.elementFromPoint(x, y); }, - /** - * Create header - */ + + // **Create the chart** create: function (element) { - /** - * Retrieve data - */ + + // Initialize data with a json object or fetch via an xhr + // request depending on `settings.source` if (typeof settings.source !== "string") { element.data = settings.source; core.init(element); @@ -165,6 +211,10 @@ }); } }, + + // **Setup the initial view** + // Here we calculate the number of rows, pages and visible start + // and end dates once the data is ready init: function (element) { element.rowsNum = element.data.length; element.pageCount = Math.ceil(element.rowsNum / settings.itemsPerPage); @@ -174,9 +224,11 @@ element.dateEnd = tools.getMaxDate(element); - // core.render(element); + /* core.render(element); */ core.waitToggle(element, true, function () { core.render(element); }); }, + + // **Render the grid** render: function (element) { var content = $('
'); var $leftPanel = core.leftPanel(element); @@ -201,6 +253,7 @@ core.markNow(element); core.fillData(element, $dataPanel, $leftPanel); + // Set a cookie to record current position in the view if (settings.useCookie) { var sc = $.cookie(this.cookieKey + "ScrollPos"); if (sc) { @@ -208,6 +261,7 @@ } } + // Scroll the grid to today's date if (settings.scrollToToday) { var startPos = Math.round((settings.startPos / 1000 - element.dateStart / 1000) / 86400) - 2; if ((startPos > 0 && element.hPosition !== 0)) { @@ -227,6 +281,7 @@ } else { core.repositionLabel(element); } + // or, scroll the grid to the left most date in the panel } else { if ((element.hPosition !== 0)) { if (element.scaleOldWidth) { @@ -251,6 +306,8 @@ core.waitToggle(element, false); settings.onRender(); }, + + // Create and return the left panel with labels leftPanel: function (element) { /* Left panel */ var ganttLeftPanel = $('
') @@ -276,21 +333,21 @@ ganttLeftPanel.append(entries.join("")); return ganttLeftPanel; }, + + // Create and return the data panel element dataPanel: function (element, width) { var dataPanel = $('
'); - /* - * Mouse wheel events - */ - var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel"; + // Handle mousewheel events for scrolling the data panel + var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel"; if (document.attachEvent) { element.attachEvent("on" + mousewheelevt, function (e) { core.wheelScroll(element, e); }); } else if (document.addEventListener) { element.addEventListener(mousewheelevt, function (e) { core.wheelScroll(element, e); }, false); } - - // addNEwClick + // Handle click events and dispatch to registered `onAddClick` + // function dataPanel.click(function (e) { e.stopPropagation(); @@ -315,12 +372,13 @@ break; } - // Adjust, so get middle of elm - // corrY -= Math.floor(tools.getCellSize() / 2); + /* Adjust, so get middle of elm + corrY -= Math.floor(tools.getCellSize() / 2); + */ - //find column + // Find column where click occurred var col = core.elementFromPoint(e.pageX, datapanel.offset().top + corrY); - // hit the label? + // Was the label clicked directly? if (col.className === "fn-label") { col = $(col.parentNode); } else { @@ -328,9 +386,9 @@ } var dt = col.attr("repdate"); - //find row + // Find row where click occurred var row = core.elementFromPoint(leftpanel.offset().left + leftpanel.width() - 10, e.pageY); - // hit the label? + // Was the lable clicked directly? if (row.className.indexOf("fn-label") === 0) { row = $(row.parentNode); } else { @@ -338,14 +396,20 @@ } var rowId = row.data().id; + // Dispatch user registered function with the DateTime in ms + // and the id if the clicked object is a row settings.onAddClick(dt, rowId); }); return dataPanel; }, - // Creates Data container with header + + // Creates and return the right panel containing the year/week/day + // header rightPanel: function (element, leftPanel) { var range = null; + // Days of the week have a class of one of + // `sn` (Saturday), `sa` (Sunday), or `wd` (Weekday) var dowClass = [" sn", " wd", " wd", " wd", " wd", " wd", " sa"]; var gridDowClass = [" sn", "", "", "", "", "", " sa"]; @@ -368,8 +432,9 @@ today = new Date(today.getFullYear(), today.getMonth(), today.getDate()); var holidays = settings.holidays ? settings.holidays.join() : ''; + // Setup the headings based on the chosen `settings.scale` switch (settings.scale) { - // hours ///////////////////////////////////////////////////////////////////////////////////////// + // **Hours** case "hours": range = tools.parseTimeRange(element.dateStart, element.dateEnd, element.scaleStep); @@ -380,9 +445,8 @@ for (var i = 0; i < range.length; i++) { var rday = range[i]; - /* - * Fill years - */ + + // Fill years var rfy = rday.getFullYear(); if (rfy !== year) { yearArr.push( @@ -397,9 +461,8 @@ } daysInYear++; - /* - * Fill months - */ + + // Fill months var rm = rday.getMonth(); if (rm !== month) { monthArr.push( @@ -413,9 +476,9 @@ } daysInMonth++; - /* - * Fill days & hours - */ + + // Fill days & hours + var rgetDay = rday.getDay(); var getDay = day.getDay(); var day_class = dowClass[rgetDay]; @@ -448,18 +511,15 @@ + '
'); } - /* - * Last year - */ - yearArr.push( + // Last year + yearArr.push( '
' + year + '
'); - /* - * Last month - */ + + // Last month monthArr.push( '
' @@ -482,10 +542,8 @@ var dataPanel = core.dataPanel(element, range.length * tools.getCellSize()); - /* - * Append panel elements - */ + // Append panel elements dataPanel.append(yearArr.join("")); dataPanel.append(monthArr.join("")); dataPanel.append($('
').html(dayArr.join(""))); @@ -494,7 +552,7 @@ break; - // weeks ///////////////////////////////////////////////////////////////////////////////////////// + // **Weeks** case "weeks": range = tools.parseWeeksRange(element.dateStart, element.dateEnd); yearArr = ['
']; @@ -505,9 +563,8 @@ for (var i = 0; i < range.length; i++) { var rday = range[i]; - /* - * Fill years - */ + + // Fill years if (rday.getFullYear() !== year) { yearArr.push( ('
' + '
' + rday.getWeekOfYear() + '
'); } - /* - * Last year - */ + + // Last year yearArr.push( '
' + year + '
'); - /* - * Last month - */ + + // Last month monthArr.push( '
' @@ -561,13 +613,11 @@ var dataPanel = core.dataPanel(element, range.length * tools.getCellSize()); - dataPanel.append(yearArr.join("") + monthArr.join("") + dayArr.join("") + (dowArr.join(""))); - - break; - // months //////////////////////////////////////////////////////////////////////////////////////// + + // **Months** case 'months': range = tools.parseMonthsRange(element.dateStart, element.dateEnd); @@ -577,9 +627,8 @@ for (var i = 0; i < range.length; i++) { var rday = range[i]; - /* - * Fill years - */ + + // Fill years if (rday.getFullYear() !== year) { yearArr.push( ('
' + (1 + rday.getMonth()) + '
'); - - - } - /* - * Last year - */ + + // Last year yearArr.push( '
' + year + '
'); - /* - * Last month - */ + + // Last month monthArr.push( '
"
' @@ -616,29 +660,27 @@ var dataPanel = core.dataPanel(element, range.length * tools.getCellSize()); - /* - * Append panel elements - */ + // Append panel elements dataPanel.append(yearArr.join("")); dataPanel.append(monthArr.join("")); dataPanel.append($('
').html(dayArr.join(""))); dataPanel.append($('
').html(dowArr.join(""))); - break; - // days ////////////////////////////////////////////////////////////////////////////////////////// + + // **Days (default)** default: range = tools.parseDateRange(element.dateStart, element.dateEnd); - var year = range[0].getFullYear(); - var month = range[0].getMonth(); - var day = range[0]; + var dateBefore = ktkGetNextDate(range[0], -1); + var year = dateBefore.getFullYear(); + var month = dateBefore.getMonth(); + var day = dateBefore; for (var i = 0; i < range.length; i++) { var rday = range[i]; - /* - * Fill years - */ + + // Fill years if (rday.getFullYear() !== year) { yearArr.push( ('
' + settings.dow[getDay] + '
'); } //for - /* - * Last year - */ + // Last year yearArr.push( '
' + year + '
'); - /* - * Last month - */ + + // Last month monthArr.push( '
' + settings.months[month] + '
'); - + var dataPanel = core.dataPanel(element, range.length * tools.getCellSize()); - /* - * Append panel elements - */ + + // Append panel elements + dataPanel.append(yearArr.join("")); dataPanel.append(monthArr.join("")); - dataPanel.append($('
').html(dayArr.join(""))); - dataPanel.append($('
').html(dowArr.join(""))); + dataPanel.append($('
').html(dayArr.join(""))); + dataPanel.append($('
').html(dowArr.join(""))); break; } @@ -713,9 +750,11 @@ return $('
').append(dataPanel); }, - + // **Navigation** navigation: function (element) { var ganttNavigate = null; + // Scrolling navigation is provided by setting + // `settings.navigate='scroll'` if (settings.navigate === "scroll") { ganttNavigate = $('