effective_style_guide 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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +366 -0
- data/Rakefile +20 -0
- data/app/controllers/effective/style_guide_controller.rb +19 -0
- data/app/models/effective/access_denied.rb +17 -0
- data/app/models/effective/datatables/style_guide.rb +44 -0
- data/app/models/effective/style_guide.rb +28 -0
- data/app/views/effective/style_guide/_alerts.html.haml +14 -0
- data/app/views/effective/style_guide/_breadcrumbs.html.haml +12 -0
- data/app/views/effective/style_guide/_buttons.html.haml +52 -0
- data/app/views/effective/style_guide/_effective_datatable.html.haml +5 -0
- data/app/views/effective/style_guide/_form_horizontal.html.haml +38 -0
- data/app/views/effective/style_guide/_form_inline.html.haml +16 -0
- data/app/views/effective/style_guide/_form_vertical.html.haml +36 -0
- data/app/views/effective/style_guide/_jumbotron.html.haml +5 -0
- data/app/views/effective/style_guide/_labels.html.haml +37 -0
- data/app/views/effective/style_guide/_list_groups.html.haml +23 -0
- data/app/views/effective/style_guide/_modals.html.haml +69 -0
- data/app/views/effective/style_guide/_navs.html.haml +33 -0
- data/app/views/effective/style_guide/_pagination.html.haml +38 -0
- data/app/views/effective/style_guide/_panels.html.haml +36 -0
- data/app/views/effective/style_guide/_progress_bars.html.haml +30 -0
- data/app/views/effective/style_guide/_tables.html.haml +15 -0
- data/app/views/effective/style_guide/_thumbnails.html.haml +17 -0
- data/app/views/effective/style_guide/_typography.html.haml +20 -0
- data/app/views/effective/style_guide/_wells.html.haml +3 -0
- data/app/views/effective/style_guide/show.html.haml +88 -0
- data/config/routes.rb +11 -0
- data/lib/effective_style_guide/engine.rb +11 -0
- data/lib/effective_style_guide/version.rb +3 -0
- data/lib/effective_style_guide.rb +20 -0
- data/lib/generators/effective_style_guide/install_generator.rb +16 -0
- data/lib/generators/templates/README +1 -0
- data/lib/generators/templates/effective_style_guide.rb +26 -0
- metadata +136 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
= simple_form_for Effective::StyleGuide.new(), :url => '/' do |f|
|
2
|
+
= f.input :title, :hint => 'please enter a title (this is a standard text field)'
|
3
|
+
= f.input :email, :hint => 'please enter an email address (this is an email field)'
|
4
|
+
= f.input :password, :hint => 'please enter a password (this is a password field)'
|
5
|
+
- if defined?(EffectiveOrders)
|
6
|
+
= f.input :price, :as => :price, :hint => 'please enter a price (this is a price field from EffectiveOrders)'
|
7
|
+
= f.input :number, :hint => 'please enter a number (this is a number field)'
|
8
|
+
= f.input :range, :as => :range, :hint => 'please enter a number range (this is a range field)'
|
9
|
+
= f.input :category, :as => :select, :collection => 10.times.map { |x| "Category #{x}"}, :hint => 'please select a category (this is a select field)'
|
10
|
+
= f.input :drink, :as => :check_boxes, :wrapper => :vertical_inline_radio_and_checkboxes, :collection => ['Water', 'Tea', 'Coffee', 'Soda'], :hint => 'please select one or more drinks (this is a check_boxes :wrapper => :vertical_inline_radio_and_checkboxes field)'
|
11
|
+
= f.input :food, :as => :radio_buttons, :wrapper => :vertical_inline_radio_and_checkboxes, :collection => ['Pasta', 'Rice', 'Potato', 'Couscous'], :hint => 'please select one food (this is a radio_buttons :wrapper => :vertical_inline_radio_and_checkboxes field)'
|
12
|
+
= f.input :content, :hint => 'please enter a whole bunch of content (this is a textarea)'
|
13
|
+
= f.input :archived, :hint => 'please select true or false (this is a boolean field)'
|
14
|
+
= f.input :drink, :as => :check_boxes, :collection => ['Water', 'Tea', 'Coffee', 'Soda'], :hint => 'please select one or more drinks (this is a check_boxes field)'
|
15
|
+
= f.input :food, :as => :radio_buttons, :collection => ['Pasta', 'Rice', 'Potato', 'Couscous'], :hint => 'please select one food (this is a radio_buttons field)'
|
16
|
+
= f.button :submit
|
17
|
+
|
18
|
+
%hr
|
19
|
+
.inline-example Form Vertical Invalid State
|
20
|
+
|
21
|
+
= simple_form_for Effective::StyleGuide.new().tap { |s| s.valid? }, :url => '/' do |f|
|
22
|
+
= f.input :title, :hint => 'please enter a title (this is a standard text field)'
|
23
|
+
= f.input :email, :hint => 'please enter an email address (this is an email field)'
|
24
|
+
= f.input :password, :hint => 'please enter a password (this is a password field)'
|
25
|
+
- if defined?(EffectiveOrders)
|
26
|
+
= f.input :price, :as => :price, :hint => 'please enter a price (this is a price field from EffectiveOrders)'
|
27
|
+
= f.input :number, :hint => 'please enter a number (this is a number field)'
|
28
|
+
= f.input :range, :as => :range, :hint => 'please enter a number range (this is a range field)'
|
29
|
+
= f.input :category, :as => :select, :collection => 10.times.map { |x| "Category #{x}"}, :hint => 'please select a category (this is a select field)'
|
30
|
+
= f.input :drink, :as => :check_boxes, :wrapper => :vertical_inline_radio_and_checkboxes, :collection => ['Water', 'Tea', 'Coffee', 'Soda'], :hint => 'please select one or more drinks (this is a check_boxes :wrapper => :vertical_inline_radio_and_checkboxes field)'
|
31
|
+
= f.input :food, :as => :radio_buttons, :wrapper => :vertical_inline_radio_and_checkboxes, :collection => ['Pasta', 'Rice', 'Potato', 'Couscous'], :hint => 'please select one food (this is a radio_buttons :wrapper => :vertical_inline_radio_and_checkboxes field)'
|
32
|
+
= f.input :content, :hint => 'please enter a whole bunch of content (this is a textarea)'
|
33
|
+
= f.input :archived, :hint => 'please select true or false (this is a boolean field)'
|
34
|
+
= f.input :drink, :as => :check_boxes, :collection => ['Water', 'Tea', 'Coffee', 'Soda'], :hint => 'please select one or more drinks (this is a check_boxes field)'
|
35
|
+
= f.input :food, :as => :radio_buttons, :collection => ['Pasta', 'Rice', 'Potato', 'Couscous'], :hint => 'please select one food (this is a radio_buttons field)'
|
36
|
+
= f.button :submit
|
@@ -0,0 +1,37 @@
|
|
1
|
+
- variations = ['Default', 'Primary', 'Success', 'Info', 'Warning', 'Danger']
|
2
|
+
|
3
|
+
%h1
|
4
|
+
Example heading
|
5
|
+
%span.label.label-default New
|
6
|
+
|
7
|
+
%h2
|
8
|
+
Example heading
|
9
|
+
%span.label.label-default New
|
10
|
+
|
11
|
+
%h3
|
12
|
+
Example heading
|
13
|
+
%span.label.label-default New
|
14
|
+
|
15
|
+
%h4
|
16
|
+
Example heading
|
17
|
+
%span.label.label-default New
|
18
|
+
|
19
|
+
%h5
|
20
|
+
Example heading
|
21
|
+
%span.label.label-default New
|
22
|
+
|
23
|
+
%h6
|
24
|
+
Example heading
|
25
|
+
%span.label.label-default New
|
26
|
+
|
27
|
+
%br
|
28
|
+
|
29
|
+
- variations.each do |variation|
|
30
|
+
%span.label{:class => "label-#{variation.downcase}"}= variation
|
31
|
+
|
32
|
+
%br
|
33
|
+
%br
|
34
|
+
|
35
|
+
%a{:href => '#'}
|
36
|
+
Inbox
|
37
|
+
%span.badge 42
|
@@ -0,0 +1,23 @@
|
|
1
|
+
%ul.list-group
|
2
|
+
- 4.times do
|
3
|
+
%li.list-group-item= Faker::Lorem.sentence(1)
|
4
|
+
|
5
|
+
%ul.list-group
|
6
|
+
- 4.times do
|
7
|
+
%li.list-group-item
|
8
|
+
%span.badge= [*1..20].sample
|
9
|
+
= Faker::Lorem.sentence(1)
|
10
|
+
|
11
|
+
%ul.list-group
|
12
|
+
- 4.times do |x|
|
13
|
+
%a.list-group-item{:href => '#', :class => ('active' if x == 0)}= Faker::Lorem.sentence(1)
|
14
|
+
|
15
|
+
%ul.list-group
|
16
|
+
- 4.times do |x|
|
17
|
+
%a.list-group-item{:href => '#', :class => ('disabled' if x == 0)}= Faker::Lorem.sentence(1)
|
18
|
+
|
19
|
+
.list-group
|
20
|
+
- 4.times do |x|
|
21
|
+
%a.list-group-item{:href => '#', :class => ('active' if x == 1)}
|
22
|
+
%h4.list-group-item-heading= Faker::Lorem.sentence(1)
|
23
|
+
%p.list-group-item-text= Faker::Lorem.sentence(3)
|
@@ -0,0 +1,69 @@
|
|
1
|
+
%button.btn.btn-primary{'data-toggle' => 'modal', 'data-target' => '#modalStandard'} Open Standard Modal
|
2
|
+
|
3
|
+
#modalStandard.modal.fade{:tabindex => -1, :role => 'dialog', 'aria-hidden' => true, 'arai-labelledby' => 'modalStandardLabel'}
|
4
|
+
.modal-dialog
|
5
|
+
.modal-content
|
6
|
+
.modal-header
|
7
|
+
%button.close{'data-dismiss' => 'modal'}
|
8
|
+
%span{'aria-hidden' => true} ×
|
9
|
+
%span.sr-only Close
|
10
|
+
%h4.modal-title{:id => 'modalStandardLabel'} Standard Modal Title
|
11
|
+
.modal-body
|
12
|
+
%h4 Text in a modal
|
13
|
+
%p= Faker::Lorem.paragraph(3)
|
14
|
+
%br
|
15
|
+
|
16
|
+
%h4 Tooltips in a standard modal
|
17
|
+
%p
|
18
|
+
This is a
|
19
|
+
%a{:href => '#', 'data-toggle' => 'tooltip', 'title' => 'This is a tooltip'} Link with Tooltip
|
20
|
+
%br
|
21
|
+
|
22
|
+
%h4 Overflowing text to show scroll behaviour
|
23
|
+
- 15.times do
|
24
|
+
%p= Faker::Lorem.paragraph(3)
|
25
|
+
%br
|
26
|
+
|
27
|
+
.modal-footer
|
28
|
+
%button.btn.btn-primary{:type => 'button'} Save Changes
|
29
|
+
%button.btn.btn-default{'data-dismiss' => 'modal'} Close
|
30
|
+
|
31
|
+
|
32
|
+
%button.btn.btn-primary{'data-toggle' => 'modal', 'data-target' => '#modalLarge'} Open Large Modal
|
33
|
+
|
34
|
+
#modalLarge.modal.fade{:tabindex => -1, :role => 'dialog', 'aria-hidden' => true, 'arai-labelledby' => 'modalLargeLabel'}
|
35
|
+
.modal-dialog.modal-lg
|
36
|
+
.modal-content
|
37
|
+
.modal-header
|
38
|
+
%button.close{'data-dismiss' => 'modal'}
|
39
|
+
%span{'aria-hidden' => true} ×
|
40
|
+
%span.sr-only Close
|
41
|
+
%h4.modal-title{:id => 'modalLargeLabel'} Large Modal Title
|
42
|
+
.modal-body
|
43
|
+
%h4 Text in a large modal
|
44
|
+
%p= Faker::Lorem.paragraph(3)
|
45
|
+
%br
|
46
|
+
|
47
|
+
.modal-footer
|
48
|
+
%button.btn.btn-primary{:type => 'button'} Save Changes
|
49
|
+
%button.btn.btn-default{'data-dismiss' => 'modal'} Close
|
50
|
+
|
51
|
+
%button.btn.btn-primary{'data-toggle' => 'modal', 'data-target' => '#modalSmall'} Open Small Modal
|
52
|
+
|
53
|
+
#modalSmall.modal.fade{:tabindex => -1, :role => 'dialog', 'aria-hidden' => true, 'arai-labelledby' => 'modalSmallLabel'}
|
54
|
+
.modal-dialog.modal-sm
|
55
|
+
.modal-content
|
56
|
+
.modal-header
|
57
|
+
%button.close{'data-dismiss' => 'modal'}
|
58
|
+
%span{'aria-hidden' => true} ×
|
59
|
+
%span.sr-only Close
|
60
|
+
%h4.modal-title{:id => 'modalSmallLabel'} Small Modal Title
|
61
|
+
.modal-body
|
62
|
+
%h4 Text in a small modal
|
63
|
+
%p= Faker::Lorem.paragraph(3)
|
64
|
+
%br
|
65
|
+
|
66
|
+
.modal-footer
|
67
|
+
%button.btn.btn-primary{:type => 'button'} Save Changes
|
68
|
+
%button.btn.btn-default{'data-dismiss' => 'modal'} Close
|
69
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
%p
|
2
|
+
%ul.nav.nav-tabs
|
3
|
+
%li.active= link_to 'First Item', '#'
|
4
|
+
%li= link_to 'Second Item', '#'
|
5
|
+
%li= link_to 'Third Item', '#'
|
6
|
+
%li.dropdown
|
7
|
+
%a.dropdown-toggle{'data-toggle' => 'dropdown', :href => '#'}
|
8
|
+
Dropdown
|
9
|
+
%span.caret
|
10
|
+
%ul.dropdown-menu{:role => 'menu'}
|
11
|
+
%li= link_to 'First', '#'
|
12
|
+
%li= link_to 'Second', '#'
|
13
|
+
%li= link_to 'Third', '#'
|
14
|
+
%li.divider
|
15
|
+
%li= link_to 'Separated', '#'
|
16
|
+
|
17
|
+
%br
|
18
|
+
|
19
|
+
%p
|
20
|
+
%ul.nav.nav-pills
|
21
|
+
%li= link_to 'First Item', '#'
|
22
|
+
%li= link_to 'Second Item', '#'
|
23
|
+
%li.active= link_to 'Third Item', '#'
|
24
|
+
%li.dropdown
|
25
|
+
%a.dropdown-toggle{'data-toggle' => 'dropdown', :href => '#'}
|
26
|
+
Dropdown
|
27
|
+
%span.caret
|
28
|
+
%ul.dropdown-menu{:role => 'menu'}
|
29
|
+
%li= link_to 'First', '#'
|
30
|
+
%li= link_to 'Second', '#'
|
31
|
+
%li= link_to 'Third', '#'
|
32
|
+
%li.divider
|
33
|
+
%li= link_to 'Separated', '#'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
%ul.pagination
|
2
|
+
%li.disabled
|
3
|
+
%a{:href => '#'} «
|
4
|
+
- 1.upto(10).each do |x|
|
5
|
+
%li{:class => ('active' if x == 1)}
|
6
|
+
%a{:href => '#'}= x
|
7
|
+
%li
|
8
|
+
%a{:href => '#'} »
|
9
|
+
|
10
|
+
%ul.pagination.pagination-lg
|
11
|
+
%li
|
12
|
+
%a{:href => '#'} «
|
13
|
+
- 1.upto(10).each do |x|
|
14
|
+
%li
|
15
|
+
%a{:href => '#'}= x
|
16
|
+
%li
|
17
|
+
%a{:href => '#'} »
|
18
|
+
|
19
|
+
%ul.pagination.pagination-sm
|
20
|
+
%li
|
21
|
+
%a{:href => '#'} «
|
22
|
+
- 1.upto(10).each do |x|
|
23
|
+
%li
|
24
|
+
%a{:href => '#'}= x
|
25
|
+
%li
|
26
|
+
%a{:href => '#'} »
|
27
|
+
|
28
|
+
%ul.pager
|
29
|
+
%li
|
30
|
+
%a{:href => '#'} Previous
|
31
|
+
%li
|
32
|
+
%a{:href => '#'} Next
|
33
|
+
|
34
|
+
%ul.pager
|
35
|
+
%li.previous
|
36
|
+
%a{:href => '#'} ← Older
|
37
|
+
%li.next
|
38
|
+
%a{:href => '#'} Newer →
|
@@ -0,0 +1,36 @@
|
|
1
|
+
- variations = ['Default', 'Primary', 'Success', 'Info', 'Warning', 'Danger']
|
2
|
+
|
3
|
+
.panel.panel-default
|
4
|
+
.panel-body= Faker::Lorem.sentence(3)
|
5
|
+
|
6
|
+
- variations.each do |variation|
|
7
|
+
.panel{:class => "panel-#{variation.downcase}"}
|
8
|
+
.panel-heading= "#{variation} Panel"
|
9
|
+
.panel-body= Faker::Lorem.sentence(3)
|
10
|
+
|
11
|
+
.panel.panel-default
|
12
|
+
.panel-heading
|
13
|
+
%h3= Faker::Lorem.sentence(1)
|
14
|
+
.panel-body= Faker::Lorem.sentence(3)
|
15
|
+
|
16
|
+
.panel.panel-default
|
17
|
+
.panel-body= Faker::Lorem.sentence(3)
|
18
|
+
.panel-footer= Faker::Lorem.sentence(1)
|
19
|
+
|
20
|
+
|
21
|
+
.panel.panel-default
|
22
|
+
.panel-heading Table Panel (any non-bordered table will work here)
|
23
|
+
%table.table
|
24
|
+
%thead
|
25
|
+
%tr
|
26
|
+
%th #
|
27
|
+
%th First Name
|
28
|
+
%th Last Name
|
29
|
+
%th Email
|
30
|
+
%tbody
|
31
|
+
- 5.times do
|
32
|
+
%tr
|
33
|
+
%td= [*1..100].sample
|
34
|
+
%td= Faker::Name.first_name
|
35
|
+
%td= Faker::Name.last_name
|
36
|
+
%td= Faker::Internet.email
|
@@ -0,0 +1,30 @@
|
|
1
|
+
- variations = ['Default', 'Primary', 'Success', 'Info', 'Warning', 'Danger']
|
2
|
+
|
3
|
+
.progress
|
4
|
+
.progress-bar{:role => 'progressbar', 'aria-valuenow' => 40, 'aria-valuemin' => 0, 'aria-valuemax' => 100, :style => 'width: 40%'}
|
5
|
+
%span.sr-only 40% Complete
|
6
|
+
|
7
|
+
.progress
|
8
|
+
.progress-bar{:role => 'progressbar', 'aria-valuenow' => 60, 'aria-valuemin' => 0, 'aria-valuemax' => 100, :style => 'width: 60%'}
|
9
|
+
60%
|
10
|
+
|
11
|
+
.progress
|
12
|
+
.progress-bar{:role => 'progressbar', 'aria-valuenow' => 0, 'aria-valuemin' => 0, 'aria-valuemax' => 100}
|
13
|
+
0%
|
14
|
+
|
15
|
+
.progress
|
16
|
+
.progress-bar{:role => 'progressbar', 'aria-valuenow' => 2, 'aria-valuemin' => 0, 'aria-valuemax' => 100, :style => 'width: 2%'}
|
17
|
+
2%
|
18
|
+
|
19
|
+
- variations.last(4).each_with_index do |variation, index|
|
20
|
+
.progress
|
21
|
+
.progress-bar{:class => "progress-bar-#{variation.downcase}", :role => 'progressbar', 'aria-valuenow' => (index+2)*20, 'aria-valuemin' => 0, 'aria-valuemax' => 100, :style => "width: #{(index+2)*20}%"}
|
22
|
+
= "#{(index+2)*20}%"
|
23
|
+
|
24
|
+
.progress
|
25
|
+
.progress-bar.progress-bar-striped.active{:role => 'progressbar', 'aria-valuenow' => 95, 'aria-valuemin' => 0, 'aria-valuemax' => 100, :style => "width: 95%"}
|
26
|
+
|
27
|
+
.progress
|
28
|
+
- variations.last(4).each_with_index do |variation, index|
|
29
|
+
.progress-bar{:class => "progress-bar-#{variation.downcase}", :role => 'progressbar', 'aria-valuenow' => (index+1)*20, 'aria-valuemin' => 0, 'aria-valuemax' => 100, :style => "width: 22%"}
|
30
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
- [nil, 'table-hover', 'table-striped', 'table-bordered', 'table-condensed'].each do |variation|
|
2
|
+
%table.table{:class => variation}
|
3
|
+
%thead
|
4
|
+
%tr
|
5
|
+
%th #
|
6
|
+
%th First Name
|
7
|
+
%th Last Name
|
8
|
+
%th Email
|
9
|
+
%tbody
|
10
|
+
- 5.times do
|
11
|
+
%tr
|
12
|
+
%td= [*1..100].sample
|
13
|
+
%td= Faker::Name.first_name
|
14
|
+
%td= Faker::Name.last_name
|
15
|
+
%td= Faker::Internet.email
|
@@ -0,0 +1,17 @@
|
|
1
|
+
.row
|
2
|
+
- 4.times do
|
3
|
+
.col-sm-3
|
4
|
+
%a.thumbnail{:href => '#'}
|
5
|
+
%img{:src => 'http://placekitten.com/171/180', :height => 180, :width => 171}
|
6
|
+
|
7
|
+
.row
|
8
|
+
- 3.times do
|
9
|
+
.col-sm-4
|
10
|
+
.thumbnail
|
11
|
+
%img{:src => 'http://placekitten.com/242/200', :height => 200, :width => 242}
|
12
|
+
.caption
|
13
|
+
%h3 Thumbnail Label
|
14
|
+
%p Cumque iste repellat rerum asperiores libero. Omnis quia et illo. Dignissimos ut quod debitis.
|
15
|
+
%p
|
16
|
+
%a.btn.btn-primary Save
|
17
|
+
%a.btn.btn-default Cancel
|
@@ -0,0 +1,20 @@
|
|
1
|
+
%h1 Heading 1
|
2
|
+
%h2 Heading 2
|
3
|
+
%h3 Heading 3
|
4
|
+
%h4 Heading 4
|
5
|
+
%h5 Heading 5
|
6
|
+
%h6 Heading 6
|
7
|
+
%p
|
8
|
+
= 'Paragraph text. '
|
9
|
+
= Faker::Lorem.paragraph(8)
|
10
|
+
%blockquote Blockquote text.
|
11
|
+
%p
|
12
|
+
%strong Strong
|
13
|
+
= '-'
|
14
|
+
%em Emphasis
|
15
|
+
= '-'
|
16
|
+
%u Underline
|
17
|
+
= '-'
|
18
|
+
%small Small
|
19
|
+
= '-'
|
20
|
+
%a{:href => '#'} Link
|
@@ -0,0 +1,88 @@
|
|
1
|
+
.row.effective-style-guide
|
2
|
+
.col-sm-3
|
3
|
+
%nav
|
4
|
+
%ul.nav.nav-pills.nav-stacked
|
5
|
+
- @partials.each_with_index do |partial, index|
|
6
|
+
%li{:class => ('active' if index == 0)}
|
7
|
+
%a{:href => "##{partial.parameterize}"}= partial.titleize
|
8
|
+
|
9
|
+
.col-sm-9
|
10
|
+
- @partials.each do |partial|
|
11
|
+
%div.example{:id => "#{partial.parameterize}"}
|
12
|
+
%span.example= partial.titleize
|
13
|
+
= render :partial => partial
|
14
|
+
|
15
|
+
- 10.times do
|
16
|
+
%br
|
17
|
+
|
18
|
+
:javascript
|
19
|
+
var initStyleGuide = function() {
|
20
|
+
$('.effective-style-guide > div > nav').affix({
|
21
|
+
offset: { top: $('.effective-style-guide > div > nav').offset().top - 20 }
|
22
|
+
});
|
23
|
+
|
24
|
+
$('body').scrollspy({ target: '.effective-style-guide > div > nav', offset: 100 });
|
25
|
+
|
26
|
+
$('.effective-style-guide > div > nav > ul a').on('click', function(event) {
|
27
|
+
event.preventDefault();
|
28
|
+
target = $(event.currentTarget).attr('href')
|
29
|
+
if(target.length > 0) { $('html, body').scrollTop($(target).offset().top); }
|
30
|
+
});
|
31
|
+
};
|
32
|
+
|
33
|
+
$(document).ready(function() { initStyleGuide(); });
|
34
|
+
$(document).on('page:change', function() { initStyleGuide(); });
|
35
|
+
|
36
|
+
:css
|
37
|
+
.effective-style-guide nav {
|
38
|
+
display: inline-block;
|
39
|
+
}
|
40
|
+
|
41
|
+
.effective-style-guide .nav > li > a {
|
42
|
+
padding: 5px 10px;
|
43
|
+
}
|
44
|
+
|
45
|
+
.effective-style-guide .affix {
|
46
|
+
position: fixed;
|
47
|
+
top: 20px;
|
48
|
+
}
|
49
|
+
|
50
|
+
.effective-style-guide div.example {
|
51
|
+
background-color: #fff;
|
52
|
+
border-color: #ddd;
|
53
|
+
border-radius: 4px 4px 0 0;
|
54
|
+
border-width: 1px;
|
55
|
+
box-shadow: none;
|
56
|
+
margin-left: 0;
|
57
|
+
margin-right: 0;
|
58
|
+
margin-bottom: 30px;
|
59
|
+
border-style: solid;
|
60
|
+
padding: 45px 15px 15px;
|
61
|
+
position: relative;
|
62
|
+
}
|
63
|
+
|
64
|
+
.effective-style-guide span.example {
|
65
|
+
color: #959595;
|
66
|
+
font-size: 12px;
|
67
|
+
font-weight: 700;
|
68
|
+
left: 15px;
|
69
|
+
letter-spacing: 1px;
|
70
|
+
position: absolute;
|
71
|
+
text-transform: uppercase;
|
72
|
+
top: 15px;
|
73
|
+
}
|
74
|
+
|
75
|
+
.effective-style-guide .inline-example {
|
76
|
+
color: #959595;
|
77
|
+
font-size: 12px;
|
78
|
+
font-weight: 700;
|
79
|
+
letter-spacing: 1px;
|
80
|
+
text-transform: uppercase;
|
81
|
+
margin-bottom: 20px;
|
82
|
+
}
|
83
|
+
|
84
|
+
/ .effective-style-guide .inline-radio-or-checkboxes > span {
|
85
|
+
/ display: inline-block;
|
86
|
+
/ margin: 0px 10px 0px 0px;
|
87
|
+
/ }
|
88
|
+
|
data/config/routes.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
mount EffectiveStyleGuide::Engine => '/', :as => 'effective_style_guide'
|
3
|
+
end
|
4
|
+
|
5
|
+
EffectiveStyleGuide::Engine.routes.draw do
|
6
|
+
scope :module => 'effective' do
|
7
|
+
match '/styleguide', :to => 'style_guide#show', :via => [:get], :as => 'style_guide'
|
8
|
+
match '/style-guide', :to => 'style_guide#show', :via => [:get]
|
9
|
+
match '/style_guide', :to => 'style_guide#show', :via => [:get]
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module EffectiveStyleGuide
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
engine_name 'effective_style_guide'
|
4
|
+
|
5
|
+
# Set up our default configuration options.
|
6
|
+
initializer "effective_style_guide.defaults", :before => :load_config_initializers do |app|
|
7
|
+
eval File.read("#{config.root}/lib/generators/templates/effective_style_guide.rb")
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "effective_style_guide/engine"
|
2
|
+
require "effective_style_guide/version"
|
3
|
+
|
4
|
+
module EffectiveStyleGuide
|
5
|
+
# The following are all valid config keys
|
6
|
+
mattr_accessor :authorization_method
|
7
|
+
mattr_accessor :layout
|
8
|
+
|
9
|
+
def self.setup
|
10
|
+
yield self
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.authorized?(controller, action, resource)
|
14
|
+
if authorization_method.respond_to?(:call) || authorization_method.kind_of?(Symbol)
|
15
|
+
raise Effective::AccessDenied.new() unless (controller || self).instance_exec(controller, action, resource, &authorization_method)
|
16
|
+
end
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module EffectiveStyleGuide
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
desc "Creates an EffectiveStyleGuide initializer in your application."
|
5
|
+
source_root File.expand_path("../../templates", __FILE__)
|
6
|
+
|
7
|
+
def copy_initializer
|
8
|
+
template "effective_style_guide.rb", "config/initializers/effective_style_guide.rb"
|
9
|
+
end
|
10
|
+
|
11
|
+
def show_readme
|
12
|
+
readme "README" if behavior == :invoke
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Thanks for using EffectiveStyleGuide
|
@@ -0,0 +1,26 @@
|
|
1
|
+
EffectiveStyleGuide.setup do |config|
|
2
|
+
# Authorization Method
|
3
|
+
#
|
4
|
+
# This method is called by all controller actions with the appropriate action and resource
|
5
|
+
# If the method returns false, an Effective::AccessDenied Error will be raised (see README.md for complete info)
|
6
|
+
#
|
7
|
+
# Use via Proc (and with CanCan):
|
8
|
+
# config.authorization_method = Proc.new { |controller, action, resource| can?(action, resource) }
|
9
|
+
#
|
10
|
+
# Use via custom method:
|
11
|
+
# config.authorization_method = :my_authorization_method
|
12
|
+
#
|
13
|
+
# And then in your application_controller.rb:
|
14
|
+
#
|
15
|
+
# def my_authorization_method(action, resource)
|
16
|
+
# current_user.is?(:admin)
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# Or disable the check completely:
|
20
|
+
# config.authorization_method = false
|
21
|
+
config.authorization_method = Proc.new { |controller, action, resource| true } # All users can see every screen
|
22
|
+
|
23
|
+
# Admin Screens Layout Settings
|
24
|
+
config.layout = 'application' # All EffectiveStyleGuide controllers will use this layout
|
25
|
+
|
26
|
+
end
|