dashing-contrib 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5fd49e8d1e1bac01968685cfc2b6138181c340ef
4
- data.tar.gz: 9a47cffbec645497147f7c69498b9b3c6aa7cfdd
3
+ metadata.gz: 36e54448da41d937f2b532cb8420c43d5ef2eb75
4
+ data.tar.gz: 643f2e2c444ec3f54528b0a0f9922caffcc521a5
5
5
  SHA512:
6
- metadata.gz: 7d1d088322a87f0b320537560989c87c9f84173b8316d89034ab5b1f9280f0e1ca3cd688a730aaa63b1197c5f6b4ba6ec9b5dc967f422abcaa43629d912f2b03
7
- data.tar.gz: ebf7b8e29e77156ea9d5a04de3dff856784cb75febbb69c630b59cecf93ab3614f0fbb9ce69eed68993bbe3f70f6418264bf9dc6e985137ba06f07b2f7361c44
6
+ metadata.gz: 93d4a13508c10409834e8c952624b2382833e3d29e9517db6d07b3836eb27ee01bb01e025bab90082cac26125dc16a55733f4fb294adfc8b7d51491dd0bdf1f9
7
+ data.tar.gz: 9c2832cbe11f170bb114325aae859b2416b56aafbc61818adea566773f1f35b6905eb588bfe76ce7e88e47e2e72819622d607c0b7f70a1e335d6ae703fedb6a5
@@ -0,0 +1,111 @@
1
+ /**
2
+ * jquery.timer.js
3
+ *
4
+ * Copyright (c) 2011 Jason Chavannes <jason.chavannes@gmail.com>
5
+ *
6
+ * http://jchavannes.com/jquery-timer
7
+ *
8
+ * Permission is hereby granted, free of charge, to any person
9
+ * obtaining a copy of this software and associated documentation
10
+ * files (the "Software"), to deal in the Software without
11
+ * restriction, including without limitation the rights to use, copy,
12
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
13
+ * of the Software, and to permit persons to whom the Software is
14
+ * furnished to do so, subject to the following conditions:
15
+ *
16
+ * The above copyright notice and this permission notice shall be
17
+ * included in all copies or substantial portions of the Software.
18
+ *
19
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
23
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
24
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
25
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ * SOFTWARE.
27
+ */
28
+
29
+ ;(function($) {
30
+ $.timer = function(func, time, autostart) {
31
+ this.set = function(func, time, autostart) {
32
+ this.init = true;
33
+ if(typeof func == 'object') {
34
+ var paramList = ['autostart', 'time'];
35
+ for(var arg in paramList) {if(func[paramList[arg]] != undefined) {eval(paramList[arg] + " = func[paramList[arg]]");}};
36
+ func = func.action;
37
+ }
38
+ if(typeof func == 'function') {this.action = func;}
39
+ if(!isNaN(time)) {this.intervalTime = time;}
40
+ if(autostart && !this.isActive) {
41
+ this.isActive = true;
42
+ this.setTimer();
43
+ }
44
+ return this;
45
+ };
46
+ this.once = function(time) {
47
+ var timer = this;
48
+ if(isNaN(time)) {time = 0;}
49
+ window.setTimeout(function() {timer.action();}, time);
50
+ return this;
51
+ };
52
+ this.play = function(reset) {
53
+ if(!this.isActive) {
54
+ if(reset) {this.setTimer();}
55
+ else {this.setTimer(this.remaining);}
56
+ this.isActive = true;
57
+ }
58
+ return this;
59
+ };
60
+ this.pause = function() {
61
+ if(this.isActive) {
62
+ this.isActive = false;
63
+ this.remaining -= new Date() - this.last;
64
+ this.clearTimer();
65
+ }
66
+ return this;
67
+ };
68
+ this.stop = function() {
69
+ this.isActive = false;
70
+ this.remaining = this.intervalTime;
71
+ this.clearTimer();
72
+ return this;
73
+ };
74
+ this.toggle = function(reset) {
75
+ if(this.isActive) {this.pause();}
76
+ else if(reset) {this.play(true);}
77
+ else {this.play();}
78
+ return this;
79
+ };
80
+ this.reset = function() {
81
+ this.isActive = false;
82
+ this.play(true);
83
+ return this;
84
+ };
85
+ this.clearTimer = function() {
86
+ window.clearTimeout(this.timeoutObject);
87
+ };
88
+ this.setTimer = function(time) {
89
+ var timer = this;
90
+ if(typeof this.action != 'function') {return;}
91
+ if(isNaN(time)) {time = this.intervalTime;}
92
+ this.remaining = time;
93
+ this.last = new Date();
94
+ this.clearTimer();
95
+ this.timeoutObject = window.setTimeout(function() {timer.go();}, time);
96
+ };
97
+ this.go = function() {
98
+ if(this.isActive) {
99
+ this.action();
100
+ this.setTimer();
101
+ }
102
+ };
103
+
104
+ if(this.init) {
105
+ return new $.timer(func, time, autostart);
106
+ } else {
107
+ this.set(func, time, autostart);
108
+ return this;
109
+ }
110
+ };
111
+ })(jQuery);
@@ -15,7 +15,7 @@ class DashboardSwitcher
15
15
  @dashboardNames = (name.trim() for name in names.split(/[ ,]+/).filter(Boolean))
16
16
 
17
17
  start: (interval=60000) ->
18
- self = @
18
+ interval = parseInt(interval, 10)
19
19
  @maxPos = @dashboardNames.length - 1
20
20
 
21
21
  # Skip switching if no names defined
@@ -32,7 +32,14 @@ class DashboardSwitcher
32
32
  @curPos = 0
33
33
  @curName = @dashboardNames[@curPos]
34
34
 
35
- # Start loop
35
+ # instantiate switcher controls for countdown and manual switching
36
+ @switcherControls = new DashboardSwitcherControls(interval, @)
37
+ @switcherControls.start() if @switcherControls.present()
38
+
39
+ @startLoop(interval)
40
+
41
+ startLoop: (interval) ->
42
+ self = @
36
43
  @handle = setTimeout(() ->
37
44
  # Increase the position or reset back to zero
38
45
  self.curPos += 1
@@ -43,7 +50,19 @@ class DashboardSwitcher
43
50
  self.curName = self.dashboardNames[self.curPos]
44
51
  window.location.pathname = "/#{self.curName}"
45
52
 
46
- , parseInt(interval, 10))
53
+ , interval)
54
+
55
+ stopLoop: () ->
56
+ clearTimeout @handle
57
+
58
+ currentName: () ->
59
+ @curName
60
+
61
+ nextName: () ->
62
+ @dashboardNames[@curPos + 1] || @dashboardNames[0]
63
+
64
+ previousName: () ->
65
+ @dashboardNames[@curPos - 1] || @dashboardNames[@dashboardNames.length - 1]
47
66
 
48
67
 
49
68
  # Switches (hides and shows) elements within on list item
@@ -82,6 +101,107 @@ class WidgetSwitcher
82
101
  stop: () ->
83
102
  clearInterval(@handle)
84
103
 
104
+ # Adds a countdown timer to show when next dashboard will appear
105
+ # TODO:
106
+ # - show the name of the next dashboard
107
+ # - add controls for manually cycling through dashboards
108
+ class DashboardSwitcherControls
109
+ arrowContent = "&#65515;"
110
+ stopTimerContent = "stop timer"
111
+ startTimerContent = "start timer"
112
+
113
+ constructor: (interval=60000, dashboardSwitcher) ->
114
+ @currentTime = parseInt(interval, 10)
115
+ @interval = parseInt(interval, 10)
116
+ @$elements = $('#dc-switcher-controls')
117
+ @dashboardSwitcher = dashboardSwitcher
118
+ @incrementTime = 1000 # refresh every 1000 milliseconds
119
+ @arrowContent = @$elements.data('next-dashboard-content') || DashboardSwitcherControls.arrowContent
120
+ @stopTimerContent = @$elements.data('stop-timer-content') || DashboardSwitcherControls.stopTimerContent
121
+ @startTimerContent = @$elements.data('start-timer-content') || DashboardSwitcherControls.startTimerContent
122
+ @
123
+
124
+ present: () ->
125
+ @$elements.length
126
+
127
+ start: () ->
128
+ @addElements()
129
+ @$timer = $.timer(@updateTimer, @incrementTime, true)
130
+
131
+ addElements: () ->
132
+ template = @$elements.find('dashboard-name-template')
133
+ if template.length
134
+ @$nextDashboardNameTemplate = template
135
+ @$nextDashboardNameTemplate.remove()
136
+ else
137
+ @$nextDashboardNameTemplate = $("<dashboard-name-template>Next dashboard: $nextName in </dashboard-name-template>")
138
+ @$nextDashboardNameContainer = $("<span id='dc-switcher-next-name'></span>")
139
+ @$countdown = $("<span id='dc-switcher-countdown'></span>")
140
+ @$manualSwitcher = $("<span id='dc-switcher-next' class='fa fa-forward'></span>").
141
+ html(@arrowContent).
142
+ click () =>
143
+ location.href = "/#{@dashboardSwitcher.nextName()}"
144
+ @$switcherStopper = $("<span id='dc-switcher-pause-reset' class='fa fa-pause'></span>").
145
+ html(@stopTimerContent).
146
+ click(@pause)
147
+ @$elements.
148
+ append(@$nextDashboardNameContainer).
149
+ append(@$countdown).
150
+ append(@$manualSwitcher).
151
+ append(@$switcherStopper)
152
+
153
+ formatTime: (time) ->
154
+ time = time / 10;
155
+ min = parseInt(time / 6000, 10)
156
+ sec = parseInt(time / 100, 10) - (min * 60)
157
+ "#{(if min > 0 then @pad(min, 2) else "00")}:#{@pad(sec, 2)}"
158
+
159
+ pad: (number, length) =>
160
+ str = "#{number}"
161
+ while str.length < length
162
+ str = "0#{str}"
163
+ str
164
+
165
+ pause: () =>
166
+ @$timer.toggle()
167
+ if @isRunning()
168
+ @dashboardSwitcher.stopLoop()
169
+ @$switcherStopper.removeClass('fa-pause').addClass('fa-play').html(@startTimerContent)
170
+ else
171
+ @dashboardSwitcher.startLoop @currentTime
172
+ @$switcherStopper.removeClass('fa-play').addClass('fa-pause').html(@stopTimerContent)
173
+
174
+ isRunning: () =>
175
+ @$switcherStopper.hasClass('fa-pause')
176
+
177
+ resetCountdown: () ->
178
+ # Get time from form
179
+ newTime = @interval
180
+ if newTime > 0
181
+ @currentTime = newTime
182
+
183
+ # Stop and reset timer
184
+ @$timer.stop().once()
185
+
186
+ updateTimer: () =>
187
+ # Update dashboard name
188
+ @$nextDashboardNameContainer.html(
189
+ @$nextDashboardNameTemplate.html().replace('$nextName', @dashboardSwitcher.nextName())
190
+ )
191
+ # Output timer position
192
+ timeString = @formatTime(@currentTime)
193
+ @$countdown.html(timeString)
194
+
195
+ # If timer is complete, trigger alert
196
+ if @currentTime is 0
197
+ @pause()
198
+ @resetCountdown()
199
+ return
200
+
201
+ # Increment timer position
202
+ @currentTime -= @incrementTime
203
+ if @currentTime < 0
204
+ @currentTime = 0
85
205
 
86
206
  # Dashboard loaded and ready
87
207
  Dashing.on 'ready', ->
@@ -7,9 +7,10 @@ module DashingContrib
7
7
  critical = client.service_status(default_critical_options.merge(options))
8
8
  warning = client.service_status(default_warning_options.merge(options))
9
9
  ok = client.service_status(default_ok_options.merge(options))
10
+ unknown = client.service_status(default_unknown_options.merge(options))
10
11
  ok.select! { |check| check['status'] == 'OK' }
11
12
 
12
- { critical: critical, warning: warning, ok: ok }
13
+ { critical: critical, warning: warning, unknown: unknown, ok: ok }
13
14
  end
14
15
 
15
16
  private
@@ -21,6 +22,10 @@ module DashingContrib
21
22
  { :service_status_types => [:warning], :sort_type => :descending, :sort_option => :last_check }
22
23
  end
23
24
 
25
+ def default_unknown_options
26
+ { :service_status_types => [:unknown], :sort_type => :descending, :sort_option => :last_check }
27
+ end
28
+
24
29
  def default_ok_options
25
30
  { :sort_option => :last_check, :sort_type => :descending }
26
31
  end
@@ -1,3 +1,3 @@
1
1
  module DashingContrib
2
- VERSION = '0.1.6'
2
+ VERSION = '0.1.7'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dashing-contrib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jing Dong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-04 00:00:00.000000000 Z
11
+ date: 2014-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -195,6 +195,7 @@ files:
195
195
  - Rakefile
196
196
  - dashing-contrib.gemspec
197
197
  - lib/dashing-contrib.rb
198
+ - lib/dashing-contrib/assets/javascripts/jquery-timer/jquery.timer.js
198
199
  - lib/dashing-contrib/assets/javascripts/rickshaw/rickshaw.min.js
199
200
  - lib/dashing-contrib/assets/stylesheets/font-awesome/scss/_bordered-pulled.scss
200
201
  - lib/dashing-contrib/assets/stylesheets/font-awesome/scss/_core.scss
@@ -277,7 +278,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
278
  version: '0'
278
279
  requirements: []
279
280
  rubyforge_project:
280
- rubygems_version: 2.0.6
281
+ rubygems_version: 2.4.4
281
282
  signing_key:
282
283
  specification_version: 4
283
284
  summary: An extension to Dashing that makes easier to maintaining, sharing widgets