bumbleworks-gui 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +23 -0
- data/Rakefile +9 -0
- data/bumbleworks-gui.gemspec +31 -0
- data/config.ru +39 -0
- data/lib/bumbleworks/gui.rb +22 -0
- data/lib/bumbleworks/gui/assets/css/application.css +65 -0
- data/lib/bumbleworks/gui/assets/css/ruote-fluo.css +62 -0
- data/lib/bumbleworks/gui/assets/css/side-menu.css +203 -0
- data/lib/bumbleworks/gui/assets/js/application.js +36 -0
- data/lib/bumbleworks/gui/assets/js/fluo_helper.js +30 -0
- data/lib/bumbleworks/gui/assets/js/foolbox.min.js +3 -0
- data/lib/bumbleworks/gui/assets/js/jquery.js +26 -0
- data/lib/bumbleworks/gui/assets/js/list.min.js +1 -0
- data/lib/bumbleworks/gui/assets/js/list.pagination.min.js +1 -0
- data/lib/bumbleworks/gui/assets/js/ruote-fluo.min.js +3 -0
- data/lib/bumbleworks/gui/config/application.rb +9 -0
- data/lib/bumbleworks/gui/config/routes.rb +18 -0
- data/lib/bumbleworks/gui/controllers/application_controller.rb +15 -0
- data/lib/bumbleworks/gui/controllers/dashboards_controller.rb +17 -0
- data/lib/bumbleworks/gui/controllers/entities_controller.rb +26 -0
- data/lib/bumbleworks/gui/controllers/expressions_controller.rb +28 -0
- data/lib/bumbleworks/gui/controllers/processes_controller.rb +13 -0
- data/lib/bumbleworks/gui/controllers/tasks_controller.rb +13 -0
- data/lib/bumbleworks/gui/controllers/trackers_controller.rb +13 -0
- data/lib/bumbleworks/gui/version.rb +5 -0
- data/lib/bumbleworks/gui/views/dashboards/show.html.erb +21 -0
- data/lib/bumbleworks/gui/views/entities/index.html.erb +46 -0
- data/lib/bumbleworks/gui/views/entities/show.html.erb +9 -0
- data/lib/bumbleworks/gui/views/entities/types.html.erb +3 -0
- data/lib/bumbleworks/gui/views/expressions/actions.html.erb +11 -0
- data/lib/bumbleworks/gui/views/expressions/show.html.erb +32 -0
- data/lib/bumbleworks/gui/views/layouts/default.html.erb +58 -0
- data/lib/bumbleworks/gui/views/processes/index.html.erb +3 -0
- data/lib/bumbleworks/gui/views/processes/show.html.erb +46 -0
- data/lib/bumbleworks/gui/views/shared/entity_types.html.erb +23 -0
- data/lib/bumbleworks/gui/views/shared/expressions.html.erb +27 -0
- data/lib/bumbleworks/gui/views/shared/list_js_script.html.erb +29 -0
- data/lib/bumbleworks/gui/views/shared/processes.html.erb +45 -0
- data/lib/bumbleworks/gui/views/shared/tasks.html.erb +28 -0
- data/lib/bumbleworks/gui/views/shared/trackers.html.erb +25 -0
- data/lib/bumbleworks/gui/views/tasks/index.html.erb +3 -0
- data/lib/bumbleworks/gui/views/tasks/show.html.erb +13 -0
- data/lib/bumbleworks/gui/views/trackers/index.html.erb +3 -0
- data/lib/bumbleworks/gui/views/trackers/show.html.erb +13 -0
- data/spec/features/dashboard_display_spec.rb +18 -0
- data/spec/features/entity_administration_spec.rb +38 -0
- data/spec/features/expression_administration_spec.rb +48 -0
- data/spec/features/process_administration_spec.rb +24 -0
- data/spec/features/task_administration_spec.rb +22 -0
- data/spec/features/tracker_administration_spec.rb +23 -0
- data/spec/fixtures/bumbleworks_config.rb +10 -0
- data/spec/fixtures/entities/mock_entity.rb +38 -0
- data/spec/fixtures/entities/widget.rb +9 -0
- data/spec/fixtures/entities/widgety_fidget.rb +5 -0
- data/spec/fixtures/participants.rb +3 -0
- data/spec/fixtures/participants/naughty_participant.rb +8 -0
- data/spec/fixtures/processes/task_process.rb +9 -0
- data/spec/fixtures/processes/waiting_process.rb +8 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/support/drivers/dashboard_detail.rb +5 -0
- data/spec/support/drivers/entity_detail.rb +9 -0
- data/spec/support/drivers/entity_index.rb +13 -0
- data/spec/support/drivers/entity_type_index.rb +11 -0
- data/spec/support/drivers/expression_detail.rb +11 -0
- data/spec/support/drivers/process_detail.rb +17 -0
- data/spec/support/drivers/process_index.rb +11 -0
- data/spec/support/drivers/task_detail.rb +5 -0
- data/spec/support/drivers/task_index.rb +11 -0
- data/spec/support/drivers/tracker_detail.rb +5 -0
- data/spec/support/drivers/tracker_index.rb +11 -0
- data/spec/support/drivers/window_driver.rb +9 -0
- data/spec/support/path_helpers.rb +10 -0
- data/spec/support/process_testing_helpers.rb +9 -0
- metadata +288 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.3-p484
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Bumbleworks
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Bumbleworks::Gui
|
2
|
+
|
3
|
+
A rack-based web GUI (using [Rory](http://github.com/ravigadad/rory)) for your [Bumbleworks](http://github.com/bumbleworks/bumbleworks) instance.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'bumbleworks-gui'
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
There are quite a few ways to use this - the most common, if you're using Bumbleworks in a Rails app, would probably be to mount Bumbleworks::Gui::RackApp at some path in your Rails routing - see the [Rails routing guide](http://guides.rubyonrails.org/routing.html#routing-to-rack-applications) for more info.
|
14
|
+
|
15
|
+
Or you can run it standalone using a Rack server - basically, Bumbleworks just needs to be configured, and then you can `run Bumbleworks::Gui::RackApp`.
|
16
|
+
|
17
|
+
## Contributing
|
18
|
+
|
19
|
+
1. Fork it
|
20
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
21
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
22
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
23
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'bumbleworks/gui/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "bumbleworks-gui"
|
8
|
+
spec.version = Bumbleworks::Gui::VERSION
|
9
|
+
spec.authors = ["Ravi Gadad"]
|
10
|
+
spec.email = ["ravi@renewfund.com"]
|
11
|
+
spec.description = %q{Bumbleworks web GUI for viewing/administering processes}
|
12
|
+
spec.summary = %q{This gem enables a Rory application (mountable in your own app)
|
13
|
+
to make it easier to administer your Bumbleworks instance.}
|
14
|
+
spec.homepage = ""
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files`.split($/)
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_runtime_dependency "bumbleworks", ">= 0.0.73"
|
23
|
+
spec.add_runtime_dependency "rory", ">= 0.3.11"
|
24
|
+
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
26
|
+
spec.add_development_dependency "rake"
|
27
|
+
spec.add_development_dependency 'shotgun'
|
28
|
+
spec.add_development_dependency 'rspec'
|
29
|
+
spec.add_development_dependency 'capybara'
|
30
|
+
spec.add_development_dependency 'simplecov'
|
31
|
+
end
|
data/config.ru
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
ENV['RORY_STAGE'] ||= ENV['RACK_ENV'] || 'development'
|
2
|
+
|
3
|
+
require 'bumbleworks/gui'
|
4
|
+
|
5
|
+
require File.expand_path(File.join('spec', 'fixtures', 'bumbleworks_config.rb'))
|
6
|
+
require File.expand_path(File.join('spec', 'support', 'process_testing_helpers.rb'))
|
7
|
+
|
8
|
+
Bumbleworks.start_worker!
|
9
|
+
|
10
|
+
Widget.truncate!
|
11
|
+
WidgetyFidget.truncate!
|
12
|
+
|
13
|
+
widget_processes = 20.times.collect do |i|
|
14
|
+
Widget.new(i).launch_process('task_process')
|
15
|
+
end
|
16
|
+
|
17
|
+
5.times do |i|
|
18
|
+
WidgetyFidget.new(i)
|
19
|
+
end
|
20
|
+
|
21
|
+
wp = Bumbleworks.launch!('waiting_process')
|
22
|
+
|
23
|
+
wait_until { wp.reload.trackers.count == 4 }
|
24
|
+
|
25
|
+
widget_processes.first.tasks.each do |t|
|
26
|
+
t.complete
|
27
|
+
end
|
28
|
+
|
29
|
+
if ENV['MOUNT_AT']
|
30
|
+
app = Rack::Builder.new do
|
31
|
+
map ENV['MOUNT_AT'] do
|
32
|
+
run Bumbleworks::Gui::RackApp
|
33
|
+
end
|
34
|
+
end
|
35
|
+
run app
|
36
|
+
else
|
37
|
+
run Bumbleworks::Gui::RackApp
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "rory"
|
2
|
+
require "rack"
|
3
|
+
require 'bumbleworks'
|
4
|
+
require "bumbleworks/gui/version"
|
5
|
+
require "bumbleworks/gui/controllers/application_controller"
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
Rufus::Json.detect_backend
|
9
|
+
|
10
|
+
module Bumbleworks
|
11
|
+
module Gui
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
require_relative "gui/config/application"
|
16
|
+
|
17
|
+
Bumbleworks::Gui::RackApp = Rack::Builder.new {
|
18
|
+
run Bumbleworks::Gui::Application.instance
|
19
|
+
map '/assets' do
|
20
|
+
run Rack::File.new(File.join(File.dirname(__FILE__), 'gui', 'assets'))
|
21
|
+
end
|
22
|
+
}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
.sort:hover {
|
2
|
+
background-color: rgb(151, 196, 241);
|
3
|
+
}
|
4
|
+
.sort:after {
|
5
|
+
width: 0;
|
6
|
+
height: 0;
|
7
|
+
border-left: 5px solid transparent;
|
8
|
+
border-right: 5px solid transparent;
|
9
|
+
border-bottom: 5px solid transparent;
|
10
|
+
content: "";
|
11
|
+
position: relative;
|
12
|
+
top: -10px;
|
13
|
+
right: -5px;
|
14
|
+
}
|
15
|
+
.sort.asc:after {
|
16
|
+
width: 0;
|
17
|
+
height: 0;
|
18
|
+
border-left: 5px solid transparent;
|
19
|
+
border-right: 5px solid transparent;
|
20
|
+
border-top: 5px solid #000;
|
21
|
+
content: "";
|
22
|
+
position: relative;
|
23
|
+
top: 13px;
|
24
|
+
right: -5px;
|
25
|
+
}
|
26
|
+
.sort.desc:after {
|
27
|
+
width: 0;
|
28
|
+
height: 0;
|
29
|
+
border-left: 5px solid transparent;
|
30
|
+
border-right: 5px solid transparent;
|
31
|
+
border-bottom: 5px solid #000;
|
32
|
+
content: "";
|
33
|
+
position: relative;
|
34
|
+
top: -10px;
|
35
|
+
right: -5px;
|
36
|
+
}
|
37
|
+
|
38
|
+
/* Definition Lists */
|
39
|
+
|
40
|
+
dt {
|
41
|
+
font-weight: bold;
|
42
|
+
font-size: 1.2em;
|
43
|
+
}
|
44
|
+
|
45
|
+
dd {
|
46
|
+
margin: 0px 0px 15px 0px;
|
47
|
+
}
|
48
|
+
|
49
|
+
/* Colored buttons */
|
50
|
+
|
51
|
+
.button-success, .button-error, .button-warning, .button-secondary {
|
52
|
+
color: white;
|
53
|
+
font-size: 0.8em;
|
54
|
+
border-radius: 4px;
|
55
|
+
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
|
56
|
+
}
|
57
|
+
|
58
|
+
.button-success { background: rgb(28, 184, 65); } /* green */
|
59
|
+
.button-error { background: rgb(202, 60, 60); } /* red */
|
60
|
+
.button-warning { background: rgb(223, 117, 20); } /* orange */
|
61
|
+
.button-secondary { background: rgb(66, 184, 221); } /* lt. blue */
|
62
|
+
|
63
|
+
.action-button-group {
|
64
|
+
width: 7.5em;
|
65
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
|
2
|
+
svg.ruote_fluo {
|
3
|
+
padding: 10px;
|
4
|
+
}
|
5
|
+
|
6
|
+
svg rect.fluo {
|
7
|
+
fill: none;
|
8
|
+
stroke: black;
|
9
|
+
stroke-width: 1.1px;
|
10
|
+
/*
|
11
|
+
rx: 14;
|
12
|
+
ry: 14;
|
13
|
+
*/
|
14
|
+
}
|
15
|
+
|
16
|
+
svg path.fluo {
|
17
|
+
stroke: black;
|
18
|
+
stroke-width: 0.7px;
|
19
|
+
}
|
20
|
+
|
21
|
+
svg text {
|
22
|
+
font-family: Helvetica Neue;
|
23
|
+
font-size: 12px;
|
24
|
+
/*
|
25
|
+
fill: blue;
|
26
|
+
*/
|
27
|
+
}
|
28
|
+
svg text.text_exp {
|
29
|
+
font-size: 14px;
|
30
|
+
}
|
31
|
+
svg text.expname {
|
32
|
+
font-size: 14px;
|
33
|
+
font-weight: 500;
|
34
|
+
}
|
35
|
+
|
36
|
+
svg rect.fluo_highlight {
|
37
|
+
stroke: #dedede;
|
38
|
+
stroke-width: 3px;
|
39
|
+
fill: none;
|
40
|
+
}
|
41
|
+
|
42
|
+
p.fluo.expname {
|
43
|
+
margin-bottom: 1em;
|
44
|
+
}
|
45
|
+
|
46
|
+
svg path.fluo_pin {
|
47
|
+
height: 30px;
|
48
|
+
width: 20px;
|
49
|
+
stroke: black;
|
50
|
+
stroke-width: 0.7px;
|
51
|
+
fill: blue;
|
52
|
+
}
|
53
|
+
svg text.fluo_pin {
|
54
|
+
font-size: 12px;
|
55
|
+
}
|
56
|
+
svg path.fluo_pin_workitem {
|
57
|
+
fill: yellow;
|
58
|
+
}
|
59
|
+
svg path.fluo_pin_error {
|
60
|
+
fill: red;
|
61
|
+
}
|
62
|
+
|
@@ -0,0 +1,203 @@
|
|
1
|
+
body {
|
2
|
+
color: #333;
|
3
|
+
}
|
4
|
+
|
5
|
+
a {
|
6
|
+
text-decoration: none;
|
7
|
+
color: rgb(61, 146, 201);
|
8
|
+
}
|
9
|
+
a:hover,
|
10
|
+
a:focus {
|
11
|
+
text-decoration: underline;
|
12
|
+
}
|
13
|
+
|
14
|
+
/* Add transition to containers so they can push in and out. */
|
15
|
+
#layout,
|
16
|
+
#menu,
|
17
|
+
.menu-link {
|
18
|
+
-webkit-transition: all 0.2s ease-out;
|
19
|
+
-moz-transition: all 0.2s ease-out;
|
20
|
+
-ms-transition: all 0.2s ease-out;
|
21
|
+
-o-transition: all 0.2s ease-out;
|
22
|
+
transition: all 0.2s ease-out;
|
23
|
+
}
|
24
|
+
|
25
|
+
/* This div contains the menu and content divs. */
|
26
|
+
#layout {
|
27
|
+
position: relative;
|
28
|
+
padding-left: 0;
|
29
|
+
}
|
30
|
+
#layout.active {
|
31
|
+
position: relative;
|
32
|
+
left: 150px;
|
33
|
+
}
|
34
|
+
#layout.active #menu {
|
35
|
+
left: 150px;
|
36
|
+
width: 150px;
|
37
|
+
}
|
38
|
+
|
39
|
+
#layout.active .menu-link {
|
40
|
+
left: 150px;
|
41
|
+
}
|
42
|
+
/* The content div is where all your content goes. */
|
43
|
+
.content {
|
44
|
+
margin: 0 auto;
|
45
|
+
padding: 0 2em;
|
46
|
+
max-width: 800px;
|
47
|
+
margin-bottom: 50px;
|
48
|
+
line-height: 1.6em;
|
49
|
+
}
|
50
|
+
|
51
|
+
.header {
|
52
|
+
margin: 0;
|
53
|
+
color: #333;
|
54
|
+
text-align: center;
|
55
|
+
padding: 0.2em 2em 0;
|
56
|
+
border-bottom: 1px solid #eee;
|
57
|
+
margin-bottom: 1em;
|
58
|
+
}
|
59
|
+
.header h1 {
|
60
|
+
margin: 0.2em 0;
|
61
|
+
font-size: 3em;
|
62
|
+
font-weight: 300;
|
63
|
+
}
|
64
|
+
.header h2 {
|
65
|
+
font-weight: 300;
|
66
|
+
color: #ccc;
|
67
|
+
padding: 0;
|
68
|
+
margin-top: 0;
|
69
|
+
}
|
70
|
+
|
71
|
+
.content-subhead {
|
72
|
+
margin: 50px 0 20px 0;
|
73
|
+
font-weight: 300;
|
74
|
+
color: #888;
|
75
|
+
}
|
76
|
+
|
77
|
+
/* This div contains the sidebar .pure-menu div. */
|
78
|
+
|
79
|
+
#menu {
|
80
|
+
margin-left: -150px; /* "#menu" width */
|
81
|
+
width: 150px;
|
82
|
+
position: fixed;
|
83
|
+
top: 0;
|
84
|
+
left: 0;
|
85
|
+
bottom: 0;
|
86
|
+
z-index: 1000; /* so the menu or its navicon stays above all content */
|
87
|
+
background: #191818;
|
88
|
+
overflow-y: auto;
|
89
|
+
-webkit-overflow-scrolling: touch;
|
90
|
+
}
|
91
|
+
#menu a {
|
92
|
+
color: #bbb;
|
93
|
+
border: none;
|
94
|
+
padding: 0.6em 0 0.6em 0.6em;
|
95
|
+
}
|
96
|
+
|
97
|
+
#menu .pure-menu,
|
98
|
+
#menu .pure-menu ul {
|
99
|
+
border: none;
|
100
|
+
background: transparent;
|
101
|
+
}
|
102
|
+
|
103
|
+
#menu .pure-menu ul,
|
104
|
+
#menu .pure-menu .menu-item-divided {
|
105
|
+
border-top: 1px solid #333;
|
106
|
+
}
|
107
|
+
|
108
|
+
#menu .pure-menu li a:hover,
|
109
|
+
#menu .pure-menu li a:focus {
|
110
|
+
color: #eee;
|
111
|
+
background: #333;
|
112
|
+
}
|
113
|
+
|
114
|
+
#menu .pure-menu-selected,
|
115
|
+
#menu .pure-menu-heading {
|
116
|
+
background: rgb(61, 146, 201);
|
117
|
+
}
|
118
|
+
#menu .pure-menu-selected a {
|
119
|
+
color: #fff;
|
120
|
+
}
|
121
|
+
|
122
|
+
#menu .pure-menu-heading:hover {
|
123
|
+
background: rgb(71, 166, 221);
|
124
|
+
}
|
125
|
+
|
126
|
+
#menu .pure-menu-heading {
|
127
|
+
font-size: 90%;
|
128
|
+
color: #fff;
|
129
|
+
margin: 0;
|
130
|
+
}
|
131
|
+
|
132
|
+
/* The responsive menu toggle for small screens. */
|
133
|
+
|
134
|
+
.menu-link {
|
135
|
+
position: fixed;
|
136
|
+
display: block; /* show this only on small screens */
|
137
|
+
top: 0;
|
138
|
+
left: 0; /* "#menu width" */
|
139
|
+
background: #000;
|
140
|
+
background: rgba(0,0,0,0.7);
|
141
|
+
font-size: 9px; /* change this value to increase/decrease button size */
|
142
|
+
z-index: 10;
|
143
|
+
width: 2em;
|
144
|
+
height: auto;
|
145
|
+
padding: 2.1em 1.6em;
|
146
|
+
}
|
147
|
+
|
148
|
+
.menu-link:hover,
|
149
|
+
.menu-link:focus {
|
150
|
+
background: #000;
|
151
|
+
}
|
152
|
+
|
153
|
+
.menu-link span {
|
154
|
+
position: relative;
|
155
|
+
display: block;
|
156
|
+
}
|
157
|
+
|
158
|
+
.menu-link span,
|
159
|
+
.menu-link span:before,
|
160
|
+
.menu-link span:after {
|
161
|
+
background-color: #fff;
|
162
|
+
width: 100%;
|
163
|
+
height: 1px;
|
164
|
+
}
|
165
|
+
|
166
|
+
.menu-link span:before,
|
167
|
+
.menu-link span:after {
|
168
|
+
position: absolute;
|
169
|
+
margin-top: -0.6em;
|
170
|
+
content: " ";
|
171
|
+
}
|
172
|
+
|
173
|
+
.menu-link span:after {
|
174
|
+
margin-top: 0.6em;
|
175
|
+
}
|
176
|
+
|
177
|
+
/* Media queries */
|
178
|
+
/* Hides menu at 48em */
|
179
|
+
@media (min-width: 48em) {
|
180
|
+
.header,
|
181
|
+
.content {
|
182
|
+
padding-left: 2em;
|
183
|
+
padding-right: 2em;
|
184
|
+
}
|
185
|
+
|
186
|
+
#layout {
|
187
|
+
padding-left: 150px; /* width of menu */
|
188
|
+
left: 0;
|
189
|
+
}
|
190
|
+
#menu {
|
191
|
+
left: 150px;
|
192
|
+
}
|
193
|
+
|
194
|
+
.menu-link {
|
195
|
+
position: fixed;
|
196
|
+
left: 150px;
|
197
|
+
display: none;
|
198
|
+
}
|
199
|
+
|
200
|
+
#layout.active .menu-link {
|
201
|
+
left: 150px;
|
202
|
+
}
|
203
|
+
}
|