import { i18n } from '@kbn/i18n' ; ( function ( $ ) { var options = { xaxis : { timezone : null , timeformat : null , twelveHourClock : false , monthNames : null } } ; function floorInBase ( n , base ) { return base * Math . floor ( n / base ) ; } function formatDate ( d , fmt , monthNames , dayNames ) { if ( typeof d . strftime == "function" ) { return d . strftime ( fmt ) ; } var leftPad = function ( n , pad ) { n = "" + n ; pad = "" + ( pad == null ? "0" : pad ) ; return n . length == 1 ? pad + n : n ; } ; var r = [ ] ; var escape = false ; var hours = d . getHours ( ) ; var isAM = hours < 12 ; if ( monthNames == null ) { monthNames = [ i18n . translate ( 'flot.time.janLabel' , { defaultMessage : 'Jan' , } ) , i18n . translate ( 'flot.time.febLabel' , { defaultMessage : 'Feb' , } ) , i18n . translate ( 'flot.time.marLabel' , { defaultMessage : 'Mar' , } ) , i18n . translate ( 'flot.time.aprLabel' , { defaultMessage : 'Apr' , } ) , i18n . translate ( 'flot.time.mayLabel' , { defaultMessage : 'May' , } ) , i18n . translate ( 'flot.time.junLabel' , { defaultMessage : 'Jun' , } ) , i18n . translate ( 'flot.time.julLabel' , { defaultMessage : 'Jul' , } ) , i18n . translate ( 'flot.time.augLabel' , { defaultMessage : 'Aug' , } ) , i18n . translate ( 'flot.time.sepLabel' , { defaultMessage : 'Sep' , } ) , i18n . translate ( 'flot.time.octLabel' , { defaultMessage : 'Oct' , } ) , i18n . translate ( 'flot.time.novLabel' , { defaultMessage : 'Nov' , } ) , i18n . translate ( 'flot.time.decLabel' , { defaultMessage : 'Dec' , } ) ] ; } if ( dayNames == null ) { dayNames = [ i18n . translate ( 'flot.time.sunLabel' , { defaultMessage : 'Sun' , } ) , i18n . translate ( 'flot.time.monLabel' , { defaultMessage : 'Mon' , } ) , i18n . translate ( 'flot.time.tueLabel' , { defaultMessage : 'Tue' , } ) , i18n . translate ( 'flot.time.wedLabel' , { defaultMessage : 'Wed' , } ) , i18n . translate ( 'flot.time.thuLabel' , { defaultMessage : 'Thu' , } ) , i18n . translate ( 'flot.time.friLabel' , { defaultMessage : 'Fri' , } ) , i18n . translate ( 'flot.time.satLabel' , { defaultMessage : 'Sat' , } ) ] ; } var hours12 ; if ( hours > 12 ) { hours12 = hours - 12 ; } else if ( hours == 0 ) { hours12 = 12 ; } else { hours12 = hours ; } for ( var i = 0 ; i < fmt . length ; ++ i ) { var c = fmt . charAt ( i ) ; if ( escape ) { switch ( c ) { case 'a' : c = "" + dayNames [ d . getDay ( ) ] ; break ; case 'b' : c = "" + monthNames [ d . getMonth ( ) ] ; break ; case 'd' : c = leftPad ( d . getDate ( ) ) ; break ; case 'e' : c = leftPad ( d . getDate ( ) , " " ) ; break ; case 'h' : case 'H' : c = leftPad ( hours ) ; break ; case 'I' : c = leftPad ( hours12 ) ; break ; case 'l' : c = leftPad ( hours12 , " " ) ; break ; case 'm' : c = leftPad ( d . getMonth ( ) + 1 ) ; break ; case 'M' : c = leftPad ( d . getMinutes ( ) ) ; break ; case 'q' : c = "" + ( Math . floor ( d . getMonth ( ) / 3 ) + 1 ) ; break ; case 'S' : c = leftPad ( d . getSeconds ( ) ) ; break ; case 'y' : c = leftPad ( d . getFullYear ( ) % 100 ) ; break ; case 'Y' : c = "" + d . getFullYear ( ) ; break ; case 'p' : c = ( isAM ) ? ( "" + "am" ) : ( "" + "pm" ) ; break ; case 'P' : c = ( isAM ) ? ( "" + "AM" ) : ( "" + "PM" ) ; break ; case 'w' : c = "" + d . getDay ( ) ; break ; } r . push ( c ) ; escape = false ; } else { if ( c == "%" ) { escape = true ; } else { r . push ( c ) ; } } } return r . join ( "" ) ; } function makeUtcWrapper ( d ) { function addProxyMethod ( sourceObj , sourceMethod , targetObj , targetMethod ) { sourceObj [ sourceMethod ] = function ( ) { return targetObj [ targetMethod ] . apply ( targetObj , arguments ) ; } ; } ; var utc = { date : d } ; if ( d . strftime != undefined ) { addProxyMethod ( utc , "strftime" , d , "strftime" ) ; } addProxyMethod ( utc , "getTime" , d , "getTime" ) ; addProxyMethod ( utc , "setTime" , d , "setTime" ) ; var props = [ "Date" , "Day" , "FullYear" , "Hours" , "Milliseconds" , "Minutes" , "Month" , "Seconds" ] ; for ( var p = 0 ; p < props . length ; p ++ ) { addProxyMethod ( utc , "get" + props [ p ] , d , "getUTC" + props [ p ] ) ; addProxyMethod ( utc , "set" + props [ p ] , d , "setUTC" + props [ p ] ) ; } return utc ; } ; function dateGenerator ( ts , opts ) { if ( opts . timezone == "browser" ) { return new Date ( ts ) ; } else if ( ! opts . timezone || opts . timezone == "utc" ) { return makeUtcWrapper ( new Date ( ts ) ) ; } else if ( typeof timezoneJS != "undefined" && typeof timezoneJS . Date != "undefined" ) { var d = new timezoneJS . Date ( ) ; d . setTimezone ( opts . timezone ) ; d . setTime ( ts ) ; return d ; } else { return makeUtcWrapper ( new Date ( ts ) ) ; } } var timeUnitSize = { "second" : 1000 , "minute" : 60 * 1000 , "hour" : 60 * 60 * 1000 , "day" : 24 * 60 * 60 * 1000 , "month" : 30 * 24 * 60 * 60 * 1000 , "quarter" : 3 * 30 * 24 * 60 * 60 * 1000 , "year" : 365.2425 * 24 * 60 * 60 * 1000 } ; var baseSpec = [ [ 1 , "second" ] , [ 2 , "second" ] , [ 5 , "second" ] , [ 10 , "second" ] , [ 30 , "second" ] , [ 1 , "minute" ] , [ 2 , "minute" ] , [ 5 , "minute" ] , [ 10 , "minute" ] , [ 30 , "minute" ] , [ 1 , "hour" ] , [ 2 , "hour" ] , [ 4 , "hour" ] , [ 8 , "hour" ] , [ 12 , "hour" ] , [ 1 , "day" ] , [ 2 , "day" ] , [ 3 , "day" ] , [ 0.25 , "month" ] , [ 0.5 , "month" ] , [ 1 , "month" ] , [ 2 , "month" ] ] ; var specMonths = baseSpec . concat ( [ [ 3 , "month" ] , [ 6 , "month" ] , [ 1 , "year" ] ] ) ; var specQuarters = baseSpec . concat ( [ [ 1 , "quarter" ] , [ 2 , "quarter" ] , [ 1 , "year" ] ] ) ; function init ( plot ) { plot . hooks . processOptions . push ( function ( plot , options ) { $ . each ( plot . getAxes ( ) , function ( axisName , axis ) { var opts = axis . options ; if ( opts . mode == "time" ) { axis . tickGenerator = function ( axis ) { var ticks = [ ] ; var d = dateGenerator ( axis . min , opts ) ; var minSize = 0 ; var spec = ( opts . tickSize && opts . tickSize [ 1 ] === "quarter" ) || ( opts . minTickSize && opts . minTickSize [ 1 ] === "quarter" ) ? specQuarters : specMonths ; if ( opts . minTickSize != null ) { if ( typeof opts . tickSize == "number" ) { minSize = opts . tickSize ; } else { minSize = opts . minTickSize [ 0 ] * timeUnitSize [ opts . minTickSize [ 1 ] ] ; } } for ( var i = 0 ; i < spec . length - 1 ; ++ i ) { if ( axis . delta < ( spec [ i ] [ 0 ] * timeUnitSize [ spec [ i ] [ 1 ] ] + spec [ i + 1 ] [ 0 ] * timeUnitSize [ spec [ i + 1 ] [ 1 ] ] ) / 2 && spec [ i ] [ 0 ] * timeUnitSize [ spec [ i ] [ 1 ] ] >= minSize ) { break ; } } var size = spec [ i ] [ 0 ] ; var unit = spec [ i ] [ 1 ] ; if ( unit == "year" ) { if ( opts . minTickSize != null && opts . minTickSize [ 1 ] == "year" ) { size = Math . floor ( opts . minTickSize [ 0 ] ) ; } else { var magn = Math . pow ( 10 , Math . floor ( Math . log ( axis . delta / timeUnitSize . year ) / Math . LN10 ) ) ; var norm = ( axis . delta / timeUnitSize . year ) / magn ; if ( norm < 1.5 ) { size = 1 ; } else if ( norm < 3 ) { size = 2 ; } else if ( norm < 7.5 ) { size = 5 ; } else { size = 10 ; } size *= magn ; } if ( size < 1 ) { size = 1 ; } } axis . tickSize = opts . tickSize || [ size , unit ] ; var tickSize = axis . tickSize [ 0 ] ; unit = axis . tickSize [ 1 ] ; var step = tickSize * timeUnitSize [ unit ] ; if ( unit == "second" ) { d . setSeconds ( floorInBase ( d . getSeconds ( ) , tickSize ) ) ; } else if ( unit == "minute" ) { d . setMinutes ( floorInBase ( d . getMinutes ( ) , tickSize ) ) ; } else if ( unit == "hour" ) { d . setHours ( floorInBase ( d . getHours ( ) , tickSize ) ) ; } else if ( unit == "month" ) { d . setMonth ( floorInBase ( d . getMonth ( ) , tickSize ) ) ; } else if ( unit == "quarter" ) { d . setMonth ( 3 * floorInBase ( d . getMonth ( ) / 3 , tickSize ) ) ; } else if ( unit == "year" ) { d . setFullYear ( floorInBase ( d . getFullYear ( ) , tickSize ) ) ; } d . setMilliseconds ( 0 ) ; if ( step >= timeUnitSize . minute ) { d . setSeconds ( 0 ) ; } if ( step >= timeUnitSize . hour ) { d . setMinutes ( 0 ) ; } if ( step >= timeUnitSize . day ) { d . setHours ( 0 ) ; } if ( step >= timeUnitSize . day * 4 ) { d . setDate ( 1 ) ; } if ( step >= timeUnitSize . month * 2 ) { d . setMonth ( floorInBase ( d . getMonth ( ) , 3 ) ) ; } if ( step >= timeUnitSize . quarter * 2 ) { d . setMonth ( floorInBase ( d . getMonth ( ) , 6 ) ) ; } if ( step >= timeUnitSize . year ) { d . setMonth ( 0 ) ; } var carry = 0 ; var v = Number . NaN ; var prev ; do { prev = v ; v = d . getTime ( ) ; ticks . push ( v ) ; if ( unit == "month" || unit == "quarter" ) { if ( tickSize < 1 ) { d . setDate ( 1 ) ; var start = d . getTime ( ) ; d . setMonth ( d . getMonth ( ) + ( unit == "quarter" ? 3 : 1 ) ) ; var end = d . getTime ( ) ; d . setTime ( v + carry * timeUnitSize . hour + ( end - start ) * tickSize ) ; carry = d . getHours ( ) ; d . setHours ( 0 ) ; } else { d . setMonth ( d . getMonth ( ) + tickSize * ( unit == "quarter" ? 3 : 1 ) ) ; } } else if ( unit == "year" ) { d . setFullYear ( d . getFullYear ( ) + tickSize ) ; } else { d . setTime ( v + step ) ; } } while ( v < axis . max && v != prev ) ; return ticks ; } ; axis . tickFormatter = function ( v , axis ) { var d = dateGenerator ( v , axis . options ) ; if ( opts . timeformat != null ) { return formatDate ( d , opts . timeformat , opts . monthNames , opts . dayNames ) ; } var useQuarters = ( axis . options . tickSize && axis . options . tickSize [ 1 ] == "quarter" ) || ( axis . options . minTickSize && axis . options . minTickSize [ 1 ] == "quarter" ) ; var t = axis . tickSize [ 0 ] * timeUnitSize [ axis . tickSize [ 1 ] ] ; var span = axis . max - axis . min ; var suffix = ( opts . twelveHourClock ) ? " %p" : "" ; var hourCode = ( opts . twelveHourClock ) ? "%I" : "%H" ; var fmt ; if ( t < timeUnitSize . minute ) { fmt = hourCode + ":%M:%S" + suffix ; } else if ( t < timeUnitSize . day ) { if ( span < 2 * timeUnitSize . day ) { fmt = hourCode + ":%M" + suffix ; } else { fmt = "%b %d " + hourCode + ":%M" + suffix ; } } else if ( t < timeUnitSize . month ) { fmt = "%b %d" ; } else if ( ( useQuarters && t < timeUnitSize . quarter ) || ( ! useQuarters && t < timeUnitSize . year ) ) { if ( span < timeUnitSize . year ) { fmt = "%b" ; } else { fmt = "%b %Y" ; } } else if ( useQuarters && t < timeUnitSize . year ) { if ( span < timeUnitSize . year ) { fmt = "Q%q" ; } else { fmt = "Q%q %Y" ; } } else { fmt = "%Y" ; } var rt = formatDate ( d , fmt , opts . monthNames , opts . dayNames ) ; return rt ; } ; } } ) ; } ) ; } $ . plot . plugins . push ( { init : init , options : options , name : 'time' , version : '1.0' } ) ; $ . plot . formatDate = formatDate ; $ . plot . dateGenerator = dateGenerator ; } ) ( jQuery ) ;