commondream-control_center 0.99 → 0.99.1
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/generators/control_center/control_center_generator.rb +28 -0
- data/generators/control_center/templates/_header_links.html.erb +2 -0
- data/generators/control_center/templates/_sub_tabs.html.erb +0 -0
- data/generators/control_center/templates/_tabs.html.erb +3 -0
- data/generators/control_center/templates/control_center.css +273 -0
- data/generators/control_center/templates/control_center.html.erb +58 -0
- data/generators/control_center/templates/control_center.rb +5 -0
- data/lib/control_center.rb +6 -0
- data/lib/generator.rb +10 -0
- data/lib/helpers.rb +62 -0
- data/lib/tab_builder.rb +12 -0
- data/rails/init.rb +6 -0
- data/tasks/control_center_tasks.rake +4 -0
- data/test/control_center_test.rb +8 -0
- metadata +19 -3
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class ControlCenterGenerator < Rails::Generator::Base
|
|
2
|
+
def banner
|
|
3
|
+
"Usage #{$0} #{spec.name}"
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def manifest
|
|
7
|
+
record do |m|
|
|
8
|
+
# set up the stylesheet
|
|
9
|
+
m.directory('public/stylesheets')
|
|
10
|
+
m.file('control_center.css',
|
|
11
|
+
'public/stylesheets/control_center.css')
|
|
12
|
+
|
|
13
|
+
# copy the layouts over
|
|
14
|
+
layouts_path = 'app/views/layouts'
|
|
15
|
+
m.directory(layouts_path)
|
|
16
|
+
m.file('_tabs.html.erb',
|
|
17
|
+
File.join(layouts_path, "_tabs.html.erb"))
|
|
18
|
+
m.file('_header_links.html.erb',
|
|
19
|
+
File.join(layouts_path, "_header_links.html.erb"))
|
|
20
|
+
m.file('control_center.html.erb',
|
|
21
|
+
File.join(layouts_path, "control_center.html.erb"))
|
|
22
|
+
|
|
23
|
+
# copy the initializer over
|
|
24
|
+
m.file 'control_center.rb',
|
|
25
|
+
File.join("config", "initializers", "control_center.rb")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
body {
|
|
2
|
+
background: #ddd;
|
|
3
|
+
font-family: arial, sans-serif;
|
|
4
|
+
margin: 0;
|
|
5
|
+
padding: 0;
|
|
6
|
+
font-size: small;
|
|
7
|
+
}
|
|
8
|
+
a img {
|
|
9
|
+
border: 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
th {
|
|
13
|
+
text-align: left;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* header styling */
|
|
17
|
+
#header {
|
|
18
|
+
background: #36393d;
|
|
19
|
+
color: #fff;
|
|
20
|
+
height: 70px;
|
|
21
|
+
}
|
|
22
|
+
#header h1 a {
|
|
23
|
+
text-decoration: none;
|
|
24
|
+
}
|
|
25
|
+
#header h1 {
|
|
26
|
+
font-size: 30px;
|
|
27
|
+
line-height: 70px;
|
|
28
|
+
margin: 0;
|
|
29
|
+
padding: 0 0 0 20px;
|
|
30
|
+
}
|
|
31
|
+
#header #header_links {
|
|
32
|
+
font-size: small;
|
|
33
|
+
margin: -65px 15px 0 0;
|
|
34
|
+
padding: 0;
|
|
35
|
+
list-style-type: none;
|
|
36
|
+
text-align: right;
|
|
37
|
+
float: right;
|
|
38
|
+
}
|
|
39
|
+
#header #header_links li {
|
|
40
|
+
float: left;
|
|
41
|
+
margin: 0 0 0 5px;
|
|
42
|
+
}
|
|
43
|
+
#header #header_links a {
|
|
44
|
+
color: white;
|
|
45
|
+
}
|
|
46
|
+
#header #header_links a:hover {
|
|
47
|
+
color: #36393d;
|
|
48
|
+
background: #fff;
|
|
49
|
+
text-decoration: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* primary tabsigation styling */
|
|
53
|
+
#tabs {
|
|
54
|
+
clear: both;
|
|
55
|
+
float: right;
|
|
56
|
+
margin: -27px 5px 0 0;
|
|
57
|
+
list-style-type: none;
|
|
58
|
+
font-weight: bold;
|
|
59
|
+
font-size: small;
|
|
60
|
+
}
|
|
61
|
+
#tabs li {
|
|
62
|
+
float: left;
|
|
63
|
+
height: 27px;
|
|
64
|
+
line-height: 27px;
|
|
65
|
+
padding: 0 10px;
|
|
66
|
+
}
|
|
67
|
+
#tabs li.active {
|
|
68
|
+
background: #ddd;
|
|
69
|
+
}
|
|
70
|
+
#tabs li.active a {
|
|
71
|
+
color: #000;
|
|
72
|
+
}
|
|
73
|
+
#tabs a {
|
|
74
|
+
text-decoration: none;
|
|
75
|
+
padding: 3px;
|
|
76
|
+
color: #fff;
|
|
77
|
+
}
|
|
78
|
+
#tabs a:hover {
|
|
79
|
+
text-decoration: underline;
|
|
80
|
+
}
|
|
81
|
+
/* secondary tabsigation styling */
|
|
82
|
+
#sub_tabs {
|
|
83
|
+
clear: both;
|
|
84
|
+
float: left;
|
|
85
|
+
list-style-type: none;
|
|
86
|
+
font-weight: bold;
|
|
87
|
+
font-size: small;
|
|
88
|
+
margin: 13px 0 0 -15px;
|
|
89
|
+
}
|
|
90
|
+
#sub_tabs li {
|
|
91
|
+
float: left;
|
|
92
|
+
height: 27px;
|
|
93
|
+
line-height: 27px;
|
|
94
|
+
padding: 0 10px;
|
|
95
|
+
margin-right: 7px;
|
|
96
|
+
}
|
|
97
|
+
#sub_tabs li.active {
|
|
98
|
+
background: #fff;
|
|
99
|
+
}
|
|
100
|
+
#sub_tabs li.active a {
|
|
101
|
+
color: #000;
|
|
102
|
+
}
|
|
103
|
+
#sub_tabs a {
|
|
104
|
+
text-decoration: none;
|
|
105
|
+
padding: 3px;
|
|
106
|
+
color: #fff;
|
|
107
|
+
}
|
|
108
|
+
#sub_tabs a:hover {
|
|
109
|
+
text-decoration: underline;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* main content styling */
|
|
113
|
+
h2 {
|
|
114
|
+
padding: 5px;
|
|
115
|
+
}
|
|
116
|
+
#main {
|
|
117
|
+
min-width: 800px;
|
|
118
|
+
}
|
|
119
|
+
#content {
|
|
120
|
+
clear: both;
|
|
121
|
+
}
|
|
122
|
+
#content_inside {
|
|
123
|
+
padding: 5px 10px 10px 10px;
|
|
124
|
+
margin: 0 10px;
|
|
125
|
+
background: #fff;
|
|
126
|
+
border-right: 2px solid #ccc;
|
|
127
|
+
border-bottom: 2px solid #ccc;
|
|
128
|
+
min-width: 800px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
#content.narrow {
|
|
132
|
+
float: left;
|
|
133
|
+
width: 70%;
|
|
134
|
+
}
|
|
135
|
+
#content.narrow #content_inside {
|
|
136
|
+
min-width: 560px;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
#sidebar {
|
|
140
|
+
float: left;
|
|
141
|
+
width: 30%;
|
|
142
|
+
}
|
|
143
|
+
#sidebar_inside {
|
|
144
|
+
min-width: 240px;
|
|
145
|
+
margin: 0 10px 0 0;
|
|
146
|
+
}
|
|
147
|
+
.sidebar_box {
|
|
148
|
+
border-bottom: 2px solid #ccc;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* style for forms */
|
|
152
|
+
form {
|
|
153
|
+
margin: 20px 0;
|
|
154
|
+
width: 500px;
|
|
155
|
+
}
|
|
156
|
+
form > div {
|
|
157
|
+
margin-bottom: 10px;
|
|
158
|
+
clear: both;
|
|
159
|
+
}
|
|
160
|
+
form > div div.col2 {
|
|
161
|
+
width: 200px;
|
|
162
|
+
float: left;
|
|
163
|
+
margin: 0 20px 10px 0;
|
|
164
|
+
}
|
|
165
|
+
label {
|
|
166
|
+
display: block;
|
|
167
|
+
}
|
|
168
|
+
fieldset {
|
|
169
|
+
border: 0;
|
|
170
|
+
border-top: 1px solid #ddd;
|
|
171
|
+
}
|
|
172
|
+
input[type="text"], input[type="password"] {
|
|
173
|
+
width: 200px;
|
|
174
|
+
}
|
|
175
|
+
textarea {
|
|
176
|
+
margin: 0;
|
|
177
|
+
}
|
|
178
|
+
input[type="submit"] {
|
|
179
|
+
margin-top: 20px;
|
|
180
|
+
}
|
|
181
|
+
form div.submit {
|
|
182
|
+
clear: both;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* styling for errors */
|
|
186
|
+
.errorExplanation {
|
|
187
|
+
border: 2px solid #c00;
|
|
188
|
+
margin-bottom: 8px;
|
|
189
|
+
}
|
|
190
|
+
.errorExplanation h2 {
|
|
191
|
+
float: none;
|
|
192
|
+
background: #c00;
|
|
193
|
+
margin: 0;
|
|
194
|
+
color: #fff;
|
|
195
|
+
padding: 3px;
|
|
196
|
+
font-size: large;
|
|
197
|
+
}
|
|
198
|
+
.errorExplanation p {
|
|
199
|
+
padding: 3px;
|
|
200
|
+
margin: 3px 0;
|
|
201
|
+
}
|
|
202
|
+
.fieldWithErrors {
|
|
203
|
+
display: inline;
|
|
204
|
+
}
|
|
205
|
+
.fieldWithErrors input[type="text"], .fieldWithErrors input[type="password"] {
|
|
206
|
+
border: 2px solid #c00;
|
|
207
|
+
}
|
|
208
|
+
.fieldWithErrors label {
|
|
209
|
+
color: #c00;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/* style for tables that are used as reports */
|
|
213
|
+
table {
|
|
214
|
+
border-collapse: collapse;
|
|
215
|
+
margin-bottom: 30px;
|
|
216
|
+
}
|
|
217
|
+
table thead tr {
|
|
218
|
+
border-bottom: 1px solid #000;
|
|
219
|
+
}
|
|
220
|
+
table tbody td {
|
|
221
|
+
padding-right: 10px;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* makes something 100% width */
|
|
225
|
+
.wide {
|
|
226
|
+
width: 100%;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/* style for pagination */
|
|
230
|
+
.pagination {
|
|
231
|
+
padding: 3px;
|
|
232
|
+
margin: 15px 3px 3px 3px;
|
|
233
|
+
}
|
|
234
|
+
.pagination a {
|
|
235
|
+
padding: 2px 5px 2px 5px;
|
|
236
|
+
margin: 2px;
|
|
237
|
+
border: 1px solid #aaaadd;
|
|
238
|
+
text-decoration: none;
|
|
239
|
+
color: #36393d;
|
|
240
|
+
}
|
|
241
|
+
.pagination a:hover, .pagination a:active {
|
|
242
|
+
border: 1px solid #36393d;
|
|
243
|
+
color: #000;
|
|
244
|
+
}
|
|
245
|
+
.pagination span.current {
|
|
246
|
+
padding: 2px 5px 2px 5px;
|
|
247
|
+
margin: 2px;
|
|
248
|
+
border: 1px solid #36393d;
|
|
249
|
+
font-weight: bold;
|
|
250
|
+
background-color: #36393d;
|
|
251
|
+
color: #FFF;
|
|
252
|
+
}
|
|
253
|
+
.pagination span.disabled {
|
|
254
|
+
padding: 2px 5px 2px 5px;
|
|
255
|
+
margin: 2px;
|
|
256
|
+
border: 1px solid #eee;
|
|
257
|
+
color: #ddd;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* styles for flashed messages and errors */
|
|
261
|
+
#message {
|
|
262
|
+
background: #ff8;
|
|
263
|
+
font-weight: bold;
|
|
264
|
+
padding: 5px 20px;
|
|
265
|
+
margin-top: 10px;
|
|
266
|
+
}
|
|
267
|
+
#error {
|
|
268
|
+
background: #c00;
|
|
269
|
+
font-weight: bold;
|
|
270
|
+
color: #fff;
|
|
271
|
+
padding: 5px 20px;
|
|
272
|
+
margin-top: 10px;
|
|
273
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
4
|
+
<head>
|
|
5
|
+
<title><%= ControlCenter::Config.app_title %> - <%= @control_center_title %></title>
|
|
6
|
+
|
|
7
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
8
|
+
<meta http-equiv="Content-Language" content="en-us" />
|
|
9
|
+
|
|
10
|
+
<%= stylesheet_link_tag 'control_center' %>
|
|
11
|
+
<style type="text/css">
|
|
12
|
+
#header { background: <%= ControlCenter::Config.theme_color %>; }
|
|
13
|
+
#sub_tabs li {background-color: <%= ControlCenter::Config.theme_color %>; }
|
|
14
|
+
</style>
|
|
15
|
+
</head>
|
|
16
|
+
<body>
|
|
17
|
+
<div id="header">
|
|
18
|
+
<h1><%= ControlCenter::Config.app_title %></h1>
|
|
19
|
+
<ul id="header_links">
|
|
20
|
+
<%= render :partial => "layouts/header_links" %>
|
|
21
|
+
</ul>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<ul id="tabs">
|
|
25
|
+
<%= render :partial => "layouts/tabs" %>
|
|
26
|
+
</ul>
|
|
27
|
+
|
|
28
|
+
<% if flash[:message] %>
|
|
29
|
+
<div id="message"><%= flash[:message] %></div>
|
|
30
|
+
<% end %>
|
|
31
|
+
|
|
32
|
+
<% if flash[:error] %>
|
|
33
|
+
<div id="error"><%= flash[:error] %></div>
|
|
34
|
+
<% end %>
|
|
35
|
+
|
|
36
|
+
<ul id="sub_tabs" <%= "class=\"narrow\"" if sidebar? %>>
|
|
37
|
+
<%= yield :sub_tabs %>
|
|
38
|
+
</ul>
|
|
39
|
+
|
|
40
|
+
<div id="main">
|
|
41
|
+
<div id="content" <%= "class=\"narrow\"" if sidebar? %>>
|
|
42
|
+
<div id="content_inside">
|
|
43
|
+
<h2><%= @control_center_title %></h2>
|
|
44
|
+
|
|
45
|
+
<%= yield %>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<% if sidebar? %>
|
|
50
|
+
<div id="sidebar">
|
|
51
|
+
<div id="sidebar_inside">
|
|
52
|
+
<%= yield :sidebar %>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
<% end %>
|
|
56
|
+
</div>
|
|
57
|
+
</body>
|
|
58
|
+
</html>
|
data/lib/generator.rb
ADDED
data/lib/helpers.rb
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require 'tab_builder'
|
|
2
|
+
|
|
3
|
+
# Helpers that control center uses
|
|
4
|
+
module ControlCenter::Helpers
|
|
5
|
+
|
|
6
|
+
def title(title)
|
|
7
|
+
@control_center_title = title
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def select_tab(tab)
|
|
11
|
+
@cc_current_tab = tab
|
|
12
|
+
end
|
|
13
|
+
def current_tab
|
|
14
|
+
@cc_current_tab
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def sub_tabs
|
|
18
|
+
if block_given?
|
|
19
|
+
content_for :sub_tabs do
|
|
20
|
+
yield
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def select_sub_tab(tab)
|
|
26
|
+
@cc_current_sub_tab = tab
|
|
27
|
+
end
|
|
28
|
+
def current_sub_tab
|
|
29
|
+
@cc_current_sub_tab
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Sets up a sidebar in control center.
|
|
33
|
+
def sidebar(&block)
|
|
34
|
+
if block_given?
|
|
35
|
+
@sidebar_set = true
|
|
36
|
+
content_for :sidebar do
|
|
37
|
+
yield
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def sidebar?
|
|
43
|
+
@sidebar_set ||= false
|
|
44
|
+
@sidebar_set
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def tab(tab_name, tab_url)
|
|
48
|
+
options = {}
|
|
49
|
+
options[:class] = "active" if current_tab == tab_name
|
|
50
|
+
content_tag "li", options, true do
|
|
51
|
+
link_to tab_name, tab_url
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def sub_tab(tab_name, tab_url)
|
|
56
|
+
options = {}
|
|
57
|
+
options[:class] = "active" if current_sub_tab == tab_name
|
|
58
|
+
content_tag "li", options, true do
|
|
59
|
+
link_to tab_name, tab_url
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
data/lib/tab_builder.rb
ADDED
data/rails/init.rb
ADDED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: commondream-control_center
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 0.99.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alan Johnson
|
|
@@ -13,7 +13,7 @@ date: 2009-04-08 00:00:00 -07:00
|
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies: []
|
|
15
15
|
|
|
16
|
-
description:
|
|
16
|
+
description: Control Center is a Rails plugin that helps in quickly developing interfaces for website administration and application prototyping.
|
|
17
17
|
email: alan@commondream.net
|
|
18
18
|
executables: []
|
|
19
19
|
|
|
@@ -22,6 +22,22 @@ extensions: []
|
|
|
22
22
|
extra_rdoc_files: []
|
|
23
23
|
|
|
24
24
|
files:
|
|
25
|
+
- lib/control_center.rb
|
|
26
|
+
- lib/generator.rb
|
|
27
|
+
- lib/helpers.rb
|
|
28
|
+
- lib/tab_builder.rb
|
|
29
|
+
- rails/init.rb
|
|
30
|
+
- generators/control_center
|
|
31
|
+
- generators/control_center/control_center_generator.rb
|
|
32
|
+
- generators/control_center/templates
|
|
33
|
+
- generators/control_center/templates/_header_links.html.erb
|
|
34
|
+
- generators/control_center/templates/_sub_tabs.html.erb
|
|
35
|
+
- generators/control_center/templates/_tabs.html.erb
|
|
36
|
+
- generators/control_center/templates/control_center.css
|
|
37
|
+
- generators/control_center/templates/control_center.html.erb
|
|
38
|
+
- generators/control_center/templates/control_center.rb
|
|
39
|
+
- tasks/control_center_tasks.rake
|
|
40
|
+
- test/control_center_test.rb
|
|
25
41
|
- README.markdown
|
|
26
42
|
- MIT-LICENSE
|
|
27
43
|
has_rdoc: true
|
|
@@ -49,6 +65,6 @@ rubyforge_project:
|
|
|
49
65
|
rubygems_version: 1.2.0
|
|
50
66
|
signing_key:
|
|
51
67
|
specification_version: 2
|
|
52
|
-
summary:
|
|
68
|
+
summary: A Rails plugin that helps in quickly developing admin style interfaces.
|
|
53
69
|
test_files: []
|
|
54
70
|
|