fleetio_spark 0.2.17 → 0.2.18

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.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spark/_cookie.js +11 -11
  3. data/app/assets/javascripts/spark/_icons.js +1 -1
  4. data/app/assets/javascripts/spark/_modal.js +118 -118
  5. data/app/assets/javascripts/spark/_search.js +24 -24
  6. data/app/assets/javascripts/spark/_stack.js +92 -92
  7. data/app/assets/javascripts/spark/code.js +21 -0
  8. data/app/assets/javascripts/spark/components/nav/_tree.js +22 -22
  9. data/app/assets/javascripts/spark/components/sidebar/_toggle.js +11 -11
  10. data/app/assets/javascripts/spark/components/ui/_sticky_panel.js +6 -6
  11. data/app/assets/javascripts/spark/form/_input-status.js +16 -17
  12. data/app/assets/javascripts/spark/form/_set-input.js +16 -16
  13. data/app/assets/javascripts/spark/form/_sync-select.js +6 -5
  14. data/app/assets/javascripts/spark/shims/_scroll-detect.js +6 -5
  15. data/app/assets/javascripts/spark/spark.js +20 -19
  16. data/app/assets/stylesheets/spark/components_old/_dropdown.scss +3 -3
  17. data/lib/fleetio_spark/version.rb +1 -1
  18. data/public/code-0.2.18.js +2 -0
  19. data/public/code-0.2.18.js.gz +0 -0
  20. data/public/code-0.2.18.js.map +1 -0
  21. data/public/{spark-0.2.17.css → spark-0.2.18.css} +1 -1
  22. data/public/{spark-0.2.17.css.gz → spark-0.2.18.css.gz} +0 -0
  23. data/public/spark-0.2.18.js +2 -0
  24. data/public/spark-0.2.18.js.gz +0 -0
  25. data/public/spark-0.2.18.js.map +1 -0
  26. metadata +11 -8
  27. data/app/assets/javascripts/spark/shims/_dataset.js +0 -241
  28. data/public/spark-0.2.17.js +0 -2
  29. data/public/spark-0.2.17.js.gz +0 -0
  30. data/public/spark-0.2.17.js.map +0 -1
@@ -1,12 +1,12 @@
1
- var toolbox = require( 'compose-toolbox' ),
2
- Event = toolbox.event,
3
- modal = require( './_modal' ),
4
- stack = require( './_stack' )
1
+ var toolbox = require('@spark-engine/toolbox'),
2
+ Event = require('@spark-engine/event'),
3
+ modal = require('./_modal'),
4
+ stack = require('./_stack')
5
5
 
6
6
  // Focus on search when `/` key is pressed
7
- Event.keyOn( '/', function(event){
7
+ Event.keyOn('/', function(event){
8
8
  var q = document.querySelector('[name=q]')
9
- if ( q && !toolbox.getClosest(event.target, '[contenteditable=true]') ) {
9
+ if (q && !event.target.closest('[contenteditable=true]')) {
10
10
  event.preventDefault()
11
11
  q.focus()
12
12
  }
@@ -15,62 +15,62 @@ Event.keyOn( '/', function(event){
15
15
  function setup() {
16
16
  var q = document.querySelector('[name=q]'),
17
17
  filter = document.querySelector('#search_model')
18
- searchPanel = document.querySelector( '.search-panel' ),
19
- searchStack = stack.get( '#search-stack' ),
20
- searchModal = modal.get( '#search-results' )
18
+ searchPanel = document.querySelector('.search-panel'),
19
+ searchStack = stack.get('#search-stack'),
20
+ searchModal = modal.get('#search-results')
21
21
 
22
- if ( !searchModal || !q ) return
22
+ if (!searchModal || !q) return
23
23
 
24
24
  // 1. Focus on query input when characters are typed
25
25
  // 2. Clear input when escape is pressed
26
- function keyWatcher ( event ) {
26
+ function keyWatcher (event) {
27
27
  var focusEl = document.activeElement
28
28
 
29
29
  // If a letter, number, or backspace is pressed, focus on search input
30
- if ( ( event.key.length === 1 || Event.key.isPressed("backspace") ) && focusEl != q && !focusEl.tagName.match(/select|button/i) ) {
30
+ if ((event.key.length === 1 || Event.key.isPressed("backspace")) && focusEl != q && !focusEl.tagName.match(/select|button/i)) {
31
31
  q.focus()
32
32
 
33
33
  // Restore default search input behavior
34
34
  // When foucsed, esc clears input
35
- } else if ( focusEl == q && Event.key.isPressed( "esc" ) ) {
35
+ } else if (focusEl == q && Event.key.isPressed("esc")) {
36
36
  q.value = ''
37
- Event.fire( q, 'input' )
37
+ Event.fire(q, 'input')
38
38
  }
39
39
  }
40
40
 
41
41
  // Scroll all navs back to top
42
42
  function resetScroll () {
43
- toolbox.each( searchStack.root.querySelectorAll( 'nav' ), function (nav) {
43
+ toolbox.each(searchStack.root.querySelectorAll('nav'), function (nav) {
44
44
  nav.scrollTop = 0
45
45
  })
46
46
  }
47
47
 
48
48
  // Show first panel stack when query is cleared
49
- Event.on( q, 'input', function ( event ) {
50
- if ( q.value == '' ) {
51
- searchStack.show( 0 )
49
+ Event.on(q, 'input', function (event) {
50
+ if (q.value == '') {
51
+ searchStack.show(0)
52
52
  searchPanel.classList.remove('search-in-progress')
53
53
  resetScroll()
54
54
  }
55
55
  })
56
56
 
57
- searchModal.on( 'open', function() {
58
- Event.on( document, 'keydown', keyWatcher )
57
+ searchModal.on('open', function() {
58
+ Event.on(document, 'keydown', keyWatcher)
59
59
  })
60
60
 
61
61
  // Reset stack when modal is closed and query is clear
62
- searchModal.on( 'close', function() {
62
+ searchModal.on('close', function() {
63
63
  // Restore state of search panel
64
- if ( q.value == '' ) {
64
+ if (q.value == '') {
65
65
  searchStack.reset()
66
66
  resetScroll()
67
67
  }
68
68
 
69
69
  searchPanel.classList.remove('search-in-progress')
70
70
 
71
- Event.off( document, 'keydown', keyWatcher )
71
+ Event.off(document, 'keydown', keyWatcher)
72
72
  })
73
73
  }
74
74
 
75
75
  // Reset search results panel when query is cleared
76
- Event.ready( setup )
76
+ Event.ready(setup)
@@ -1,14 +1,14 @@
1
- var toolbox = require( 'compose-toolbox' ),
2
- Event = toolbox.event,
1
+ var toolbox = require('@spark-engine/toolbox'),
2
+ Event = require('@spark-engine/event'),
3
3
  Stacks = []
4
4
 
5
5
  var Stack = {
6
- new: function( root ) {
6
+ new: function(root) {
7
7
 
8
- if ( !isElement( root ) ) root = document.querySelector( root )
8
+ if (!isElement(root)) root = document.querySelector(root)
9
9
 
10
10
  // Don't add a new stack if no element found or if stack already exists
11
- if ( !isElement( root ) || root.dataset.stackId ) return
11
+ if (!isElement(root) || root.dataset.stackId) return
12
12
 
13
13
  // Set up stack by searching DOM node under it.
14
14
  // The first child found will be set up as a default
@@ -20,46 +20,46 @@ var Stack = {
20
20
  focus: [],
21
21
  current: null,
22
22
 
23
- add: function ( panelEl, name ) {
23
+ add: function (panelEl, name) {
24
24
  panelEl.dataset.stackIndex = stack.panels.length
25
25
 
26
- hideEl( panelEl )
26
+ hideEl(panelEl)
27
27
 
28
- stack.panels.push( panelEl )
28
+ stack.panels.push(panelEl)
29
29
  },
30
30
 
31
31
  // Reset stack to first panel
32
32
  reset: function () {
33
33
  // Already reset? We're done.
34
- if ( stack.current == 0 ) return
34
+ if (stack.current == 0) return
35
35
 
36
36
  // If hidden or first is empty, hide all
37
- if ( stack.root.offsetParent == null ) {
37
+ if (stack.root.offsetParent == null) {
38
38
  stack.focus = [] // Clear focus stack
39
39
 
40
40
  // Hide and reset scroll on all panels
41
41
  stack.hidePanels()
42
42
 
43
43
  // Show first panel
44
- if ( isEmpty( stack.panels[0] ) ) {
44
+ if (isEmpty(stack.panels[0])) {
45
45
  stack.current = null
46
46
  } else {
47
47
  stack.current = 0
48
48
  }
49
- showEl( stack.panels[0] )
49
+ showEl(stack.panels[0])
50
50
  stack.updateWatchers()
51
51
  }
52
52
 
53
53
  // If not hidden, dismiss current panel and reset to first panel
54
- else stack.show( 0 )
54
+ else stack.show(0)
55
55
  },
56
56
 
57
57
  // Show a specific panel, hiding all others
58
- show: function ( name ) {
59
- var panel = stack.findPanel( name )
60
- if ( !panel ) return // This panel doesn't exist
58
+ show: function (name) {
59
+ var panel = stack.findPanel(name)
60
+ if (!panel) return // This panel doesn't exist
61
61
 
62
- if ( isEmpty( panel ) ) {
62
+ if (isEmpty(panel)) {
63
63
  stack.current = null
64
64
  stack.hidePanels()
65
65
  stack.updateWatchers()
@@ -67,81 +67,81 @@ var Stack = {
67
67
  }
68
68
 
69
69
  var current = stack.currentPanel()
70
- if ( !current ) return stack.enter( panel ) // the stack isn't currently active
70
+ if (!current) return stack.enter(panel) // the stack isn't currently active
71
71
 
72
72
  // If a panel isn't the current panel
73
- if ( panel != current ) {
73
+ if (panel != current) {
74
74
 
75
75
  // Dismiss it with the callback load in the next panel
76
- return stack.dismiss( stack.direction( panel ), function() {
77
- stack.enter( panel )
76
+ return stack.dismiss(stack.direction(panel), function() {
77
+ stack.enter(panel)
78
78
  })
79
79
 
80
80
  }
81
81
  },
82
82
 
83
- enter: function ( el ) {
84
- var direction = stack.direction( el )
83
+ enter: function (el) {
84
+ var direction = stack.direction(el)
85
85
  el.dataset.direction = direction
86
- stack.current = Number( el.dataset.stackIndex )
86
+ stack.current = Number(el.dataset.stackIndex)
87
87
 
88
- Event.afterAnimation( el, function() {
88
+ Event.afterAnimation(el, function() {
89
89
  el.dataset.direction = ''
90
- el.classList.remove( 'enter' )
91
- }, 50 )
90
+ el.classList.remove('enter')
91
+ }, 50)
92
92
 
93
- el.classList.add( 'enter' )
94
- showEl( el )
93
+ el.classList.add('enter')
94
+ showEl(el)
95
95
 
96
96
  stack.updateWatchers()
97
97
 
98
- if ( direction == 'forward' ) {
98
+ if (direction == 'forward') {
99
99
  // If the previous focused element was in the stack
100
- //if ( toolbox.childOf( stack.lastFocus(), stack.root ) ) {
100
+ //if (toolbox.childOf(stack.lastFocus(), stack.root)) {
101
101
 
102
102
  // focus on the first input
103
- //var firstItem = el.querySelector( 'input:not([hidden]), textarea, select, a[tabindex]' )
104
- //if ( firstItem ) firstItem.focus()
103
+ //var firstItem = el.querySelector('input:not([hidden]), textarea, select, a[tabindex]')
104
+ //if (firstItem) firstItem.focus()
105
105
 
106
106
  //}
107
107
 
108
108
  }
109
109
 
110
110
  // When reversing, focus on the previously focused element
111
- if ( direction == 'reverse' && stack.focus.length > 0 ) {
111
+ if (direction == 'reverse' && stack.focus.length > 0) {
112
112
  stack.focus.pop().focus()
113
113
  }
114
114
  },
115
115
 
116
- dismiss: function ( direction, callback ) {
116
+ dismiss: function (direction, callback) {
117
117
 
118
118
  var el = stack.currentPanel()
119
119
 
120
- if ( direction == 'forward' )
121
- stack.focus.push( document.activeElement )
120
+ if (direction == 'forward')
121
+ stack.focus.push(document.activeElement)
122
122
 
123
- el.classList.remove( 'enter' )
124
- el.classList.add( 'exit' )
123
+ el.classList.remove('enter')
124
+ el.classList.add('exit')
125
125
  el.dataset.direction = direction
126
126
 
127
- Event.afterAnimation( el, function() {
127
+ Event.afterAnimation(el, function() {
128
128
  // Ensure panel is scrolled to top
129
- if ( direction == 'reverse' ) el.scrollTop = 0
129
+ if (direction == 'reverse') el.scrollTop = 0
130
130
 
131
- hideEl( el )
132
- el.classList.remove( 'exit' )
131
+ hideEl(el)
132
+ el.classList.remove('exit')
133
133
  el.dataset.direction = ''
134
134
 
135
- if ( typeof callback === 'function' ) callback()
135
+ if (typeof callback === 'function') callback()
136
136
 
137
- }, 50 )
137
+ }, 50)
138
138
 
139
139
  },
140
140
 
141
141
  hidePanels: function() {
142
- stack.panels.forEach( function( el ) {
142
+ stack.panels.forEach(function(el) {
143
143
  el.scrollTop = 0
144
- hideEl( el )
144
+ hideEl(el)
145
145
  })
146
146
  },
147
147
 
@@ -150,130 +150,130 @@ var Stack = {
150
150
  },
151
151
 
152
152
  // Find a panel by name or index
153
- findPanel: function ( name ) {
154
- if ( isElement( name ) )
153
+ findPanel: function (name) {
154
+ if (isElement(name))
155
155
  return name
156
156
  else
157
- return root.querySelector( '[data-stack="'+name+'"], [data-stack-index="'+name+'"]' )
157
+ return root.querySelector('[data-stack="'+name+'"], [data-stack-index="'+name+'"]')
158
158
  },
159
159
 
160
160
  // Walk backwards in the stack, showing the panel previous to the current panel
161
161
  back: function () {
162
- stack.show( stack.panels[ stack.current - 1 ] )
162
+ stack.show(stack.panels[ stack.current - 1 ])
163
163
  },
164
164
 
165
165
  // add aria-hidden=false to the first hidden element
166
166
  next: function () {
167
- stack.show( stack.panels[ stack.current + 1 ] )
167
+ stack.show(stack.panels[ stack.current + 1 ])
168
168
  },
169
169
 
170
- direction: function( panel ) {
171
- var index = stack.panelIndex( panel )
170
+ direction: function(panel) {
171
+ var index = stack.panelIndex(panel)
172
172
 
173
- if ( index == stack.current || stack.current == null ) return 'none'
174
- else return ( stack.current < index ) ? 'forward' : 'reverse'
173
+ if (index == stack.current || stack.current == null) return 'none'
174
+ else return (stack.current < index) ? 'forward' : 'reverse'
175
175
 
176
176
  },
177
177
 
178
- currentPanel: function ( name ) {
179
- if ( typeof stack.current == 'undefined' ) return
178
+ currentPanel: function (name) {
179
+ if (typeof stack.current == 'undefined') return
180
180
 
181
- if ( name ) {
182
- return stack.panels[ stack.current ] == stack.findPanel( name )
181
+ if (name) {
182
+ return stack.panels[ stack.current ] == stack.findPanel(name)
183
183
  }
184
184
  return stack.panels[ stack.current ]
185
185
  },
186
186
 
187
- panelIndex: function ( panel ) {
188
- return Number( panel.dataset.stackIndex )
187
+ panelIndex: function (panel) {
188
+ return Number(panel.dataset.stackIndex)
189
189
  },
190
190
 
191
191
  updateWatchers: function () {
192
- toolbox.each( stack.watchers, function( el ) {
193
- if ( stack.current == null )
194
- el.removeAttribute( 'data-active-stack' )
192
+ toolbox.each(stack.watchers, function(el) {
193
+ if (stack.current == null)
194
+ el.removeAttribute('data-active-stack')
195
195
  else
196
196
  el.dataset.activeStack = stack.currentPanel().dataset.stack || stack.currentPanel().dataset.stackIndex
197
197
  })
198
198
  }
199
199
  }
200
200
 
201
- toolbox.each( root.children, stack.add )
201
+ toolbox.each(root.children, stack.add)
202
202
 
203
- if ( root.id ) stack.watchers = document.querySelectorAll('[data-watch-stack="#'+root.id+'"]')
203
+ if (root.id) stack.watchers = document.querySelectorAll('[data-watch-stack="#'+root.id+'"]')
204
204
 
205
205
  // Only show the first panel if it has content.
206
206
  // If it doesn't, assume async and manual panel showing.
207
- if ( !isEmpty( stack.panels[0] ) ) stack.show(0)
207
+ if (!isEmpty(stack.panels[0])) stack.show(0)
208
208
 
209
209
  // Add a queryable stack id
210
210
  root.dataset.stackId = Stacks.length
211
211
 
212
- Stacks.push( stack )
212
+ Stacks.push(stack)
213
213
 
214
214
  return stack
215
215
  }
216
216
  }
217
217
 
218
- function showEl ( el ) {
219
- el.setAttribute( 'aria-hidden', false )
218
+ function showEl (el) {
219
+ el.setAttribute('aria-hidden', false)
220
220
  }
221
221
 
222
- function isEmpty ( el ) {
222
+ function isEmpty (el) {
223
223
  return el.childElementCount == 0
224
224
  }
225
225
 
226
- function hideEl ( el ) {
227
- el.setAttribute( 'aria-hidden', true )
226
+ function hideEl (el) {
227
+ el.setAttribute('aria-hidden', true)
228
228
  }
229
229
 
230
- function isElement ( item ) {
230
+ function isElement (item) {
231
231
  return item.constructor.toString().search(/HTML.+Element/) > -1
232
232
  }
233
233
 
234
- function navClick ( event ) {
234
+ function navClick (event) {
235
235
  var el = event.currentTarget
236
236
  var panel = el.dataset.stackNav
237
- var stack = getStack( toolbox.getClosest( el, '[data-stack="root"]' ) )
238
- if ( !stack ) return
237
+ var stack = getStack(el.closest('[data-stack="root"]'))
238
+ if (!stack) return
239
239
 
240
- if ( panel == 'next' ) stack.next()
241
- else if ( panel == 'back' ) stack.back()
242
- else if ( stack.findPanel( panel ) ) stack.show( panel )
240
+ if (panel == 'next') stack.next()
241
+ else if (panel == 'back') stack.back()
242
+ else if (stack.findPanel(panel)) stack.show(panel)
243
243
  else return
244
244
 
245
245
  //event.preventDefault()
246
246
  }
247
247
 
248
- function prevPanel ( event ) {
249
- var stack = getStack( toolbox.getClosest( event.target, '[data-stack="root"]' ) )
248
+ function prevPanel (event) {
249
+ var stack = getStack(event.target.closest('[data-stack="root"]'))
250
250
  stack.back()
251
251
  event.preventDefault()
252
252
  }
253
253
 
254
254
  function setup () {
255
- Event.change( function() {
256
- toolbox.each( document.querySelectorAll( '[data-stack="root"]'), Stack.new )
255
+ Event.change(function() {
256
+ toolbox.each(document.querySelectorAll('[data-stack="root"]'), Stack.new)
257
257
  })
258
258
 
259
259
  // Localise clicks to a stack root
260
260
  // Future: consider expanding this to allow controls to live anywhere and point to a stack
261
- Event.on( document, 'click', '[data-stack="root"] [data-stack-nav]', navClick )
261
+ Event.on(document, 'click', '[data-stack="root"] [data-stack-nav]', navClick)
262
262
  }
263
263
 
264
- function getStack ( search ) {
264
+ function getStack (search) {
265
265
 
266
- if ( isElement( search ) ) {
267
- if ( search.dataset.stackId ) return Stacks[ search.dataset.stackId ]
266
+ if (isElement(search)) {
267
+ if (search.dataset.stackId) return Stacks[ search.dataset.stackId ]
268
268
  }
269
269
 
270
- if ( typeof search === 'string' ) {
270
+ if (typeof search === 'string') {
271
271
 
272
272
  // Well, let's hope it's a DOM selector
273
- var stack = document.querySelector( search )
273
+ var stack = document.querySelector(search)
274
274
 
275
275
  // If it is woo hoo
276
- if ( stack && stack.dataset.stackId ) {
276
+ if (stack && stack.dataset.stackId) {
277
277
  return Stacks[ stack.dataset.stackId ]
278
278
  }
279
279
  }