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, '&nbsp;' ) @_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 )