hobo_clean 1.4.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -0
- data/VERSION +1 -0
- data/hobo_clean.gemspec +26 -0
- data/lib/hobo_clean.rb +13 -0
- data/lib/hobo_clean/railtie.rb +6 -0
- data/taglibs/hobo_clean.dryml +67 -0
- data/taglibs/nav.dryml +113 -0
- data/vendor/assets/images/101-3B5F87-ACD3E6.png +0 -0
- data/vendor/assets/images/30-3E547A-242E42.png +0 -0
- data/vendor/assets/images/30-DBE1E5-FCFEF5.png +0 -0
- data/vendor/assets/images/300-ACD3E6-fff.png +0 -0
- data/vendor/assets/images/50-ACD3E6-fff.png +0 -0
- data/vendor/assets/images/blank.gif +0 -0
- data/vendor/assets/images/fieldbg.gif +0 -0
- data/vendor/assets/images/pencil.png +0 -0
- data/vendor/assets/images/small_close.png +0 -0
- data/vendor/assets/images/spinner.gif +0 -0
- data/vendor/assets/javascripts/hobo_clean.js +1 -0
- data/vendor/assets/stylesheets/clean.css.erb +328 -0
- data/vendor/assets/stylesheets/hobo_clean.css +2 -0
- data/vendor/assets/stylesheets/rapid-ui.css +102 -0
- data/vendor/assets/stylesheets/reset.css +95 -0
- metadata +90 -0
data/README
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
This gem is a Hobo plugin that implements the default Hobo theme.
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.4.0.pre2
|
data/hobo_clean.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
name = File.basename( __FILE__, '.gemspec' )
|
2
|
+
version = File.read(File.expand_path('../VERSION', __FILE__)).strip
|
3
|
+
require 'date'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
|
7
|
+
s.authors = ['Tom Locke, James Garlick']
|
8
|
+
s.email = 'tom@tomlocke.com'
|
9
|
+
s.homepage = 'http://hobocentral.net'
|
10
|
+
s.rubyforge_project = 'hobo'
|
11
|
+
s.summary = 'The clean theme for Hobo'
|
12
|
+
s.description = File.read(File.expand_path('../README', __FILE__))
|
13
|
+
|
14
|
+
s.add_runtime_dependency('hobo', ["= #{version}"])
|
15
|
+
|
16
|
+
s.files = `git ls-files -x #{name}/* -z`.split("\0")
|
17
|
+
|
18
|
+
s.name = name
|
19
|
+
s.version = version
|
20
|
+
s.date = Date.today.to_s
|
21
|
+
|
22
|
+
s.required_rubygems_version = ">= 1.3.6"
|
23
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
24
|
+
s.require_paths = ["lib", "vendor", "taglibs"]
|
25
|
+
|
26
|
+
end
|
data/lib/hobo_clean.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module HoboClean
|
2
|
+
|
3
|
+
VERSION = File.read(File.expand_path('../../VERSION', __FILE__)).strip
|
4
|
+
@@root = Pathname.new File.expand_path('../..', __FILE__)
|
5
|
+
def self.root; @@root; end
|
6
|
+
|
7
|
+
EDIT_LINK_BASE = "https://github.com/tablatom/hobo_tree_table/edit/master/hobo_clean"
|
8
|
+
|
9
|
+
require 'hobo_clean/railtie' if defined?(Rails)
|
10
|
+
|
11
|
+
class Engine < ::Rails::Engine
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
<!-- the default hobo theme -->
|
2
|
+
|
3
|
+
<include src="nav"/>
|
4
|
+
|
5
|
+
<!-- Renders an ajax-progress 'spinner' with a `class='hidden'` -->
|
6
|
+
<def tag="spinner">
|
7
|
+
<img src="spinner.gif" class="hidden" merge-attrs/>
|
8
|
+
</def>
|
9
|
+
|
10
|
+
<!-- Renders `<div id="ajax-progress"><div><span id="ajax-progress-text"></span></div></div>`. -->
|
11
|
+
<def tag="ajax-progress">
|
12
|
+
<div id="ajax-progress" class="ajax-progress" merge-attrs>
|
13
|
+
<div>
|
14
|
+
<span id="ajax-progress-text"></span>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
</def>
|
18
|
+
|
19
|
+
<!-- The basic page structure for all the pages in a Hobo Rapid application. Providing the doctype, page title, standard stylesheet javascript includes, the ajax progress spinner, default header with app-name, account navigation, main navigation, and live search, empty section for the page content, flash message (if any) and an empty page footer.
|
20
|
+
|
21
|
+
The easiest way to see what this tag does is to look at the source.
|
22
|
+
|
23
|
+
### Attributes
|
24
|
+
|
25
|
+
- `title` - the page title, will have ": `[app-name]`" appended
|
26
|
+
- `full-title` - the full page title. Set this if you do not want the app name suffix.
|
27
|
+
|
28
|
+
-->
|
29
|
+
<def tag="page" attrs="title, full-title">
|
30
|
+
<% full_title ||= "#{title} : #{app_name}" %>
|
31
|
+
<html merge-attrs>
|
32
|
+
<head param>
|
33
|
+
<title param><%= strip_tags full_title %></title>
|
34
|
+
<do param="stylesheets"><%# in Hobo <= 1.3, we had other stylesheets here. Now the asset pipeline is preferred. %>
|
35
|
+
<stylesheet name="#{subsite || 'front'}" param="app-stylesheet"/>
|
36
|
+
</do>
|
37
|
+
|
38
|
+
<do param="scripts"><%# in Hobo <= 1.3, we had other javascripts here. Now the asset pipeline is preferred. %>
|
39
|
+
<javascript param="application-javascript" name="#{subsite || 'front'}"/>
|
40
|
+
<do param="custom-scripts"/>
|
41
|
+
</do>
|
42
|
+
<%= csrf_meta_tag %>
|
43
|
+
</head>
|
44
|
+
|
45
|
+
<body param>
|
46
|
+
<set-scoped flash-rendered="&false">
|
47
|
+
<ajax-progress param/>
|
48
|
+
<header class="page-header" param>
|
49
|
+
<account-nav if="&login_url(Hobo::Model::UserBase.default_user_model)" param/>
|
50
|
+
<h1 param="app-name"><a href="#{base_url}/"><app-name/></a></h1>
|
51
|
+
<live-search param if="&defined_route? :site_search"/>
|
52
|
+
<main-nav current="&title" param/>
|
53
|
+
</header>
|
54
|
+
<section with-flash-messages param="content"/>
|
55
|
+
<footer class="page-footer" param/>
|
56
|
+
<page-scripts param/>
|
57
|
+
</set-scoped>
|
58
|
+
</body>
|
59
|
+
</html>
|
60
|
+
</def>
|
61
|
+
|
62
|
+
<!-- Some of the user pages use a simplified layout that does not feature things like the main nav and live-search. This tag defines that page -->
|
63
|
+
<def tag="simple-page">
|
64
|
+
<page without-live-search without-main-nav merge>
|
65
|
+
<account-nav: replace />
|
66
|
+
</page>
|
67
|
+
</def>
|
data/taglibs/nav.dryml
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
|
2
|
+
<!-- Development mode only - a menu to change the `current_user` -->
|
3
|
+
<def tag="dev-user-changer">
|
4
|
+
<set user="&Hobo::Model::UserBase.default_user_model"/>
|
5
|
+
<select-menu if="&user && Rails.env.development?"
|
6
|
+
first-option="#{t('hobo.dev_user_changer.guest', {:default=>'Guest'})}" options="&user.all(:limit => 30).*.login"
|
7
|
+
onchange="location.href = '#{dev_support_path :action=>:set_current_user}?login=' + encodeURIComponent(this.options[this.selectedIndex].value)"
|
8
|
+
selected="#{current_user.login}"
|
9
|
+
class="dev-user-changer"
|
10
|
+
merge-attrs/>
|
11
|
+
</def>
|
12
|
+
|
13
|
+
|
14
|
+
<!-- General purpose navigation bar. Renders a `<ul class="navigation">`. This tag is intended to be used in conunction with `<nav-item>`. The main feature of this pair of tags (over, say, just using a plain `<ul>` list), is that it's easy to have a 'current' CSS class added to the appropriate nav item (so you can highlight the page/section the user is)
|
15
|
+
|
16
|
+
The main navigation in the default hobo app is implemented with `<navigation>` but this tag is also appropriate for any sub-navigation.
|
17
|
+
|
18
|
+
### Attributes
|
19
|
+
|
20
|
+
- `current` - the textual content of the nav item that should have the 'current' CSS class added (see example)
|
21
|
+
|
22
|
+
### Example
|
23
|
+
|
24
|
+
The normal usage is to define your own navigation tag that calls `<navigation>`.
|
25
|
+
|
26
|
+
<def tag="sub-nav">
|
27
|
+
<navigation merge>
|
28
|
+
<nav-item>Red</nav-item>
|
29
|
+
<nav-item>Green</nav-item>
|
30
|
+
<nav-item>Blue</nav-item>
|
31
|
+
</navigation>
|
32
|
+
</def>
|
33
|
+
|
34
|
+
Then in your pages you can call the tag like this
|
35
|
+
|
36
|
+
- On the 'red' page: `<sub-nav current="red"/>`
|
37
|
+
- On the 'green' page: `<sub-nav current="green"/>`
|
38
|
+
- and so on.
|
39
|
+
|
40
|
+
-->
|
41
|
+
<def tag="navigation" attrs="current">
|
42
|
+
<ul class="navigation" merge-attrs>
|
43
|
+
<set-scoped current-navigation="¤t">
|
44
|
+
<do param="default"/>
|
45
|
+
</set-scoped>
|
46
|
+
</ul>
|
47
|
+
</def>
|
48
|
+
|
49
|
+
|
50
|
+
<!-- Renders a single item in a [`<navigation>`](/api_tag_defs/navigation).
|
51
|
+
|
52
|
+
`<nav-item>` is basically an [`<a>`](/api_tag_defs/a) tag wrapped in an `<li>` tag. The attributes for [`<a>`](/api_tag_defs/a) may all be used on this tag, and work the same way.
|
53
|
+
|
54
|
+
Example 1: explicit links. Note that we're using explicit routes for clarity. Named routes are better.
|
55
|
+
|
56
|
+
<navigation current="home">
|
57
|
+
<nav-item href="/">Home</nav-item>
|
58
|
+
<nav-item href="/logout">Logout</nav-item>
|
59
|
+
</navigation>
|
60
|
+
|
61
|
+
Example 2: navigation based on a collection of items. Each item will be transformed into a link as described in [`<a>`](/api_tag_defs/a).
|
62
|
+
|
63
|
+
<navigation with="&links">
|
64
|
+
<repeat>
|
65
|
+
<nav-item/>
|
66
|
+
</repeat>
|
67
|
+
</navigation>
|
68
|
+
|
69
|
+
-->
|
70
|
+
<def tag="nav-item" attrs="name">
|
71
|
+
<% body = parameters.default
|
72
|
+
body = h(this.to_s) if body.blank?
|
73
|
+
name ||= body.gsub(/<.*?>/, '').strip
|
74
|
+
-%>
|
75
|
+
<li class="#{'current' if (c = scope.current_navigation) && c.downcase == name.downcase}"
|
76
|
+
merge-attrs="&attributes - (attrs_for(:a)+['target'])">
|
77
|
+
<a merge-attrs="&attributes & (attrs_for(:a)+['target'])"><%= body %></a>
|
78
|
+
</li>
|
79
|
+
</def>
|
80
|
+
|
81
|
+
|
82
|
+
<!-- Account Navigation (log in / out / signup)
|
83
|
+
|
84
|
+
When logged in, this renders:
|
85
|
+
|
86
|
+
- "Logged in as ..."
|
87
|
+
- Link to account page
|
88
|
+
- Log out link
|
89
|
+
|
90
|
+
When not logged in, renders:
|
91
|
+
|
92
|
+
- Log in link
|
93
|
+
- Sign up link
|
94
|
+
|
95
|
+
This is a simple tag - just look at the source if you need to know more detail.
|
96
|
+
|
97
|
+
-->
|
98
|
+
<def tag="account-nav">
|
99
|
+
<do with="¤t_user">
|
100
|
+
<ul class="navigation account-nav" param>
|
101
|
+
<li if="&Rails.env.development?" param="dev-user-changer"><dev-user-changer/></li>
|
102
|
+
<if test="&logged_in?">
|
103
|
+
<li class='nav-item' param="logged-in-as"><a to="¤t_user"><t key="hobo.actions.logged_in_as" name="&name">Logged in as <name/></t></a></li>
|
104
|
+
<li class='nav-item' param="account"><a action="account"><t key="hobo.actions.account">Account</t></a></li>
|
105
|
+
<li class='nav-item' param="log-out"><a href="&logout_url"><t key="hobo.actions.logout">Log out</t></a></li>
|
106
|
+
</if>
|
107
|
+
<else>
|
108
|
+
<li class='nav-item' param="log-in"><a href="&login_url"><t key="hobo.actions.login">Log in</t></a></li>
|
109
|
+
<li if="&signup_url" class="nav-item" param="sign-up"><a href="&signup_url"><t key="hobo.actions.signup">Sign up</t></a></li>
|
110
|
+
</else>
|
111
|
+
</ul>
|
112
|
+
</do>
|
113
|
+
</def>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require_tree .
|
@@ -0,0 +1,328 @@
|
|
1
|
+
<% image_path = "" %>
|
2
|
+
body {color: #193440; background: url(<%=image_path%>300-ACD3E6-fff.png) repeat-x #fff; }
|
3
|
+
.page-header {color: white; background: url(<%=image_path%>101-3B5F87-ACD3E6.png) repeat-x #3F606E;}
|
4
|
+
.page-header .navigation.main-nav a {
|
5
|
+
background: url(<%=image_path%>30-3E547A-242E42.png) repeat-x #242E42;
|
6
|
+
}
|
7
|
+
.page-header .navigation.main-nav li.current a {
|
8
|
+
color: #222;
|
9
|
+
background: url(<%=image_path%>30-DBE1E5-FCFEF5.png) repeat-x #FCFEF5;
|
10
|
+
border-top: 1px solid white;
|
11
|
+
border-left: 1px solid white;
|
12
|
+
border-right: 1px solid white;
|
13
|
+
}
|
14
|
+
.page-header .navigation.main-nav a:hover {background: #193440;}
|
15
|
+
.section.content {background: #FCFFF5;}
|
16
|
+
.button {color: white; background: #5B8BA0;}
|
17
|
+
.button:hover {background-color: #193440;}
|
18
|
+
.button[disabled] { background-color: #CCCCCC; }
|
19
|
+
.add-to-collection {background: #E6E7DE;}
|
20
|
+
.aside { background: #E5E5E5;}
|
21
|
+
|
22
|
+
/* Column Layout */
|
23
|
+
|
24
|
+
.section-group {display: table; width: 100%;}
|
25
|
+
.section-group-inner {display: table-row;}
|
26
|
+
.section-group-inner > * {display: table-cell; vertical-align: top;}
|
27
|
+
.aside {width: 210px;} /* works with % too */
|
28
|
+
.aside { padding: 20px;}
|
29
|
+
/* ------ */
|
30
|
+
|
31
|
+
|
32
|
+
body {
|
33
|
+
width: 960px;
|
34
|
+
margin: 0 auto 20px;
|
35
|
+
font: 12px "Lucida Grande", "Trebuchet MS", Arial, sans-serif; line-height: 18px;
|
36
|
+
}
|
37
|
+
h1, h2, h3 {font-weight: normal;}
|
38
|
+
h1 {margin: 20px 0 10px; font-size: 22px; line-height: 22px;}
|
39
|
+
h2 {margin: 15px 0 10px; font-size: 18px; line-height: 18px;}
|
40
|
+
h3 {margin: 10px 0 5px; font-size: 16px; line-height: 16px;}
|
41
|
+
h4 {margin: 10px 0 5px; font-size: 14px; line-height: 14px;}
|
42
|
+
h5 {margin: 10px 0 5px; font-size: 12px; line-height: 12px;}
|
43
|
+
h6 {margin: 10px 0 5px; font-size: 10px; line-height: 10px;}
|
44
|
+
|
45
|
+
li {margin-left: 20px;}
|
46
|
+
|
47
|
+
a {
|
48
|
+
border-bottom: 1px dotted #ccc;
|
49
|
+
color: #222; background: #fafafa;
|
50
|
+
text-decoration: none;
|
51
|
+
}
|
52
|
+
a:hover {
|
53
|
+
border-bottom: 1px dotted #aaa;
|
54
|
+
color: black; background: #f2f2f2;
|
55
|
+
}
|
56
|
+
h1 a, h2 a, h3 a {border: none; background: none;}
|
57
|
+
|
58
|
+
pre, code {
|
59
|
+
font-family: "Courier New", Courier, monospace;
|
60
|
+
}
|
61
|
+
|
62
|
+
input.text, input.string, input.email-address, input.password, input.search, input.integer, input.float, input.autocompleter, input.decimal, textarea {
|
63
|
+
border-top:1px solid #7c7c7c;
|
64
|
+
border-left:1px solid #c3c3c3;
|
65
|
+
border-right:1px solid #c3c3c3;
|
66
|
+
border-bottom:1px solid #ddd;
|
67
|
+
background: #fff url(<%=image_path%>fieldbg.gif) repeat-x top;
|
68
|
+
font-size: 1.1em; line-height: 1.3em;
|
69
|
+
}
|
70
|
+
|
71
|
+
input.file_upload {
|
72
|
+
border: 1px dotted #666;
|
73
|
+
}
|
74
|
+
|
75
|
+
.button {
|
76
|
+
padding: 6px 10px;
|
77
|
+
border: none;
|
78
|
+
width: auto;
|
79
|
+
font-size: 11px; font-weight: bold;
|
80
|
+
margin-top: 10px;
|
81
|
+
}
|
82
|
+
.button:hover {cursor: pointer;}
|
83
|
+
form .actions {_zoom: 1; overflow: hidden; font-size: 11px;}
|
84
|
+
form .actions input { margin: 0; }
|
85
|
+
|
86
|
+
.flash {
|
87
|
+
margin: 0 40px 10px; padding: 10px 30px; border-width: 2px 0;
|
88
|
+
color: white;
|
89
|
+
}
|
90
|
+
.flash.notice {background: #4E6A8F;}
|
91
|
+
.flash.error {background: #BC1C3D;}
|
92
|
+
.section.with-flash { padding-top: 20px; }
|
93
|
+
|
94
|
+
/* rails error message */
|
95
|
+
.error-messages {
|
96
|
+
background: #BC1C3D;
|
97
|
+
border: 1px solid #900024;
|
98
|
+
padding: 15px 30px;
|
99
|
+
color: white;
|
100
|
+
margin-bottom: 20px;
|
101
|
+
}
|
102
|
+
.error-messages h2 {
|
103
|
+
color: white; margin-top: 0; padding-bottom: 0; font-size: 16px;
|
104
|
+
}
|
105
|
+
.error-messages li {margin-left: 20px; list-style: square;}
|
106
|
+
|
107
|
+
.field-with-errors input, .field-with-errors textarea, .field-with-errors select {border: 2px solid #BC1C3D;}
|
108
|
+
|
109
|
+
#ajax-progress {
|
110
|
+
padding: 8px 20px 8px 40px;
|
111
|
+
border: 1px solid #444;
|
112
|
+
background: black url(<%=image_path%>spinner.gif) no-repeat 10px 8px;
|
113
|
+
color: white;
|
114
|
+
}
|
115
|
+
|
116
|
+
.field-list th {width: 120px; white-space: nowrap;}
|
117
|
+
.field-list td {width: auto;}
|
118
|
+
.field-list .input-help { color: #888;}
|
119
|
+
|
120
|
+
.content-header, .content-body, .content-footer {margin: 0 45px 15px; padding: 0;}
|
121
|
+
.content-header {padding: 5px 0;}
|
122
|
+
.content-body {padding: 15px 0;}
|
123
|
+
.content-footer {padding-bottom: 20px;}
|
124
|
+
|
125
|
+
.page-header {margin-top: 25px; padding: 0 0 0;}
|
126
|
+
.page-header h1 {
|
127
|
+
margin: 0; padding: 20px 30px 30px;
|
128
|
+
font-family: "Arial Black", Tahoma, Arial, sans-serif; font-size: 36px; letter-spacing: -1.5pt;
|
129
|
+
}
|
130
|
+
.page-header ul {zoom: 1; overflow: hidden;}
|
131
|
+
.page-header li {float: left; margin-left: 0; list-style: none;}
|
132
|
+
|
133
|
+
.page-header .navigation a,
|
134
|
+
.page-header .navigation a:hover,
|
135
|
+
.page-header h1 a,
|
136
|
+
.page-header h1 a:hover
|
137
|
+
{border: none; color: white; background: none;}
|
138
|
+
|
139
|
+
.page-header div.search {
|
140
|
+
float: right;
|
141
|
+
padding: 0 30px 8px 15px;
|
142
|
+
}
|
143
|
+
.page-header div.search label {
|
144
|
+
padding-right: 10px;
|
145
|
+
font: bold 9px Arial, sans-serif; text-transform: uppercase; letter-spacing: 1.0pt;
|
146
|
+
}
|
147
|
+
.page-header div.search input {
|
148
|
+
font-size: 10px;
|
149
|
+
}
|
150
|
+
#search-results-panel {
|
151
|
+
position: absolute; top: 35px; right: 25px; z-index: 50;
|
152
|
+
width: 350px; height: 500px; overflow: auto;
|
153
|
+
padding: 0 20px 20px; border: 1px solid #ddd;
|
154
|
+
color: black; background: #f2f2f2;
|
155
|
+
}
|
156
|
+
#search-results-panel .card.linkable a {color: black;}
|
157
|
+
#search-spinner {background:black;border:1px solid #666666;opacity:0.6;padding:2px;position:absolute;right:4px;top:6px;}
|
158
|
+
|
159
|
+
.main-nav {padding: 0 30px;}
|
160
|
+
.main-nav li {margin-right: 10px;}
|
161
|
+
.page-header .main-nav a {
|
162
|
+
display: block;
|
163
|
+
padding: 5px 15px 7px;
|
164
|
+
font-size: 13px; font-weight: bold;
|
165
|
+
}
|
166
|
+
|
167
|
+
.account-nav {
|
168
|
+
float:right;
|
169
|
+
margin: -22px 5px 0 0;
|
170
|
+
font-size: 11px;
|
171
|
+
}
|
172
|
+
.account-nav li {
|
173
|
+
float: left;
|
174
|
+
margin-left: 0; padding-left: 20px;
|
175
|
+
color: #ddd;
|
176
|
+
list-style: none;
|
177
|
+
}
|
178
|
+
.account-nav a {font-weight: bold;}
|
179
|
+
.account-nav a:hover {border-bottom: 1px dotted #ddd;}
|
180
|
+
|
181
|
+
.user-account-page .change-password {width: 350px;}
|
182
|
+
.user-account-page .change-password th {width: 150px;}
|
183
|
+
|
184
|
+
.page-footer {text-align: right; color: #ccc; padding: 5px; font-size: 11px;}
|
185
|
+
|
186
|
+
/* pagination nav, needs a more specific class on the wrapper */
|
187
|
+
.content-body .nav {margin-bottom: 10px; font-size: 11px;}
|
188
|
+
.content-body .nav a {margin-right: 5px;}
|
189
|
+
|
190
|
+
.login-page, .forgot-password-page {width: 470px; margin-top: 40px;}
|
191
|
+
.login-page .content-header {padding-bottom: 0;}
|
192
|
+
.login-page .field-list {width: 370px;}
|
193
|
+
.login-page form .actions {text-align: left; margin: 0; padding: 10px 0 10px 160px;}
|
194
|
+
.signup-page .field-list {width: 370px;}
|
195
|
+
.signup-page .content-body, .signup-page .content-header { margin-left: 120px; margin-right: 120px;}
|
196
|
+
.login-page .field-list td, .signup-page .field-list td {width: auto;}
|
197
|
+
.login-page .field-list th, .signup-page .field-list th {width: 150px !important; width: 150px;}
|
198
|
+
.login-page .content-header { position: relative; }
|
199
|
+
.login-page .forgot-password {font-size: 11px; margin-left: 160px;}
|
200
|
+
|
201
|
+
.edit-page .content-header {overflow: hidden; _zoom: 1;}
|
202
|
+
.edit-page .content-header h1 {float: left;}
|
203
|
+
.edit-page .content-header .delete-button {float: right; margin-top: 25px;}
|
204
|
+
form .actions {margin: 30px 0; width: 100%; text-align: center;}
|
205
|
+
|
206
|
+
.show-page .content-header {position: relative; border-bottom: 1px dotted #888;}
|
207
|
+
.show-page .content-header h1, .new-in-collection-page .content-header h1 {margin-bottom: 2px; margin-right: 70px;}
|
208
|
+
.show-page .content-header a.edit-link {position: absolute; top: 30px; right: 0;}
|
209
|
+
.aside-content .collection {padding-bottom: 10px;}
|
210
|
+
|
211
|
+
.content-header .creation-details {font-size: 11px; line-height: 11px;}
|
212
|
+
.content-header .creator {margin-right: 15px;}
|
213
|
+
.content-header .created-at {color: #444;}
|
214
|
+
|
215
|
+
.new-in-collection-page .content-header h2 {margin-top: 6px; font-size: 14px;}
|
216
|
+
.new-in-collection-page .content-header h2, .new-in-collection-page .content-header h2 a {color: #222;}
|
217
|
+
|
218
|
+
.add-to-collection {padding: 20px 30px; margin-top: 20px;}
|
219
|
+
.collection-section .add-to-collection h3 {margin: 0 0 20px; padding: 0; border-bottom: none;}
|
220
|
+
.add-to-collection form .submit-button {margin: 20px 130px;}
|
221
|
+
.add-to-collection .actions {text-align: left; margin-top: 0; margin-bottom: 0;}
|
222
|
+
|
223
|
+
/* styling of generic elements */
|
224
|
+
.creator {font-weight: bold;}
|
225
|
+
.card {
|
226
|
+
overflow: hidden; _zoom: 1;
|
227
|
+
margin: 10px 0; padding: 12px; border: 1px solid #e8e8e8;
|
228
|
+
background: #f5f5f5;
|
229
|
+
position: relative;
|
230
|
+
}
|
231
|
+
.card h4 {margin-top: 0;}
|
232
|
+
.card a {background: #f5f5f5;}
|
233
|
+
.card .creation-details {
|
234
|
+
display: block; color: #333; font-size: 11px;
|
235
|
+
}
|
236
|
+
.card .datetime {color: #666;}
|
237
|
+
.card .actions { position:absolute; right: 10px; top: 10px; }
|
238
|
+
div.ordering-handle { float: left; background: #ccc; color: white; margin-right: 5px; cursor: move; padding: 0 2px;}
|
239
|
+
|
240
|
+
.card.content.with-owner {
|
241
|
+
padding: 0; margin: 10px 0 30px; border: none;
|
242
|
+
background: none;
|
243
|
+
font-size: 11px;
|
244
|
+
}
|
245
|
+
.card.content .creation-details {
|
246
|
+
float: left; width: 28%;
|
247
|
+
line-height: 14px;
|
248
|
+
}
|
249
|
+
.card.content .creation-details .created-at {display: block;}
|
250
|
+
.card.content.with-owner .content {
|
251
|
+
float: right; width: 72%;
|
252
|
+
}
|
253
|
+
ul.collection > li { margin-left: 0; list-style: none;}
|
254
|
+
.empty-collection-message {margin-top: 20px;}
|
255
|
+
|
256
|
+
.new-link {margin-top: 20px;}
|
257
|
+
|
258
|
+
.collection-section h3 {
|
259
|
+
padding: 15px 0; margin-bottom: 20px; border-bottom: 1px dotted #888;
|
260
|
+
}
|
261
|
+
|
262
|
+
.table-plus .header {_zoom: 1; overflow: hidden;}
|
263
|
+
.table-plus .header a {float: left; margin-right: 20px;}
|
264
|
+
.table-plus div.search {float: right;}
|
265
|
+
.table-plus div.search span {color: #444;}
|
266
|
+
.table-plus div.search input.search {margin: 0 5px;}
|
267
|
+
.table-plus div.search .button {padding: 2px 4px;}
|
268
|
+
|
269
|
+
.table-plus table {width: 100%; margin: 20px 0;}
|
270
|
+
.table-plus table th {
|
271
|
+
padding: 2px 10px;
|
272
|
+
color: white; background: #444;
|
273
|
+
font-weight: bold; font-size: 10px;
|
274
|
+
}
|
275
|
+
.table-plus table th a {color: white;}
|
276
|
+
.table-plus table td {
|
277
|
+
padding: 6px 10px; border-bottom: 1px solid #e2e2e2; color: #666;
|
278
|
+
}
|
279
|
+
.table-plus table td input.button, .collection .button {padding: 1px 3px; margin-left: 10px; margin-top: 0;}
|
280
|
+
.table-plus table td.controls {width: 100px;}
|
281
|
+
.table-plus .even {background: #f8f8f8;}
|
282
|
+
.table-plus a {background: none;}
|
283
|
+
|
284
|
+
/* <select-many> */
|
285
|
+
|
286
|
+
div.select-many {border-top: 1px dotted #999;}
|
287
|
+
div.select-many .items {margin-bottom: 10px;}
|
288
|
+
div.select-many .item {
|
289
|
+
overflow:hidden; _zoom: 1; font-weight: bold;
|
290
|
+
border-bottom: 1px dotted #999; padding: 5px 10px; /*margin: 5px 25px 5px 0;*/
|
291
|
+
}
|
292
|
+
div.select-many .item span { float: left; }
|
293
|
+
div.select-many .item .remove-item { float: right; }
|
294
|
+
|
295
|
+
/* <live-search> */
|
296
|
+
|
297
|
+
#search-results-panel { postition: relative; }
|
298
|
+
#search-results-panel .close-button { cursor: pointer; text-decoration: underline; position: absolute; top: 3px; right: 6px;}
|
299
|
+
|
300
|
+
/*******************************************************/
|
301
|
+
/* these styles are for the generated front index page */
|
302
|
+
/* you can delete them if you over-ride it */
|
303
|
+
|
304
|
+
.front-page .welcome-message {
|
305
|
+
padding: 10px 20px 20px; border: 1px solid #e8e8e8;
|
306
|
+
color: #222;
|
307
|
+
background: url(<%=image_path%>50-ACD3E6-fff.png) repeat-x #fff;
|
308
|
+
}
|
309
|
+
.front-page .welcome-message h2 {
|
310
|
+
font-size: 18px; line-height: 27px;
|
311
|
+
}
|
312
|
+
.front-page ul.models li {margin-left: 0; list-style: none;}
|
313
|
+
|
314
|
+
ul.input-many {list-style-type: none;}
|
315
|
+
ul.input-all {list-style-type: none;}
|
316
|
+
|
317
|
+
ul.input-many > li { overflow:hidden; zoom:1;}
|
318
|
+
ul.input-many .input-many-item {float:left;}
|
319
|
+
ul.input-many div.buttons {float:left; margin-left:10px;}
|
320
|
+
li.input-many-template { display:none; }
|
321
|
+
|
322
|
+
ul.check-many { list-style-type: none; margin-left: 0px;}
|
323
|
+
ul.check-many li input { vertical-align: -20%;}
|
324
|
+
|
325
|
+
/* rapid-summary */
|
326
|
+
table.app-summary { border: 1px solid; border-collapse: collapse; }
|
327
|
+
table.app-summary td { padding: 2px; border: 1px dotted #bbb; }
|
328
|
+
table.app-summary th { padding: 2px; border-bottom: 1px solid; background: #acd3e6; }
|
@@ -0,0 +1,102 @@
|
|
1
|
+
.hidden {display: none;}
|
2
|
+
|
3
|
+
.in-place-textfield-bhv, .in-place-textarea-bhv, .in-place-html-textarea-bhv {
|
4
|
+
border: 1px dotted #666;
|
5
|
+
padding: 0 3px; padding-right: 20px;
|
6
|
+
background-image: url(../images/pencil.png);
|
7
|
+
background-position: top right;
|
8
|
+
background-repeat: no-repeat;
|
9
|
+
}
|
10
|
+
|
11
|
+
.inplaceeditor-form input, .inplaceeditor-form textarea,
|
12
|
+
table.new-record textarea, table.new-record input {
|
13
|
+
border: 1px dotted #666;
|
14
|
+
padding: 3px; width: 100%;
|
15
|
+
}
|
16
|
+
.inplaceeditor-form, .inplaceeditor-form input {
|
17
|
+
display: inline;
|
18
|
+
}
|
19
|
+
|
20
|
+
/**** Admin ****/
|
21
|
+
|
22
|
+
.admin-banner {
|
23
|
+
background: #9d0018; border-top: 2px solid #7a0013; border-bottom: 2px solid #7a0013;
|
24
|
+
padding: 2px 0;
|
25
|
+
margin: 10px 0;
|
26
|
+
}
|
27
|
+
.admin-banner p, .admin-banner span {
|
28
|
+
font: 12px "Lucida Grande", Arial, sans-serif;
|
29
|
+
}
|
30
|
+
.admin-banner p, .admin-banner div {margin-bottom: 0;}
|
31
|
+
.admin-banner a {color: white; text-decoration: none; padding: 1px 5px; font-weight: bold;}
|
32
|
+
.admin-banner a:hover {color: #9d0018; background: white;}
|
33
|
+
.admin-banner .logged-in {
|
34
|
+
float: right;
|
35
|
+
}
|
36
|
+
|
37
|
+
/********* everything below here came from hobo_rapid.css, needs looking at ********/
|
38
|
+
|
39
|
+
/**** Default styling for Rapid ***/
|
40
|
+
|
41
|
+
#ajax-progress {
|
42
|
+
float: right; margin: 20px;
|
43
|
+
position: fixed; display: none; z-index: 10;
|
44
|
+
}
|
45
|
+
|
46
|
+
/* Scriptaculous Autocompleter ---*/
|
47
|
+
|
48
|
+
div.completions-popup {
|
49
|
+
position:absolute;
|
50
|
+
width:250px;
|
51
|
+
background-color:white;
|
52
|
+
border:1px solid #888;
|
53
|
+
margin:0px;
|
54
|
+
padding:0px;
|
55
|
+
}
|
56
|
+
div.completions-popup ul {
|
57
|
+
list-style-type:none;
|
58
|
+
margin:0px;
|
59
|
+
padding:0px;
|
60
|
+
}
|
61
|
+
div.completions-popup ul li.selected { background-color: #ffb;}
|
62
|
+
div.completions-popup ul li {
|
63
|
+
list-style-type:none;
|
64
|
+
display:block;
|
65
|
+
margin:0;
|
66
|
+
padding:2px;
|
67
|
+
cursor:pointer;
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
.field-list {width:100%;}
|
72
|
+
.field-list td {vertical-align: middle;}
|
73
|
+
.field-list th {font-weight: bold;}
|
74
|
+
.field-list th, .field-list td {padding: 5px 0;}
|
75
|
+
.field-list th {padding-right: 10px;}
|
76
|
+
|
77
|
+
.field-list td.field-label {
|
78
|
+
text-align: left; width: 1px; white-space: nowrap; vertical-align: top;
|
79
|
+
padding-top: 10px; padding-bottom: 10px;
|
80
|
+
}
|
81
|
+
.field-list textarea, .field-list input[type=text], .field-list input[type=password] { width: 99%; margin: 0; }
|
82
|
+
|
83
|
+
/*input[type=text].wide { width: 100%; }*/
|
84
|
+
textarea { height: 170px; }
|
85
|
+
textarea.wide { width: 100%; }
|
86
|
+
textarea.tall { height: 350px; }
|
87
|
+
|
88
|
+
.field-list input.percentage {width: 25px; display: inline; margin-right: 5px; padding: 1px 3px;}
|
89
|
+
|
90
|
+
select.dev-user-changer { opacity: 0.3; }
|
91
|
+
select.dev-user-changer:hover { opacity: 1; }
|
92
|
+
|
93
|
+
.part-wrapper {
|
94
|
+
display: inline; /* don't mess up layout when wrapping something */
|
95
|
+
}
|
96
|
+
|
97
|
+
optgroup.disabled-option {
|
98
|
+
color: #ccc;
|
99
|
+
height: 1em;
|
100
|
+
}
|
101
|
+
|
102
|
+
input.nil-value { color:grey; }
|
@@ -0,0 +1,95 @@
|
|
1
|
+
/******** Reset default browser CSS styles. *********/
|
2
|
+
/* Based on Blueprint */
|
3
|
+
|
4
|
+
html, body, div, span, applet, object, iframe,
|
5
|
+
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
6
|
+
a, abbr, acronym, address, big, cite,
|
7
|
+
del, dfn, font, img, ins, kbd, q, s, samp,
|
8
|
+
small, strike, sub, sup, tt, var,
|
9
|
+
dl, dt, dd, ol, ul, li,
|
10
|
+
fieldset, form, label, legend,
|
11
|
+
table, caption, tbody, tfoot, thead, tr, th, td {
|
12
|
+
margin: 0;
|
13
|
+
padding: 0;
|
14
|
+
border: 0;
|
15
|
+
outline: 0;
|
16
|
+
font-weight: inherit;
|
17
|
+
font-style: inherit;
|
18
|
+
font-size: 100%;
|
19
|
+
font-family: inherit;
|
20
|
+
vertical-align: baseline;
|
21
|
+
}
|
22
|
+
|
23
|
+
code {
|
24
|
+
margin: 0;
|
25
|
+
padding: 0;
|
26
|
+
border: 0;
|
27
|
+
outline: 0;
|
28
|
+
font-weight: inherit;
|
29
|
+
font-style: inherit;
|
30
|
+
font-size: 100%;
|
31
|
+
vertical-align: baseline;
|
32
|
+
}
|
33
|
+
|
34
|
+
em {
|
35
|
+
margin: 0;
|
36
|
+
padding: 0;
|
37
|
+
border: 0;
|
38
|
+
outline: 0;
|
39
|
+
font-weight: inherit;
|
40
|
+
font-size: 100%;
|
41
|
+
font-family: inherit;
|
42
|
+
vertical-align: baseline;
|
43
|
+
}
|
44
|
+
|
45
|
+
strong {
|
46
|
+
margin: 0;
|
47
|
+
padding: 0;
|
48
|
+
border: 0;
|
49
|
+
outline: 0;
|
50
|
+
font-style: inherit;
|
51
|
+
font-size: 100%;
|
52
|
+
font-family: inherit;
|
53
|
+
vertical-align: baseline;
|
54
|
+
}
|
55
|
+
|
56
|
+
/* Remember to define focus styles! */
|
57
|
+
:focus {
|
58
|
+
outline: 0;
|
59
|
+
}
|
60
|
+
body {
|
61
|
+
line-height: 1;
|
62
|
+
color: black;
|
63
|
+
background: white;
|
64
|
+
}
|
65
|
+
|
66
|
+
/* Tables still need 'cellspacing="0"' in the markup. */
|
67
|
+
table {
|
68
|
+
border-collapse: separate;
|
69
|
+
border-spacing: 0;
|
70
|
+
}
|
71
|
+
caption, th, td {
|
72
|
+
text-align: left;
|
73
|
+
font-weight: normal;
|
74
|
+
}
|
75
|
+
|
76
|
+
/* Remove possible quote marks (") from <q>, <blockquote>. */
|
77
|
+
blockquote:before, blockquote:after,
|
78
|
+
q:before, q:after {
|
79
|
+
content: "";
|
80
|
+
}
|
81
|
+
blockquote, q {
|
82
|
+
quotes: "" "";
|
83
|
+
}
|
84
|
+
|
85
|
+
body {
|
86
|
+
font-family: "Lucida Grande", Helvetica, Arial, Verdana, sans-serif;
|
87
|
+
font-size: 12px;
|
88
|
+
}
|
89
|
+
h1,h2,h3,h4,h5,h6 { font-weight: bold; }
|
90
|
+
h1 { font-size: 36px;}
|
91
|
+
h2 { font-size: 28px;}
|
92
|
+
h3 { font-size: 18px;}
|
93
|
+
h4 { font-size: 14px;}
|
94
|
+
h5 { font-size: 12px;}
|
95
|
+
h6 { font-size: 10px;}
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hobo_clean
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: 6
|
5
|
+
version: 1.4.0.pre2
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Tom Locke, James Garlick
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2012-03-28 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hobo
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - "="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.4.0.pre2
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
description: |
|
27
|
+
This gem is a Hobo plugin that implements the default Hobo theme.
|
28
|
+
|
29
|
+
email: tom@tomlocke.com
|
30
|
+
executables: []
|
31
|
+
|
32
|
+
extensions: []
|
33
|
+
|
34
|
+
extra_rdoc_files: []
|
35
|
+
|
36
|
+
files:
|
37
|
+
- README
|
38
|
+
- VERSION
|
39
|
+
- hobo_clean.gemspec
|
40
|
+
- lib/hobo_clean.rb
|
41
|
+
- lib/hobo_clean/railtie.rb
|
42
|
+
- taglibs/hobo_clean.dryml
|
43
|
+
- taglibs/nav.dryml
|
44
|
+
- vendor/assets/images/101-3B5F87-ACD3E6.png
|
45
|
+
- vendor/assets/images/30-3E547A-242E42.png
|
46
|
+
- vendor/assets/images/30-DBE1E5-FCFEF5.png
|
47
|
+
- vendor/assets/images/300-ACD3E6-fff.png
|
48
|
+
- vendor/assets/images/50-ACD3E6-fff.png
|
49
|
+
- vendor/assets/images/blank.gif
|
50
|
+
- vendor/assets/images/fieldbg.gif
|
51
|
+
- vendor/assets/images/pencil.png
|
52
|
+
- vendor/assets/images/small_close.png
|
53
|
+
- vendor/assets/images/spinner.gif
|
54
|
+
- vendor/assets/javascripts/hobo_clean.js
|
55
|
+
- vendor/assets/stylesheets/clean.css.erb
|
56
|
+
- vendor/assets/stylesheets/hobo_clean.css
|
57
|
+
- vendor/assets/stylesheets/rapid-ui.css
|
58
|
+
- vendor/assets/stylesheets/reset.css
|
59
|
+
homepage: http://hobocentral.net
|
60
|
+
licenses: []
|
61
|
+
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options:
|
64
|
+
- --charset=UTF-8
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
- vendor
|
68
|
+
- taglibs
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: "0"
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.3.6
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project: hobo
|
84
|
+
rubygems_version: 1.8.17
|
85
|
+
signing_key:
|
86
|
+
specification_version: 3
|
87
|
+
summary: The clean theme for Hobo
|
88
|
+
test_files: []
|
89
|
+
|
90
|
+
has_rdoc:
|