aureus 0.3.6 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +8 -1
- data/Gemfile.lock +93 -2
- data/Rakefile +24 -6
- data/Readme.md +28 -1
- data/TODO.md +7 -0
- data/app/assets/stylesheets/aureus/base.scss +9 -4
- data/app/assets/stylesheets/aureus/content.scss +0 -24
- data/app/assets/stylesheets/aureus/form.scss +1 -16
- data/app/assets/stylesheets/aureus/index.scss +1 -0
- data/app/assets/stylesheets/aureus/navigation.scss +4 -5
- data/app/assets/stylesheets/aureus/table.scss +4 -14
- data/app/assets/stylesheets/aureus/topbar.scss +2 -2
- data/aureus.gemspec +6 -1
- data/config/initializers/formtastic.rb +82 -0
- data/config/locales/en.yml +2 -0
- data/lib/aureus/box.rb +37 -0
- data/lib/aureus/content.rb +15 -0
- data/lib/aureus/data_table.rb +139 -0
- data/lib/aureus/engine.rb +3 -1
- data/lib/aureus/helper.rb +56 -0
- data/lib/aureus/listing.rb +39 -0
- data/lib/aureus/messages.rb +23 -0
- data/lib/aureus/navigation.rb +42 -0
- data/lib/aureus/row.rb +65 -0
- data/lib/aureus/test/resource.rb +3 -0
- data/lib/aureus/test/schema.rb +8 -0
- data/lib/aureus/toolbar.rb +74 -0
- data/lib/aureus/version.rb +1 -1
- data/lib/aureus.rb +50 -1
- data/lib/generators/aureus/.DS_Store +0 -0
- data/lib/generators/aureus/devise_i18n/devise_i18n_generator.rb +20 -0
- data/lib/generators/aureus/devise_i18n/templates/devise_base.en.yml +54 -0
- data/lib/generators/aureus/devise_i18n/templates/devise_mail.en.yml +18 -0
- data/lib/generators/aureus/devise_i18n/templates/devise_ui.en.yml +54 -0
- data/lib/generators/aureus/devise_views/devise_views_generator.rb +23 -0
- data/lib/generators/aureus/devise_views/templates/devise/confirmations/new.html.haml +7 -0
- data/lib/generators/aureus/devise_views/templates/devise/mailer/confirmation_instructions.html.haml +3 -0
- data/lib/generators/aureus/devise_views/templates/devise/mailer/reset_password_instructions.html.haml +5 -0
- data/lib/generators/aureus/devise_views/templates/devise/mailer/unlock_instructions.html.haml +4 -0
- data/lib/generators/aureus/devise_views/templates/devise/passwords/edit.html.haml +9 -0
- data/lib/generators/aureus/devise_views/templates/devise/passwords/new.html.haml +7 -0
- data/lib/generators/aureus/devise_views/templates/devise/registrations/edit.html.haml +11 -0
- data/lib/generators/aureus/devise_views/templates/devise/registrations/new.html.haml +9 -0
- data/lib/generators/aureus/devise_views/templates/devise/sessions/new.html.haml +9 -0
- data/lib/generators/aureus/devise_views/templates/devise/shared/_links.html.haml +19 -0
- data/lib/generators/aureus/devise_views/templates/devise/unlocks/new.html.haml +7 -0
- data/lib/generators/aureus/views/templates/views/_form.html.haml +6 -0
- data/lib/generators/aureus/views/templates/views/_item.html.haml +6 -0
- data/lib/generators/aureus/views/templates/views/_list.html.haml +10 -0
- data/lib/generators/aureus/views/templates/views/edit.html.haml +7 -0
- data/lib/generators/aureus/views/templates/views/index.html.haml +6 -0
- data/lib/generators/aureus/views/templates/views/new.html.haml +7 -0
- data/lib/generators/aureus/views/templates/views/show.html.haml +7 -0
- data/lib/generators/aureus/views/views_generator.rb +78 -0
- data/test/html.haml +64 -0
- data/test/model.rb +3 -0
- metadata +101 -4
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,105 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
|
4
|
+
aureus (1.0.0)
|
5
|
+
formtastic
|
6
|
+
haml
|
7
|
+
jquery-rails
|
5
8
|
|
6
9
|
GEM
|
7
10
|
remote: http://rubygems.org/
|
8
11
|
specs:
|
12
|
+
actionmailer (3.2.6)
|
13
|
+
actionpack (= 3.2.6)
|
14
|
+
mail (~> 2.4.4)
|
15
|
+
actionpack (3.2.6)
|
16
|
+
activemodel (= 3.2.6)
|
17
|
+
activesupport (= 3.2.6)
|
18
|
+
builder (~> 3.0.0)
|
19
|
+
erubis (~> 2.7.0)
|
20
|
+
journey (~> 1.0.1)
|
21
|
+
rack (~> 1.4.0)
|
22
|
+
rack-cache (~> 1.2)
|
23
|
+
rack-test (~> 0.6.1)
|
24
|
+
sprockets (~> 2.1.3)
|
25
|
+
activemodel (3.2.6)
|
26
|
+
activesupport (= 3.2.6)
|
27
|
+
builder (~> 3.0.0)
|
28
|
+
activerecord (3.2.6)
|
29
|
+
activemodel (= 3.2.6)
|
30
|
+
activesupport (= 3.2.6)
|
31
|
+
arel (~> 3.0.2)
|
32
|
+
tzinfo (~> 0.3.29)
|
33
|
+
activeresource (3.2.6)
|
34
|
+
activemodel (= 3.2.6)
|
35
|
+
activesupport (= 3.2.6)
|
36
|
+
activesupport (3.2.6)
|
37
|
+
i18n (~> 0.6)
|
38
|
+
multi_json (~> 1.0)
|
39
|
+
arel (3.0.2)
|
40
|
+
builder (3.0.0)
|
41
|
+
erubis (2.7.0)
|
42
|
+
formtastic (2.2.0)
|
43
|
+
actionpack (>= 3.0)
|
44
|
+
haml (3.1.6)
|
45
|
+
highline (1.6.13)
|
46
|
+
hike (1.2.1)
|
47
|
+
i18n (0.6.0)
|
48
|
+
journey (1.0.4)
|
49
|
+
jquery-rails (2.0.2)
|
50
|
+
railties (>= 3.2.0, < 5.0)
|
51
|
+
thor (~> 0.14)
|
52
|
+
json (1.7.3)
|
53
|
+
mail (2.4.4)
|
54
|
+
i18n (>= 0.4.0)
|
55
|
+
mime-types (~> 1.16)
|
56
|
+
treetop (~> 1.4.8)
|
57
|
+
mime-types (1.19)
|
58
|
+
multi_json (1.3.6)
|
59
|
+
polyglot (0.3.3)
|
60
|
+
rack (1.4.1)
|
61
|
+
rack-cache (1.2)
|
62
|
+
rack (>= 0.4)
|
63
|
+
rack-ssl (1.3.2)
|
64
|
+
rack
|
65
|
+
rack-test (0.6.1)
|
66
|
+
rack (>= 1.0)
|
67
|
+
rails (3.2.6)
|
68
|
+
actionmailer (= 3.2.6)
|
69
|
+
actionpack (= 3.2.6)
|
70
|
+
activerecord (= 3.2.6)
|
71
|
+
activeresource (= 3.2.6)
|
72
|
+
activesupport (= 3.2.6)
|
73
|
+
bundler (~> 1.0)
|
74
|
+
railties (= 3.2.6)
|
75
|
+
railties (3.2.6)
|
76
|
+
actionpack (= 3.2.6)
|
77
|
+
activesupport (= 3.2.6)
|
78
|
+
rack-ssl (~> 1.3.2)
|
79
|
+
rake (>= 0.8.7)
|
80
|
+
rdoc (~> 3.4)
|
81
|
+
thor (>= 0.14.6, < 2.0)
|
82
|
+
rake (0.9.2.2)
|
83
|
+
rdoc (3.12)
|
84
|
+
json (~> 1.4)
|
85
|
+
sprockets (2.1.3)
|
86
|
+
hike (~> 1.2)
|
87
|
+
rack (~> 1.0)
|
88
|
+
tilt (~> 1.1, != 1.3.0)
|
89
|
+
sqlite3 (1.3.6)
|
90
|
+
thor (0.15.4)
|
91
|
+
tilt (1.3.3)
|
92
|
+
treetop (1.4.10)
|
93
|
+
polyglot
|
94
|
+
polyglot (>= 0.3.1)
|
95
|
+
tzinfo (0.3.33)
|
9
96
|
|
10
97
|
PLATFORMS
|
11
98
|
ruby
|
12
99
|
|
13
100
|
DEPENDENCIES
|
14
|
-
|
101
|
+
activerecord
|
102
|
+
aureus!
|
103
|
+
highline
|
104
|
+
rails
|
105
|
+
sqlite3
|
data/Rakefile
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require 'highline/import'
|
1
|
+
require "rubygems"
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
gem "highline"
|
4
|
+
gem "activerecord"
|
5
|
+
gem "sqlite3"
|
7
6
|
|
8
7
|
desc "build and publish"
|
9
8
|
task :build do
|
9
|
+
require "highline/import"
|
10
10
|
puts "build gem..."
|
11
11
|
`gem build aureus.gemspec`
|
12
12
|
Dir["*.gem"].each do |file|
|
@@ -17,4 +17,22 @@ task :build do
|
|
17
17
|
end
|
18
18
|
puts "remove gem..."
|
19
19
|
`rm *.gem`
|
20
|
-
end
|
20
|
+
end
|
21
|
+
|
22
|
+
task :check do
|
23
|
+
require "rails"
|
24
|
+
require "active_support"
|
25
|
+
require "action_view"
|
26
|
+
require "active_record"
|
27
|
+
require "aureus"
|
28
|
+
require "haml"
|
29
|
+
require "aureus/test/resource"
|
30
|
+
include Aureus::Helper
|
31
|
+
ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
|
32
|
+
load "lib/aureus/test/schema.rb"
|
33
|
+
@resource = Resource.new
|
34
|
+
@resource.title = "the title"
|
35
|
+
@resource.text = "Some longer text"
|
36
|
+
@resources = [@resource,@resource]
|
37
|
+
puts Haml::Engine.new(File.read("test/html.haml")).render(self)
|
38
|
+
end
|
data/Readme.md
CHANGED
@@ -1,3 +1,30 @@
|
|
1
1
|
# Aureus Admin Template
|
2
2
|
|
3
|
-
**a nice looking css framework for your rails admin interfaces**
|
3
|
+
**a nice looking css framework for your rails admin interfaces**
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
To use **aureus** simply require the gem:
|
8
|
+
|
9
|
+
````ruby
|
10
|
+
gem "aureus"
|
11
|
+
````
|
12
|
+
|
13
|
+
The rails engine will automatically load the following dependencies:
|
14
|
+
|
15
|
+
* formtastic
|
16
|
+
* haml
|
17
|
+
* jquery-rails
|
18
|
+
|
19
|
+
But you have to ensure that these gems are available:
|
20
|
+
|
21
|
+
* sass-rails
|
22
|
+
* coffee-rails
|
23
|
+
|
24
|
+
## Helper Methods
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
## The Layout
|
29
|
+
|
30
|
+
Here is a simple layout done with aureus helpers:
|
data/TODO.md
ADDED
@@ -1,4 +1,4 @@
|
|
1
|
-
$font-family: "Helvetica Neue",
|
1
|
+
$font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
2
2
|
|
3
3
|
* {
|
4
4
|
font-family: $font-family;
|
@@ -19,15 +19,20 @@ strong {
|
|
19
19
|
font-weight: bold;
|
20
20
|
}
|
21
21
|
|
22
|
+
.translation_missing {
|
23
|
+
color: red !important;
|
24
|
+
text-decoration: line-through !important;
|
25
|
+
}
|
26
|
+
|
22
27
|
#messages {
|
23
|
-
.error, .notice {
|
28
|
+
.error, .notice, .alert {
|
24
29
|
padding: 10px 30px;
|
25
30
|
color: white;
|
26
31
|
font-size: 14px;
|
27
32
|
text-shadow: -1px -1px 0 black;
|
28
33
|
}
|
29
|
-
.error {
|
30
|
-
@include gradient($
|
34
|
+
.error, .alert {
|
35
|
+
@include gradient($color_warn,$color_warn_dark);
|
31
36
|
}
|
32
37
|
.notice {
|
33
38
|
@include gradient(#666,#444);
|
@@ -85,30 +85,6 @@
|
|
85
85
|
}
|
86
86
|
}
|
87
87
|
}
|
88
|
-
.w1 {
|
89
|
-
margin-right: 1%;
|
90
|
-
width: 24%;
|
91
|
-
}
|
92
|
-
.w2 {
|
93
|
-
margin-right: 1%;
|
94
|
-
width: 49%;
|
95
|
-
}
|
96
|
-
.w3 {
|
97
|
-
margin-right: 1%;
|
98
|
-
width: 74%;
|
99
|
-
}
|
100
|
-
.w4 {
|
101
|
-
width: 100%;
|
102
|
-
}
|
103
|
-
.w1-last {
|
104
|
-
width: 25%;
|
105
|
-
}
|
106
|
-
.w2-last {
|
107
|
-
width: 50%;
|
108
|
-
}
|
109
|
-
.w3-last {
|
110
|
-
width: 75%;
|
111
|
-
}
|
112
88
|
.centered {
|
113
89
|
margin: 0 auto;
|
114
90
|
margin-top: 15%;
|
@@ -3,7 +3,7 @@ form {
|
|
3
3
|
list-style: none;
|
4
4
|
margin: 7px 0px;
|
5
5
|
.inline-errors {
|
6
|
-
color: $
|
6
|
+
color: $color_warn;
|
7
7
|
}
|
8
8
|
}
|
9
9
|
p {
|
@@ -55,19 +55,4 @@ form {
|
|
55
55
|
input[type=checkbox], input[type=radio] {
|
56
56
|
margin-right: 7px;
|
57
57
|
}
|
58
|
-
/*#error_explanation {
|
59
|
-
border: 1px solid $color_main;
|
60
|
-
@include border-radius(3px);
|
61
|
-
padding: 5px;
|
62
|
-
margin-bottom: 10px;
|
63
|
-
h2 {
|
64
|
-
display: none;
|
65
|
-
}
|
66
|
-
ul {
|
67
|
-
li {
|
68
|
-
color: $color_main;
|
69
|
-
font-size: 14px;
|
70
|
-
}
|
71
|
-
}
|
72
|
-
}*/
|
73
58
|
}
|
@@ -1,21 +1,20 @@
|
|
1
1
|
#navigation {
|
2
2
|
border-bottom: 1px solid #bbb;
|
3
|
-
padding:
|
3
|
+
padding: 20px 40px;
|
4
4
|
overflow: hidden;
|
5
5
|
@include gradient(#eee,#ddd);
|
6
6
|
h2 {
|
7
|
+
float: left;
|
7
8
|
span {
|
8
|
-
padding: 10px 0;
|
9
9
|
color: #222;
|
10
10
|
font-size: 36px;
|
11
11
|
font-weight: bold;
|
12
12
|
text-shadow: 1px 1px 0 white;
|
13
|
-
display: block;
|
14
13
|
overflow: hidden;
|
15
14
|
}
|
16
15
|
}
|
17
16
|
ul {
|
18
|
-
margin-top:
|
17
|
+
margin-top: 10px;
|
19
18
|
float: right;
|
20
19
|
li {
|
21
20
|
display: inline;
|
@@ -36,7 +35,7 @@
|
|
36
35
|
}
|
37
36
|
}
|
38
37
|
li:hover {
|
39
|
-
a {
|
38
|
+
a, span {
|
40
39
|
color: $color_main;
|
41
40
|
}
|
42
41
|
}
|
@@ -31,18 +31,6 @@
|
|
31
31
|
th.center {
|
32
32
|
text-align: center;
|
33
33
|
}
|
34
|
-
th.b1 {
|
35
|
-
width: 1px;
|
36
|
-
}
|
37
|
-
th.b2 {
|
38
|
-
width: 80px;
|
39
|
-
}
|
40
|
-
th.b3 {
|
41
|
-
width: 120px;
|
42
|
-
}
|
43
|
-
th.b4 {
|
44
|
-
width: 160px;
|
45
|
-
}
|
46
34
|
}
|
47
35
|
}
|
48
36
|
tbody {
|
@@ -79,6 +67,8 @@
|
|
79
67
|
color: #444;
|
80
68
|
}
|
81
69
|
td.buttons {
|
70
|
+
width: 1px;
|
71
|
+
white-space: nowrap;
|
82
72
|
text-align: right;
|
83
73
|
padding: 7px !important;
|
84
74
|
vertical-align: middle;
|
@@ -98,7 +88,7 @@
|
|
98
88
|
text-shadow: 1px 1px 0 #eee;
|
99
89
|
}
|
100
90
|
}
|
101
|
-
a.edit, a.
|
91
|
+
a.edit, a.destroy, a.show, a.recover, a.print {
|
102
92
|
width: 16px;
|
103
93
|
height: 16px;
|
104
94
|
display: inline-block;
|
@@ -117,7 +107,7 @@
|
|
117
107
|
a.edit span {
|
118
108
|
background: url($asset_icon_pencil);
|
119
109
|
}
|
120
|
-
a.
|
110
|
+
a.destroy span {
|
121
111
|
background: url($asset_icon_cross);
|
122
112
|
}
|
123
113
|
a.show span {
|
data/aureus.gemspec
CHANGED
@@ -19,5 +19,10 @@ Gem::Specification.new do |s|
|
|
19
19
|
# Files
|
20
20
|
s.files = `git ls-files`.split("\n")
|
21
21
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
22
|
-
|
22
|
+
|
23
|
+
# Dependencies
|
24
|
+
s.add_dependency "formtastic"
|
25
|
+
s.add_dependency "jquery-rails"
|
26
|
+
s.add_dependency "haml"
|
27
|
+
|
23
28
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Set the default text field size when input is a string. Default is nil.
|
4
|
+
# Formtastic::FormBuilder.default_text_field_size = 50
|
5
|
+
|
6
|
+
# Set the default text area height when input is a text. Default is 20.
|
7
|
+
# Formtastic::FormBuilder.default_text_area_height = 5
|
8
|
+
|
9
|
+
# Set the default text area width when input is a text. Default is nil.
|
10
|
+
# Formtastic::FormBuilder.default_text_area_width = 50
|
11
|
+
|
12
|
+
# Should all fields be considered "required" by default?
|
13
|
+
# Defaults to true.
|
14
|
+
# Formtastic::FormBuilder.all_fields_required_by_default = true
|
15
|
+
|
16
|
+
# Should select fields have a blank option/prompt by default?
|
17
|
+
# Defaults to true.
|
18
|
+
# Formtastic::FormBuilder.include_blank_for_select_by_default = true
|
19
|
+
|
20
|
+
# Set the string that will be appended to the labels/fieldsets which are required
|
21
|
+
# It accepts string or procs and the default is a localized version of
|
22
|
+
# '<abbr title="required">*</abbr>'. In other words, if you configure formtastic.required
|
23
|
+
# in your locale, it will replace the abbr title properly. But if you don't want to use
|
24
|
+
# abbr tag, you can simply give a string as below
|
25
|
+
# Formtastic::FormBuilder.required_string = "(required)"
|
26
|
+
|
27
|
+
# Set the string that will be appended to the labels/fieldsets which are optional
|
28
|
+
# Defaults to an empty string ("") and also accepts procs (see required_string above)
|
29
|
+
# Formtastic::FormBuilder.optional_string = "(optional)"
|
30
|
+
|
31
|
+
# Set the way inline errors will be displayed.
|
32
|
+
# Defaults to :sentence, valid options are :sentence, :list, :first and :none
|
33
|
+
# Formtastic::FormBuilder.inline_errors = :sentence
|
34
|
+
# Formtastic uses the following classes as default for hints, inline_errors and error list
|
35
|
+
|
36
|
+
# If you override the class here, please ensure to override it in your stylesheets as well
|
37
|
+
# Formtastic::FormBuilder.default_hint_class = "inline-hints"
|
38
|
+
# Formtastic::FormBuilder.default_inline_error_class = "inline-errors"
|
39
|
+
# Formtastic::FormBuilder.default_error_list_class = "errors"
|
40
|
+
|
41
|
+
# Set the method to call on label text to transform or format it for human-friendly
|
42
|
+
# reading when formtastic is used without object. Defaults to :humanize.
|
43
|
+
# Formtastic::FormBuilder.label_str_method = :humanize
|
44
|
+
|
45
|
+
# Set the array of methods to try calling on parent objects in :select and :radio inputs
|
46
|
+
# for the text inside each @<option>@ tag or alongside each radio @<input>@. The first method
|
47
|
+
# that is found on the object will be used.
|
48
|
+
# Defaults to ["to_label", "display_name", "full_name", "name", "title", "username", "login", "value", "to_s"]
|
49
|
+
# Formtastic::FormBuilder.collection_label_methods = [
|
50
|
+
# "to_label", "display_name", "full_name", "name", "title", "username", "login", "value", "to_s"]
|
51
|
+
|
52
|
+
# Additionally, you can customize the order for specific types of inputs.
|
53
|
+
# This is configured on a type basis and if a type is not found it will
|
54
|
+
# fall back to the default order as defined by #inline_order
|
55
|
+
# Formtastic::FormBuilder.custom_inline_order[:checkbox] = [:errors, :hints, :input]
|
56
|
+
# Formtastic::FormBuilder.custom_inline_order[:select] = [:hints, :input, :errors]
|
57
|
+
|
58
|
+
# Specifies if labels/hints for input fields automatically be looked up using I18n.
|
59
|
+
# Default value: true. Overridden for specific fields by setting value to true,
|
60
|
+
# i.e. :label => true, or :hint => true (or opposite depending on initialized value)
|
61
|
+
# Formtastic::FormBuilder.i18n_lookups_by_default = false
|
62
|
+
|
63
|
+
# Specifies if I18n lookups of the default I18n Localizer should be cached to improve performance.
|
64
|
+
# Defaults to false.
|
65
|
+
# Formtastic::FormBuilder.i18n_cache_lookups = true
|
66
|
+
|
67
|
+
# Specifies the class to use for localization lookups. You can create your own
|
68
|
+
# class and use it instead by subclassing Formtastic::Localizer (which is the default).
|
69
|
+
# Formtastic::FormBuilder.i18n_localizer = MyOwnLocalizer
|
70
|
+
|
71
|
+
# You can add custom inputs or override parts of Formtastic by subclassing Formtastic::FormBuilder and
|
72
|
+
# specifying that class here. Defaults to Formtastic::FormBuilder.
|
73
|
+
# Formtastic::Helpers::FormHelper.builder = MyCustomBuilder
|
74
|
+
|
75
|
+
# You can opt-in to Formtastic's use of the HTML5 `required` attribute on `<input>`, `<select>`
|
76
|
+
# and `<textarea>` tags by setting this to false (defaults to true).
|
77
|
+
#Formtastic::FormBuilder.use_required_attribute = true
|
78
|
+
|
79
|
+
# You can opt-in to new HTML5 browser validations (for things like email and url inputs) by setting
|
80
|
+
# this to false. Doing so will add a `novalidate` attribute to the `<form>` tag.
|
81
|
+
# See http://diveintohtml5.org/forms.html#validation for more info.
|
82
|
+
#Formtastic::FormBuilder.perform_browser_validations = true
|
data/lib/aureus/box.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Aureus
|
2
|
+
|
3
|
+
class Box < Renderable
|
4
|
+
|
5
|
+
def initialize title, options, &block
|
6
|
+
init options, :for => :text, :centered => false
|
7
|
+
init_haml_helpers
|
8
|
+
@title = title
|
9
|
+
@content = capture_haml self, &block
|
10
|
+
end
|
11
|
+
|
12
|
+
def content &block
|
13
|
+
@new_content = capture_haml &block
|
14
|
+
end
|
15
|
+
|
16
|
+
def foot &block
|
17
|
+
@foot = capture_haml &block
|
18
|
+
end
|
19
|
+
|
20
|
+
def render
|
21
|
+
title = content_tag("h3",@title)
|
22
|
+
classes = ["box"]
|
23
|
+
classes << "centered" if @options[:centered]
|
24
|
+
@content = @new_content if not @new_content.nil?
|
25
|
+
content_tag "div", :class => classes.join(" ") do
|
26
|
+
case @options[:for]
|
27
|
+
when :form
|
28
|
+
@content = content_tag("ul",@content,:class => "content")
|
29
|
+
end
|
30
|
+
footer = @foot.nil? ? "" : content_tag("div",@foot,:class => "foot")
|
31
|
+
compact title, content_tag("div",@content), footer
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
module Aureus
|
2
|
+
|
3
|
+
class DataTable < Renderable
|
4
|
+
|
5
|
+
def initialize resource, toolbar = true
|
6
|
+
@resource = resource
|
7
|
+
@toolbar = toolbar
|
8
|
+
@head = DataTableHead.new
|
9
|
+
@rows = Array.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def head
|
13
|
+
yield @head
|
14
|
+
end
|
15
|
+
|
16
|
+
def row
|
17
|
+
@resource.each do |r|
|
18
|
+
row = DataTableRow.new
|
19
|
+
yield row, r
|
20
|
+
@rows << row
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def render
|
25
|
+
content_tag "table", :id => @resource.class.name.downcase, :class => (@toolbar?"datatable":"datatable-no-toolbar") do
|
26
|
+
compact @head.render, content_tag("tbody",compact_render(*@rows))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
class DataTableHead < Renderable
|
33
|
+
|
34
|
+
def initialize
|
35
|
+
@columns = Array.new
|
36
|
+
end
|
37
|
+
|
38
|
+
def text name
|
39
|
+
@columns << DataTableHeadColumn.new(name,"text-sorting")
|
40
|
+
end
|
41
|
+
|
42
|
+
def date name
|
43
|
+
@columns << DataTableHeadColumn.new(name,"date-sorting")
|
44
|
+
end
|
45
|
+
|
46
|
+
def raw name
|
47
|
+
@columns << DataTableHeadColumn.new(name,"no-sorting")
|
48
|
+
end
|
49
|
+
|
50
|
+
def render
|
51
|
+
raw ""
|
52
|
+
content_tag "thead" do
|
53
|
+
content_tag "tr", compact_render(*@columns)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
class DataTableHeadColumn < Renderable
|
60
|
+
|
61
|
+
def initialize name, sorting
|
62
|
+
@name = name
|
63
|
+
@sorting = sorting
|
64
|
+
end
|
65
|
+
|
66
|
+
def render
|
67
|
+
content_tag "th", @name, :class => @sorting
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
class DataTableRow < Renderable
|
73
|
+
|
74
|
+
def initialize
|
75
|
+
@cells = Array.new
|
76
|
+
@buttons = Array.new
|
77
|
+
end
|
78
|
+
|
79
|
+
def cell data
|
80
|
+
@cells << DataTableRowCell.new(data)
|
81
|
+
end
|
82
|
+
|
83
|
+
def button type_or_title, url, *args
|
84
|
+
if type_or_title.is_a? Symbol
|
85
|
+
@buttons << DataTableRowButton.new(type_or_title,type_or_title.to_s,url,args)
|
86
|
+
else
|
87
|
+
@buttons << DataTableRowButton.new(:text,type_or_title.to_s,url,args)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def render
|
92
|
+
content_tag "tr", compact_render(*@cells)+content_tag("td",compact_render(*@buttons),:class => "buttons")
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
class DataTableRowCell < Renderable
|
98
|
+
|
99
|
+
def initialize data
|
100
|
+
@data = data
|
101
|
+
end
|
102
|
+
|
103
|
+
def render
|
104
|
+
content_tag "td", @data
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
class DataTableRowButton < Renderable
|
110
|
+
|
111
|
+
def initialize type, text, url, options
|
112
|
+
init options, :remote => true, :confirm => "Delete resource?"
|
113
|
+
@type = type
|
114
|
+
@text = text
|
115
|
+
@url = url
|
116
|
+
end
|
117
|
+
|
118
|
+
def render
|
119
|
+
case @type
|
120
|
+
when :text
|
121
|
+
link_to @text, @url
|
122
|
+
when :print
|
123
|
+
link_to @text, @url, :class => :print
|
124
|
+
when :show
|
125
|
+
link_to @text, @url, :class => :show
|
126
|
+
when :edit
|
127
|
+
link_to @text, @url, :class => :edit
|
128
|
+
when :destroy
|
129
|
+
if @options[:remote]
|
130
|
+
link_to @text, @url, :class => :destroy, :method => :delete, :data => { :confirm => @options[:confirm] }
|
131
|
+
else
|
132
|
+
link_to @text, @url, :class => :destroy
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|