rsence 2.1.3 → 2.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/js/comm/sessionwatcher/sessionwatcher.js +5 -4
- data/js/controls/button/themes/default/button.css +7 -7
- data/js/datetime/timesheet/timesheet.js +71 -10
- data/js/datetime/timesheet_item/timesheet_item.js +28 -11
- data/js/foundation/application/application.js +10 -4
- data/js/foundation/eventmanager/eventmanager.js +6 -4
- data/js/foundation/system/system.js +13 -11
- data/js/foundation/view/view.js +19 -5
- data/js/menus/minimenu/minimenu.js +3 -8
- data/lib/transporter/transporter.rb +4 -0
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.4
|
@@ -25,14 +25,15 @@
|
|
25
25
|
COMM.SessionWatcher = HApplication.extend({
|
26
26
|
constructor: function( _timeoutSecs, _sesTimeoutValueId ){
|
27
27
|
|
28
|
-
// onIdle is called when HSystem's ticker count % 100 == 0
|
29
|
-
// this means it's 5 seconds with HSystemTickerInterval 50
|
30
|
-
this.base(10, 'SesWatcher');
|
31
|
-
|
32
28
|
// gets the HValue represented by
|
33
29
|
// sesTimeoutValueId (:client_time in server)
|
34
30
|
this.sesTimeoutValue = COMM.Values.values[_sesTimeoutValueId];
|
35
31
|
this.timeoutSecs = _timeoutSecs;
|
32
|
+
|
33
|
+
// onIdle is called when HSystem's ticker count % 100 == 0
|
34
|
+
// this means it's 5 seconds with HSystemTickerInterval 50
|
35
|
+
this.base(10, 'SesWatcher');
|
36
|
+
|
36
37
|
},
|
37
38
|
|
38
39
|
// Tells the server the client's current time
|
@@ -25,7 +25,7 @@
|
|
25
25
|
}
|
26
26
|
|
27
27
|
.button_edge_left {
|
28
|
-
left: 0px; width:
|
28
|
+
left: 0px; width: 6px;
|
29
29
|
background-position: 0px 0px;
|
30
30
|
}
|
31
31
|
.disabled > .button_control > .button_edge_left {
|
@@ -39,21 +39,21 @@
|
|
39
39
|
}
|
40
40
|
|
41
41
|
.button_edge_right {
|
42
|
-
right: 0px; width:
|
43
|
-
background-position: -
|
42
|
+
right: 0px; width: 6px;
|
43
|
+
background-position: -42px 0px;
|
44
44
|
}
|
45
45
|
.disabled > .button_control > .button_edge_right {
|
46
|
-
background-position: -
|
46
|
+
background-position: -42px -144px;
|
47
47
|
}
|
48
48
|
.enabled > .button_control:hover > .button_edge_right {
|
49
|
-
background-position: -
|
49
|
+
background-position: -42px -48px;
|
50
50
|
}
|
51
51
|
.enabled > .button_control:active > .button_edge_right {
|
52
|
-
background-position: -
|
52
|
+
background-position: -42px -96px;
|
53
53
|
}
|
54
54
|
|
55
55
|
.button_center {
|
56
|
-
left:
|
56
|
+
left: 6px; right: 6px;
|
57
57
|
background-position: 0px -24px;
|
58
58
|
}
|
59
59
|
.disabled > .button_control > .button_center {
|
@@ -23,6 +23,10 @@ HTimeSheet = HControl.extend({
|
|
23
23
|
/* Default amount of pixels from right. Override with options when necessary. */
|
24
24
|
itemOffsetRight: 0,
|
25
25
|
|
26
|
+
defaultEvents: {
|
27
|
+
draggable: true
|
28
|
+
},
|
29
|
+
|
26
30
|
controlDefaults: HControlDefaults.extend({
|
27
31
|
pxPerHour: null,
|
28
32
|
itemOffsetLeft: null,
|
@@ -120,9 +124,29 @@ HTimeSheet = HControl.extend({
|
|
120
124
|
*
|
121
125
|
**/
|
122
126
|
startDrag: function(x,y){
|
123
|
-
this.
|
124
|
-
|
127
|
+
this._startDragTime = new Date().getTime();
|
128
|
+
this._startDragCoords = [x,y];
|
129
|
+
return true;
|
130
|
+
},
|
131
|
+
|
132
|
+
drag: function(x,y){
|
133
|
+
if(((new Date().getTime()) - this._startDragTime) < 200){
|
134
|
+
// only create when 200 ms has elapsed to enable clicking
|
135
|
+
return true;
|
136
|
+
}
|
137
|
+
if(this._startDragCoords[0]!==x && this._startDragCoords[1]!==y){
|
138
|
+
this.createItem(this._startDragCoords[1]-this.pageY());
|
139
|
+
EVENT.startDragging( this.dragItem );
|
140
|
+
return true;
|
141
|
+
}
|
142
|
+
},
|
143
|
+
|
144
|
+
click: function(x,y){
|
145
|
+
// deactivate all items
|
146
|
+
EVENT.changeActiveControl(this);
|
147
|
+
return true;
|
125
148
|
},
|
149
|
+
|
126
150
|
listItemViews: false,
|
127
151
|
|
128
152
|
/** = Description
|
@@ -145,10 +169,10 @@ HTimeSheet = HControl.extend({
|
|
145
169
|
*
|
146
170
|
**/
|
147
171
|
createItemRect: function(_origY, _lineHeight){
|
148
|
-
var _left = this.itemOffsetLeft,
|
149
|
-
_top = _origY,
|
150
|
-
_right = this.rect.width - this.itemOffsetRight,
|
151
|
-
_bottom = _origY + _lineHeight;
|
172
|
+
var _left = this.itemOffsetLeft+1,
|
173
|
+
_top = _origY+1,
|
174
|
+
_right = this.rect.width - this.itemOffsetRight - 1,
|
175
|
+
_bottom = _origY + _lineHeight - 2;
|
152
176
|
return HRect.nu( _left, _top, _right, _bottom );
|
153
177
|
},
|
154
178
|
|
@@ -204,24 +228,61 @@ HTimeSheet = HControl.extend({
|
|
204
228
|
*
|
205
229
|
**/
|
206
230
|
refreshValue: function(){
|
207
|
-
var
|
231
|
+
var
|
232
|
+
_data = this.value,
|
233
|
+
i;
|
208
234
|
if(this.listItemViews === false){
|
209
235
|
this.listItemViews = [];
|
210
236
|
}
|
211
|
-
if(this.listItemViews.length
|
237
|
+
else if(this.listItemViews.length > 0){
|
212
238
|
for( i=0; i<this.listItemViews.length; i++){
|
213
239
|
this.listItemViews[i].die();
|
214
240
|
}
|
215
241
|
this.listItemViews = [];
|
216
242
|
}
|
217
|
-
if(_data instanceof Array){
|
218
|
-
var
|
243
|
+
if(_data instanceof Array && _data.length > 0){
|
244
|
+
var
|
245
|
+
_value,
|
246
|
+
_item;
|
219
247
|
for( i=0; i<_data.length; i++){
|
220
248
|
_value = _data[i];
|
221
249
|
_item = this.createTimeSheetItem( _value );
|
222
250
|
this.listItemViews.push( _item );
|
223
251
|
}
|
224
252
|
}
|
253
|
+
var
|
254
|
+
_overlaps = [],
|
255
|
+
j;
|
256
|
+
for(i=0;i<this.listItemViews.length;i++){
|
257
|
+
for(j=0;j<this.listItemViews.length;j++){
|
258
|
+
if((i !== j) && (_overlaps.indexOf(i)===-1) && (_overlaps.indexOf(j)===-1)){
|
259
|
+
if(this.listItemViews[i].rect.intersects(this.listItemViews[j].rect)){
|
260
|
+
_overlaps.push(i);
|
261
|
+
}
|
262
|
+
}
|
263
|
+
}
|
264
|
+
}
|
265
|
+
var
|
266
|
+
_overlapCount = _overlaps.length+1,
|
267
|
+
_overlapLefts = {},
|
268
|
+
_itemWidth = ( this.rect.width - this.itemOffsetRight - this.itemOffsetLeft ),
|
269
|
+
_width = Math.floor( _itemWidth / _overlapCount),
|
270
|
+
_left = this.itemOffsetLeft;
|
271
|
+
for(j=0;j<_overlapCount;j++){
|
272
|
+
_overlapLefts[_overlaps[j]] = _left + (j*_width) + _width;
|
273
|
+
}
|
274
|
+
for(i=0;i<this.listItemViews.length;i++){
|
275
|
+
if(_overlaps.indexOf(i)===-1){
|
276
|
+
this.listItemViews[i].rect.setLeft(_left);
|
277
|
+
}
|
278
|
+
else {
|
279
|
+
this.listItemViews[i].rect.setLeft(_overlapLefts[i]);
|
280
|
+
}
|
281
|
+
this.listItemViews[i].rect.setWidth(_width);
|
282
|
+
}
|
283
|
+
for(i=0;i<this.listItemViews.length;i++){
|
284
|
+
this.listItemViews[i].drawRect();
|
285
|
+
}
|
225
286
|
}
|
226
287
|
});
|
227
288
|
|
@@ -17,12 +17,18 @@ HTimeSheetItem = HControl.extend({
|
|
17
17
|
/* Which mode the component is in. When created by dragging, acts in 'create' mode, otherwise is 'normal'. Can be overridden in options. */
|
18
18
|
dragMode: 'create',
|
19
19
|
|
20
|
-
/* The previous coordinate. Used to detect double-drag as double-click
|
20
|
+
/* The previous coordinate. Used to detect double-drag as double-click */
|
21
21
|
prevXY: [0,0],
|
22
22
|
|
23
23
|
/* The time at the previous coordinate. Used to detect double-drag as double-click. */
|
24
24
|
prevXYTime: 0,
|
25
25
|
|
26
|
+
defaultEvents: {
|
27
|
+
draggable: true,
|
28
|
+
click: true,
|
29
|
+
doubleClick: true
|
30
|
+
},
|
31
|
+
|
26
32
|
controlDefaults: HControlDefaults.extend({
|
27
33
|
dragMode: 'create',
|
28
34
|
constructor: function(_ctrl){
|
@@ -46,12 +52,7 @@ HTimeSheetItem = HControl.extend({
|
|
46
52
|
_yEquals = (Math.round(this.prevXY[1]/4) === Math.round(y/4)),
|
47
53
|
_noTimeout = ((_timeNow - this.prevXYTime) < 500);
|
48
54
|
if( _xEquals && _yEquals && _noTimeout ) { // doubleClick
|
49
|
-
|
50
|
-
var _editor = this.parent.editor;
|
51
|
-
_editor.setTimeSheetItem(this);
|
52
|
-
_editor.bringToFront();
|
53
|
-
_editor.show();
|
54
|
-
}
|
55
|
+
return true;
|
55
56
|
}
|
56
57
|
else {
|
57
58
|
var _diffTop = this.rect.top - this.origY,
|
@@ -74,6 +75,17 @@ HTimeSheetItem = HControl.extend({
|
|
74
75
|
return true;
|
75
76
|
},
|
76
77
|
|
78
|
+
doubleClick: function(x,y){
|
79
|
+
if( this.parent['editor'] ){
|
80
|
+
var _editor = this.parent.editor;
|
81
|
+
_editor.setTimeSheetItem(this);
|
82
|
+
_editor.bringToFront();
|
83
|
+
_editor.show();
|
84
|
+
return true;
|
85
|
+
}
|
86
|
+
return false;
|
87
|
+
},
|
88
|
+
|
77
89
|
/** = Description
|
78
90
|
* Label setter function.
|
79
91
|
*
|
@@ -217,8 +229,13 @@ HTimeSheetItem = HControl.extend({
|
|
217
229
|
*
|
218
230
|
**/
|
219
231
|
endDrag: function(x,y){
|
220
|
-
var
|
221
|
-
|
232
|
+
var
|
233
|
+
_pxPerHour = Math.floor(this.parent.pxPerHour),
|
234
|
+
_value,
|
235
|
+
_yEquals = (Math.round(this.prevXY[1]/4) === Math.round(y/4));
|
236
|
+
if(_yEquals){ // nothing moved, just return.
|
237
|
+
return true;
|
238
|
+
}
|
222
239
|
if(this.dragMode === 'create'){
|
223
240
|
this.parent.listItemViews.push( this );
|
224
241
|
_value = {};
|
@@ -259,11 +276,11 @@ HTimeSheetItem = HControl.extend({
|
|
259
276
|
},
|
260
277
|
|
261
278
|
_getValueTop: function( _value ){
|
262
|
-
return _value.timeBegin * this.parent.pxPerHour;
|
279
|
+
return (_value.timeBegin * this.parent.pxPerHour)+1;
|
263
280
|
},
|
264
281
|
|
265
282
|
_getValueBottom: function( _value ){
|
266
|
-
return _value.timeEnd * this.parent.pxPerHour;
|
283
|
+
return (_value.timeEnd * this.parent.pxPerHour)-2;
|
267
284
|
},
|
268
285
|
|
269
286
|
/** = Description
|
@@ -187,10 +187,16 @@ HApplication = HClass.extend({
|
|
187
187
|
* resistant. Do not extend.
|
188
188
|
**/
|
189
189
|
_startIdle: function(){
|
190
|
-
|
191
|
-
|
192
|
-
this.
|
193
|
-
|
190
|
+
var _this = this;
|
191
|
+
HSystem.busyApps[ _this.appId ] = true;
|
192
|
+
this._busyTimer = setTimeout(
|
193
|
+
function(){
|
194
|
+
_this.onIdle();
|
195
|
+
_this._pollViews();
|
196
|
+
HSystem.busyApps[ _this.appId ] = false;
|
197
|
+
},
|
198
|
+
10
|
199
|
+
);
|
194
200
|
},
|
195
201
|
|
196
202
|
/** = Description
|
@@ -320,10 +320,12 @@ EVENT = {
|
|
320
320
|
* controls registered for the event.
|
321
321
|
**/
|
322
322
|
resize: function(e) {
|
323
|
-
var
|
324
|
-
|
325
|
-
|
326
|
-
|
323
|
+
var
|
324
|
+
i = 0,
|
325
|
+
_this = EVENT,
|
326
|
+
_ctrlID,
|
327
|
+
_ctrl;
|
328
|
+
HSystem._updateFlexibleRects();
|
327
329
|
for (; i < _this.resizeListeners.length; i++) {
|
328
330
|
_ctrlID = _this.resizeListeners[i];
|
329
331
|
_ctrl = HSystem.views[_ctrlID];
|
@@ -302,17 +302,19 @@ HSystem = {
|
|
302
302
|
**/
|
303
303
|
_flushUpdateZIndexOfChilden: function() {
|
304
304
|
|
305
|
-
var
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
305
|
+
var
|
306
|
+
|
307
|
+
j = 0, // buffer index
|
308
|
+
|
309
|
+
// reference to the HSystem namespace
|
310
|
+
_this = HSystem,
|
311
|
+
|
312
|
+
// reference to the buffer
|
313
|
+
_buffer = _this._updateZIndexOfChildrenBuffer,
|
314
|
+
|
315
|
+
// the length of the buffer
|
316
|
+
_bufLen = _buffer.length;
|
317
|
+
|
316
318
|
// loop buffer length times to get the items
|
317
319
|
for ( ; j < _bufLen; j++ ) {
|
318
320
|
|
data/js/foundation/view/view.js
CHANGED
@@ -657,7 +657,7 @@ HView = HClass.extend({
|
|
657
657
|
}
|
658
658
|
_styl(_elemId,_key,_value,true);
|
659
659
|
}
|
660
|
-
(this.
|
660
|
+
(this.drawn === false) && _this._updateZIndex();
|
661
661
|
|
662
662
|
if ( _this._cachedLeft !== _rect.left || _this._cachedTop !== _rect.top) {
|
663
663
|
_this.invalidatePositionCache();
|
@@ -885,12 +885,18 @@ HView = HClass.extend({
|
|
885
885
|
_width, // = _rect.width,
|
886
886
|
_height, // = _rect.height;
|
887
887
|
_parentElemId = ( this.parent.markupElemIds && this.parent.markupElemIds.subview ) ? this.parent.markupElemIds.subview : this.parent.elemId;
|
888
|
-
|
888
|
+
if (this.parent.flexLeft && this.parent.flexRight){
|
889
889
|
_width = parseInt( ELEM.getStyle( _parentElemId, 'width', true ), 10 );
|
890
|
-
|
891
|
-
|
890
|
+
}
|
891
|
+
else {
|
892
|
+
_width = _rect.width;
|
893
|
+
}
|
894
|
+
if (this.parent.flexBottom && this.parent.flexTop){
|
892
895
|
_height = parseInt( ELEM.getStyle( _parentElemId, 'height', true ), 10 );
|
893
|
-
|
896
|
+
}
|
897
|
+
else {
|
898
|
+
_height = _rect.height;
|
899
|
+
}
|
894
900
|
return [ _width, _height ];
|
895
901
|
}
|
896
902
|
},
|
@@ -999,6 +1005,14 @@ HView = HClass.extend({
|
|
999
1005
|
}
|
1000
1006
|
this.rect = HRect.nu(_leftOffset,_topOffset,_right,_bottom);
|
1001
1007
|
|
1008
|
+
if(!this.rect.isValid){
|
1009
|
+
console.log('---------------------------------------------');
|
1010
|
+
console.log('invalid rect:', this.rect.left, ',', this.rect.top, ',', this.rect.width, ',', this.rect.height, ',', this.rect.right, ',', this.rect.bottom );
|
1011
|
+
console.log(' parent size:', this.parentSize() );
|
1012
|
+
console.log(' rect array:', _rect );
|
1013
|
+
console.log('---------------------------------------------');
|
1014
|
+
}
|
1015
|
+
|
1002
1016
|
}
|
1003
1017
|
else {
|
1004
1018
|
console.log(_throwPrefix + 'the length has to be either 4 or 6.');
|
@@ -102,14 +102,9 @@ HMiniMenu = HRadioButtonList.extend({
|
|
102
102
|
},
|
103
103
|
|
104
104
|
drawSubviews: function(){
|
105
|
-
this.
|
106
|
-
|
107
|
-
|
108
|
-
this.setStyle('z-index',10000);//this.app.views.length);
|
109
|
-
}
|
110
|
-
}).nu(
|
111
|
-
[ this.rect.left, this.rect.top, this.rect.width, 500 ],
|
112
|
-
this, {
|
105
|
+
this.menuItemView = HView.nu(
|
106
|
+
[ this.rect.left, this.rect.top, this.rect.width, 10 ],
|
107
|
+
this.app, {
|
113
108
|
visible: false,
|
114
109
|
style: [
|
115
110
|
['background-color','#f6f6f6'],
|
@@ -229,6 +229,10 @@ module RSence
|
|
229
229
|
end
|
230
230
|
|
231
231
|
elsif msg.refresh_page?( @plugins.incr ) and @config[:client_autoreload]
|
232
|
+
while msg.refresh_page?( @plugins.incr )
|
233
|
+
msg.session[:plugin_incr] == @plugins.incr
|
234
|
+
sleep 0.5
|
235
|
+
end
|
232
236
|
# Forces the client to reload, if plugins are incremented
|
233
237
|
msg.reply("window.location.reload( true );")
|
234
238
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsence
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 2.1.
|
9
|
+
- 4
|
10
|
+
version: 2.1.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Riassence Inc.
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-13 00:00:00 +02:00
|
19
19
|
default_executable: rsence
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|