8 |
client data
9 | {{#each this}}
10 |
11 |
{{@key}}
12 | {{#if this}}{{{modalValue @key this}}}{{else}}false/nil{{/if}}
13 |
14 | {{/each}}
15 |
16 |
31 |
--------------------------------------------------------------------------------
/lib/sensu-dashboard/assets/javascripts/templates/empty_list.hbs:
--------------------------------------------------------------------------------
1 |
9 |
event data
10 |
11 | {{#each event}}
12 | {{#if this}}
13 | {{@key}} {{{modalValue @key this}}}
14 | {{/if}}
15 | {{/each}}
16 |
17 |
18 |
client data
19 |
20 | {{#each client}}
21 | {{#if this}}
22 | {{@key}} {{{modalValue @key this}}}
23 | {{/if}}
24 | {{/each}}
25 |
26 |
27 |
51 |
--------------------------------------------------------------------------------
/lib/sensu-dashboard/assets/javascripts/templates/info/index.hbs:
--------------------------------------------------------------------------------
1 |
8 |
stash data
9 |
10 |
Path
11 | {{path}}
12 |
13 | {{#each content}}
14 |
15 |
{{@key}}
16 | {{#if this}}{{this}}{{else}}false/nil{{/if}}
17 |
18 | {{/each}}
19 |
20 |
26 |
--------------------------------------------------------------------------------
/lib/sensu-dashboard/assets/javascripts/views/auto_complete/auto_complete_field.coffee:
--------------------------------------------------------------------------------
1 | namespace "SensuDashboard.Views", (exports) ->
2 |
3 | class exports.AutoCompleteField extends TokenField
4 |
5 | name: "auto_complete_field"
6 | className: "token-field"
7 | placeholder: ""
8 | minInputValue: 2
9 | maxResults: 9
10 |
11 | localEvents:
12 | "blur input": "_blur"
13 | "focus input": "_focus"
14 | "focusin input": "focusIn"
15 | "focusout input": "focusOut"
16 |
17 | focusIn: ->
18 | $("#filter").addClass("focus")
19 |
20 | focusOut: ->
21 | $("#filter").removeClass("focus")
22 |
23 | initialize: ->
24 | super
25 |
26 | @events = _.extend({}, @events, @localEvents)
27 |
28 | @matcher = new SensuDashboard.Matcher(sources: @options.sources)
29 |
30 | @resultsView = @options.resultsView || new SensuDashboard.Views.AutoCompleteResults(@options.resultsViewOptions)
31 | @resultsView.setDelegate(this)
32 | @resultsView.on("item:selected", @tokenize, this)
33 |
34 | this
35 |
36 | render: ->
37 | super
38 |
39 | @inputTester.setAttribute("placeholder", "")
40 |
41 | @placeholderContent = document.createElement("span")
42 | @placeholderContent.innerHTML = "Filter..."
43 | @container.appendChild(@placeholderContent)
44 |
45 | @textContent.className = "copy"
46 |
47 | @resultsView.setTarget?(@inputTester)
48 |
49 | return this
50 |
51 | addCollection: (collection) ->
52 | @matcher.addSource(collection)
53 |
54 | insertToken: (object) ->
55 | node = new exports.AutoCompleteToken(item: object).render()
56 | token = {object: object, node: node.el}
57 | @el.insertBefore(token.node, @container)
58 | @tokens.push(token)
59 | @delegate.filtersUpdated()
60 | $(@placeholderContent).show()
61 |
62 | tokenize: ->
63 | object = @resultsView.autoCompleteTokenFieldItemSelected()
64 | @inputTester.focus()
65 | @insertToken(object)
66 | @textContent.innerHTML = @inputTester.value = ""
67 |
68 | deleteTokenAtIndex: (index, deselect) ->
69 | super(index, deselect)
70 | @delegate.filtersUpdated()
71 |
72 | _filterCollection: (query) ->
73 | results = @matcher.query(query)
74 | results = _.first(results, @maxResults)
75 | results.push(query)
76 | results
77 |
78 | queryMeetsMinLength: (query = @inputTester.value) ->
79 | query.trim().length >= @minInputValue
80 |
81 | keydown: (e) ->
82 | @resultsView.keyDown(e)
83 | super
84 |
85 | keyup: (e) ->
86 | switch e.keyCode
87 | when 38, 40
88 | return false
89 |
90 | @textContent.innerHTML = @inputTester.value
91 | switch e.keyCode
92 | when 13
93 | @tokenize()
94 | else
95 | @_queryEntered(@inputTester.value)
96 |
97 | keypress: (e) ->
98 | if e.keyCode == 13 && @inputTester.value == ""
99 | @_submit()
100 | e.preventDefault()
101 | return
102 |
103 | _submit: ->
104 | @trigger("submit")
105 |
106 | _blur: (e) ->
107 | @$el.removeClass("focus")
108 | @selectTokenAtIndex(Infinity)
109 | @resultsView.autoCompleteTokenFieldBlur()
110 |
111 | _focus: (e) ->
112 | @$el.addClass("focus")
113 | @_queryEntered(@inputTester.value)
114 |
115 | _queryEntered: (query) ->
116 | if query.length > 0
117 | @selectTokenAtIndex(Infinity) unless @selectedIndex == Infinity
118 | $(@placeholderContent).hide()
119 | if @queryMeetsMinLength(query)
120 | @_showPopover(@_filterCollection(query))
121 | else
122 | @resultsView.autoCompleteTokenFieldEmpty(false)
123 |
124 | # Other
125 |
126 | _showPopover: _.debounce((collection) ->
127 | @resultsView.setCollection(collection)
128 | @resultsView.autoCompleteTokenFieldResults()
129 | , 75)
130 |
131 | destroy: ->
132 | @resultsView.off null, null, this
133 | super
134 |
--------------------------------------------------------------------------------
/lib/sensu-dashboard/assets/javascripts/views/auto_complete/auto_complete_results.coffee:
--------------------------------------------------------------------------------
1 | namespace "SensuDashboard.Views", (exports) ->
2 |
3 | class exports.AutoCompleteResults extends exports.Base
4 |
5 | tagName: "ul"
6 | name: "autocomplete/results"
7 | className: "auto-complete-results"
8 | events:
9 | "mousedown li": (e) ->
10 | e.preventDefault()
11 | e.stopPropagation()
12 | "mouseup li": "selectItem"
13 | "mouseover li": "_mouseoverItem"
14 | visible: false
15 |
16 | initialize: (options) ->
17 | super
18 |
19 | @selectedIndex = -1
20 | @items = []
21 |
22 | setDelegate: (delegate) ->
23 | @delegate = delegate
24 |
25 | renderItem: (item, index) ->
26 | type = if item instanceof SensuDashboard.Models.Check
27 | "check"
28 | else if item instanceof SensuDashboard.Models.Client
29 | "client"
30 | else
31 | "query"
32 | context = if item.toJSON then item.toJSON() else { query: item }
33 |
34 | HandlebarsTemplates["#{@name}_#{type}_item"](context)
35 |
36 | renderCollection: ->
37 | @render()
38 |
39 | @$el.empty()
40 | for model in @collection
41 | @$el.append($(@renderItem(model)))
42 |
43 | @items = @$el.find("> li").toArray()
44 | @selectedIndex = -1
45 | @selectAtIndex(0)
46 |
47 | this
48 |
49 | setCollection: (collection) ->
50 | @collection = collection
51 |
52 | selectNext: ->
53 | item = @selectAtIndex(@selectedIndex + 1)
54 | item.scrollIntoViewIfNeeded(false) if item
55 |
56 | selectPrevious: ->
57 | item = @selectAtIndex(@selectedIndex - 1)
58 | item.scrollIntoViewIfNeeded(true) if item
59 |
60 | selectedObject: ->
61 | return @collection[@selectedIndex]
62 |
63 | selectAtIndex: (index) ->
64 | if 0 <= index < @items.length
65 | @$el.find(".selected").removeClass("selected")
66 | item = @items[index]
67 | $(item).addClass("selected")
68 | @selectedIndex = index
69 | return item
70 |
71 | selectItem: ->
72 | return unless item = @selectedObject()
73 | @trigger("item:selected", item)
74 |
75 | deselectAll: ->
76 | @$el.find(".selected").removeClass("selected")
77 |
78 | #
79 | # Private
80 | #
81 |
82 | _mouseoverItem: (e) ->
83 | index = _.indexOf(@items, e.currentTarget)
84 | return if @selectedIndex == index
85 |
86 | @selectAtIndex index
87 |
88 | keyDown: (e) ->
89 | switch e.keyCode
90 | when 40
91 | e.preventDefault()
92 | @selectNext()
93 | return false
94 |
95 | when 38
96 | e.preventDefault()
97 | @selectPrevious()
98 | return false
99 |
100 | true
101 |
102 | _hide: ->
103 | if @visible
104 | @setElement($("