2015-01-28 20:52:16 +00:00
/*! Copyright (c) 2013 Brandon Aaron (http:/ / brandon . aaron . sh )
* Licensed under the MIT License ( LICENSE . txt ) .
*
* Version : 3.1 . 12
*
* Requires : jQuery 1.2 . 2 +
* /
( function ( factory ) {
if ( typeof define === 'function' && define . amd ) {
// AMD. Register as an anonymous module.
define ( 'jquery.mousewheel' , [ 'jquery' ] , factory ) ;
} else if ( typeof exports === 'object' ) {
// Node/CommonJS style for Browserify
module . exports = factory ;
} else {
// Browser globals
factory ( jQuery ) ;
}
} ( function ( $ ) {
var toFix = [ 'wheel' , 'mousewheel' , 'DOMMouseScroll' , 'MozMousePixelScroll' ] ,
toBind = ( 'onwheel' in document || document . documentMode >= 9 ) ?
[ 'wheel' ] : [ 'mousewheel' , 'DomMouseScroll' , 'MozMousePixelScroll' ] ,
slice = Array . prototype . slice ,
nullLowestDeltaTimeout , lowestDelta ;
if ( $ . event . fixHooks ) {
for ( var i = toFix . length ; i ; ) {
$ . event . fixHooks [ toFix [ -- i ] ] = $ . event . mouseHooks ;
}
}
var special = $ . event . special . mousewheel = {
version : '3.1.12' ,
setup : function ( ) {
if ( this . addEventListener ) {
for ( var i = toBind . length ; i ; ) {
this . addEventListener ( toBind [ -- i ] , handler , false ) ;
}
} else {
this . onmousewheel = handler ;
}
// Store the line height and page height for this particular element
$ . data ( this , 'mousewheel-line-height' , special . getLineHeight ( this ) ) ;
$ . data ( this , 'mousewheel-page-height' , special . getPageHeight ( this ) ) ;
} ,
teardown : function ( ) {
if ( this . removeEventListener ) {
for ( var i = toBind . length ; i ; ) {
this . removeEventListener ( toBind [ -- i ] , handler , false ) ;
}
} else {
this . onmousewheel = null ;
}
// Clean up the data we added to the element
$ . removeData ( this , 'mousewheel-line-height' ) ;
$ . removeData ( this , 'mousewheel-page-height' ) ;
} ,
getLineHeight : function ( elem ) {
var $elem = $ ( elem ) ,
$parent = $elem [ 'offsetParent' in $ . fn ? 'offsetParent' : 'parent' ] ( ) ;
if ( ! $parent . length ) {
$parent = $ ( 'body' ) ;
}
return parseInt ( $parent . css ( 'fontSize' ) , 10 ) || parseInt ( $elem . css ( 'fontSize' ) , 10 ) || 16 ;
} ,
getPageHeight : function ( elem ) {
return $ ( elem ) . height ( ) ;
} ,
settings : {
adjustOldDeltas : true , // see shouldAdjustOldDeltas() below
normalizeOffset : true // calls getBoundingClientRect for each event
}
} ;
$ . fn . extend ( {
mousewheel : function ( fn ) {
return fn ? this . bind ( 'mousewheel' , fn ) : this . trigger ( 'mousewheel' ) ;
} ,
unmousewheel : function ( fn ) {
return this . unbind ( 'mousewheel' , fn ) ;
}
} ) ;
function handler ( event ) {
var orgEvent = event || window . event ,
args = slice . call ( arguments , 1 ) ,
delta = 0 ,
deltaX = 0 ,
deltaY = 0 ,
absDelta = 0 ,
offsetX = 0 ,
offsetY = 0 ;
event = $ . event . fix ( orgEvent ) ;
event . type = 'mousewheel' ;
// Old school scrollwheel delta
if ( 'detail' in orgEvent ) { deltaY = orgEvent . detail * - 1 ; }
if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent . wheelDelta ; }
if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent . wheelDeltaY ; }
if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent . wheelDeltaX * - 1 ; }
// Firefox < 17 horizontal scrolling related to DOMMouseScroll event
if ( 'axis' in orgEvent && orgEvent . axis === orgEvent . HORIZONTAL _AXIS ) {
deltaX = deltaY * - 1 ;
deltaY = 0 ;
}
// Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
delta = deltaY === 0 ? deltaX : deltaY ;
// New school wheel delta (wheel event)
if ( 'deltaY' in orgEvent ) {
deltaY = orgEvent . deltaY * - 1 ;
delta = deltaY ;
}
if ( 'deltaX' in orgEvent ) {
deltaX = orgEvent . deltaX ;
if ( deltaY === 0 ) { delta = deltaX * - 1 ; }
}
// No change actually happened, no reason to go any further
if ( deltaY === 0 && deltaX === 0 ) { return ; }
// Need to convert lines and pages to pixels if we aren't already in pixels
// There are three delta modes:
// * deltaMode 0 is by pixels, nothing to do
// * deltaMode 1 is by lines
// * deltaMode 2 is by pages
if ( orgEvent . deltaMode === 1 ) {
var lineHeight = $ . data ( this , 'mousewheel-line-height' ) ;
delta *= lineHeight ;
deltaY *= lineHeight ;
deltaX *= lineHeight ;
} else if ( orgEvent . deltaMode === 2 ) {
var pageHeight = $ . data ( this , 'mousewheel-page-height' ) ;
delta *= pageHeight ;
deltaY *= pageHeight ;
deltaX *= pageHeight ;
}
// Store lowest absolute delta to normalize the delta values
absDelta = Math . max ( Math . abs ( deltaY ) , Math . abs ( deltaX ) ) ;
if ( ! lowestDelta || absDelta < lowestDelta ) {
lowestDelta = absDelta ;
// Adjust older deltas if necessary
if ( shouldAdjustOldDeltas ( orgEvent , absDelta ) ) {
lowestDelta /= 40 ;
}
}
// Adjust older deltas if necessary
if ( shouldAdjustOldDeltas ( orgEvent , absDelta ) ) {
// Divide all the things by 40!
delta /= 40 ;
deltaX /= 40 ;
deltaY /= 40 ;
}
// Get a whole, normalized value for the deltas
delta = Math [ delta >= 1 ? 'floor' : 'ceil' ] ( delta / lowestDelta ) ;
deltaX = Math [ deltaX >= 1 ? 'floor' : 'ceil' ] ( deltaX / lowestDelta ) ;
deltaY = Math [ deltaY >= 1 ? 'floor' : 'ceil' ] ( deltaY / lowestDelta ) ;
// Normalise offsetX and offsetY properties
if ( special . settings . normalizeOffset && this . getBoundingClientRect ) {
var boundingRect = this . getBoundingClientRect ( ) ;
offsetX = event . clientX - boundingRect . left ;
offsetY = event . clientY - boundingRect . top ;
}
// Add information to the event object
event . deltaX = deltaX ;
event . deltaY = deltaY ;
event . deltaFactor = lowestDelta ;
event . offsetX = offsetX ;
event . offsetY = offsetY ;
// Go ahead and set deltaMode to 0 since we converted to pixels
// Although this is a little odd since we overwrite the deltaX/Y
// properties with normalized deltas.
event . deltaMode = 0 ;
// Add event and delta to the front of the arguments
args . unshift ( event , delta , deltaX , deltaY ) ;
// Clearout lowestDelta after sometime to better
// handle multiple device types that give different
// a different lowestDelta
// Ex: trackpad = 3 and mouse wheel = 120
if ( nullLowestDeltaTimeout ) { clearTimeout ( nullLowestDeltaTimeout ) ; }
nullLowestDeltaTimeout = setTimeout ( nullLowestDelta , 200 ) ;
return ( $ . event . dispatch || $ . event . handle ) . apply ( this , args ) ;
}
function nullLowestDelta ( ) {
lowestDelta = null ;
}
function shouldAdjustOldDeltas ( orgEvent , absDelta ) {
// If this is an older event and the delta is divisable by 120,
// then we are assuming that the browser is treating this as an
// older mouse wheel event and that we should divide the deltas
// by 40 to try and get a more usable deltaFactor.
// Side note, this actually impacts the reported scroll distance
// in older browsers and can cause scrolling to be slower than native.
// Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
return special . settings . adjustOldDeltas && orgEvent . type === 'mousewheel' && absDelta % 120 === 0 ;
}
} ) ) ;
2015-01-28 06:37:21 +00:00
/ * *
* @ preserve jQuery DateTimePicker plugin v2 . 4.1
* @ homepage http : //xdsoft.net/jqplugins/datetimepicker/
* ( c ) 2014 , Chupurnov Valeriy .
* /
/*global document,window,jQuery,setTimeout,clearTimeout*/
( function ( a ) {
2015-01-28 20:52:16 +00:00
( 'function' == typeof ( define ) && define . amd ) ? define ( [ 'jquery' , 'jquery.mousewheel' ] , a ) : 'object' == typeof exports ? module . exports = a : a ( jQuery ) ;
2015-01-28 06:37:21 +00:00
} ) ( function ( $ , moment ) {
'use strict' ;
2015-01-28 20:52:16 +00:00
var defaultFormat = 'Y/m/d H:i' ,
defaultFormatTime = 'H:i' ,
defaultFormatDate = 'Y/m/d' ;
2015-01-28 06:37:21 +00:00
var I18N = {
ar : { // Arabic
months : [
"كانون الثاني" , "شباط" , "آذار" , "نيسان" , "مايو" , "حزيران" , "تموز" , "آب" , "أيلول" , "تشرين الأول" , "تشرين الثاني" , "كانون الأول"
] ,
dayOfWeek : [
"ن" , "ث" , "ع" , "خ" , "ج" , "س" , "ح"
]
} ,
ro : { // Romanian
months : [
"ianuarie" , "februarie" , "martie" , "aprilie" , "mai" , "iunie" , "iulie" , "august" , "septembrie" , "octombrie" , "noiembrie" , "decembrie"
] ,
dayOfWeek : [
"l" , "ma" , "mi" , "j" , "v" , "s" , "d"
]
} ,
id : { // Indonesian
months : [
"Januari" , "Februari" , "Maret" , "April" , "Mei" , "Juni" , "Juli" , "Agustus" , "September" , "Oktober" , "November" , "Desember"
] ,
dayOfWeek : [
"Sen" , "Sel" , "Rab" , "Kam" , "Jum" , "Sab" , "Min"
]
} ,
bg : { // Bulgarian
months : [
"Януари" , "Февруари" , "Март" , "Април" , "Май" , "Юни" , "Юли" , "Август" , "Септември" , "Октомври" , "Ноември" , "Декември"
] ,
dayOfWeek : [
"Нд" , "Пн" , "Вт" , "С р " , "Чт" , "Пт" , "С б "
]
} ,
fa : { // Persian/Farsi
months : [
'فروردین' , 'اردیبهشت' , 'خرداد' , 'تیر' , 'مرداد' , 'شهریور' , 'مهر' , 'آبان' , 'آذر' , 'دی' , 'بهمن' , 'اسفند'
] ,
dayOfWeek : [
'یکشنبه' , 'دوشنبه' , 'سه شنبه' , 'چهارشنبه' , 'پنجشنبه' , 'جمعه' , 'شنبه'
]
} ,
ru : { // Russian
months : [
'Январь' , 'Февраль' , 'Март' , 'Апрель' , 'Май' , 'Июнь' , 'Июль' , 'Август' , 'Сентябрь' , 'Октябрь' , 'Ноябрь' , 'Декабрь'
] ,
dayOfWeek : [
"Вск" , "Пн" , "Вт" , "С р " , "Чт" , "Пт" , "С б "
]
} ,
uk : { // Ukrainian
months : [
'Січень' , 'Лютий' , 'Березень' , 'Квітень' , 'Травень' , 'Червень' , 'Липень' , 'Серпень' , 'Вересень' , 'Жовтень' , 'Листопад' , 'Грудень'
] ,
dayOfWeek : [
"Ндл" , "Пнд" , "Втр" , "Срд" , "Чтв" , "Птн" , "Сбт"
]
} ,
en : { // English
months : [
"January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December"
] ,
dayOfWeek : [
"Sun" , "Mon" , "Tue" , "Wed" , "Thu" , "Fri" , "Sat"
]
} ,
el : { // Ελληνικά
months : [
"Ιανουάριος" , "Φεβρουάριος" , "Μάρτιος" , "Απρίλιος" , "Μάιος" , "Ιούνιος" , "Ιούλιος" , "Αύγουστος" , "Σεπτέμβριος" , "Οκτώβριος" , "Νοέμβριος" , "Δεκέμβριος"
] ,
dayOfWeek : [
"Κ υ ρ " , "Δευ" , "Τ ρ ι " , "Τετ" , "Πεμ" , "Παρ" , "Σαβ"
]
} ,
de : { // German
months : [
'Januar' , 'Februar' , 'März' , 'April' , 'Mai' , 'Juni' , 'Juli' , 'August' , 'September' , 'Oktober' , 'November' , 'Dezember'
] ,
dayOfWeek : [
"So" , "Mo" , "Di" , "Mi" , "Do" , "Fr" , "Sa"
]
} ,
nl : { // Dutch
months : [
"januari" , "februari" , "maart" , "april" , "mei" , "juni" , "juli" , "augustus" , "september" , "oktober" , "november" , "december"
] ,
dayOfWeek : [
"zo" , "ma" , "di" , "wo" , "do" , "vr" , "za"
]
} ,
tr : { // Turkish
months : [
"Ocak" , "Şubat" , "Mart" , "Nisan" , "Mayı s" , "Haziran" , "Temmuz" , "Ağustos" , "Eylül" , "Ekim" , "Kası m" , "Aralı k"
] ,
dayOfWeek : [
"Paz" , "Pts" , "Sal" , "Çar" , "Per" , "Cum" , "Cts"
]
} ,
fr : { //French
months : [
"Janvier" , "Février" , "Mars" , "Avril" , "Mai" , "Juin" , "Juillet" , "Août" , "Septembre" , "Octobre" , "Novembre" , "Décembre"
] ,
dayOfWeek : [
"Dim" , "Lun" , "Mar" , "Mer" , "Jeu" , "Ven" , "Sam"
]
} ,
es : { // Spanish
months : [
"Enero" , "Febrero" , "Marzo" , "Abril" , "Mayo" , "Junio" , "Julio" , "Agosto" , "Septiembre" , "Octubre" , "Noviembre" , "Diciembre"
] ,
dayOfWeek : [
"Dom" , "Lun" , "Mar" , "Mié" , "Jue" , "Vie" , "Sáb"
]
} ,
th : { // Thai
months : [
'มกราคม' , 'กุมภาพันธ์' , 'มีนาคม' , 'เมษายน' , 'พฤษภาคม' , 'มิถุนายน' , 'กรกฎาคม' , 'สิงหาคม' , 'กันยายน' , 'ตุลาคม' , 'พฤศจิกายน' , 'ธันวาคม'
] ,
dayOfWeek : [
'อา.' , 'จ.' , 'อ.' , 'พ.' , 'พฤ.' , 'ศ.' , 'ส.'
]
} ,
pl : { // Polish
months : [
"styczeń" , "luty" , "marzec" , "kwiecień" , "maj" , "czerwiec" , "lipiec" , "sierpień" , "wrzesień" , "październik" , "listopad" , "grudzień"
] ,
dayOfWeek : [
"nd" , "pn" , "wt" , "śr" , "cz" , "pt" , "sb"
]
} ,
pt : { // Portuguese
months : [
"Janeiro" , "Fevereiro" , "Março" , "Abril" , "Maio" , "Junho" , "Julho" , "Agosto" , "Setembro" , "Outubro" , "Novembro" , "Dezembro"
] ,
dayOfWeek : [
"Dom" , "Seg" , "Ter" , "Qua" , "Qui" , "Sex" , "Sab"
]
} ,
ch : { // Simplified Chinese
months : [
"一月" , "二月" , "三月" , "四月" , "五月" , "六月" , "七月" , "八月" , "九月" , "十月" , "十一月" , "十二月"
] ,
dayOfWeek : [
"日" , "一" , "二" , "三" , "四" , "五" , "六"
]
} ,
se : { // Swedish
months : [
"Januari" , "Februari" , "Mars" , "April" , "Maj" , "Juni" , "Juli" , "Augusti" , "September" , "Oktober" , "November" , "December"
] ,
dayOfWeek : [
"Sön" , "Mån" , "Tis" , "Ons" , "Tor" , "Fre" , "Lör"
]
} ,
kr : { // Korean
months : [
"1월" , "2월" , "3월" , "4월" , "5월" , "6월" , "7월" , "8월" , "9월" , "10월" , "11월" , "12월"
] ,
dayOfWeek : [
"일" , "월" , "화" , "수" , "목" , "금" , "토"
]
} ,
it : { // Italian
months : [
"Gennaio" , "Febbraio" , "Marzo" , "Aprile" , "Maggio" , "Giugno" , "Luglio" , "Agosto" , "Settembre" , "Ottobre" , "Novembre" , "Dicembre"
] ,
dayOfWeek : [
"Dom" , "Lun" , "Mar" , "Mer" , "Gio" , "Ven" , "Sab"
]
} ,
da : { // Dansk
months : [
"January" , "Februar" , "Marts" , "April" , "Maj" , "Juni" , "July" , "August" , "September" , "Oktober" , "November" , "December"
] ,
dayOfWeek : [
"Søn" , "Man" , "Tir" , "Ons" , "Tor" , "Fre" , "Lør"
]
} ,
no : { // Norwegian
months : [
"Januar" , "Februar" , "Mars" , "April" , "Mai" , "Juni" , "Juli" , "August" , "September" , "Oktober" , "November" , "Desember"
] ,
dayOfWeek : [
"Søn" , "Man" , "Tir" , "Ons" , "Tor" , "Fre" , "Lør"
]
} ,
ja : { // Japanese
months : [
"1月" , "2月" , "3月" , "4月" , "5月" , "6月" , "7月" , "8月" , "9月" , "10月" , "11月" , "12月"
] ,
dayOfWeek : [
"日" , "月" , "火" , "水" , "木" , "金" , "土"
]
} ,
vi : { // Vietnamese
months : [
"Tháng 1" , "Tháng 2" , "Tháng 3" , "Tháng 4" , "Tháng 5" , "Tháng 6" , "Tháng 7" , "Tháng 8" , "Tháng 9" , "Tháng 10" , "Tháng 11" , "Tháng 12"
] ,
dayOfWeek : [
"CN" , "T2" , "T3" , "T4" , "T5" , "T6" , "T7"
]
} ,
sl : { // Slovenščina
months : [
"Januar" , "Februar" , "Marec" , "April" , "Maj" , "Junij" , "Julij" , "Avgust" , "September" , "Oktober" , "November" , "December"
] ,
dayOfWeek : [
"Ned" , "Pon" , "Tor" , "Sre" , "Čet" , "Pet" , "Sob"
]
} ,
cs : { // Čeština
months : [
"Leden" , "Únor" , "Březen" , "Duben" , "Květen" , "Červen" , "Červenec" , "Srpen" , "Září" , "Říjen" , "Listopad" , "Prosinec"
] ,
dayOfWeek : [
"Ne" , "Po" , "Út" , "St" , "Čt" , "Pá" , "So"
]
} ,
hu : { // Hungarian
months : [
"Január" , "Február" , "Március" , "Április" , "Május" , "Június" , "Július" , "Augusztus" , "Szeptember" , "Október" , "November" , "December"
] ,
dayOfWeek : [
"Va" , "Hé" , "Ke" , "Sze" , "Cs" , "Pé" , "Szo"
]
} ,
az : { //Azerbaijanian (Azeri)
months : [
"Yanvar" , "Fevral" , "Mart" , "Aprel" , "May" , "Iyun" , "Iyul" , "Avqust" , "Sentyabr" , "Oktyabr" , "Noyabr" , "Dekabr"
] ,
dayOfWeek : [
"B" , "Be" , "Ça" , "Ç" , "Ca" , "C" , "Ş"
]
} ,
bs : { //Bosanski
months : [
"Januar" , "Februar" , "Mart" , "April" , "Maj" , "Jun" , "Jul" , "Avgust" , "Septembar" , "Oktobar" , "Novembar" , "Decembar"
] ,
dayOfWeek : [
"Ned" , "Pon" , "Uto" , "Sri" , "Čet" , "Pet" , "Sub"
]
} ,
ca : { //Català
months : [
"Gener" , "Febrer" , "Març" , "Abril" , "Maig" , "Juny" , "Juliol" , "Agost" , "Setembre" , "Octubre" , "Novembre" , "Desembre"
] ,
dayOfWeek : [
"Dg" , "Dl" , "Dt" , "Dc" , "Dj" , "Dv" , "Ds"
]
} ,
'en-GB' : { //English (British)
months : [
"January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December"
] ,
dayOfWeek : [
"Sun" , "Mon" , "Tue" , "Wed" , "Thu" , "Fri" , "Sat"
]
} ,
et : { //"Eesti"
months : [
"Jaanuar" , "Veebruar" , "Märts" , "Aprill" , "Mai" , "Juuni" , "Juuli" , "August" , "September" , "Oktoober" , "November" , "Detsember"
] ,
dayOfWeek : [
"P" , "E" , "T" , "K" , "N" , "R" , "L"
]
} ,
eu : { //Euskara
months : [
"Urtarrila" , "Otsaila" , "Martxoa" , "Apirila" , "Maiatza" , "Ekaina" , "Uztaila" , "Abuztua" , "Iraila" , "Urria" , "Azaroa" , "Abendua"
] ,
dayOfWeek : [
"Ig." , "Al." , "Ar." , "Az." , "Og." , "Or." , "La."
]
} ,
fi : { //Finnish (Suomi)
months : [
"Tammikuu" , "Helmikuu" , "Maaliskuu" , "Huhtikuu" , "Toukokuu" , "Kesäkuu" , "Heinäkuu" , "Elokuu" , "Syyskuu" , "Lokakuu" , "Marraskuu" , "Joulukuu"
] ,
dayOfWeek : [
"Su" , "Ma" , "Ti" , "Ke" , "To" , "Pe" , "La"
]
} ,
gl : { //Galego
months : [
"Xan" , "Feb" , "Maz" , "Abr" , "Mai" , "Xun" , "Xul" , "Ago" , "Set" , "Out" , "Nov" , "Dec"
] ,
dayOfWeek : [
"Dom" , "Lun" , "Mar" , "Mer" , "Xov" , "Ven" , "Sab"
]
} ,
hr : { //Hrvatski
months : [
"Siječanj" , "Veljača" , "Ožujak" , "Travanj" , "Svibanj" , "Lipanj" , "Srpanj" , "Kolovoz" , "Rujan" , "Listopad" , "Studeni" , "Prosinac"
] ,
dayOfWeek : [
"Ned" , "Pon" , "Uto" , "Sri" , "Čet" , "Pet" , "Sub"
]
} ,
ko : { //Korean (한국어)
months : [
"1월" , "2월" , "3월" , "4월" , "5월" , "6월" , "7월" , "8월" , "9월" , "10월" , "11월" , "12월"
] ,
dayOfWeek : [
"일" , "월" , "화" , "수" , "목" , "금" , "토"
]
} ,
lt : { //Lithuanian (lietuvių)
months : [
"Sausio" , "Vasario" , "Kovo" , "Balandžio" , "Gegužės" , "Birželio" , "Liepos" , "Rugpjūčio" , "Rugsėjo" , "Spalio" , "Lapkričio" , "Gruodžio"
] ,
dayOfWeek : [
"Sek" , "Pir" , "Ant" , "Tre" , "Ket" , "Pen" , "Šeš"
]
} ,
lv : { //Latvian (Latviešu)
months : [
"Janvāris" , "Februāris" , "Marts" , "Aprīlis " , "Maijs" , "Jūnijs" , "Jūlijs" , "Augusts" , "Septembris" , "Oktobris" , "Novembris" , "Decembris"
] ,
dayOfWeek : [
"Sv" , "Pr" , "Ot" , "Tr" , "Ct" , "Pk" , "St"
]
} ,
mk : { //Macedonian (Македонски)
months : [
"јануари" , "февруари" , "март" , "април" , "мај" , "јуни" , "јули" , "август" , "септември" , "октомври" , "ноември" , "декември"
] ,
dayOfWeek : [
"нед" , "пон" , "вто" , "с р е " , "чет" , "пет" , "с а б "
]
} ,
mn : { //Mongolian (Монгол)
months : [
"1-р с а р " , "2-р с а р " , "3-р с а р " , "4-р с а р " , "5-р с а р " , "6-р с а р " , "7-р с а р " , "8-р с а р " , "9-р с а р " , "10-р с а р " , "11-р с а р " , "12-р с а р "
] ,
dayOfWeek : [
"Дав" , "Мяг" , "Лха" , "Пүр" , "Бсн" , "Бям" , "Ням"
]
} ,
'pt-BR' : { //Português(Brasil)
months : [
"Janeiro" , "Fevereiro" , "Março" , "Abril" , "Maio" , "Junho" , "Julho" , "Agosto" , "Setembro" , "Outubro" , "Novembro" , "Dezembro"
] ,
dayOfWeek : [
"Dom" , "Seg" , "Ter" , "Qua" , "Qui" , "Sex" , "Sáb"
]
} ,
sk : { //Slovenčina
months : [
"Január" , "Február" , "Marec" , "Apríl" , "Máj" , "Jún" , "Júl" , "August" , "September" , "Október" , "November" , "December"
] ,
dayOfWeek : [
"Ne" , "Po" , "Ut" , "St" , "Št" , "Pi" , "So"
]
} ,
sq : { //Albanian (Shqip)
months : [
"January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December"
] ,
dayOfWeek : [
"Sun" , "Mon" , "Tue" , "Wed" , "Thu" , "Fri" , "Sat"
]
} ,
'sr-YU' : { //Serbian (Srpski)
months : [
"Januar" , "Februar" , "Mart" , "April" , "Maj" , "Jun" , "Jul" , "Avgust" , "Septembar" , "Oktobar" , "Novembar" , "Decembar"
] ,
dayOfWeek : [
"Ned" , "Pon" , "Uto" , "Sre" , "čet" , "Pet" , "Sub"
]
} ,
sr : { //Serbian Cyrillic (Српски)
months : [
"јануар" , "фебруар" , "март" , "април" , "мај" , "јун" , "јул" , "август" , "септембар" , "октобар" , "новембар" , "децембар"
] ,
dayOfWeek : [
"нед" , "пон" , "уто" , "с р е " , "чет" , "пет" , "с у б "
]
} ,
sv : { //Svenska
months : [
"Januari" , "Februari" , "Mars" , "April" , "Maj" , "Juni" , "Juli" , "Augusti" , "September" , "Oktober" , "November" , "December"
] ,
dayOfWeek : [
"Sön" , "Mån" , "Tis" , "Ons" , "Tor" , "Fre" , "Lör"
]
} ,
'zh-TW' : { //Traditional Chinese (繁體中文)
months : [
"一月" , "二月" , "三月" , "四月" , "五月" , "六月" , "七月" , "八月" , "九月" , "十月" , "十一月" , "十二月"
] ,
dayOfWeek : [
"日" , "一" , "二" , "三" , "四" , "五" , "六"
]
} ,
zh : { //Simplified Chinese (简体中文)
months : [
"一月" , "二月" , "三月" , "四月" , "五月" , "六月" , "七月" , "八月" , "九月" , "十月" , "十一月" , "十二月"
] ,
dayOfWeek : [
"日" , "一" , "二" , "三" , "四" , "五" , "六"
]
} ,
he : { //Hebrew (עברית)
months : [
'ינואר' , 'פברואר' , 'מרץ' , 'אפריל' , 'מאי' , 'יוני' , 'יולי' , 'אוגוסט' , 'ספטמבר' , 'אוקטובר' , 'נובמבר' , 'דצמבר'
] ,
dayOfWeek : [
'א\'' , 'ב\'' , 'ג\'' , 'ד\'' , 'ה\'' , 'ו \'' , 'שבת'
]
}
} ;
var getI18n = function ( lang , prop ) {
return I18N [ lang ] [ prop ] ;
} ;
var setDayOfWeekStart = function ( options ) {
if ( isNaN ( options . dayOfWeekStart ) ) {
options . dayOfWeekStart = 0 ;
} else {
options . dayOfWeekStart = parseInt ( options . dayOfWeekStart , 10 ) % 7 ;
}
} ;
2015-01-28 23:03:56 +00:00
var NS , XDE _KEYUP , XDE _AFTEROPEN , XDE _BLUR , XDE _CHANGEDATETIME , XDE _CLICK , XDE _CLOSE , XDE _DBLCLICK , XDE _FOCUSIN , XDE _GENERATE , XDE _KEYDOWN ,
XDE _MOUSEDOWN , XDE _MOUSEUP , XDE _MOUSEWHEEL , XDE _OPEN , XDE _RESIZE , XDE _TOGGLE , XDE _XCHANGE , XDE _ERROR _INPUT , XDE _SELECT , XDE _RESIZE _SCROLL ,
XDE _SCROLL _ELEMENT , XDE _SCROLLER _MOUSEDOWN , XDE _SCROLLER _MOUSEMOVE , XDE _SCROLLER _MOUSEUP , XDE _SCROLLER _RESIZE _SCROLL , XDE _SCROLLER _SCROLL _ELEMENT ,
XDE _SCROLLER _TOUCHSTART , XDE _CTRL _KEYDOWN , XDE _CTRL _KEYUP , XDC _CALENDAR , XDC _COPYRIGHT , XDC _CURRENT , XDC _DATE , XDC _DATEPICKER , XDC _DATETIME ,
XDC _DATETIMEPICKER , XDC _DAY _OF _WEEK , XDC _DISABLED , XDC _INIT _TIME , XDC _INLINE , XDC _LABEL , XDC _MONTH , XDC _MONTHSELECT , XDC _MONTHPICKER , XDC _NEXT ,
XDC _NOSELECT , XDC _OPTION , XDC _OTHER _MONTH , XDC _PREV , XDC _SCROLLBAR , XDC _SCROLLER , XDC _SCROLLER _BOX , XDC _SELECT , XDC _SHOWWEEKS , XDC _TIME ,
XDC _TIME _BOX , XDC _TIME _VARIANT , XDC _TIMEPICKER , XDC _TODAY , XDC _TODAY _BUTTON , XDC _WEEKEND , XDC _YEAR , XDC _YEARSELECT ,
setNamespace = function ( ns ) {
( NS = ns ,
XDE _KEYUP = 'keyup.' + NS + 'ctrl' ,
XDE _AFTEROPEN = 'afterOpen.' + NS ,
XDE _BLUR = 'blur.' + NS ,
XDE _CHANGEDATETIME = 'changedatetime.' + NS ,
XDE _CLICK = 'click.' + NS ,
XDE _CLOSE = 'close.' + NS ,
XDE _DBLCLICK = 'dblclick.' + NS ,
XDE _FOCUSIN = 'focusin.' + NS ,
XDE _GENERATE = 'generate.' + NS ,
XDE _KEYDOWN = 'keydown.' + NS ,
XDE _MOUSEDOWN = 'mousedown.' + NS ,
XDE _MOUSEUP = 'mouseup.' + NS ,
XDE _MOUSEWHEEL = 'mousewheel.' + NS ,
XDE _OPEN = 'open.' + NS ,
XDE _RESIZE = 'resize.' + NS ,
XDE _TOGGLE = 'toggle.' + NS ,
XDE _XCHANGE = 'xchange.' + NS ,
XDE _ERROR _INPUT = 'error_input.' + NS ,
XDE _SELECT = 'select.' + NS ,
XDE _RESIZE _SCROLL = 'resize_scroll.' + NS + '_scroller' ,
XDE _SCROLL _ELEMENT = 'scroll_element.' + NS + '_scroller' ,
XDE _SCROLLER _MOUSEDOWN = 'mousedown.' + NS + '_scroller' ,
XDE _SCROLLER _MOUSEMOVE = 'mousemove.' + NS + '_scroller' ,
XDE _SCROLLER _MOUSEUP = 'mouseup.' + NS + '_scroller' ,
XDE _SCROLLER _RESIZE _SCROLL = 'resize_scroll.' + NS + '_scroller' ,
XDE _SCROLLER _SCROLL _ELEMENT = 'scroll_element.' + NS + '_scroller' ,
XDE _SCROLLER _TOUCHSTART = 'touchstart.' + NS + '_scroller' ,
XDE _CTRL _KEYDOWN = 'keydown.' + NS + 'ctrl' ,
XDE _CTRL _KEYUP = 'keyup.' + NS + 'ctrl' ,
XDC _CALENDAR = NS + '_calendar' ,
XDC _COPYRIGHT = NS + '_copyright' ,
XDC _CURRENT = NS + '_current' ,
XDC _DATE = NS + '_date' ,
XDC _DATEPICKER = NS + '_datepicker' ,
XDC _DATETIME = NS + '_datetime' ,
XDC _DATETIMEPICKER = NS + '_datetimepicker' ,
XDC _DAY _OF _WEEK = NS + '_day_of_week' ,
XDC _DISABLED = NS + '_disabled' ,
XDC _INIT _TIME = NS + '_init_time' ,
XDC _INLINE = NS + '_inline' ,
XDC _LABEL = NS + '_label' ,
XDC _MONTH = NS + '_month' ,
XDC _MONTHSELECT = NS + '_monthselect' ,
XDC _MONTHPICKER = NS + '_monthpicker' ,
XDC _NEXT = NS + '_next' ,
XDC _NOSELECT = NS + '_noselect' ,
XDC _OPTION = NS + '_option' ,
XDC _OTHER _MONTH = NS + '_other_month' ,
XDC _PREV = NS + '_prev' ,
XDC _SCROLLBAR = NS + '_scrollbar' ,
XDC _SCROLLER = NS + '_scroller' ,
XDC _SCROLLER _BOX = NS + '_scroller_box' ,
XDC _SELECT = NS + '_select' ,
XDC _SHOWWEEKS = NS + '_showweeks' ,
XDC _TIME = NS + '_time' ,
XDC _TIME _BOX = NS + '_time_box' ,
XDC _TIME _VARIANT = NS + '_time_variant' ,
XDC _TIMEPICKER = NS + '_timepicker' ,
XDC _TODAY = NS + '_today' ,
XDC _TODAY _BUTTON = NS + '_today_button' ,
XDC _WEEKEND = NS + '_weekend' ,
XDC _YEAR = NS + '_year' ,
XDC _YEARSELECT = NS + '_yearselect' ) ;
} ;
setNamespace ( 'xdsoft' ) ;
2015-01-28 06:37:21 +00:00
var default _options = {
i18n : I18N ,
template : {
datepicker : function ( ) {
2015-01-28 23:03:56 +00:00
return '<div class="' + XDC _DATEPICKER + ' active"></div>' ;
2015-01-28 06:37:21 +00:00
} ,
month _picker : function ( ) {
2015-01-28 23:03:56 +00:00
return '<div class="' + XDC _MONTHPICKER + '"><button type="button" class="' + XDC _PREV + '"></button><button type="button" class="' + XDC _TODAY _BUTTON + '"></button>' +
'<div class="' + XDC _LABEL + ' ' + XDC _MONTH + '"><span></span><i></i></div>' +
'<div class="' + XDC _LABEL + ' ' + XDC _YEAR + '"><span></span><i></i></div>' +
'<button type="button" class="' + XDC _NEXT + '"></button></div>' ;
2015-01-28 06:37:21 +00:00
} ,
calendar : function ( ) {
2015-01-28 23:03:56 +00:00
return '<div class="' + XDC _CALENDAR + '"></div>' ;
2015-01-28 06:37:21 +00:00
} ,
timepicker : function ( ) {
2015-01-28 23:03:56 +00:00
return '<div class="' + XDC _TIMEPICKER + ' active"><button type="button" class="' + XDC _PREV + '"></button><div class="' + XDC _TIME _BOX + '"></div><button type="button" class="' + XDC _NEXT + '"></button></div>' ;
2015-01-28 06:37:21 +00:00
} ,
timebox : function ( ) {
2015-01-28 23:03:56 +00:00
return '<div class="' + XDC _TIME _VARIANT + '"></div>' ;
2015-01-28 06:37:21 +00:00
} ,
monthselect : function ( ) {
2015-01-28 23:03:56 +00:00
return '<div class="' + XDC _SELECT + ' ' + XDC _MONTHSELECT + '"><div></div></div>' ;
2015-01-28 06:37:21 +00:00
} ,
yearselect : function ( ) {
2015-01-28 23:03:56 +00:00
return '<div class="' + XDC _SELECT + ' ' + XDC _YEARSELECT + '"><div></div></div>' ;
2015-01-28 06:37:21 +00:00
}
} ,
value : '' ,
lang : 'en' ,
2015-01-28 20:52:16 +00:00
format : defaultFormat ,
formatTime : defaultFormatTime ,
formatDate : defaultFormatDate ,
2015-01-28 06:37:21 +00:00
startDate : false , // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',
step : 60 ,
monthChangeSpinner : true ,
closeOnDateSelect : false ,
closeOnWithoutClick : true ,
closeOnInputClick : true ,
timepicker : true ,
datepicker : true ,
weeks : false ,
defaultTime : false , // use formatTime format (ex. '10:00' for formatTime: 'H:i')
defaultDate : false , // use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')
minDate : false ,
maxDate : false ,
minTime : false ,
maxTime : false ,
allowTimes : [ ] ,
opened : false ,
initTime : true ,
inline : false ,
theme : '' ,
onSelectDate : function ( ) { } ,
onSelectTime : function ( ) { } ,
onChangeMonth : function ( ) { } ,
onChangeYear : function ( ) { } ,
onChangeDateTime : function ( ) { } ,
onShow : function ( ) { } ,
onClose : function ( ) { } ,
onGenerate : function ( ) { } ,
withoutCopyright : true ,
inverseButton : false ,
hours12 : false ,
2015-01-28 23:03:56 +00:00
next : XDC _NEXT ,
prev : XDC _PREV ,
2015-01-28 06:37:21 +00:00
dayOfWeekStart : 0 ,
parentID : 'body' ,
timeHeightInTimePicker : 25 ,
timepickerScrollbar : true ,
todayButton : true ,
defaultSelect : true ,
scrollMonth : true ,
scrollTime : true ,
scrollInput : true ,
lazyInit : false ,
mask : false ,
validateOnBlur : true ,
allowBlank : true ,
yearStart : 1950 ,
yearEnd : 2050 ,
style : '' ,
id : '' ,
fixed : false ,
roundTime : 'round' , // ceil, floor
className : '' ,
weekends : [ ] ,
disabledDates : [ ] ,
yearOffset : 0 ,
beforeShowDay : null ,
enterLikeTab : true
} ;
// fix for ie8
if ( ! Array . prototype . indexOf ) {
Array . prototype . indexOf = function ( obj , start ) {
var i , j ;
for ( i = ( start || 0 ) , j = this . length ; i < j ; i += 1 ) {
if ( this [ i ] === obj ) {
return i ;
}
}
return - 1 ;
} ;
}
Date . prototype . countDaysInMonth = function ( ) {
return new Date ( this . getFullYear ( ) , this . getMonth ( ) + 1 , 0 ) . getDate ( ) ;
} ;
$ . fn . xdsoftScroller = function ( percent ) {
return this . each ( function ( ) {
var timeboxparent = $ ( this ) ,
pointerEventToXY = function ( e ) {
var out = {
x : 0 ,
y : 0
} ,
touch ;
if ( e . type === 'touchstart' || e . type === 'touchmove' || e . type === 'touchend' || e . type === 'touchcancel' ) {
touch = e . originalEvent . touches [ 0 ] || e . originalEvent . changedTouches [ 0 ] ;
out . x = touch . clientX ;
out . y = touch . clientY ;
} else if ( e . type === 'mousedown' || e . type === 'mouseup' || e . type === 'mousemove' || e . type === 'mouseover' || e . type === 'mouseout' || e . type === 'mouseenter' || e . type === 'mouseleave' ) {
out . x = e . clientX ;
out . y = e . clientY ;
}
return out ;
} ,
move = 0 ,
timebox ,
parentHeight ,
height ,
scrollbar ,
scroller ,
maximumOffset = 100 ,
start = false ,
startY = 0 ,
startTop = 0 ,
h1 = 0 ,
touchStart = false ,
startTopScroll = 0 ,
calcOffset = function ( ) { } ;
if ( percent === 'hide' ) {
2015-01-28 23:03:56 +00:00
timeboxparent . find ( '.' + XDC _SCROLLBAR ) . hide ( ) ;
2015-01-28 06:37:21 +00:00
return ;
}
2015-01-28 23:03:56 +00:00
if ( ! $ ( this ) . hasClass ( XDC _SCROLLER _BOX ) ) {
2015-01-28 06:37:21 +00:00
timebox = timeboxparent . children ( ) . eq ( 0 ) ;
parentHeight = timeboxparent [ 0 ] . clientHeight ;
height = timebox [ 0 ] . offsetHeight ;
2015-01-28 23:03:56 +00:00
scrollbar = $ ( '<div class="' + XDC _SCROLLBAR + '"></div>' ) ;
scroller = $ ( '<div class="' + XDC _SCROLLER + '"></div>' ) ;
2015-01-28 06:37:21 +00:00
scrollbar . append ( scroller ) ;
2015-01-28 23:03:56 +00:00
timeboxparent . addClass ( XDC _SCROLLER _BOX ) . append ( scrollbar ) ;
2015-01-28 06:37:21 +00:00
calcOffset = function calcOffset ( event ) {
var offset = pointerEventToXY ( event ) . y - startY + startTopScroll ;
if ( offset < 0 ) {
offset = 0 ;
}
if ( offset + scroller [ 0 ] . offsetHeight > h1 ) {
offset = h1 - scroller [ 0 ] . offsetHeight ;
}
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _SCROLL _ELEMENT , [ maximumOffset ? offset / maximumOffset : 0 ] ) ;
2015-01-28 06:37:21 +00:00
} ;
scroller
2015-01-28 23:03:56 +00:00
. on ( [ XDE _SCROLLER _TOUCHSTART , XDE _SCROLLER _MOUSEDOWN ] . join ( ' ' ) , function ( event ) {
2015-01-28 06:37:21 +00:00
if ( ! parentHeight ) {
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _RESIZE _SCROLL , [ percent ] ) ;
2015-01-28 06:37:21 +00:00
}
startY = pointerEventToXY ( event ) . y ;
startTopScroll = parseInt ( scroller . css ( 'margin-top' ) , 10 ) ;
h1 = scrollbar [ 0 ] . offsetHeight ;
if ( event . type === 'mousedown' ) {
if ( document ) {
2015-01-28 23:03:56 +00:00
$ ( document . body ) . addClass ( XDC _NOSELECT ) ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
$ ( [ document . body , window ] ) . on ( XDE _SCROLLER _MOUSEUP , function arguments _callee ( ) {
$ ( [ document . body , window ] ) . off ( XDE _SCROLLER _MOUSEUP , arguments _callee )
. off ( XDE _SCROLLER _MOUSEMOVE , calcOffset )
. removeClass ( XDC _NOSELECT ) ;
2015-01-28 06:37:21 +00:00
} ) ;
2015-01-28 23:03:56 +00:00
$ ( document . body ) . on ( XDE _SCROLLER _MOUSEMOVE , calcOffset ) ;
2015-01-28 06:37:21 +00:00
} else {
touchStart = true ;
event . stopPropagation ( ) ;
event . preventDefault ( ) ;
}
} )
. on ( 'touchmove' , function ( event ) {
if ( touchStart ) {
event . preventDefault ( ) ;
calcOffset ( event ) ;
}
} )
. on ( 'touchend touchcancel' , function ( event ) {
touchStart = false ;
startTopScroll = 0 ;
} ) ;
timeboxparent
2015-01-28 23:03:56 +00:00
. on ( XDE _SCROLLER _SCROLL _ELEMENT , function ( event , percentage ) {
2015-01-28 06:37:21 +00:00
if ( ! parentHeight ) {
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _RESIZE _SCROLL , [ percentage , true ] ) ;
2015-01-28 06:37:21 +00:00
}
percentage = percentage > 1 ? 1 : ( percentage < 0 || isNaN ( percentage ) ) ? 0 : percentage ;
scroller . css ( 'margin-top' , maximumOffset * percentage ) ;
setTimeout ( function ( ) {
timebox . css ( 'marginTop' , - parseInt ( ( timebox [ 0 ] . offsetHeight - parentHeight ) * percentage , 10 ) ) ;
} , 10 ) ;
} )
2015-01-28 23:03:56 +00:00
. on ( XDE _SCROLLER _RESIZE _SCROLL , function ( event , percentage , noTriggerScroll ) {
2015-01-28 06:37:21 +00:00
var percent , sh ;
parentHeight = timeboxparent [ 0 ] . clientHeight ;
height = timebox [ 0 ] . offsetHeight ;
percent = parentHeight / height ;
sh = percent * scrollbar [ 0 ] . offsetHeight ;
if ( percent > 1 ) {
scroller . hide ( ) ;
} else {
scroller . show ( ) ;
scroller . css ( 'height' , parseInt ( sh > 10 ? sh : 10 , 10 ) ) ;
maximumOffset = scrollbar [ 0 ] . offsetHeight - scroller [ 0 ] . offsetHeight ;
if ( noTriggerScroll !== true ) {
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _SCROLL _ELEMENT , [ percentage || Math . abs ( parseInt ( timebox . css ( 'marginTop' ) , 10 ) ) / ( height - parentHeight ) ] ) ;
2015-01-28 06:37:21 +00:00
}
}
} ) ;
timeboxparent . on ( 'mousewheel' , function ( event ) {
var top = Math . abs ( parseInt ( timebox . css ( 'marginTop' ) , 10 ) ) ;
top = top - ( event . deltaY * 20 ) ;
if ( top < 0 ) {
top = 0 ;
}
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _SCROLL _ELEMENT , [ top / ( height - parentHeight ) ] ) ;
2015-01-28 06:37:21 +00:00
event . stopPropagation ( ) ;
return false ;
} ) ;
timeboxparent . on ( 'touchstart' , function ( event ) {
start = pointerEventToXY ( event ) ;
startTop = Math . abs ( parseInt ( timebox . css ( 'marginTop' ) , 10 ) ) ;
} ) ;
timeboxparent . on ( 'touchmove' , function ( event ) {
if ( start ) {
event . preventDefault ( ) ;
var coord = pointerEventToXY ( event ) ;
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _SCROLL _ELEMENT , [ ( startTop - ( coord . y - start . y ) ) / ( height - parentHeight ) ] ) ;
2015-01-28 06:37:21 +00:00
}
} ) ;
timeboxparent . on ( 'touchend touchcancel' , function ( event ) {
start = false ;
startTop = 0 ;
} ) ;
}
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _RESIZE _SCROLL , [ percent ] ) ;
2015-01-28 06:37:21 +00:00
} ) ;
} ;
2015-01-28 23:03:56 +00:00
var nosetNamespace = function ( ) { } ;
2015-01-28 06:37:21 +00:00
$ . fn . datetimepicker = function ( opt ) {
2015-01-28 23:03:56 +00:00
$ . fn . datetimepicker . setNamespace = nosetNamespace ;
2015-01-28 06:37:21 +00:00
var KEY0 = 48 ,
KEY9 = 57 ,
_KEY0 = 96 ,
_KEY9 = 105 ,
CTRLKEY = 17 ,
DEL = 46 ,
ENTER = 13 ,
ESC = 27 ,
BACKSPACE = 8 ,
ARROWLEFT = 37 ,
ARROWUP = 38 ,
ARROWRIGHT = 39 ,
ARROWDOWN = 40 ,
TAB = 9 ,
F5 = 116 ,
AKEY = 65 ,
CKEY = 67 ,
VKEY = 86 ,
ZKEY = 90 ,
YKEY = 89 ,
ctrlDown = false ,
options = ( $ . isPlainObject ( opt ) || ! opt ) ? $ . extend ( true , { } , default _options , opt ) : $ . extend ( true , { } , default _options ) ,
lazyInitTimer = 0 ,
createDateTimePicker ,
destroyDateTimePicker ,
lazyInit = function ( input ) {
input
2015-01-28 23:03:56 +00:00
. on ( [ XDE _OPEN , XDE _FOCUSIN , XDE _MOUSEDOWN ] . join ( ' ' ) , function initOnActionCallback ( event ) {
if ( input . is ( ':disabled' ) || input . data ( XDC _DATETIMEPICKER ) ) {
2015-01-28 06:37:21 +00:00
return ;
}
clearTimeout ( lazyInitTimer ) ;
lazyInitTimer = setTimeout ( function ( ) {
2015-01-28 23:03:56 +00:00
if ( ! input . data ( XDC _DATETIMEPICKER ) ) {
2015-01-28 06:37:21 +00:00
createDateTimePicker ( input ) ;
}
input
2015-01-28 23:03:56 +00:00
. off ( [ XDE _OPEN , XDE _FOCUSIN , XDE _MOUSEDOWN ] . join ( ' ' ) , initOnActionCallback )
. trigger ( XDE _OPEN ) ;
2015-01-28 06:37:21 +00:00
} , 100 ) ;
} ) ;
} ;
2015-01-28 23:03:56 +00:00
var xdsoft _copyright = '<div class="' + XDC _COPYRIGHT + '"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>' ;
2015-01-28 06:37:21 +00:00
createDateTimePicker = function ( input ) {
2015-01-28 23:03:56 +00:00
var datetimepicker = $ ( '<div ' + ( options . id ? 'id="' + options . id + '"' : '' ) + ' ' + ( options . style ? 'style="' + options . style + '"' : '' ) + ' class="' + XDC _DATETIMEPICKER + ' ' + NS + '_' + options . theme + ' ' + XDC _NOSELECT + ' ' + ( options . weeks ? ' ' + XDC _SHOWWEEKS + '' : '' ) + options . className + '"></div>' ) ,
2015-01-28 06:37:21 +00:00
xdsoft _copyright = $ ( xdsoft _copyright ) ,
datepicker = $ ( options . template . datepicker ( ) ) ,
month _picker = $ ( options . template . month _picker ( ) ) ,
calendar = $ ( options . template . calendar ( ) ) ,
timepicker = $ ( options . template . timepicker ( ) ) ,
2015-01-28 23:03:56 +00:00
timeboxparent = timepicker . find ( '.' + XDC _TIME _BOX ) . eq ( 0 ) ,
2015-01-28 06:37:21 +00:00
timebox = $ ( options . template . timebox ( ) ) ,
2015-01-28 23:03:56 +00:00
/ * s c r o l l b a r = $ ( ' < d i v c l a s s = " ' + X D C _ S C R O L L B A R + ' " > < / d i v > ' ) ,
scroller = $ ( '<div class="' + XDC _SCROLLER + '"></div>' ) , * /
2015-01-28 06:37:21 +00:00
monthselect = $ ( options . template . monthselect ( ) ) ,
yearselect = $ ( options . template . yearselect ( ) ) ,
triggerAfterOpen = false ,
XDSoft _datetime ,
//scroll_element,
xchangeTimer ,
timerclick ,
current _time _index ,
setPos ,
timer = 0 ,
timer1 = 0 ,
2015-01-28 23:03:56 +00:00
xd _datetime ;
2015-01-28 06:37:21 +00:00
month _picker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _MONTH + ' span' )
2015-01-28 06:37:21 +00:00
. after ( monthselect ) ;
month _picker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _YEAR + ' span' )
2015-01-28 06:37:21 +00:00
. after ( yearselect ) ;
month _picker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _MONTH + ',.' + XDC _YEAR )
. on ( XDE _MOUSEDOWN , function ( event ) {
var select = $ ( this ) . find ( '.' + XDC _SELECT ) . eq ( 0 ) ,
2015-01-28 06:37:21 +00:00
val = 0 ,
top = 0 ,
visible = select . is ( ':visible' ) ,
items ,
i ;
month _picker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _SELECT )
2015-01-28 06:37:21 +00:00
. hide ( ) ;
2015-01-28 23:03:56 +00:00
if ( xd _datetime . currentTime ) {
val = xd _datetime . currentTime [ $ ( this ) . hasClass ( XDC _MONTH ) ? 'getMonth' : 'getFullYear' ] ( ) ;
2015-01-28 06:37:21 +00:00
}
select [ visible ? 'hide' : 'show' ] ( ) ;
2015-01-28 23:03:56 +00:00
for ( items = select . find ( 'div.' + XDC _OPTION ) , i = 0 ; i < items . length ; i += 1 ) {
2015-01-28 06:37:21 +00:00
if ( items . eq ( i ) . data ( 'value' ) === val ) {
break ;
} else {
top += items [ 0 ] . offsetHeight ;
}
}
select . xdsoftScroller ( top / ( select . children ( ) [ 0 ] . offsetHeight - ( select [ 0 ] . clientHeight ) ) ) ;
event . stopPropagation ( ) ;
return false ;
} ) ;
month _picker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _SELECT )
2015-01-28 06:37:21 +00:00
. xdsoftScroller ( )
2015-01-28 23:03:56 +00:00
. on ( XDE _MOUSEDOWN , function ( event ) {
2015-01-28 06:37:21 +00:00
event . stopPropagation ( ) ;
event . preventDefault ( ) ;
} )
2015-01-28 23:03:56 +00:00
. on ( XDE _MOUSEDOWN , '.' + XDC _OPTION , function ( event ) {
var year = xd _datetime . currentTime . getFullYear ( ) ;
if ( xd _datetime && xd _datetime . currentTime ) {
xd _datetime . currentTime [ $ ( this ) . parent ( ) . parent ( ) . hasClass ( XDC _MONTHSELECT ) ? 'setMonth' : 'setFullYear' ] ( $ ( this ) . data ( 'value' ) ) ;
2015-01-28 06:37:21 +00:00
}
$ ( this ) . parent ( ) . parent ( ) . hide ( ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _XCHANGE ) ;
2015-01-28 06:37:21 +00:00
if ( options . onChangeMonth && $ . isFunction ( options . onChangeMonth ) ) {
2015-01-28 23:03:56 +00:00
options . onChangeMonth . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) ) ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
if ( year !== xd _datetime . currentTime . getFullYear ( ) && $ . isFunction ( options . onChangeYear ) ) {
options . onChangeYear . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) ) ;
2015-01-28 06:37:21 +00:00
}
} ) ;
datetimepicker . setOptions = function ( _options ) {
options = $ . extend ( true , { } , options , _options ) ;
if ( _options . allowTimes && $ . isArray ( _options . allowTimes ) && _options . allowTimes . length ) {
options . allowTimes = $ . extend ( true , [ ] , _options . allowTimes ) ;
}
if ( _options . weekends && $ . isArray ( _options . weekends ) && _options . weekends . length ) {
options . weekends = $ . extend ( true , [ ] , _options . weekends ) ;
}
if ( _options . disabledDates && $ . isArray ( _options . disabledDates ) && _options . disabledDates . length ) {
options . disabledDates = $ . extend ( true , [ ] , _options . disabledDates ) ;
}
if ( ( options . open || options . opened ) && ( ! options . inline ) ) {
2015-01-28 23:03:56 +00:00
input . trigger ( XDE _OPEN ) ;
2015-01-28 06:37:21 +00:00
}
if ( options . inline ) {
triggerAfterOpen = true ;
2015-01-28 23:03:56 +00:00
datetimepicker . addClass ( XDC _INLINE ) ;
2015-01-28 06:37:21 +00:00
input . after ( datetimepicker ) . hide ( ) ;
}
if ( options . inverseButton ) {
2015-01-28 23:03:56 +00:00
options . next = XDC _PREV ;
options . prev = XDC _NEXT ;
2015-01-28 06:37:21 +00:00
}
if ( options . datepicker ) {
datepicker . addClass ( 'active' ) ;
} else {
datepicker . removeClass ( 'active' ) ;
}
if ( options . timepicker ) {
timepicker . addClass ( 'active' ) ;
} else {
timepicker . removeClass ( 'active' ) ;
}
if ( options . value ) {
if ( input && input . val ) {
input . val ( options . value ) ;
}
2015-01-28 23:03:56 +00:00
xd _datetime . setCurrentTime ( options . value ) ;
2015-01-28 06:37:21 +00:00
}
setDayOfWeekStart ( options ) ;
if ( ! options . timepickerScrollbar ) {
timeboxparent . xdsoftScroller ( 'hide' ) ;
}
if ( options . minDate && /^-(.*)$/ . test ( options . minDate ) ) {
2015-01-28 23:03:56 +00:00
options . minDate = xd _datetime . strToDateTime ( options . minDate ) . dateFormat ( options . formatDate ) ;
2015-01-28 06:37:21 +00:00
}
if ( options . maxDate && /^\+(.*)$/ . test ( options . maxDate ) ) {
2015-01-28 23:03:56 +00:00
options . maxDate = xd _datetime . strToDateTime ( options . maxDate ) . dateFormat ( options . formatDate ) ;
2015-01-28 06:37:21 +00:00
}
month _picker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _TODAY _BUTTON )
2015-01-28 06:37:21 +00:00
. css ( 'visibility' , ! options . todayButton ? 'hidden' : 'visible' ) ;
if ( options . mask ) {
var e ,
getCaretPos = function ( input ) {
try {
if ( document . selection && document . selection . createRange ) {
var range = document . selection . createRange ( ) ;
return range . getBookmark ( ) . charCodeAt ( 2 ) - 2 ;
}
if ( input . setSelectionRange ) {
return input . selectionStart ;
}
} catch ( e ) {
return 0 ;
}
} ,
setCaretPos = function ( node , pos ) {
node = ( typeof node === "string" || node instanceof String ) ? document . getElementById ( node ) : node ;
if ( ! node ) {
return false ;
}
if ( node . createTextRange ) {
var textRange = node . createTextRange ( ) ;
textRange . collapse ( true ) ;
textRange . moveEnd ( 'character' , pos ) ;
textRange . moveStart ( 'character' , pos ) ;
textRange . select ( ) ;
return true ;
}
if ( node . setSelectionRange ) {
node . setSelectionRange ( pos , pos ) ;
return true ;
}
return false ;
} ,
isValidValue = function ( mask , value ) {
var reg = mask
. replace ( /([\[\]\/\{\}\(\)\-\.\+]{1})/g , '\\$1' )
. replace ( /_/g , '{digit+}' )
. replace ( /([0-9]{1})/g , '{digit$1}' )
. replace ( /\{digit([0-9]{1})\}/g , '[0-$1_]{1}' )
. replace ( /\{digit[\+]\}/g , '[0-9_]{1}' ) ;
return ( new RegExp ( reg ) ) . test ( value ) ;
} ;
2015-01-28 23:03:56 +00:00
input . off ( XDE _KEYDOWN ) ;
2015-01-28 06:37:21 +00:00
if ( options . mask === true ) {
options . mask = options . format
. replace ( /Y/g , '9999' )
. replace ( /F/g , '9999' )
. replace ( /m/g , '19' )
. replace ( /d/g , '39' )
. replace ( /H/g , '29' )
. replace ( /i/g , '59' )
. replace ( /s/g , '59' ) ;
}
if ( $ . type ( options . mask ) === 'string' ) {
if ( ! isValidValue ( options . mask , input . val ( ) ) ) {
input . val ( options . mask . replace ( /[0-9]/g , '_' ) ) ;
}
2015-01-28 23:03:56 +00:00
input . on ( XDE _KEYDOWN , function ( event ) {
2015-01-28 06:37:21 +00:00
var val = this . value ,
key = event . which ,
pos ,
digit ;
if ( ( ( key >= KEY0 && key <= KEY9 ) || ( key >= _KEY0 && key <= _KEY9 ) ) || ( key === BACKSPACE || key === DEL ) ) {
pos = getCaretPos ( this ) ;
digit = ( key !== BACKSPACE && key !== DEL ) ? String . fromCharCode ( ( _KEY0 <= key && key <= _KEY9 ) ? key - KEY0 : key ) : '_' ;
if ( ( key === BACKSPACE || key === DEL ) && pos ) {
pos -= 1 ;
digit = '_' ;
}
while ( /[^0-9_]/ . test ( options . mask . substr ( pos , 1 ) ) && pos < options . mask . length && pos > 0 ) {
pos += ( key === BACKSPACE || key === DEL ) ? - 1 : 1 ;
}
val = val . substr ( 0 , pos ) + digit + val . substr ( pos + 1 ) ;
if ( $ . trim ( val ) === '' ) {
val = options . mask . replace ( /[0-9]/g , '_' ) ;
} else {
if ( pos === options . mask . length ) {
event . preventDefault ( ) ;
return false ;
}
}
pos += ( key === BACKSPACE || key === DEL ) ? 0 : 1 ;
while ( /[^0-9_]/ . test ( options . mask . substr ( pos , 1 ) ) && pos < options . mask . length && pos > 0 ) {
pos += ( key === BACKSPACE || key === DEL ) ? - 1 : 1 ;
}
if ( isValidValue ( options . mask , val ) ) {
this . value = val ;
setCaretPos ( this , pos ) ;
} else if ( $ . trim ( val ) === '' ) {
this . value = options . mask . replace ( /[0-9]/g , '_' ) ;
} else {
2015-01-28 23:03:56 +00:00
input . trigger ( XDE _ERROR _INPUT ) ;
2015-01-28 06:37:21 +00:00
}
} else {
if ( ( [ AKEY , CKEY , VKEY , ZKEY , YKEY ] . indexOf ( key ) !== - 1 && ctrlDown ) || [ ESC , ARROWUP , ARROWDOWN , ARROWLEFT , ARROWRIGHT , F5 , CTRLKEY , TAB , ENTER ] . indexOf ( key ) !== - 1 ) {
return true ;
}
}
event . preventDefault ( ) ;
return false ;
} ) ;
}
}
if ( options . validateOnBlur ) {
input
2015-01-28 23:03:56 +00:00
. off ( XDE _BLUR )
. on ( XDE _BLUR , function ( ) {
2015-01-28 06:37:21 +00:00
if ( options . allowBlank && ! $ . trim ( $ ( this ) . val ( ) ) . length ) {
$ ( this ) . val ( null ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . data ( XDC _DATETIME ) . empty ( ) ;
2015-01-28 06:37:21 +00:00
} else if ( ! Date . parseDate ( $ ( this ) . val ( ) , options . format ) ) {
2015-01-28 23:03:56 +00:00
$ ( this ) . val ( ( xd _datetime . now ( ) ) . dateFormat ( options . format ) ) ;
datetimepicker . data ( XDC _DATETIME ) . setCurrentTime ( $ ( this ) . val ( ) ) ;
2015-01-28 06:37:21 +00:00
} else {
2015-01-28 23:03:56 +00:00
datetimepicker . data ( XDC _DATETIME ) . setCurrentTime ( $ ( this ) . val ( ) ) ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _CHANGEDATETIME ) ;
2015-01-28 06:37:21 +00:00
} ) ;
}
options . dayOfWeekStartPrev = ( options . dayOfWeekStart === 0 ) ? 6 : options . dayOfWeekStart - 1 ;
datetimepicker
2015-01-28 23:03:56 +00:00
. trigger ( XDE _XCHANGE )
. trigger ( XDE _AFTEROPEN ) ;
2015-01-28 06:37:21 +00:00
} ;
datetimepicker
. data ( 'options' , options )
2015-01-28 23:03:56 +00:00
. on ( XDE _MOUSEDOWN , function ( event ) {
2015-01-28 06:37:21 +00:00
event . stopPropagation ( ) ;
event . preventDefault ( ) ;
yearselect . hide ( ) ;
monthselect . hide ( ) ;
return false ;
} ) ;
2015-01-28 23:03:56 +00:00
//scroll_element = timepicker.find('.'+XDC_TIME_BOX);
2015-01-28 06:37:21 +00:00
timeboxparent . append ( timebox ) ;
timeboxparent . xdsoftScroller ( ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . on ( XDE _AFTEROPEN , function ( ) {
2015-01-28 06:37:21 +00:00
timeboxparent . xdsoftScroller ( ) ;
} ) ;
datetimepicker
. append ( datepicker )
. append ( timepicker ) ;
if ( options . withoutCopyright !== true ) {
datetimepicker
. append ( xdsoft _copyright ) ;
}
datepicker
. append ( month _picker )
. append ( calendar ) ;
$ ( options . parentID )
. append ( datetimepicker ) ;
XDSoft _datetime = function ( ) {
var _this = this ;
_this . now = function ( norecursion ) {
var d = new Date ( ) ,
date ,
time ;
if ( ! norecursion && options . defaultDate ) {
date = _this . strToDate ( options . defaultDate ) ;
d . setFullYear ( date . getFullYear ( ) ) ;
d . setMonth ( date . getMonth ( ) ) ;
d . setDate ( date . getDate ( ) ) ;
}
if ( options . yearOffset ) {
d . setFullYear ( d . getFullYear ( ) + options . yearOffset ) ;
}
if ( ! norecursion && options . defaultTime ) {
time = _this . strtotime ( options . defaultTime ) ;
d . setHours ( time . getHours ( ) ) ;
d . setMinutes ( time . getMinutes ( ) ) ;
}
return d ;
} ;
_this . isValidDate = function ( d ) {
if ( Object . prototype . toString . call ( d ) !== "[object Date]" ) {
return false ;
}
return ! isNaN ( d . getTime ( ) ) ;
} ;
_this . setCurrentTime = function ( dTime ) {
_this . currentTime = ( typeof dTime === 'string' ) ? _this . strToDateTime ( dTime ) : _this . isValidDate ( dTime ) ? dTime : _this . now ( ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _XCHANGE ) ;
2015-01-28 06:37:21 +00:00
} ;
_this . empty = function ( ) {
_this . currentTime = null ;
} ;
_this . getCurrentTime = function ( dTime ) {
return _this . currentTime ;
} ;
_this . nextMonth = function ( ) {
var month = _this . currentTime . getMonth ( ) + 1 ,
year ;
if ( month === 12 ) {
_this . currentTime . setFullYear ( _this . currentTime . getFullYear ( ) + 1 ) ;
month = 0 ;
}
year = _this . currentTime . getFullYear ( ) ;
_this . currentTime . setDate (
Math . min (
new Date ( _this . currentTime . getFullYear ( ) , month + 1 , 0 ) . getDate ( ) ,
_this . currentTime . getDate ( )
)
) ;
_this . currentTime . setMonth ( month ) ;
if ( options . onChangeMonth && $ . isFunction ( options . onChangeMonth ) ) {
2015-01-28 23:03:56 +00:00
options . onChangeMonth . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) ) ;
2015-01-28 06:37:21 +00:00
}
if ( year !== _this . currentTime . getFullYear ( ) && $ . isFunction ( options . onChangeYear ) ) {
2015-01-28 23:03:56 +00:00
options . onChangeYear . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) ) ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _XCHANGE ) ;
2015-01-28 06:37:21 +00:00
return month ;
} ;
_this . prevMonth = function ( ) {
var month = _this . currentTime . getMonth ( ) - 1 ;
if ( month === - 1 ) {
_this . currentTime . setFullYear ( _this . currentTime . getFullYear ( ) - 1 ) ;
month = 11 ;
}
_this . currentTime . setDate (
Math . min (
new Date ( _this . currentTime . getFullYear ( ) , month + 1 , 0 ) . getDate ( ) ,
_this . currentTime . getDate ( )
)
) ;
_this . currentTime . setMonth ( month ) ;
if ( options . onChangeMonth && $ . isFunction ( options . onChangeMonth ) ) {
2015-01-28 23:03:56 +00:00
options . onChangeMonth . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) ) ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _XCHANGE ) ;
2015-01-28 06:37:21 +00:00
return month ;
} ;
_this . getWeekOfYear = function ( datetime ) {
var onejan = new Date ( datetime . getFullYear ( ) , 0 , 1 ) ;
return Math . ceil ( ( ( ( datetime - onejan ) / 86400000 ) + onejan . getDay ( ) + 1 ) / 7 ) ;
} ;
_this . strToDateTime = function ( sDateTime ) {
var tmpDate = [ ] ,
timeOffset , currentTime ;
if ( sDateTime && sDateTime instanceof Date && _this . isValidDate ( sDateTime ) ) {
return sDateTime ;
}
tmpDate = /^(\+|\-)(.*)$/ . exec ( sDateTime ) ;
if ( tmpDate ) {
tmpDate [ 2 ] = Date . parseDate ( tmpDate [ 2 ] , options . formatDate ) ;
}
if ( tmpDate && tmpDate [ 2 ] ) {
timeOffset = tmpDate [ 2 ] . getTime ( ) - ( tmpDate [ 2 ] . getTimezoneOffset ( ) ) * 60000 ;
2015-01-28 23:03:56 +00:00
currentTime = new Date ( ( xd _datetime . now ( ) ) . getTime ( ) + parseInt ( tmpDate [ 1 ] + '1' , 10 ) * timeOffset ) ;
2015-01-28 06:37:21 +00:00
} else {
currentTime = sDateTime ? Date . parseDate ( sDateTime , options . format ) : _this . now ( ) ;
}
if ( ! _this . isValidDate ( currentTime ) ) {
currentTime = _this . now ( ) ;
}
return currentTime ;
} ;
_this . strToDate = function ( sDate ) {
if ( sDate && sDate instanceof Date && _this . isValidDate ( sDate ) ) {
return sDate ;
}
var currentTime = sDate ? Date . parseDate ( sDate , options . formatDate ) : _this . now ( true ) ;
if ( ! _this . isValidDate ( currentTime ) ) {
currentTime = _this . now ( true ) ;
}
return currentTime ;
} ;
_this . strtotime = function ( sTime ) {
if ( sTime && sTime instanceof Date && _this . isValidDate ( sTime ) ) {
return sTime ;
}
var currentTime = sTime ? Date . parseDate ( sTime , options . formatTime ) : _this . now ( true ) ;
if ( ! _this . isValidDate ( currentTime ) ) {
currentTime = _this . now ( true ) ;
}
return currentTime ;
} ;
_this . str = function ( ) {
return _this . currentTime . dateFormat ( options . format ) ;
} ;
_this . currentTime = this . now ( ) ;
} ;
2015-01-28 23:03:56 +00:00
xd _datetime = new XDSoft _datetime ( ) ;
2015-01-28 06:37:21 +00:00
month _picker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _TODAY _BUTTON )
. on ( XDE _MOUSEDOWN , function ( ) {
2015-01-28 06:37:21 +00:00
datetimepicker . data ( 'changed' , true ) ;
2015-01-28 23:03:56 +00:00
xd _datetime . setCurrentTime ( 0 ) ;
datetimepicker . trigger ( XDE _AFTEROPEN ) ;
} ) . on ( XDE _DBLCLICK , function ( ) {
input . val ( xd _datetime . str ( ) ) ;
datetimepicker . trigger ( XDE _CLOSE ) ;
2015-01-28 06:37:21 +00:00
} ) ;
month _picker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _PREV + ',.' + XDC _NEXT )
. on ( XDE _MOUSEDOWN , function ( ) {
2015-01-28 06:37:21 +00:00
var $this = $ ( this ) ,
timer = 0 ,
stop = false ;
( function arguments _callee1 ( v ) {
2015-01-28 23:03:56 +00:00
var month = xd _datetime . currentTime . getMonth ( ) ;
2015-01-28 06:37:21 +00:00
if ( $this . hasClass ( options . next ) ) {
2015-01-28 23:03:56 +00:00
xd _datetime . nextMonth ( ) ;
2015-01-28 06:37:21 +00:00
} else if ( $this . hasClass ( options . prev ) ) {
2015-01-28 23:03:56 +00:00
xd _datetime . prevMonth ( ) ;
2015-01-28 06:37:21 +00:00
}
if ( options . monthChangeSpinner ) {
if ( ! stop ) {
timer = setTimeout ( arguments _callee1 , v || 100 ) ;
}
}
} ( 500 ) ) ;
2015-01-28 23:03:56 +00:00
$ ( [ document . body , window ] ) . on ( XDE _MOUSEUP , function arguments _callee2 ( ) {
2015-01-28 06:37:21 +00:00
clearTimeout ( timer ) ;
stop = true ;
2015-01-28 23:03:56 +00:00
$ ( [ document . body , window ] ) . off ( XDE _MOUSEUP , arguments _callee2 ) ;
2015-01-28 06:37:21 +00:00
} ) ;
} ) ;
timepicker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _PREV + ',.' + XDC _NEXT )
. on ( XDE _MOUSEDOWN , function ( ) {
2015-01-28 06:37:21 +00:00
var $this = $ ( this ) ,
timer = 0 ,
stop = false ,
period = 110 ;
( function arguments _callee4 ( v ) {
var pheight = timeboxparent [ 0 ] . clientHeight ,
height = timebox [ 0 ] . offsetHeight ,
top = Math . abs ( parseInt ( timebox . css ( 'marginTop' ) , 10 ) ) ;
if ( $this . hasClass ( options . next ) && ( height - pheight ) - options . timeHeightInTimePicker >= top ) {
timebox . css ( 'marginTop' , '-' + ( top + options . timeHeightInTimePicker ) + 'px' ) ;
} else if ( $this . hasClass ( options . prev ) && top - options . timeHeightInTimePicker >= 0 ) {
timebox . css ( 'marginTop' , '-' + ( top - options . timeHeightInTimePicker ) + 'px' ) ;
}
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _SCROLL _ELEMENT , [ Math . abs ( parseInt ( timebox . css ( 'marginTop' ) , 10 ) / ( height - pheight ) ) ] ) ;
2015-01-28 06:37:21 +00:00
period = ( period > 10 ) ? 10 : period - 10 ;
if ( ! stop ) {
timer = setTimeout ( arguments _callee4 , v || period ) ;
}
} ( 500 ) ) ;
2015-01-28 23:03:56 +00:00
$ ( [ document . body , window ] ) . on ( XDE _MOUSEUP , function arguments _callee5 ( ) {
2015-01-28 06:37:21 +00:00
clearTimeout ( timer ) ;
stop = true ;
$ ( [ document . body , window ] )
2015-01-28 23:03:56 +00:00
. off ( XDE _MOUSEUP , arguments _callee5 ) ;
2015-01-28 06:37:21 +00:00
} ) ;
} ) ;
xchangeTimer = 0 ;
// base handler - generating a calendar and timepicker
datetimepicker
2015-01-28 23:03:56 +00:00
. on ( XDE _XCHANGE , function ( event ) {
2015-01-28 06:37:21 +00:00
clearTimeout ( xchangeTimer ) ;
xchangeTimer = setTimeout ( function ( ) {
var table = '' ,
2015-01-28 23:03:56 +00:00
start = new Date ( xd _datetime . currentTime . getFullYear ( ) , xd _datetime . currentTime . getMonth ( ) , 1 , 12 , 0 , 0 ) ,
2015-01-28 06:37:21 +00:00
i = 0 ,
j ,
2015-01-28 23:03:56 +00:00
today = xd _datetime . now ( ) ,
2015-01-28 06:37:21 +00:00
maxDate = false ,
minDate = false ,
d ,
y ,
m ,
w ,
classes = [ ] ,
customDateSettings ,
newRow = true ,
time = '' ,
h = '' ,
line _time ;
while ( start . getDay ( ) !== options . dayOfWeekStart ) {
start . setDate ( start . getDate ( ) - 1 ) ;
}
table += '<table><thead><tr>' ;
if ( options . weeks ) {
table += '<th></th>' ;
}
for ( j = 0 ; j < 7 ; j += 1 ) {
table += '<th>' + getI18n ( options . lang , 'dayOfWeek' ) [ ( j + options . dayOfWeekStart ) % 7 ] + '</th>' ;
}
table += '</tr></thead>' ;
table += '<tbody>' ;
if ( options . maxDate !== false ) {
2015-01-28 23:03:56 +00:00
maxDate = xd _datetime . strToDate ( options . maxDate ) ;
2015-01-28 06:37:21 +00:00
maxDate = new Date ( maxDate . getFullYear ( ) , maxDate . getMonth ( ) , maxDate . getDate ( ) , 23 , 59 , 59 , 999 ) ;
}
if ( options . minDate !== false ) {
2015-01-28 23:03:56 +00:00
minDate = xd _datetime . strToDate ( options . minDate ) ;
2015-01-28 06:37:21 +00:00
minDate = new Date ( minDate . getFullYear ( ) , minDate . getMonth ( ) , minDate . getDate ( ) ) ;
}
2015-01-28 23:03:56 +00:00
while ( i < xd _datetime . currentTime . countDaysInMonth ( ) || start . getDay ( ) !== options . dayOfWeekStart || xd _datetime . currentTime . getMonth ( ) === start . getMonth ( ) ) {
2015-01-28 06:37:21 +00:00
classes = [ ] ;
i += 1 ;
d = start . getDate ( ) ;
y = start . getFullYear ( ) ;
m = start . getMonth ( ) ;
2015-01-28 23:03:56 +00:00
w = xd _datetime . getWeekOfYear ( start ) ;
2015-01-28 06:37:21 +00:00
2015-01-28 23:03:56 +00:00
classes . push ( XDC _DATE ) ;
2015-01-28 06:37:21 +00:00
if ( options . beforeShowDay && $ . isFunction ( options . beforeShowDay . call ) ) {
customDateSettings = options . beforeShowDay . call ( datetimepicker , start ) ;
} else {
customDateSettings = null ;
}
if ( ( maxDate !== false && start > maxDate ) || ( minDate !== false && start < minDate ) || ( customDateSettings && customDateSettings [ 0 ] === false ) ) {
2015-01-28 23:03:56 +00:00
classes . push ( XDC _DISABLED ) ;
2015-01-28 06:37:21 +00:00
} else if ( options . disabledDates . indexOf ( start . dateFormat ( options . formatDate ) ) !== - 1 ) {
2015-01-28 23:03:56 +00:00
classes . push ( XDC _DISABLED ) ;
2015-01-28 06:37:21 +00:00
}
if ( customDateSettings && customDateSettings [ 1 ] !== "" ) {
classes . push ( customDateSettings [ 1 ] ) ;
}
2015-01-28 23:03:56 +00:00
if ( xd _datetime . currentTime . getMonth ( ) !== m ) {
classes . push ( XDC _OTHER _MONTH ) ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
if ( ( options . defaultSelect || datetimepicker . data ( 'changed' ) ) && xd _datetime . currentTime . dateFormat ( options . formatDate ) === start . dateFormat ( options . formatDate ) ) {
classes . push ( XDC _CURRENT ) ;
2015-01-28 06:37:21 +00:00
}
if ( today . dateFormat ( options . formatDate ) === start . dateFormat ( options . formatDate ) ) {
2015-01-28 23:03:56 +00:00
classes . push ( XDC _TODAY ) ;
2015-01-28 06:37:21 +00:00
}
if ( start . getDay ( ) === 0 || start . getDay ( ) === 6 || ~ options . weekends . indexOf ( start . dateFormat ( options . formatDate ) ) ) {
2015-01-28 23:03:56 +00:00
classes . push ( XDC _WEEKEND ) ;
2015-01-28 06:37:21 +00:00
}
if ( options . beforeShowDay && $ . isFunction ( options . beforeShowDay ) ) {
classes . push ( options . beforeShowDay ( start ) ) ;
}
if ( newRow ) {
table += '<tr>' ;
newRow = false ;
if ( options . weeks ) {
table += '<th>' + w + '</th>' ;
}
}
2015-01-28 23:03:56 +00:00
table += '<td data-date="' + d + '" data-month="' + m + '" data-year="' + y + '"' + ' class="' + XDC _DATE + ' ' + XDC _DAY _OF _WEEK + '' + start . getDay ( ) + ' ' + classes . join ( ' ' ) + '">' +
2015-01-28 06:37:21 +00:00
'<div>' + d + '</div>' +
'</td>' ;
if ( start . getDay ( ) === options . dayOfWeekStartPrev ) {
table += '</tr>' ;
newRow = true ;
}
start . setDate ( d + 1 ) ;
}
table += '</tbody></table>' ;
calendar . html ( table ) ;
2015-01-28 23:03:56 +00:00
month _picker . find ( '.' + XDC _LABEL + ' span' ) . eq ( 0 ) . text ( getI18n ( options . lang , 'months' ) [ xd _datetime . currentTime . getMonth ( ) ] ) ;
month _picker . find ( '.' + XDC _LABEL + ' span' ) . eq ( 1 ) . text ( xd _datetime . currentTime . getFullYear ( ) ) ;
2015-01-28 06:37:21 +00:00
// generate timebox
time = '' ;
h = '' ;
m = '' ;
line _time = function line _time ( h , m ) {
2015-01-28 23:03:56 +00:00
var now = xd _datetime . now ( ) ;
2015-01-28 06:37:21 +00:00
now . setHours ( h ) ;
h = parseInt ( now . getHours ( ) , 10 ) ;
now . setMinutes ( m ) ;
m = parseInt ( now . getMinutes ( ) , 10 ) ;
2015-01-28 23:03:56 +00:00
var optionDateTime = new Date ( xd _datetime . currentTime ) ;
2015-01-28 06:37:21 +00:00
optionDateTime . setHours ( h ) ;
optionDateTime . setMinutes ( m ) ;
classes = [ ] ;
2015-01-28 23:03:56 +00:00
if ( ( options . minDateTime !== false && options . minDateTime > optionDateTime ) || ( options . maxTime !== false && xd _datetime . strtotime ( options . maxTime ) . getTime ( ) < now . getTime ( ) ) || ( options . minTime !== false && xd _datetime . strtotime ( options . minTime ) . getTime ( ) > now . getTime ( ) ) ) {
classes . push ( XDC _DISABLED ) ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
if ( ( options . initTime || options . defaultSelect || datetimepicker . data ( 'changed' ) ) && parseInt ( xd _datetime . currentTime . getHours ( ) , 10 ) === parseInt ( h , 10 ) && ( options . step > 59 || Math [ options . roundTime ] ( xd _datetime . currentTime . getMinutes ( ) / options . step ) * options . step === parseInt ( m , 10 ) ) ) {
2015-01-28 06:37:21 +00:00
if ( options . defaultSelect || datetimepicker . data ( 'changed' ) ) {
2015-01-28 23:03:56 +00:00
classes . push ( XDC _CURRENT ) ;
2015-01-28 06:37:21 +00:00
} else if ( options . initTime ) {
2015-01-28 23:03:56 +00:00
classes . push ( XDC _INIT _TIME ) ;
2015-01-28 06:37:21 +00:00
}
}
if ( parseInt ( today . getHours ( ) , 10 ) === parseInt ( h , 10 ) && parseInt ( today . getMinutes ( ) , 10 ) === parseInt ( m , 10 ) ) {
2015-01-28 23:03:56 +00:00
classes . push ( XDC _TODAY ) ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
time += '<div class="' + XDC _TIME + ' ' + classes . join ( ' ' ) + '" data-hour="' + h + '" data-minute="' + m + '">' + now . dateFormat ( options . formatTime ) + '</div>' ;
2015-01-28 06:37:21 +00:00
} ;
if ( ! options . allowTimes || ! $ . isArray ( options . allowTimes ) || ! options . allowTimes . length ) {
for ( i = 0 , j = 0 ; i < ( options . hours12 ? 12 : 24 ) ; i += 1 ) {
for ( j = 0 ; j < 60 ; j += options . step ) {
h = ( i < 10 ? '0' : '' ) + i ;
m = ( j < 10 ? '0' : '' ) + j ;
line _time ( h , m ) ;
}
}
} else {
for ( i = 0 ; i < options . allowTimes . length ; i += 1 ) {
2015-01-28 23:03:56 +00:00
h = xd _datetime . strtotime ( options . allowTimes [ i ] ) . getHours ( ) ;
m = xd _datetime . strtotime ( options . allowTimes [ i ] ) . getMinutes ( ) ;
2015-01-28 06:37:21 +00:00
line _time ( h , m ) ;
}
}
timebox . html ( time ) ;
opt = '' ;
i = 0 ;
for ( i = parseInt ( options . yearStart , 10 ) + options . yearOffset ; i <= parseInt ( options . yearEnd , 10 ) + options . yearOffset ; i += 1 ) {
2015-01-28 23:03:56 +00:00
opt += '<div class="' + XDC _OPTION + ' ' + ( xd _datetime . currentTime . getFullYear ( ) === i ? XDC _CURRENT : '' ) + '" data-value="' + i + '">' + i + '</div>' ;
2015-01-28 06:37:21 +00:00
}
yearselect . children ( ) . eq ( 0 )
. html ( opt ) ;
for ( i = 0 , opt = '' ; i <= 11 ; i += 1 ) {
2015-01-28 23:03:56 +00:00
opt += '<div class="' + XDC _OPTION + ' ' + ( xd _datetime . currentTime . getMonth ( ) === i ? XDC _CURRENT : '' ) + '" data-value="' + i + '">' + getI18n ( options . lang , 'months' ) [ i ] + '</div>' ;
2015-01-28 06:37:21 +00:00
}
monthselect . children ( ) . eq ( 0 ) . html ( opt ) ;
$ ( datetimepicker )
2015-01-28 23:03:56 +00:00
. trigger ( XDE _GENERATE ) ;
2015-01-28 06:37:21 +00:00
} , 10 ) ;
event . stopPropagation ( ) ;
} )
2015-01-28 23:03:56 +00:00
. on ( XDE _AFTEROPEN , function ( ) {
2015-01-28 06:37:21 +00:00
if ( options . timepicker ) {
var classType , pheight , height , top ;
2015-01-28 23:03:56 +00:00
if ( timebox . find ( '.' + XDC _CURRENT ) . length ) {
classType = '.' + XDC _CURRENT ;
} else if ( timebox . find ( '.' + XDC _INIT _TIME ) . length ) {
classType = '.' + XDC _INIT _TIME ;
2015-01-28 06:37:21 +00:00
}
if ( classType ) {
pheight = timeboxparent [ 0 ] . clientHeight ;
height = timebox [ 0 ] . offsetHeight ;
top = timebox . find ( classType ) . index ( ) * options . timeHeightInTimePicker + 1 ;
if ( ( height - pheight ) < top ) {
top = height - pheight ;
}
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _SCROLL _ELEMENT , [ parseInt ( top , 10 ) / ( height - pheight ) ] ) ;
2015-01-28 06:37:21 +00:00
} else {
2015-01-28 23:03:56 +00:00
timeboxparent . trigger ( XDE _SCROLLER _SCROLL _ELEMENT , [ 0 ] ) ;
2015-01-28 06:37:21 +00:00
}
}
} ) ;
timerclick = 0 ;
calendar
2015-01-28 23:03:56 +00:00
. on ( XDE _CLICK , 'td' , function ( xdevent ) {
2015-01-28 06:37:21 +00:00
xdevent . stopPropagation ( ) ; // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap
timerclick += 1 ;
var $this = $ ( this ) ,
2015-01-28 23:03:56 +00:00
currentTime = xd _datetime . currentTime ;
2015-01-28 06:37:21 +00:00
if ( currentTime === undefined || currentTime === null ) {
2015-01-28 23:03:56 +00:00
xd _datetime . currentTime = xd _datetime . now ( ) ;
currentTime = xd _datetime . currentTime ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
if ( $this . hasClass ( XDC _DISABLED ) ) {
2015-01-28 06:37:21 +00:00
return false ;
}
currentTime . setDate ( 1 ) ;
currentTime . setFullYear ( $this . data ( 'year' ) ) ;
currentTime . setMonth ( $this . data ( 'month' ) ) ;
currentTime . setDate ( $this . data ( 'date' ) ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _SELECT , [ currentTime ] ) ;
2015-01-28 06:37:21 +00:00
2015-01-28 23:03:56 +00:00
input . val ( xd _datetime . str ( ) ) ;
2015-01-28 06:37:21 +00:00
if ( ( timerclick > 1 || ( options . closeOnDateSelect === true || ( options . closeOnDateSelect === 0 && ! options . timepicker ) ) ) && ! options . inline ) {
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _CLOSE ) ;
2015-01-28 06:37:21 +00:00
}
if ( options . onSelectDate && $ . isFunction ( options . onSelectDate ) ) {
2015-01-28 23:03:56 +00:00
options . onSelectDate . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) , xdevent ) ;
2015-01-28 06:37:21 +00:00
}
datetimepicker . data ( 'changed' , true ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _XCHANGE ) ;
datetimepicker . trigger ( XDE _CHANGEDATETIME ) ;
2015-01-28 06:37:21 +00:00
setTimeout ( function ( ) {
timerclick = 0 ;
} , 200 ) ;
} ) ;
timebox
2015-01-28 23:03:56 +00:00
. on ( XDE _CLICK , 'div' , function ( xdevent ) {
2015-01-28 06:37:21 +00:00
xdevent . stopPropagation ( ) ;
var $this = $ ( this ) ,
2015-01-28 23:03:56 +00:00
currentTime = xd _datetime . currentTime ;
2015-01-28 06:37:21 +00:00
if ( currentTime === undefined || currentTime === null ) {
2015-01-28 23:03:56 +00:00
xd _datetime . currentTime = xd _datetime . now ( ) ;
currentTime = xd _datetime . currentTime ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
if ( $this . hasClass ( XDC _DISABLED ) ) {
2015-01-28 06:37:21 +00:00
return false ;
}
currentTime . setHours ( $this . data ( 'hour' ) ) ;
currentTime . setMinutes ( $this . data ( 'minute' ) ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _SELECT , [ currentTime ] ) ;
2015-01-28 06:37:21 +00:00
2015-01-28 23:03:56 +00:00
datetimepicker . data ( 'input' ) . val ( xd _datetime . str ( ) ) ;
2015-01-28 06:37:21 +00:00
if ( ! options . inline ) {
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _CLOSE ) ;
2015-01-28 06:37:21 +00:00
}
if ( options . onSelectTime && $ . isFunction ( options . onSelectTime ) ) {
2015-01-28 23:03:56 +00:00
options . onSelectTime . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) , xdevent ) ;
2015-01-28 06:37:21 +00:00
}
datetimepicker . data ( 'changed' , true ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _XCHANGE ) ;
datetimepicker . trigger ( XDE _CHANGEDATETIME ) ;
2015-01-28 06:37:21 +00:00
} ) ;
datepicker
2015-01-28 23:03:56 +00:00
. on ( XDE _MOUSEWHEEL , function ( event ) {
2015-01-28 06:37:21 +00:00
if ( ! options . scrollMonth ) {
return true ;
}
if ( event . deltaY < 0 ) {
2015-01-28 23:03:56 +00:00
xd _datetime . nextMonth ( ) ;
2015-01-28 06:37:21 +00:00
} else {
2015-01-28 23:03:56 +00:00
xd _datetime . prevMonth ( ) ;
2015-01-28 06:37:21 +00:00
}
return false ;
} ) ;
input
2015-01-28 23:03:56 +00:00
. on ( XDE _MOUSEWHEEL , function ( event ) {
2015-01-28 06:37:21 +00:00
if ( ! options . scrollInput ) {
return true ;
}
if ( ! options . datepicker && options . timepicker ) {
2015-01-28 23:03:56 +00:00
current _time _index = timebox . find ( '.' + XDC _CURRENT ) . length ? timebox . find ( '.' + XDC _CURRENT ) . eq ( 0 ) . index ( ) : 0 ;
2015-01-28 06:37:21 +00:00
if ( current _time _index + event . deltaY >= 0 && current _time _index + event . deltaY < timebox . children ( ) . length ) {
current _time _index += event . deltaY ;
}
if ( timebox . children ( ) . eq ( current _time _index ) . length ) {
timebox . children ( ) . eq ( current _time _index ) . trigger ( 'mousedown' ) ;
}
return false ;
}
if ( options . datepicker && ! options . timepicker ) {
datepicker . trigger ( event , [ event . deltaY , event . deltaX , event . deltaY ] ) ;
if ( input . val ) {
2015-01-28 23:03:56 +00:00
input . val ( xd _datetime . str ( ) ) ;
2015-01-28 06:37:21 +00:00
}
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _CHANGEDATETIME ) ;
2015-01-28 06:37:21 +00:00
return false ;
}
} ) ;
datetimepicker
2015-01-28 23:03:56 +00:00
. on ( XDE _CHANGEDATETIME , function ( event ) {
2015-01-28 06:37:21 +00:00
if ( options . onChangeDateTime && $ . isFunction ( options . onChangeDateTime ) ) {
var $input = datetimepicker . data ( 'input' ) ;
2015-01-28 23:03:56 +00:00
options . onChangeDateTime . call ( datetimepicker , xd _datetime . currentTime , $input , event ) ;
2015-01-28 06:37:21 +00:00
delete options . value ;
$input . trigger ( 'change' ) ;
}
} )
2015-01-28 23:03:56 +00:00
. on ( XDE _GENERATE , function ( ) {
2015-01-28 06:37:21 +00:00
if ( options . onGenerate && $ . isFunction ( options . onGenerate ) ) {
2015-01-28 23:03:56 +00:00
options . onGenerate . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) ) ;
2015-01-28 06:37:21 +00:00
}
if ( triggerAfterOpen ) {
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _AFTEROPEN ) ;
2015-01-28 06:37:21 +00:00
triggerAfterOpen = false ;
}
} )
2015-01-28 23:03:56 +00:00
. on ( XDE _CLICK , function ( xdevent ) {
2015-01-28 06:37:21 +00:00
xdevent . stopPropagation ( ) ;
} ) ;
current _time _index = 0 ;
setPos = function ( ) {
var offset = datetimepicker . data ( 'input' ) . offset ( ) ,
top = offset . top + datetimepicker . data ( 'input' ) [ 0 ] . offsetHeight - 1 ,
left = offset . left ,
position = "absolute" ;
if ( options . fixed ) {
top -= $ ( window ) . scrollTop ( ) ;
left -= $ ( window ) . scrollLeft ( ) ;
position = "fixed" ;
} else {
if ( top + datetimepicker [ 0 ] . offsetHeight > $ ( window ) . height ( ) + $ ( window ) . scrollTop ( ) ) {
top = offset . top - datetimepicker [ 0 ] . offsetHeight + 1 ;
}
if ( top < 0 ) {
top = 0 ;
}
if ( left + datetimepicker [ 0 ] . offsetWidth > $ ( window ) . width ( ) ) {
left = $ ( window ) . width ( ) - datetimepicker [ 0 ] . offsetWidth ;
}
}
datetimepicker . css ( {
left : left ,
top : top ,
position : position
} ) ;
} ;
datetimepicker
2015-01-28 23:03:56 +00:00
. on ( XDE _OPEN , function ( event ) {
2015-01-28 06:37:21 +00:00
var onShow = true ;
if ( options . onShow && $ . isFunction ( options . onShow ) ) {
2015-01-28 23:03:56 +00:00
onShow = options . onShow . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) , event ) ;
2015-01-28 06:37:21 +00:00
}
if ( onShow !== false ) {
datetimepicker . show ( ) ;
setPos ( ) ;
$ ( window )
2015-01-28 23:03:56 +00:00
. off ( XDE _RESIZE , setPos )
. on ( XDE _RESIZE , setPos ) ;
2015-01-28 06:37:21 +00:00
if ( options . closeOnWithoutClick ) {
2015-01-28 23:03:56 +00:00
$ ( [ document . body , window ] ) . on ( XDE _MOUSEDOWN , function arguments _callee6 ( ) {
datetimepicker . trigger ( XDE _CLOSE ) ;
$ ( [ document . body , window ] ) . off ( XDE _MOUSEDOWN , arguments _callee6 ) ;
2015-01-28 06:37:21 +00:00
} ) ;
}
}
} )
2015-01-28 23:03:56 +00:00
. on ( XDE _CLOSE , function ( event ) {
2015-01-28 06:37:21 +00:00
var onClose = true ;
month _picker
2015-01-28 23:03:56 +00:00
. find ( '.' + XDC _MONTH + ',.' + XDC _YEAR )
. find ( '.' + XDC _SELECT )
2015-01-28 06:37:21 +00:00
. hide ( ) ;
if ( options . onClose && $ . isFunction ( options . onClose ) ) {
2015-01-28 23:03:56 +00:00
onClose = options . onClose . call ( datetimepicker , xd _datetime . currentTime , datetimepicker . data ( 'input' ) , event ) ;
2015-01-28 06:37:21 +00:00
}
if ( onClose !== false && ! options . opened && ! options . inline ) {
datetimepicker . hide ( ) ;
}
event . stopPropagation ( ) ;
} )
2015-01-28 23:03:56 +00:00
. on ( XDE _TOGGLE , function ( event ) {
2015-01-28 06:37:21 +00:00
if ( datetimepicker . is ( ':visible' ) ) {
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _CLOSE ) ;
2015-01-28 06:37:21 +00:00
} else {
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _OPEN ) ;
2015-01-28 06:37:21 +00:00
}
} )
. data ( 'input' , input ) ;
timer = 0 ;
timer1 = 0 ;
2015-01-28 23:03:56 +00:00
datetimepicker . data ( XDC _DATETIME , xd _datetime ) ;
2015-01-28 06:37:21 +00:00
datetimepicker . setOptions ( options ) ;
function getCurrentValue ( ) {
var ct = false ,
time ;
if ( options . startDate ) {
2015-01-28 23:03:56 +00:00
ct = xd _datetime . strToDate ( options . startDate ) ;
2015-01-28 06:37:21 +00:00
} else {
ct = options . value || ( ( input && input . val && input . val ( ) ) ? input . val ( ) : '' ) ;
if ( ct ) {
2015-01-28 23:03:56 +00:00
ct = xd _datetime . strToDateTime ( ct ) ;
2015-01-28 06:37:21 +00:00
} else if ( options . defaultDate ) {
2015-01-28 23:03:56 +00:00
ct = xd _datetime . strToDate ( options . defaultDate ) ;
2015-01-28 06:37:21 +00:00
if ( options . defaultTime ) {
2015-01-28 23:03:56 +00:00
time = xd _datetime . strtotime ( options . defaultTime ) ;
2015-01-28 06:37:21 +00:00
ct . setHours ( time . getHours ( ) ) ;
ct . setMinutes ( time . getMinutes ( ) ) ;
}
}
}
2015-01-28 23:03:56 +00:00
if ( ct && xd _datetime . isValidDate ( ct ) ) {
2015-01-28 06:37:21 +00:00
datetimepicker . data ( 'changed' , true ) ;
} else {
ct = '' ;
}
return ct || 0 ;
}
2015-01-28 23:03:56 +00:00
xd _datetime . setCurrentTime ( getCurrentValue ( ) ) ;
2015-01-28 06:37:21 +00:00
input
2015-01-28 23:03:56 +00:00
. data ( XDC _DATETIMEPICKER , datetimepicker )
. on ( [ XDE _OPEN , XDE _FOCUSIN , XDE _MOUSEDOWN ] . join ( ' ' ) , function ( event ) {
if ( input . is ( ':disabled' ) || ( input . data ( XDC _DATETIMEPICKER ) . is ( ':visible' ) && options . closeOnInputClick ) ) {
2015-01-28 06:37:21 +00:00
return ;
}
clearTimeout ( timer ) ;
timer = setTimeout ( function ( ) {
if ( input . is ( ':disabled' ) ) {
return ;
}
triggerAfterOpen = true ;
2015-01-28 23:03:56 +00:00
xd _datetime . setCurrentTime ( getCurrentValue ( ) ) ;
2015-01-28 06:37:21 +00:00
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _OPEN ) ;
2015-01-28 06:37:21 +00:00
} , 100 ) ;
} )
2015-01-28 23:03:56 +00:00
. on ( XDE _KEYDOWN , function ( event ) {
2015-01-28 06:37:21 +00:00
var val = this . value ,
elementSelector ,
key = event . which ;
if ( [ ENTER ] . indexOf ( key ) !== - 1 && options . enterLikeTab ) {
elementSelector = $ ( "input:visible,textarea:visible" ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _CLOSE ) ;
2015-01-28 06:37:21 +00:00
elementSelector . eq ( elementSelector . index ( this ) + 1 ) . focus ( ) ;
return false ;
}
if ( [ TAB ] . indexOf ( key ) !== - 1 ) {
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _CLOSE ) ;
2015-01-28 06:37:21 +00:00
return true ;
}
} ) ;
} ;
destroyDateTimePicker = function ( input ) {
2015-01-28 23:03:56 +00:00
var datetimepicker = input . data ( XDC _DATETIMEPICKER ) ;
2015-01-28 06:37:21 +00:00
if ( datetimepicker ) {
2015-01-28 23:03:56 +00:00
datetimepicker . data ( XDC _DATETIME , null ) ;
2015-01-28 06:37:21 +00:00
datetimepicker . remove ( ) ;
input
2015-01-28 23:03:56 +00:00
. data ( XDC _DATETIMEPICKER , null )
. off ( '.' + NS ) ;
$ ( window ) . off ( XDE _RESIZE ) ;
$ ( [ window , document . body ] ) . off ( XDE _MOUSEDOWN ) ;
2015-01-28 06:37:21 +00:00
if ( input . unmousewheel ) {
input . unmousewheel ( ) ;
}
}
} ;
$ ( document )
2015-01-28 23:03:56 +00:00
. off ( [ XDE _CTRL _KEYDOWN , XDE _CTRL _KEYUP ] . join ( ' ' ) )
. on ( XDE _CTRL _KEYDOWN , function ( e ) {
2015-01-28 06:37:21 +00:00
if ( e . keyCode === CTRLKEY ) {
ctrlDown = true ;
}
} )
2015-01-28 23:03:56 +00:00
. on ( XDE _CTRL _KEYUP , function ( e ) {
2015-01-28 06:37:21 +00:00
if ( e . keyCode === CTRLKEY ) {
ctrlDown = false ;
}
} ) ;
return this . each ( function ( ) {
2015-01-28 23:03:56 +00:00
var datetimepicker = $ ( this ) . data ( XDC _DATETIMEPICKER ) ;
2015-01-28 06:37:21 +00:00
if ( datetimepicker ) {
if ( $ . type ( opt ) === 'string' ) {
switch ( opt ) {
case 'show' :
$ ( this ) . select ( ) . focus ( ) ;
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _OPEN ) ;
2015-01-28 06:37:21 +00:00
break ;
case 'hide' :
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _CLOSE ) ;
2015-01-28 06:37:21 +00:00
break ;
case 'toggle' :
2015-01-28 23:03:56 +00:00
datetimepicker . trigger ( XDE _TOGGLE ) ;
2015-01-28 06:37:21 +00:00
break ;
case 'destroy' :
destroyDateTimePicker ( $ ( this ) ) ;
break ;
case 'reset' :
this . value = this . defaultValue ;
2015-01-28 23:03:56 +00:00
if ( ! this . value || ! datetimepicker . data ( XDC _DATETIME ) . isValidDate ( Date . parseDate ( this . value , options . format ) ) ) {
2015-01-28 06:37:21 +00:00
datetimepicker . data ( 'changed' , false ) ;
}
2015-01-28 23:03:56 +00:00
datetimepicker . data ( XDC _DATETIME ) . setCurrentTime ( this . value ) ;
2015-01-28 06:37:21 +00:00
break ;
}
} else {
datetimepicker
. setOptions ( opt ) ;
}
return 0 ;
}
if ( $ . type ( opt ) !== 'string' ) {
if ( ! options . lazyInit || options . open || options . inline ) {
createDateTimePicker ( $ ( this ) ) ;
} else {
lazyInit ( $ ( this ) ) ;
}
}
} ) ;
} ;
$ . fn . datetimepicker . defaults = default _options ;
2015-01-28 23:03:56 +00:00
$ . fn . datetimepicker . setNamespace = setNamespace ;
2015-01-28 06:37:21 +00:00
// Parse and Format Library
//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/
/ *
* Copyright ( C ) 2004 Baron Schwartz < baron at sequent dot org >
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation , version 2.1 .
*
* This program is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE . See the GNU Lesser General Public License for more
* details .
* /
Date . parseFunctions = {
count : 0
} ;
Date . parseRegexes = [ ] ;
Date . formatFunctions = {
count : 0
} ;
Date . prototype . dateFormat = function ( b ) {
if ( b == "unixtime" ) {
return parseInt ( this . getTime ( ) / 1000 ) ;
}
if ( Date . formatFunctions [ b ] == null ) {
Date . createNewFormat ( b ) ;
}
var a = Date . formatFunctions [ b ] ;
return this [ a ] ( ) ;
} ;
Date . createNewFormat = function ( format ) {
var funcName = "format" + Date . formatFunctions . count ++ ;
Date . formatFunctions [ format ] = funcName ;
var code = "Date.prototype." + funcName + " = function() {return " ;
var special = false ;
var ch = "" ;
for ( var i = 0 ; i < format . length ; ++ i ) {
ch = format . charAt ( i ) ;
if ( ! special && ch == "\\" ) {
special = true ;
} else {
if ( special ) {
special = false ;
code += "'" + String . escape ( ch ) + "' + " ;
} else {
code += Date . getFormatCode ( ch ) ;
}
}
}
eval ( code . substring ( 0 , code . length - 3 ) + ";}" ) ;
} ;
Date . getFormatCode = function ( a ) {
switch ( a ) {
case "d" :
return "String.leftPad(this.getDate(), 2, '0') + " ;
case "D" :
return "Date.dayNames[this.getDay()].substring(0, 3) + " ;
case "j" :
return "this.getDate() + " ;
case "l" :
return "Date.dayNames[this.getDay()] + " ;
case "S" :
return "this.getSuffix() + " ;
case "w" :
return "this.getDay() + " ;
case "z" :
return "this.getDayOfYear() + " ;
case "W" :
return "this.getWeekOfYear() + " ;
case "F" :
return "Date.monthNames[this.getMonth()] + " ;
case "m" :
return "String.leftPad(this.getMonth() + 1, 2, '0') + " ;
case "M" :
return "Date.monthNames[this.getMonth()].substring(0, 3) + " ;
case "n" :
return "(this.getMonth() + 1) + " ;
case "t" :
return "this.getDaysInMonth() + " ;
case "L" :
return "(this.isLeapYear() ? 1 : 0) + " ;
case "Y" :
return "this.getFullYear() + " ;
case "y" :
return "('' + this.getFullYear()).substring(2, 4) + " ;
case "a" :
return "(this.getHours() < 12 ? 'am' : 'pm') + " ;
case "A" :
return "(this.getHours() < 12 ? 'AM' : 'PM') + " ;
case "g" :
return "((this.getHours() %12) ? this.getHours() % 12 : 12) + " ;
case "G" :
return "this.getHours() + " ;
case "h" :
return "String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + " ;
case "H" :
return "String.leftPad(this.getHours(), 2, '0') + " ;
case "i" :
return "String.leftPad(this.getMinutes(), 2, '0') + " ;
case "s" :
return "String.leftPad(this.getSeconds(), 2, '0') + " ;
case "O" :
return "this.getGMTOffset() + " ;
case "T" :
return "this.getTimezone() + " ;
case "Z" :
return "(this.getTimezoneOffset() * -60) + " ;
default :
return "'" + String . escape ( a ) + "' + " ;
}
} ;
Date . parseDate = function ( a , c ) {
if ( c == "unixtime" ) {
return new Date ( ! isNaN ( parseInt ( a ) ) ? parseInt ( a ) * 1000 : 0 ) ;
}
if ( Date . parseFunctions [ c ] == null ) {
Date . createParser ( c ) ;
}
var b = Date . parseFunctions [ c ] ;
return Date [ b ] ( a ) ;
} ;
Date . createParser = function ( format ) {
var funcName = "parse" + Date . parseFunctions . count ++ ;
var regexNum = Date . parseRegexes . length ;
var currentGroup = 1 ;
Date . parseFunctions [ format ] = funcName ;
var code = "Date." + funcName + " = function(input) {\nvar y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, z = -1;\nvar d = new Date();\ny = d.getFullYear();\nm = d.getMonth();\nd = d.getDate();\nvar results = input.match(Date.parseRegexes[" + regexNum + "]);\nif (results && results.length > 0) {" ;
var regex = "" ;
var special = false ;
var ch = "" ;
for ( var i = 0 ; i < format . length ; ++ i ) {
ch = format . charAt ( i ) ;
if ( ! special && ch == "\\" ) {
special = true ;
} else {
if ( special ) {
special = false ;
regex += String . escape ( ch ) ;
} else {
obj = Date . formatCodeToRegex ( ch , currentGroup ) ;
currentGroup += obj . g ;
regex += obj . s ;
if ( obj . g && obj . c ) {
code += obj . c ;
}
}
}
}
code += "if (y > 0 && z > 0){\nvar doyDate = new Date(y,0);\ndoyDate.setDate(z);\nm = doyDate.getMonth();\nd = doyDate.getDate();\n}" ;
code += "if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n{return new Date(y, m, d, h, i, s);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n{return new Date(y, m, d, h, i);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\n{return new Date(y, m, d, h);}\nelse if (y > 0 && m >= 0 && d > 0)\n{return new Date(y, m, d);}\nelse if (y > 0 && m >= 0)\n{return new Date(y, m);}\nelse if (y > 0)\n{return new Date(y);}\n}return null;}" ;
Date . parseRegexes [ regexNum ] = new RegExp ( "^" + regex + "$" ) ;
eval ( code ) ;
} ;
Date . formatCodeToRegex = function ( b , a ) {
switch ( b ) {
case "D" :
return {
g : 0 ,
c : null ,
s : "(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"
} ;
case "j" :
case "d" :
return {
g : 1 ,
c : "d = parseInt(results[" + a + "], 10);\n" ,
s : "(\\d{1,2})"
} ;
case "l" :
return {
g : 0 ,
c : null ,
s : "(?:" + Date . dayNames . join ( "|" ) + ")"
} ;
case "S" :
return {
g : 0 ,
c : null ,
s : "(?:st|nd|rd|th)"
} ;
case "w" :
return {
g : 0 ,
c : null ,
s : "\\d"
} ;
case "z" :
return {
g : 1 ,
c : "z = parseInt(results[" + a + "], 10);\n" ,
s : "(\\d{1,3})"
} ;
case "W" :
return {
g : 0 ,
c : null ,
s : "(?:\\d{2})"
} ;
case "F" :
return {
g : 1 ,
c : "m = parseInt(Date.monthNumbers[results[" + a + "].substring(0, 3)], 10);\n" ,
s : "(" + Date . monthNames . join ( "|" ) + ")"
} ;
case "M" :
return {
g : 1 ,
c : "m = parseInt(Date.monthNumbers[results[" + a + "]], 10);\n" ,
s : "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"
} ;
case "n" :
case "m" :
return {
g : 1 ,
c : "m = parseInt(results[" + a + "], 10) - 1;\n" ,
s : "(\\d{1,2})"
} ;
case "t" :
return {
g : 0 ,
c : null ,
s : "\\d{1,2}"
} ;
case "L" :
return {
g : 0 ,
c : null ,
s : "(?:1|0)"
} ;
case "Y" :
return {
g : 1 ,
c : "y = parseInt(results[" + a + "], 10);\n" ,
s : "(\\d{4})"
} ;
case "y" :
return {
g : 1 ,
c : "var ty = parseInt(results[" + a + "], 10);\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n" ,
s : "(\\d{1,2})"
} ;
case "a" :
return {
g : 1 ,
c : "if (results[" + a + "] == 'am') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}" ,
s : "(am|pm)"
} ;
case "A" :
return {
g : 1 ,
c : "if (results[" + a + "] == 'AM') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}" ,
s : "(AM|PM)"
} ;
case "g" :
case "G" :
case "h" :
case "H" :
return {
g : 1 ,
c : "h = parseInt(results[" + a + "], 10);\n" ,
s : "(\\d{1,2})"
} ;
case "i" :
return {
g : 1 ,
c : "i = parseInt(results[" + a + "], 10);\n" ,
s : "(\\d{2})"
} ;
case "s" :
return {
g : 1 ,
c : "s = parseInt(results[" + a + "], 10);\n" ,
s : "(\\d{2})"
} ;
case "O" :
return {
g : 0 ,
c : null ,
s : "[+-]\\d{4}"
} ;
case "T" :
return {
g : 0 ,
c : null ,
s : "[A-Z]{3}"
} ;
case "Z" :
return {
g : 0 ,
c : null ,
s : "[+-]\\d{1,5}"
} ;
default :
return {
g : 0 ,
c : null ,
s : String . escape ( b )
} ;
}
} ;
Date . prototype . getTimezone = function ( ) {
return this . toString ( ) . replace ( /^.*? ([A-Z]{3}) [0-9]{4}.*$/ , "$1" ) . replace ( /^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/ , "$1$2$3" ) ;
} ;
Date . prototype . getGMTOffset = function ( ) {
return ( this . getTimezoneOffset ( ) > 0 ? "-" : "+" ) + String . leftPad ( Math . floor ( Math . abs ( this . getTimezoneOffset ( ) ) / 60 ) , 2 , "0" ) + String . leftPad ( Math . abs ( this . getTimezoneOffset ( ) ) % 60 , 2 , "0" ) ;
} ;
Date . prototype . getDayOfYear = function ( ) {
var a = 0 ;
Date . daysInMonth [ 1 ] = this . isLeapYear ( ) ? 29 : 28 ;
for ( var b = 0 ; b < this . getMonth ( ) ; ++ b ) {
a += Date . daysInMonth [ b ] ;
}
return a + this . getDate ( ) ;
} ;
Date . prototype . getWeekOfYear = function ( ) {
var b = this . getDayOfYear ( ) + ( 4 - this . getDay ( ) ) ;
var a = new Date ( this . getFullYear ( ) , 0 , 1 ) ;
var c = ( 7 - a . getDay ( ) + 4 ) ;
return String . leftPad ( Math . ceil ( ( b - c ) / 7 ) + 1 , 2 , "0" ) ;
} ;
Date . prototype . isLeapYear = function ( ) {
var a = this . getFullYear ( ) ;
return ( ( a & 3 ) == 0 && ( a % 100 || ( a % 400 == 0 && a ) ) ) ;
} ;
Date . prototype . getFirstDayOfMonth = function ( ) {
var a = ( this . getDay ( ) - ( this . getDate ( ) - 1 ) ) % 7 ;
return ( a < 0 ) ? ( a + 7 ) : a ;
} ;
Date . prototype . getLastDayOfMonth = function ( ) {
var a = ( this . getDay ( ) + ( Date . daysInMonth [ this . getMonth ( ) ] - this . getDate ( ) ) ) % 7 ;
return ( a < 0 ) ? ( a + 7 ) : a ;
} ;
Date . prototype . getDaysInMonth = function ( ) {
Date . daysInMonth [ 1 ] = this . isLeapYear ( ) ? 29 : 28 ;
return Date . daysInMonth [ this . getMonth ( ) ] ;
} ;
Date . prototype . getSuffix = function ( ) {
switch ( this . getDate ( ) ) {
case 1 :
case 21 :
case 31 :
return "st" ;
case 2 :
case 22 :
return "nd" ;
case 3 :
case 23 :
return "rd" ;
default :
return "th" ;
}
} ;
String . escape = function ( a ) {
return a . replace ( /('|\\)/g , "\\$1" ) ;
} ;
String . leftPad = function ( d , b , c ) {
var a = new String ( d ) ;
if ( c == null ) {
c = " " ;
}
while ( a . length < b ) {
a = c + a ;
}
return a ;
} ;
Date . daysInMonth = [ 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ] ;
Date . monthNames = [ "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December" ] ;
Date . dayNames = [ "Sunday" , "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" ] ;
Date . y2kYear = 50 ;
Date . monthNumbers = {
Jan : 0 ,
Feb : 1 ,
Mar : 2 ,
Apr : 3 ,
May : 4 ,
Jun : 5 ,
Jul : 6 ,
Aug : 7 ,
Sep : 8 ,
Oct : 9 ,
Nov : 10 ,
Dec : 11
} ;
Date . patterns = {
ISO8601LongPattern : "Y-m-d H:i:s" ,
ISO8601ShortPattern : "Y-m-d" ,
ShortDatePattern : "n/j/Y" ,
LongDatePattern : "l, F d, Y" ,
FullDateTimePattern : "l, F d, Y g:i:s A" ,
MonthDayPattern : "F d" ,
ShortTimePattern : "g:i A" ,
LongTimePattern : "g:i:s A" ,
SortableDateTimePattern : "Y-m-d\\TH:i:s" ,
UniversalSortableDateTimePattern : "Y-m-d H:i:sO" ,
YearMonthPattern : "F, Y"
} ;
2015-01-28 20:52:16 +00:00
} ) ;