rsence 2.1.11 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (216) hide show
  1. data/INSTALL.rdoc +5 -3
  2. data/README.rdoc +23 -22
  3. data/VERSION +1 -1
  4. data/conf/default_conf.yaml +65 -29
  5. data/conf/rsence_command_strings.yaml +101 -71
  6. data/js/comm/autosync/autosync.js +3 -3
  7. data/js/comm/jsloader/jsloader.js +16 -3
  8. data/js/comm/queue/queue.js +1 -1
  9. data/js/comm/transporter/transporter.js +106 -83
  10. data/js/comm/values/values.js +8 -2
  11. data/js/controls/button/button.js +9 -4
  12. data/js/controls/button/themes/default/button.css +1 -1
  13. data/js/controls/checkbox/themes/default/checkbox.css +1 -1
  14. data/js/controls/dialogs/sheet/sheet.js +27 -18
  15. data/js/controls/radiobutton/themes/default/radiobutton.css +1 -1
  16. data/js/controls/searchfield/searchfield.coffee +2 -0
  17. data/js/controls/searchfield/themes/default/searchfield.css +96 -0
  18. data/js/controls/searchfield/themes/default/searchfield.html +12 -0
  19. data/js/controls/searchfield/themes/default/searchfield_parts1-ie6.gif +0 -0
  20. data/js/controls/searchfield/themes/default/searchfield_parts1.png +0 -0
  21. data/js/controls/sliders/slider/slider.js +7 -1
  22. data/js/controls/stepper/stepper.js +6 -1
  23. data/js/controls/stringview/stringview.js +50 -39
  24. data/js/controls/tab/tab.js +103 -7
  25. data/js/controls/tab/themes/default/tab.css +2 -0
  26. data/js/controls/textarea/themes/default/textarea.css +4 -0
  27. data/js/controls/textcontrol/textcontrol.js +32 -2
  28. data/js/controls/textcontrol/themes/default/textcontrol.css +17 -2
  29. data/js/controls/uploader/themes/default/uploader.css +3 -3
  30. data/js/controls/uploader/themes/default/uploader.html +1 -1
  31. data/js/controls/uploader/uploader.coffee +110 -0
  32. data/js/controls/window/themes/default/window.css +28 -5
  33. data/js/controls/window/themes/default/window.html +2 -0
  34. data/js/controls/window/window.js +5 -1
  35. data/js/core/class/class.js +22 -4
  36. data/js/core/elem/elem.coffee +816 -0
  37. data/js/core/event/event.js +2 -2
  38. data/js/core/rsence_ns/rsence_ns.coffee +31 -0
  39. data/js/core/rsence_ns/rsence_ns.js +6 -6
  40. data/js/datetime/calendar/calendar.coffee +307 -0
  41. data/js/datetime/calendar/themes/default/calendar.css +90 -9
  42. data/js/datetime/calendar/themes/default/calendar.html +11 -0
  43. data/js/datetime/calendar/themes/default/calendar_bg-ie6.gif +0 -0
  44. data/js/datetime/calendar/themes/default/calendar_bg.png +0 -0
  45. data/js/datetime/calendar/themes/default/calendar_parts1-ie6.gif +0 -0
  46. data/js/datetime/calendar/themes/default/calendar_parts1.png +0 -0
  47. data/js/datetime/calendar/themes/default/calendar_parts2-ie6.gif +0 -0
  48. data/js/datetime/calendar/themes/default/calendar_parts2.png +0 -0
  49. data/js/datetime/datetimepicker/datetimepicker.js +217 -0
  50. data/js/datetime/datetimevalue/datetimevalue.js +22 -5
  51. data/js/datetime/timesheet/themes/default/timesheet.css +51 -22
  52. data/js/datetime/timesheet/themes/default/timesheet.html +4 -2
  53. data/js/datetime/timesheet/timesheet.js +782 -192
  54. data/js/datetime/timesheet_item/themes/default/timesheet_item.css +42 -11
  55. data/js/datetime/timesheet_item/themes/default/timesheet_item.html +4 -2
  56. data/js/datetime/timesheet_item/themes/default/timesheet_item_icons.png +0 -0
  57. data/js/datetime/timesheet_item/timesheet_item.js +158 -254
  58. data/js/datetime/timesheet_item_edit/timesheet_item_edit.js +0 -274
  59. data/js/foundation/application/application.js +52 -9
  60. data/js/foundation/control/eventresponder/eventresponder.js +7 -4
  61. data/js/foundation/control/valueaction/valueaction.js +71 -0
  62. data/js/foundation/eventmanager/eventmanager.js +71 -33
  63. data/js/foundation/geom/rect/rect.js +39 -7
  64. data/js/foundation/json_renderer/json_renderer.js +278 -62
  65. data/js/foundation/locale_settings/locale_settings.js +131 -0
  66. data/js/foundation/system/system.js +40 -13
  67. data/js/foundation/thememanager/thememanager.js +21 -0
  68. data/js/foundation/view/markupview/markupview.js +12 -12
  69. data/js/foundation/view/view.js +221 -27
  70. data/js/graphics/svgcontrol/svgcontrol.js +400 -0
  71. data/js/lists/checkboxlist/checkboxlist.js +18 -7
  72. data/js/lists/listitems/listitems.js +52 -38
  73. data/js/lists/radiobuttonlist/radiobuttonlist.js +23 -7
  74. data/js/menus/menuitem/menuitem.js +5 -0
  75. data/js/menus/menuitem/themes/default/menuitem.css +45 -0
  76. data/js/menus/menuitem/themes/default/menuitem.html +4 -0
  77. data/js/menus/minimenu/minimenu.js +47 -16
  78. data/js/menus/minimenuitem/minimenuitem.js +62 -0
  79. data/js/menus/{minimenu/minimenuitem → minimenuitem}/themes/default/minimenuitem.css +2 -2
  80. data/js/menus/{minimenu/minimenuitem → minimenuitem}/themes/default/minimenuitem.html +0 -0
  81. data/js/menus/{minimenu/minimenuitem → minimenuitem}/themes/default/minimenuitem_checkmark.png +0 -0
  82. data/js/menus/popupmenu/popupmenu.js +14 -0
  83. data/js/menus/popupmenu/themes/default/popupmenu.css +65 -0
  84. data/js/menus/popupmenu/themes/default/popupmenu.html +7 -0
  85. data/js/menus/popupmenu/themes/default/popupmenu.png +0 -0
  86. data/js/no_pkg/no_pkg.js +2 -0
  87. data/js/util/reloadapp/reloadapp.js +1 -1
  88. data/js/views/scrollview/scrollview.js +6 -0
  89. data/lib/rsence.rb +136 -3
  90. data/lib/rsence/argv.rb +218 -0
  91. data/lib/rsence/argv/argv_util.rb +58 -0
  92. data/lib/rsence/argv/env_check.rb +58 -0
  93. data/lib/rsence/argv/help_argv.rb +15 -0
  94. data/lib/rsence/argv/initenv_argv.rb +218 -0
  95. data/lib/rsence/argv/save_argv.rb +92 -0
  96. data/lib/rsence/argv/startup_argv.rb +118 -0
  97. data/lib/rsence/argv/status_argv.rb +132 -0
  98. data/lib/rsence/argv/test_port.rb +32 -0
  99. data/lib/{daemon → rsence}/daemon.rb +67 -23
  100. data/lib/{conf/default.rb → rsence/default_config.rb} +18 -10
  101. data/lib/{plugins → rsence}/dependencies.rb +0 -0
  102. data/lib/{util → rsence}/gzstring.rb +0 -0
  103. data/lib/rsence/http.rb +3 -0
  104. data/lib/{http → rsence/http}/broker.rb +106 -19
  105. data/lib/{http → rsence/http}/rackup.rb +0 -0
  106. data/lib/{http → rsence/http}/request.rb +0 -4
  107. data/lib/{http → rsence/http}/response.rb +0 -1
  108. data/lib/{session → rsence}/msg.rb +17 -1
  109. data/lib/{plugins → rsence}/pluginmanager.rb +29 -12
  110. data/lib/{plugins → rsence}/plugins.rb +7 -7
  111. data/lib/{plugins → rsence/plugins}/gui_plugin.rb +8 -3
  112. data/lib/{plugins → rsence/plugins}/guiparser.rb +9 -6
  113. data/lib/{plugins → rsence/plugins}/plugin.rb +23 -4
  114. data/lib/{plugins → rsence/plugins}/plugin_base.rb +11 -1
  115. data/lib/{plugins → rsence/plugins}/plugin_plugins.rb +2 -2
  116. data/lib/{plugins → rsence/plugins}/plugin_sqlite_db.rb +0 -0
  117. data/lib/{plugins → rsence/plugins}/servlet.rb +0 -0
  118. data/lib/{session → rsence}/sessionmanager.rb +101 -39
  119. data/lib/{session → rsence}/sessionstorage.rb +30 -16
  120. data/lib/{daemon → rsence}/sigcomm.rb +0 -0
  121. data/lib/{transporter → rsence}/transporter.rb +13 -11
  122. data/lib/{values/hvalue.rb → rsence/value.rb} +6 -1
  123. data/lib/{values → rsence}/valuemanager.rb +1 -1
  124. data/plugins/client_pkg/client_pkg.rb +14 -4
  125. data/plugins/client_pkg/info.yaml +2 -2
  126. data/plugins/client_pkg/lib/client_pkg_build.rb +145 -45
  127. data/plugins/client_pkg/lib/client_pkg_cache.rb +1 -1
  128. data/plugins/client_pkg/lib/client_pkg_serve.rb +1 -1
  129. data/plugins/main/main.rb +43 -3
  130. data/plugins/main/tmpl/index.html +2 -10
  131. data/plugins/main/values.yaml +3 -1
  132. data/plugins/ticket/lib/common.rb +6 -3
  133. data/plugins/ticket/ticket.rb +11 -3
  134. metadata +144 -174
  135. data/js/comm/autosync/js.inc +0 -0
  136. data/js/comm/js.inc +0 -0
  137. data/js/comm/jsloader/js.inc +0 -0
  138. data/js/comm/queue/js.inc +0 -0
  139. data/js/comm/session/js.inc +0 -0
  140. data/js/comm/sessionwatcher/js.inc +0 -0
  141. data/js/comm/transporter/js.inc +0 -0
  142. data/js/comm/urlresponder/js.inc +0 -0
  143. data/js/comm/values/js.inc +0 -0
  144. data/js/controls/button/js.inc +0 -0
  145. data/js/controls/checkbox/js.inc +0 -0
  146. data/js/controls/dialogs/alert_sheet/js.inc +0 -0
  147. data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
  148. data/js/controls/dialogs/sheet/js.inc +0 -0
  149. data/js/controls/imageview/js.inc +0 -0
  150. data/js/controls/passwordcontrol/js.inc +0 -0
  151. data/js/controls/progress/progressbar/js.inc +0 -0
  152. data/js/controls/progress/progressindicator/js.inc +0 -0
  153. data/js/controls/radiobutton/js.inc +0 -0
  154. data/js/controls/sliders/slider/js.inc +0 -0
  155. data/js/controls/sliders/vslider/js.inc +0 -0
  156. data/js/controls/stepper/js.inc +0 -0
  157. data/js/controls/stringview/js.inc +0 -0
  158. data/js/controls/tab/js.inc +0 -0
  159. data/js/controls/textarea/js.inc +0 -0
  160. data/js/controls/textcontrol/js.inc +0 -0
  161. data/js/controls/uploader/js.inc +0 -0
  162. data/js/controls/uploader/uploader.js +0 -154
  163. data/js/controls/validatorview/js.inc +0 -0
  164. data/js/controls/window/js.inc +0 -0
  165. data/js/core/class/js.inc +0 -0
  166. data/js/core/elem/elem.js +0 -1325
  167. data/js/core/elem/js.inc +0 -0
  168. data/js/core/event/js.inc +0 -0
  169. data/js/core/iefix/js.inc +0 -0
  170. data/js/core/rsence_ns/js.inc +0 -0
  171. data/js/datetime/calendar/calendar.js +0 -198
  172. data/js/datetime/calendar/js.inc +0 -0
  173. data/js/datetime/datetimevalue/js.inc +0 -0
  174. data/js/datetime/timesheet/js.inc +0 -0
  175. data/js/datetime/timesheet/old_timesheet.js +0 -292
  176. data/js/datetime/timesheet/themes/default/old_timesheet.css +0 -30
  177. data/js/datetime/timesheet/themes/default/old_timesheet.html +0 -2
  178. data/js/datetime/timesheet_item/js.inc +0 -0
  179. data/js/datetime/timesheet_item/old_timesheet_item.js +0 -308
  180. data/js/datetime/timesheet_item/themes/default/old_timesheet_item.css +0 -42
  181. data/js/datetime/timesheet_item/themes/default/old_timesheet_item.html +0 -8
  182. data/js/datetime/timesheet_item_edit/js.inc +0 -0
  183. data/js/datetime/timesheet_item_edit/old_timesheet_item_edit.js +0 -274
  184. data/js/foundation/application/js.inc +0 -0
  185. data/js/foundation/control/controldefaults/js.inc +0 -0
  186. data/js/foundation/control/dummyvalue/js.inc +0 -0
  187. data/js/foundation/control/dyncontrol/js.inc +0 -0
  188. data/js/foundation/control/eventresponder/js.inc +0 -0
  189. data/js/foundation/control/js.inc +0 -0
  190. data/js/foundation/control/valuematrix/js.inc +0 -0
  191. data/js/foundation/control/valueresponder/js.inc +0 -0
  192. data/js/foundation/eventmanager/js.inc +0 -0
  193. data/js/foundation/geom/point/js.inc +0 -0
  194. data/js/foundation/geom/rect/js.inc +0 -0
  195. data/js/foundation/json_renderer/js.inc +0 -0
  196. data/js/foundation/system/js.inc +0 -0
  197. data/js/foundation/thememanager/js.inc +0 -0
  198. data/js/foundation/value/js.inc +0 -0
  199. data/js/foundation/view/js.inc +0 -0
  200. data/js/foundation/view/markupview/js.inc +0 -0
  201. data/js/foundation/view/morphanimation/js.inc +0 -0
  202. data/js/foundation/view/viewdefaults/js.inc +0 -0
  203. data/js/lists/checkboxlist/js.inc +0 -0
  204. data/js/lists/listitems/js.inc +0 -0
  205. data/js/lists/propertylist/js.inc +0 -0
  206. data/js/lists/propertylist/propertylisteditor/js.inc +0 -0
  207. data/js/lists/radiobuttonlist/js.inc +0 -0
  208. data/js/menus/minimenu/js.inc +0 -0
  209. data/js/menus/minimenu/minimenuitem/js.inc +0 -0
  210. data/js/menus/minimenu/minimenuitem/minimenuitem.js +0 -33
  211. data/js/util/reloadapp/js.inc +0 -0
  212. data/js/util/sha/js.inc +0 -0
  213. data/js/views/centerview/js.inc +0 -0
  214. data/js/views/inlineview/js.inc +0 -0
  215. data/js/views/scrollview/js.inc +0 -0
  216. data/lib/conf/argv.rb +0 -880
data/js/core/elem/js.inc DELETED
File without changes
data/js/core/event/js.inc DELETED
File without changes
data/js/core/iefix/js.inc DELETED
File without changes
File without changes
@@ -1,198 +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
- weekdays_localized: ['Wk','Mon','Tue','Wed','Thu','Fri','Sat','Sun'],
18
- defaultEvents: {
19
- mouseWheel: true
20
- },
21
- /** = Description
22
- * Calls HCalendar#nextMonth or HCalendar#prevMonth based on delta
23
- * of mouseWheel.
24
- *
25
- **/
26
- mouseWheel: function(_delta){
27
- if ( _delta < 0 ) {
28
- this.nextMonth();
29
- }
30
- else {
31
- this.prevMonth();
32
- }
33
- },
34
-
35
- /** = Description
36
- * Refreshes weekdays.
37
- *
38
- **/
39
- refreshLabel: function(){
40
- if(!this['markupElemIds']){
41
- return;
42
- }
43
- var _weekdays_localized = this.weekdays_localized,
44
- _weekdays_width = Math.floor(this.rect.width/_weekdays_localized.length),
45
- _weekdays_html = [],
46
- i = 0,
47
- _weekdays_html_pre = ['<div style="width:'+_weekdays_width+'px;left:','px">'],
48
- _weekdays_html_suf = '</div>';
49
- for(;i<_weekdays_localized.length;i++){
50
- _weekdays_html.push([
51
- _weekdays_html_pre.join(i*_weekdays_width),
52
- _weekdays_localized[i],
53
- _weekdays_html_suf
54
- ].join('') );
55
- }
56
- ELEM.setHTML(this.markupElemIds.label, _weekdays_html.join(''));
57
- },
58
-
59
- /** = Description
60
- * Checks the date range for the month which the date given as input belongs.
61
- *
62
- * = Parameters
63
- * +_date+:: A Date instance to check date range from
64
- *
65
- * = Returns
66
- * Array of [0] first week's date and [1] last week's date.
67
- *
68
- **/
69
- calendarDateRange: function(_date){
70
- var _date_begin = this.firstDateOfMonth(_date),
71
- _date_end = this.lastDateOfMonth(_date),
72
- _firstWeeksDate = this.firstDateOfWeek(_date_begin),
73
- _lastWeeksDate = this.lastDateOfWeek(_date_end),
74
- _week_begin = this.week(_firstWeeksDate),
75
- _week_end = this.week(_lastWeeksDate),
76
- _weeks = _week_end-_week_begin;
77
- if((_weeks===5) && (_firstWeeksDate.getDate() !== 1)){
78
- _lastWeeksDate = new Date( _lastWeeksDate.getTime() + this.msWeek );
79
- }
80
- else if((_weeks===5) && (_firstWeeksDate.getDate() === 1)){
81
- _firstWeeksDate = new Date( _firstWeeksDate.getTime() - this.msWeek );
82
- }
83
- else if(_weeks===4){
84
- _firstWeeksDate = new Date( _firstWeeksDate.getTime() - this.msWeek );
85
- _lastWeeksDate = new Date( _lastWeeksDate.getTime() + this.msWeek );
86
- }
87
- return [
88
- _firstWeeksDate,
89
- _lastWeeksDate
90
- ];
91
- },
92
-
93
- /** = Description
94
- * Refreshes the calendar.
95
- *
96
- **/
97
- refreshValue: function(){
98
- var _date = this.date();
99
- this.drawCalendar(_date);
100
- },
101
-
102
- /** = Description
103
- * Draws the next month on calendar.
104
- *
105
- **/
106
- nextMonth: function(){
107
- var _date = new Date( this.viewMonth[0], this.viewMonth[1]+1, 1 );
108
- this.drawCalendar( new Date(_date.getTime() - this.tzMs(_date)) );
109
- },
110
-
111
- /** = Description
112
- * Draws the previous month on calendar.
113
- *
114
- **/
115
- prevMonth: function(){
116
- var _date = new Date( this.viewMonth[0], this.viewMonth[1]-1, 1 );
117
- this.drawCalendar( new Date(_date.getTime() - this.tzMs(_date)) );
118
- },
119
- viewMonth: [1970,0],
120
-
121
- /** = Description
122
- * Draws the calendar with the date open given as input.
123
- *
124
- * = Parameters
125
- * +_date+:: The date on which calendar UI is opened at.
126
- *
127
- **/
128
- drawCalendar: function(_date){
129
- _date = (_date instanceof Date)?_date:this.date();
130
- var _calendarDateRange = this.calendarDateRange(_date),
131
- _monthFirst = this.firstDateOfMonth(_date),
132
- _monthLast = this.lastDateOfMonth(_date),
133
- _firstDate = _calendarDateRange[0],
134
- _lastDate = _calendarDateRange[1],
135
- _column_count = this.weekdays_localized.length,
136
- _column_width = Math.floor((this.rect.width-1)/_column_count),
137
- _row_height = Math.floor((this.rect.height-1-35)/6),
138
- _week_html_pre = ['<div class="calendar_weeks_week_row" style="width:'+(this.rect.width-3)+'px;height:'+_row_height+'px;top:','px">'],
139
- _week_html_suf = '</div>',
140
- _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">'],
141
- _col_html_suf = '</a>',
142
- _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">',
143
- _col_week_suf = '</div>',
144
- _month_html = [],
145
- _week_html,
146
- _col_html,
147
- _row = 0,
148
- _col,
149
- _colMs,
150
- _colSecs,
151
- _colDate,
152
- _extraCssClass;
153
- for(; _row<6; _row++){
154
- _week_html = [];
155
- for(_col = 0; _col<8; _col++){
156
- _colDate = new Date(_firstDate.getTime()+((_row*this.msWeek)+((_col-1)*this.msDay)));
157
- _colMs = _colDate.getTime();
158
- if(_col===0){
159
- _col_html = [
160
- _col_week_pre,
161
- this.week(_colDate),
162
- _col_week_suf
163
- ].join('');
164
- }
165
- else {
166
- _colSecs = Math.round(_colMs/1000);
167
- if((this.value >= _colSecs) && (this.value < (_colSecs+86400))){
168
- _extraCssClass = '_'+'sel';
169
- }
170
- else{
171
- _extraCssClass = (_colDate<_monthFirst || _colDate > _monthLast)?'_'+'no':'_'+'yes';
172
- }
173
- _col_html = [
174
- _col_html_pre[0],
175
- _colSecs,
176
- _col_html_pre[1],
177
- _extraCssClass,
178
- _col_html_pre[2],
179
- (_col*_column_width),
180
- _col_html_pre[3],
181
- this.mday(_colDate),
182
- _col_html_suf
183
- ].join('');
184
- }
185
- _week_html.push(_col_html);
186
- }
187
- _month_html.push([
188
- _week_html_pre.join(_row*_row_height),
189
- _week_html.join(''),
190
- _week_html_suf
191
- ].join('') );
192
- }
193
- ELEM.setHTML(this.markupElemIds.value, _month_html.join(''));
194
- ELEM.setHTML(this.markupElemIds.state, this.monthName(_date)+'&nbsp;'+this.year(_date));
195
- this.viewMonth = [_monthFirst.getUTCFullYear(),_monthFirst.getUTCMonth()];
196
- }
197
- });
198
- HCalendar.implement(HDateTime);
File without changes
File without changes
File without changes
@@ -1,292 +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
- ** HTimesheet is a simple timesheet control.
11
- ***/
12
- var//RSence.DateTime
13
- HTimeSheet = HControl.extend({
14
-
15
- componentName: 'timesheet',
16
-
17
- /* Default amount of pixels per hour. Override with options when necessary. */
18
- pxPerHour: 24,
19
-
20
- /* Default amount of pixels from left. Override with options when necessary. */
21
- itemOffsetLeft: 36,
22
-
23
- /* Default amount of pixels from right. Override with options when necessary. */
24
- itemOffsetRight: 0,
25
-
26
- defaultEvents: {
27
- draggable: true
28
- },
29
-
30
- controlDefaults: HControlDefaults.extend({
31
- pxPerHour: null,
32
- itemOffsetLeft: null,
33
- itemOffsetRight: null,
34
- itemMinHeight: 24,
35
- newItemLabel: 'New Item',
36
- constructor: function(_ctrl){
37
- if(this.pxPerHour !== null){
38
- _ctrl.pxPerHour = this.pxPerHour;
39
- }
40
- if(this.itemOffsetLeft !== null){
41
- _ctrl.itemOffsetLeft = this.itemOffsetLeft;
42
- }
43
- if(this.itemOffsetRight !== null){
44
- _ctrl.itemOffsetRight = this.itemOffsetRight;
45
- }
46
- }
47
- }),
48
-
49
- /** = Description
50
- * Redraws the timesheet.
51
- *
52
- **/
53
- refresh: function(){
54
- if(this.drawn){
55
- var _areaHeight = this.rect.height;
56
- this.pxPerHour = (_areaHeight-(_areaHeight%48)) / 24;
57
- if(this.options['hideLabel']){
58
- this.setStyleOfPart( 'label', 'display', 'none' );
59
- this.setStyleOfPart( 'state', 'left', '0px' );
60
- this.itemOffsetLeft = 0;
61
- }
62
- else{
63
- this.setStyleOfPart( 'label', 'height', (this.pxPerHour*24)+'px' );
64
- }
65
- this.setStyleOfPart( 'state', 'height', (this.pxPerHour*24)+'px' );
66
- }
67
- this.base();
68
- },
69
-
70
- /** = Description
71
- * Refreshes the hour labels.
72
- *
73
- **/
74
- refreshLabel: function(){
75
- var hour = 1,
76
- hours = [],
77
- rowHeight = this.pxPerHour;
78
- lineHeight = Math.round(this.pxPerHour/2);
79
- for(; hour < 24; hour++){
80
- hours.push('<div style="line-height:'+rowHeight+'px;height:'+rowHeight+'px;top:'+Math.round((hour*rowHeight)-lineHeight)+'px" class="timesheet_hours_row">'+hour+':00</div>');
81
- }
82
- this.markupElemIds && this.markupElemIds.label && ELEM.setHTML(this.markupElemIds.label,hours.join(''));
83
- this.refreshState();
84
- },
85
-
86
- /** = Description
87
- * Refreshes the lines which mark hours and half-hours.
88
- *
89
- **/
90
- refreshState: function(){
91
- var line = 0,
92
- lines = [],
93
- lineHeight = Math.round(this.pxPerHour/2);
94
- for(; line < 48; line++){
95
- lines.push('<div style="top:'+(line*lineHeight)+'px" class="timesheet_lines_row'+(line%2)+'"></div>');
96
- }
97
- this.markupElemIds && this.markupElemIds.label && ELEM.setHTML(this.markupElemIds.state,lines.join(''));
98
- },
99
- dragItem: false,
100
-
101
- /** = Description
102
- * Creates an item into timesheet with default label 'New Item'.
103
- *
104
- * = Parameters
105
- * +origY+:: Y coordinate of the new item.
106
- *
107
- **/
108
- createItem: function(origY){
109
- var _lineHeight = Math.round(this.pxPerHour/2);
110
- origY = Math.floor( origY / _lineHeight )*_lineHeight;
111
- var maxY = _lineHeight*48,
112
- lineHeight = Math.round(this.pxPerHour/2);
113
- if(origY>maxY){
114
- origY = maxY;
115
- }
116
- this.dragItem = this.createTimeSheetItem( { label: this.options.newItemLabel }, origY, lineHeight, 'create' );
117
- },
118
-
119
- /** = Description
120
- * Dragging is used to mark items on the timesheet.
121
- *
122
- * = Parameters
123
- * +x+:: x coordinate of the origin of drag
124
- * +y+:: y coordinate of the origin of drag
125
- *
126
- **/
127
- startDrag: function(x,y){
128
- this._startDragTime = new Date().getTime();
129
- this._startDragCoords = [x,y];
130
- return true;
131
- },
132
-
133
- drag: function(x,y){
134
- if(((new Date().getTime()) - this._startDragTime) < 200){
135
- // only create when 200 ms has elapsed to enable clicking
136
- return true;
137
- }
138
- if(this._startDragCoords[0]!==x && this._startDragCoords[1]!==y){
139
- this.createItem(this._startDragCoords[1]-this.pageY());
140
- EVENT.startDragging( this.dragItem );
141
- return true;
142
- }
143
- },
144
-
145
- click: function(x,y){
146
- // deactivate all items
147
- EVENT.changeActiveControl(this);
148
- return true;
149
- },
150
-
151
- listItemViews: false,
152
-
153
- /** = Description
154
- * Sets the editor given as parameter as the editor of instance.
155
- *
156
- * = Parameters
157
- * +_editor+::
158
- *
159
- **/
160
- setEditor: function( _editor ){
161
- this.editor = _editor;
162
- },
163
-
164
- /** = Description
165
- * Returns HRect the size of given parameters and suitable for timesheet.
166
- *
167
- * = Parameters
168
- * +_origY+:: Y coordinate.
169
- * +_lineHeight+:: The height of item on time sheet.
170
- *
171
- **/
172
- createItemRect: function(_origY, _lineHeight){
173
- var _left = this.itemOffsetLeft+1,
174
- _top = _origY+1,
175
- _right = this.rect.width - this.itemOffsetRight - 1,
176
- _bottom = _origY + _lineHeight - 2;
177
- if( (_top - _bottom) < this.options.itemMinHeight ){
178
- _bottom = _top + this.options.itemMinHeight;
179
- }
180
- return HRect.nu( _left, _top, _right, _bottom );
181
- },
182
-
183
- /** = Description
184
- * Destructor; destroys the editor first and commences inherited die.
185
- *
186
- **/
187
- die: function(){
188
- this.editor.die();
189
- this.base();
190
- },
191
-
192
- /** = Description
193
- * Returns a new time sheet item control. By default returns an instance
194
- * of HTimeSheetItem. Extend to use custom time sheet controls customized
195
- * for application specific purposes.
196
- *
197
- * = Parameters
198
- * *_value*:: A value object for the item.
199
- * *_top*:: Top position, 0 by default.
200
- * *_height*:: Height, same as half of +#pxPerHour+ by default.
201
- * *_drogMode*:: Dragging mode. 'normal' or 'create'. Is 'normal' by default.
202
- *
203
- **/
204
- createTimeSheetItem: function( _value, _top, _height, _dragMode ) {
205
- if(_dragMode===undefined){
206
- _dragMode = 'normal';
207
- }
208
- if(_top===undefined){
209
- _top = 0;
210
- }
211
- if(_height===undefined){
212
- _height = Math.round(this.pxPerHour/2);
213
- }
214
- var
215
- _label = _value['label'],
216
- _item = HTimeSheetItem.nu(
217
- this.createItemRect( _top, _height ),
218
- this, {
219
- label: _label,
220
- value: _value,
221
- events: {
222
- draggable: true
223
- }
224
- }
225
- );
226
- _item.dragMode = _dragMode;
227
- return _item;
228
- },
229
-
230
- /** = Description
231
- * Redraws and refreshes the values on timesheet.
232
- *
233
- **/
234
- refreshValue: function(){
235
- var
236
- _data = this.value,
237
- i;
238
- if(this.listItemViews === false){
239
- this.listItemViews = [];
240
- }
241
- else if(this.listItemViews.length > 0){
242
- for( i=0; i<this.listItemViews.length; i++){
243
- this.listItemViews[i].die();
244
- }
245
- this.listItemViews = [];
246
- }
247
- if(_data instanceof Array && _data.length > 0){
248
- var
249
- _value,
250
- _item;
251
- for( i=0; i<_data.length; i++){
252
- _value = _data[i];
253
- _item = this.createTimeSheetItem( _value );
254
- this.listItemViews.push( _item );
255
- }
256
- }
257
- var
258
- _overlaps = [],
259
- j;
260
- for(i=0;i<this.listItemViews.length;i++){
261
- for(j=0;j<this.listItemViews.length;j++){
262
- if((i !== j) && (_overlaps.indexOf(i)===-1) && (_overlaps.indexOf(j)===-1)){
263
- if(this.listItemViews[i].rect.intersects(this.listItemViews[j].rect)){
264
- _overlaps.push(i);
265
- }
266
- }
267
- }
268
- }
269
- var
270
- _overlapCount = _overlaps.length+1,
271
- _overlapLefts = {},
272
- _itemWidth = ( this.rect.width - this.itemOffsetRight - this.itemOffsetLeft ),
273
- _width = Math.floor( _itemWidth / _overlapCount),
274
- _left = this.itemOffsetLeft;
275
- for(j=0;j<_overlapCount;j++){
276
- _overlapLefts[_overlaps[j]] = _left + (j*_width) + _width;
277
- }
278
- for(i=0;i<this.listItemViews.length;i++){
279
- if(_overlaps.indexOf(i)===-1){
280
- this.listItemViews[i].rect.setLeft(_left);
281
- }
282
- else {
283
- this.listItemViews[i].rect.setLeft(_overlapLefts[i]);
284
- }
285
- this.listItemViews[i].rect.setWidth(_width);
286
- }
287
- for(i=0;i<this.listItemViews.length;i++){
288
- this.listItemViews[i].drawRect();
289
- }
290
- }
291
- });
292
-