rsence-pre 2.3.0.16 → 2.3.0.17
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/conf/default_conf.yaml +53 -200
- data/js/chat/chat_panel/chat_panel.coffee +120 -0
- data/js/chat/speech_bubble/speech_bubble.coffee +56 -0
- data/js/chat/speech_bubble/themes/default/speech_bubble.css +84 -0
- data/js/chat/speech_bubble/themes/default/speech_bubble.html +7 -0
- data/js/chat/speech_bubble/themes/default/user_anon.png +0 -0
- data/js/comm/sessionwatcher/sessionwatcher.js +1 -1
- data/js/comm/values/values.js +2 -34
- data/js/controls/numerictextcontrol/numerictextcontrol.coffee +109 -0
- data/js/controls/onoffbutton/onoffbutton.coffee +44 -0
- data/js/controls/onoffbutton/themes/default/onoffbutton.css +50 -0
- data/js/controls/onoffbutton/themes/default/onoffbutton.html +10 -0
- data/js/controls/textcontrol/textcontrol.coffee +291 -0
- data/js/core/class/class.js +1 -1
- data/js/core/elem/elem.coffee +83 -1
- data/js/core/util/util_methods/util_methods.coffee +103 -0
- data/js/datetime/calendar/calendar.coffee +3 -0
- data/js/datetime/calendar_pulldown/calendar_pulldown.coffee +62 -0
- data/js/datetime/calendar_pulldown/themes/default/calendar_pulldown.css +16 -0
- data/js/datetime/calendar_pulldown/themes/default/calendar_pulldown.html +1 -0
- data/js/datetime/calendar_pulldown/themes/default/calendar_pulldown.png +0 -0
- data/js/datetime/datepicker/datepicker.coffee +59 -0
- data/js/datetime/datetimepicker/datetimepicker.coffee +7 -0
- data/js/datetime/datetimepicker/datetimepicker.js +2 -2
- data/js/datetime/momentjs/momentjs.js +1400 -0
- data/js/datetime/timepicker/timepicker.coffee +7 -0
- data/js/foundation/application/application.js +1 -1
- data/js/foundation/control/valueaction/valueaction.js +8 -1
- data/js/foundation/control/valueresponder/valueresponder.js +1 -1
- data/js/foundation/view/morphanimation/morphanimation.js +9 -3
- data/js/foundation/view/view.js +43 -33
- data/js/views/scrollview/scrollview.js +10 -0
- data/lib/rsence/default_config.rb +10 -6
- data/plugins/client_pkg/lib/client_pkg_build.rb +2 -2
- metadata +22 -4
- data/js/controls/textcontrol/textcontrol.js +0 -420
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.0.
|
1
|
+
2.3.0.17.pre
|
data/conf/default_conf.yaml
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
---
|
1
2
|
#### Server configuration
|
2
3
|
#
|
3
4
|
# The :base_url specifies the prefix for all default http responders.
|
@@ -27,7 +28,7 @@
|
|
27
28
|
# A list of javascript dependencies to include in the html
|
28
29
|
:deps: [ ]
|
29
30
|
#
|
30
|
-
# Boot library:
|
31
|
+
# Boot library (default dependency, the package to load into html):
|
31
32
|
:boot_lib: rsence
|
32
33
|
#
|
33
34
|
# Default additional libraries to use:
|
@@ -42,6 +43,57 @@
|
|
42
43
|
# how many milliseconds to wait before doing an idle poll
|
43
44
|
:server_poll_interval: 2000 # 2 seconds
|
44
45
|
#
|
46
|
+
# Mobile browser default settings, by device group and model:
|
47
|
+
:mobile:
|
48
|
+
#
|
49
|
+
# iOS devices, defaults to iPads:
|
50
|
+
ios:
|
51
|
+
scale: 1.0
|
52
|
+
scale_min: 1.0
|
53
|
+
scale_max: 1.0
|
54
|
+
#
|
55
|
+
# Horizontal mode:
|
56
|
+
landscape:
|
57
|
+
# Fullscreen (app) mode
|
58
|
+
fullscreen:
|
59
|
+
width: 1024
|
60
|
+
height: 672
|
61
|
+
browser:
|
62
|
+
width: 1024
|
63
|
+
height: 600
|
64
|
+
#
|
65
|
+
# Horizontal mode:
|
66
|
+
portrait:
|
67
|
+
# Fullscreen (app) mode
|
68
|
+
fullscreen:
|
69
|
+
width: 768
|
70
|
+
height: 1024
|
71
|
+
browser:
|
72
|
+
width: 768
|
73
|
+
height: 928
|
74
|
+
#
|
75
|
+
# Dummy iPad override (same as default)
|
76
|
+
ipad:
|
77
|
+
# nothing to override
|
78
|
+
iphone:
|
79
|
+
scale: 0.5
|
80
|
+
scale_min: 0.5
|
81
|
+
scale_max: 0.5
|
82
|
+
landscape:
|
83
|
+
fullscreen:
|
84
|
+
width: 960
|
85
|
+
height: 600
|
86
|
+
browser:
|
87
|
+
width: 960
|
88
|
+
height: 536
|
89
|
+
portrait:
|
90
|
+
fullscreen:
|
91
|
+
width: 640
|
92
|
+
height: 920
|
93
|
+
browser:
|
94
|
+
width: 640
|
95
|
+
height: 856
|
96
|
+
#
|
45
97
|
# The settings for the daemon
|
46
98
|
:daemon:
|
47
99
|
#
|
@@ -208,202 +260,3 @@
|
|
208
260
|
:broker_urls: { }
|
209
261
|
|
210
262
|
|
211
|
-
#### Client package build configuration
|
212
|
-
#
|
213
|
-
#
|
214
|
-
:client_pkg:
|
215
|
-
|
216
|
-
# Source directories to scan
|
217
|
-
:src_dirs: []
|
218
|
-
|
219
|
-
# List of theme names to include and pack
|
220
|
-
:theme_names:
|
221
|
-
- default # Makes default_theme.js containing css and html templates
|
222
|
-
- bright # Makes bright_theme.js containing css and html templates
|
223
|
-
|
224
|
-
# List of packages to build
|
225
|
-
:packages:
|
226
|
-
|
227
|
-
# The core package, loaded by default using a script tag in index_html
|
228
|
-
core:
|
229
|
-
|
230
|
-
# RSence.*
|
231
|
-
- rsence_ns
|
232
|
-
|
233
|
-
- locale_settings # HLocaleSettings
|
234
|
-
|
235
|
-
# RSence.Core
|
236
|
-
- class # HClass
|
237
|
-
- elem # ELEM
|
238
|
-
- event # Event
|
239
|
-
|
240
|
-
# RSence.Util
|
241
|
-
- sha # SHA
|
242
|
-
|
243
|
-
# RSence.Foundation
|
244
|
-
- system # HSystem
|
245
|
-
- valueresponder # HValueResponder
|
246
|
-
- application # HApplication
|
247
|
-
|
248
|
-
# COMM
|
249
|
-
- comm # COMM
|
250
|
-
- queue # COMM.Queue
|
251
|
-
- session # COMM.Session
|
252
|
-
- transporter # COMM.Transporter
|
253
|
-
- sessionwatcher # COMM.SessionWatcher
|
254
|
-
- urlresponder # COMM.URLResponder
|
255
|
-
- autosync # ( automatic sync setup )
|
256
|
-
- values # COMM.Values
|
257
|
-
- value # HValue
|
258
|
-
- jsloader # COMM.JSLoader
|
259
|
-
- json_renderer # COMM.JSONRenderer
|
260
|
-
- valuematrix # HValueMatrixInterface & HValueMatrix
|
261
|
-
- point # HPoint
|
262
|
-
- rect # HRect
|
263
|
-
- thememanager # HThemeManager
|
264
|
-
- markupview # HMarkupView
|
265
|
-
- morphanimation # HMorphAnimation
|
266
|
-
- viewdefaults # HViewDefaults
|
267
|
-
- view # HView
|
268
|
-
- eventresponder # HEventResponder
|
269
|
-
- dummyvalue # HDummyValue
|
270
|
-
- eventmanager # EVENT
|
271
|
-
- controldefaults # HControlDefaults
|
272
|
-
- control # HControl
|
273
|
-
- valueaction # HValueAction
|
274
|
-
- dyncontrol # HDynControl
|
275
|
-
- centerview # HCenterView
|
276
|
-
- scrollview # HScrollView
|
277
|
-
- inlineview # HInlineView
|
278
|
-
|
279
|
-
# The default collection of simple control widgets (components)
|
280
|
-
controls:
|
281
|
-
- button # HButton & HClickValueButton
|
282
|
-
- checkbox # HCheckbox
|
283
|
-
- radiobutton # HRadioButton
|
284
|
-
- stringview # HStringView
|
285
|
-
- textcontrol # HTextControl
|
286
|
-
- passwordcontrol # HPasswordControl
|
287
|
-
- textarea # HTextArea
|
288
|
-
- searchfield # HSearchField
|
289
|
-
- uploader # HUploader
|
290
|
-
- slider # HSlider
|
291
|
-
- vslider # HVSlider
|
292
|
-
- progressbar # HProgressBar
|
293
|
-
- progressindicator # HProgressIndicator
|
294
|
-
- imageview # HImageView
|
295
|
-
- stepper # HStepper
|
296
|
-
- validatorview # HValidatorView
|
297
|
-
- window # HWindow
|
298
|
-
- tab # HTab & HTabView & HTabItem
|
299
|
-
- sheet # HSheet
|
300
|
-
- alert_sheet # HAlertSheet
|
301
|
-
- confirm_sheet # HConfirmSheet
|
302
|
-
|
303
|
-
# Server error message application ( the Reload / Reset Session dialog )
|
304
|
-
servermessage:
|
305
|
-
- reloadapp # ReloadApp
|
306
|
-
|
307
|
-
# Special package for Internet Explorer 6.0
|
308
|
-
iefix:
|
309
|
-
- iefix
|
310
|
-
|
311
|
-
# Date and time -related control widgets (components)
|
312
|
-
# These are not complete; they are still under development
|
313
|
-
# and will be included in the controls package when finalized.
|
314
|
-
datetime:
|
315
|
-
- datetimevalue # HDateTime
|
316
|
-
- calendar # HCalendar
|
317
|
-
- datetimepicker # HDateTimePicker
|
318
|
-
- timesheet # HTimeSheet
|
319
|
-
- timesheet_item # HTimeSheetItem
|
320
|
-
- timesheet_item_edit # HTimeSheetItemEditor
|
321
|
-
|
322
|
-
# List related control widgets (components)
|
323
|
-
# These are not complete; they are still under development
|
324
|
-
# and will be included in the controls package when finalized.
|
325
|
-
lists:
|
326
|
-
- listitems # HListItems
|
327
|
-
- checkboxlist # HCheckboxList
|
328
|
-
- radiobuttonlist # HRadiobuttonList
|
329
|
-
- propertylist # HPropertyList
|
330
|
-
- propertylisteditor # HPropertyEditor
|
331
|
-
- minimenu # HMiniMenu
|
332
|
-
- minimenuitem # HMiniMenuItem
|
333
|
-
- popupmenu # HPopupMenu
|
334
|
-
- menuitem # HMenuItem
|
335
|
-
|
336
|
-
tables:
|
337
|
-
- table # HTable
|
338
|
-
|
339
|
-
# Graphics related control widgets (components)
|
340
|
-
# These are not complete and there will probably never be any
|
341
|
-
# serious efforts to support legacy browsers, like old IE versions,
|
342
|
-
# unless someone is interested in sponsoring such efforts.
|
343
|
-
graphics:
|
344
|
-
- svgcontrol
|
345
|
-
|
346
|
-
# Special packages that include other packages
|
347
|
-
:compound_packages:
|
348
|
-
rsence:
|
349
|
-
- core
|
350
|
-
- default_theme
|
351
|
-
- controls
|
352
|
-
- lists
|
353
|
-
- datetime
|
354
|
-
- tables
|
355
|
-
- graphics
|
356
|
-
- servermessage
|
357
|
-
std_widgets:
|
358
|
-
- default_theme
|
359
|
-
- controls
|
360
|
-
- lists
|
361
|
-
- datetime
|
362
|
-
- tables
|
363
|
-
- graphics
|
364
|
-
- servermessage
|
365
|
-
|
366
|
-
# List of variables and other names beginning
|
367
|
-
# with a underscore that should not be obfuscated
|
368
|
-
:reserved_names:
|
369
|
-
- _ID
|
370
|
-
- _id
|
371
|
-
- _WIDTH
|
372
|
-
- _width
|
373
|
-
- _HEIGHT
|
374
|
-
- _height
|
375
|
-
- _
|
376
|
-
|
377
|
-
# List of file extensions considered graphics image types.
|
378
|
-
# Used for theme graphics inclusion.
|
379
|
-
:gfx_formats:
|
380
|
-
- .jpg
|
381
|
-
- .gif
|
382
|
-
- .png
|
383
|
-
- .swf
|
384
|
-
- .svg
|
385
|
-
- .pdf
|
386
|
-
|
387
|
-
# If disabled, makes packages out of single source bundles automatically
|
388
|
-
:dont_pack_undefined: true
|
389
|
-
|
390
|
-
# Replacement prefix for obfuscated names
|
391
|
-
:repl_prefix: _
|
392
|
-
|
393
|
-
# If enabled, doesn't obfuscate code (useful for debugging)
|
394
|
-
:no_obfuscation: false
|
395
|
-
|
396
|
-
# If enabled, doesn't remove whitespace (useful for debugging)
|
397
|
-
:no_whitespace_removal: false
|
398
|
-
|
399
|
-
# If enabled, doesn't make gzipped packages
|
400
|
-
:no_gzip: false
|
401
|
-
|
402
|
-
# The strategy for gzip, a number between 0 and 9
|
403
|
-
# - 0 means largest size, but fast compression
|
404
|
-
# - 9 means smallest size, but slow compression
|
405
|
-
# - any number in between is a compromise
|
406
|
-
:gz_strategy: 9
|
407
|
-
|
408
|
-
|
409
|
-
|
@@ -0,0 +1,120 @@
|
|
1
|
+
HChatPanel = HScrollView.extend
|
2
|
+
textSelectable: true
|
3
|
+
controlDefaults: HScrollView.prototype.controlDefaults.extend
|
4
|
+
scrollX: false
|
5
|
+
scrollY: 'auto'
|
6
|
+
selfOrientation: 'right'
|
7
|
+
otherOrientation: 'left'
|
8
|
+
defaultEvents:
|
9
|
+
resize: true
|
10
|
+
resize: ->
|
11
|
+
@refreshValue()
|
12
|
+
refreshValue: ->
|
13
|
+
return unless @typeChr(@value) == 'h'
|
14
|
+
if @speechBubbles
|
15
|
+
for _bubble in @speechBubbles
|
16
|
+
_bubble.die()
|
17
|
+
if @userIcons
|
18
|
+
for _userIcon in @userIcons
|
19
|
+
_userIcon.die()
|
20
|
+
@speechBubbles = []
|
21
|
+
@userIcons = []
|
22
|
+
_users = @value.users
|
23
|
+
_themeUser = {}
|
24
|
+
_defaultBubble = HVM.clone( HSpeechBubble.prototype.controlDefaults.prototype.colors )
|
25
|
+
for _userId, _user of _users
|
26
|
+
_colors = HVM.clone( _defaultBubble )
|
27
|
+
if _user.color_bg?
|
28
|
+
_gradientStart = _user.color_bg
|
29
|
+
_gradientStep1 = @hexColorSubtract( _gradientStart, '#111' )
|
30
|
+
_gradientStep2 = @hexColorSubtract( _gradientStep1, '#030303' )
|
31
|
+
_gradientEnd = @hexColorAdd( _gradientStep2, '#111' )
|
32
|
+
_colors.start = _gradientStart
|
33
|
+
_colors.end = _gradientEnd
|
34
|
+
_colors.steps = [
|
35
|
+
[ 9, _gradientStep1 ]
|
36
|
+
[ 91, _gradientStep2 ]
|
37
|
+
]
|
38
|
+
if _user.color_fg?
|
39
|
+
_colors.text = _user.color_fg
|
40
|
+
_themeUser[_userId] = _colors
|
41
|
+
_topPx = 3
|
42
|
+
_prevDate = new Date().getTime()/1000
|
43
|
+
_minWidth = @rect.width - 80
|
44
|
+
for [ _userId, _text, _date ], i in @value.lines
|
45
|
+
_nextLine = @value.lines[i+1]
|
46
|
+
if _nextLine?
|
47
|
+
_nextSame = ( _userId == _nextLine[0] )
|
48
|
+
else
|
49
|
+
_nextSame = false
|
50
|
+
_prevLine = @value.lines[i-1]
|
51
|
+
if _prevLine?
|
52
|
+
_prevSame = ( _userId == _prevLine[0] )
|
53
|
+
else
|
54
|
+
_nextSame = false
|
55
|
+
if _date?
|
56
|
+
# _date = new Date(_date*1000)
|
57
|
+
_prevDate = _date
|
58
|
+
else
|
59
|
+
_date = _prevDate
|
60
|
+
_userInfo = _users[_userId]
|
61
|
+
if _userInfo.self
|
62
|
+
_orientation = @options.selfOrientation
|
63
|
+
else
|
64
|
+
_orientation = @options.otherOrientation
|
65
|
+
if _orientation == 'right'
|
66
|
+
_rectBubble = [ 120, _topPx, null, 40, 40, null ]
|
67
|
+
else
|
68
|
+
_rectBubble = [ 40, _topPx, null, 40, 120, null ]
|
69
|
+
_bubble = HSpeechBubble.new( _rectBubble, @,
|
70
|
+
autoHeight: true
|
71
|
+
autoWidth: true
|
72
|
+
colors: _themeUser[_userId]
|
73
|
+
orientation: _orientation
|
74
|
+
value: _text
|
75
|
+
)
|
76
|
+
@speechBubbles.push( _bubble )
|
77
|
+
_bottomPx = _bubble.rect.bottom
|
78
|
+
_bottomDiff = _bottomPx - _topPx
|
79
|
+
if _bottomDiff < 48 and not _prevSame
|
80
|
+
_bubble.offsetBy( 0, 48 - _bottomDiff )
|
81
|
+
_bottomPx = _bubble.rect.bottom
|
82
|
+
_topPx = _bottomPx+3
|
83
|
+
if _nextSame
|
84
|
+
_bubble.setStyleOfPart('directionbg','display','none')
|
85
|
+
_bubble.setStyleOfPart('directionupperfg','display','none')
|
86
|
+
_bubble.setStyleOfPart('directionlowerfg','display','none')
|
87
|
+
else
|
88
|
+
_dateStr = HLocale.dateTime.formatDateTime( _date )
|
89
|
+
if _userInfo.name?
|
90
|
+
_name = _userInfo.name
|
91
|
+
else
|
92
|
+
_name = _userId
|
93
|
+
if _orientation == 'right'
|
94
|
+
_rectLabel = [ 120, _topPx, null, 18, 4, null ]
|
95
|
+
_rectIcon = [ null, _topPx-34, 32, 32, 2, null ]
|
96
|
+
_styleLabel = { textAlign: 'right' }
|
97
|
+
_labelText = _dateStr+' • <b>'+_name+'</b>'
|
98
|
+
else
|
99
|
+
_rectLabel = [ 4, _topPx, null, 18, 120, null ]
|
100
|
+
_rectIcon = [ 2, _topPx-34, 32, 32 ]
|
101
|
+
_styleLabel = { textAlign: 'left' }
|
102
|
+
_labelText = '<b>'+_name+'</b> • '+_dateStr
|
103
|
+
_iconStyle =
|
104
|
+
border: '2px solid black'
|
105
|
+
borderRadius: '5px'
|
106
|
+
if _userInfo.icon?
|
107
|
+
_iconSrc = _userInfo.icon
|
108
|
+
else
|
109
|
+
_iconSrc = @getThemeGfxFile('user_anon.png')
|
110
|
+
_icon = HImageView.new( _rectIcon, @,
|
111
|
+
style: _iconStyle
|
112
|
+
value: _iconSrc
|
113
|
+
)
|
114
|
+
@userIcons.push( _icon )
|
115
|
+
_label = HLabel.new( _rectLabel, @,
|
116
|
+
style: _styleLabel
|
117
|
+
label: _labelText
|
118
|
+
)
|
119
|
+
@userIcons.push( _label )
|
120
|
+
@scrollToBottom()
|
@@ -0,0 +1,56 @@
|
|
1
|
+
HSpeechBubble = HControl.extend
|
2
|
+
textSelectable: true
|
3
|
+
componentName: 'speech_bubble'
|
4
|
+
markupElemNames: [
|
5
|
+
'bg'
|
6
|
+
'subview'
|
7
|
+
'value'
|
8
|
+
'directionbg'
|
9
|
+
'directionupperfg'
|
10
|
+
'directionlowerfg'
|
11
|
+
]
|
12
|
+
controlDefaults: HControlDefaults.extend
|
13
|
+
orientation: 'left'
|
14
|
+
colors:
|
15
|
+
start: '#ffffff'
|
16
|
+
steps: [
|
17
|
+
[ 9, '#efefef' ]
|
18
|
+
[ 91, '#e0e0e0' ]
|
19
|
+
]
|
20
|
+
end: '#efefef'
|
21
|
+
text: '#333'
|
22
|
+
autoHeight: false
|
23
|
+
autoWidth: false
|
24
|
+
adjustHeight: ->
|
25
|
+
if @options.autoHeight or @options.autoWidth
|
26
|
+
_size = ELEM.getScrollSize( @markupElemIds.value )
|
27
|
+
if @options.autoHeight
|
28
|
+
_height = _size[1] + 3
|
29
|
+
@rect.setHeight( _height )
|
30
|
+
if @options.autoWidth
|
31
|
+
_width = _size[0] + 25
|
32
|
+
@rect.setWidth( _width )
|
33
|
+
@drawRect() if @options.autoHeight or @options.autoWidth
|
34
|
+
setOrientationClass: (_orientation)->
|
35
|
+
if _orientation == 'left'
|
36
|
+
ELEM.addClassName( @elemId, 'orientation_left' )
|
37
|
+
ELEM.delClassName( @elemId, 'orientation_right' )
|
38
|
+
else
|
39
|
+
ELEM.addClassName( @elemId, 'orientation_right' )
|
40
|
+
ELEM.delClassName( @elemId, 'orientation_left' )
|
41
|
+
refreshProperties: ->
|
42
|
+
_colors = @options.colors
|
43
|
+
[ _bgKey, _bgVal ] = ELEM._linearGradientStyle(_colors)
|
44
|
+
@setOrientationClass(@options.orientation)
|
45
|
+
@setStyleOfPart( 'directionbg', 'borderColor', "transparent transparent #{_colors.text} transparent" )
|
46
|
+
@setStyleOfPart( 'directionupperfg', 'borderColor', "transparent transparent #{_colors.steps[_colors.steps.length-1][1]} transparent" )
|
47
|
+
@setStyleOfPart( 'directionlowerfg', 'borderColor', "transparent transparent #{_colors.end} transparent" )
|
48
|
+
@setStyleOfPart( 'bg', _bgKey, _bgVal )
|
49
|
+
@setStyleOfPart( 'bg', 'borderColor', _colors.text )
|
50
|
+
@setStyleOfPart( 'value', 'color', _colors.text )
|
51
|
+
refresh: ->
|
52
|
+
@base()
|
53
|
+
@refreshProperties() if @markupElemIds?
|
54
|
+
refreshValue: ->
|
55
|
+
@base()
|
56
|
+
@adjustHeight() if @options.autoHeight
|
@@ -0,0 +1,84 @@
|
|
1
|
+
.default > .speechbubble,
|
2
|
+
.default > .speechbubble > .subview,
|
3
|
+
/*.default > .speechbubble > .text,*/
|
4
|
+
.default > .speechbubble > .direction_inner,
|
5
|
+
.default > .speechbubble > .direction_inner2,
|
6
|
+
.default > .speechbubble > .direction {
|
7
|
+
position: absolute;
|
8
|
+
}
|
9
|
+
.default > .speechbubble {
|
10
|
+
top: 0; bottom: 0;
|
11
|
+
overflow: visible;
|
12
|
+
border: 2px solid #333; border-radius: 9px;
|
13
|
+
}
|
14
|
+
.default.orientation_left > .speechbubble {
|
15
|
+
left: 16px; right: 0;
|
16
|
+
border-bottom-left-radius: 0;
|
17
|
+
}
|
18
|
+
.default.orientation_right > .speechbubble {
|
19
|
+
right: 16px; left: 0;
|
20
|
+
border-bottom-right-radius: 0;
|
21
|
+
}
|
22
|
+
|
23
|
+
.default > .speechbubble > .text {
|
24
|
+
padding-left: 6px; padding-top: 3px; padding-bottom: 3px; padding-right: 6px;
|
25
|
+
vertical-align: middle;
|
26
|
+
font-family: Arial, sans-serif;
|
27
|
+
font-size: 12px; font-weight: bold;
|
28
|
+
color: #333;
|
29
|
+
}
|
30
|
+
/*.default.orientation_left > .speechbubble > .text {
|
31
|
+
left: 0;
|
32
|
+
}
|
33
|
+
.default.orientation_left > .speechbubble > .text {
|
34
|
+
right: 0;
|
35
|
+
}
|
36
|
+
.default.orientation_left > .speechbubble {
|
37
|
+
text-align: left;
|
38
|
+
}
|
39
|
+
.default.orientation_right > .speechbubble {
|
40
|
+
text-align: right;
|
41
|
+
}*/
|
42
|
+
.default > .speechbubble > .subview {
|
43
|
+
left: 0; top: 0; right: 0; bottom: 0;
|
44
|
+
}
|
45
|
+
.default > .speechbubble > .direction {
|
46
|
+
width: 0; height: 0;
|
47
|
+
border-style: solid;
|
48
|
+
border-color: transparent transparent #333 transparent;
|
49
|
+
}
|
50
|
+
.default.orientation_left > .speechbubble > .direction {
|
51
|
+
left: -16px; bottom: -2px;
|
52
|
+
border-width: 0 0 16px 16px; /* top, right, bottom, left */
|
53
|
+
}
|
54
|
+
.default.orientation_right > .speechbubble > .direction {
|
55
|
+
right: -16px; bottom: -2px;
|
56
|
+
border-width: 0 16px 16px 0;
|
57
|
+
}
|
58
|
+
.default > .speechbubble > .direction_inner {
|
59
|
+
width: 0; height: 0; bottom: 0;
|
60
|
+
border-style: solid;
|
61
|
+
border-color: transparent transparent #e0e0e0 transparent;
|
62
|
+
}
|
63
|
+
.default.orientation_left > .speechbubble > .direction_inner {
|
64
|
+
left: -11px;
|
65
|
+
border-width: 0 0 11px 11px;
|
66
|
+
}
|
67
|
+
.default.orientation_right > .speechbubble > .direction_inner {
|
68
|
+
right: -11px;
|
69
|
+
border-width: 0 11px 11px 0;
|
70
|
+
}
|
71
|
+
.default > .speechbubble > .direction_inner2 {
|
72
|
+
bottom: 0;
|
73
|
+
width: 0; height: 0;
|
74
|
+
border-style: solid;
|
75
|
+
border-color: transparent transparent #efefef transparent;
|
76
|
+
}
|
77
|
+
.default.orientation_left > .speechbubble > .direction_inner2 {
|
78
|
+
left: -11px;
|
79
|
+
border-width: 0 0 4px 11px;
|
80
|
+
}
|
81
|
+
.default.orientation_right > .speechbubble > .direction_inner2 {
|
82
|
+
right: -11px;
|
83
|
+
border-width: 0 11px 4px 0;
|
84
|
+
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<div class="speechbubble" #{BROWSER_TYPE.ie9?'style="filter:none;" ':' '}id="bg#{_ID}">
|
2
|
+
<div class="subview" id="subview#{_ID}"></div>
|
3
|
+
<div class="direction" id="directionbg#{_ID}"></div>
|
4
|
+
<div class="direction_inner" id="directionupperfg#{_ID}"></div>
|
5
|
+
<div class="direction_inner2" id="directionlowerfg#{_ID}"></div>
|
6
|
+
<div class="text" id="value#{_ID}"></div>
|
7
|
+
</div>
|
Binary file
|
@@ -19,7 +19,7 @@ COMM.SessionWatcher = HApplication.extend({
|
|
19
19
|
|
20
20
|
// gets the HValue represented by
|
21
21
|
// sesTimeoutValueId (:client_time in server)
|
22
|
-
this.sesTimeoutValue =
|
22
|
+
this.sesTimeoutValue = this.getValueById(_sesTimeoutValueId);
|
23
23
|
this.timeoutSecs = _timeoutSecs;
|
24
24
|
|
25
25
|
// onIdle is called when HSystem's ticker count % 100 == 0
|
data/js/comm/values/values.js
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
** Keeps track of all +HValue+ instances present.
|
6
6
|
***/
|
7
7
|
//var//RSence.COMM
|
8
|
-
COMM.Values =
|
8
|
+
COMM.Values = UtilMethods.extend({
|
9
9
|
|
10
10
|
/** No constructor, singleton class.
|
11
11
|
**/
|
@@ -116,13 +116,6 @@ COMM.Values = HClass.extend({
|
|
116
116
|
}
|
117
117
|
},
|
118
118
|
|
119
|
-
// List of primitive object types.
|
120
|
-
_builtins: [
|
121
|
-
'b', // boolean
|
122
|
-
'n', // number
|
123
|
-
's' // string
|
124
|
-
],
|
125
|
-
|
126
119
|
/** = Description
|
127
120
|
* Use this method to detect the type of the object given.
|
128
121
|
*
|
@@ -142,29 +135,7 @@ COMM.Values = HClass.extend({
|
|
142
135
|
*
|
143
136
|
**/
|
144
137
|
type: function(_obj){
|
145
|
-
|
146
|
-
return '~';
|
147
|
-
}
|
148
|
-
else if (_obj === undefined){
|
149
|
-
return '-';
|
150
|
-
}
|
151
|
-
var _type = (typeof _obj).slice(0,1);
|
152
|
-
if(~this._builtins.indexOf(_type)){
|
153
|
-
return _type;
|
154
|
-
}
|
155
|
-
else if(_type==='o'){
|
156
|
-
if(_obj.constructor === Array){
|
157
|
-
return 'a'; // array
|
158
|
-
}
|
159
|
-
else if(_obj.constructor === Object){
|
160
|
-
return 'h'; // hash
|
161
|
-
}
|
162
|
-
else if(_obj.constructor === Date){
|
163
|
-
return 'd'; // date
|
164
|
-
}
|
165
|
-
return false;
|
166
|
-
}
|
167
|
-
return false;
|
138
|
+
return this.typeChr( _obj );
|
168
139
|
},
|
169
140
|
|
170
141
|
// Returns an encoded version of the array _arr as a string
|
@@ -485,8 +456,6 @@ COMM.Values = HClass.extend({
|
|
485
456
|
_syncValues.push( [ _id, _value ] );
|
486
457
|
}
|
487
458
|
}
|
488
|
-
// console.log('response:',_response);
|
489
|
-
// console.log('encoded:',_this.encode(_response));
|
490
459
|
return _this.encode(_response);
|
491
460
|
},
|
492
461
|
|
@@ -524,7 +493,6 @@ COMM.Values = HClass.extend({
|
|
524
493
|
}
|
525
494
|
}
|
526
495
|
});
|
527
|
-
|
528
496
|
COMM.Values._detectNativeJSONSupport();
|
529
497
|
|
530
498
|
// Backwards compatibility assignment for code that still
|