CalendarWidget
Comments0this wiki
If you would like to use a Calendar widget with the date fields in RT, you can do the following. All of the file changes were done under the local RT3 Mason overlay, which is `/usr/local/lib/rt3/html` on my machine (Fedora Core 4). Note that this functionality is native in 3.8. Also note that this is NOT a calendar for Custom Fields.
- Create a directory named `NoAuth/js`
cd /usr/local/lib/rt3/html mkdir -p NoAuth/js
- Download jscalendar from dynarch.com. (DynArch Calendar page)
- Unpack the downloaded file in `NoAuth/js`, I also renamed it to remove the version number
cd NoAuth/js unzip /tmp/jscalendar-1.0.zip mv jscalendar-1.0 jscalendar
- Now, create a directory named `Elements` to modify the date selector
cd /usr/local/lib/rt3/html mkdir -p Elements
- I started by copying the contents of the `Elements/SelectDate` file distributed with RT and then modified it. Here's the final result:
<INPUT ID="<%$Name%>" NAME="<%$Name%>" VALUE="<%$Default%>" size=<%$Size%>>
<BUTTON TYPE="reset" id="<%$Name%>_date_button">Choose...</BUTTON>
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "<%$Name%>",
ifFormat: "%Y-%m-%d %H:%M",
showsTime: true,
button: "<%$Name%>_date_button",
});
</SCRIPT>
<%init>
unless ((defined $Default) or
($current <= 0)) {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime($current);
$Default = sprintf("%04d-%02d-%02d %02d:%02d",
$year+1900,$mon+1,$mday,
$hour,$min);
}
unless ($Name) {
$Name = $menu_prefix. "_Date";
}
</%init>
<%args>
$ShowTime => undef
$menu_prefix=>''
$current=>time
$Default => undef
$Name => undef
$Size => 16
</%args>
Now, all the date fields should have a "Choose..." button next to them that pops open a calendar widget. You may need to restart the web server to force Mason to refresh the code cache. You might also want to use a button with an image, but I leave that as an exercise for the reader.
COMMENTS:
Edit
10 Nov 2006
Edit
Opera 8.54 reported syntax error, fixed by removing the "," at the end of the argument list in SelectDate, as follows:
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "<%$Name%>",
ifFormat: "%Y-%m-%d %H:%M",
showsTime: true,
button: "<%$Name%>_date_button"
});
</SCRIPT>
Also, installing this on rt 3.4.6 I had to add some links to the head of Header
*** 55,60 ****
--- 55,70 ----
<link media="all" rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/webrt.css" type="text/css" />
<link media="print" rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/printrt.css" type="text/css" />
+ %#
+ %# 10 Nov 2006, Additions for Calendar popup
+ %#
+ <link rel="stylesheet" type="text/css"
+ href="<%$RT::WebPath%>/NoAuth/js/jscalendar/calendar-system.css"
+ title="calendar-system">
+ <script language="javascript" type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/jscalendar/calendar.js"></script>
+ <script language="javascript" type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/jscalendar/lang/calendar-en.js"></script>
+ <script language="javascript" type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/jscalendar/calendar-setup.js"></script>
+
<script>
function hideshow(num) {
idstring = "element-" + num;
Which I did by copying Header to local/html/Elements/Header and then editing it.
Ian Goodacre