mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
New build scripts
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5282 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
242
source/web/scripts/ajax/dojo/src/widget/DropdownTimePicker.js
Normal file
242
source/web/scripts/ajax/dojo/src/widget/DropdownTimePicker.js
Normal file
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
Copyright (c) 2004-2006, The Dojo Foundation
|
||||
All Rights Reserved.
|
||||
|
||||
Licensed under the Academic Free License version 2.1 or above OR the
|
||||
modified BSD license. For more information on Dojo licensing, see:
|
||||
|
||||
http://dojotoolkit.org/community/licensing.shtml
|
||||
*/
|
||||
|
||||
dojo.provide("dojo.widget.DropdownTimePicker");
|
||||
|
||||
dojo.require("dojo.widget.*");
|
||||
dojo.require("dojo.widget.DropdownContainer");
|
||||
dojo.require("dojo.widget.TimePicker");
|
||||
dojo.require("dojo.event.*");
|
||||
dojo.require("dojo.html.*");
|
||||
dojo.require("dojo.date.format");
|
||||
dojo.require("dojo.date.serialize");
|
||||
dojo.require("dojo.i18n.common");
|
||||
dojo.requireLocalization("dojo.widget", "DropdownTimePicker", null, "ROOT");
|
||||
|
||||
dojo.widget.defineWidget(
|
||||
"dojo.widget.DropdownTimePicker",
|
||||
dojo.widget.DropdownContainer,
|
||||
{
|
||||
/*
|
||||
summary:
|
||||
A form input for entering times with a pop-up dojo.widget.TimePicker to aid in selection
|
||||
|
||||
description:
|
||||
This is TimePicker in a DropdownContainer, it supports all features of TimeePicker.
|
||||
|
||||
It is possible to customize the user-visible formatting with either the formatLength or
|
||||
displayFormat attributes. The value sent to the server is typically a locale-independent
|
||||
value in a hidden field as defined by the name attribute. RFC3339 representation is used
|
||||
by default, but other options are available with saveFormat.
|
||||
|
||||
usage:
|
||||
var dtp = dojo.widget.createWidget("DropdownTimePicker", {},
|
||||
dojo.byId("DropdownTimePickerNode"));
|
||||
|
||||
<input dojoType="DropdownTimePicker">
|
||||
*/
|
||||
|
||||
// iconURL: URL
|
||||
// path of icon for button to display time picker widget
|
||||
iconURL: dojo.uri.dojoUri("src/widget/templates/images/timeIcon.gif"),
|
||||
|
||||
// formatLength: String
|
||||
// Type of formatting used for visual display, appropriate to locale (choice of long, short, medium or full)
|
||||
// See dojo.date.format for details.
|
||||
formatLength: "short",
|
||||
|
||||
// displayFormat: String
|
||||
// A pattern used for the visual display of the formatted date.
|
||||
// Setting this overrides the default locale-specific settings as well as the formatLength
|
||||
// attribute. See dojo.date.format for a reference which defines the formatting patterns.
|
||||
displayFormat: "",
|
||||
|
||||
timeFormat: "", // deprecated, will be removed for 0.5
|
||||
|
||||
//FIXME: need saveFormat attribute support
|
||||
// saveFormat: String
|
||||
// Formatting scheme used when submitting the form element. This formatting is used in a hidden
|
||||
// field (name) intended for server use, and is therefore typically locale-independent.
|
||||
// By default, uses rfc3339 style date formatting (rfc)
|
||||
// Use a pattern string like displayFormat or one of the following:
|
||||
// rfc|iso|posix|unix
|
||||
saveFormat: "",
|
||||
|
||||
// value: String|Date
|
||||
// form value property in rfc3339 format. ex: 12:00
|
||||
value: "",
|
||||
|
||||
// name: String
|
||||
// name of the form element, used to create a hidden field by this name for form element submission.
|
||||
name: "",
|
||||
|
||||
postMixInProperties: function() {
|
||||
// summary: see dojo.widget.DomWidget
|
||||
dojo.widget.DropdownTimePicker.superclass.postMixInProperties.apply(this, arguments);
|
||||
var messages = dojo.i18n.getLocalization("dojo.widget", "DropdownTimePicker", this.lang);
|
||||
this.iconAlt = messages.selectTime;
|
||||
|
||||
//FIXME: should this be if/else/else?
|
||||
if(typeof(this.value)=='string'&&this.value.toLowerCase()=='today'){
|
||||
this.value = new Date();
|
||||
}
|
||||
if(this.value && isNaN(this.value)){
|
||||
var orig = this.value;
|
||||
this.value = dojo.date.fromRfc3339(this.value);
|
||||
if(!this.value){
|
||||
var d = dojo.date.format(new Date(), { selector: "dateOnly", datePattern: "yyyy-MM-dd" });
|
||||
var c = orig.split(":");
|
||||
for(var i = 0; i < c.length; ++i){
|
||||
if(c[i].length == 1) c[i] = "0" + c[i];
|
||||
}
|
||||
orig = c.join(":");
|
||||
this.value = dojo.date.fromRfc3339(d + "T" + orig);
|
||||
dojo.deprecated("dojo.widget.DropdownTimePicker", "time attributes must be passed in Rfc3339 format", "0.5");
|
||||
}
|
||||
}
|
||||
if(this.value && !isNaN(this.value)){
|
||||
this.value = new Date(this.value);
|
||||
}
|
||||
},
|
||||
|
||||
fillInTemplate: function(){
|
||||
// summary: see dojo.widget.DomWidget
|
||||
|
||||
dojo.widget.DropdownTimePicker.superclass.fillInTemplate.apply(this, arguments);
|
||||
|
||||
var value = "";
|
||||
if(this.value instanceof Date) {
|
||||
value = this.value;
|
||||
} else if(this.value) {
|
||||
var orig = this.value;
|
||||
var d = dojo.date.format(new Date(), { selector: "dateOnly", datePattern: "yyyy-MM-dd" });
|
||||
var c = orig.split(":");
|
||||
for(var i = 0; i < c.length; ++i){
|
||||
if(c[i].length == 1) c[i] = "0" + c[i];
|
||||
}
|
||||
orig = c.join(":");
|
||||
value = dojo.date.fromRfc3339(d + "T" + orig);
|
||||
}
|
||||
|
||||
var tpArgs = { widgetContainerId: this.widgetId, lang: this.lang, value: value };
|
||||
this.timePicker = dojo.widget.createWidget("TimePicker", tpArgs, this.containerNode, "child");
|
||||
|
||||
dojo.event.connect(this.timePicker, "onValueChanged", this, "_updateText");
|
||||
|
||||
if(this.value){
|
||||
this._updateText();
|
||||
}
|
||||
this.containerNode.style.zIndex = this.zIndex;
|
||||
this.containerNode.explodeClassName = "timeContainer";
|
||||
this.valueNode.name = this.name;
|
||||
},
|
||||
|
||||
getValue: function(){
|
||||
// summary: return current time in time-only portion of RFC 3339 format
|
||||
return this.valueNode.value; /*String*/
|
||||
},
|
||||
|
||||
getTime: function(){
|
||||
// summary: return current time as a Date object
|
||||
return this.timePicker.storedTime; /*Date*/
|
||||
},
|
||||
|
||||
setValue: function(/*Date|String*/rfcDate){
|
||||
//summary: set the current time from RFC 3339 formatted string or a date object, synonymous with setTime
|
||||
this.setTime(rfcDate);
|
||||
},
|
||||
|
||||
setTime: function(/*Date|String*/dateObj){
|
||||
// summary: set the current time and update the UI
|
||||
var value = "";
|
||||
if(dateObj instanceof Date) {
|
||||
value = dateObj;
|
||||
} else if(this.value) {
|
||||
var orig = this.value;
|
||||
var d = dojo.date.format(new Date(), { selector: "dateOnly", datePattern: "yyyy-MM-dd" });
|
||||
var c = orig.split(":");
|
||||
for(var i = 0; i < c.length; ++i){
|
||||
if(c[i].length == 1) c[i] = "0" + c[i];
|
||||
}
|
||||
orig = c.join(":");
|
||||
value = dojo.date.fromRfc3339(d + "T" + orig);
|
||||
}
|
||||
|
||||
this.timePicker.setTime(value);
|
||||
this._syncValueNode();
|
||||
},
|
||||
|
||||
_updateText: function(){
|
||||
// summary: updates the <input> field according to the current value (ie, displays the formatted date)
|
||||
if(this.timePicker.selectedTime.anyTime){
|
||||
this.inputNode.value = "";
|
||||
}else if(this.timeFormat){
|
||||
dojo.deprecated("dojo.widget.DropdownTimePicker",
|
||||
"Must use displayFormat attribute instead of timeFormat. See dojo.date.format for specification.", "0.5");
|
||||
this.inputNode.value = dojo.date.strftime(this.timePicker.time, this.timeFormat, this.lang);
|
||||
}else{
|
||||
this.inputNode.value = dojo.date.format(this.timePicker.time,
|
||||
{formatLength:this.formatLength, timePattern:this.displayFormat, selector:'timeOnly', locale:this.lang});
|
||||
}
|
||||
this._syncValueNode();
|
||||
this.onValueChanged(this.getTime());
|
||||
this.hideContainer();
|
||||
},
|
||||
|
||||
onValueChanged: function(/*Date*/dateObj){
|
||||
// summary: triggered when this.value is changed
|
||||
},
|
||||
|
||||
onInputChange: function(){
|
||||
// summary: callback when user manually types a time into the <input> field
|
||||
if(this.dateFormat){
|
||||
dojo.deprecated("dojo.widget.DropdownTimePicker",
|
||||
"Cannot parse user input. Must use displayFormat attribute instead of dateFormat. See dojo.date.format for specification.", "0.5");
|
||||
}else{
|
||||
var input = dojo.string.trim(this.inputNode.value);
|
||||
if(input){
|
||||
var inputTime = dojo.date.parse(input,
|
||||
{formatLength:this.formatLength, timePattern:this.displayFormat, selector:'timeOnly', locale:this.lang});
|
||||
if(inputTime){
|
||||
this.setTime(inputTime);
|
||||
}
|
||||
} else {
|
||||
this.valueNode.value = input;
|
||||
}
|
||||
}
|
||||
// If the time entered didn't parse, reset to the old time. KISS, for now.
|
||||
//TODO: usability? should we provide more feedback somehow? an error notice?
|
||||
// seems redundant to do this if the parse failed, but at least until we have validation,
|
||||
// this will fix up the display of entries like 01/32/2006
|
||||
if(input){ this._updateText(); }
|
||||
},
|
||||
|
||||
_syncValueNode: function(){
|
||||
var time = this.timePicker.time;
|
||||
var value;
|
||||
switch(this.saveFormat.toLowerCase()){
|
||||
case "rfc": case "iso": case "":
|
||||
value = dojo.date.toRfc3339(time, 'timeOnly');
|
||||
break;
|
||||
case "posix": case "unix":
|
||||
value = Number(time);
|
||||
break;
|
||||
default:
|
||||
value = dojo.date.format(time, {datePattern:this.saveFormat, selector:'timeOnly', locale:this.lang});
|
||||
}
|
||||
this.valueNode.value = value;
|
||||
},
|
||||
|
||||
destroy: function(/*Boolean*/finalize){
|
||||
this.timePicker.destroy(finalize);
|
||||
dojo.widget.DropdownTimePicker.superclass.destroy.apply(this, arguments);
|
||||
}
|
||||
}
|
||||
);
|
Reference in New Issue
Block a user