dashing-rails 1.0.0
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/MIT-LICENSE +20 -0
- data/README.md +161 -0
- data/Rakefile +6 -0
- data/app/assets/fonts/dashing/fontawesome-webfont.eot +0 -0
- data/app/assets/fonts/dashing/fontawesome-webfont.svg +255 -0
- data/app/assets/fonts/dashing/fontawesome-webfont.ttf +0 -0
- data/app/assets/fonts/dashing/fontawesome-webfont.woff +0 -0
- data/app/assets/javascripts/dashing/application.js +27 -0
- data/app/assets/javascripts/dashing/dashing-src.coffee +110 -0
- data/app/assets/javascripts/dashing/dashing.coffee +18 -0
- data/app/assets/stylesheets/dashing/application.css +17 -0
- data/app/assets/stylesheets/dashing/dashing.scss +250 -0
- data/app/controllers/dashing/application_controller.rb +15 -0
- data/app/controllers/dashing/dashboards_controller.rb +31 -0
- data/app/controllers/dashing/events_controller.rb +25 -0
- data/app/controllers/dashing/widgets_controller.rb +50 -0
- data/app/helpers/dashing/application_helper.rb +4 -0
- data/app/views/dashing/default_widgets/clock/clock.coffee +18 -0
- data/app/views/dashing/default_widgets/clock/clock.html +2 -0
- data/app/views/dashing/default_widgets/clock/clock.scss +13 -0
- data/app/views/dashing/default_widgets/comments/comments.coffee +24 -0
- data/app/views/dashing/default_widgets/comments/comments.html +7 -0
- data/app/views/dashing/default_widgets/comments/comments.scss +33 -0
- data/app/views/dashing/default_widgets/graph/graph.coffee +35 -0
- data/app/views/dashing/default_widgets/graph/graph.html +5 -0
- data/app/views/dashing/default_widgets/graph/graph.scss +65 -0
- data/app/views/dashing/default_widgets/iframe/iframe.coffee +9 -0
- data/app/views/dashing/default_widgets/iframe/iframe.html +1 -0
- data/app/views/dashing/default_widgets/iframe/iframe.scss +8 -0
- data/app/views/dashing/default_widgets/image/image.coffee +9 -0
- data/app/views/dashing/default_widgets/image/image.html +1 -0
- data/app/views/dashing/default_widgets/image/image.scss +13 -0
- data/app/views/dashing/default_widgets/index.css +12 -0
- data/app/views/dashing/default_widgets/index.js +13 -0
- data/app/views/dashing/default_widgets/list/list.coffee +6 -0
- data/app/views/dashing/default_widgets/list/list.html +18 -0
- data/app/views/dashing/default_widgets/list/list.scss +60 -0
- data/app/views/dashing/default_widgets/meter/meter.coffee +14 -0
- data/app/views/dashing/default_widgets/meter/meter.html +7 -0
- data/app/views/dashing/default_widgets/meter/meter.scss +35 -0
- data/app/views/dashing/default_widgets/number/number.coffee +24 -0
- data/app/views/dashing/default_widgets/number/number.html +11 -0
- data/app/views/dashing/default_widgets/number/number.scss +39 -0
- data/app/views/dashing/default_widgets/text/text.coffee +1 -0
- data/app/views/dashing/default_widgets/text/text.html +7 -0
- data/app/views/dashing/default_widgets/text/text.scss +32 -0
- data/app/views/layouts/dashing/dashboard.html.erb +30 -0
- data/config/routes.rb +15 -0
- data/lib/assets/javascripts/batman.jquery.js +163 -0
- data/lib/assets/javascripts/batman.js +13680 -0
- data/lib/assets/javascripts/d3.v2.min.js +4 -0
- data/lib/assets/javascripts/dashing.gridster.coffee +35 -0
- data/lib/assets/javascripts/es5-shim.js +1021 -0
- data/lib/assets/javascripts/jquery.gridster.js +2890 -0
- data/lib/assets/javascripts/jquery.js +4 -0
- data/lib/assets/javascripts/jquery.knob.js +646 -0
- data/lib/assets/javascripts/jquery.leanModal.min.js +5 -0
- data/lib/assets/javascripts/jquery.timeago.js +184 -0
- data/lib/assets/javascripts/moment.min.js +6 -0
- data/lib/assets/javascripts/rickshaw.min.js +2 -0
- data/lib/assets/stylesheets/font-awesome.css +303 -0
- data/lib/assets/stylesheets/jquery.gridster.css +57 -0
- data/lib/dashing.rb +29 -0
- data/lib/dashing/configuration.rb +26 -0
- data/lib/dashing/engine.rb +13 -0
- data/lib/dashing/version.rb +3 -0
- data/lib/generators/dashing/install_generator.rb +32 -0
- data/lib/generators/dashing/job_generator.rb +15 -0
- data/lib/generators/templates/dashboards/sample.html.erb +28 -0
- data/lib/generators/templates/initializer.rb +50 -0
- data/lib/generators/templates/jobs/new.rb +3 -0
- data/lib/generators/templates/jobs/sample.rb +9 -0
- data/lib/generators/templates/widgets/index.css +12 -0
- data/lib/generators/templates/widgets/index.js +13 -0
- data/lib/tasks/dashing_tasks.rake +4 -0
- data/spec/controllers/dashing/dashboards_controller_spec.rb +42 -0
- data/spec/controllers/dashing/events_controller_spec.rb +11 -0
- data/spec/controllers/dashing/widgets_controller_spec.rb +61 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/dashing/dashboards/foo.erb +0 -0
- data/spec/dummy/app/views/dashing/widgets/foo/foo.coffee +0 -0
- data/spec/dummy/app/views/dashing/widgets/foo/foo.html +0 -0
- data/spec/dummy/app/views/dashing/widgets/foo/foo.scss +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/layouts/dashing/dashboard.html.erb +30 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +23 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +27 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/lib/dashing/configuration_spec.rb +43 -0
- data/spec/lib/dashing_spec.rb +41 -0
- data/spec/spec_helper.rb +44 -0
- metadata +342 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
module Dashing
|
2
|
+
class EventsController < ApplicationController
|
3
|
+
include ActionController::Live
|
4
|
+
|
5
|
+
respond_to :html
|
6
|
+
|
7
|
+
def index
|
8
|
+
response.headers['Content-Type'] = 'text/event-stream'
|
9
|
+
response.headers['X-Accel-Buffering'] = 'no'
|
10
|
+
|
11
|
+
redis = Redis.new
|
12
|
+
redis.psubscribe("#{Dashing.config.redis_namespace}.*") do |on|
|
13
|
+
on.pmessage do |pattern, event, data|
|
14
|
+
response.stream.write("data: #{data}\n\n")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
rescue IOError
|
18
|
+
logger.info "[Dashing][#{Time.now.utc.to_s}] Stream closed"
|
19
|
+
ensure
|
20
|
+
redis.quit
|
21
|
+
response.stream.close
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Dashing
|
2
|
+
class WidgetsController < ApplicationController
|
3
|
+
|
4
|
+
before_filter :check_accessibility, only: :update
|
5
|
+
before_filter :check_widget_name, only: [:show, :update]
|
6
|
+
before_filter :prepend_view_paths, only: :show
|
7
|
+
|
8
|
+
rescue_from ActionView::MissingTemplate, with: :template_not_found
|
9
|
+
|
10
|
+
def show
|
11
|
+
render file: withdet_path
|
12
|
+
end
|
13
|
+
|
14
|
+
def update
|
15
|
+
data = params[:widget] || {}
|
16
|
+
hash = data.merge(id: params[:name], updatedAt: Time.now.utc.to_i)
|
17
|
+
Dashing.redis.publish("#{Dashing.config.redis_namespace}.create", hash.to_json)
|
18
|
+
|
19
|
+
render nothing: true
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def check_widget_name
|
25
|
+
raise 'bad widget name' unless params[:name] =~ /\A[a-zA-z0-9_\-]+\z/
|
26
|
+
end
|
27
|
+
|
28
|
+
def withdet_path
|
29
|
+
"#{params[:name]}/#{params[:name]}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def prepend_view_paths
|
33
|
+
prepend_view_path engine_view_path
|
34
|
+
prepend_view_path main_app_view_path
|
35
|
+
end
|
36
|
+
|
37
|
+
def engine_view_path
|
38
|
+
Dashing::Engine.root.join('app', 'views', 'dashing', 'default_widgets')
|
39
|
+
end
|
40
|
+
|
41
|
+
def main_app_view_path
|
42
|
+
Rails.root.join(Dashing.config.widgets_path)
|
43
|
+
end
|
44
|
+
|
45
|
+
def template_not_found
|
46
|
+
raise "Count not find template for widget #{params[:name]}. Define your widget in #{main_app_view_path}"
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Dashing.Clock extends Dashing.Widget
|
2
|
+
|
3
|
+
ready: ->
|
4
|
+
setInterval(@startTime, 500)
|
5
|
+
|
6
|
+
startTime: =>
|
7
|
+
today = new Date()
|
8
|
+
|
9
|
+
h = today.getHours()
|
10
|
+
m = today.getMinutes()
|
11
|
+
s = today.getSeconds()
|
12
|
+
m = @formatTime(m)
|
13
|
+
s = @formatTime(s)
|
14
|
+
@set('time', h + ":" + m + ":" + s)
|
15
|
+
@set('date', today.toDateString())
|
16
|
+
|
17
|
+
formatTime: (i) ->
|
18
|
+
if i < 10 then "0" + i else i
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// ----------------------------------------------------------------------------
|
2
|
+
// Sass declarations
|
3
|
+
// ----------------------------------------------------------------------------
|
4
|
+
$background-color: #dc5945;
|
5
|
+
|
6
|
+
// ----------------------------------------------------------------------------
|
7
|
+
// Widget-clock styles
|
8
|
+
// ----------------------------------------------------------------------------
|
9
|
+
.widget-clock {
|
10
|
+
|
11
|
+
background-color: $background-color;
|
12
|
+
|
13
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Dashing.Comments extends Dashing.Widget
|
2
|
+
|
3
|
+
@accessor 'quote', ->
|
4
|
+
"“#{@get('current_comment')?.body}”"
|
5
|
+
|
6
|
+
ready: ->
|
7
|
+
@currentIndex = 0
|
8
|
+
@commentElem = $(@node).find('.comment-container')
|
9
|
+
@nextComment()
|
10
|
+
@startCarousel()
|
11
|
+
|
12
|
+
onData: (data) ->
|
13
|
+
@currentIndex = 0
|
14
|
+
|
15
|
+
startCarousel: ->
|
16
|
+
setInterval(@nextComment, 8000)
|
17
|
+
|
18
|
+
nextComment: =>
|
19
|
+
comments = @get('comments')
|
20
|
+
if comments
|
21
|
+
@commentElem.fadeOut =>
|
22
|
+
@currentIndex = (@currentIndex + 1) % comments.length
|
23
|
+
@set 'current_comment', comments[@currentIndex]
|
24
|
+
@commentElem.fadeIn()
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<h1 class="title" data-bind="title"></h1>
|
2
|
+
<div class="comment-container">
|
3
|
+
<h3><img data-bind-src='current_comment.avatar'/><span data-bind='current_comment.name' class="name"></span></h3>
|
4
|
+
<p class="comment" data-bind='quote'></p>
|
5
|
+
</div>
|
6
|
+
|
7
|
+
<p class="more-info" data-bind="moreinfo | raw"></p>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
// ----------------------------------------------------------------------------
|
2
|
+
// Sass declarations
|
3
|
+
// ----------------------------------------------------------------------------
|
4
|
+
$background-color: #eb9c3c;
|
5
|
+
|
6
|
+
$title-color: rgba(255, 255, 255, 0.7);
|
7
|
+
$moreinfo-color: rgba(255, 255, 255, 0.7);
|
8
|
+
|
9
|
+
// ----------------------------------------------------------------------------
|
10
|
+
// Widget-comment styles
|
11
|
+
// ----------------------------------------------------------------------------
|
12
|
+
.widget-comments {
|
13
|
+
|
14
|
+
background-color: $background-color;
|
15
|
+
|
16
|
+
.title {
|
17
|
+
color: $title-color;
|
18
|
+
margin-bottom: 15px;
|
19
|
+
}
|
20
|
+
|
21
|
+
.name {
|
22
|
+
padding-left: 5px;
|
23
|
+
}
|
24
|
+
|
25
|
+
.comment-container {
|
26
|
+
display: none;
|
27
|
+
}
|
28
|
+
|
29
|
+
.more-info {
|
30
|
+
color: $moreinfo-color;
|
31
|
+
}
|
32
|
+
|
33
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Dashing.Graph extends Dashing.Widget
|
2
|
+
|
3
|
+
@accessor 'current', ->
|
4
|
+
return @get('displayedValue') if @get('displayedValue')
|
5
|
+
points = @get('points')
|
6
|
+
if points
|
7
|
+
points[points.length - 1].y
|
8
|
+
|
9
|
+
ready: ->
|
10
|
+
container = $(@node).parent()
|
11
|
+
# Gross hacks. Let's fix this.
|
12
|
+
width = (Dashing.widget_base_dimensions[0] * container.data("sizex")) + Dashing.widget_margins[0] * 2 * (container.data("sizex") - 1)
|
13
|
+
height = (Dashing.widget_base_dimensions[1] * container.data("sizey"))
|
14
|
+
@graph = new Rickshaw.Graph(
|
15
|
+
element: @node
|
16
|
+
width: width
|
17
|
+
height: height
|
18
|
+
series: [
|
19
|
+
{
|
20
|
+
color: "#fff",
|
21
|
+
data: [{x:0, y:0}]
|
22
|
+
}
|
23
|
+
]
|
24
|
+
)
|
25
|
+
|
26
|
+
@graph.series[0].data = @get('points') if @get('points')
|
27
|
+
|
28
|
+
x_axis = new Rickshaw.Graph.Axis.Time(graph: @graph)
|
29
|
+
y_axis = new Rickshaw.Graph.Axis.Y(graph: @graph, tickFormat: Rickshaw.Fixtures.Number.formatKMBT)
|
30
|
+
@graph.render()
|
31
|
+
|
32
|
+
onData: (data) ->
|
33
|
+
if @graph
|
34
|
+
@graph.series[0].data = data.points
|
35
|
+
@graph.render()
|
@@ -0,0 +1,65 @@
|
|
1
|
+
// ----------------------------------------------------------------------------
|
2
|
+
// Sass declarations
|
3
|
+
// ----------------------------------------------------------------------------
|
4
|
+
$background-color: #dc5945;
|
5
|
+
|
6
|
+
$title-color: rgba(255, 255, 255, 0.7);
|
7
|
+
$moreinfo-color: rgba(255, 255, 255, 0.3);
|
8
|
+
$tick-color: rgba(0, 0, 0, 0.4);
|
9
|
+
|
10
|
+
|
11
|
+
// ----------------------------------------------------------------------------
|
12
|
+
// Widget-graph styles
|
13
|
+
// ----------------------------------------------------------------------------
|
14
|
+
.widget-graph {
|
15
|
+
|
16
|
+
background-color: $background-color;
|
17
|
+
position: relative;
|
18
|
+
|
19
|
+
|
20
|
+
svg {
|
21
|
+
position: absolute;
|
22
|
+
opacity: 0.4;
|
23
|
+
fill-opacity: 0.4;
|
24
|
+
left: 0px;
|
25
|
+
top: 0px;
|
26
|
+
}
|
27
|
+
|
28
|
+
.title, .value {
|
29
|
+
position: relative;
|
30
|
+
z-index: 99;
|
31
|
+
}
|
32
|
+
|
33
|
+
.title {
|
34
|
+
color: $title-color;
|
35
|
+
}
|
36
|
+
|
37
|
+
.more-info {
|
38
|
+
color: $moreinfo-color;
|
39
|
+
font-weight: 600;
|
40
|
+
font-size: 20px;
|
41
|
+
margin-top: 0;
|
42
|
+
}
|
43
|
+
|
44
|
+
.x_tick {
|
45
|
+
position: absolute;
|
46
|
+
bottom: 0;
|
47
|
+
.title {
|
48
|
+
font-size: 20px;
|
49
|
+
color: $tick-color;
|
50
|
+
opacity: 0.5;
|
51
|
+
padding-bottom: 3px;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
.y_ticks {
|
56
|
+
font-size: 20px;
|
57
|
+
fill: $tick-color;
|
58
|
+
fill-opacity: 1;
|
59
|
+
}
|
60
|
+
|
61
|
+
.domain {
|
62
|
+
display: none;
|
63
|
+
}
|
64
|
+
|
65
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Dashing.Iframe extends Dashing.Widget
|
2
|
+
|
3
|
+
ready: ->
|
4
|
+
# This is fired when the widget is done being rendered
|
5
|
+
|
6
|
+
onData: (data) ->
|
7
|
+
# Handle incoming data
|
8
|
+
# You can access the html node of this widget with `@node`
|
9
|
+
# Example: $(@node).fadeOut().fadeIn() will make the node flash each time data comes in.
|
@@ -0,0 +1 @@
|
|
1
|
+
<iframe data-bind-src="url" frameborder=0></iframe>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Dashing.Image extends Dashing.Widget
|
2
|
+
|
3
|
+
ready: ->
|
4
|
+
# This is fired when the widget is done being rendered
|
5
|
+
|
6
|
+
onData: (data) ->
|
7
|
+
# Handle incoming data
|
8
|
+
# You can access the html node of this widget with `@node`
|
9
|
+
# Example: $(@node).fadeOut().fadeIn() will make the node flash each time data comes in.
|
@@ -0,0 +1 @@
|
|
1
|
+
<img data-bind-src="image | prepend '/assets'" data-bind-width="width"/>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// ----------------------------------------------------------------------------
|
2
|
+
// Sass declarations
|
3
|
+
// ----------------------------------------------------------------------------
|
4
|
+
$background-color: #4b4b4b;
|
5
|
+
|
6
|
+
// ----------------------------------------------------------------------------
|
7
|
+
// Widget-image styles
|
8
|
+
// ----------------------------------------------------------------------------
|
9
|
+
.widget-image {
|
10
|
+
|
11
|
+
background-color: $background-color;
|
12
|
+
|
13
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require_tree .
|
12
|
+
*/
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// the compiled file.
|
9
|
+
//
|
10
|
+
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
11
|
+
// GO AFTER THE REQUIRES BELOW.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<h1 class="title" data-bind="title"></h1>
|
2
|
+
|
3
|
+
<ol>
|
4
|
+
<li data-foreach-item="items">
|
5
|
+
<span class="label" data-bind="item.label"></span>
|
6
|
+
<span class="value" data-bind="item.value"></span>
|
7
|
+
</li>
|
8
|
+
</ol>
|
9
|
+
|
10
|
+
<ul class="list-nostyle">
|
11
|
+
<li data-foreach-item="items">
|
12
|
+
<span class="label" data-bind="item.label"></span>
|
13
|
+
<span class="value" data-bind="item.value"></span>
|
14
|
+
</li>
|
15
|
+
</ul>
|
16
|
+
|
17
|
+
<p class="more-info" data-bind="moreinfo"></p>
|
18
|
+
<p class="updated-at" data-bind="updatedAtMessage"></p>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
// ----------------------------------------------------------------------------
|
2
|
+
// Sass declarations
|
3
|
+
// ----------------------------------------------------------------------------
|
4
|
+
$background-color: #12b0c5;
|
5
|
+
$value-color: #fff;
|
6
|
+
|
7
|
+
$title-color: rgba(255, 255, 255, 0.7);
|
8
|
+
$label-color: rgba(255, 255, 255, 0.7);
|
9
|
+
$moreinfo-color: rgba(255, 255, 255, 0.7);
|
10
|
+
|
11
|
+
// ----------------------------------------------------------------------------
|
12
|
+
// Widget-list styles
|
13
|
+
// ----------------------------------------------------------------------------
|
14
|
+
.widget-list {
|
15
|
+
|
16
|
+
background-color: $background-color;
|
17
|
+
vertical-align: top;
|
18
|
+
|
19
|
+
.title {
|
20
|
+
color: $title-color;
|
21
|
+
}
|
22
|
+
|
23
|
+
ol, ul {
|
24
|
+
margin: 0 15px;
|
25
|
+
text-align: left;
|
26
|
+
color: $label-color;
|
27
|
+
}
|
28
|
+
|
29
|
+
ol {
|
30
|
+
list-style-position: inside;
|
31
|
+
}
|
32
|
+
|
33
|
+
li {
|
34
|
+
margin-bottom: 5px;
|
35
|
+
}
|
36
|
+
|
37
|
+
.list-nostyle {
|
38
|
+
list-style: none;
|
39
|
+
}
|
40
|
+
|
41
|
+
.label {
|
42
|
+
color: $label-color;
|
43
|
+
}
|
44
|
+
|
45
|
+
.value {
|
46
|
+
float: right;
|
47
|
+
margin-left: 12px;
|
48
|
+
font-weight: 600;
|
49
|
+
color: $value-color;
|
50
|
+
}
|
51
|
+
|
52
|
+
.updated-at {
|
53
|
+
color: rgba(0, 0, 0, 0.3);
|
54
|
+
}
|
55
|
+
|
56
|
+
.more-info {
|
57
|
+
color: $moreinfo-color;
|
58
|
+
}
|
59
|
+
|
60
|
+
}
|