Merge pull request #36 from alexcloutier/feat/calendarPrint
New print option in Calendar modulepull/40/head
commit
2df5887eec
|
@ -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];
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ SchedulerUI_OBJC_FILES = \
|
|||
UIxCalFolderActions.m \
|
||||
\
|
||||
UIxCalView.m \
|
||||
UIxCalViewPrint.m \
|
||||
UIxCalDayView.m \
|
||||
UIxCalMulticolumnDayView.m \
|
||||
UIxCalWeekView.m \
|
||||
|
|
|
@ -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);";
|
||||
|
|
|
@ -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 <SOGoUI/UIxComponent.h>
|
||||
|
||||
@interface UIxCalViewPrint : UIxComponent
|
||||
{
|
||||
id item;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -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 <Foundation/NSString.h>
|
||||
#import <Foundation/NSArray.h>
|
||||
|
||||
#import <UIxCalViewPrint.h>
|
||||
|
||||
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
|
|
@ -40,6 +40,11 @@
|
|||
protectedBy = "View";
|
||||
pageName = "UIxCalMainView";
|
||||
};
|
||||
printView = {
|
||||
protectedBy = "<public>";
|
||||
pageName = "UIxCalViewPrint";
|
||||
actionClass = "UIxCalViewPrint";
|
||||
};
|
||||
addWebCalendar = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxCalMainActions";
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
<?xml version='1.0'?>
|
||||
<!DOCTYPE var:component>
|
||||
<var:component
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:var="http://www.skyrix.com/od/binding"
|
||||
xmlns:const="http://www.skyrix.com/od/constant"
|
||||
xmlns:uix="OGo:uix"
|
||||
xmlns:label="OGo:label"
|
||||
className="UIxPageFrame"
|
||||
const:popup="YES">
|
||||
|
||||
<div id="leftSide" class="no-print">
|
||||
<!-- Print settings -->
|
||||
<span class="caption"><var:string label:value="Print Settings" /></span>
|
||||
<table class="frame">
|
||||
<tr>
|
||||
<td style="width: 30%;">
|
||||
<label id="labelTitle"><var:string label:value="Title:" /></label></td>
|
||||
<td>
|
||||
<input type="text" id="inputFieldTitle" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label><var:string label:value="Layout:" /></label></td>
|
||||
<td>
|
||||
<var:popup list="printLayoutList" item="item"
|
||||
const:id="printLayoutList"
|
||||
string="itemPrintLayoutText" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- What to print -->
|
||||
<span class="caption"><var:string label:value="What to Print" /></span>
|
||||
<table class="frame">
|
||||
<tr>
|
||||
<td>
|
||||
<label>
|
||||
<input type="checkbox" id="printEvents" value="eventsSelected" checked="true" onChange="onEventsCheck(this);"/>
|
||||
<var:string label:value="Events"/></label>
|
||||
<label>
|
||||
<input type="checkbox" id ="printTasks" value="tasksSelected" checked="true" onChange="onTasksCheck(this);"/>
|
||||
<var:string label:value="Tasks"/></label></td></tr>
|
||||
<!-- TODO
|
||||
<tr>
|
||||
<td>
|
||||
<label>
|
||||
<input type="radio" name="printView" id="currentView" value="currentViewSelected" checked="true" onChange="onPrintDateCheck();"/>
|
||||
<var:string label:value="Current view" /></label></td></tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label>
|
||||
<input type="radio" name="printView" id="eventsTasks" value="eventsTasksSelected" onChange="onPrintDateCheck();"/>
|
||||
<var:string label:value="Selected events and tasks" /></label></td></tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<label>
|
||||
<input type="radio" name="printView" id="customDate" value="customDateSelected" onChange="onPrintDateCheck();" />
|
||||
<var:string label:value="Custom date range" /></label></td></tr>
|
||||
<tr>
|
||||
<td id="dateRangeFrom" name="dateRange">
|
||||
<label id="labelFrom"><var:string label:value="From:" /></label>
|
||||
<var:component className="UIxDatePicker"
|
||||
const:dateID="startingDate"
|
||||
day="startDay"
|
||||
month="startMonth"
|
||||
year="startYear"
|
||||
label:label="Select starting date"/></td></tr>
|
||||
<tr>
|
||||
<td id="dateRangeTo" name="dateRange">
|
||||
<label id="labelTo"><var:string label:value="To:" /></label>
|
||||
<var:component className="UIxDatePicker"
|
||||
const:dateID="endingDate"
|
||||
day="endDay"
|
||||
month="endMonth"
|
||||
year="endYear"
|
||||
label:label="Select ending date"/></td></tr>
|
||||
-->
|
||||
</table>
|
||||
|
||||
<!-- Options -->
|
||||
<span class="caption"><var:string label:value="Options" /></span>
|
||||
<table class="frame">
|
||||
<tr>
|
||||
<td>
|
||||
<label>
|
||||
<input type="checkbox" name="printOptions" id="selectNoDueDateTasks" checked="true" onChange="onPrintNoDueDateTasksCheck(this);" />
|
||||
<var:string label:value="Tasks with no due date" /></label></td></tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label>
|
||||
<input type="checkbox" name="printOptions" id="selectCompletedTasks" checked="true" onChange="onPrintCompletedTasksCheck(this);" />
|
||||
<var:string label:value="Completed tasks" /></label></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="rightSide">
|
||||
<div id="rightFrame">
|
||||
<div id="rightFrameTitle"><!-- Spacer --></div>
|
||||
<div id="rightFrameEvents"><!-- Spacer --></div>
|
||||
<div id="rightFrameTasks"><!-- Spacer --></div>
|
||||
</div>
|
||||
<div id="printButtons" class="no-print">
|
||||
<a class="button" name="print" id="printButton">
|
||||
<span><var:string label:value="Print" /></span></a>
|
||||
<a class="button" name="cancel" id="cancelButton">
|
||||
<span><var:string label:value="Cancel"/></span></a>
|
||||
</div>
|
||||
</div>
|
||||
</var:component>
|
|
@ -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"
|
||||
><var:string var:value="doctype" const:escapeHTML="NO" />
|
||||
<var:if condition="hideFrame" const:negate="YES"
|
||||
><html const:xmlns="http://www.w3.org/1999/xhtml"
|
||||
xml:lang="en" const:lang="en">
|
||||
xmlns:label="OGo:label">
|
||||
<var:string var:value="doctype" const:escapeHTML="NO" />
|
||||
<var:if condition="hideFrame" const:negate="YES">
|
||||
<html const:xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" const:lang="en">
|
||||
|
||||
<!-- head -->
|
||||
<head>
|
||||
<title>
|
||||
<var:string value="title"/>
|
||||
</title>
|
||||
<meta name="hideFrame" var:content="hideFrame" />
|
||||
<meta name="description" content="SOGo Web Interface" />
|
||||
<meta name="author" content="SKYRIX Software AG/Inverse inc." />
|
||||
<meta name="robots" content="stop" />
|
||||
<meta name="build" var:content="buildDate" />
|
||||
<link href="mailto:support@inverse.ca" rev="made" />
|
||||
<link rel="shortcut icon" var:href="siteFavicon" type="image/x-icon" />
|
||||
<link type="text/css" rel="stylesheet" rsrc:href="generic.css" />
|
||||
<link type="text/css" rel="stylesheet" rsrc:href="dtree.css" />
|
||||
<var:if condition="hasProductSpecificCSS"
|
||||
><link type="text/css" rel="stylesheet" var:href="productCSSURL"
|
||||
/></var:if>
|
||||
<var:if condition="hasPageSpecificCSS"
|
||||
><link type="text/css" rel="stylesheet" var:href="pageCSSURL"
|
||||
/></var:if>
|
||||
<var:foreach list="additionalCSSFiles" item="item"
|
||||
><link type="text/css" rel="stylesheet" var:href="item"
|
||||
/>
|
||||
</var:foreach>
|
||||
<var:if-ie const:lte="9"
|
||||
><link type="text/css" rel="stylesheet" rsrc:href="iefixes.css"/>
|
||||
<title>
|
||||
<var:string value="title"/></title>
|
||||
<meta name="hideFrame" var:content="hideFrame" />
|
||||
<meta name="description" content="SOGo Web Interface" />
|
||||
<meta name="author" content="SKYRIX Software AG/Inverse inc." />
|
||||
<meta name="robots" content="stop" />
|
||||
<meta name="build" var:content="buildDate" />
|
||||
<link href="mailto:support@inverse.ca" rev="made" />
|
||||
<link rel="shortcut icon" var:href="siteFavicon" type="image/x-icon" />
|
||||
<link type="text/css" rel="stylesheet" rsrc:href="generic.css" />
|
||||
<link type="text/css" rel="stylesheet" rsrc:href="dtree.css" />
|
||||
<var:if condition="hasProductSpecificCSS">
|
||||
<link type="text/css" rel="stylesheet" var:href="productCSSURL"/></var:if>
|
||||
<var:if condition="hasPageSpecificCSS">
|
||||
<link type="text/css" rel="stylesheet" var:href="pageCSSURL"/></var:if>
|
||||
<var:foreach list="additionalCSSFiles" item="item">
|
||||
<link type="text/css" rel="stylesheet" var:href="item"/></var:foreach>
|
||||
<var:if-ie const:lte="9">
|
||||
<link type="text/css" rel="stylesheet" rsrc:href="iefixes.css"/>
|
||||
<script type="text/javascript" rsrc:src="XMLHttpRequest.js"><!-- space --></script>
|
||||
</var:if-ie>
|
||||
</var:if-ie>
|
||||
</head>
|
||||
|
||||
<body var:class="bodyClasses"
|
||||
><var:if condition="isCompatibleBrowser"
|
||||
><var:if condition="singleWindowModeEnabled"
|
||||
><div id="popupFrame" style="display: none;"><iframe width="100%" height="100%" src="/SOGo/loading"><!-- space --></iframe></div></var:if
|
||||
><var:if condition="shortUserNameForDisplay" const:value="anonymous"
|
||||
const:negate="YES"><var:if condition="hasUserSettingsKeys"
|
||||
><script type="text/javascript">
|
||||
var UserSettings = <var:string value="userSettings" const:escapeHTML="NO"/>;
|
||||
</script
|
||||
></var:if><var:if condition="hasUserDefaultsKeys">
|
||||
|
||||
<!-- Body -->
|
||||
<body var:class="bodyClasses">
|
||||
<var:if condition="isCompatibleBrowser">
|
||||
<var:if condition="singleWindowModeEnabled">
|
||||
<div id="popupFrame" style="display: none;">
|
||||
<iframe width="100%" height="100%" src="/SOGo/loading"><!-- space --></iframe></div></var:if>
|
||||
|
||||
<var:if condition="shortUserNameForDisplay" const:value="anonymous" const:negate="YES">
|
||||
<var:if condition="hasUserSettingsKeys">
|
||||
<script type="text/javascript">
|
||||
var UserDefaults = <var:string value="userDefaults" const:escapeHTML="NO"/>;
|
||||
</script
|
||||
></var:if
|
||||
></var:if
|
||||
><var:if condition="isPopup" const:negate="YES"
|
||||
><var:if condition="isUIxDebugEnabled"
|
||||
><div id="logConsole"><!-- space --></div></var:if>
|
||||
var UserSettings = <var:string value="userSettings" const:escapeHTML="NO"/>;</script></var:if>
|
||||
<var:if condition="hasUserDefaultsKeys">
|
||||
<script type="text/javascript">
|
||||
var UserDefaults = <var:string value="userDefaults" const:escapeHTML="NO"/>;</script></var:if></var:if>
|
||||
|
||||
<var:if condition="isPopup" const:negate="YES">
|
||||
<var:if condition="isUIxDebugEnabled">
|
||||
<div id="logConsole"><!-- space --></div></var:if>
|
||||
|
||||
<!-- Link banner -->
|
||||
<div id="linkBanner" class="linkbanner">
|
||||
<var:if condition="canLogoff"
|
||||
><a id="logoff" var:href="logoffPath"
|
||||
><var:string label:value="Disconnect"/> </a
|
||||
><span id="userIdentificationDisplay">
|
||||
<var:if condition="userHasVacationEnabled"><img rsrc:src="status.vacation-msg.png" label:title="Vacation message is enabled" /></var:if>
|
||||
<var:string var:value="userIdentification"/></span
|
||||
></var:if>
|
||||
<var:if condition="userHasCalendarAccess">
|
||||
<var:if condition="isCalendar">
|
||||
<span class="active"><var:string label:value="Calendar"
|
||||
/></span>
|
||||
</var:if>
|
||||
<var:if condition="isCalendar" const:negate="YES">
|
||||
<a id="calendarBannerLink"
|
||||
var:href="relativeCalendarPath"
|
||||
><var:string label:value="Calendar" /></a>
|
||||
</var:if>
|
||||
<var:if condition="canLogoff">
|
||||
<a id="logoff" var:href="logoffPath">
|
||||
<var:string label:value="Disconnect"/></a>
|
||||
<span id="userIdentificationDisplay">
|
||||
<var:if condition="userHasVacationEnabled">
|
||||
<img rsrc:src="status.vacation-msg.png" label:title="Vacation message is enabled" /></var:if>
|
||||
<var:string var:value="userIdentification"/></span></var:if>
|
||||
|
||||
<var:if condition="userHasCalendarAccess">
|
||||
<var:if condition="isCalendar">
|
||||
<span class="active"><var:string label:value="Calendar"/><!-- space --></span></var:if>
|
||||
<var:if condition="isCalendar" const:negate="YES">
|
||||
<a id="calendarBannerLink" var:href="relativeCalendarPath">
|
||||
<var:string label:value="Calendar" /></a></var:if></var:if>
|
||||
|
||||
<var:if condition="isContacts">
|
||||
<span class="active"><var:string label:value="Address Book"/><!-- space --></span></var:if>
|
||||
<var:if condition="isContacts" const:negate="YES">
|
||||
<a id="contactsBannerLink" var:href="relativeContactsPath">
|
||||
<var:string label:value="Address Book" /></a></var:if>
|
||||
<var:if condition="userHasMailAccess">
|
||||
|
||||
<var:if condition="isMail">
|
||||
<span class="active"><var:string label:value="Mail"/><!-- space --></span></var:if>
|
||||
<var:if condition="isMail" const:negate="YES">
|
||||
<a id="mailBannerLink" var:href="relativeMailPath">
|
||||
<var:string label:value="Mail" /></a></var:if></var:if>
|
||||
|
||||
<a id="preferencesBannerLink" var:href="relativePreferencesPath">
|
||||
<var:string label:value="Preferences" /></a>
|
||||
<var:if condition="isSuperUser">
|
||||
<var:if condition="isAdministration">
|
||||
<span class="active"><var:string label:value="Administration"/></span></var:if>
|
||||
<var:if condition="isAdministration" const:negate="YES">
|
||||
<a id="administrationBannerLink" var:href="relativeAdministrationPath">
|
||||
<var:string label:value="Administration" /></a></var:if></var:if>
|
||||
<var:if condition="isUIxDebugEnabled">
|
||||
<a id="consoleBannerLink" href="#">
|
||||
<var:string label:value="Log Console (dev.)" /></a></var:if></div></var:if>
|
||||
|
||||
<!-- ToolBar -->
|
||||
<var:component className="UIxToolbar" var:toolbar="toolbar" />
|
||||
|
||||
</var:if>
|
||||
<var:if condition="isContacts">
|
||||
<span class="active"><var:string label:value="Address Book"
|
||||
/></span>
|
||||
</var:if>
|
||||
<var:if condition="isContacts" const:negate="YES">
|
||||
<a id="contactsBannerLink"
|
||||
var:href="relativeContactsPath"
|
||||
><var:string label:value="Address Book" /></a>
|
||||
</var:if>
|
||||
|
||||
<var:if condition="userHasMailAccess">
|
||||
<var:if condition="isMail">
|
||||
<span class="active"><var:string label:value="Mail"
|
||||
/></span>
|
||||
</var:if>
|
||||
<var:if condition="isMail" const:negate="YES">
|
||||
<a id="mailBannerLink" var:href="relativeMailPath"
|
||||
><var:string label:value="Mail" /></a>
|
||||
</var:if>
|
||||
|
||||
</var:if>
|
||||
<a id="preferencesBannerLink"
|
||||
var:href="relativePreferencesPath"
|
||||
><var:string label:value="Preferences" /></a>
|
||||
<var:if condition="isSuperUser">
|
||||
|
||||
<var:if condition="isAdministration">
|
||||
<span class="active"><var:string label:value="Administration"
|
||||
/></span>
|
||||
</var:if>
|
||||
<var:if condition="isAdministration" const:negate="YES">
|
||||
<a id="administrationBannerLink" var:href="relativeAdministrationPath"
|
||||
><var:string label:value="Administration" /></a>
|
||||
</var:if>
|
||||
</var:if>
|
||||
<var:if condition="isUIxDebugEnabled"
|
||||
> <a id="consoleBannerLink"
|
||||
href="#"><var:string
|
||||
label:value="Log Console (dev.)" /></a
|
||||
></var:if>
|
||||
</div>
|
||||
</var:if
|
||||
><var:component className="UIxToolbar" var:toolbar="toolbar"
|
||||
/>
|
||||
|
||||
<div id="pageContent"><var:component-content/></div>
|
||||
|
||||
<div id="javascriptSafetyNet"><!-- space --></div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var ApplicationBaseURL = '<var:string value="modulePath"/>';
|
||||
var ResourcesURL = '<var:string value="applicationPath"/>.woa/WebServerResources';
|
||||
var minimumSearchLength = <var:string value="minimumSearchLength"/>;
|
||||
<var:if condition="isSuperUser"
|
||||
>var IsSuperUser = true;
|
||||
</var:if>
|
||||
<var:if condition="isSuperUser" const:negate="YES"
|
||||
>var IsSuperUser = false;
|
||||
</var:if>
|
||||
<var:if condition="usesCASAuthentication"
|
||||
>var usesCASAuthentication = true;
|
||||
</var:if>
|
||||
<var:if condition="usesCASAuthentication" const:negate="YES"
|
||||
>var usesCASAuthentication = false;
|
||||
</var:if>
|
||||
<var:if condition="shortUserNameForDisplay" const:value="anonymous"
|
||||
const:negate="YES"
|
||||
>var UserFolderURL = '<var:string value="userFolderPath" const:escapeHTML="NO"/>';
|
||||
var UserLogin = '<var:string value="shortUserNameForDisplay" const:escapeHTML="NO"/>';
|
||||
var UserLanguage = '<var:string value="userLanguage" const:escapeHTML="NO"/>';
|
||||
</var:if>
|
||||
<var:string value="commonLocalizableStrings" const:escapeHTML="NO"/>
|
||||
<var:string value="productLocalizableStrings" const:escapeHTML="NO"/>
|
||||
</script>
|
||||
<script type="text/javascript" rsrc:src="prototype.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="jquery.js"><!-- space --></script>
|
||||
<!-- Page Content -->
|
||||
<div id="pageContent"><var:component-content/><!-- space --></div>
|
||||
<div id="javascriptSafetyNet"><!-- space --></div>
|
||||
<script type="text/javascript">
|
||||
var ApplicationBaseURL = '<var:string value="modulePath"/>';
|
||||
var ResourcesURL = '<var:string value="applicationPath"/>.woa/WebServerResources';
|
||||
var minimumSearchLength = <var:string value="minimumSearchLength"/>;
|
||||
<var:if condition="isSuperUser">
|
||||
var IsSuperUser = true;</var:if>
|
||||
<var:if condition="isSuperUser" const:negate="YES">
|
||||
var IsSuperUser = false;</var:if>
|
||||
<var:if condition="usesCASAuthentication">
|
||||
var usesCASAuthentication = true;</var:if>
|
||||
<var:if condition="usesCASAuthentication" const:negate="YES">
|
||||
var usesCASAuthentication = false;</var:if>
|
||||
<var:if condition="shortUserNameForDisplay" const:value="anonymous" const:negate="YES">
|
||||
var UserFolderURL = '<var:string value="userFolderPath" const:escapeHTML="NO"/>';
|
||||
var UserLogin = '<var:string value="shortUserNameForDisplay" const:escapeHTML="NO"/>';
|
||||
var UserLanguage = '<var:string value="userLanguage" const:escapeHTML="NO"/>'; </var:if>
|
||||
<var:string value="commonLocalizableStrings" const:escapeHTML="NO"/>
|
||||
<var:string value="productLocalizableStrings" const:escapeHTML="NO"/></script>
|
||||
|
||||
<script type="text/javascript" rsrc:src="prototype.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="jquery.js"><!-- space --></script>
|
||||
<script>jQuery.noConflict();</script>
|
||||
<script type="text/javascript" rsrc:src="tablekit.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="tablekit-trueresize.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="tablekit-sogo.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="JavascriptAPIExtensions.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="HTMLElement.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="HTMLInputElement.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="HTMLTableElement.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="generic.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="SOGoDragHandles.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="SOGoTabsController.js"><!-- space --></script>
|
||||
<var:if condition="hasProductSpecificJavaScript"><script type="text/javascript"
|
||||
var:src="productJavaScriptURL"><!-- space --></script></var:if>
|
||||
<var:if condition="hasPageSpecificJavaScript"><script type="text/javascript"
|
||||
var:src="pageJavaScriptURL"><!-- space --></script></var:if>
|
||||
<var:foreach list="additionalJSFiles" item="item"
|
||||
><script type="text/javascript" var:src="item"><!-- space --></script>
|
||||
</var:foreach>
|
||||
<var:foreach list="systemAdditionalJSFiles" item="item"
|
||||
><script type="text/javascript" var:src="item"><!-- space --></script>
|
||||
</var:foreach>
|
||||
</var:if>
|
||||
<var:if condition="isCompatibleBrowser" const:negate="YES"
|
||||
><var:component className="SOGoBrowsersPanel"
|
||||
/></var:if>
|
||||
<noscript>
|
||||
<div class="javascriptPopupBackground">
|
||||
</div>
|
||||
<div class="javascriptMessagePseudoWindow noJavascriptErrorMessage">
|
||||
<var:string label:value="noJavascriptError"
|
||||
/><br /><br
|
||||
/><a class="button" var:href="page.context.uri"
|
||||
><var:string label:value="noJavascriptRetry"
|
||||
/></a>
|
||||
</div>
|
||||
</noscript>
|
||||
<script type="text/javascript" rsrc:src="tablekit.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="tablekit-trueresize.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="tablekit-sogo.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="JavascriptAPIExtensions.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="HTMLElement.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="HTMLInputElement.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="HTMLTableElement.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="generic.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="SOGoDragHandles.js"><!-- space --></script>
|
||||
<script type="text/javascript" rsrc:src="SOGoTabsController.js"><!-- space --></script>
|
||||
<var:if condition="hasProductSpecificJavaScript">
|
||||
<script type="text/javascript" var:src="productJavaScriptURL"><!-- space --></script></var:if>
|
||||
<var:if condition="hasPageSpecificJavaScript">
|
||||
<script type="text/javascript" var:src="pageJavaScriptURL"><!-- space --></script></var:if>
|
||||
<var:foreach list="additionalJSFiles" item="item">
|
||||
<script type="text/javascript" var:src="item"><!-- space --></script></var:foreach>
|
||||
<var:foreach list="systemAdditionalJSFiles" item="item">
|
||||
<script type="text/javascript" var:src="item"><!-- space --></script></var:foreach></var:if>
|
||||
<var:if condition="isCompatibleBrowser" const:negate="YES">
|
||||
<var:component className="SOGoBrowsersPanel"/></var:if>
|
||||
|
||||
<noscript>
|
||||
<div class="javascriptPopupBackground"><!-- space --></div>
|
||||
<div class="javascriptMessagePseudoWindow noJavascriptErrorMessage">
|
||||
<var:string label:value="noJavascriptError"/><br /><br/>
|
||||
<a class="button" var:href="page.context.uri">
|
||||
<var:string label:value="noJavascriptRetry"/></a></div></noscript>
|
||||
</body>
|
||||
</html>
|
||||
</var:if>
|
||||
|
||||
<var:if condition="hideFrame">
|
||||
<var:component-content />
|
||||
</var:if>
|
||||
<var:component-content /></var:if>
|
||||
</container>
|
||||
|
|
|
@ -7,45 +7,36 @@
|
|||
xmlns:label="OGo:label"
|
||||
xmlns:so="http://www.skyrix.com/od/so-lookup">
|
||||
<div id="toolbar" class="toolbar">
|
||||
<var:foreach list="toolbarConfig" item="toolbarGroup"
|
||||
><var:foreach list="toolbarGroup" item="buttonInfo"
|
||||
><var:if condition="isButtonEnabled"
|
||||
><a var:class="cssClasses"
|
||||
|
||||
<var:foreach list="toolbarConfig" item="toolbarGroup">
|
||||
<var:foreach list="toolbarGroup" item="buttonInfo">
|
||||
<var:if condition="isButtonEnabled">
|
||||
<a var:class="cssClasses"
|
||||
var:href="buttonInfo.link"
|
||||
var:target="buttonInfo.target"
|
||||
var:onclick="buttonInfo.onclick"
|
||||
var:title="buttonTooltip"
|
||||
><span><img class="buttonImage"
|
||||
var:src="buttonImage"
|
||||
var:alt="buttonTooltip"
|
||||
/><var:if condition="hasMenu"
|
||||
><img class="buttonMenuArrow"
|
||||
rsrc:src="arrow-dwn-sharp.gif"
|
||||
var:alt="buttonTooltip"
|
||||
/></var:if
|
||||
><br/><var:string value="buttonLabel"
|
||||
/></span>
|
||||
</a></var:if
|
||||
><var:if condition="isButtonEnabled"
|
||||
const:negate="YES"
|
||||
><span var:class="cssClasses"
|
||||
><img class="buttonImage"
|
||||
var:title="buttonTooltip">
|
||||
<span><img class="buttonImage"
|
||||
var:src="buttonImage"
|
||||
var:alt="buttonTooltip"
|
||||
/><br
|
||||
/><span class="buttonLabel"
|
||||
><var:string
|
||||
value="buttonLabel"
|
||||
/></span
|
||||
></span
|
||||
></var:if
|
||||
></var:foreach>
|
||||
<var:if condition="isLastGroup" const:negate="YES"
|
||||
><span class="toolbarSeparator"
|
||||
><var:entity const:name="nbsp"
|
||||
/></span
|
||||
></var:if>
|
||||
</var:foreach>
|
||||
<img id="progressIndicator" rsrc:src="busy.gif" />
|
||||
var:alt="buttonTooltip"/>
|
||||
<var:if condition="hasMenu">
|
||||
<img class="buttonMenuArrow"
|
||||
rsrc:src="arrow-dwn-sharp.gif"
|
||||
var:alt="buttonTooltip"/></var:if><br/>
|
||||
<var:string value="buttonLabel"/></span></a></var:if>
|
||||
|
||||
<var:if condition="isButtonEnabled" const:negate="YES">
|
||||
<span var:class="cssClasses">
|
||||
<img class="buttonImage"
|
||||
var:src="buttonImage"
|
||||
var:alt="buttonTooltip"/><br/>
|
||||
<span class="buttonLabel">
|
||||
<var:string value="buttonLabel"/></span></span></var:if></var:foreach>
|
||||
|
||||
<var:if condition="isLastGroup" const:negate="YES">
|
||||
<span class="toolbarSeparator">
|
||||
<var:entity const:name="nbsp"/></span></var:if></var:foreach>
|
||||
|
||||
<img id="progressIndicator" rsrc:src="busy.gif" />
|
||||
</div>
|
||||
</var:if>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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("<h3>"+events+"</h3>");
|
||||
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("<h3>"+task+"</h3>");
|
||||
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, "<BR/>"));
|
||||
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 = "<div class=\"divEventsPreview\"><table>";
|
||||
parsedEvent += "<tr><th></th><th>"+ event[4] +"</th></tr>";
|
||||
parsedEvent += "<tr><td class=\"label\">" + start + "</td><td>" + startDate.toLocaleString() + "</td></tr>";
|
||||
parsedEvent += "<tr><td class=\"label\">" + end + "</td><td>" + endDate.toLocaleString() + "</td></tr>";
|
||||
if (event[7] != "")
|
||||
parsedEvent += "<tr><td class=\"label\">"+ Location +"</td><td>" + event[7] + "</td></tr>";
|
||||
parsedEvent += "<tr><td class=\"label\">"+ Calendar +"</td><td>" + event[2] + "</td></tr>";
|
||||
parsedEvent += "</table></div>";
|
||||
return parsedEvent;
|
||||
}
|
||||
|
||||
function _parseTask(task) {
|
||||
var parsedTask;
|
||||
var end = _("Due Date:");
|
||||
var Calendar = _("Calendar:");
|
||||
var Location = _("Location:");
|
||||
|
||||
parsedTask = "<div class=\"divTasksPreview\"><table>";
|
||||
if (task[12] == "overdue")
|
||||
parsedTask += "<tr><th></th><th class=\"overdueTasks\">"+ task[4] +"</th></tr>";
|
||||
else if (task[12] == "completed") {
|
||||
parsedTask += "<tr><th></th><th class=\"completedTasks\">"+ task[4] +"</th></tr>";
|
||||
}
|
||||
else
|
||||
parsedTask += "<tr class=\"tasksTitle\"><th></th><th>"+ task[4] +"</th></tr>";
|
||||
|
||||
if (task[5] != null) {
|
||||
var endDate = new Date(task[5] *1000);
|
||||
parsedTask += "<tr><td class=\"label\">"+ end +"</td><td>"+ endDate.toLocaleString() + "</td></tr>";
|
||||
}
|
||||
if (task[7] != "") {
|
||||
parsedTask += "<tr><td class=\"label\">"+ Location +"</td><td>" + task[7] + "</td></tr>";
|
||||
}
|
||||
parsedTask += "<tr><td class=\"label\">" + Calendar + "</td><td>" + task[2] + "</td></tr>";
|
||||
parsedTask += "</table></div>";
|
||||
|
||||
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 + "<br />";
|
||||
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);
|
Loading…
Reference in New Issue