rsence-pre 2.3.0.16 → 2.3.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|