Planner view:

- Add vertical lines
- Keep larger timescale header for zooming out
This commit is contained in:
Nathan Gray 2016-01-21 23:07:29 +00:00
parent 24dea3f2d8
commit c4923848ef
5 changed files with 77 additions and 39 deletions

View File

@ -85,6 +85,10 @@ var et2_calendar_planner = et2_calendar_view.extend([et2_IDetachedDOM, et2_IResi
.appendTo(this.gridHeader); .appendTo(this.gridHeader);
this.rows = $j(document.createElement("div")) this.rows = $j(document.createElement("div"))
.addClass("calendar_plannerRows")
.appendTo(this.div);
this.grid = $j(document.createElement("div"))
.addClass("calendar_plannerGrid")
.appendTo(this.div); .appendTo(this.div);
this.vertical_bar = $j(document.createElement("div")) this.vertical_bar = $j(document.createElement("div"))
@ -296,21 +300,27 @@ var et2_calendar_planner = et2_calendar_view.extend([et2_IDetachedDOM, et2_IResi
var start_date = new Date(start.getUTCFullYear(), start.getUTCMonth(),start.getUTCDate()); var start_date = new Date(start.getUTCFullYear(), start.getUTCMonth(),start.getUTCDate());
var end_date = new Date(end.getUTCFullYear(), end.getUTCMonth(),end.getUTCDate()); var end_date = new Date(end.getUTCFullYear(), end.getUTCMonth(),end.getUTCDate());
var day_count = Math.round((end_date - start_date) /(1000*3600*24))+1; var day_count = Math.round((end_date - start_date) /(1000*3600*24))+1;
if(day_count >= 28) if(day_count >= 6)
{ {
this.headers.append(this._header_months(start, day_count)); this.headers.append(this._header_months(start, day_count));
} }
if(day_count >= 5 && day_count < 120) if(day_count < 120)
{ {
this.headers.append(this._header_weeks(start, day_count)); var weeks = this._header_weeks(start, day_count);
this.headers.append(weeks);
this.grid.append(weeks);
} }
if(day_count < 60) if(day_count < 60)
{ {
this.headers.append(this._header_days(start, day_count)); var days = this._header_days(start, day_count);
this.headers.append(days);
this.grid.append(days);
} }
if(day_count <= 7) if(day_count <= 7)
{ {
this.headers.append(this._header_hours(start, day_count)); var hours = this._header_hours(start, day_count);
this.headers.append(hours);
this.grid.append(hours);
} }
}, },
// Labels for the rows // Labels for the rows
@ -542,22 +552,27 @@ var et2_calendar_planner = et2_calendar_view.extend([et2_IDetachedDOM, et2_IResi
var end_date = new Date(end.getUTCFullYear(), end.getUTCMonth(),end.getUTCDate()); var end_date = new Date(end.getUTCFullYear(), end.getUTCMonth(),end.getUTCDate());
var day_count = Math.round((end_date - start_date) /(1000*3600*24))+1; var day_count = Math.round((end_date - start_date) /(1000*3600*24))+1;
if(day_count >= 28) if(day_count >= 6)
{ {
this.headers.append(this._header_months(start, day_count)); this.headers.append(this._header_months(start, day_count));
} }
if(day_count < 120)
if(day_count >= 5 && day_count < 120)
{ {
this.headers.append(this._header_weeks(start, day_count)); var weeks = this._header_weeks(start, day_count);
this.headers.append(weeks);
this.grid.append(weeks);
} }
if(day_count < 60) if(day_count < 60)
{ {
this.headers.append(this._header_days(start, day_count)); var days = this._header_days(start, day_count);
this.headers.append(days);
this.grid.append(days);
} }
if(day_count <= 7) if(day_count <= 7)
{ {
this.headers.append(this._header_hours(start, day_count)); var hours = this._header_hours(start, day_count);
this.headers.append(hours);
this.grid.append(hours);
} }
}, },
row_labels: function() { row_labels: function() {
@ -778,7 +793,9 @@ var et2_calendar_planner = et2_calendar_view.extend([et2_IDetachedDOM, et2_IResi
} }
// Clear old rows // Clear old rows
this.rows.empty(); this.rows.empty()
.append(this.grid);
this.grid.empty();
var grouper = this.groupers[isNaN(this.options.group_by) ? this.options.group_by : 'category']; var grouper = this.groupers[isNaN(this.options.group_by) ? this.options.group_by : 'category'];
if(!grouper) return; if(!grouper) return;
@ -787,6 +804,9 @@ var et2_calendar_planner = et2_calendar_view.extend([et2_IDetachedDOM, et2_IResi
this.headers.empty(); this.headers.empty();
this.headerTitle.text(grouper.title.apply(this)); this.headerTitle.text(grouper.title.apply(this));
grouper.headers.apply(this); grouper.headers.apply(this);
this.grid.find('*').contents().filter(function(){
return this.nodeType === 3;
}).remove();
// Get the rows / labels // Get the rows / labels
var labels = grouper.row_labels.call(this); var labels = grouper.row_labels.call(this);
@ -825,9 +845,9 @@ var et2_calendar_planner = et2_calendar_view.extend([et2_IDetachedDOM, et2_IResi
} }
// Adjust header if there's a scrollbar // Adjust header if there's a scrollbar
if(this.rows.children().first().length) if(this.rows.children().last().length)
{ {
this.gridHeader.css('margin-right', (this.rows.width() - this.rows.children().first().width()) + 'px'); this.gridHeader.css('margin-right', (this.rows.width() - this.rows.children().last().width()) + 'px');
} }
this.value = []; this.value = [];
}, },
@ -921,15 +941,12 @@ var et2_calendar_planner = et2_calendar_view.extend([et2_IDetachedDOM, et2_IResi
{ {
days_in_month = days - i; days_in_month = days - i;
} }
if (days_in_month > 5)
{
var title = app.calendar.egw.lang(date('F',new Date(t.valueOf() + t.getTimezoneOffset() * 60 * 1000))) var title = app.calendar.egw.lang(date('F',new Date(t.valueOf() + t.getTimezoneOffset() * 60 * 1000)))
}
if (days_in_month > 10) if (days_in_month > 10)
{ {
title += ' '+t.getUTCFullYear(); title += ' '+t.getUTCFullYear();
} }
else else if (days_in_month < 5)
{ {
title = '&nbsp;'; title = '&nbsp;';
} }
@ -990,7 +1007,7 @@ var et2_calendar_planner = et2_calendar_view.extend([et2_IDetachedDOM, et2_IResi
state.setUTCMinutes(0); state.setUTCMinutes(0);
state = state.toJSON(); state = state.toJSON();
if(days_in_week > 1) if(days_in_week > 1 || days == 1)
{ {
content += '<div class="calendar_plannerWeekScale et2_clickable et2_link" data-date=\'' + state + '\' style="left: '+left+'%; width: '+week_width+'%;">'+title+"</div>"; content += '<div class="calendar_plannerWeekScale et2_clickable et2_link" data-date=\'' + state + '\' style="left: '+left+'%; width: '+week_width+'%;">'+title+"</div>";
} }

View File

@ -272,7 +272,7 @@ var et2_calendar_planner_row = et2_valueWidget.extend([et2_IDetachedDOM],
rows[c][i].div.css('top', top+'%'); rows[c][i].div.css('top', top+'%');
rows[c][i].div.css('height', (100/rows.length)+'%'); rows[c][i].div.css('height', (100/rows.length)+'%');
rows[c][i].div.css('left', left.toFixed(1)+'%'); rows[c][i].div.css('left', left.toFixed(1)+'%');
rows[c][i].div.css('width', width.toFixed(1)+'%'); rows[c][i].div.outerWidth(width/100 *this.rows.width() +'px');
} }
} }
if(height) if(height)

View File

@ -764,7 +764,6 @@ e.g. the div with class calendar_calTimeGrid is generated by the timeGridWidget
top: 0px; top: 0px;
left: 0px; left: 0px;
width: 99.5%; width: 99.5%;
padding-right: 3px;
background-color: #f0f0f0; background-color: #f0f0f0;
} }
.calendar_plannerWidget > div:not(.calendar_plannerHeader) { .calendar_plannerWidget > div:not(.calendar_plannerHeader) {
@ -778,7 +777,41 @@ e.g. the div with class calendar_calTimeGrid is generated by the timeGridWidget
top: 0px; top: 0px;
left: 0px; left: 0px;
} }
.calendar_plannerRows {
position:relative;
}
.calendar_plannerGrid {
position: absolute;
top: 0px;
bottom: 0px;
left: 172px;
right: 0px;
overflow:hidden;
height: 100%;
border-left: 1px solid silver;
margin-left: -1px;
}
.calendar_plannerGrid > .calendar_plannerScale,
.calendar_plannerGrid > .calendar_plannerScaleDay {
height: 100%;
position: absolute;
}
.calendar_plannerGrid .calendar_calToday, .calendar_plannerGrid .calendar_calHoliday {
background-color: initial;
}
.calendar_plannerGrid > div:nth-last-child(2) > div {
border: none;
border-right: 1px solid silver;
}
.calendar_plannerGrid > div:last-child > div {
border: none;
}
.calendar_plannerGrid > div:last-child > div:not(:first-child) {
background-image: linear-gradient(0deg, rgba(192, 192, 192, 0.75) 4px, transparent 0%);
background-position: top left;
background-size: 1px 10px;
background-repeat: repeat-y;
}
/* calendar_plannerRowWidget contains a calendar_plannerRowHeader and multiple eventRowWidgets in an calendar_eventRows /* calendar_plannerRowWidget contains a calendar_plannerRowHeader and multiple eventRowWidgets in an calendar_eventRows
*/ */
.calendar_plannerRowWidget { .calendar_plannerRowWidget {
@ -787,7 +820,6 @@ e.g. the div with class calendar_calTimeGrid is generated by the timeGridWidget
left: 0px; left: 0px;
width: 100%; width: 100%;
min-height: 20px; min-height: 20px;
background-color: white;
} }
.calendar_plannerRowWidget:not(:first-child) { .calendar_plannerRowWidget:not(:first-child) {
border-top: 1px solid silver; border-top: 1px solid silver;
@ -854,18 +886,20 @@ e.g. the div with class calendar_calTimeGrid is generated by the timeGridWidget
width: 150px; width: 150px;
height: 100%; height: 100%;
line-height: 20px; line-height: 20px;
border-right: 1px solid silver;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space:nowrap; white-space:nowrap;
overflow:hidden; overflow:hidden;
padding-left: 20px; padding-left: 20px;
padding-right: 2px; padding-right: 1px;
} }
.calendar_plannerRowHeader:hover { .calendar_plannerRowHeader:hover {
overflow:visible; overflow:visible;
z-index: 30; z-index: 30;
cursor: pointer; cursor: pointer;
} }
.calendar_plannerHeaderTitle {
border-right: 1px solid silver;
}
/* calendar_eventRows contain multiple eventRowWidgets /* calendar_eventRows contain multiple eventRowWidgets
*/ */

View File

@ -970,19 +970,12 @@ e.g. the div with class calendar_calTimeGrid is generated by the timeGridWidget
*/ */
.calendar_plannerWidget { .calendar_plannerWidget {
width: 99.5%; width: 99.5%;
border: 1px solid gray;
padding-right: 3px;
} }
.calendar_plannerWidget img { .calendar_plannerWidget img {
height: 16px; height: 16px;
} }
/* calendar_plannerScale represents a scale-row of the calendar_plannerHeader, containing multiple planner{Day|Week|Month}Scales /* calendar_plannerScale represents a scale-row of the calendar_plannerHeader, containing multiple planner{Day|Week|Month}Scales
*/ */
.calendar_plannerScale,
.calendar_plannerScaleDay {
height: 20px;
line-height: 20px;
}
.calendar_plannerScaleDay { .calendar_plannerScaleDay {
height: 28px; height: 28px;
line-height: 14px; line-height: 14px;

View File

@ -1067,8 +1067,6 @@ e.g. the div with class calendar_calTimeGrid is generated by the timeGridWidget
*/ */
.calendar_plannerWidget { .calendar_plannerWidget {
width: 99.5%; width: 99.5%;
border: 1px solid gray;
padding-right: 3px;
img{.dimension_height_s;} img{.dimension_height_s;}
} }
@ -1076,10 +1074,6 @@ e.g. the div with class calendar_calTimeGrid is generated by the timeGridWidget
/* calendar_plannerScale represents a scale-row of the calendar_plannerHeader, containing multiple planner{Day|Week|Month}Scales /* calendar_plannerScale represents a scale-row of the calendar_plannerHeader, containing multiple planner{Day|Week|Month}Scales
*/ */
.calendar_plannerScale,.calendar_plannerScaleDay {
height: 20px;
line-height: 20px;
}
.calendar_plannerScaleDay { .calendar_plannerScaleDay {
height: 28px; height: 28px;
line-height: 14px; line-height: 14px;