golden-theme 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -0
- data/app/assets/javascripts/golden/theme/bootstrap.js.coffee +7 -0
- data/app/assets/javascripts/golden/theme/foundation.js.coffee +7 -0
- data/app/assets/javascripts/golden/theme/foundation/ajax-chosen.js.coffee +10 -0
- data/app/assets/javascripts/golden/theme/foundation/ajax-tabs.js.coffee +42 -0
- data/app/assets/javascripts/golden/theme/foundation/bench-util-jquery.js.coffee +48 -0
- data/app/assets/javascripts/golden/theme/foundation/modal.js.coffee +60 -0
- data/app/assets/stylesheets/golden/theme/foundation.css.sass +4 -0
- data/app/assets/stylesheets/golden/theme/foundation/devise.css.sass +2 -0
- data/app/controllers/concerns/golden/theme/foundation/pagination.rb +33 -0
- data/app/views/application/{_flash_messages.html.erb → bootstrap/_flash_messages.html.erb} +1 -1
- data/app/views/application/bootstrap/_main_navigation.html.erb +1 -1
- data/app/views/application/bootstrap/_user_navigation.html.erb +3 -3
- data/app/views/application/foundation/_flash_messages.html.erb +10 -0
- data/app/views/application/foundation/_header.html.erb +17 -0
- data/app/views/application/foundation/_main_navigation.html.erb +5 -0
- data/app/views/application/foundation/_pagination.html.erb +9 -0
- data/app/views/application/foundation/_user_navigation.html.erb +19 -0
- data/config/locales/application.en.yml +16 -0
- data/config/locales/application.zh-TW.yml +16 -0
- data/golden-theme.gemspec +6 -1
- data/lib/golden/theme.rb +7 -0
- data/lib/golden/theme/bootstrap/alert_helper.rb +25 -0
- data/{app/helpers → lib}/golden/theme/bootstrap/button_helper.rb +1 -1
- data/{app/helpers → lib}/golden/theme/bootstrap/common_helper.rb +6 -6
- data/lib/golden/theme/bootstrap/deprecated_helper.rb +95 -0
- data/{app/helpers → lib}/golden/theme/bootstrap/dropdown_helper.rb +4 -4
- data/{app/helpers → lib}/golden/theme/bootstrap/link_helper.rb +10 -10
- data/lib/golden/theme/bootstrap/link_renderer.rb +3 -3
- data/{app/helpers → lib}/golden/theme/bootstrap/modal_helper.rb +7 -8
- data/{app/helpers → lib}/golden/theme/bootstrap/tab_helper.rb +19 -19
- data/lib/golden/theme/engine.rb +3 -0
- data/lib/golden/theme/foundation/alerts_helper.rb +19 -0
- data/lib/golden/theme/foundation/buttons_helper.rb +11 -0
- data/lib/golden/theme/foundation/common_helper.rb +66 -0
- data/lib/golden/theme/foundation/dropdowns_helper.rb +47 -0
- data/lib/golden/theme/foundation/link_helper.rb +56 -0
- data/lib/golden/theme/foundation/link_renderer.rb +63 -0
- data/lib/golden/theme/foundation/reveal_modal_helper.rb +63 -0
- data/lib/golden/theme/foundation/sub_nav_helper.rb +11 -0
- data/lib/golden/theme/foundation/tabs_helper.rb +58 -0
- data/lib/golden/theme/foundation/top_bar_helper.rb +16 -0
- data/lib/golden/theme/helpers.rb +24 -0
- data/lib/golden/theme/version.rb +1 -1
- metadata +79 -12
- data/app/assets/javascripts/golden/theme/bootstrap.js +0 -7
- data/app/helpers/golden/theme/bootstrap/alert_helper.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd5fdd8028f9c69c2c4ecec645dc9a7d067c258f
|
4
|
+
data.tar.gz: 3ab216688d497e5066e5cb69e6f2054380e41c02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2288fb74a13f1d5d996987c7d1e18ad5abc0e2e384faf5d2789ce1cd37ac04d56365af4cfcff48fbb26399d972f25d94a442a6a075f07c9bdb929af37a666115
|
7
|
+
data.tar.gz: 073de71bebbdbe64a4729bf3e45f24c89a26b3828ccbc38e2da93e29ee3266eb34906ff5702339d65aac52f82fb598acc31a980ac9a9b6b58ee4e11be14acb8b
|
data/README.md
CHANGED
@@ -18,6 +18,14 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
+
Add following to `application_controller.rb` with `:bootstrap` or `:foundation`
|
22
|
+
|
23
|
+
```
|
24
|
+
before_action do
|
25
|
+
golden_theme_framework :bootstrap
|
26
|
+
end
|
27
|
+
```
|
28
|
+
|
21
29
|
## Contributing
|
22
30
|
|
23
31
|
1. Fork it ( https://github.com/[my-github-username]/golden-theme/fork )
|
@@ -0,0 +1,42 @@
|
|
1
|
+
$ ->
|
2
|
+
$('.nav-tabs-ajax')
|
3
|
+
.on 'ajax:beforeSend', 'a[data-toggle="tab"]', ->
|
4
|
+
$.bench.util.replaceDataTarget $(this), 'Loading...'
|
5
|
+
.on 'ajax:success', 'a[data-toggle="tab"]', (event, data, status, xhr) ->
|
6
|
+
$.bench.util.replaceDataTarget $(this), data
|
7
|
+
$.bench.util.enableChosen()
|
8
|
+
.on 'ajax:error', 'a[data-toggle="tab"]', (event, xhr, status, error) ->
|
9
|
+
if error == 'Unauthorized' or xhr.status == 401
|
10
|
+
$.bench.util.replaceDataTarget $(this), ''
|
11
|
+
$.bench.util.redirect_to_unauthorized_url
|
12
|
+
else
|
13
|
+
$.bench.util.replaceDataTarget $(this), status
|
14
|
+
|
15
|
+
$('.tabs-content')
|
16
|
+
.on 'ajax:success', '.pagination a[data-toggle="tab"]', (event, data, status, xhr) ->
|
17
|
+
$.bench.util.replaceDataTarget $(this), data
|
18
|
+
.on 'ajax:error', '.pagination a[data-toggle="tab"]', (event, xhr, status, error) ->
|
19
|
+
if error == 'Unauthorized' or xhr.status == 401
|
20
|
+
$.bench.util.replaceDataTarget $(this), ''
|
21
|
+
$.bench.util.redirect_to_unauthorized_url
|
22
|
+
else
|
23
|
+
$.bench.util.replaceDataTarget $(this), status
|
24
|
+
|
25
|
+
$('.tabs-content .content')
|
26
|
+
.on 'ajax:success', '.simple_form', (event, data, status, xhr) ->
|
27
|
+
tab_pane = $(this).parent()
|
28
|
+
$.bench.util.appendFeedback(tab_pane, data)
|
29
|
+
if $.bench.util.hasErrorFeedback(tab_pane)
|
30
|
+
$.bench.util.replaceFeedback(tab_pane)
|
31
|
+
$.bench.util.enableChosen()
|
32
|
+
return true
|
33
|
+
tab_pane.html(data)
|
34
|
+
$.bench.util.enableChosen()
|
35
|
+
tab_pane.effect('highlight', 'slow')
|
36
|
+
.on 'ajax:error', '.simple_form', (event, xhr, status, error) ->
|
37
|
+
tab_pane = $(this).parent()
|
38
|
+
if error == 'Unauthorized' or xhr.status == 401
|
39
|
+
tab_pane.html('')
|
40
|
+
$.bench.util.redirect_to_unauthorized_url
|
41
|
+
else
|
42
|
+
tab_pane.html(status)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
$ ->
|
2
|
+
#### namespace ####
|
3
|
+
|
4
|
+
$.bench ||= {}
|
5
|
+
$.bench.util ||= {}
|
6
|
+
|
7
|
+
|
8
|
+
#### util ####
|
9
|
+
|
10
|
+
$.bench.util.clearSelectOptions = (subject, disabled = true) ->
|
11
|
+
blank_option = $('<option>').attr('value', '')
|
12
|
+
if disabled
|
13
|
+
subject.prop('disabled', true)
|
14
|
+
subject.empty().append(blank_option)
|
15
|
+
|
16
|
+
$.bench.util.appendSelectOptions = (subject, choices, disabled = false) ->
|
17
|
+
return unless choices
|
18
|
+
$.each choices, (i, hash) ->
|
19
|
+
option = $('<option>').attr('value', hash['id']).text(hash['name'])
|
20
|
+
subject.append option
|
21
|
+
if !disabled
|
22
|
+
subject.prop('disabled', false)
|
23
|
+
subject.focus().children().first().text('')
|
24
|
+
|
25
|
+
$.bench.util.appendFeedback = (container, data) ->
|
26
|
+
if container.find('.feedback').size() < 1
|
27
|
+
$('<div>').addClass('feedback hide').html(data).appendTo(container)
|
28
|
+
|
29
|
+
$.bench.util.replaceFeedback = (container) ->
|
30
|
+
content = container.children('.feedback').html()
|
31
|
+
container.html(content)
|
32
|
+
|
33
|
+
$.bench.util.hasErrorFeedback = (container) ->
|
34
|
+
container.find('.feedback .alert-box warning').size() > 0
|
35
|
+
|
36
|
+
$.bench.util.replaceDataTarget = (subject, data) ->
|
37
|
+
target = $(subject.attr('data-target'))
|
38
|
+
target.html(data)
|
39
|
+
|
40
|
+
$.bench.util.enableChosen = () ->
|
41
|
+
$('.chosen-select, .ajax-chosen-select').chosen
|
42
|
+
allow_single_deselect: true
|
43
|
+
no_results_text: 'No results matched'
|
44
|
+
width: '100%'
|
45
|
+
|
46
|
+
$.bench.util.redirect_to_unauthorized_url = () ->
|
47
|
+
url = $('#unauthorized_sign_out_url').prop('href')
|
48
|
+
window.location.replace(url)
|
@@ -0,0 +1,60 @@
|
|
1
|
+
$ ->
|
2
|
+
#### namespace ####
|
3
|
+
|
4
|
+
$.modal ||= {}
|
5
|
+
|
6
|
+
#### modal ####
|
7
|
+
$.modal.showErrorModal = (status, error, modal = $(this)) ->
|
8
|
+
modal.html($('#error-modal').html())
|
9
|
+
.find('.modal-header h3').html(status).end()
|
10
|
+
.children('.modal-body').html(error || 'No Connection!')
|
11
|
+
|
12
|
+
$.modal.appendFeedback = (modal, data) ->
|
13
|
+
$('<div>').addClass('feedback hide').html(data).appendTo(modal)
|
14
|
+
|
15
|
+
$.modal.replaceFeedback = (modal) ->
|
16
|
+
modal.html(modal.children('.feedback').html())
|
17
|
+
$.modal.enableChosen()
|
18
|
+
|
19
|
+
$.modal.submitForm = (submit_id, modal = $(this)) ->
|
20
|
+
modal.find('.feedback').remove().end()
|
21
|
+
.modal('hide')
|
22
|
+
$.modal.disableOtherSubmit submit_id
|
23
|
+
$.modal.enableSingleSubmit submit_id
|
24
|
+
$(submit_id).removeAttr('data-toggle').click()
|
25
|
+
return true
|
26
|
+
|
27
|
+
$.modal.replaceTable = (table_id, modal = $(this)) ->
|
28
|
+
feedback_table = modal.find('.table')
|
29
|
+
table = $(table_id).find('.table')
|
30
|
+
table.html(feedback_table.html())
|
31
|
+
modal.find('.feedback').remove().end()
|
32
|
+
.modal('hide')
|
33
|
+
table.effect('shake')
|
34
|
+
return true
|
35
|
+
|
36
|
+
# $.rails.disableFormElements(form) will disable all disable-with element
|
37
|
+
$.modal.disableSingleSubmit = (element_id) ->
|
38
|
+
$(element_id).data('modal:enable-with', $(element_id).val())
|
39
|
+
$(element_id).val($(element_id).data('disable-with'))
|
40
|
+
$(element_id).prop('disabled', true)
|
41
|
+
|
42
|
+
# $.rails.enableFormElements(form) will enable all disable-with element
|
43
|
+
$.modal.enableSingleSubmit = (element_id) ->
|
44
|
+
if $(element_id).data('modal:enable-with')
|
45
|
+
$(element_id).val($(element_id).data('modal:enable-with'))
|
46
|
+
$(element_id).prop('disabled', false)
|
47
|
+
|
48
|
+
# disable other submit buttons other than the specified one
|
49
|
+
$.modal.disableOtherSubmit = (submit_id) ->
|
50
|
+
submit_button = $(submit_id)
|
51
|
+
submit_button.parents('form').find($.rails.disableSelector).each () ->
|
52
|
+
if submit_button.val() != $(this).val()
|
53
|
+
$(this).prop('disabled', true)
|
54
|
+
$(this).removeAttr('data-disable-with')
|
55
|
+
|
56
|
+
$.modal.enableChosen = () ->
|
57
|
+
$('.chosen-select').chosen
|
58
|
+
allow_single_deselect: true
|
59
|
+
no_results_text: 'No results matched'
|
60
|
+
width: '100%'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Golden::Theme::Foundation
|
2
|
+
module Pagination
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
before_action :clear_pagination_options
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def clear_pagination_options
|
15
|
+
Golden::Theme::Foundation::LinkRenderer.link_options = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_ajax_tab_pagination_render_options tab_name
|
19
|
+
Golden::Theme::Foundation::LinkRenderer.link_options = {
|
20
|
+
'data-remote' => true,
|
21
|
+
'data-type' => :html,
|
22
|
+
'data-toggle' => 'tab',
|
23
|
+
'data-target' => "##{tab_name}"
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def last_page_collection query
|
28
|
+
last_page = query.paginate(page: 1).total_pages
|
29
|
+
params[:page] = last_page
|
30
|
+
query.paginate page: last_page
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -3,11 +3,11 @@
|
|
3
3
|
</header>
|
4
4
|
|
5
5
|
<div id="user-identity">
|
6
|
-
<%=
|
6
|
+
<%= bootstrap_ul_tag class: 'nav navbar-nav pull-right' do |li|
|
7
7
|
if signed_in?
|
8
8
|
li << [
|
9
|
-
|
10
|
-
|
9
|
+
bootstrap_dropdown_toggle(current_user.name),
|
10
|
+
bootstrap_dropdown_menu do |li2|
|
11
11
|
li2 << link_to_edit_user_profile
|
12
12
|
li2 << ['', class: 'divider']
|
13
13
|
li2 << link_to_user_sign_out
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<div class="fixed">
|
2
|
+
<nav class="top-bar" data-topbar role="navigation">
|
3
|
+
<ul class="title-area">
|
4
|
+
<li class="name">
|
5
|
+
<h1><%= link_to t('.site_title'), main_app.root_url %></h1>
|
6
|
+
</li>
|
7
|
+
<li class="toggle-topbar menu-icon">
|
8
|
+
<a href="#"><span><%= t('.menu') %></span></a>
|
9
|
+
</li>
|
10
|
+
</ul>
|
11
|
+
|
12
|
+
<section class="top-bar-section">
|
13
|
+
<%= render 'application/foundation/main_navigation' %>
|
14
|
+
<%= render 'application/foundation/user_navigation' %>
|
15
|
+
</section>
|
16
|
+
</nav>
|
17
|
+
</div>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<div id="user-identity">
|
2
|
+
<h5 class="hide"><%= t('.title') %></h5>
|
3
|
+
<%= foundation_ul_tag class: 'right' do |li|
|
4
|
+
if signed_in?
|
5
|
+
li << [
|
6
|
+
foundation_top_bar_dropdown_link_to(current_user.name),
|
7
|
+
foundation_top_bar_dropdown_ul_tag do |li2|
|
8
|
+
li2 << link_to_edit_user_profile
|
9
|
+
li2 << ['', class: 'divider']
|
10
|
+
li2 << link_to_user_sign_out
|
11
|
+
end,
|
12
|
+
{ class: 'has-dropdown' }
|
13
|
+
]
|
14
|
+
else
|
15
|
+
li << link_to_user_sign_up
|
16
|
+
li << link_to_user_sign_in
|
17
|
+
end
|
18
|
+
end %>
|
19
|
+
</div>
|
@@ -17,3 +17,19 @@ en:
|
|
17
17
|
pagination:
|
18
18
|
previous_label: '←'
|
19
19
|
next_label: '→'
|
20
|
+
foundation:
|
21
|
+
header:
|
22
|
+
nav_toggle: 'Toggle navigation'
|
23
|
+
site_title: 'GoldenTheme'
|
24
|
+
menu: 'Menu'
|
25
|
+
main_navigation:
|
26
|
+
title: 'Main navigation'
|
27
|
+
user_navigation:
|
28
|
+
title: 'User navigation'
|
29
|
+
sign_up: 'Sign Up'
|
30
|
+
sign_in: 'Sign In'
|
31
|
+
sign_out: 'Sign Out'
|
32
|
+
edit_profile: 'Edit Profile'
|
33
|
+
pagination:
|
34
|
+
previous_label: '←'
|
35
|
+
next_label: '→'
|
@@ -17,3 +17,19 @@ zh-TW:
|
|
17
17
|
pagination:
|
18
18
|
previous_label: '←'
|
19
19
|
next_label: '→'
|
20
|
+
foundation:
|
21
|
+
header:
|
22
|
+
nav_toggle: '切換導覽列'
|
23
|
+
site_title: 'GoldenTheme'
|
24
|
+
menu: '選單'
|
25
|
+
main_navigation:
|
26
|
+
title: '網站導覽'
|
27
|
+
user_navigation:
|
28
|
+
title: '用戶導覽'
|
29
|
+
sign_up: '註冊'
|
30
|
+
sign_in: '登入'
|
31
|
+
sign_out: '登出'
|
32
|
+
edit_profile: '編輯個人資料'
|
33
|
+
pagination:
|
34
|
+
previous_label: '←'
|
35
|
+
next_label: '→'
|
data/golden-theme.gemspec
CHANGED
@@ -22,9 +22,14 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency 'rake'
|
23
23
|
|
24
24
|
spec.add_dependency 'sass-rails'
|
25
|
-
spec.add_dependency 'bootstrap-sass'
|
26
25
|
spec.add_dependency 'compass-rails'
|
27
26
|
|
27
|
+
spec.add_dependency 'bootstrap-sass'
|
28
|
+
spec.add_dependency 'autoprefixer-rails'
|
29
|
+
|
30
|
+
spec.add_dependency 'foundation-rails'
|
31
|
+
spec.add_dependency 'foundation-icons-sass-rails'
|
32
|
+
|
28
33
|
spec.add_dependency 'coffee-rails'
|
29
34
|
spec.add_dependency 'jquery-rails'
|
30
35
|
spec.add_dependency 'jquery-ui-rails'
|
data/lib/golden/theme.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'golden/theme/version'
|
2
2
|
|
3
3
|
require 'bootstrap-sass'
|
4
|
+
|
5
|
+
require 'foundation-rails'
|
6
|
+
require 'foundation-icons-sass-rails'
|
7
|
+
|
4
8
|
require 'compass-rails'
|
5
9
|
require 'jquery-ui-rails'
|
6
10
|
require 'chosen-rails'
|
@@ -12,5 +16,8 @@ module Golden
|
|
12
16
|
end
|
13
17
|
end
|
14
18
|
|
19
|
+
require 'golden/theme/helpers'
|
15
20
|
require 'golden/theme/engine'
|
21
|
+
|
16
22
|
require 'golden/theme/bootstrap/link_renderer'
|
23
|
+
require 'golden/theme/foundation/link_renderer'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Golden::Theme::Bootstrap
|
2
|
+
module AlertHelper
|
3
|
+
def bootstrap_alert_box key, value
|
4
|
+
alert_class = 'alert alert-dismissable'
|
5
|
+
alert_class << case key.to_sym
|
6
|
+
when :notice, :alert
|
7
|
+
" alert-warning #{key}"
|
8
|
+
when :error
|
9
|
+
" alert-danger #{key}"
|
10
|
+
else
|
11
|
+
" alert-#{key} #{key}"
|
12
|
+
end
|
13
|
+
button_options = {
|
14
|
+
type: 'button',
|
15
|
+
name: nil,
|
16
|
+
class: 'close',
|
17
|
+
data: { dismiss: 'alert' }
|
18
|
+
}
|
19
|
+
content_tag :div, class: alert_class do
|
20
|
+
concat button_tag('×'.html_safe, button_options)
|
21
|
+
concat value
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|