CGI-WebToolkit
view release on metacpan or search on metacpan
t/private/javascripts/datepicker.js view on Meta::CPAN
// Datepicker will fallback to the language default; i.e. 'es_AR' will use 'es'
Locale['es'] = i18n.createLocale('eu', 'es');
Locale['en'] = i18n.createLocale('us', 'en');
Locale['en_GB'] = i18n.createLocale('eu', 'en');
Locale['en_AU'] = Locale['en_GB'];
Locale['de'] = i18n.createLocale('eu', 'de');
Locale['es_iso8601'] = i18n.createLocale('iso8601', 'es');
Locale['en_iso8601'] = i18n.createLocale('iso8601', 'en');
Locale['de_iso8601'] = i18n.createLocale('iso8601', 'de');
}
Control.DatePicker.Language = {
'es': {
months: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Augosto', 'Septiembre', 'Octubre', 'Novimbre', 'Diciembre'],
days: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
strings: {
'Now': 'Ahora',
'Today': 'Hoy',
'Time': 'Hora',
'Exact minutes': 'Minuto exacto',
'Select Date and Time': 'Selecciona Dia y Hora',
'Select Time': 'Selecciona Hora',
'Open calendar': 'Abre calendario'
}
},
'de': {
months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
days: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
strings: {
'Now': 'Jetzt',
'Today': 'Heute',
'Time': 'Zeit',
'Exact minutes': 'Exakte minuten',
'Select Date and Time': 'Zeit und Datum Auswählen',
'Select Time': 'Zeit Auswählen',
'Open calendar': 'Kalender öffnen'
}
}
};
Control.DatePickerPanel = Class.create();
Object.extend(Control.DatePickerPanel.prototype, {
initialize: function(options) {
this.i18n = new Control.DatePicker.i18n(options && options.locale ? options.locale : 'en_US');
options = this.i18n.inheritOptions(options);
this.options = Object.extend({
className: 'datepickerControl',
closeOnToday: true,
selectToday: true,
showOnFocus: false,
datePicker: true,
timePicker: false,
use24hrs: false,
firstWeekDay: 0,
weekend: [0,6],
months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
days: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
}, options || {});
// Make sure first weekday is in the correct range
with (this.options)
if (isNaN(firstWeekDay*1)) firstWeekDay = 0;
else firstWeekDay = firstWeekDay % 7;
this.keysCaptured = false;
this.calendarCont = null;
this.currentDate = this.options.date ? this.options.date : new Date();
this.dayOfWeek = 0;
this.minInterval = 5;
this.selectedDay = null;
this.selectedHour = null;
this.selectedMinute = null;
this.selectedAmPm = null;
this.currentDays = [];
this.hourCells = [];
this.minuteCells = [];
this.otherMinutes = null;
this.amCell = null;
this.pmCell = null;
this.element = this.createPicker();
this.selectDate(this.currentDate);
},
createPicker: function() {
var elt = document.createElement('div');
elt.style.position = 'absolute';
elt.className = this.options.className;
this.calendarCont = this.drawCalendar(elt, this.currentDate);
Event.observe(elt, 'click', this.clickHandler.bindAsEventListener(this));
Event.observe(elt, 'dblclick', this.dblClickHandler.bindAsEventListener(this));
this.documentKeyListener = this.keyHandler.bindAsEventListener(this);
if (this.options.captureKeys)
this.captureKeys();
return elt;
},
tr: function(str) {
return this.i18n.tr(str);
},
captureKeys: function() {
Event.observe(document, 'keydown', this.documentKeyListener, true);
this.keysCaptured = true;
},
releaseKeys: function() {
Event.stopObserving(document, 'keydown', this.documentKeyListener, true);
this.keysCaptured = false;
},
setDate: function(date) {
if (date) {
// Clear container
while (this.element.firstChild)
this.element.removeChild(this.element.firstChild);
this.calendarCont = this.drawCalendar(this.element, date);
}
},
drawCalendar: function(container, date) {
var calCont = container;
if (!this.options.datePicker) {
var calTable = document.createElement('table');
t/private/javascripts/datepicker.js view on Meta::CPAN
cell.onclick = this.hourClickedListener((j*6)+i+(this.options.use24hrs?0:1));
this.hourCells[(j*6)+i] = cell;
}
if (!this.options.use24hrs) {
cell = row.insertCell(i);
cell.className = 'ampm';
cell.width = '14%';
if (j) {
cell.innerHTML = this.tr('PM');
cell.onclick = this.pmClickedListener();
this.pmCell = cell;
} else {
cell.innerHTML = this.tr('AM');
cell.onclick = this.amClickedListener();
this.amCell = cell;
}
}
}
row = timeTable.insertRow(rows++);
cell = row.insertCell(0);
cell.colSpan = 6;
var hr = document.createElement('hr');
Element.setStyle(hr, {'color': '#CCCCCC', 'backgroundColor': '#CCCCCC', 'height': '1px', 'border': '0', 'marginTop': '2px', 'marginBottom': '2px', 'padding': '0'});
cell.appendChild(hr);
cell = row.insertCell(1);
for (var j = 0; j < (10/this.minInterval); ++j) {
row = timeTable.insertRow(rows++);
for (var i = 0; i < 6; ++i){
cell = row.insertCell(i);
cell.className = 'minute';
cell.width = '14%';
var minval = ((j*6+i)*this.minInterval);
if (minval < 10) minval = '0'+minval;
cell.innerHTML = ':'+minval;
cell.onclick = this.minuteClickedListener(minval);
this.minuteCells[(j*6)+i] = cell;
}
if (!this.options.use24hrs) {
cell = row.insertCell(i);
cell.width = '14%';
}
}
row = timeTable.insertRow(rows++);
cell = row.insertCell(0);
cell.style.textAlign = 'right';
cell.colSpan = 5;
cell.innerHTML = '<i>'+this.tr('Exact minutes')+':</i>';
cell = row.insertCell(1);
cell.className = 'otherminute';
var otherInput = document.createElement('input');
otherInput.type = 'text';
otherInput.maxLength = 2;
otherInput.style.width = '2em';
var inputTimeout = null;
otherInput.onkeyup = function(e) {
if (!isNaN(otherInput.value)) {
this.currentDate.setMinutes(otherInput.value);
this.dateChanged(this.currentDate);
}
}.bindAsEventListener(this);
otherInput.onkeydown = function(e) {
if (e.keyCode == Event.KEY_RETURN)
if (this.options.onSelect) this.options.onSelect(this.currentDate);
}.bindAsEventListener(this);
// Remove event key capture to allow use of arrow keys
otherInput.onfocus = this.releaseKeys.bindAsEventListener(this);
otherInput.onblur = this.captureKeys.bindAsEventListener(this);
this.otherMinutes = otherInput;
cell.appendChild(otherInput);
// Padding cell
if (!this.options.use24hrs)
cell = row.insertCell(2);
row = timeTable.insertRow(rows++);
cell = row.insertCell(0);
cell.colSpan = rowwidth;
hr = document.createElement('hr');
Element.setStyle(hr, {'color': 'gray', 'backgroundColor': 'gray', 'height': '1px', 'border': '0', 'marginTop': '3px', 'marginBottom': '3px', 'padding': '0'});
cell.appendChild(hr);
row = timeTable.insertRow(rows++);
cell = row.insertCell(0);
cell.colSpan = rowwidth;
selectButton = document.createElement('input');
selectButton.type = 'button';
if (this.options.datePicker)
selectButton.value = this.tr('Select Date and Time');
else
selectButton.value = this.tr('Select Time');
selectButton.onclick = function(e) {
this.options.onSelect && this.options.onSelect(this.currentDate);
}.bindAsEventListener(this);
cell.appendChild(selectButton);
} else {
calCont.appendChild(calTable);
}
return calCont;
},
createCalendar: function(date) {
this.currentDate = date;
this.currentDays = [];
var today = new Date();
var previousYear = new Date(date.getFullYear() - 1, date.getMonth(), 1)
var previousMonth = new Date(date.getFullYear(), date.getMonth() - 1, 1)
var nextMonth = new Date(date.getFullYear(), date.getMonth() + 1, 1)
var nextYear = new Date(date.getFullYear() + 1, date.getMonth(), 1)
var row;
var cell;
var rows = 0;
( run in 2.416 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )