rsence-pre 2.2.0.29 → 2.2.0.30

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.2.0.29.pre
1
+ 2.2.0.30.pre
@@ -187,6 +187,20 @@ ELEM = HClass.extend({
187
187
  _elem = @_elements[_id]
188
188
  [ _elem.offsetWidth, _elem.offsetHeight ]
189
189
 
190
+ ###
191
+ Returns the position of the element as a [ x, y ] tuple
192
+ ###
193
+ getPosition: (_id)->
194
+ _elem = @_elements[_id]
195
+ [ _elem.offsetLeft, _elem.offsetTop ]
196
+
197
+ ###
198
+ Returns the scroll position of the element as a [ x, y ] tuple
199
+ ###
200
+ getScrollPosition: (_id)->
201
+ _elem = @_elements[_id]
202
+ [ _elem.scrollLeft, _elem.scrollTop ]
203
+
190
204
  ###
191
205
  Returns the scroll size of the element as a [ width, height ] tuple
192
206
  ###
@@ -266,6 +280,14 @@ ELEM = HClass.extend({
266
280
  @setStyle( _id, 'height', h+'px' )
267
281
  null
268
282
 
283
+ ###
284
+ Gets box coordinates [ x, y, width, height )
285
+ ###
286
+ getBoxCoords: (_id)->
287
+ [ x, y ] = @getPosition( _id )
288
+ [ w, h ] = @getSize( _id )
289
+ [ x, y, w, h ]
290
+
269
291
  ###
270
292
  Computes extra size (padding and border size) of element
271
293
  ###
@@ -0,0 +1,307 @@
1
+ ## RSence
2
+ # Copyright 2009-2011 Riassence Inc.
3
+ # http://riassence.com/
4
+ #
5
+ # You should have received a copy of the GNU General Public License along
6
+ # with this software package. If not, contact licensing@riassence.com
7
+ ##
8
+
9
+ #### = Description
10
+ ## Use HCalendar to display a month calendar that displays days as columns
11
+ ## and weeks as rows. Its value is a date/time number specified in seconds
12
+ ## since or before epoch (1970-01-01 00:00:00 UTC).
13
+ ####
14
+ HCalendar = HControl.extend(
15
+
16
+ componentName: 'calendar'
17
+
18
+ ## Disable the mouseWheel event to prevent prev/next -month switching with
19
+ ## the mouse wheel or equivalent content-scrolling user interface gesture
20
+ defaultEvents:
21
+ mouseWheel: true
22
+ click: true
23
+
24
+ ## Calls HCalendar#nextMonth or HCalendar#prevMonth based on delta change
25
+ ## of the mouseWheel event
26
+ mouseWheel: (_delta)->
27
+ if _delta < 0
28
+ @nextMonth()
29
+ else
30
+ @prevMonth()
31
+
32
+ ## Simple click-through for the themed hyperlinks
33
+ click: ->
34
+ false
35
+
36
+ ## Returns an array of week day names starting with the short name of the word "week".
37
+ ## The default locale returns: ['Wk','Mon','Tue','Wed','Thu','Fri','Sat','Sun']
38
+ ## See HLocale for more details
39
+ localizedDays: ->
40
+ _str = HLocale.dateTime.strings
41
+ _arr = HVM.clone( _str.weekDaysShort )
42
+ _arr.push( _arr.shift() )
43
+ _arr.unshift( _str.weekShort )
44
+ _arr
45
+
46
+ _destroyWeekDayElems: ->
47
+ if @_weekDayElems?
48
+ for _elemId in @_weekDayElems
49
+ ELEM.del( _elemId )
50
+ @_weekDayElems = null
51
+
52
+ ## Refreshes the week days header
53
+ refreshWeekDays: ->
54
+ @_destroyWeekDayElems()
55
+ _dayNames = @localizedDays()
56
+ _availWidth = @rect.width-2
57
+ _dayWidth = Math.floor( _availWidth/8 )
58
+ _leftOffset = ( _availWidth % 8 ) - 1
59
+ _parentElem = @markupElemIds.label
60
+ _dayElems = []
61
+ for _dayName, i in _dayNames
62
+ _dayElem = ELEM.make( _parentElem )
63
+ ELEM.setHTML( _dayElem, _dayName )
64
+ ELEM.setStyle( _dayElem, 'width', _dayWidth+'px' )
65
+ _left = i * _dayWidth + _leftOffset
66
+ ELEM.setStyle( _dayElem, 'left', _left+'px' )
67
+ @_weekDayElems = _dayElems
68
+
69
+ ## Calls #refreshWeekDays when theme is applied
70
+ refreshLabel: ->
71
+ @refreshWeekDays() if @markupElemIds? and not @_weekDayElems?
72
+
73
+ ## Calculates the first and last week of the month of the _date
74
+ ##
75
+ ## Params:
76
+ ## - _date: A Date instance to check date range from
77
+ ##
78
+ ## Returns:
79
+ ## [Object]: {
80
+ ## week: {
81
+ ## firstDate: [Date]
82
+ ## lastDate: [Date]
83
+ ## firstNum: [Number]
84
+ ## lastNum: [Number]
85
+ ## count: [Number]
86
+ ## }
87
+ ## month: {
88
+ ## firstDate: [Date]
89
+ ## lastDate: [Date]
90
+ ## }
91
+ ## }
92
+ calendarDateRange: (_date)->
93
+ _monthFirst = @firstDateOfMonth( _date )
94
+ _monthLast = @lastDateOfMonth( _date )
95
+ _weekFirst = @firstDateOfWeek( _monthFirst )
96
+ _weekLast = @lastDateOfWeek( _monthLast )
97
+ _firstWeekNum = @week( _weekFirst )
98
+ _lastWeekNum = @week( _weekLast )
99
+ _weeks = _firstWeekNum - _lastWeekNum
100
+ if _weeks == 5
101
+ if _weekFirst.getDate() == 1
102
+ _weekFirst = new Date( _weekFirst.getTime() - @msWeek )
103
+ else
104
+ _weekLast = new Date( _weekLast.getTime() + @msWeek )
105
+ else if _weeks == 4
106
+ _weekFirst = new Date( _weekFirst.getTime() - @msWeek )
107
+ return {
108
+ week: {
109
+ firstDate: _weekFirst
110
+ lastDate: _weekLast
111
+ firstNum: _firstWeekNum
112
+ lastNum: _lastWeekNum
113
+ count: _weeks
114
+ }
115
+ month: {
116
+ firstDate: _monthFirst
117
+ lastDate: _monthLast
118
+ }
119
+ }
120
+
121
+ ## Calls #drawCalendar when the value is changed
122
+ refreshValue: ->
123
+ @drawCalendar( @date() )
124
+
125
+ ## Draws the next month
126
+ nextMonth: ->
127
+ _dateNext = new Date( @viewMonth[0], @viewMonth[1]+1, 1 )
128
+ _dateMs = _dateNext.getTime() - @tzMs(_dateNext)
129
+ @drawCalendar( new Date(_dateMs) )
130
+
131
+ ## Drows the prev month
132
+ prevMonth: ->
133
+ _datePrev = new Date( @viewMonth[0], @viewMonth[1]-1, 1 )
134
+ _dateMs = _datePrev.getTime() - @tzMs(_datePrev)
135
+ @drawCalendar( new Date(_dateMs) )
136
+
137
+ ## Stores the currently viewed year and month
138
+ viewMonth: [ 1970, 0 ]
139
+
140
+ ## Shows a pulldown menu for month selection
141
+ monthMenu: ->
142
+ return unless HMiniMenu?
143
+ _calendar = this
144
+ _monthValues = []
145
+ for _monthName, i in HLocale.dateTime.strings.monthsLong
146
+ _monthValues.push( [ i, _monthName ] )
147
+ _rect = ELEM.getBoxCoords( @_monthMenu )
148
+ _rect[0] += 20
149
+ _rect[2] = 80 if _rect[2] < 80
150
+ HMiniMenu.extend(
151
+ _killAfterRefresh: false
152
+ menuHide: ->
153
+ @base()
154
+ _menu = @
155
+ _menu._killAfterRefresh = true
156
+ COMM.Queue.push( ->
157
+ if _menu._killAfterRefresh
158
+ _menu.refreshValue()
159
+ )
160
+ return true;
161
+ refreshValue: ->
162
+ @base()
163
+ if @_killAfterRefresh
164
+ @_killAfterRefresh = false
165
+ _calendar.setValue( _calendar.setMonth( @value ) )
166
+ if _calendar.month() != @value
167
+ _calendar.setValue( _calendar.setMday( 30 ) )
168
+ _calendar.setValue( _calendar.setMonth( this.value ) )
169
+ if _calendar.month() != @value
170
+ _calendar.setValue( _calendar.setMday( 29 ) )
171
+ _calendar.setValue( _calendar.setMonth( @value ) )
172
+ if _calendar.month() != this.value
173
+ _calendar.setValue( _calendar.setMday( 28 ) )
174
+ _calendar.setValue( _calendar.setMonth( @value ) )
175
+ _menu = this
176
+ COMM.Queue.push( ->
177
+ _menu.die()
178
+ )
179
+ ).new( _rect, @,
180
+ value: @month()
181
+ initialVisibility: true
182
+ ).setListItems( _monthValues )
183
+
184
+ ## Shows a text field for year selection
185
+ yearMenu: ->
186
+ _calendar = @
187
+ _rect = ELEM.getBoxCoords( @_yearMenu )
188
+ _rect[0] += 20
189
+ _rect[2] = 40 if _rect[2] < 40
190
+ _rect[3] = 20
191
+ HNumericTextControl.extend(
192
+ refreshValue: ->
193
+ @base()
194
+ _calendar.setValue( _calendar.setYear( @value ) )
195
+ textBlur: ->
196
+ @base()
197
+ _year = this
198
+ COMM.Queue.push( ->
199
+ _year.die() if _year.markupElemIds?
200
+ )
201
+ textEnter: ->
202
+ @base()
203
+ _returnKeyPressed = EVENT.status[ EVENT.keysDown ].indexOf( 13 ) != -1
204
+ _noKeysPressed = EVENT.status[ EVENT.keysDown ].length == 0
205
+ if _returnKeyPressed or _noKeysPressed
206
+ ELEM.get( @markupElemIds.value ).blur()
207
+ ).new( _rect, @,
208
+ value: @year()
209
+ minValue: -38399
210
+ maxValue: 38400
211
+ focusOnCreate: true
212
+ refreshOnInput: false
213
+ )
214
+
215
+ _destroyCalendarElems: ->
216
+ if @_drawCalendarElems?
217
+ for _elemId in @_drawCalendarElems
218
+ ELEM.del( _elemId )
219
+ @_drawCalendarElems = null
220
+
221
+ die: ->
222
+ @_destroyWeekDayElems()
223
+ @_destroyCalendarElems()
224
+ @base()
225
+
226
+ ## Draws the calendar with the date open given as input.
227
+ ##
228
+ ## Params:
229
+ ## - _date: The date on which calendar UI is opened at.
230
+ drawCalendar: (_date)->
231
+ @_destroyCalendarElems()
232
+ _date = @date() unless ( _date instanceof Date )
233
+ _calendarDateRange = @calendarDateRange( _date )
234
+ _monthFirst = _calendarDateRange.month.firstDate
235
+ _monthLast = _calendarDateRange.month.lastDate
236
+ _firstDate = _calendarDateRange.week.firstDate
237
+ _lastDate = _calendarDateRange.week.lastDate
238
+ _availWidth = @rect.width - 2
239
+ _availHeight = @rect.height - 36
240
+ _leftPlus = ( _availWidth % 8 ) - 2
241
+ _topPlus = ( _availHeight % 6 )
242
+ _colWidth = Math.floor( _availWidth / 8 )
243
+ _rowHeight = Math.floor( _availHeight / 6 )
244
+ _parentElem = @markupElemIds.value
245
+ ELEM.setStyle( _parentElem, 'visibility', 'hidden', true )
246
+ _elems = []
247
+ for _row in [0..5]
248
+ _weekElem = ELEM.make( _parentElem )
249
+ _elems.push( _weekElem )
250
+ ELEM.addClassName( _weekElem, 'calendar_weeks_week_row' )
251
+ ELEM.setStyle( _weekElem, 'width', _availWidth+'px' )
252
+ ELEM.setStyle( _weekElem, 'height', _availHeight+'px' )
253
+ _top = (_row*_rowHeight)+_topPlus
254
+ ELEM.setStyle( _weekElem, 'top', _top+'px' )
255
+ for _col in [0..7]
256
+ if _col == 0
257
+ _colDate = new Date( _firstDate.getTime() + (_row*@msWeek) + (_col*@msDay) )
258
+ _colMs = _colDate.getTime()
259
+ _colElem = ELEM.make( _weekElem )
260
+ _elems.push( _colElem )
261
+ ELEM.addClassName( _colElem, 'calendar_weeks_week_col_wk' )
262
+ ELEM.setStyle( _colElem, 'left', '0px' )
263
+ ELEM.setStyle( _colElem, 'width', _colWidth+'px' )
264
+ ELEM.setStyle( _colElem, 'height', _rowHeight+'px' )
265
+ ELEM.setStyle( _colElem, 'line-height', _rowHeight+'px' )
266
+ ELEM.setHTML( _colElem, @week( _colDate ) )
267
+ else
268
+ _colDate = new Date( _firstDate.getTime() + (_row*@msWeek) + ((_col-1)*@msDay) )
269
+ _colMs = _colDate.getTime()
270
+ _colSecs = Math.round( _colMs/1000 )
271
+ _colElem = ELEM.make( _weekElem, 'a' )
272
+ _elems.push( _colElem )
273
+ if @value >= _colSecs and @value < _colSecs+86400
274
+ ELEM.addClassName( _colElem, 'calendar_weeks_week_col_sel' )
275
+ else if _colDate < _monthFirst or _colDate > _monthLast
276
+ ELEM.addClassName( _colElem, 'calendar_weeks_week_col_no' )
277
+ else
278
+ ELEM.addClassName( _colElem, 'calendar_weeks_week_col_yes' )
279
+ ELEM.setAttr( _colElem, 'href', "javascript:HSystem.views[#{@viewId}].setValue(#{_colMs})" )
280
+ _left = (_col*_colWidth+_leftPlus)
281
+ ELEM.setStyle( _colElem, 'left', _left+'px' )
282
+ ELEM.setStyle( _colElem, 'width', (_colWidth-1)+'px' )
283
+ ELEM.setStyle( _colElem, 'height', (_rowHeight-1)+'px' )
284
+ ELEM.setStyle( _colElem, 'line-height', _rowHeight+'px' )
285
+ ELEM.setHTML( _colElem, @mday( _colDate ) )
286
+ ELEM.setStyle( _parentElem, 'visibility', 'inherit' )
287
+ _stateElem = @markupElemIds.state
288
+
289
+ @_monthMenu = ELEM.make( _stateElem, 'a' )
290
+ _elems.push( @_monthMenu )
291
+ ELEM.setAttr( @_monthMenu, 'href', "javascript:HSystem.views[#{@viewId}].monthMenu()" )
292
+ ELEM.setHTML( @_monthMenu, @monthName( _date ) )
293
+
294
+ _spacer = ELEM.make( _stateElem, 'span' )
295
+ _elems.push( _spacer )
296
+ ELEM.setHTML( _spacer, '&nbsp;' )
297
+
298
+ @_yearMenu = ELEM.make( _stateElem, 'a' )
299
+ _elems.push( @_yearMenu )
300
+ ELEM.setAttr( @_yearMenu, 'href', "javascript:HSystem.views[#{@viewId}].yearMenu()" )
301
+ ELEM.setHTML( @_yearMenu, @year( _date ) )
302
+
303
+ @viewMonth = [ _monthFirst.getUTCFullYear(), _monthFirst.getUTCMonth() ]
304
+ @_drawCalendarElems = _elems
305
+ )
306
+
307
+ HCalendar.implement( HDateTime )
@@ -642,12 +642,19 @@ module RSence
642
642
  end
643
643
 
644
644
  attr_reader :transporter
645
- attr_reader :sessions
646
645
  attr_reader :autoreload
647
646
  attr_reader :name_prefix
648
647
  attr_reader :plugin_paths
649
648
  attr_reader :parent_manager
650
649
 
650
+ def sessions
651
+ warn "no sessions" unless @sessions
652
+ @sessions
653
+ end
654
+ def sessions=(ses_manager)
655
+ @sessions = ses_manager
656
+ end
657
+
651
658
  @@pluginmanager_id = 0
652
659
  # Initialize with a list of directories as plugin_paths.
653
660
  # It's an array containing all plugin directories to scan.
@@ -671,7 +678,7 @@ module RSence
671
678
 
672
679
  if options[:transporter]
673
680
  @transporter = options[:transporter]
674
- @sessions = options[:transporter].sessions
681
+ #@sessions = options[:transporter].sessions
675
682
  end
676
683
 
677
684
  @autoreload = options[:autoreload]
@@ -53,6 +53,7 @@ module RSence
53
53
  @valuemanager = ValueManager.new
54
54
  RSence.value_manager = @valuemanager
55
55
  @sessions = SessionManager.new( self )
56
+ @plugins.sessions = @sessions
56
57
  RSence.session_manager = @sessions
57
58
  if RSence.config[:session_conf][:reset_sessions]
58
59
  puts "Resetting all sessions..."
@@ -276,6 +276,8 @@ class ClientPkgBuild
276
276
  rescue CoffeeScript::CompilationError
277
277
  warn "Invalid CoffeeScript supplied:\n----\n#{src}----\n"
278
278
  js = "function(){console.log('ERROR; invalid CoffeeScript supplied: #{src.to_json}');}"
279
+ rescue
280
+ js = "function(){console.log('ERROR; CoffeeScript compilation failed: #{src.to_json}');}"
279
281
  end
280
282
  js = squeeze( js )
281
283
  return js[1..-3] if js.start_with?('(') and js.end_with?(');')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsence-pre
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0.29
4
+ version: 2.2.0.30
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,19 +10,19 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-11-30 00:00:00.000000000 Z
13
+ date: 2011-12-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rsence-deps
17
- requirement: &70283801667420 !ruby/object:Gem::Requirement
17
+ requirement: &70312415196520 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - =
21
21
  - !ruby/object:Gem::Version
22
- version: '965'
22
+ version: '966'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70283801667420
25
+ version_requirements: *70312415196520
26
26
  description: ! 'RSence is a different and unique development model and software frameworks
27
27
  designed first-hand for real-time web applications. RSence consists of separate,
28
28
  but tigtly integrated data- and user interface frameworks.
@@ -271,7 +271,7 @@ files:
271
271
  - js/core/iefix/iefix.js
272
272
  - js/core/rsence_ns/rsence_ns.coffee
273
273
  - js/core/rsence_ns/rsence_ns.js
274
- - js/datetime/calendar/calendar.js
274
+ - js/datetime/calendar/calendar.coffee
275
275
  - js/datetime/calendar/themes/default/calendar.css
276
276
  - js/datetime/calendar/themes/default/calendar.html
277
277
  - js/datetime/calendar/themes/default/calendar_arrows-ie6.gif
@@ -1,310 +0,0 @@
1
- /* RSence
2
- * Copyright 2009 Riassence Inc.
3
- * http://riassence.com/
4
- *
5
- * You should have received a copy of the GNU General Public License along
6
- * with this software package. If not, contact licensing@riassence.com
7
- */
8
-
9
- /*** = Description
10
- ** Use HCalendar to display a month calendar that displays days as columns
11
- ** and weeks as rows. Its value is a date/time number specified in seconds
12
- ** since or before epoch (1970-01-01 00:00:00 UTC).
13
- ***/
14
- var//RSence.DateTime
15
- HCalendar = HControl.extend({
16
- componentName: 'calendar',
17
- weekdaysLocalized: function(){
18
- var
19
- _localeStrings = HLocale.dateTime.strings,
20
- _outputArray = COMM.Values.clone( _localeStrings.weekDaysShort );
21
- _outputArray.push( _outputArray.shift() );
22
- _outputArray.unshift( _localeStrings.weekShort );
23
- return _outputArray;
24
- },//['Wk','Mon','Tue','Wed','Thu','Fri','Sat','Sun'],
25
- defaultEvents: {
26
- mouseWheel: true,
27
- click: true
28
- },
29
- /** = Description
30
- * Calls HCalendar#nextMonth or HCalendar#prevMonth based on delta
31
- * of mouseWheel.
32
- *
33
- **/
34
- mouseWheel: function(_delta){
35
- if ( _delta < 0 ) {
36
- this.nextMonth();
37
- }
38
- else {
39
- this.prevMonth();
40
- }
41
- },
42
-
43
- /** = Description
44
- * Simple clickthrough
45
- **/
46
- click: function(){
47
- return false;
48
- },
49
-
50
- /** = Description
51
- * Refreshes weekdays.
52
- *
53
- **/
54
- refreshLabel: function(){
55
- if(!this['markupElemIds']){
56
- return;
57
- }
58
- var _weekdays_localized = this.weekdaysLocalized(),
59
- _availWidth = this.rect.width-2,
60
- _weekdays_width = Math.floor(_availWidth/8),
61
- _leftPlus = (_availWidth % 8)-1,
62
- _weekdays_html = [],
63
- i = 0,
64
- _weekdays_html_pre = ['<div style="width:'+_weekdays_width+'px;left:','px">'],
65
- _weekdays_html_suf = '</div>';
66
- for(;i<_weekdays_localized.length;i++){
67
- _weekdays_html.push([
68
- _weekdays_html_pre.join(i*_weekdays_width+_leftPlus),
69
- _weekdays_localized[i],
70
- _weekdays_html_suf
71
- ].join('') );
72
- }
73
- ELEM.setHTML(this.markupElemIds.label, _weekdays_html.join(''));
74
- },
75
-
76
- /** = Description
77
- * Checks the date range for the month which the date given as input belongs.
78
- *
79
- * = Parameters
80
- * +_date+:: A Date instance to check date range from
81
- *
82
- * = Returns
83
- * Array of [0] first week's date and [1] last week's date.
84
- *
85
- **/
86
- calendarDateRange: function(_date){
87
- var _date_begin = this.firstDateOfMonth(_date),
88
- _date_end = this.lastDateOfMonth(_date),
89
- _firstWeeksDate = this.firstDateOfWeek(_date_begin),
90
- _lastWeeksDate = this.lastDateOfWeek(_date_end),
91
- _week_begin = this.week(_firstWeeksDate),
92
- _week_end = this.week(_lastWeeksDate),
93
- _weeks = _week_end-_week_begin;
94
- if((_weeks===5) && (_firstWeeksDate.getDate() !== 1)){
95
- _lastWeeksDate = new Date( _lastWeeksDate.getTime() + this.msWeek );
96
- }
97
- else if((_weeks===5) && (_firstWeeksDate.getDate() === 1)){
98
- _firstWeeksDate = new Date( _firstWeeksDate.getTime() - this.msWeek );
99
- }
100
- else if(_weeks===4){
101
- _firstWeeksDate = new Date( _firstWeeksDate.getTime() - this.msWeek );
102
- _lastWeeksDate = new Date( _lastWeeksDate.getTime() + this.msWeek );
103
- }
104
- return [
105
- _firstWeeksDate,
106
- _lastWeeksDate
107
- ];
108
- },
109
-
110
- /** = Description
111
- * Refreshes the calendar.
112
- *
113
- **/
114
- refreshValue: function(){
115
- var _date = this.date();
116
- this.drawCalendar(_date);
117
- },
118
-
119
- /** = Description
120
- * Draws the next month on calendar.
121
- *
122
- **/
123
- nextMonth: function(){
124
- var _date = new Date( this.viewMonth[0], this.viewMonth[1]+1, 1 );
125
- this.drawCalendar( new Date(_date.getTime() - this.tzMs(_date)) );
126
- },
127
-
128
- /** = Description
129
- * Draws the previous month on calendar.
130
- *
131
- **/
132
- prevMonth: function(){
133
- var _date = new Date( this.viewMonth[0], this.viewMonth[1]-1, 1 );
134
- this.drawCalendar( new Date(_date.getTime() - this.tzMs(_date)) );
135
- },
136
- viewMonth: [1970,0],
137
-
138
- monthMenu: function(){
139
- if(!HPopupMenu){
140
- console.log('HPopupMenu not included; cannot continue');
141
- return;
142
- }
143
- var
144
- _calendar = this,
145
- _menu = HMiniMenu.extend({
146
- refreshValue: function(){
147
- this.base();
148
- if( this._killAfterRefresh ){
149
- this._killAfterRefresh = false;
150
- var _menu = this;
151
- _calendar.setValue( _calendar.setMonth( this.value ) );
152
- if( _calendar.month() !== this.value ){
153
- _calendar.setValue( _calendar.setMday( 30 ) );
154
- _calendar.setValue( _calendar.setMonth( this.value ) );
155
- }
156
- if( _calendar.month() !== this.value ){
157
- _calendar.setValue( _calendar.setMday( 29 ) );
158
- _calendar.setValue( _calendar.setMonth( this.value ) );
159
- }
160
- if( _calendar.month() !== this.value ){
161
- _calendar.setValue( _calendar.setMday( 28 ) );
162
- _calendar.setValue( _calendar.setMonth( this.value ) );
163
- }
164
- COMM.Queue.push( function(){_menu.die();} );
165
- }
166
- },
167
- _killAfterRefresh: false,
168
- menuHide: function(){
169
- this.base();
170
- var _menu = this;
171
- _menu._killAfterRefresh = true;
172
- COMM.Queue.push( function(){_menu._killAfterRefresh && _menu.refreshValue();} );
173
- return true;
174
- }
175
- }).nu( [24, 0, Math.round(this.rect.width*0.66)-24, 20 ], this, {
176
- value: this.month(),
177
- initialVisibility: true
178
- } ),
179
- _monthValues = [],
180
- i = 0,
181
- _monthNames = HLocale.dateTime.strings.monthsLong;
182
- for(;i<_monthNames.length;i++){
183
- _monthValues.push( [ i, _monthNames[i] ] );
184
- }
185
- _menu.setListItems( _monthValues );
186
- },
187
-
188
- yearMenu: function(){
189
- var
190
- _calendar = this,
191
- _year = HNumericTextControl.extend({
192
- refreshValue: function(){
193
- this.base();
194
- _calendar.setValue( _calendar.setYear( this.value ) );
195
- },
196
- textBlur: function(){
197
- this.base();
198
- COMM.Queue.push( function(){_year.die();} );
199
- },
200
- textEnter: function(){
201
- this.base();
202
- if( ( EVENT.status[ EVENT.keysDown ].indexOf( 13 ) !== -1 ) || ( EVENT.status[ EVENT.keysDown ].length === 0 ) ){
203
- ELEM.get( this.markupElemIds.value ).blur();
204
- }
205
- }
206
- }).nu(
207
- HRect.nu(this.rect.width/2,0,this.rect.width-32,20),
208
- this, {
209
- value: this.year(),
210
- minValue: -38399,
211
- maxValue: 38400,
212
- focusOnCreate: true,
213
- refreshOnInput: false
214
- }
215
- );
216
- },
217
-
218
- /** = Description
219
- * Draws the calendar with the date open given as input.
220
- *
221
- * = Parameters
222
- * +_date+:: The date on which calendar UI is opened at.
223
- *
224
- **/
225
- drawCalendar: function(_date){
226
- _date = (_date instanceof Date)?_date:this.date();
227
- var _calendarDateRange = this.calendarDateRange(_date),
228
- _monthFirst = this.firstDateOfMonth(_date),
229
- _monthLast = this.lastDateOfMonth(_date),
230
- _firstDate = _calendarDateRange[0],
231
- _lastDate = _calendarDateRange[1],
232
- _availWidth = this.rect.width-2,
233
- _availHeight = this.rect.height-36,
234
- _leftPlus = (_availWidth%8)-2,
235
- _topPlus = _availHeight%6,
236
- _column_width = Math.floor(_availWidth/8),
237
- _row_height = Math.floor(_availHeight/6),
238
- _week_html_pre = ['<div class="calendar_weeks_week_row" style="width:'+(_availWidth)+'px;height:'+_row_height+'px;top:','px">'],
239
- _week_html_suf = '</div>',
240
- _col_html_pre = ['<a href="javascript:void(HSystem.views['+this.viewId+'].setValue(','));" class="calendar_weeks_week_col','" style="width:'+_column_width+'px;height:'+_row_height+'px;line-height:'+_row_height+'px;left:','px">'],
241
- _col_html_suf = '</a>',
242
- _col_week_pre = '<div class="calendar_weeks_week_col_wk" style="width:'+_column_width+'px;height:'+_row_height+'px;line-height:'+_row_height+'px;left:0px">',
243
- _col_week_suf = '</div>',
244
- _month_html = [],
245
- _week_html,
246
- _col_html,
247
- _row = 0,
248
- _col,
249
- _colMs,
250
- _colSecs,
251
- _colDate,
252
- _monthYearHTML,
253
- _extraCssClass;
254
- for(; _row<6; _row++){
255
- _week_html = [];
256
- for(_col = 0; _col<8; _col++){
257
- _colDate = new Date(_firstDate.getTime()+((_row*this.msWeek)+((_col-1)*this.msDay)));
258
- _colMs = _colDate.getTime();
259
- if(_col===0){
260
- _col_html = [
261
- _col_week_pre,
262
- this.week(_colDate),
263
- _col_week_suf
264
- ].join('');
265
- }
266
- else {
267
- _colSecs = Math.round(_colMs/1000);
268
- if((this.value >= _colSecs) && (this.value < (_colSecs+86400))){
269
- _extraCssClass = '_'+'sel';
270
- }
271
- else{
272
- _extraCssClass = (_colDate<_monthFirst || _colDate > _monthLast)?'_'+'no':'_'+'yes';
273
- }
274
- _col_html = [
275
- _col_html_pre[0],
276
- _colSecs,
277
- _col_html_pre[1],
278
- _extraCssClass,
279
- _col_html_pre[2],
280
- (_col*_column_width+_leftPlus),
281
- _col_html_pre[3],
282
- this.mday(_colDate),
283
- _col_html_suf
284
- ].join('');
285
- }
286
- _week_html.push(_col_html);
287
- }
288
- _month_html.push([
289
- _week_html_pre.join(_row*_row_height+_topPlus),
290
- _week_html.join(''),
291
- _week_html_suf
292
- ].join('') );
293
- }
294
- ELEM.setHTML( this.markupElemIds.value, _month_html.join('') );
295
- _monthYearHTML = [
296
- '<a href="javascript:void(HSystem.views[',
297
- this.viewId,
298
- '].monthMenu());">',
299
- this.monthName(_date),
300
- '</a>&nbsp;<a href="javascript:void(HSystem.views[',
301
- this.viewId,
302
- '].yearMenu());">',
303
- this.year(_date),
304
- '</a>'
305
- ].join('');
306
- ELEM.setHTML( this.markupElemIds.state, _monthYearHTML );
307
- this.viewMonth = [_monthFirst.getUTCFullYear(),_monthFirst.getUTCMonth()];
308
- }
309
- });
310
- HCalendar.implement(HDateTime);