X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Felements%2Fcalendar-setup.js;h=0dc3caa008f5a392e07be884de50bb2d08db2419;hp=de6ff591f874a859f1bd7bb85a480520c8382e39;hb=68d86148eadaadb6706b91df58d7b505269b1cdf;hpb=56c771abafb2cad3430fee10deacba6e561933de diff --git a/httemplate/elements/calendar-setup.js b/httemplate/elements/calendar-setup.js index de6ff591f..0dc3caa00 100644 --- a/httemplate/elements/calendar-setup.js +++ b/httemplate/elements/calendar-setup.js @@ -1,20 +1,25 @@ -/* Copyright Mihai Bazon, 2002, 2003 | http://students.infoiasi.ro/~mishoo +/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ * --------------------------------------------------------------------------- * * The DHTML Calendar * * Details and latest version at: - * http://students.infoiasi.ro/~mishoo/site/calendar.epl + * http://dynarch.com/mishoo/calendar.epl * - * Feel free to use this script under the terms of the GNU Lesser General - * Public License, as long as you do not remove or alter this notice. + * This script is distributed under the GNU Lesser General Public License. + * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html * * This file defines helper functions for setting up the calendar. They are * intended to help non-programmers get a working calendar on their site - * quickly. + * quickly. This script should not be seen as part of the calendar. It just + * shows you what one can do with the calendar, while in the same time + * providing a quick and simple method for setting it up. If you need + * exhaustive customization of the calendar creation process feel free to + * modify this code to suit your needs (this is recommended and much better + * than modifying calendar.js itself). */ -// $Id: calendar-setup.js,v 1.2 2003-09-30 08:23:15 ivan Exp $ +// $Id: calendar-setup.js,v 1.3 2003-11-07 10:53:35 ivan Exp $ /** * This function "patches" an input field (or other element) to use a calendar @@ -31,13 +36,19 @@ * ifFormat | date format that will be stored in the input field * daFormat | the date format that will be used to display the date in displayArea * singleClick | (true/false) wether the calendar is in single click mode or not (default: true) - * mondayFirst | (true/false) if true Monday is the first day of week, Sunday otherwise (default: false) + * mondayFirst | (true/false) if true Monday is the first day of week, Sunday otherwise (default: true) * align | alignment (default: "Bl"); if you don't know what's this see the calendar documentation * range | array with 2 elements. Default: [1900, 2999] -- the range of years available * weekNumbers | (true/false) if it's true (default) the calendar will display week numbers * flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID * flatCallback | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar) * disableFunc | function that receives a JS Date object and should return true if that date has to be disabled in the calendar + * onSelect | function that gets called when a date is selected. You don't _have_ to supply this (the default is generally okay) + * onClose | function that gets called when the calendar is closed. [default] + * onUpdate | function that gets called after the date is updated in the input field. Receives a reference to the calendar. + * date | the date that the calendar will be initially displayed to + * showsTime | default: false; if true the calendar will include a time selector + * timeFormat | the time format; can be "12" or "24", default is "12" * * None of them is required, they all have default values. However, if you * pass none of "inputField", "displayArea" or "button" you'll get a warning @@ -46,20 +57,27 @@ Calendar.setup = function (params) { function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } }; - param_default("inputField", null); - param_default("displayArea", null); - param_default("button", null); - param_default("eventName", "click"); - param_default("ifFormat", "y/mm/dd"); - param_default("daFormat", "y/mm/dd"); - param_default("singleClick", true); - param_default("disableFunc", null); - param_default("mondayFirst", false); - param_default("align", "Bl"); - param_default("range", [1900, 2999]); - param_default("weekNumbers", true); - param_default("flat", null); - param_default("flatCallback", null); + param_default("inputField", null); + param_default("displayArea", null); + param_default("button", null); + param_default("eventName", "click"); + param_default("ifFormat", "%Y/%m/%d"); + param_default("daFormat", "%Y/%m/%d"); + param_default("singleClick", true); + param_default("disableFunc", null); + param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined + param_default("mondayFirst", true); + param_default("align", "Bl"); + param_default("range", [1900, 2999]); + param_default("weekNumbers", true); + param_default("flat", null); + param_default("flatCallback", null); + param_default("onSelect", null); + param_default("onClose", null); + param_default("onUpdate", null); + param_default("date", null); + param_default("showsTime", false); + param_default("timeFormat", "24"); var tmp = ["inputField", "displayArea", "button"]; for (var i in tmp) { @@ -90,6 +108,9 @@ Calendar.setup = function (params) { if (cal.params.singleClick && cal.dateClicked) { cal.callCloseHandler(); } + if (typeof cal.params.onUpdate == "function") { + cal.params.onUpdate(cal); + } }; if (params.flat != null) { @@ -98,11 +119,13 @@ Calendar.setup = function (params) { alert("Calendar.setup:\n Flat specified but can't find parent."); return false; } - var cal = new Calendar(params.mondayFirst, null, onSelect); + var cal = new Calendar(params.mondayFirst, params.date, params.onSelect || onSelect); + cal.showsTime = params.showsTime; + cal.time24 = (params.timeFormat == "24"); cal.params = params; cal.weekNumbers = params.weekNumbers; cal.setRange(params.range[0], params.range[1]); - cal.setDisabledHandler(params.disableFunc); + cal.setDateStatusHandler(params.dateStatusFunc); cal.create(params.flat); cal.show(); return false; @@ -113,23 +136,28 @@ Calendar.setup = function (params) { var dateEl = params.inputField || params.displayArea; var dateFmt = params.inputField ? params.ifFormat : params.daFormat; var mustCreate = false; + var cal = window.calendar; if (!window.calendar) { - window.calendar = new Calendar(params.mondayFirst, null, onSelect, function(cal) { cal.hide(); }); - window.calendar.weekNumbers = params.weekNumbers; + window.calendar = cal = new Calendar(params.mondayFirst, + params.date, + params.onSelect || onSelect, + params.onClose || function(cal) { cal.hide(); }); + cal.showsTime = params.showsTime; + cal.time24 = (params.timeFormat == "24"); + cal.weekNumbers = params.weekNumbers; mustCreate = true; } else { - window.calendar.hide(); - } - window.calendar.setRange(params.range[0], params.range[1]); - window.calendar.params = params; - window.calendar.setDisabledHandler(params.disableFunc); - window.calendar.setDateFormat(dateFmt); - if (mustCreate) { - window.calendar.create(); + cal.hide(); } - window.calendar.parseDate(dateEl.value || dateEl.innerHTML); - window.calendar.refresh(); - window.calendar.showAtElement(params.displayArea || params.inputField, params.align); + cal.setRange(params.range[0], params.range[1]); + cal.params = params; + cal.setDateStatusHandler(params.dateStatusFunc); + cal.setDateFormat(dateFmt); + if (mustCreate) + cal.create(); + cal.parseDate(dateEl.value || dateEl.innerHTML); + cal.refresh(); + cal.showAtElement(params.displayArea || params.inputField, params.align); return false; }; };