summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrent Richardson <trentdrichardson@gmail.com>2013-05-05 09:24:33 -0400
committerTrent Richardson <trentdrichardson@gmail.com>2013-05-05 09:24:33 -0400
commit640cf3406bd44a1ba10a01d86c89153bb5320f3e (patch)
tree33d802c8d87b49810f26a6ce7a109bf9ff105870
parent72850b3aa196453aa79fb16fbf73023cdbce7790 (diff)
parent11f3f16d56528bb9880e9b021f0632c4f02bcd40 (diff)
downloadjQuery-Timepicker-Addon-640cf3406bd44a1ba10a01d86c89153bb5320f3e.zip
jQuery-Timepicker-Addon-640cf3406bd44a1ba10a01d86c89153bb5320f3e.tar.gz
jQuery-Timepicker-Addon-640cf3406bd44a1ba10a01d86c89153bb5320f3e.tar.bz2
Merge branch 'dev'
-rw-r--r--component.json2
-rw-r--r--i18n/jquery-ui-timepicker-af.js (renamed from localization/jquery-ui-timepicker-af.js)1
-rw-r--r--i18n/jquery-ui-timepicker-bg.js (renamed from localization/jquery-ui-timepicker-bg.js)1
-rw-r--r--i18n/jquery-ui-timepicker-ca.js (renamed from localization/jquery-ui-timepicker-ca.js)1
-rw-r--r--i18n/jquery-ui-timepicker-cs.js (renamed from localization/jquery-ui-timepicker-cs.js)1
-rw-r--r--i18n/jquery-ui-timepicker-da.js21
-rw-r--r--i18n/jquery-ui-timepicker-de.js (renamed from localization/jquery-ui-timepicker-de.js)1
-rw-r--r--i18n/jquery-ui-timepicker-el.js (renamed from localization/jquery-ui-timepicker-el.js)1
-rw-r--r--i18n/jquery-ui-timepicker-es.js (renamed from localization/jquery-ui-timepicker-es.js)1
-rw-r--r--i18n/jquery-ui-timepicker-et.js (renamed from localization/jquery-ui-timepicker-et.js)1
-rw-r--r--i18n/jquery-ui-timepicker-eu.js (renamed from localization/jquery-ui-timepicker-eu.js)1
-rw-r--r--i18n/jquery-ui-timepicker-fi.js (renamed from localization/jquery-ui-timepicker-fi.js)1
-rw-r--r--i18n/jquery-ui-timepicker-fr.js (renamed from localization/jquery-ui-timepicker-fr.js)1
-rw-r--r--i18n/jquery-ui-timepicker-gl.js (renamed from localization/jquery-ui-timepicker-gl.js)1
-rw-r--r--i18n/jquery-ui-timepicker-he.js (renamed from localization/jquery-ui-timepicker-he.js)1
-rw-r--r--i18n/jquery-ui-timepicker-hr.js (renamed from localization/jquery-ui-timepicker-hr.js)1
-rw-r--r--i18n/jquery-ui-timepicker-hu.js (renamed from localization/jquery-ui-timepicker-hu.js)1
-rw-r--r--i18n/jquery-ui-timepicker-id.js (renamed from localization/jquery-ui-timepicker-id.js)1
-rw-r--r--i18n/jquery-ui-timepicker-it.js (renamed from localization/jquery-ui-timepicker-it.js)7
-rw-r--r--i18n/jquery-ui-timepicker-ja.js (renamed from localization/jquery-ui-timepicker-ja.js)1
-rw-r--r--i18n/jquery-ui-timepicker-ko.js (renamed from localization/jquery-ui-timepicker-ko.js)1
-rw-r--r--i18n/jquery-ui-timepicker-lt.js (renamed from localization/jquery-ui-timepicker-lt.js)1
-rw-r--r--i18n/jquery-ui-timepicker-nl.js (renamed from localization/jquery-ui-timepicker-nl.js)1
-rw-r--r--i18n/jquery-ui-timepicker-no.js (renamed from localization/jquery-ui-timepicker-no.js)1
-rw-r--r--i18n/jquery-ui-timepicker-pl.js (renamed from localization/jquery-ui-timepicker-pl.js)1
-rw-r--r--i18n/jquery-ui-timepicker-pt-BR.js (renamed from localization/jquery-ui-timepicker-pt-BR.js)1
-rw-r--r--i18n/jquery-ui-timepicker-pt.js (renamed from localization/jquery-ui-timepicker-pt.js)1
-rw-r--r--i18n/jquery-ui-timepicker-ro.js (renamed from localization/jquery-ui-timepicker-ro.js)1
-rw-r--r--i18n/jquery-ui-timepicker-ru.js (renamed from localization/jquery-ui-timepicker-ru.js)1
-rw-r--r--i18n/jquery-ui-timepicker-sk.js (renamed from localization/jquery-ui-timepicker-sk.js)1
-rw-r--r--i18n/jquery-ui-timepicker-sv.js (renamed from localization/jquery-ui-timepicker-sv.js)1
-rw-r--r--i18n/jquery-ui-timepicker-th.js (renamed from localization/jquery-ui-timepicker-th.js)1
-rw-r--r--i18n/jquery-ui-timepicker-tr.js (renamed from localization/jquery-ui-timepicker-tr.js)1
-rw-r--r--i18n/jquery-ui-timepicker-uk.js (renamed from localization/jquery-ui-timepicker-uk.js)1
-rw-r--r--i18n/jquery-ui-timepicker-vi.js (renamed from localization/jquery-ui-timepicker-vi.js)1
-rw-r--r--i18n/jquery-ui-timepicker-zh-CN.js (renamed from localization/jquery-ui-timepicker-zh-CN.js)1
-rw-r--r--i18n/jquery-ui-timepicker-zh-TW.js (renamed from localization/jquery-ui-timepicker-zh-TW.js)1
-rw-r--r--index.html94
-rw-r--r--jquery-ui-timepicker-addon.js458
39 files changed, 420 insertions, 196 deletions
diff --git a/component.json b/component.json
index 7843088..d5d5168 100644
--- a/component.json
+++ b/component.json
@@ -1,6 +1,6 @@
{
"name": "jquery-timepicker-addon",
- "version": "1.2.2",
+ "version": "1.3",
"repository": {
"type": "git",
"url": "git://github.com/trentrichardson/jQuery-Timepicker-Addon.git"
diff --git a/localization/jquery-ui-timepicker-af.js b/i18n/jquery-ui-timepicker-af.js
index 6a6353e..fe9f8c5 100644
--- a/localization/jquery-ui-timepicker-af.js
+++ b/i18n/jquery-ui-timepicker-af.js
@@ -8,6 +8,7 @@
minuteText: 'Minute',
secondText: 'Sekondes',
millisecText: 'Millisekondes',
+ microsecText: 'Mikrosekondes',
timezoneText: 'Tydsone',
currentText: 'Huidige Tyd',
closeText: 'Klaar',
diff --git a/localization/jquery-ui-timepicker-bg.js b/i18n/jquery-ui-timepicker-bg.js
index ffc0cea..1efb439 100644
--- a/localization/jquery-ui-timepicker-bg.js
+++ b/i18n/jquery-ui-timepicker-bg.js
@@ -8,6 +8,7 @@
minuteText: 'Минути',
secondText: 'Секунди',
millisecText: 'Милисекунди',
+ microsecText: 'Микросекунди',
timezoneText: 'Часови пояс',
currentText: 'Сега',
closeText: 'Затвори',
diff --git a/localization/jquery-ui-timepicker-ca.js b/i18n/jquery-ui-timepicker-ca.js
index e3c771d..25b4eed 100644
--- a/localization/jquery-ui-timepicker-ca.js
+++ b/i18n/jquery-ui-timepicker-ca.js
@@ -8,6 +8,7 @@
minuteText: 'Minuts',
secondText: 'Segons',
millisecText: 'Milisegons',
+ microsecText: 'Microsegons',
timezoneText: 'Fus horari',
currentText: 'Ara',
closeText: 'Tancar',
diff --git a/localization/jquery-ui-timepicker-cs.js b/i18n/jquery-ui-timepicker-cs.js
index 814dd94..9d358fa 100644
--- a/localization/jquery-ui-timepicker-cs.js
+++ b/i18n/jquery-ui-timepicker-cs.js
@@ -8,6 +8,7 @@
minuteText: 'Minuty',
secondText: 'Vteřiny',
millisecText: 'Milisekundy',
+ microsecText: 'Mikrosekundy',
timezoneText: 'Časové pásmo',
currentText: 'Nyní',
closeText: 'Zavřít',
diff --git a/i18n/jquery-ui-timepicker-da.js b/i18n/jquery-ui-timepicker-da.js
new file mode 100644
index 0000000..7afb189
--- /dev/null
+++ b/i18n/jquery-ui-timepicker-da.js
@@ -0,0 +1,21 @@
+/* Danish translation for the jQuery Timepicker Addon */
+/* Written by Lars H. Jensen (http://www.larshj.dk) */
+(function ($) {
+ $.timepicker.regional['da'] = {
+ timeOnlyTitle: 'Vælg tid',
+ timeText: 'Tid',
+ hourText: 'Time',
+ minuteText: 'Minut',
+ secondText: 'Sekund',
+ millisecText: 'Millisekund',
+ microsecText: 'Mikrosekund',
+ timezoneText: 'Tidszone',
+ currentText: 'Nu',
+ closeText: 'Luk',
+ timeFormat: 'HH:mm',
+ amNames: ['am', 'AM', 'A'],
+ pmNames: ['pm', 'PM', 'P'],
+ isRTL: false
+ };
+ $.timepicker.setDefaults($.timepicker.regional['da']);
+})(jQuery);
diff --git a/localization/jquery-ui-timepicker-de.js b/i18n/jquery-ui-timepicker-de.js
index 1a998a0..286be73 100644
--- a/localization/jquery-ui-timepicker-de.js
+++ b/i18n/jquery-ui-timepicker-de.js
@@ -8,6 +8,7 @@
minuteText: 'Minute',
secondText: 'Sekunde',
millisecText: 'Millisekunde',
+ microsecText: 'Mikrosekunde',
timezoneText: 'Zeitzone',
currentText: 'Jetzt',
closeText: 'Fertig',
diff --git a/localization/jquery-ui-timepicker-el.js b/i18n/jquery-ui-timepicker-el.js
index 9109afd..6b7e827 100644
--- a/localization/jquery-ui-timepicker-el.js
+++ b/i18n/jquery-ui-timepicker-el.js
@@ -8,6 +8,7 @@
minuteText: 'Λεπτά',
secondText: 'Δευτερόλεπτα',
millisecText: 'μιλιδευτερόλεπτο',
+ microsecText: 'Microseconds',
timezoneText: 'Ζώνη ώρας',
currentText: 'Τώρα',
closeText: 'Κλείσιμο',
diff --git a/localization/jquery-ui-timepicker-es.js b/i18n/jquery-ui-timepicker-es.js
index c446c1c..d73a1e8 100644
--- a/localization/jquery-ui-timepicker-es.js
+++ b/i18n/jquery-ui-timepicker-es.js
@@ -8,6 +8,7 @@
minuteText: 'Minutos',
secondText: 'Segundos',
millisecText: 'Milisegundos',
+ microsecText: 'Microsegundos',
timezoneText: 'Huso horario',
currentText: 'Ahora',
closeText: 'Cerrar',
diff --git a/localization/jquery-ui-timepicker-et.js b/i18n/jquery-ui-timepicker-et.js
index a3a4f10..2e64cc8 100644
--- a/localization/jquery-ui-timepicker-et.js
+++ b/i18n/jquery-ui-timepicker-et.js
@@ -8,6 +8,7 @@
minuteText: 'Minut',
secondText: 'Sekund',
millisecText: 'Millisekundis',
+ microsecText: 'Mikrosekundis',
timezoneText: 'Ajavöönd',
currentText: 'Praegu',
closeText: 'Valmis',
diff --git a/localization/jquery-ui-timepicker-eu.js b/i18n/jquery-ui-timepicker-eu.js
index 7b1c510..41ba5a7 100644
--- a/localization/jquery-ui-timepicker-eu.js
+++ b/i18n/jquery-ui-timepicker-eu.js
@@ -8,6 +8,7 @@
minuteText: 'Minutuak',
secondText: 'Segunduak',
millisecText: 'Milisegunduak',
+ microsecText: 'Mikrosegundotan',
timezoneText: 'Ordu-eremua',
currentText: 'Orain',
closeText: 'Itxi',
diff --git a/localization/jquery-ui-timepicker-fi.js b/i18n/jquery-ui-timepicker-fi.js
index 12be648..3f1d95e 100644
--- a/localization/jquery-ui-timepicker-fi.js
+++ b/i18n/jquery-ui-timepicker-fi.js
@@ -8,6 +8,7 @@
minuteText: 'Minuutti',
secondText: 'Sekunti',
millisecText: 'Millisekunnin',
+ microsecText: 'Mikrosekuntia',
timezoneText: 'Aikavyöhyke',
currentText: 'Nyt',
closeText: 'Sulje',
diff --git a/localization/jquery-ui-timepicker-fr.js b/i18n/jquery-ui-timepicker-fr.js
index 805b72d..a8a46fe 100644
--- a/localization/jquery-ui-timepicker-fr.js
+++ b/i18n/jquery-ui-timepicker-fr.js
@@ -8,6 +8,7 @@
minuteText: 'Minutes',
secondText: 'Secondes',
millisecText: 'Millisecondes',
+ microsecText: 'Microsecondes',
timezoneText: 'Fuseau horaire',
currentText: 'Maintenant',
closeText: 'Terminé',
diff --git a/localization/jquery-ui-timepicker-gl.js b/i18n/jquery-ui-timepicker-gl.js
index 4ed889b..900e377 100644
--- a/localization/jquery-ui-timepicker-gl.js
+++ b/i18n/jquery-ui-timepicker-gl.js
@@ -8,6 +8,7 @@
minuteText: 'Minutos',
secondText: 'Segundos',
millisecText: 'Milisegundos',
+ microsecText: 'Microssegundos',
timezoneText: 'Fuso horario',
currentText: 'Agora',
closeText: 'Pechar',
diff --git a/localization/jquery-ui-timepicker-he.js b/i18n/jquery-ui-timepicker-he.js
index a887fbb..eb71018 100644
--- a/localization/jquery-ui-timepicker-he.js
+++ b/i18n/jquery-ui-timepicker-he.js
@@ -8,6 +8,7 @@
minuteText: "דקות",
secondText: "שניות",
millisecText: "אלפית השנייה",
+ microsecText: "מיקרו",
timezoneText: "אזור זמן",
currentText: "עכשיו",
closeText:"סגור",
diff --git a/localization/jquery-ui-timepicker-hr.js b/i18n/jquery-ui-timepicker-hr.js
index b50c4df..c314b8e 100644
--- a/localization/jquery-ui-timepicker-hr.js
+++ b/i18n/jquery-ui-timepicker-hr.js
@@ -8,6 +8,7 @@
minuteText: 'Minute',
secondText: 'Sekunde',
millisecText: 'Milisekunde',
+ microsecText: 'Mikrosekunde',
timezoneText: 'Vremenska zona',
currentText: 'Sada',
closeText: 'Gotovo',
diff --git a/localization/jquery-ui-timepicker-hu.js b/i18n/jquery-ui-timepicker-hu.js
index 1adb8a9..fd1f5e1 100644
--- a/localization/jquery-ui-timepicker-hu.js
+++ b/i18n/jquery-ui-timepicker-hu.js
@@ -8,6 +8,7 @@
minuteText: 'Perc',
secondText: 'Másodperc',
millisecText: 'Milliszekundumos',
+ microsecText: 'Ezredmásodperc',
timezoneText: 'Időzóna',
currentText: 'Most',
closeText: 'Kész',
diff --git a/localization/jquery-ui-timepicker-id.js b/i18n/jquery-ui-timepicker-id.js
index 6c0e858..50a976b 100644
--- a/localization/jquery-ui-timepicker-id.js
+++ b/i18n/jquery-ui-timepicker-id.js
@@ -8,6 +8,7 @@
minuteText: 'Menit',
secondText: 'Detik',
millisecText: 'Milidetik',
+ microsecText: 'Mikrodetik',
timezoneText: 'Zona Waktu',
currentText: 'Sekarang',
closeText: 'OK',
diff --git a/localization/jquery-ui-timepicker-it.js b/i18n/jquery-ui-timepicker-it.js
index 70124fd..ea976fd 100644
--- a/localization/jquery-ui-timepicker-it.js
+++ b/i18n/jquery-ui-timepicker-it.js
@@ -5,9 +5,10 @@
timeOnlyTitle: 'Scegli orario',
timeText: 'Orario',
hourText: 'Ora',
- minuteText: 'Minuto',
- secondText: 'Secondo',
- millisecText: 'Millisecondo',
+ minuteText: 'Minuti',
+ secondText: 'Secondi',
+ millisecText: 'Millisecondi',
+ microsecText: 'Microsecondi',
timezoneText: 'Fuso orario',
currentText: 'Adesso',
closeText: 'Chiudi',
diff --git a/localization/jquery-ui-timepicker-ja.js b/i18n/jquery-ui-timepicker-ja.js
index 42d8114..15c7b79 100644
--- a/localization/jquery-ui-timepicker-ja.js
+++ b/i18n/jquery-ui-timepicker-ja.js
@@ -8,6 +8,7 @@
minuteText: '分',
secondText: '秒',
millisecText: 'ミリ秒',
+ microsecText: 'マイクロ秒',
timezoneText: 'タイムゾーン',
currentText: '現時刻',
closeText: '閉じる',
diff --git a/localization/jquery-ui-timepicker-ko.js b/i18n/jquery-ui-timepicker-ko.js
index 7fe6c47..0a41c5b 100644
--- a/localization/jquery-ui-timepicker-ko.js
+++ b/i18n/jquery-ui-timepicker-ko.js
@@ -8,6 +8,7 @@
minuteText: '분',
secondText: '초',
millisecText: '밀리초',
+ microsecText: '마이크로',
timezoneText: '표준 시간대',
currentText: '현재 시각',
closeText: '닫기',
diff --git a/localization/jquery-ui-timepicker-lt.js b/i18n/jquery-ui-timepicker-lt.js
index 4ec3eeb..eb7b3c7 100644
--- a/localization/jquery-ui-timepicker-lt.js
+++ b/i18n/jquery-ui-timepicker-lt.js
@@ -8,6 +8,7 @@
minuteText: 'Minutės',
secondText: 'Sekundės',
millisecText: 'Milisekundės',
+ microsecText: 'Mikrosekundės',
timezoneText: 'Laiko zona',
currentText: 'Dabar',
closeText: 'Uždaryti',
diff --git a/localization/jquery-ui-timepicker-nl.js b/i18n/jquery-ui-timepicker-nl.js
index eff496c..8189cc4 100644
--- a/localization/jquery-ui-timepicker-nl.js
+++ b/i18n/jquery-ui-timepicker-nl.js
@@ -8,6 +8,7 @@
minuteText: 'Minuut',
secondText: 'Seconde',
millisecText: 'Milliseconde',
+ microsecText: 'Microseconde',
timezoneText: 'Tijdzone',
currentText: 'Vandaag',
closeText: 'Sluiten',
diff --git a/localization/jquery-ui-timepicker-no.js b/i18n/jquery-ui-timepicker-no.js
index 8da6a1d..1eeee6d 100644
--- a/localization/jquery-ui-timepicker-no.js
+++ b/i18n/jquery-ui-timepicker-no.js
@@ -8,6 +8,7 @@
minuteText: 'Minutt',
secondText: 'Sekund',
millisecText: 'Millisekund',
+ microsecText: 'mikrosekund',
timezoneText: 'Tidssone',
currentText: 'Nå',
closeText: 'Lukk',
diff --git a/localization/jquery-ui-timepicker-pl.js b/i18n/jquery-ui-timepicker-pl.js
index 138b7d3..5b7d4a9 100644
--- a/localization/jquery-ui-timepicker-pl.js
+++ b/i18n/jquery-ui-timepicker-pl.js
@@ -8,6 +8,7 @@
minuteText: 'Minuta',
secondText: 'Sekunda',
millisecText: 'Milisekunda',
+ microsecText: 'Mikrosekunda',
timezoneText: 'Strefa czasowa',
currentText: 'Teraz',
closeText: 'Gotowe',
diff --git a/localization/jquery-ui-timepicker-pt-BR.js b/i18n/jquery-ui-timepicker-pt-BR.js
index 7ba40a6..2c1b02f 100644
--- a/localization/jquery-ui-timepicker-pt-BR.js
+++ b/i18n/jquery-ui-timepicker-pt-BR.js
@@ -8,6 +8,7 @@
minuteText: 'Minutos',
secondText: 'Segundos',
millisecText: 'Milissegundos',
+ microsecText: 'Microssegundos',
timezoneText: 'Fuso horário',
currentText: 'Agora',
closeText: 'Fechar',
diff --git a/localization/jquery-ui-timepicker-pt.js b/i18n/jquery-ui-timepicker-pt.js
index 029926a..bc549e0 100644
--- a/localization/jquery-ui-timepicker-pt.js
+++ b/i18n/jquery-ui-timepicker-pt.js
@@ -8,6 +8,7 @@
minuteText: 'Minutos',
secondText: 'Segundos',
millisecText: 'Milissegundos',
+ microsecText: 'Microssegundos',
timezoneText: 'Fuso horário',
currentText: 'Agora',
closeText: 'Fechar',
diff --git a/localization/jquery-ui-timepicker-ro.js b/i18n/jquery-ui-timepicker-ro.js
index 2b80a02..01acce7 100644
--- a/localization/jquery-ui-timepicker-ro.js
+++ b/i18n/jquery-ui-timepicker-ro.js
@@ -8,6 +8,7 @@
minuteText: 'Minute',
secondText: 'Secunde',
millisecText: 'Milisecunde',
+ microsecText: 'Microsecunde',
timezoneText: 'Fus orar',
currentText: 'Acum',
closeText: 'Închide',
diff --git a/localization/jquery-ui-timepicker-ru.js b/i18n/jquery-ui-timepicker-ru.js
index 71ea9d5..d7169fa 100644
--- a/localization/jquery-ui-timepicker-ru.js
+++ b/i18n/jquery-ui-timepicker-ru.js
@@ -8,6 +8,7 @@
minuteText: 'Минуты',
secondText: 'Секунды',
millisecText: 'Миллисекунды',
+ microsecText: 'Микросекунды',
timezoneText: 'Часовой пояс',
currentText: 'Сейчас',
closeText: 'Закрыть',
diff --git a/localization/jquery-ui-timepicker-sk.js b/i18n/jquery-ui-timepicker-sk.js
index 4b4042b..15700e0 100644
--- a/localization/jquery-ui-timepicker-sk.js
+++ b/i18n/jquery-ui-timepicker-sk.js
@@ -8,6 +8,7 @@
minuteText: 'Minúty',
secondText: 'Sekundy',
millisecText: 'Milisekundy',
+ microsecText: 'Mikrosekundy',
timezoneText: 'Časové pásmo',
currentText: 'Teraz',
closeText: 'Zavrieť',
diff --git a/localization/jquery-ui-timepicker-sv.js b/i18n/jquery-ui-timepicker-sv.js
index 167d2f6..5a4dfb2 100644
--- a/localization/jquery-ui-timepicker-sv.js
+++ b/i18n/jquery-ui-timepicker-sv.js
@@ -8,6 +8,7 @@
minuteText: 'Minuter',
secondText: 'Sekunder',
millisecText: 'Millisekunder',
+ microsecText: 'Mikrosekunder',
timezoneText: 'Tidszon',
currentText: 'Nu',
closeText: 'Stäng',
diff --git a/localization/jquery-ui-timepicker-th.js b/i18n/jquery-ui-timepicker-th.js
index 5d2d561..7042e8c 100644
--- a/localization/jquery-ui-timepicker-th.js
+++ b/i18n/jquery-ui-timepicker-th.js
@@ -8,6 +8,7 @@
minuteText: 'นาที',
secondText: 'วินาที',
millisecText: 'มิลลิวินาที',
+ microsecText: 'ไมโคริวินาที',
timezoneText: 'เขตเวลา',
currentText: 'เวลาปัจจุบัน',
closeText: 'ปิด',
diff --git a/localization/jquery-ui-timepicker-tr.js b/i18n/jquery-ui-timepicker-tr.js
index dcbf96d..51f89d6 100644
--- a/localization/jquery-ui-timepicker-tr.js
+++ b/i18n/jquery-ui-timepicker-tr.js
@@ -8,6 +8,7 @@
minuteText: 'Dakika',
secondText: 'Saniye',
millisecText: 'Milisaniye',
+ microsecText: 'Mikrosaniye',
timezoneText: 'Zaman Dilimi',
currentText: 'Şu an',
closeText: 'Tamam',
diff --git a/localization/jquery-ui-timepicker-uk.js b/i18n/jquery-ui-timepicker-uk.js
index badcbbd..a239fe2 100644
--- a/localization/jquery-ui-timepicker-uk.js
+++ b/i18n/jquery-ui-timepicker-uk.js
@@ -8,6 +8,7 @@
minuteText: 'Хвилини',
secondText: 'Секунди',
millisecText: 'Мілісекунди',
+ microsecText: 'Мікросекунди',
timezoneText: 'Часовий пояс',
currentText: 'Зараз',
closeText: 'Закрити',
diff --git a/localization/jquery-ui-timepicker-vi.js b/i18n/jquery-ui-timepicker-vi.js
index 93e6bfc..48b05f1 100644
--- a/localization/jquery-ui-timepicker-vi.js
+++ b/i18n/jquery-ui-timepicker-vi.js
@@ -8,6 +8,7 @@
minuteText: 'Phút',
secondText: 'Giây',
millisecText: 'Phần nghìn giây',
+ microsecText: 'Miligiây',
timezoneText: 'Múi giờ',
currentText: 'Hiện thời',
closeText: 'Đóng',
diff --git a/localization/jquery-ui-timepicker-zh-CN.js b/i18n/jquery-ui-timepicker-zh-CN.js
index 16ca718..7488c04 100644
--- a/localization/jquery-ui-timepicker-zh-CN.js
+++ b/i18n/jquery-ui-timepicker-zh-CN.js
@@ -8,6 +8,7 @@
minuteText: '分钟',
secondText: '秒钟',
millisecText: '微秒',
+ microsecText: '微秒',
timezoneText: '时区',
currentText: '现在时间',
closeText: '关闭',
diff --git a/localization/jquery-ui-timepicker-zh-TW.js b/i18n/jquery-ui-timepicker-zh-TW.js
index ff1ccad..9cbeabf 100644
--- a/localization/jquery-ui-timepicker-zh-TW.js
+++ b/i18n/jquery-ui-timepicker-zh-TW.js
@@ -8,6 +8,7 @@
minuteText: '分',
secondText: '秒',
millisecText: '毫秒',
+ microsecText: '微秒',
timezoneText: '時區',
currentText: '現在時間',
closeText: '確定',
diff --git a/index.html b/index.html
index bc06406..cd5ce08 100644
--- a/index.html
+++ b/index.html
@@ -35,11 +35,11 @@
.example-container input{ border: solid 1px #aaa; padding: 4px; width: 175px; }
</style>
- <link rel="stylesheet" media="all" type="text/css" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />
+ <link rel="stylesheet" media="all" type="text/css" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<link rel="stylesheet" media="all" type="text/css" href="jquery-ui-timepicker-addon.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
- <script type="text/javascript" src="http://code.jquery.com/ui/1.10.2/jquery-ui.min.js"></script>
+ <script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
<script type="text/javascript" src="jquery-ui-timepicker-addon.js"></script>
<script type="text/javascript" src="jquery-ui-sliderAccess.js"></script>
<script type="text/javascript">
@@ -99,6 +99,7 @@
<h4>Subscribe to Blog and Twitter</h4>
<p><a href="http://trentrichardson.com" title="Subscribe to TrentRichardson.com via email">Subscribe to my blog via email</a> and follow <a href="http://twitter.com/practicalweb" title="Follow Me on Twitter">@PracticalWeb</a> on Twitter. I post for nearly every new version, so you know about updates.</p>
<div class="clear"></div>
+ <br />
<h3>Download</h3>
<p><a href="jquery-ui-timepicker-addon.js" title="Download Timepicker Addon">Download Timepicker Addon</a></p>
@@ -116,7 +117,8 @@
.ui-timepicker-rtl dl { text-align: right; }
.ui-timepicker-rtl dl dd { margin: 0 65px 10px 10px; }
</pre>
-
+ <br />
+
<h3>Requirements</h3>
<p>You also need to include jQuery and jQuery UI with datepicker and slider wigits. You should include them in your page in the following order:</p>
<ol>
@@ -125,11 +127,11 @@
<li>Timepicker</li>
</ol>
-
+ <br />
<h3>Version</h3>
- <p>Version 1.2.2</p>
+ <p>Version 1.3</p>
- <p>Last updated on 04/06/2013</p>
+ <p>Last updated on 05/05/2013</p>
<p>jQuery Timepicker Addon is currently available for use in all personal or commercial projects under both MIT and GPL licenses. This means that you can choose the license that best suits your project, and use it accordingly. </p>
<p><a href="http://trentrichardson.com/Impromptu/GPL-LICENSE.txt" title="GPL License">GPL License</a></p>
<p><a href="http://trentrichardson.com/Impromptu/MIT-LICENSE.txt" title="MIT License">MIT License</a></p>
@@ -182,6 +184,9 @@
<dt>millisecText</dt>
<dd><em>Default: "Millisecond", A Localization Setting</em> - Label used to identify the millisecond slider.</dd>
+ <dt>microsecText</dt>
+ <dd><em>Default: "Microsecond", A Localization Setting</em> - Label used to identify the microsecond slider.</dd>
+
<dt>timezoneText</dt>
<dd><em>Default: "Timezone", A Localization Setting</em> - Label used to identify the timezone slider.</dd>
@@ -208,17 +213,8 @@
<h3>Timezone Options</h3>
<dl class="defs">
- <dt>useLocalTimezone</dt>
- <dd><em>Default: false</em> - Whether to default timezone to the browser's set timezone.</dd>
-
- <dt>defaultTimezone</dt>
- <dd><em>Default: "+0000"</em> - If not set, the default timezone used.</dd>
-
- <dt>timezoneIso8601</dt>
- <dd><em>Default: false</em> - Whether to follow the ISO 8601 standard.</dd>
-
<dt>timezoneList</dt>
- <dd><em>Default: [generated timezones]</em> - An array of timezones used to populate the timezone select. Can be an array of values or an array of objects: { label: "EST", value: "+0400" }</dd>
+ <dd><em>Default: [generated timezones]</em> - An array of timezones used to populate the timezone select. Can be an array of values or an array of objects: { label: "EDT", value: -240 }. The value should be the offset number in minutes. So "-0400" which is the format "-hhmm", would equate to -240 minutes.</dd>
</dl>
<h3>Time Field Options</h3>
@@ -240,19 +236,22 @@
</dd>
<dt>showHour</dt>
- <dd><em>Default: true</em> - Whether to show the hour slider.</dd>
+ <dd><em>Default: null</em> - Whether to show the hour control. The default of null will use detection from timeFormat.</dd>
<dt>showMinute</dt>
- <dd><em>Default: true</em> - Whether to show the minute slider.</dd>
+ <dd><em>Default: null</em> - Whether to show the minute control. The default of null will use detection from timeFormat.</dd>
<dt>showSecond</dt>
- <dd><em>Default: false</em> - Whether to show the second slider.</dd>
+ <dd><em>Default: null</em> - Whether to show the second control. The default of null will use detection from timeFormat.</dd>
<dt>showMillisec</dt>
- <dd><em>Default: false</em> - Whether to show the millisecond slider.</dd>
+ <dd><em>Default: null</em> - Whether to show the millisecond control. The default of null will use detection from timeFormat.</dd>
+
+ <dt>showMicrosec</dt>
+ <dd><em>Default: null</em> - Whether to show the microsecond control. The default of null will use detection from timeFormat.</dd>
<dt>showTimezone</dt>
- <dd><em>Default: false</em> - Whether to show the timezone select.</dd>
+ <dd><em>Default: null</em> - Whether to show the timezone select.</dd>
<dt>showTime</dt>
<dd><em>Default: true</em> - Whether to show the time selected within the datetimepicker.</dd>
@@ -266,9 +265,12 @@
<dt>stepSecond</dt>
<dd><em>Default: 1</em> - Seconds per step the slider makes.</dd>
- <dt>stepMilliSec</dt>
+ <dt>stepMillisec</dt>
<dd><em>Default: 1</em> - Milliseconds per step the slider makes.</dd>
+ <dt>stepMicrosec</dt>
+ <dd><em>Default: 1</em> - Microseconds per step the slider makes.</dd>
+
<dt>hour</dt>
<dd><em>Default: 0</em> - Initial hour set.</dd>
@@ -281,8 +283,11 @@
<dt>millisec</dt>
<dd><em>Default: 0</em> - Initial millisecond set.</dd>
+ <dt>microsec</dt>
+ <dd><em>Default: 0</em> - Initial microsecond set. Note: Javascript's native Date object does not natively support microseconds. Timepicker adds ability to simply Date.setMicroseconds(m) and Date.getMicroseconds(). Date comparisons will not acknowledge microseconds. Use this only for display purposes.</dd>
+
<dt>timezone</dt>
- <dd><em>Default: 0</em> - Initial timezone set.</dd>
+ <dd><em>Default: null</em> - Initial timezone set. This is the offset in minutes. If null the browser's local timezone will be used. If you're timezone is "-0400" you would use -240. For backwards compatibility you may pass "-0400", however the timezone is stored in minutes and more reliable.</dd>
<dt>hourMin</dt>
<dd><em>Default: 0</em> - The minimum hour allowed for all dates.</dd>
@@ -296,6 +301,9 @@
<dt>millisecMin</dt>
<dd><em>Default: 0</em> - The minimum millisecond allowed for all dates.</dd>
+ <dt>microsecMin</dt>
+ <dd><em>Default: 0</em> - The minimum microsecond allowed for all dates.</dd>
+
<dt>hourMax</dt>
<dd><em>Default: 23</em> - The maximum hour allowed for all dates.</dd>
@@ -308,6 +316,9 @@
<dt>millisecMax</dt>
<dd><em>Default: 999</em> - The maximum millisecond allowed for all dates.</dd>
+ <dt>microsecMax</dt>
+ <dd><em>Default: 999</em> - The maximum microsecond allowed for all dates.</dd>
+
<dt>hourGrid</dt>
<dd><em>Default: 0</em> - When greater than 0 a label grid will be generated under the slider. This number represents the units (in hours) between labels.</dd>
@@ -319,6 +330,9 @@
<dt>millisecGrid</dt>
<dd><em>Default: 0</em> - When greater than 0 a label grid will be genereated under the slider. This number represents the units (in milliseconds) between labels.</dd>
+
+ <dt>microsecGrid</dt>
+ <dd><em>Default: 0</em> - When greater than 0 a label grid will be genereated under the slider. This number represents the units (in microseconds) between labels.</dd>
</dl>
<h3>Other Options</h3>
@@ -369,6 +383,7 @@
minute: 10,
second: 23,
millisec: 45,
+ microsec: 23,
timezone: '-0400'
}</pre>
</dd>
@@ -396,11 +411,13 @@
<dt>s</dt><dd>Second with no leading 0</dd>
<dt>ss</dt><dd>Second with leading 0</dd>
<dt>l</dt><dd>Milliseconds always with leading 0</dd>
+ <dt>c</dt><dd>Microseconds always with leading 0</dd>
<dt>t</dt><dd>a or p for AM/PM</dd>
<dt>T</dt><dd>A or P for AM/PM</dd>
<dt>tt</dt><dd>am or pm for AM/PM</dd>
<dt>TT</dt><dd>AM or PM for AM/PM</dd>
<dt>z</dt><dd>Timezone as defined by timezoneList</dd>
+ <dt>Z</dt><dd>Timezone in Iso 8601 format (+04:45)</dd>
<dt>'...'</dt><dd>Literal text (Uses single quotes)</dd>
</dl>
@@ -423,7 +440,7 @@
<h2>Working with Localizations</h2>
- <p>Timepicker comes with many translations and localizations, thanks to all the contributors. They can be found in the localization folder in the git repo.</p>
+ <p>Timepicker comes with many translations and localizations, thanks to all the contributors. They can be found in the i18n folder in the git repo.</p>
<p>The quick and cheap way to use localizations is to pass in options to a timepicker instance:</p>
@@ -545,8 +562,7 @@ $('#basic_example_3').datetimepicker({
</div>
<pre>
$('#timezone_example_1').datetimepicker({
- timeFormat: 'hh:mm tt z',
- showTimezone: true
+ timeFormat: 'hh:mm tt z'
});
</pre>
</div>
@@ -560,12 +576,11 @@ $('#timezone_example_1').datetimepicker({
<pre>
$('#timezone_example_2').datetimepicker({
timeFormat: 'HH:mm z',
- showTimezone: true,
timezoneList: [
- { value: '-0500', label: 'Eastern'},
- { value: '-0600', label: 'Central' },
- { value: '-0700', label: 'Mountain' },
- { value: '-0800', label: 'Pacific' }
+ { value: -300, label: 'Eastern'},
+ { value: -360, label: 'Central' },
+ { value: -420, label: 'Mountain' },
+ { value: -480, label: 'Pacific' }
]
});
</pre>
@@ -573,14 +588,13 @@ $('#timezone_example_2').datetimepicker({
<!-- ============= example -->
<div class="example-container">
- <p>Use timezone string abbreviations for values:</p>
+ <p>You may also use timezone string abbreviations for values. This should be used with caution. Computing accurate javascript Date objects may not be possible when trying to retrieve or set the date from timepicker (see setDate and getDate examples below). For simple input values however this should work.</p>
<div>
<input type="text" name="timezone_example_3" id="timezone_example_3" value="" />
</div>
<pre>
$('#timezone_example_3').datetimepicker({
timeFormat: 'HH:mm z',
- showTimezone: true,
timezone: 'MT',
timezoneList: [
{ value: 'ET', label: 'Eastern'},
@@ -618,7 +632,6 @@ $('#slider_example_1').timepicker({
</div>
<pre>
$('#slider_example_2').datetimepicker({
- showSecond: true,
timeFormat: 'HH:mm:ss',
stepHour: 2,
stepMinute: 10,
@@ -805,11 +818,12 @@ $('#rest_example_3').datetimepicker({
maxDate: new Date(2010, 11, 31, 17, 30)
});
</pre>
- </div>
+ </div>
<!-- ============= example -->
<div class="example-container">
- <p>Restrict a start and end date (also shows using onSelect and onClose events):</p>
+ <p>Restrict a start and end date by using onSelect and onClose events for more control over functionality:</p>
+ <p>For more examples and advanced usage grab the <a href="http://trentrichardson.com/ebooks/handling-time/" title="Handling Time eBook">Handling Time eBook</a>.</p>
<div>
<input type="text" name="rest_example_4_start" id="rest_example_4_start" value="" />
<input type="text" name="rest_example_4_end" id="rest_example_4_end" value="" />
@@ -853,12 +867,11 @@ endDateTextBox.datetimepicker({
</pre>
</div>
-
<h3 id="utility_examples">Utilities</h3>
<!-- ============= example -->
<div class="example-container">
- <p>Get and Set Datetime:</p>
+ <p>Get and Set Datetime with the getDate and setDate methods. This example uses timezone to demonstrate the timepicker regonizes the timezones and computes the offsets when getting and setting.</p>
<div>
<input type="text" name="utility_example_1" id="utility_example_1" value="" />
<button id="utility_example_1_setdt" value="1">Set Datetime</button>
@@ -869,8 +882,9 @@ endDateTextBox.datetimepicker({
var ex13 = $('#utility_example_1');
ex13.datetimepicker({
- dateFormat: "D MM d, yy",
- separator: ' @ '
+ timeFormat: 'hh:mm tt z',
+ separator: ' @ ',
+ showTimezone: true
});
$('#utility_example_1_setdt').click(function(){
diff --git a/jquery-ui-timepicker-addon.js b/jquery-ui-timepicker-addon.js
index cb5949e..5a5850f 100644
--- a/jquery-ui-timepicker-addon.js
+++ b/jquery-ui-timepicker-addon.js
@@ -1,8 +1,8 @@
/*
* jQuery timepicker addon
* By: Trent Richardson [http://trentrichardson.com]
- * Version 1.2.2
- * Last Modified: 04/13/2013
+ * Version 1.3
+ * Last Modified: 05/05/2013
*
* Copyright 2013 Trent Richardson
* You may use this project under MIT or GPL licenses.
@@ -27,7 +27,7 @@
*/
$.extend($.ui, {
timepicker: {
- version: "1.2.2"
+ version: "1.3"
}
});
@@ -52,37 +52,41 @@
minuteText: 'Minute',
secondText: 'Second',
millisecText: 'Millisecond',
+ microsecText: 'Microsecond',
timezoneText: 'Time Zone',
isRTL: false
};
this._defaults = { // Global defaults for all the datetime picker instances
showButtonPanel: true,
timeOnly: false,
- showHour: true,
- showMinute: true,
- showSecond: false,
- showMillisec: false,
- showTimezone: false,
+ showHour: null,
+ showMinute: null,
+ showSecond: null,
+ showMillisec: null,
+ showMicrosec: null,
+ showTimezone: null,
showTime: true,
stepHour: 1,
stepMinute: 1,
stepSecond: 1,
stepMillisec: 1,
+ stepMicrosec: 1,
hour: 0,
minute: 0,
second: 0,
millisec: 0,
+ microsec: 0,
timezone: null,
- useLocalTimezone: false,
- defaultTimezone: "+0000",
hourMin: 0,
minuteMin: 0,
secondMin: 0,
millisecMin: 0,
+ microsecMin: 0,
hourMax: 23,
minuteMax: 59,
secondMax: 59,
millisecMax: 999,
+ microsecMax: 999,
minDateTime: null,
maxDateTime: null,
onSelect: null,
@@ -90,6 +94,7 @@
minuteGrid: 0,
secondGrid: 0,
millisecGrid: 0,
+ microsecGrid: 0,
alwaysSetTime: true,
separator: ' ',
altFieldTimeOnly: true,
@@ -99,7 +104,6 @@
pickerTimeFormat: null,
pickerTimeSuffix: null,
showTimepicker: true,
- timezoneIso8601: false,
timezoneList: null,
addSliderAccess: false,
sliderAccessArgs: null,
@@ -119,27 +123,31 @@
minute_slider: null,
second_slider: null,
millisec_slider: null,
+ microsec_slider: null,
timezone_select: null,
hour: 0,
minute: 0,
second: 0,
millisec: 0,
+ microsec: 0,
timezone: null,
- defaultTimezone: "+0000",
hourMinOriginal: null,
minuteMinOriginal: null,
secondMinOriginal: null,
millisecMinOriginal: null,
+ microsecMinOriginal: null,
hourMaxOriginal: null,
minuteMaxOriginal: null,
secondMaxOriginal: null,
millisecMaxOriginal: null,
+ microsecMaxOriginal: null,
ampm: '',
formattedDate: '',
formattedTime: '',
formattedDateTime: '',
timezoneList: null,
- units: ['hour','minute','second','millisec'],
+ units: ['hour','minute','second','millisec', 'microsec'],
+ support: {},
control: null,
/*
@@ -158,8 +166,8 @@
_newInst: function($input, o) {
var tp_inst = new Timepicker(),
inlineSettings = {},
- fns = {},
- overrides, i;
+ fns = {},
+ overrides, i;
for (var attrName in this._defaults) {
if(this._defaults.hasOwnProperty(attrName)){
@@ -173,6 +181,7 @@
}
}
}
+
overrides = {
beforeShow: function (input, dp_inst) {
if ($.isFunction(tp_inst._defaults.evnts.beforeShow)) {
@@ -200,6 +209,7 @@
fns[i] = o[i] || null;
}
}
+
tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, overrides, {
evnts:fns,
timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');
@@ -211,9 +221,15 @@
return val.toUpperCase();
});
+ // detect which units are supported
+ tp_inst.support = detectSupport(
+ tp_inst._defaults.timeFormat +
+ (tp_inst._defaults.pickerTimeFormat? tp_inst._defaults.pickerTimeFormat:'') +
+ (tp_inst._defaults.altTimeFormat? tp_inst._defaults.altTimeFormat:''));
+
// controlType is string - key to our this._controls
if(typeof(tp_inst._defaults.controlType) === 'string'){
- if($.fn[tp_inst._defaults.controlType] === undefined){
+ if(tp_inst._defaults.controlType == 'slider' && typeof(jQuery.ui.slider) === 'undefined'){
tp_inst._defaults.controlType = 'select';
}
tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType];
@@ -223,20 +239,24 @@
tp_inst.control = tp_inst._defaults.controlType;
}
- if (tp_inst._defaults.timezoneList === null) {
- var timezoneList = ['-1200', '-1100', '-1000', '-0930', '-0900', '-0800', '-0700', '-0600', '-0500', '-0430', '-0400', '-0330', '-0300', '-0200', '-0100', '+0000',
- '+0100', '+0200', '+0300', '+0330', '+0400', '+0430', '+0500', '+0530', '+0545', '+0600', '+0630', '+0700', '+0800', '+0845', '+0900', '+0930',
- '+1000', '+1030', '+1100', '+1130', '+1200', '+1245', '+1300', '+1400'];
-
- if (tp_inst._defaults.timezoneIso8601) {
- timezoneList = $.map(timezoneList, function(val) {
- return val == '+0000' ? 'Z' : (val.substring(0, 3) + ':' + val.substring(3));
- });
+ // prep the timezone options
+ var timezoneList = [-720,-660,-600,-570,-540,-480,-420,-360,-300,-270,-240,-210,-180,-120,-60,
+ 0,60,120,180,210,240,270,300,330,345,360,390,420,480,525,540,570,600,630,660,690,720,765,780,840];
+ if (tp_inst._defaults.timezoneList !== null) {
+ timezoneList = tp_inst._defaults.timezoneList;
+ }
+ var tzl=timezoneList.length,tzi=0,tzv=null;
+ if (tzl > 0 && typeof timezoneList[0] !== 'object') {
+ for(; tzi<tzl; tzi++){
+ tzv = timezoneList[tzi];
+ timezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) };
}
- tp_inst._defaults.timezoneList = timezoneList;
}
+ tp_inst._defaults.timezoneList = timezoneList;
- tp_inst.timezone = tp_inst._defaults.timezone;
+ // set the default units
+ tp_inst.timezone = tp_inst._defaults.timezone !== null? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) :
+ ((new Date()).getTimezoneOffset()*-1);
tp_inst.hour = tp_inst._defaults.hour < tp_inst._defaults.hourMin? tp_inst._defaults.hourMin :
tp_inst._defaults.hour > tp_inst._defaults.hourMax? tp_inst._defaults.hourMax : tp_inst._defaults.hour;
tp_inst.minute = tp_inst._defaults.minute < tp_inst._defaults.minuteMin? tp_inst._defaults.minuteMin :
@@ -245,6 +265,8 @@
tp_inst._defaults.second > tp_inst._defaults.secondMax? tp_inst._defaults.secondMax : tp_inst._defaults.second;
tp_inst.millisec = tp_inst._defaults.millisec < tp_inst._defaults.millisecMin? tp_inst._defaults.millisecMin :
tp_inst._defaults.millisec > tp_inst._defaults.millisecMax? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec;
+ tp_inst.microsec = tp_inst._defaults.microsec < tp_inst._defaults.microsecMin? tp_inst._defaults.microsecMin :
+ tp_inst._defaults.microsec > tp_inst._defaults.microsecMax? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec;
tp_inst.ampm = '';
tp_inst.$input = $input;
@@ -337,6 +359,7 @@
tp_inst = this,
litem = '',
uitem = '',
+ show = null,
max = {},
gridSize = {},
size = null,
@@ -353,22 +376,24 @@
for(i=0,l=this.units.length; i<l; i++){
litem = this.units[i];
uitem = litem.substr(0,1).toUpperCase() + litem.substr(1);
+ show = o['show'+uitem] !== null? o['show'+uitem] : this.support[litem];
+
// Added by Peter Medeiros:
// - Figure out what the hour/minute/second max should be based on the step values.
// - Example: if stepMinute is 15, then minMax is 45.
max[litem] = parseInt((o[litem+'Max'] - ((o[litem+'Max'] - o[litem+'Min']) % o['step'+uitem])), 10);
gridSize[litem] = 0;
- html += '<dt class="ui_tpicker_'+ litem +'_label"' + ((o['show'+uitem]) ? '' : noDisplay) + '>' + o[litem +'Text'] + '</dt>' +
- '<dd class="ui_tpicker_'+ litem +'"><div class="ui_tpicker_'+ litem +'_slider"' + ((o['show'+uitem]) ? '' : noDisplay) + '></div>';
+ html += '<dt class="ui_tpicker_'+ litem +'_label"' + (show ? '' : noDisplay) + '>' + o[litem +'Text'] + '</dt>' +
+ '<dd class="ui_tpicker_'+ litem +'"><div class="ui_tpicker_'+ litem +'_slider"' + (show ? '' : noDisplay) + '></div>';
- if (o['show'+uitem] && o[litem+'Grid'] > 0) {
+ if (show && o[litem+'Grid'] > 0) {
html += '<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';
if(litem == 'hour'){
for (var h = o[litem+'Min']; h <= max[litem]; h += parseInt(o[litem+'Grid'], 10)) {
gridSize[litem]++;
- var tmph = $.datepicker.formatTime(useAmpm(o.pickerTimeFormat || o.timeFormat)? 'hht':'HH', {hour:h}, o);
+ var tmph = $.datepicker.formatTime(this.support.ampm? 'hht':'HH', {hour:h}, o);
html += '<td data-for="'+litem+'">' + tmph + '</td>';
}
}
@@ -385,8 +410,9 @@
}
// Timezone
- html += '<dt class="ui_tpicker_timezone_label"' + ((o.showTimezone) ? '' : noDisplay) + '>' + o.timezoneText + '</dt>';
- html += '<dd class="ui_tpicker_timezone" ' + ((o.showTimezone) ? '' : noDisplay) + '></dd>';
+ var showTz = o.showTimezone !== null? o.showTimezone : this.support.timezone;
+ html += '<dt class="ui_tpicker_timezone_label"' + (showTz ? '' : noDisplay) + '>' + o.timezoneText + '</dt>';
+ html += '<dd class="ui_tpicker_timezone" ' + (showTz ? '' : noDisplay) + '></dd>';
// Create the elements from string
html += '</dl></div>';
@@ -402,12 +428,13 @@
for(i=0,l=tp_inst.units.length; i<l; i++){
litem = tp_inst.units[i];
uitem = litem.substr(0,1).toUpperCase() + litem.substr(1);
+ show = o['show'+uitem] !== null? o['show'+uitem] : this.support[litem];
// add the slider
tp_inst[litem+'_slider'] = tp_inst.control.create(tp_inst, $tp.find('.ui_tpicker_'+litem+'_slider'), litem, tp_inst[litem], o[litem+'Min'], max[litem], o['step'+uitem]);
// adjust the grid and add click event
- if (o['show'+uitem] && o[litem+'Grid'] > 0) {
+ if (show && o[litem+'Grid'] > 0) {
size = 100 * gridSize[litem] * o[litem+'Grid'] / (max[litem] - o[litem+'Min']);
$tp.find('.ui_tpicker_'+litem+' table').css({
width: size + "%",
@@ -452,22 +479,20 @@
return $("<option />").val(typeof val == "object" ? val.value : val).text(typeof val == "object" ? val.label : val);
}));
if (typeof(this.timezone) != "undefined" && this.timezone !== null && this.timezone !== "") {
- var local_date = new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12);
- var local_timezone = $.timepicker.timeZoneOffsetString(local_date);
+ var local_timezone = (new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12)).getTimezoneOffset()*-1;
if (local_timezone == this.timezone) {
- selectLocalTimeZone(tp_inst);
+ selectLocalTimezone(tp_inst);
} else {
this.timezone_select.val(this.timezone);
}
} else {
if (typeof(this.hour) != "undefined" && this.hour !== null && this.hour !== "") {
- this.timezone_select.val(o.defaultTimezone);
+ this.timezone_select.val(o.timezone);
} else {
- selectLocalTimeZone(tp_inst);
+ selectLocalTimezone(tp_inst);
}
}
this.timezone_select.change(function() {
- tp_inst._defaults.useLocalTimezone = false;
tp_inst._onTimeChange();
tp_inst._onSelectHandler();
});
@@ -537,11 +562,12 @@
var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),
minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);
- if (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null) {
+ if (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null || this.microsecMinOriginal === null) {
this.hourMinOriginal = o.hourMin;
this.minuteMinOriginal = o.minuteMin;
this.secondMinOriginal = o.secondMin;
this.millisecMinOriginal = o.millisecMin;
+ this.microsecMinOriginal = o.microsecMin;
}
if (dp_inst.settings.timeOnly || minDateTimeDate.getTime() == dp_date.getTime()) {
@@ -555,26 +581,36 @@
if (this.second <= this._defaults.secondMin) {
this.second = this._defaults.secondMin;
this._defaults.millisecMin = minDateTime.getMilliseconds();
- } else {
- if (this.millisec < this._defaults.millisecMin) {
+ if(this.millisec <= this._defaults.millisecMin) {
this.millisec = this._defaults.millisecMin;
+ this._defaults.microsecMin = minDateTime.getMicroseconds();
+ } else {
+ if (this.microsec < this._defaults.microsecMin) {
+ this.microsec = this._defaults.microsecMin;
+ }
+ this._defaults.microsecMin = this.microsecMinOriginal;
}
+ } else {
this._defaults.millisecMin = this.millisecMinOriginal;
+ this._defaults.microsecMin = this.microsecMinOriginal;
}
} else {
this._defaults.secondMin = this.secondMinOriginal;
this._defaults.millisecMin = this.millisecMinOriginal;
+ this._defaults.microsecMin = this.microsecMinOriginal;
}
} else {
this._defaults.minuteMin = this.minuteMinOriginal;
this._defaults.secondMin = this.secondMinOriginal;
this._defaults.millisecMin = this.millisecMinOriginal;
+ this._defaults.microsecMin = this.microsecMinOriginal;
}
} else {
this._defaults.hourMin = this.hourMinOriginal;
this._defaults.minuteMin = this.minuteMinOriginal;
this._defaults.secondMin = this.secondMinOriginal;
this._defaults.millisecMin = this.millisecMinOriginal;
+ this._defaults.microsecMin = this.microsecMinOriginal;
}
}
@@ -582,11 +618,12 @@
var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),
maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);
- if (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null) {
+ if (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null || this.millisecMaxOriginal === null) {
this.hourMaxOriginal = o.hourMax;
this.minuteMaxOriginal = o.minuteMax;
this.secondMaxOriginal = o.secondMax;
this.millisecMaxOriginal = o.millisecMax;
+ this.microsecMaxOriginal = o.microsecMax;
}
if (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() == dp_date.getTime()) {
@@ -600,26 +637,36 @@
if (this.second >= this._defaults.secondMax) {
this.second = this._defaults.secondMax;
this._defaults.millisecMax = maxDateTime.getMilliseconds();
- } else {
- if (this.millisec > this._defaults.millisecMax) {
+ if (this.millisec >= this._defaults.millisecMax) {
this.millisec = this._defaults.millisecMax;
+ this._defaults.microsecMax = maxDateTime.getMicroseconds();
+ } else {
+ if (this.microsec > this._defaults.microsecMax) {
+ this.microsec = this._defaults.microsecMax;
+ }
+ this._defaults.microsecMax = this.microsecMaxOriginal;
}
+ } else {
this._defaults.millisecMax = this.millisecMaxOriginal;
+ this._defaults.microsecMax = this.microsecMaxOriginal;
}
} else {
this._defaults.secondMax = this.secondMaxOriginal;
this._defaults.millisecMax = this.millisecMaxOriginal;
+ this._defaults.microsecMax = this.microsecMaxOriginal;
}
} else {
this._defaults.minuteMax = this.minuteMaxOriginal;
this._defaults.secondMax = this.secondMaxOriginal;
this._defaults.millisecMax = this.millisecMaxOriginal;
+ this._defaults.microsecMax = this.microsecMaxOriginal;
}
} else {
this._defaults.hourMax = this.hourMaxOriginal;
this._defaults.minuteMax = this.minuteMaxOriginal;
this._defaults.secondMax = this.secondMaxOriginal;
this._defaults.millisecMax = this.millisecMaxOriginal;
+ this._defaults.microsecMax = this.microsecMaxOriginal;
}
}
@@ -628,6 +675,7 @@
minMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10),
secMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10),
millisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10);
+ microsecMax = parseInt((this._defaults.microsecMax - ((this._defaults.microsecMax - this._defaults.microsecMin) % this._defaults.stepMicrosec)), 10);
if (this.hour_slider) {
this.control.options(this, this.hour_slider, 'hour', { min: this._defaults.hourMin, max: hourMax });
@@ -645,6 +693,10 @@
this.control.options(this, this.millisec_slider, 'millisec', { min: this._defaults.millisecMin, max: millisecMax });
this.control.value(this, this.millisec_slider, 'millisec', this.millisec - (this.millisec % this._defaults.stepMillisec));
}
+ if (this.microsec_slider) {
+ this.control.options(this, this.microsec_slider, 'microsec', { min: this._defaults.microsecMin, max: microsecMax });
+ this.control.value(this, this.microsec_slider, 'microsec', this.microsec - (this.microsec % this._defaults.stepMicrosec));
+ }
}
},
@@ -658,6 +710,7 @@
minute = (this.minute_slider) ? this.control.value(this, this.minute_slider, 'minute') : false,
second = (this.second_slider) ? this.control.value(this, this.second_slider, 'second') : false,
millisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, 'millisec') : false,
+ microsec = (this.microsec_slider) ? this.control.value(this, this.microsec_slider, 'microsec') : false,
timezone = (this.timezone_select) ? this.timezone_select.val() : false,
o = this._defaults,
pickerTimeFormat = o.pickerTimeFormat || o.timeFormat,
@@ -675,6 +728,9 @@
if (typeof(millisec) == 'object') {
millisec = false;
}
+ if (typeof(microsec) == 'object') {
+ microsec = false;
+ }
if (typeof(timezone) == 'object') {
timezone = false;
}
@@ -691,14 +747,17 @@
if (millisec !== false) {
millisec = parseInt(millisec, 10);
}
+ if (microsec !== false) {
+ microsec = parseInt(microsec, 10);
+ }
var ampm = o[hour < 12 ? 'amNames' : 'pmNames'][0];
// If the update was done in the input field, the input field should not be updated.
// If the update was done using the sliders, update the input field.
- var hasChanged = (hour != this.hour || minute != this.minute || second != this.second || millisec != this.millisec
+ var hasChanged = (hour != this.hour || minute != this.minute || second != this.second || millisec != this.millisec || microsec != this.microsec
|| (this.ampm.length > 0 && (hour < 12) != ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1))
- || ((this.timezone === null && timezone != this.defaultTimezone) || (this.timezone !== null && timezone != this.timezone)));
+ || (this.timezone !== null && timezone != this.timezone));
if (hasChanged) {
@@ -714,6 +773,9 @@
if (millisec !== false) {
this.millisec = millisec;
}
+ if (microsec !== false) {
+ this.microsec = microsec;
+ }
if (timezone !== false) {
this.timezone = timezone;
}
@@ -724,7 +786,7 @@
this._limitMinMaxDateTime(this.inst, true);
}
- if (useAmpm(o.timeFormat)) {
+ if (this.support.ampm) {
this.ampm = ampm;
}
@@ -795,7 +857,7 @@
if (!this._defaults.showTimepicker) {
this.$input.val(this.formattedDate);
- } else if (this.$altInput && this._defaults.altFieldTimeOnly === true) {
+ } else if (this.$altInput && this._defaults.timeOnly === false && this._defaults.altFieldTimeOnly === true) {
this.$altInput.val(this.formattedTime);
this.$input.val(this.formattedDate);
} else if (this.$altInput) {
@@ -803,16 +865,18 @@
var altFormattedDateTime = '',
altSeparator = this._defaults.altSeparator ? this._defaults.altSeparator : this._defaults.separator,
altTimeSuffix = this._defaults.altTimeSuffix ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;
+
+ if(!this._defaults.timeOnly){
+ if (this._defaults.altFormat){
+ altFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);
+ }
+ else{
+ altFormattedDateTime = this.formattedDate;
+ }
- if (this._defaults.altFormat){
- altFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);
- }
- else{
- altFormattedDateTime = this.formattedDate;
- }
-
- if (altFormattedDateTime){
- altFormattedDateTime += altSeparator;
+ if (altFormattedDateTime){
+ altFormattedDateTime += altSeparator;
+ }
}
if(this._defaults.altTimeFormat){
@@ -921,7 +985,7 @@
if(unit == 'hour'){
sel += $.datepicker.formatTime($.trim(format.replace(/[^ht ]/ig,'')), {hour:i}, tp_inst._defaults);
}
- else if(unit == 'millisec' || i >= 10){ sel += i; }
+ else if(unit == 'millisec' || unit == 'microsec' || i >= 10){ sel += i; }
else {sel += '0'+ i.toString(); }
sel += '</option>';
}
@@ -1012,6 +1076,7 @@
if (parseRes.timeObj) {
var t = parseRes.timeObj;
parseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);
+ parseRex.date.setMicroseconds(t.microsec);
}
return parseRes.date;
@@ -1021,7 +1086,8 @@
* Public utility to parse time
*/
$.datepicker.parseTime = function(timeFormat, timeString, options) {
- var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {});
+ var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}),
+ iso8601 = (timeFormat.replace(/\'.*?\'/g,'').indexOf('Z') !== -1);
// Strict parse requires the timeString to match the timeFormat exactly
var strictParse = function(f, s, o){
@@ -1043,12 +1109,13 @@
// figure out position of time elements.. cause js cant do named captures
var getFormatPositions = function(timeFormat) {
- var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z|'.*?')/g),
+ var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')/g),
orders = {
h: -1,
m: -1,
s: -1,
l: -1,
+ c: -1,
t: -1,
z: -1
};
@@ -1064,13 +1131,14 @@
};
var regstr = '^' + f.toString()
- .replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[lz]|'.*?')/g, function (match) {
+ .replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')/g, function (match) {
var ml = match.length;
switch (match.charAt(0).toLowerCase()) {
case 'h': return ml === 1? '(\\d?\\d)':'(\\d{'+ml+'})';
case 'm': return ml === 1? '(\\d?\\d)':'(\\d{'+ml+'})';
case 's': return ml === 1? '(\\d?\\d)':'(\\d{'+ml+'})';
case 'l': return '(\\d?\\d?\\d)';
+ case 'c': return '(\\d?\\d?\\d)';
case 'z': return '(z|[-+]\\d\\d:?\\d\\d|\\S+)?';
case 't': return getPatternAmpm(o.amNames, o.pmNames);
default: // literal escaped in quotes
@@ -1089,7 +1157,8 @@
hour: 0,
minute: 0,
second: 0,
- millisec: 0
+ millisec: 0,
+ microsec: 0
};
if (treg) {
@@ -1124,31 +1193,11 @@
if (order.l !== -1) {
resTime.millisec = Number(treg[order.l]);
}
+ if (order.c !== -1) {
+ resTime.microsec = Number(treg[order.c]);
+ }
if (order.z !== -1 && treg[order.z] !== undefined) {
- var tz = treg[order.z].toUpperCase();
- switch (tz.length) {
- case 1:
- // Z
- tz = o.timezoneIso8601 ? 'Z' : '+0000';
- break;
- case 5:
- // +hhmm
- if (o.timezoneIso8601) {
- tz = tz.substring(1) == '0000' ? 'Z' : tz.substring(0, 3) + ':' + tz.substring(3);
- }
- break;
- case 6:
- // +hh:mm
- if (!o.timezoneIso8601) {
- tz = tz == 'Z' || tz.substring(1) == '00:00' ? '+0000' : tz.replace(/:/, '');
- } else {
- if (tz.substring(1) == '00:00') {
- tz = 'Z';
- }
- }
- break;
- }
- resTime.timezone = tz;
+ resTime.timezone = $.timepicker.timezoneOffsetNumber(treg[order.z]);
}
@@ -1176,7 +1225,8 @@
minute: d.getMinutes(),
second: d.getSeconds(),
millisec: d.getMilliseconds(),
- timezone: $.timepicker.timeZoneOffsetString(d)
+ microsec: d.getMicroseconds(),
+ timezone: d.getTimezoneOffset()*-1
};
}
catch(err){
@@ -1213,7 +1263,7 @@
minute: 0,
second: 0,
millisec: 0,
- timezone: '+0000'
+ timezone: 0
}, time);
var tmptime = format,
@@ -1224,7 +1274,7 @@
ampmName = options.pmNames[0];
}
- tmptime = tmptime.replace(/(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[lz]|('.*?'|".*?"))/g, function(match) {
+ tmptime = tmptime.replace(/(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|('.*?'|".*?"))/g, function(match) {
switch (match) {
case 'HH':
return ('0' + hour).slice(-2);
@@ -1244,8 +1294,12 @@
return time.second;
case 'l':
return ('00' + time.millisec).slice(-3);
+ case 'c':
+ return ('00' + time.microsec).slice(-3);
case 'z':
- return time.timezone === null? options.defaultTimezone : time.timezone;
+ return $.timepicker.timezoneOffsetString(time.timezone === null? options.timezone : time.timezone, false);
+ case 'Z':
+ return $.timepicker.timezoneOffsetString(time.timezone === null? options.timezone : time.timezone, true);
case 'T':
return ampmName.charAt(0).toUpperCase();
case 'TT':
@@ -1306,12 +1360,6 @@
var tp_inst = this._get(inst, 'timepicker');
if (tp_inst) {
tp_inst._addTimePicker(inst);
-
-// if (tp_inst._defaults.useLocalTimezone) { //checks daylight saving with the new date.
-// var date = new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay, 12);
-// selectLocalTimeZone(tp_inst, date);
-// tp_inst._onTimeChange();
-// }
}
}
};
@@ -1326,7 +1374,8 @@
if (tp_inst) {
if ($.datepicker._get(inst, 'constrainInput')) {
- var ampm = useAmpm(tp_inst._defaults.timeFormat),
+ var ampm = tp_inst.support.ampm,
+ tz = tp_inst._defaults.showTimezone !== null? tp_inst._defaults.showTimezone : tp_inst.support.timezone,
dateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),
datetimeChars = tp_inst._defaults.timeFormat.toString()
.replace(/[hms]/g, '')
@@ -1338,7 +1387,7 @@
.replace(/t/g, ampm ? 'ap' : '') +
" " + tp_inst._defaults.separator +
tp_inst._defaults.timeSuffix +
- (tp_inst._defaults.showTimezone ? tp_inst._defaults.timezoneList.join('') : '') +
+ (tz ? tp_inst._defaults.timezoneList.join('') : '') +
(tp_inst._defaults.amNames.join('')) + (tp_inst._defaults.pmNames.join('')) +
dateChars,
chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);
@@ -1414,7 +1463,7 @@
$dp = inst.dpDiv;
this._base_gotoToday(id);
var tp_inst = this._get(inst, 'timepicker');
- selectLocalTimeZone(tp_inst);
+ selectLocalTimezone(tp_inst);
var now = new Date();
this._setTime(inst, now);
$('.ui-datepicker-today', $dp).click();
@@ -1465,6 +1514,7 @@
tp_inst.minute = date ? date.getMinutes() : defaults.minute;
tp_inst.second = date ? date.getSeconds() : defaults.second;
tp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;
+ tp_inst.microsec = date ? date.getMicroseconds() : defaults.microsec;
//check if within min/max times..
tp_inst._limitMinMaxDateTime(inst, true);
@@ -1493,6 +1543,7 @@
tp_inst._parseTime(date, withDate);
tp_date = new Date();
tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
+ tp_date.setMicroseconds(tp_inst.microsec);
} else {
tp_date = new Date(date.getTime());
}
@@ -1515,7 +1566,17 @@
return;
}
- var tp_date = (date instanceof Date) ? new Date(date.getTime()) : date;
+ var tp_inst = this._get(inst, 'timepicker'),
+ tp_date = (date instanceof Date) ? new Date(date.getTime()) : date;
+
+ // This is important if you are using the timezone option, javascript's Date
+ // object will only return the timezone offset for the current locale, so we
+ // adjust it accordingly. If not using timezone option this won't matter..
+ // If a timezone is different in tp, keep the timezone as is
+ if(tp_inst && tp_inst.timezone != null){
+ date = $.timepicker.timezoneAdjust(date, tp_inst.timezone);
+ tp_date = $.timepicker.timezoneAdjust(tp_date, tp_inst.timezone);
+ }
this._updateDatepicker(inst);
this._base_setDateDatepicker.apply(this, arguments);
@@ -1543,6 +1604,14 @@
var date = this._getDate(inst);
if (date && tp_inst._parseTime($(target).val(), tp_inst.timeOnly)) {
date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);
+ date.setMicroseconds(tp_inst.microsec);
+
+ // This is important if you are using the timezone option, javascript's Date
+ // object will only return the timezone offset for the current locale, so we
+ // adjust it accordingly. If not using timezone option this won't matter..
+ if(tp_inst.timezone != null){
+ date = $.timepicker.timezoneAdjust(date, tp_inst.timezone);
+ }
}
return date;
}
@@ -1696,11 +1765,24 @@
};
/*
- * Determine by the time format if should use ampm
- * Returns true if should use ampm, false if not
+ * Determine by the time format which units are supported
+ * Returns an object of booleans for each unit
*/
- var useAmpm = function(timeFormat){
- return ((timeFormat.indexOf('t') !== -1 || timeFormat.indexOf('T') !== -1) && timeFormat.indexOf('h') !== -1);
+ var detectSupport = function(timeFormat){
+ var tf = timeFormat.replace(/\'.*?\'/g,'').toLowerCase(), // removes literals
+ isIn = function(f, t){ // does the format contain the token?
+ return f.indexOf(t) !== -1? true:false;
+ };
+ return {
+ hour: isIn(tf,'h'),
+ minute: isIn(tf,'m'),
+ second: isIn(tf,'s'),
+ millisec: isIn(tf,'l'),
+ microsec: isIn(tf,'c'),
+ timezone: isIn(tf,'z'),
+ ampm: isIn('t') && isIn(timeFormat,'h'),
+ iso8601: isIn(timeFormat, 'Z')
+ };
};
/*
@@ -1770,7 +1852,7 @@
* Internal function to parse datetime interval
* Returns: {date: Date, timeObj: Object}, where
* date - parsed date without time (type Date)
- * timeObj = {hour: , minute: , second: , millisec: } - parsed time. Optional
+ * timeObj = {hour: , minute: , second: , millisec: , microsec: } - parsed time. Optional
*/
var parseDateTimeInternal = function(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {
var date;
@@ -1797,15 +1879,10 @@
/*
* Internal function to set timezone_select to the local timezone
*/
- var selectLocalTimeZone = function(tp_inst, date) {
+ var selectLocalTimezone = function(tp_inst, date) {
if (tp_inst && tp_inst.timezone_select) {
- tp_inst._defaults.useLocalTimezone = true;
var now = typeof date !== 'undefined' ? date : new Date();
- var tzoffset = $.timepicker.timeZoneOffsetString(now);
- if (tp_inst._defaults.timezoneIso8601) {
- tzoffset = tzoffset.substring(0, 3) + ':' + tzoffset.substring(3);
- }
- tp_inst.timezone_select.val(tzoffset);
+ tp_inst.timezone_select.val(now.getTimezoneOffset()*-1);
}
};
@@ -1816,14 +1893,63 @@
/**
* Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)
- * @param date
+ * @param number if not a number this value is returned
+ * @param boolean if true formats in accordance to iso8601 "+12:45"
* @return string
*/
- $.timepicker.timeZoneOffsetString = function(date) {
- var off = date.getTimezoneOffset() * -1,
+ $.timepicker.timezoneOffsetString = function(tzMinutes, iso8601) {
+ if(isNaN(tzMinutes) || tzMinutes > 840){
+ return tzMinutes;
+ }
+
+ var off = tzMinutes,
minutes = off % 60,
- hours = (off - minutes) / 60;
- return (off >= 0 ? '+' : '-') + ('0' + (hours * 101).toString()).slice(-2) + ('0' + (minutes * 101).toString()).slice(-2);
+ hours = (off - minutes) / 60,
+ iso = iso8601? ':':'',
+ tz = (off >= 0 ? '+' : '-') + ('0' + (hours * 101).toString()).slice(-2) + iso + ('0' + (minutes * 101).toString()).slice(-2);
+
+ if(tz == '+00:00'){
+ return 'Z';
+ }
+ return tz;
+ };
+
+ /**
+ * Get the number in minutes that represents a timezone string
+ * @param string formated like "+0500", "-1245"
+ * @return number
+ */
+ $.timepicker.timezoneOffsetNumber = function(tzString) {
+ tzString = tzString.toString().replace(':',''); // excuse any iso8601, end up with "+1245"
+
+ if(tzString.toUpperCase() === 'Z'){ // if iso8601 with Z, its 0 minute offset
+ return 0;
+ }
+
+ if(!/^(\-|\+)\d{4}$/.test(tzString)){ // possibly a user defined tz, so just give it back
+ return tzString;
+ }
+
+ return ((tzString.substr(0,1) =='-'? -1 : 1) * // plus or minus
+ ((parseInt(tzString.substr(1,2),10)*60) + // hours (converted to minutes)
+ parseInt(tzString.substr(3,2),10))); // minutes
+ };
+
+ /**
+ * No way to set timezone in js Date, so we must adjust the minutes to compensate. (think setDate, getDate)
+ * @param date
+ * @param string formated like "+0500", "-1245"
+ * @return date
+ */
+ $.timepicker.timezoneAdjust = function(date, toTimezone) {
+ var toTz = $.timepicker.timezoneOffsetNumber(toTimezone);
+ if(!isNaN(toTz)){
+ var currTz = date.getTimezoneOffset()*-1,
+ diff = currTz - toTz; // difference in minutes
+
+ date.setMinutes(date.getMinutes()+diff);
+ }
+ return date;
};
/**
@@ -1849,8 +1975,8 @@
* @param string method Can be used to specify the type of picker to be added
* @return jQuery
*/
- $.timepicker.dateTimeRange = function(startTime, endTime, options) {
- $.timepicker.dateRange(startTime, endTime, options, 'datetimepicker');
+ $.timepicker.datetimeRange = function(startTime, endTime, options) {
+ $.timepicker.handleRange('datetimepicker', startTime, endTime, options);
};
/**
@@ -1860,12 +1986,10 @@
* @param Element endTime
* @param obj options Options for the `timepicker()` call. Also supports `reformat`,
* a boolean value that can be used to reformat the input values to the `dateFormat`.
- * @param string method Can be used to specify the type of picker to be added
* @return jQuery
*/
- $.timepicker.dateRange = function(startTime, endTime, options, method) {
- method = method || 'datepicker';
- $.timepicker.handleRange(method, startTime, endTime, options);
+ $.timepicker.dateRange = function(startTime, endTime, options) {
+ $.timepicker.handleRange('datepicker', startTime, endTime, options);
};
/**
@@ -1879,52 +2003,73 @@
* @return jQuery
*/
$.timepicker.handleRange = function(method, startTime, endTime, options) {
+ options = $.extend({}, {
+ minInterval: 0, // min allowed interval in milliseconds
+ maxInterval: 0, // max allowed interval in milliseconds
+ start: {}, // options for start picker
+ end: {} // options for end picker
+ }, options);
+
$.fn[method].call(startTime, $.extend({
onClose: function(dateText, inst) {
- checkDates(this, endTime, dateText);
+ checkDates($(this), endTime);
},
onSelect: function(selectedDateTime) {
- selected(this, endTime, 'minDate');
+ selected($(this), endTime, 'minDate');
}
}, options, options.start));
$.fn[method].call(endTime, $.extend({
onClose: function(dateText, inst) {
- checkDates(this, startTime, dateText);
+ checkDates($(this), startTime);
},
onSelect: function(selectedDateTime) {
- selected(this, startTime, 'maxDate');
+ selected($(this), startTime, 'maxDate');
}
}, options, options.end));
- // timepicker doesn't provide access to its 'timeFormat' option,
- // nor could I get datepicker.formatTime() to behave with times, so I
- // have disabled reformatting for timepicker
- if (method != 'timepicker' && options.reformat) {
- $([startTime, endTime]).each(function() {
- var format = $(this)[method].call($(this), 'option', 'dateFormat'),
- date = new Date($(this).val());
- if ($(this).val() && date) {
- $(this).val($.datepicker.formatDate(format, date));
- }
- });
- }
- checkDates(startTime, endTime, startTime.val());
- function checkDates(changed, other, dateText) {
- if (other.val() && (new Date(startTime.val()) > new Date(endTime.val()))) {
- other.val(dateText);
- }
- }
+ checkDates(startTime, endTime);
selected(startTime, endTime, 'minDate');
selected(endTime, startTime, 'maxDate');
+ function checkDates(changed, other) {
+ var startdt = startTime[method]('getDate'),
+ enddt = endTime[method]('getDate'),
+ changeddt = changed[method]('getDate');
+
+ if(startdt !== null){
+ var minDate = new Date(startdt.getTime()),
+ maxDate = new Date(startdt.getTime());
+
+ minDate.setMilliseconds(minDate.getMilliseconds() + options.minInterval);
+ maxDate.setMilliseconds(maxDate.getMilliseconds() + options.maxInterval);
+
+ if(options.minInterval > 0 && minDate > enddt){ // minInterval check
+ endTime[method]('setDate',minDate);
+ }
+ else if(options.maxInterval > 0 && maxDate < enddt){ // max interval check
+ endTime[method]('setDate',maxDate);
+ }
+ else if (startdt > enddt) {
+ other[method]('setDate',changeddt);
+ }
+ }
+ }
+
function selected(changed, other, option) {
- if (!$(changed).val()) {
+ if (!changed.val()) {
return;
}
- var date = $(changed)[method].call($(changed), 'getDate');
- // timepicker doesn't implement 'getDate' and returns a jQuery
+ var date = changed[method].call(changed, 'getDate');
+ if(date !== null && options.minInterval > 0){
+ if(option == 'minDate'){
+ date.setMilliseconds(date.getMilliseconds() + options.minInterval);
+ }
+ if(option == 'maxDate'){
+ date.setMilliseconds(date.getMilliseconds() - options.minInterval);
+ }
+ }
if (date.getTime) {
- $(other)[method].call($(other), 'option', option, date);
+ other[method].call(other, 'option', option, date);
}
}
return $([startTime.get(0), endTime.get(0)]);
@@ -1942,8 +2087,17 @@
};
/*
+ * Rough microsecond support
+ */
+ if(!Date.prototype.getMicroseconds){
+ Date.microseconds = 0;
+ Date.prototype.getMicroseconds = function(){ return this.microseconds; };
+ Date.prototype.setMicroseconds = function(m){ this.microseconds = m; return this; };
+ }
+
+ /*
* Keep up with the version
*/
- $.timepicker.version = "1.2.2";
+ $.timepicker.version = "1.3";
})(jQuery);