ela 3.4.3 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/css/screen.styl +39 -14
- data/app/js/lib/views/1_viewport_view.coffee +6 -1
- data/app/js/lib/views/axis_handler.coffee +74 -11
- data/app/js/lib/views/base_app.coffee +17 -11
- data/app/js/lib/views/canvas.coffee +1 -0
- data/app/js/lib/views/chart_view.coffee +2 -0
- data/app/js/lib/views/graph_view.coffee +18 -6
- data/app/js/lib/views/headup.coffee +1 -1
- data/app/js/vendor/backbone.poised/form/textfield.coffee +6 -1
- data/app/views/general/app.jst.hamlc +0 -2
- data/lib/ela/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65471b954f418d935377faff787750449bc19f96946b2322283c393e30baf77e
|
4
|
+
data.tar.gz: bda2b54b6b704a9dcd633898a779243bea1c57a3e76869b027fac6196cba69f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '085a800daff9349af2d8b4c86167ea5874d9e9dbba435531a22f45485f15c5e3cff94a16527823cdbc5355e17758ba3404f32f0ad478fba5af27d668e622e323'
|
7
|
+
data.tar.gz: '041857e395ad02c6e533f72f6f92ba0c0e79084e2d7c400615e6640d677f58b89ac61936429e289657cec75b7dce77edba98a92cf02e76f7d99fe861ec3d1caf'
|
data/app/css/screen.styl
CHANGED
@@ -121,13 +121,32 @@ article.viewport
|
|
121
121
|
border-right 1px solid #bbb
|
122
122
|
overflow hidden
|
123
123
|
|
124
|
-
|
125
|
-
|
124
|
+
a#upstream
|
125
|
+
display none
|
126
|
+
|
127
|
+
img
|
128
|
+
absolute none 0 0 none
|
129
|
+
height $axis-handler-size
|
130
|
+
z-layer 'section', 'graph'
|
131
|
+
opacity 0.4
|
132
|
+
transition opacity 100ms
|
133
|
+
|
134
|
+
&:hover
|
135
|
+
opacity 1
|
136
|
+
|
137
|
+
@media $media-lt-phone
|
138
|
+
pointer-events none
|
126
139
|
|
127
140
|
.horizontal-wrapper
|
128
141
|
display flex
|
129
142
|
flex 1
|
130
143
|
|
144
|
+
&:last-child
|
145
|
+
border-right: none
|
146
|
+
|
147
|
+
a#upstream
|
148
|
+
display block
|
149
|
+
|
131
150
|
div.legend
|
132
151
|
z-layer 'section', 'legend'
|
133
152
|
font-size .75em
|
@@ -219,6 +238,9 @@ article.viewport
|
|
219
238
|
overflow hidden
|
220
239
|
position relative
|
221
240
|
|
241
|
+
canvas
|
242
|
+
display block
|
243
|
+
|
222
244
|
div.graph-overlay-wrapper
|
223
245
|
height 0
|
224
246
|
font-size .75em
|
@@ -230,18 +252,29 @@ article.viewport
|
|
230
252
|
|
231
253
|
div.axis-handler
|
232
254
|
text-align center
|
233
|
-
cursor pointer
|
234
255
|
background $legend-background
|
235
|
-
|
256
|
+
|
257
|
+
label
|
258
|
+
padding 14px 5px
|
259
|
+
display block
|
260
|
+
cursor pointer
|
261
|
+
|
262
|
+
&.has-input
|
263
|
+
padding 7.5px 5px
|
264
|
+
cursor inherit
|
265
|
+
|
266
|
+
.poised.textfield
|
267
|
+
display inline-block
|
268
|
+
width 140px
|
236
269
|
|
237
270
|
&.axis-handler-left
|
238
271
|
width $axis-handler-size
|
272
|
+
white-space nowrap
|
239
273
|
position relative
|
240
274
|
|
241
|
-
|
275
|
+
label
|
242
276
|
absolute 50% none none 50%
|
243
277
|
transform translateX(-50%) translateY(-50%) rotate(-90deg)
|
244
|
-
width 500px // ugly, but no alternative
|
245
278
|
|
246
279
|
// vertical range slider and large, non-transparent legend with values
|
247
280
|
#international-standard-atmosphere article.graph div.graph
|
@@ -358,14 +391,6 @@ aside.curves
|
|
358
391
|
content "\f05a"
|
359
392
|
margin-right 0.4em
|
360
393
|
|
361
|
-
img.logo
|
362
|
-
absolute none 0 0 none
|
363
|
-
height $axis-handler-size
|
364
|
-
z-layer 'section', 'graph'
|
365
|
-
|
366
|
-
@media $media-lt-phone
|
367
|
-
display none
|
368
|
-
|
369
394
|
span.mark
|
370
395
|
background-color yellow
|
371
396
|
|
@@ -3,17 +3,22 @@ class ELA.Views.AxisHandler extends Backbone.Poised.View
|
|
3
3
|
className: 'axis-handler'
|
4
4
|
|
5
5
|
events:
|
6
|
-
'pan': '
|
7
|
-
'tap': '
|
6
|
+
'pan': 'handlePan'
|
7
|
+
'tap': 'handleTap'
|
8
|
+
'press': 'showInputField'
|
9
|
+
'doubletap': 'showInputField'
|
10
|
+
'pressup': 'focusInputField'
|
11
|
+
'tap input': 'handleInputTap'
|
8
12
|
|
9
13
|
hammerjs:
|
10
14
|
recognizers: [
|
11
15
|
[Hammer.Rotate, { enable: false }],
|
12
16
|
[Hammer.Pinch, { enable: false }, ['rotate']],
|
13
17
|
[Hammer.Swipe, { enable: false }],
|
14
|
-
[Hammer.Pan, { direction: Hammer.DIRECTION_ALL, threshold:
|
18
|
+
[Hammer.Pan, { direction: Hammer.DIRECTION_ALL, threshold: 10 }, ['swipe']],
|
15
19
|
[Hammer.Tap, { threshold: 5 }],
|
16
|
-
[Hammer.
|
20
|
+
[Hammer.Tap, { event: 'doubletap', taps: 2, posThreshold: 20, threshold: 5 }, ['tap']],
|
21
|
+
[Hammer.Press]
|
17
22
|
]
|
18
23
|
|
19
24
|
initialize: (options) ->
|
@@ -35,7 +40,24 @@ class ELA.Views.AxisHandler extends Backbone.Poised.View
|
|
35
40
|
@minValue ?= options.minValue
|
36
41
|
@minValue ?= options.range?[1]
|
37
42
|
|
38
|
-
@listenTo
|
43
|
+
@listenTo(@model, "change:#{@attribute}", @renderSpan)
|
44
|
+
|
45
|
+
@subviews = {}
|
46
|
+
@formSettings = @model.loadSettings("formFields")[@attribute]
|
47
|
+
@params = new Backbone.Model
|
48
|
+
showInput: false
|
49
|
+
@listenTo(@params, 'change:showInput', @renderSpan)
|
50
|
+
|
51
|
+
@lastFocusOutAt = undefined
|
52
|
+
|
53
|
+
handleTap: (e) =>
|
54
|
+
@updateValue(e) unless @hasRecentlyOpenInput()
|
55
|
+
|
56
|
+
handlePan: (e) =>
|
57
|
+
@updateValue(e) unless @params.get('showInput')
|
58
|
+
|
59
|
+
handleInputTap: (e) =>
|
60
|
+
e.stopPropagation()
|
39
61
|
|
40
62
|
updateValue: (e) =>
|
41
63
|
origin = @displayParams.get("#{@orientation}Origin")
|
@@ -57,16 +79,57 @@ class ELA.Views.AxisHandler extends Backbone.Poised.View
|
|
57
79
|
point = Math.min(point, @maxValue) if isFinite(@maxValue)
|
58
80
|
@model.set(@attribute, point)
|
59
81
|
|
60
|
-
|
61
|
-
|
82
|
+
showInputField: ->
|
83
|
+
@params.set(showInput: true)
|
84
|
+
|
85
|
+
focusInputField: =>
|
86
|
+
_.defer => @subviews.inputControl?.$('input').focus()
|
87
|
+
|
88
|
+
closeInputField: =>
|
89
|
+
@params.set(showInput: false)
|
90
|
+
|
91
|
+
hasRecentlyOpenInput: ->
|
92
|
+
# not (new Date - @lastFocusOutAt < 100) and (new Date - @lastFocusOutAt > 100)
|
93
|
+
# are not equal when @lastFocusOutAt is undefined!
|
94
|
+
@params.get('showInput') or (new Date - @lastFocusOutAt < 100)
|
95
|
+
|
96
|
+
handleFocusOut: =>
|
97
|
+
@lastFocusOutAt = new Date
|
98
|
+
@closeInputField()
|
99
|
+
|
100
|
+
text: (value) =>
|
101
|
+
t(
|
62
102
|
"#{@model.name}.axisHandler.#{@attribute}.label"
|
63
103
|
"#{@model.name}.axisHandler.label"
|
64
104
|
'axisHandler.label'
|
65
|
-
value:
|
66
|
-
)
|
105
|
+
value: "<span></span>"
|
106
|
+
)
|
107
|
+
|
108
|
+
renderSpan: =>
|
109
|
+
if @params.get('showInput')
|
110
|
+
@$label.addClass('has-input')
|
111
|
+
control = new Backbone.Poised.Textfield(
|
112
|
+
_.defaults(
|
113
|
+
model: @model
|
114
|
+
attribute: @attribute
|
115
|
+
type: 'number'
|
116
|
+
,
|
117
|
+
@formSettings
|
118
|
+
)
|
119
|
+
)
|
120
|
+
@subviews.inputControl = control
|
121
|
+
@listenToOnce(control, 'changeValue', @handleFocusOut)
|
122
|
+
@$label.find('span').html(control.render().el)
|
123
|
+
else
|
124
|
+
@$label.removeClass('has-input')
|
125
|
+
@$label.find('span').text(
|
126
|
+
@model.get(@attribute).toFixed(@precision) + ' ' + @formSettings.unit
|
127
|
+
)
|
67
128
|
|
68
129
|
render: =>
|
69
|
-
|
130
|
+
delete @subviews.inputField
|
131
|
+
@$label = $('<label>').html(@text())
|
132
|
+
@renderSpan()
|
133
|
+
@$el.html(@$label)
|
70
134
|
@$el.addClass("axis-handler-#{@position}")
|
71
|
-
@renderText()
|
72
135
|
this
|
@@ -29,7 +29,8 @@ class ELA.Views.BaseApp extends Backbone.Poised.View
|
|
29
29
|
'tap header .poised.subviews.select .option.subapp': 'openSubapp'
|
30
30
|
'tap header .poised.subviews.select .option.layout': 'openLayout'
|
31
31
|
'tap header .context.icon': 'toggleContextMenu'
|
32
|
-
'tap article.
|
32
|
+
'tap article.viewport:has(~ aside.active)': 'hideAsides'
|
33
|
+
'tap article.viewport:has(~ .headup.active)': 'hideHeadup'
|
33
34
|
'tap section:has(.subviews.select.view)': 'hideSubappOptions'
|
34
35
|
'tap section:has(.menu.view)': 'hideMenus'
|
35
36
|
|
@@ -41,8 +42,8 @@ class ELA.Views.BaseApp extends Backbone.Poised.View
|
|
41
42
|
initialize: ->
|
42
43
|
@listenTo @model, 'change:currentAside', @toggleAside
|
43
44
|
@listenTo @model, 'change:showHelp', @renderHelp
|
44
|
-
@on 'controlLiveChangeStart', @
|
45
|
-
@on 'controlLiveChangeEnd', @
|
45
|
+
@on 'controlLiveChangeStart', @showHeadup
|
46
|
+
@on 'controlLiveChangeEnd', @hideHeadup
|
46
47
|
|
47
48
|
for aside in @asides
|
48
49
|
aside.link ?= 'icon'
|
@@ -150,15 +151,20 @@ class ELA.Views.BaseApp extends Backbone.Poised.View
|
|
150
151
|
@$("header .#{value}.aside.icon").toggleClass('active', true)
|
151
152
|
@$("aside.#{value}").toggleClass('active', true)
|
152
153
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
154
|
+
showHeadup: (control, options = {}) =>
|
155
|
+
options.mobileOnly ?= true
|
156
|
+
isMobile = $(window).width() <= 768
|
157
|
+
if isMobile or not options.mobileOnly
|
158
|
+
if isMobile
|
159
|
+
@$('aside.active').addClass('hidden')
|
160
|
+
else
|
161
|
+
@model.set('currentAside', null)
|
157
162
|
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
163
|
+
@subviews.headup.activate(control)
|
164
|
+
|
165
|
+
hideHeadup: =>
|
166
|
+
@$('aside.active').removeClass('hidden')
|
167
|
+
@subviews.headup.deactivate()
|
162
168
|
|
163
169
|
setActive: (active) =>
|
164
170
|
@$el.toggleClass('active', active)
|
@@ -11,6 +11,7 @@ class ELA.Views.Canvas extends Backbone.Poised.View
|
|
11
11
|
super
|
12
12
|
fontWeight = if window.devicePixelRatio > 1 then 300 else 400
|
13
13
|
@defaultFont = "#{fontWeight} 12px Roboto"
|
14
|
+
@largeBoldFont = "#{fontWeight * 2} 20px Roboto"
|
14
15
|
|
15
16
|
initialize: (options = {}) ->
|
16
17
|
# Make sure we got the parameters model for holding view specific
|
@@ -1,6 +1,8 @@
|
|
1
1
|
ELA.Views ?= {}
|
2
2
|
|
3
3
|
class ELA.Views.GraphView extends ELA.Views.ViewportView
|
4
|
+
className: "#{ELA.Views.ViewportView::className} graph-view"
|
5
|
+
|
4
6
|
initialize: (options = {}) ->
|
5
7
|
unless options.name?
|
6
8
|
throw 'ELA.Views.GraphView: option `name` is required'
|
@@ -55,11 +57,15 @@ class ELA.Views.GraphView extends ELA.Views.ViewportView
|
|
55
57
|
xAxis: @xAxis
|
56
58
|
yAxis: @yAxis
|
57
59
|
app: @model
|
60
|
+
xOrigin: options.graph?.xOrigin
|
61
|
+
yOrigin: options.graph?.yOrigin
|
62
|
+
xOriginRatio: options.graph?.xOriginRatio
|
63
|
+
yOriginRatio: options.graph?.yOriginRatio
|
58
64
|
|
59
65
|
@subviews = {}
|
60
66
|
|
61
67
|
render: =>
|
62
|
-
|
68
|
+
super
|
63
69
|
|
64
70
|
if @LegendView?
|
65
71
|
view = @subviews.legend ?= new @LegendView
|
@@ -90,7 +96,10 @@ class ELA.Views.GraphView extends ELA.Views.ViewportView
|
|
90
96
|
localePrefix: @localePrefix
|
91
97
|
$horizontalWrapper.append(view.render().el)
|
92
98
|
|
93
|
-
$
|
99
|
+
$graph = $('<div>', class: 'graph')
|
100
|
+
$a = $('<a>', id: 'upstream', href: ELA.settings.upstream.url, target: '_blank')
|
101
|
+
$a.html($('<img>', src: 'images/logo.png'))
|
102
|
+
$horizontalWrapper.append($graph.html($a))
|
94
103
|
@$el.append($horizontalWrapper)
|
95
104
|
|
96
105
|
if @bottomAxisHandler?
|
@@ -104,7 +113,6 @@ class ELA.Views.GraphView extends ELA.Views.ViewportView
|
|
104
113
|
@$el.append(view.render().el)
|
105
114
|
|
106
115
|
delay =>
|
107
|
-
$graph = @$('.graph')
|
108
116
|
@subviews.graph?.remove()
|
109
117
|
# Taken from ELA.Views.Canvas::readCanvasResolution
|
110
118
|
@displayParams.set
|
@@ -116,9 +124,13 @@ class ELA.Views.GraphView extends ELA.Views.ViewportView
|
|
116
124
|
params: @displayParams
|
117
125
|
localePrefix: @localePrefix
|
118
126
|
if @leftAxisHandler?
|
119
|
-
view.$el.on
|
127
|
+
view.$el.on 'tap', (e) =>
|
128
|
+
unless @subviews.bottomAxisHandler?.hasRecentlyOpenInput()
|
129
|
+
@subviews.leftAxisHandler.handleTap(e)
|
120
130
|
if @bottomAxisHandler?
|
121
|
-
view.$el.on
|
122
|
-
|
131
|
+
view.$el.on 'tap', (e) =>
|
132
|
+
unless @subviews.leftAxisHandler?.hasRecentlyOpenInput()
|
133
|
+
@subviews.bottomAxisHandler.handleTap(e)
|
134
|
+
$graph.append(view.render().el)
|
123
135
|
|
124
136
|
this
|
@@ -4,6 +4,7 @@ class Backbone.Poised.Textfield extends Backbone.View
|
|
4
4
|
events:
|
5
5
|
'focusin input': 'clearInputValue'
|
6
6
|
'focusout input': 'readInput'
|
7
|
+
'keyup input': 'handleKeyUp'
|
7
8
|
|
8
9
|
initialize: (options = {}) =>
|
9
10
|
throw new Error('Missing `model` option') unless options.model?
|
@@ -44,7 +45,7 @@ class Backbone.Poised.Textfield extends Backbone.View
|
|
44
45
|
else
|
45
46
|
value = @model.get(@attribute)
|
46
47
|
|
47
|
-
if @options.precision
|
48
|
+
if @options.precision?
|
48
49
|
valueString = value.toFixed(@options.precision)
|
49
50
|
|
50
51
|
@$input.val(valueString or value)
|
@@ -59,8 +60,12 @@ class Backbone.Poised.Textfield extends Backbone.View
|
|
59
60
|
return if @$input.is(':focus')
|
60
61
|
@_updateValue(undefined, updateModel: false)
|
61
62
|
|
63
|
+
handleKeyUp: (e) =>
|
64
|
+
@readInput() if e.keyCode == 13
|
65
|
+
|
62
66
|
readInput: =>
|
63
67
|
@_updateValue(@$input.val())
|
68
|
+
@trigger('changeValue')
|
64
69
|
|
65
70
|
clearInputValue: =>
|
66
71
|
@$input.val('') if @options.clearOnFocus
|
data/lib/ela/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ela
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franz Kißig
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06
|
11
|
+
date: 2018-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|