diff --git a/UI/Common/UIxToolbar.m b/UI/Common/UIxToolbar.m index c9cc5d866..b4376b311 100644 --- a/UI/Common/UIxToolbar.m +++ b/UI/Common/UIxToolbar.m @@ -35,7 +35,7 @@ { NSArray *toolbarConfig; NSArray *toolbarGroup; - NSString *toolbar; + NSString *toolbar; NSDictionary *buttonInfo; } @@ -60,7 +60,7 @@ [toolbarGroup release]; [toolbarConfig release]; [buttonInfo release]; - [toolbar release]; + [toolbar release]; [super dealloc]; } diff --git a/UI/Scheduler/English.lproj/Localizable.strings b/UI/Scheduler/English.lproj/Localizable.strings index 7925b86d4..d0da2346f 100644 --- a/UI/Scheduler/English.lproj/Localizable.strings +++ b/UI/Scheduler/English.lproj/Localizable.strings @@ -5,6 +5,7 @@ "Create a new event" = "Create a new event"; "Create a new task" = "Create a new task"; "Edit this event or task" = "Edit this event or task"; +"Print the current calendar view" = "Print the current calendar view"; "Delete this event or task" = "Delete this event or task"; "Go to today" = "Go to today"; "Switch to day view" = "Switch to day view"; @@ -117,7 +118,7 @@ "Name of the Calendar" = "Name of the Calendar"; "new" = "New"; -"printview" = "Print View"; +"Print view" = "Print view"; "edit" = "Edit"; "delete" = "Delete"; "proposal" = "Proposal"; @@ -145,6 +146,27 @@ "Hide already accepted and rejected appointments" = "Hide already accepted and rejected appointments"; "Show already accepted and rejected appointments" = "Show already accepted and rejected appointments"; +/* Print view */ +"LIST" = "List"; +"Print Settings" = "Print Settings"; +"Title:" = "Title:"; +"Layout:" = "Layout:"; +"What to Print" = "What to Print"; +"Events" = "Events"; +"Tasks" = "Tasks"; +"Current view" = "Current View"; +"Selected events and tasks" = "Selected events and tasks"; +"Custom Date Range" = "Custom Date Range"; +"From:" = "From:"; +"To:" = "To:"; +"Options" = "Options"; +"Locale" = "Locale"; +"GMT" = "GMT"; +"Tasks with no due date" = "Tasks with no due date"; +"Completed tasks" = "Completed Tasks"; +"Display time:" = "Display Time:"; +"Calendar:" = "Calendar:"; + /* Appointments */ diff --git a/UI/Scheduler/GNUmakefile b/UI/Scheduler/GNUmakefile index c3bc3b3d7..9f96857a6 100644 --- a/UI/Scheduler/GNUmakefile +++ b/UI/Scheduler/GNUmakefile @@ -23,6 +23,7 @@ SchedulerUI_OBJC_FILES = \ UIxCalFolderActions.m \ \ UIxCalView.m \ + UIxCalViewPrint.m \ UIxCalDayView.m \ UIxCalMulticolumnDayView.m \ UIxCalWeekView.m \ diff --git a/UI/Scheduler/Toolbars/SOGoAppointmentFolders.toolbar b/UI/Scheduler/Toolbars/SOGoAppointmentFolders.toolbar index 8091a7053..54a5eae10 100644 --- a/UI/Scheduler/Toolbars/SOGoAppointmentFolders.toolbar +++ b/UI/Scheduler/Toolbars/SOGoAppointmentFolders.toolbar @@ -37,6 +37,12 @@ onclick = "return onMonthOverview();"; image = "month-view.png"; tooltip = "Switch to month view"; } ), + ( { link = "#"; + onclick = "return printView();"; + cssClass = "tbicon_print single-window-not-conditional"; + image = "tb-mail-print-flat-24x24.png"; + label = "Print view"; + tooltip = "Print the current calendar view"; } ), ( { link = "#"; label="Delete"; onclick = "return deleteEvent(this);"; diff --git a/UI/Scheduler/UIxCalViewPrint.h b/UI/Scheduler/UIxCalViewPrint.h new file mode 100644 index 000000000..ac3de23a8 --- /dev/null +++ b/UI/Scheduler/UIxCalViewPrint.h @@ -0,0 +1,30 @@ +/* UIxCalViewPrint.h - this file is part of SOGo + * + * Copyright (C) 2006-2014 Inverse inc. + * + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include + +@interface UIxCalViewPrint : UIxComponent +{ + id item; +} + +@end + diff --git a/UI/Scheduler/UIxCalViewPrint.m b/UI/Scheduler/UIxCalViewPrint.m new file mode 100644 index 000000000..af94b9792 --- /dev/null +++ b/UI/Scheduler/UIxCalViewPrint.m @@ -0,0 +1,82 @@ +/* UIxCalViewPrint.m - this file is part of SOGo + * + * Copyright (C) 2006-2014 Inverse inc. + * + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#import +#import + +#import + +static NSArray *layoutItems = nil; + +@implementation UIxCalViewPrint + ++ (void) initialize +{ + if (!layoutItems) + { + layoutItems = [NSArray arrayWithObjects: @"LIST", @"Daily", @"Weekly", nil]; + [layoutItems retain]; + } + +} +- (id) init +{ + item = nil; + return [super init]; +} + +- (void) dealloc +{ + [item release]; + [super dealloc]; +} + +/****************************************************************/ +/* Interfacing; populating the popup list for the print layouts */ + +- (void) setItem: (NSString *) newItem +{ + ASSIGN (item, newItem); +} + +- (NSString *) item +{ + return item; +} + +- (NSArray *) printLayoutList +{ + return layoutItems; +} + +- (NSString *) itemPrintLayoutText +{ + return [self labelForKey: [NSString stringWithFormat: item]]; +} + +- (NSString *) layoutSelectedByUser +{ + return nil; +} +/******************************************************************/ +/* */ + +@end diff --git a/UI/Scheduler/product.plist b/UI/Scheduler/product.plist index 3c3af6be9..417b9e2d6 100644 --- a/UI/Scheduler/product.plist +++ b/UI/Scheduler/product.plist @@ -40,6 +40,11 @@ protectedBy = "View"; pageName = "UIxCalMainView"; }; + printView = { + protectedBy = ""; + pageName = "UIxCalViewPrint"; + actionClass = "UIxCalViewPrint"; + }; addWebCalendar = { protectedBy = "View"; actionClass = "UIxCalMainActions"; diff --git a/UI/Templates/SchedulerUI/UIxCalViewPrint.wox b/UI/Templates/SchedulerUI/UIxCalViewPrint.wox new file mode 100644 index 000000000..cbee832c1 --- /dev/null +++ b/UI/Templates/SchedulerUI/UIxCalViewPrint.wox @@ -0,0 +1,109 @@ + + + + +
+ + + + + + + + + + + +
+ +
+ +
+ + + + + + + +
+ +
+ + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + +
+
+
\ No newline at end of file diff --git a/UI/Templates/UIxPageFrame.wox b/UI/Templates/UIxPageFrame.wox index 9095bf27f..dab148743 100644 --- a/UI/Templates/UIxPageFrame.wox +++ b/UI/Templates/UIxPageFrame.wox @@ -6,195 +6,155 @@ xmlns:var="http://www.skyrix.com/od/binding" xmlns:const="http://www.skyrix.com/od/constant" xmlns:rsrc="OGo:url" - xmlns:label="OGo:label" - > - + xmlns:label="OGo:label"> + + + + + - - <var:string value="title"/> - - - - - - - - - - - - - - - + + <var:string value="title"/> + + + + + + + + + + + + + + + + + - + - - + + + + + + + + +
+ var UserSettings = ;
+ +
+ + + +
+ +
- - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- - - - + +
+
+ + + + - - - - - - - - - - - - - - - - -
- - + + + + + + + + + + + + + + + + + +
+ + + +
- - - + diff --git a/UI/Templates/UIxToolbar.wox b/UI/Templates/UIxToolbar.wox index 04efd3d0f..fa4144dd4 100644 --- a/UI/Templates/UIxToolbar.wox +++ b/UI/Templates/UIxToolbar.wox @@ -7,45 +7,36 @@ xmlns:label="OGo:label" xmlns:so="http://www.skyrix.com/od/so-lookup">
- + + +
-
+
- -
- + var:alt="buttonTooltip"/> + +
+ + + + +
+ +
+ + + + + +
diff --git a/UI/WebServerResources/SchedulerUI.css b/UI/WebServerResources/SchedulerUI.css index 519175a22..52eedff6b 100644 --- a/UI/WebServerResources/SchedulerUI.css +++ b/UI/WebServerResources/SchedulerUI.css @@ -464,9 +464,11 @@ DIV.eventView /* new draggable presentation */ DIV#daysView DIV.hours -{ position: absolute; +{ display: inline-block; + position: relative; + float: left; top: 0px; - left: 0px; + left: 0; height: 960px; width: 50px; } @@ -484,6 +486,9 @@ DIV#daysView DIV.hour DIV#daysView DIV.days { position: relative; + left: 0; + right: 0; + top: 0; margin-left: 50px; } DIV.multicolumnDayView DIV.lastDayUser @@ -684,8 +689,7 @@ DIV.daysViewFor7Days DIV.day5 DIV.monthView DIV.day6, DIV.daysViewFor7Days DIV.day6 -{ left: 85.7142%; - border-right: 1px solid #909090; } +{ left: 85.7142%; } /* "left" and "width" for #daysView DIV.event are computed in JS code */ #daysView DIV.event diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index 488318c66..8a3a44215 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -34,6 +34,13 @@ var categoriesStyleSheet = null; var clipboard = null; var eventsToCopy = []; +function printView() { + + window.open("printView","","width=660,height=470"); + + return false; /* stop following the link */ +} + function newEvent(type, day, hour, duration) { var folder = null; if (UserDefaults['SOGoDefaultCalendar'] == 'personal') diff --git a/UI/WebServerResources/UIxCalViewPrint.css b/UI/WebServerResources/UIxCalViewPrint.css new file mode 100644 index 000000000..ce51b67f6 --- /dev/null +++ b/UI/WebServerResources/UIxCalViewPrint.css @@ -0,0 +1,605 @@ + +/********** Window & layouts **********/ +BODY { + top: 1em; + bottom: 1em; + right: 1em; + left: 1em; + overflow:auto; +} + +.toolbar { + display:none; +} + +DIV#leftSide { + position: absolute; + top:0; + bottom:0; + left:0; + right:0; + max-width:220px; + overflow-y:auto; +} + +DIV.colorBox { + display: inline-block; +} + +TD DIV.colorBox, TD DIV.colorBox:hover { + border-color: #fff; +} + +TABLE#eventsList .colorBox { + margin-right: 4px; +} + +/********** Print settings **********/ + +INPUT#inputFieldTitle { + width:120px; +} + +DIV#rightFrameTitle { + font-size:20px; + text-decoration:underline; +} + +/********** What to print **********/ + +/********** Buttons **********/ + +#printButtons { + position:absolute; + bottom:0; + right:0; +} + +#printButton { + font-weight:bold; +} + +/********** RightSide **********/ + +.divEventsPreview, .divTasksPreview { + border:solid black 2px; + border-radius:5px; + margin-top:3px; +} + +.eventsTitle, .tasksTitle { + text-align:center; +} + +.overdueTasks { + color:red; + text-align:center; +} +.completedTasks { + font-style:italic; + text-align:center; +} + +DIV#rightSide { + position: absolute; + left:230px; + top:0; + bottom:0; + right:0; +} + DIV#rightFrame { + position:absolute; + right:0; + left:0; + top:12px; + bottom:30px; + background-color:#FFFFFF; + border-radius:5px; + border-top: 1px solid #909090; + border-left: 1px solid #909090; + border-bottom: 1px solid #FFFFFF; + border-right: 1px solid #FFFFFF; + padding-left:5px; + padding-right:5px; + overflow-y:auto; + } + #rightFrameEvents { + width:49.5%; + float:left; + } + + #rightFrameTasks { + width:49.5%; + float:right; + } + + DIV#rightFrame TH { + text-align: left; + } + + DIV#rightFrame TD.label { + color: #666; + text-align: right; + width: 30%; + } + +/********** Overriding SchedulerUI.css **********/ + +DIV#calendarHeader { + position:relative; + top:0; + height:70px; + right: 0px; +} + +DIV#calendarHeader DIV.dayLabels, +DIV#calendarHeader DIV.days { + position:relative; + left: 0; + margin-left:50px; +} + +DIV#calendarHeader DIV.days { + top: 0; + height: 33px; + left: 0; + right: 0; +} + +DIV#daysView { + position: relative; + top: 0; + right: 8px; + border-right: 1px solid #ccc; +} + +DIV#daysView DIV.hours { + height: auto; +} + +DIV#daysView DIV.day DIV.clickableHourCell { + height: 29px; +} + +DIV#daysView DIV.hour { + height: 27px; +} +.minutes15, .minutes30, .minutes45 { + height: 25%; +} + +DIV.event { + z-index:1; + border:solid black 1px; + background-color:white; + border-radius:5px; +} + +DIV#daysView DIV.event.starts0 +{ top: 0px; } +DIV#daysView DIV.event.lasts0 +{ height: 0px; } +DIV#daysView DIV.event.starts1 +{ top: 7.5px; } +DIV#daysView DIV.event.lasts1 +{ height: 7.25px; } +DIV#daysView DIV.event.starts2 +{ top: 15.0px; } +DIV#daysView DIV.event.lasts2 +{ height: 14.5px; } +DIV#daysView DIV.event.starts3 +{ top: 22.5px; } +DIV#daysView DIV.event.lasts3 +{ height: 21.75px; } +DIV#daysView DIV.event.starts4 +{ top: 30.0px; } +DIV#daysView DIV.event.lasts4 +{ height: 29.0px; } +DIV#daysView DIV.event.starts5 +{ top: 37.5px; } +DIV#daysView DIV.event.lasts5 +{ height: 36.25px; } +DIV#daysView DIV.event.starts6 +{ top: 45.0px; } +DIV#daysView DIV.event.lasts6 +{ height: 43.5px; } +DIV#daysView DIV.event.starts7 +{ top: 52.5px; } +DIV#daysView DIV.event.lasts7 +{ height: 50.75px; } +DIV#daysView DIV.event.starts8 +{ top: 60.0px; } +DIV#daysView DIV.event.lasts8 +{ height: 58.0px; } +DIV#daysView DIV.event.starts9 +{ top: 67.5px; } +DIV#daysView DIV.event.lasts9 +{ height: 65.25px; } +DIV#daysView DIV.event.starts10 +{ top: 75.0px; } +DIV#daysView DIV.event.lasts10 +{ height: 72.5px; } +DIV#daysView DIV.event.starts11 +{ top: 82.5px; } +DIV#daysView DIV.event.lasts11 +{ height: 79.75px; } +DIV#daysView DIV.event.starts12 +{ top: 90.0px; } +DIV#daysView DIV.event.lasts12 +{ height: 87.0px; } +DIV#daysView DIV.event.starts13 +{ top: 97.5px; } +DIV#daysView DIV.event.lasts13 +{ height: 94.25px; } +DIV#daysView DIV.event.starts14 +{ top: 105.0px; } +DIV#daysView DIV.event.lasts14 +{ height: 101.5px; } +DIV#daysView DIV.event.starts15 +{ top: 112.5px; } +DIV#daysView DIV.event.lasts15 +{ height: 108.75px; } +DIV#daysView DIV.event.starts16 +{ top: 120.0px; } +DIV#daysView DIV.event.lasts16 +{ height: 116.0px; } +DIV#daysView DIV.event.starts17 +{ top: 127.5px; } +DIV#daysView DIV.event.lasts17 +{ height: 123.25px; } +DIV#daysView DIV.event.starts18 +{ top: 135.0px; } +DIV#daysView DIV.event.lasts18 +{ height: 130.5px; } +DIV#daysView DIV.event.starts19 +{ top: 142.5px; } +DIV#daysView DIV.event.lasts19 +{ height: 137.75px; } +DIV#daysView DIV.event.starts20 +{ top: 150.0px; } +DIV#daysView DIV.event.lasts20 +{ height: 145.0px; } +DIV#daysView DIV.event.starts21 +{ top: 157.5px; } +DIV#daysView DIV.event.lasts21 +{ height: 152.25px; } +DIV#daysView DIV.event.starts22 +{ top: 165.0px; } +DIV#daysView DIV.event.lasts22 +{ height: 159.5px; } +DIV#daysView DIV.event.starts23 +{ top: 172.5px; } +DIV#daysView DIV.event.lasts23 +{ height: 166.75px; } +DIV#daysView DIV.event.starts24 +{ top: 180.0px; } +DIV#daysView DIV.event.lasts24 +{ height: 174.0px; } +DIV#daysView DIV.event.starts25 +{ top: 187.5px; } +DIV#daysView DIV.event.lasts25 +{ height: 181.25px; } +DIV#daysView DIV.event.starts26 +{ top: 195.0px; } +DIV#daysView DIV.event.lasts26 +{ height: 188.5px; } +DIV#daysView DIV.event.starts27 +{ top: 202.5px; } +DIV#daysView DIV.event.lasts27 +{ height: 195.75px; } +DIV#daysView DIV.event.starts28 +{ top: 210.0px; } +DIV#daysView DIV.event.lasts28 +{ height: 203.0px; } +DIV#daysView DIV.event.starts29 +{ top: 217.5px; } +DIV#daysView DIV.event.lasts29 +{ height: 210.25px; } +DIV#daysView DIV.event.starts30 +{ top: 225.0px; } +DIV#daysView DIV.event.lasts30 +{ height: 217.5px; } +DIV#daysView DIV.event.starts31 +{ top: 232.5px; } +DIV#daysView DIV.event.lasts31 +{ height: 224.75px; } +DIV#daysView DIV.event.starts32 +{ top: 240.0px; } +DIV#daysView DIV.event.lasts32 +{ height: 232.0px; } +DIV#daysView DIV.event.starts33 +{ top: 247.5px; } +DIV#daysView DIV.event.lasts33 +{ height: 239.25px; } +DIV#daysView DIV.event.starts34 +{ top: 255.0px; } +DIV#daysView DIV.event.lasts34 +{ height: 246.5px; } +DIV#daysView DIV.event.starts35 +{ top: 262.5px; } +DIV#daysView DIV.event.lasts35 +{ height: 253.75px; } +DIV#daysView DIV.event.starts36 +{ top: 270.0px; } +DIV#daysView DIV.event.lasts36 +{ height: 261.0px; } +DIV#daysView DIV.event.starts37 +{ top: 277.5px; } +DIV#daysView DIV.event.lasts37 +{ height: 268.25px; } +DIV#daysView DIV.event.starts38 +{ top: 285.0px; } +DIV#daysView DIV.event.lasts38 +{ height: 275.5px; } +DIV#daysView DIV.event.starts39 +{ top: 292.5px; } +DIV#daysView DIV.event.lasts39 +{ height: 282.75px; } +DIV#daysView DIV.event.starts40 +{ top: 300.0px; } +DIV#daysView DIV.event.lasts40 +{ height: 290.0px; } +DIV#daysView DIV.event.starts41 +{ top: 307.5px; } +DIV#daysView DIV.event.lasts41 +{ height: 297.25px; } +DIV#daysView DIV.event.starts42 +{ top: 315.0px; } +DIV#daysView DIV.event.lasts42 +{ height: 304.5px; } +DIV#daysView DIV.event.starts43 +{ top: 322.5px; } +DIV#daysView DIV.event.lasts43 +{ height: 311.75px; } +DIV#daysView DIV.event.starts44 +{ top: 330.0px; } +DIV#daysView DIV.event.lasts44 +{ height: 319.0px; } +DIV#daysView DIV.event.starts45 +{ top: 337.5px; } +DIV#daysView DIV.event.lasts45 +{ height: 326.25px; } +DIV#daysView DIV.event.starts46 +{ top: 345.0px; } +DIV#daysView DIV.event.lasts46 +{ height: 333.5px; } +DIV#daysView DIV.event.starts47 +{ top: 352.5px; } +DIV#daysView DIV.event.lasts47 +{ height: 340.75px; } +DIV#daysView DIV.event.starts48 +{ top: 360.0px; } +DIV#daysView DIV.event.lasts48 +{ height: 348.0px; } +DIV#daysView DIV.event.starts49 +{ top: 367.5px; } +DIV#daysView DIV.event.lasts49 +{ height: 355.25px; } +DIV#daysView DIV.event.starts50 +{ top: 375.0px; } +DIV#daysView DIV.event.lasts50 +{ height: 362.5px; } +DIV#daysView DIV.event.starts51 +{ top: 382.5px; } +DIV#daysView DIV.event.lasts51 +{ height: 369.75px; } +DIV#daysView DIV.event.starts52 +{ top: 390.0px; } +DIV#daysView DIV.event.lasts52 +{ height: 377.0px; } +DIV#daysView DIV.event.starts53 +{ top: 397.5px; } +DIV#daysView DIV.event.lasts53 +{ height: 384.25px; } +DIV#daysView DIV.event.starts54 +{ top: 405.0px; } +DIV#daysView DIV.event.lasts54 +{ height: 391.5px; } +DIV#daysView DIV.event.starts55 +{ top: 412.5px; } +DIV#daysView DIV.event.lasts55 +{ height: 398.75px; } +DIV#daysView DIV.event.starts56 +{ top: 420.0px; } +DIV#daysView DIV.event.lasts56 +{ height: 406.0px; } +DIV#daysView DIV.event.starts57 +{ top: 427.5px; } +DIV#daysView DIV.event.lasts57 +{ height: 413.25px; } +DIV#daysView DIV.event.starts58 +{ top: 435.0px; } +DIV#daysView DIV.event.lasts58 +{ height: 420.5px; } +DIV#daysView DIV.event.starts59 +{ top: 442.5px; } +DIV#daysView DIV.event.lasts59 +{ height: 427.75px; } +DIV#daysView DIV.event.starts60 +{ top: 450.0px; } +DIV#daysView DIV.event.lasts60 +{ height: 435.0px; } +DIV#daysView DIV.event.starts61 +{ top: 457.5px; } +DIV#daysView DIV.event.lasts61 +{ height: 442.25px; } +DIV#daysView DIV.event.starts62 +{ top: 465.0px; } +DIV#daysView DIV.event.lasts62 +{ height: 449.5px; } +DIV#daysView DIV.event.starts63 +{ top: 472.5px; } +DIV#daysView DIV.event.lasts63 +{ height: 456.75px; } +DIV#daysView DIV.event.starts64 +{ top: 480.0px; } +DIV#daysView DIV.event.lasts64 +{ height: 464.0px; } +DIV#daysView DIV.event.starts65 +{ top: 487.5px; } +DIV#daysView DIV.event.lasts65 +{ height: 471.25px; } +DIV#daysView DIV.event.starts66 +{ top: 495.0px; } +DIV#daysView DIV.event.lasts66 +{ height: 478.5px; } +DIV#daysView DIV.event.starts67 +{ top: 502.5px; } +DIV#daysView DIV.event.lasts67 +{ height: 485.75px; } +DIV#daysView DIV.event.starts68 +{ top: 510.0px; } +DIV#daysView DIV.event.lasts68 +{ height: 493.0px; } +DIV#daysView DIV.event.starts69 +{ top: 517.5px; } +DIV#daysView DIV.event.lasts69 +{ height: 500.25px; } +DIV#daysView DIV.event.starts70 +{ top: 525.0px; } +DIV#daysView DIV.event.lasts70 +{ height: 507.5px; } +DIV#daysView DIV.event.starts71 +{ top: 532.5px; } +DIV#daysView DIV.event.lasts71 +{ height: 514.75px; } +DIV#daysView DIV.event.starts72 +{ top: 540.0px; } +DIV#daysView DIV.event.lasts72 +{ height: 522.0px; } +DIV#daysView DIV.event.starts73 +{ top: 547.5px; } +DIV#daysView DIV.event.lasts73 +{ height: 529.25px; } +DIV#daysView DIV.event.starts74 +{ top: 555.0px; } +DIV#daysView DIV.event.lasts74 +{ height: 536.5px; } +DIV#daysView DIV.event.starts75 +{ top: 562.5px; } +DIV#daysView DIV.event.lasts75 +{ height: 543.75px; } +DIV#daysView DIV.event.starts76 +{ top: 570.0px; } +DIV#daysView DIV.event.lasts76 +{ height: 551.0px; } +DIV#daysView DIV.event.starts77 +{ top: 577.5px; } +DIV#daysView DIV.event.lasts77 +{ height: 558.25px; } +DIV#daysView DIV.event.starts78 +{ top: 585.0px; } +DIV#daysView DIV.event.lasts78 +{ height: 565.5px; } +DIV#daysView DIV.event.starts79 +{ top: 592.5px; } +DIV#daysView DIV.event.lasts79 +{ height: 572.75px; } +DIV#daysView DIV.event.starts80 +{ top: 600.0px; } +DIV#daysView DIV.event.lasts80 +{ height: 580.0px; } +DIV#daysView DIV.event.starts81 +{ top: 607.5px; } +DIV#daysView DIV.event.lasts81 +{ height: 587.25px; } +DIV#daysView DIV.event.starts82 +{ top: 615.0px; } +DIV#daysView DIV.event.lasts82 +{ height: 594.5px; } +DIV#daysView DIV.event.starts83 +{ top: 622.5px; } +DIV#daysView DIV.event.lasts83 +{ height: 601.75px; } +DIV#daysView DIV.event.starts84 +{ top: 630.0px; } +DIV#daysView DIV.event.lasts84 +{ height: 609.0px; } +DIV#daysView DIV.event.starts85 +{ top: 637.5px; } +DIV#daysView DIV.event.lasts85 +{ height: 616.25px; } +DIV#daysView DIV.event.starts86 +{ top: 645.0px; } +DIV#daysView DIV.event.lasts86 +{ height: 623.5px; } +DIV#daysView DIV.event.starts87 +{ top: 652.5px; } +DIV#daysView DIV.event.lasts87 +{ height: 630.75px; } +DIV#daysView DIV.event.starts88 +{ top: 660.0px; } +DIV#daysView DIV.event.lasts88 +{ height: 638.0px; } +DIV#daysView DIV.event.starts89 +{ top: 667.5px; } +DIV#daysView DIV.event.lasts89 +{ height: 645.25px; } +DIV#daysView DIV.event.starts90 +{ top: 675.0px; } +DIV#daysView DIV.event.lasts90 +{ height: 652.5px; } +DIV#daysView DIV.event.starts91 +{ top: 682.5px; } +DIV#daysView DIV.event.lasts91 +{ height: 659.75px; } +DIV#daysView DIV.event.starts92 +{ top: 690.0px; } +DIV#daysView DIV.event.lasts92 +{ height: 667.0px; } +DIV#daysView DIV.event.starts93 +{ top: 697.5px; } +DIV#daysView DIV.event.lasts93 +{ height: 674.25px; } +DIV#daysView DIV.event.starts94 +{ top: 705.0px; } +DIV#daysView DIV.event.lasts94 +{ height: 681.5px; } +DIV#daysView DIV.event.starts95 +{ top: 712.5px; } +DIV#daysView DIV.event.lasts95 +{ height: 688.75px; } +DIV#daysView DIV.event.starts96 +{ top: 720.0px; } +DIV#daysView DIV.event.lasts96 +{ height: 696.0px; } + +/********** Overriding generic.css **********/ + +TABLE.frame { + width:97%; + text-align: left; + background:#dddddd; + border-radius:8px; + display:table; +} + +SPAN.caption { + background: -webkit-linear-gradient(bottom, #E6E7E6, #dddddd); /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(bottom, #E6E7E6, #dddddd); /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(bottom, #E6E7E6, #dddddd); /* For Firefox 3.6 to 15 */ + background: linear-gradient(to bottom, #E6E7E6, #dddddd); /* Standard syntax (must be last) */ +} + +LABEL { + margin-left:0; +} + +/********** Calling print(); from the browser **********/ + +@media print{ + .no-print, SPAN.caption, SPAN.weeksHeader, SPAN.daysHeader { + display:none; + } + + DIV#rightSide { + position:static; + top:5px; + left:5px; + } + + DIV#rightFrame { + border:none; + overflow:visible; + } +} diff --git a/UI/WebServerResources/UIxCalViewPrint.js b/UI/WebServerResources/UIxCalViewPrint.js new file mode 100644 index 000000000..f6bf2a00b --- /dev/null +++ b/UI/WebServerResources/UIxCalViewPrint.js @@ -0,0 +1,667 @@ +/* -*- Mode: js2-mode; tab-width: 4; c-label-minimum-indentation: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ + +/* + Copyright (C) 2006-2014 Inverse + + This file is part of SOGo + + SOGo is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + SOGo is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with SOGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. + */ + +/******************************** Global variables *******************************************/ +var firstDayOfWeek = window.opener.firstDayOfWeek; +var printCompletedTasks=1; +var printNoDueDateTasks=1; +var eventsBlocks; +var currentView; +var currentDay = window.parentvar("currentDay"); +var sd, ed; + +/****************************************** Ajax Requests, callbacks & events/tasks drawings ***************************************************/ + +function refreshContent() { + refreshEvents(); // Get the eventBlocks and draw them + refreshTasks(); // Get the taskLists and draw them +} + +function updateDisplayView(data, newView) { + newView = ((newView) ? newView : currentView); + var url = ApplicationBaseURL + "/" + newView; + var day = null; + + if (data) { + day = data['day']; + } + if (!day) + day = currentDay; + + if (day) { + if (data) { + var dayDiv = $("day"+day); + if (dayDiv) { + // Don't reload the view if the event is present in current view + + // Deselect day in date selector + if (document.selectedDate) + document.selectedDate.deselect(); + + // Select day in date selector + var selectedLink = $$('table#dateSelectorTable span[day='+day+']'); + if (selectedLink.length > 0) { + selectedCell = selectedLink[0].getParentWithTagName("td"); + $(selectedCell).selectElement(); + document.selectedDate = selectedCell; + } else + document.selectedDate = null; + + setSelectedDayDate(day); + + return false; + } + else if (day.length == 6) { + day += "01"; + } + } + url += "?day=" + day; + } + + selectedCalendarCell = null; + + if (document.dayDisplayAjaxRequest) { + document.dayDisplayAjaxRequest.aborted = true; + document.dayDisplayAjaxRequest.abort(); + } + document.dayDisplayAjaxRequest + = triggerAjaxRequest(url, previewDisplayCallback, + { "view": newView, + "day": day}); +} + +function previewDisplayCallback(http) { + if (http.readyState == 4 + && http.status == 200) { + $("rightFrameEvents").innerHTML = http.responseText; + $("currentViewMenu").remove(); + $("listCollapse").remove(); + + // TODO : Month + _drawAllDayEvents(eventsBlocks[1], eventsBlocks[0]); + _drawEvents(eventsBlocks[2], eventsBlocks[0]); + } + else + log ("calendarDisplayCallback Ajax error ("+ http.readyState + "/" + http.status + ")"); + + return false; +} + +function refreshEvents() { + var todayDate = new Date(); + + if (!currentDay) + currentDay = todayDate.getDayString(); + + if (currentView == "dayview") { + sd = currentDay; + ed = sd; + } + else if (currentView == "weekview") { + var startDate; + startDate = currentDay.asDate(); + startDate = startDate.beginOfWeek(); + sd = startDate.getDayString(); + var endDate = new Date(); + endDate.setTime(startDate.getTime()); + endDate.addDays(6); + ed = endDate.getDayString(); + } + else { + var monthDate; + monthDate = currentDay.asDate(); + monthDate.setDate(1); + sd = monthDate.beginOfWeek().getDayString(); + + var lastMonthDate = new Date(); + lastMonthDate.setTime(monthDate.getTime()); + lastMonthDate.setMonth(monthDate.getMonth() + 1); + lastMonthDate.addDays(-1); + ed = lastMonthDate.endOfWeek().getDayString(); + } + if (document.refreshEventsAjaxRequest) { + document.refreshEventsAjaxRequest.aborted = true; + document.refreshEventsAjaxRequest.abort(); + } + var url = (ApplicationBaseURL + "/eventsblocks?sd=" + sd + "&ed=" + ed + + "&view=" + currentView); + + document.refreshEventsAjaxRequest + = triggerAjaxRequest(url, refreshEventsCallback, + {"startDate": sd, "endDate": ed}); +} + +function refreshTasks(){ + if (document.tasksListAjaxRequest) { + document.tasksListAjaxRequest.aborted = true; + document.tasksListAjaxRequest.abort(); + } + + url = window.parentvar("ApplicationBaseURL") + "/" + "taskslist?show-completed=" + printCompletedTasks + + "&asc=" + sorting["task-ascending"] + + "&sort=" + sorting["task-attribute"]; + var tasksList = window.parent$("tasksList"); + var selectedIds; + if (tasksList) + selectedIds = tasksList.getSelectedNodesId(); + else + selectedIds = null; + + document.tasksListAjaxRequest = triggerAjaxRequest(url, refreshTasksListCallback, selectedIds); +} + +function refreshEventsCallback(http) { + if (http.readyState == 4 + && http.status == 200) { + if (http.responseText.length > 0) { + eventsBlocks = http.responseText.evalJSON(true); + $("rightFrameEvents").innerHTML = ""; + if ($("printLayoutList").value == "0") + _drawEventsCells(eventsBlocks); + else { + updateDisplayView(null, currentView); + } + } + } + else + log("AJAX error when refreshing calendar events"); +} + +function refreshTasksListCallback(http) { + if (http.readyState == 4 + && http.status == 200) { + if (http.responseText.length > 0) { + var tasksBlocks = http.responseText.evalJSON(true); + $("rightFrameTasks").innerHTML = ""; + var layout = $("printLayoutList").value; + _drawTasksCells(tasksBlocks); + } + } + else + log("AJAX error when refreshing calendar events"); +} + +function _drawEventsCells(eventsBlocks) { + var events = _("Events"); + $("rightFrameEvents").insert("

"+events+"

"); + for(var i=0; i < eventsBlocks[0].length; i++) + { + var event = _parseEvent(eventsBlocks[0][i]); + $("rightFrameEvents").insert(event); + } +} + +function _drawTasksCells(tasksBlocks) { + var task = _("Tasks"); + $("rightFrameTasks").insert("

"+task+"

"); + for(var i=0; i < tasksBlocks.length; i++) + { + if (!(printNoDueDateTasks == 0 && tasksBlocks[i][5] == null)) { + var task = _parseTask(tasksBlocks[i]); + $("rightFrameTasks").insert(task); + } + } +} + +// TODO : Maybe use the drawfunction from the schedulerUI.js + +function _drawEvents(events, eventsData) { + var daysView = $("daysView"); + var subdivs = daysView.childNodesWithTag("div"); + for (var i = 0; i < subdivs.length; i++) { + var subdiv = subdivs[i]; + if (subdiv.hasClassName("days")) { + var days = subdiv.childNodesWithTag("div"); + for (var j = 0; j < days.length; j++) { + var parentDiv = days[j].childNodesWithTag("div")[0]; + for (var k = 0; k < events[j].length; k++) { + var eventRep = events[j][k]; + var nbr = eventRep.nbr; + var eventCell = newEventDIV(eventRep, eventsData[nbr]); + parentDiv.appendChild(eventCell); + } + } + } + } +} + +function _drawAllDayEvents(events, eventsData) { + var headerView = $("calendarHeader"); + var subdivs = headerView.childNodesWithTag("div"); + var days = subdivs[1].childNodesWithTag("div"); + for (var i = 0; i < days.length; i++) { + var parentDiv = days[i]; + for (var j = 0; j < events[i].length; j++) { + var eventRep = events[i][j]; + var nbr = eventRep.nbr; + var eventCell = newAllDayEventDIV(eventRep, eventsData[nbr]); + parentDiv.appendChild(eventCell); + } + } +} + +// todo : month + +function newEventDIV(eventRep, event) { + var eventCell = newBaseEventDIV(eventRep, event, event[4]); + + var pc = 100 / eventRep.siblings; + var left = Math.floor(eventRep.position * pc); + eventCell.style.left = left + "%"; + var right = Math.floor(100 - (eventRep.position + 1) * pc); + eventCell.style.right = right + "%"; + eventCell.addClassName("starts" + eventRep.start); + eventCell.addClassName("lasts" + eventRep.length); + + if (event[7]) { + var inside = eventCell.childNodesWithTag("div")[0]; + var textDiv = inside.childNodesWithTag("div")[1]; + textDiv.appendChild(createElement("br")); + var span = createElement("span", null, "location"); + var text = _("Location:") + " " + event[7]; + span.update(text); + textDiv.appendChild(span); + } + + return eventCell; +} + +function newBaseEventDIV(eventRep, event, eventText) { + // log ("0 cname = " + event[0]); + // log ("1 calendar = " + event[1]); + // log ("2 calendar name = " + event[2]); + // log ("3 status = " + event[3]); + // log ("4 title = " + event[4]); + // log ("5 start = " + event[5]); + // log ("6 end = " + event[6]); + // log ("7 location = " + event[7]); + // log ("8 isallday = " + event[8]); + // log ("9 classification = " + event[9]); // 0 = public, 1 = private, 2 = confidential + // log ("10 category = " + event[10]); + // log ("11 participants emails = " + event[11]); + // log ("12 participants states = " + event[12]); + // log ("13 owner = " + event[13]); + // log ("14 iscycle = " + event[14]); + // log ("15 nextalarm = " + event[15]); + // log ("16 recurrenceid = " + event[16]); + // log ("17 isexception = " + event[17]); + // log ("18 editable = " + event[18]); + // log ("19 erasable = " + event[19]); + // log ("20 ownerisorganizer = " + event[20]); + + var eventCell = createElement("div"); + eventCell.cname = event[0]; + eventCell.calendar = event[1]; + var startDate = new Date(event[5]*1000); + if (startDate) { + eventCell.startDate = event[5]; + eventCell.writeAttribute('day', startDate.getDayString()); + eventCell.writeAttribute('hour', event[8]? 'allday' : startDate.getHourString()); + } + // if (event[8] == 1) + // eventCell.addClassName("private"); + // else if (event[8] == 2) + // eventCell.addClassName("confidential"); + if (eventRep.recurrenceTime) + eventCell.recurrenceTime = eventRep.recurrenceTime; + //eventCell.owner = event[12]; + eventCell.isException = event[17]; + eventCell.editable = event[18]; + eventCell.erasable = event[19] || IsSuperUser; + eventCell.ownerIsOrganizer = event[20]; + eventCell.addClassName("event"); + // if (event[14] > 0) + // eventCell.addClassName("alarm"); + + var innerDiv = createElement("div"); + eventCell.appendChild(innerDiv); + innerDiv.addClassName("eventInside"); + innerDiv.addClassName("calendarFolder" + event[1]); + if (eventRep.userState >= 0 && userStates[eventRep.userState]) + innerDiv.addClassName(userStates[eventRep.userState]); + + var gradientDiv = createElement("div"); + innerDiv.appendChild(gradientDiv); + gradientDiv.addClassName("gradient"); + + var gradientImg = createElement("img"); + gradientDiv.appendChild(gradientImg); + gradientImg.src = ResourcesURL + "/event-gradient.png"; + + var textDiv = createElement("div"); + innerDiv.appendChild(textDiv); + textDiv.addClassName("text"); + var iconSpan = createElement("span", null, "icons"); + textDiv.update(eventText.replace(/(\\r)?\\n/g, "
")); + textDiv.appendChild(iconSpan); + + // Add alarm and classification icons + if (event[9] == 1) + createElement("img", null, null, {src: ResourcesURL + "/private.png"}, null, iconSpan); + else if (event[9] == 2) + createElement("img", null, null, {src: ResourcesURL + "/confidential.png"}, null, iconSpan); + if (event[15] > 0) + createElement("img", null, null, {src: ResourcesURL + "/alarm.png"}, null, iconSpan); + + if (event[10] != null) { + var category = event[10].decodeEntities(); + var categoryStyle = categoriesStyles.get(category); + if (!categoryStyle) { + categoryStyle = 'category_' + categoriesStyles.keys().length; + categoriesStyles.set([category], categoryStyle); + } + innerDiv.addClassName(categoryStyle); + } + + return eventCell; +} + +function _parseEvent(event) { + // Localized strings : + var start = _("Start:"); + var end = _("End:"); + var Location = _("Location:"); + var Calendar = _("Calendar:"); + + + var parsedEvent; + var startDate = new Date(event[5] *1000); + var endDate = new Date(event[6] *1000); + parsedEvent = "
"; + parsedEvent += ""; + parsedEvent += ""; + parsedEvent += ""; + if (event[7] != "") + parsedEvent += ""; + parsedEvent += ""; + parsedEvent += "
"+ event[4] +"
" + start + "" + startDate.toLocaleString() + "
" + end + "" + endDate.toLocaleString() + "
"+ Location +"" + event[7] + "
"+ Calendar +"" + event[2] + "
"; + return parsedEvent; +} + +function _parseTask(task) { + var parsedTask; + var end = _("Due Date:"); + var Calendar = _("Calendar:"); + var Location = _("Location:"); + + parsedTask = "
"; + if (task[12] == "overdue") + parsedTask += ""; + else if (task[12] == "completed") { + parsedTask += ""; + } + else + parsedTask += ""; + + if (task[5] != null) { + var endDate = new Date(task[5] *1000); + parsedTask += ""; + } + if (task[7] != "") { + parsedTask += ""; + } + parsedTask += ""; + parsedTask += "
"+ task[4] +"
"+ task[4] +"
"+ task[4] +"
"+ end +""+ endDate.toLocaleString() + "
"+ Location +"" + task[7] + "
" + Calendar + "" + task[2] + "
"; + + return parsedTask; +} + +/************************************** Preview Navigation *****************************************/ + +function onCalendarGotoDay(node) { + var day = node.getAttribute("date"); + var needRefresh = (listFilter == 'view_selectedday' && day != currentDay); + + changeDateSelectorDisplay(day); + updateDisplayView({ "day": day }); + refreshEvents(); + + return false; +} + +function changeDateSelectorDisplay(day, keepCurrentDay) { + var url = ApplicationBaseURL + "/dateselector"; + if (day) { + if (day.length < 8) + day += "01"; + url += "?day=" + day; + } + + if (!keepCurrentDay) + currentDay = day; + + var month = day.substr(0, 6); + if (cachedDateSelectors[month]) { + // log ("restoring cached selector for month: " + month); + setDateSelectorContent(cachedDateSelectors[month]); + } + else { + // log ("loading selector for month: " + month); + if (document.dateSelectorAjaxRequest) { + document.dateSelectorAjaxRequest.aborted = true; + document.dateSelectorAjaxRequest.abort(); + } + document.dateSelectorAjaxRequest + = triggerAjaxRequest(url, + dateSelectorCallback, + month); + } +} + +function dateSelectorCallback(http) { + if (http.readyState == 4 + && http.status == 200) { + document.dateSelectorAjaxRequest = null; + var content = http.responseText; + setDateSelectorContent(content); + cachedDateSelectors[http.callbackData] = content; + } + else + log ("dateSelectorCallback Ajax error"); + + return false; +} + +/*********************** Input Field, Checkboxes, Radio and listMenu *********************************/ + +function onInputTitleChange(event){ + var inputFieldTitle = $("inputFieldTitle").value; + if (inputFieldTitle) + document.getElementById("rightFrameTitle").innerHTML = inputFieldTitle + "
"; + else + document.getElementById("rightFrameTitle").innerHTML = inputFieldTitle; +} + +function onPrintLayoutListChange() { + var selectedLayout = $("printLayoutList").value; + var parentView = window.parentvar("currentView"); + switch(selectedLayout) { + case "0": // List view + window.resizeTo(700,500); + currentView = parentView; + ajustFrames(); + break; + + case "1": // Day view + window.resizeTo(1010,500); + currentView = "dayview"; + ajustFrames(currentView); + break; + + case "2": // Week view + window.resizeTo(1010,500); + currentView = "weekview"; + ajustFrames(currentView); + break; + + //todo : month + } + + refreshContent(); +} + +function ajustFrames(view) { + if (view == "dayview" || view == "weekview") { + document.getElementById("rightFrameEvents").style.width = '100%'; + document.getElementById("rightFrameTasks").style.width = '100%'; + document.getElementById("rightFrameTasks").style.pageBreakBefore = 'always'; + document.getElementById("rightFrameTasks").style.pageBreakInside = 'avoid'; + + } + else { + document.getElementById("rightFrameEvents").style.width = '49.5%'; + document.getElementById("rightFrameTasks").style.width = '49.5%'; + document.getElementById("rightFrameTasks").style.pageBreakBefore = 'auto'; + document.getElementById("rightFrameTasks").style.pageBreakInside = 'auto'; + } + +} + +function onEventsCheck(checkBox) { + if(checkBox.checked){ + document.getElementById("rightFrameEvents").style.display = 'block'; + if ($("printLayoutList").value == 0){ + document.getElementById("rightFrameTasks").style.width = '49.5%'; + } + } + else { + document.getElementById("rightFrameEvents").style.display = 'none'; + if ($("printLayoutList").value == 0){ + document.getElementById("rightFrameTasks").style.width = '100%'; + } + } +} + +function onTasksCheck(checkBox) { + var printOptions = document.getElementsByName("printOptions"); + for (var i = 0; i < printOptions.length; i++) + printOptions[i].disabled = !checkBox.checked; + + if(checkBox.checked) { + document.getElementById("rightFrameTasks").style.display = 'block'; + if ($("printLayoutList").value == 0){ + document.getElementById("rightFrameEvents").style.width = '49.5%'; + } + } + else { + document.getElementById("rightFrameTasks").style.display = 'none'; + if ($("printLayoutList").value == 0){ + document.getElementById("rightFrameEvents").style.width = '100%'; + } + } +} + +/*function onPrintDateCheck() { + var dateRange = document.getElementsByName("dateRange"); + var customDate = document.getElementById("customDate"); + for (var i = 0; i < dateRange.length; i++) + if (dateRange[i].children[1].children[0].disabled == customDate.checked) + dateRange[i].children[1].children[0].disabled = !customDate.checked; + }*/ + +function onPrintCompletedTasksCheck(checkBox) { + printCompletedTasks = (checkBox.checked ? 1 : 0); + refreshTasks(); +} + +function onPrintNoDueDateTasksCheck(checkBox) { + printNoDueDateTasks = (checkBox.checked ? 1 : 0); + refreshTasks(); +} + +/************** Date picker functions ************* + this.initTimeWidgets = function (widgets) { + this.timeWidgets = widgets; + + jQuery(widgets['start']['date']).closest('.date').datepicker({autoclose: true, weekStart: 0}); + jQuery(widgets['end']['date']).closest('.date').datepicker({autoclose: true, weekStart: 0}); + + //jQuery(widgets['start']['date']).change(onAdjustTime); + + jQuery(widgets['startingDate']['date']).closest('.date').datepicker({autoclose: true, + weekStart: 0, + endDate: lastDay, + startDate: firstDay, + setStartDate: lastDay, + startView: 2, + position: "below-shifted-left"}); + } + + this.onAdjustTime = function(event) { + onAdjustDueTime(event); + } + + this.onAdjustDueTime = function(event) { + var dateDelta = (window.getStartDate().valueOf() - window.getShadowStartDate().valueOf()); + var newDueDate = new Date(window.getDueDate().valueOf() + dateDelta); + window.setDueDate(newDueDate); + + window.timeWidgets['start']['date'].updateShadowValue(); + } + /****************************************************/ + +/******************************* Buttons ***********************************************/ + +function onPrintCancelClick(event) { + this.blur(); + onCloseButtonClick(event); +} + +function onPrintClick(event) { + this.blur(); + window.print(); +} +/**************************** Initialization *******************************************/ + +function init() { + + initializePrintSettings(); + //initializeWhatToPrint(); + //initializeOptions(); + $("cancelButton").observe("click", onPrintCancelClick); + $("printButton").observe("click", onPrintClick); + + /* TODO : Selected and custom date must be implemented and finished. + document.getElementById("eventsTasks").disabled=true; + document.getElementById("customDate").disabled=true;*/ + + onPrintLayoutListChange(); +} + +function initializePrintSettings() { + $("inputFieldTitle").observe("change", onInputTitleChange); + $("printLayoutList").observe("change", onPrintLayoutListChange); +} + +/*function initializeWhatToPrint() { + var widgets = {'start': {'date': $("startingDate")}, + 'end': {'date': $("endingDate")}}; + initTimeWidgets(widgets); + onPrintDateCheck(); + + }*/ + +/*function initializeOptions() { + }*/ + +document.observe("dom:loaded", init);