js/datetime/calendar/calendar.coffee in rsence-pre-2.2.2.1 vs js/datetime/calendar/calendar.coffee in rsence-pre-2.3.0.0
- old
+ new
@@ -18,24 +18,79 @@
## Disable the mouseWheel event to prevent prev/next -month switching with
## the mouse wheel or equivalent content-scrolling user interface gesture
defaultEvents:
mouseWheel: true
- # click: true
+ keyDown: true
## Calls HCalendar#nextMonth or HCalendar#prevMonth based on delta change
## of the mouseWheel event
mouseWheel: (_delta)->
if _delta < 0
@nextMonth()
else
@prevMonth()
+
+ ## Draws the next month
+ nextMonth: (_set)->
+ _dateNext = new Date( @viewMonth[0], @viewMonth[1]+1, 1 )
+ _dateMs = _dateNext.getTime() - @tzMs(_dateNext)
+ if _set
+ @setValue( _dateMs/1000 )
+ else
+ @drawCalendar( new Date(_dateMs) )
- ## Simple click-through for the themed hyperlinks
- click: ->
- false
+ ## Draws the prev month
+ prevMonth: (_set)->
+ _datePrev = new Date( @viewMonth[0], @viewMonth[1]-1, 1 )
+ _dateMs = _datePrev.getTime() - @tzMs(_datePrev)
+ if _set
+ @setValue( _dateMs/1000 )
+ else
+ @drawCalendar( new Date(_dateMs) )
+ ## Draws the next year
+ nextYear: (_set)->
+ _dateNext = new Date( @viewMonth[0]+1, @viewMonth[1], 1 )
+ _dateMs = _dateNext.getTime() - @tzMs(_dateNext)
+ if _set
+ @setValue( _dateMs/1000 )
+ else
+ @drawCalendar( new Date(_dateMs) )
+
+ ## Draws the prev year
+ prevYear: (_set)->
+ _datePrev = new Date( @viewMonth[0]-1, @viewMonth[1], 1 )
+ _dateMs = _datePrev.getTime() - @tzMs(_datePrev)
+ if _set
+ @setValue( _dateMs/1000 )
+ else
+ @drawCalendar( new Date(_dateMs) )
+
+ nextDay: -> @setValue( @value + 24*60*60 )
+ prevDay: -> @setValue( @value - 24*60*60 )
+ nextWeek: -> @setValue( @value + 7*24*60*60 )
+ prevWeek: -> @setValue( @value - 7*24*60*60 )
+
+ ## Keyboard control
+ keyDown: (_key)->
+ if EVENT.status.shiftKeyDown
+ @prevMonth(true) if _key == Event.KEY_LEFT
+ @nextMonth(true) if _key == Event.KEY_RIGHT
+ @prevYear(true) if _key == Event.KEY_UP
+ @nextYear(true) if _key == Event.KEY_DOWN
+ else
+ @nextDay() if _key == Event.KEY_RIGHT
+ @prevDay() if _key == Event.KEY_LEFT
+ @nextWeek() if _key == Event.KEY_DOWN
+ @prevWeek() if _key == Event.KEY_UP
+ @prevMonth(true) if _key == Event.KEY_PAGEUP
+ @nextMonth(true) if _key == Event.KEY_PAGEDOWN
+ @prevYear(true) if _key == Event.KEY_HOME
+ @nextYear(true) if _key == Event.KEY_END
+ true
+
drawSubviews: ->
_this = @
Event.observe( @elemOfPart( 'prevMonth' ), 'click', ->
_this.prevMonth()
)
@@ -126,102 +181,99 @@
firstDate: _monthFirst
lastDate: _monthLast
}
}
+ lostActiveStatus: (_obj)->
+ if (_obj and @menu and !@menu._killed and !_obj.isChildOf(@menu) and !_obj.isChildOf(@menu.menuItemView))
+ @menu.die()
+ @base(_obj)
+
## Calls #drawCalendar when the value is changed
refreshValue: ->
@drawCalendar( @date() )
- ## Draws the next month
- nextMonth: ->
- _dateNext = new Date( @viewMonth[0], @viewMonth[1]+1, 1 )
- _dateMs = _dateNext.getTime() - @tzMs(_dateNext)
- @drawCalendar( new Date(_dateMs) )
-
- ## Drows the prev month
- prevMonth: ->
- _datePrev = new Date( @viewMonth[0], @viewMonth[1]-1, 1 )
- _dateMs = _datePrev.getTime() - @tzMs(_datePrev)
- @drawCalendar( new Date(_dateMs) )
-
## Stores the currently viewed year and month
viewMonth: [ 1970, 0 ]
## Shows a pulldown menu for month selection
monthMenu: ->
return unless HMiniMenu?
- _calendar = this
+ _calendar = @
_monthValues = []
for _monthName, i in HLocale.dateTime.strings.monthsLong
_monthValues.push( [ i, _monthName ] )
_rect = ELEM.getBoxCoords( @_monthMenu )
_rect[0] += 20
_rect[2] = 80 if _rect[2] < 80
- HMiniMenu.extend(
- _killAfterRefresh: false
+ @menu = HMiniMenu.extend(
+ click: ->
+ console.log('click')
menuHide: ->
+ return if @_killed?
+ @_killed = true
@base()
+ _calendar.setValue( _calendar.setMonth( @value ) )
+ if _calendar.month() != @value
+ _calendar.setValue( _calendar.setMday( 30 ) )
+ _calendar.setValue( _calendar.setMonth( @value ) )
+ if _calendar.month() != @value
+ _calendar.setValue( _calendar.setMday( 29 ) )
+ _calendar.setValue( _calendar.setMonth( @value ) )
+ if _calendar.month() != @value
+ _calendar.setValue( _calendar.setMday( 28 ) )
+ _calendar.setValue( _calendar.setMonth( @value ) )
_menu = @
- _menu._killAfterRefresh = true
COMM.Queue.push( ->
- if _menu._killAfterRefresh
- _menu.refreshValue()
+ EVENT.changeActiveControl(_calendar)
+ _calendar.menu = null
+ _menu.die()
)
- return true;
- refreshValue: ->
- @base()
- if @_killAfterRefresh
- @_killAfterRefresh = false
- _calendar.setValue( _calendar.setMonth( @value ) )
- if _calendar.month() != @value
- _calendar.setValue( _calendar.setMday( 30 ) )
- _calendar.setValue( _calendar.setMonth( this.value ) )
- if _calendar.month() != @value
- _calendar.setValue( _calendar.setMday( 29 ) )
- _calendar.setValue( _calendar.setMonth( @value ) )
- if _calendar.month() != this.value
- _calendar.setValue( _calendar.setMday( 28 ) )
- _calendar.setValue( _calendar.setMonth( @value ) )
- _menu = this
- COMM.Queue.push( ->
- _menu.die()
- )
).new( _rect, @,
value: @month()
initialVisibility: true
- ).setListItems( _monthValues )
+ listItems: _monthValues
+ )
## Shows a text field for year selection
yearMenu: ->
_calendar = @
+ _calendarEnable = @enabled
_rect = ELEM.getBoxCoords( @_yearMenu )
_rect[0] += 20
_rect[2] = 40 if _rect[2] < 40
- _rect[3] = 20
+ _rect[3] = 16
+ EVENT.changeActiveControl(null)
+ @setEnabled(false)
HNumericTextControl.extend(
refreshValue: ->
@base()
_calendar.setValue( _calendar.setYear( @value ) )
+ gainedActiveStatus: (_obj)->
+ @base(_obj)
+ _calendar.setEnabled(_calendarEnable)
textBlur: ->
@base()
- _year = this
+ _year = @
COMM.Queue.push( ->
- _year.die() if _year.markupElemIds?
+ if _year.markupElemIds?
+ _year.die()
)
- textEnter: ->
- @base()
- _returnKeyPressed = EVENT.status[ EVENT.keysDown ].indexOf( 13 ) != -1
- _noKeysPressed = EVENT.status[ EVENT.keysDown ].length == 0
- if _returnKeyPressed or _noKeysPressed
+ keyDown: (_key)->
+ if _key == Event.KEY_RETURN
ELEM.get( @markupElemIds.value ).blur()
).new( _rect, @,
value: @year()
minValue: -38399
maxValue: 38400
focusOnCreate: true
refreshOnInput: false
+ refreshOnIdle: false
+ events:
+ keyDown: true
+ style:
+ fontSize: '11px'
)
_destroyCalendarElems: ->
if @_drawCalendarElems?
for _elemId in @_drawCalendarElems
@@ -236,11 +288,10 @@
## Draws the calendar with the date open given as input.
##
## Params:
## - _date: The date on which calendar UI is opened at.
drawCalendar: (_date)->
- @_destroyCalendarElems()
_date = @date() unless ( _date instanceof Date )
_calendarDateRange = @calendarDateRange( _date )
_monthFirst = _calendarDateRange.month.firstDate
_monthLast = _calendarDateRange.month.lastDate
_firstDate = _calendarDateRange.week.firstDate
@@ -250,11 +301,11 @@
_leftPlus = ( _availWidth % 8 ) - 2
_topPlus = ( _availHeight % 6 )
_colWidth = Math.floor( _availWidth / 8 )
_rowHeight = Math.floor( _availHeight / 6 )
_parentElem = @markupElemIds.value
- ELEM.setStyle( _parentElem, 'visibility', 'hidden', true )
+ # ELEM.setStyle( _parentElem, 'visibility', 'hidden', true )
_elems = []
_this = @
for _row in [0..5]
_weekElem = ELEM.make( _parentElem )
_elems.push( _weekElem )
@@ -286,38 +337,43 @@
else if _colDate < _monthFirst or _colDate > _monthLast
ELEM.addClassName( _colElem, 'calendar_weeks_week_col_no' )
else
ELEM.addClassName( _colElem, 'calendar_weeks_week_col_yes' )
ELEM.setAttr( _colElem, '_colSecs', _colSecs )
- Event.observe( ELEM.get( _colElem ), 'click', ->
- _this.setValue( @_colSecs )
- )
+ if @enabled
+ Event.observe( ELEM.get( _colElem ), 'click', ->
+ _this.setValue( @_colSecs )
+ )
# ELEM.setAttr( _colElem, 'href', "javascript:HSystem.views[#{@viewId}].setValue(#{_colSecs})" )
_left = (_col*_colWidth+_leftPlus)
ELEM.setStyle( _colElem, 'left', _left+'px' )
ELEM.setStyle( _colElem, 'width', (_colWidth-1)+'px' )
ELEM.setStyle( _colElem, 'height', (_rowHeight-1)+'px' )
ELEM.setStyle( _colElem, 'line-height', _rowHeight+'px' )
ELEM.setHTML( _colElem, @mday( _colDate ) )
- ELEM.setStyle( _parentElem, 'visibility', 'inherit' )
+ # ELEM.setStyle( _parentElem, 'visibility', 'inherit' )
+ ELEM.flush()
_stateElem = @markupElemIds.state
@_monthMenu = ELEM.make( _stateElem, 'span' )#, 'a' )
_elems.push( @_monthMenu )
# ELEM.setAttr( @_monthMenu, 'href', "javascript:HSystem.views[#{@viewId}].monthMenu()" )
- Event.observe( ELEM.get( @_monthMenu ), 'click', ( -> _this.monthMenu() ), false )
+ if @enabled
+ Event.observe( ELEM.get( @_monthMenu ), 'click', ( -> _this.monthMenu() ), false )
ELEM.setHTML( @_monthMenu, @monthName( _date ) )
_spacer = ELEM.make( _stateElem, 'span' )
_elems.push( _spacer )
ELEM.setHTML( _spacer, ' ' )
@_yearMenu = ELEM.make( _stateElem, 'span' )#, 'a' )
_elems.push( @_yearMenu )
- Event.observe( ELEM.get( @_yearMenu ), 'click', ( -> _this.yearMenu() ), false )
+ if @enabled
+ Event.observe( ELEM.get( @_yearMenu ), 'click', ( -> _this.yearMenu() ), false )
# ELEM.setAttr( @_yearMenu, 'href', "javascript:HSystem.views[#{@viewId}].yearMenu()" )
ELEM.setHTML( @_yearMenu, @year( _date ) )
@viewMonth = [ _monthFirst.getUTCFullYear(), _monthFirst.getUTCMonth() ]
+ @_destroyCalendarElems()
@_drawCalendarElems = _elems
HCalendar.implement( HDateTime )