trestle 0.8.11 → 0.8.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +11 -1
- data/README.md +8 -3
- data/app/assets/javascripts/trestle/components/_confirmation.js +22 -22
- data/app/assets/stylesheets/trestle/components/_dropdown.scss +28 -0
- data/app/assets/stylesheets/trestle/components/_fields.scss +5 -0
- data/app/assets/stylesheets/trestle/core/_defaults.scss +2 -0
- data/app/controllers/trestle/dashboard_controller.rb +1 -1
- data/app/helpers/trestle/i18n_helper.rb +6 -0
- data/app/helpers/trestle/panel_helper.rb +1 -1
- data/app/helpers/trestle/toolbars_helper.rb +2 -1
- data/app/views/layouts/trestle/admin.html.erb +5 -3
- data/app/views/trestle/application/_dialog.html.erb +2 -2
- data/app/views/trestle/application/_header.html.erb +2 -2
- data/app/views/trestle/shared/_sidebar.html.erb +1 -1
- data/config/locales/en.yml +1 -0
- data/config/locales/ko.rb +18 -0
- data/config/locales/ko.yml +96 -0
- data/gemfiles/rails-4.2.gemfile +1 -1
- data/gemfiles/rails-5.0.gemfile +1 -1
- data/gemfiles/rails-5.1.gemfile +1 -1
- data/gemfiles/rails-5.2.gemfile +1 -1
- data/gemfiles/rails-edge.gemfile +1 -1
- data/lib/generators/trestle/install/templates/trestle.rb.erb +4 -0
- data/lib/trestle.rb +5 -3
- data/lib/trestle/adapters/adapter.rb +2 -17
- data/lib/trestle/configuration.rb +3 -0
- data/lib/trestle/evaluation_context.rb +24 -0
- data/lib/trestle/form/fields/password_field.rb +4 -0
- data/lib/trestle/form/fields/select.rb +3 -1
- data/lib/trestle/form/renderer.rb +1 -0
- data/lib/trestle/navigation.rb +6 -6
- data/lib/trestle/navigation/block.rb +6 -6
- data/lib/trestle/resource.rb +6 -1
- data/lib/trestle/resource/builder.rb +6 -5
- data/lib/trestle/scopes.rb +23 -0
- data/lib/trestle/scopes/block.rb +38 -0
- data/lib/trestle/scopes/scope.rb +49 -0
- data/lib/trestle/toolbar.rb +11 -0
- data/lib/trestle/toolbar/builder.rb +8 -27
- data/lib/trestle/toolbar/item.rb +118 -0
- data/lib/trestle/toolbar/menu.rb +63 -0
- data/lib/trestle/version.rb +1 -1
- data/trestle.gemspec +4 -4
- metadata +34 -28
- data/lib/trestle/scope.rb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be67cdeb0e544dff3707615b388ab9380f23cc4f10b8ac026f77681a2b89a58d
|
4
|
+
data.tar.gz: e560c637fb2418ec119bbdb895dab33fef47af0647f5c479e53ae0bc7ca71307
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ced0081c87529f11111908d9688ccc17c8aa1816d723160980a52892ae1236628c4aa425324f051faa82029add5a042ef211e9a6e9327d3479590e68b0f25dbf
|
7
|
+
data.tar.gz: 6129c4dd280c17b4b395b58e3221728e8917a50fdecd1960eedc3ae9ccc1a6dadec63976de3780ef8f10e24022a007f9c523778740b985920e4626fc540aa472
|
data/.travis.yml
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
3
|
before_install:
|
4
|
+
- gem update --system
|
4
5
|
- gem install bundler
|
5
6
|
|
6
7
|
rvm:
|
7
|
-
- 2.
|
8
|
+
- 2.6.1
|
8
9
|
|
9
10
|
gemfile:
|
10
11
|
- gemfiles/rails-4.2.gemfile
|
@@ -15,3 +16,12 @@ gemfile:
|
|
15
16
|
|
16
17
|
addons:
|
17
18
|
chrome: stable
|
19
|
+
|
20
|
+
matrix:
|
21
|
+
exclude:
|
22
|
+
gemfile: gemfiles/rails-4.2.gemfile
|
23
|
+
|
24
|
+
include:
|
25
|
+
gemfile: gemfiles/rails-4.2.gemfile
|
26
|
+
before_install:
|
27
|
+
- gem install bundler -v '< 2'
|
data/README.md
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
[![Coveralls](https://img.shields.io/coveralls/TrestleAdmin/trestle.svg?style=flat)](https://coveralls.io/github/TrestleAdmin/trestle)
|
10
10
|
[![Code Climate](https://api.codeclimate.com/v1/badges/c529a7a9c500ed81baed/maintainability)](https://codeclimate.com/github/TrestleAdmin/trestle)
|
11
11
|
|
12
|
+
[Demo Site](https://demo.trestle.io) | [Demo Source Code](https://github.com/TrestleAdmin/RailsFlixDemo)
|
13
|
+
|
12
14
|
> A modern, responsive admin framework for Ruby on Rails
|
13
15
|
|
14
16
|
<img src="https://trestle.io/images/Trestle-Screenshot-1-1x.png?" width="50%" /><img src="https://trestle.io/images/Trestle-Screenshot-2-1x.png?" width="50%" />
|
@@ -45,9 +47,11 @@ Trestle.resource(:posts) do
|
|
45
47
|
end
|
46
48
|
|
47
49
|
# Define custom scopes for the index view
|
48
|
-
|
49
|
-
|
50
|
-
|
50
|
+
scopes do
|
51
|
+
scope :all, default: true
|
52
|
+
scope :published
|
53
|
+
scope :drafts, -> { Post.unpublished }
|
54
|
+
end
|
51
55
|
|
52
56
|
# Define the index view table listing
|
53
57
|
table do
|
@@ -98,6 +102,7 @@ The following plugins are currently available:
|
|
98
102
|
| *trestle-tinymce* | [TinyMCE](https://www.tinymce.com/) (WYSIWYG editor) integration | [GitHub](https://github.com/TrestleAdmin/trestle-tinymce) \| [RubyGems](https://rubygems.org/gems/trestle-tinymce) |
|
99
103
|
| *trestle-simplemde* | [SimpleMDE](https://simplemde.com/) (Markdown editor) integration | [GitHub](https://github.com/TrestleAdmin/trestle-simplemde) \| [RubyGems](https://rubygems.org/gems/trestle-simplemde) |
|
100
104
|
| *trestle-sidekiq* | [Sidekiq](http://sidekiq.org/) integration | [GitHub](https://github.com/TrestleAdmin/trestle-sidekiq) \| [RubyGems](https://rubygems.org/gems/trestle-sidekiq) |
|
105
|
+
| *trestle-active_storage* | [Active Storage](https://guides.rubyonrails.org/active_storage_overview.html) integration | [GitHub](https://github.com/richardvenneman/trestle-active_storage) \| [RubyGems](https://rubygems.org/gems/trestle-active_storage) |
|
101
106
|
|
102
107
|
|
103
108
|
## License
|
@@ -1,30 +1,30 @@
|
|
1
1
|
Trestle.confirmation = {};
|
2
2
|
|
3
|
-
Trestle.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
3
|
+
Trestle.ready(function() {
|
4
|
+
Trestle.confirmation.DEFAULTS = {
|
5
|
+
rootSelector: 'body',
|
6
|
+
singleton: true,
|
7
|
+
popout: true,
|
8
|
+
title: Trestle.i18n['trestle.confirmation.title'] || 'Are you sure?',
|
9
|
+
btnOkIcon: '',
|
10
|
+
btnOkClass: 'btn-primary',
|
11
|
+
btnOkLabel: Trestle.i18n['trestle.confirmation.ok'] || 'OK',
|
12
|
+
btnCancelIcon: '',
|
13
|
+
btnCancelClass: 'btn-default',
|
14
|
+
btnCancelLabel: Trestle.i18n['trestle.confirmation.cancel'] || 'Cancel',
|
15
|
+
copyAttributes: ''
|
16
|
+
};
|
16
17
|
|
17
|
-
Trestle.confirmation.CONFIRM = $.extend({}, Trestle.confirmation.DEFAULTS, {
|
18
|
-
|
19
|
-
});
|
18
|
+
Trestle.confirmation.CONFIRM = $.extend({}, Trestle.confirmation.DEFAULTS, {
|
19
|
+
selector: '[data-toggle="confirm"]'
|
20
|
+
});
|
20
21
|
|
21
|
-
Trestle.confirmation.DELETE = $.extend({}, Trestle.confirmation.DEFAULTS, {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
});
|
22
|
+
Trestle.confirmation.DELETE = $.extend({}, Trestle.confirmation.DEFAULTS, {
|
23
|
+
selector: '[data-toggle="confirm-delete"]',
|
24
|
+
btnOkClass: 'btn-danger',
|
25
|
+
btnOkLabel: Trestle.i18n['trestle.confirmation.delete'] || 'Delete'
|
26
|
+
});
|
26
27
|
|
27
|
-
Trestle.ready(function() {
|
28
28
|
// This must be bound to an element beneath document so
|
29
29
|
// that it is fired before any jquery_ujs events.
|
30
30
|
var root = $('body');
|
@@ -40,4 +40,32 @@
|
|
40
40
|
right: 11px;
|
41
41
|
}
|
42
42
|
}
|
43
|
+
|
44
|
+
.dropup & {
|
45
|
+
margin-top: 0;
|
46
|
+
margin-bottom: 8px;
|
47
|
+
|
48
|
+
&:before {
|
49
|
+
top: auto;
|
50
|
+
bottom: -$dropdown-arrow-outer-width;
|
51
|
+
|
52
|
+
border-bottom: 0;
|
53
|
+
border-top: $dropdown-arrow-width solid $dropdown-fallback-border;
|
54
|
+
border-top-color: $dropdown-border;
|
55
|
+
}
|
56
|
+
|
57
|
+
&:after {
|
58
|
+
top: auto;
|
59
|
+
bottom: -$dropdown-arrow-width;
|
60
|
+
|
61
|
+
border-bottom: 0;
|
62
|
+
border-top: $dropdown-arrow-outer-width solid white;
|
63
|
+
}
|
64
|
+
}
|
43
65
|
}
|
66
|
+
|
67
|
+
.dropdown-header {
|
68
|
+
text-transform: uppercase;
|
69
|
+
font-size: 10px;
|
70
|
+
font-weight: bold;
|
71
|
+
}
|
@@ -20,6 +20,11 @@
|
|
20
20
|
// within Bootstrap tabs that are hidden when the page is first loaded.
|
21
21
|
// See: https://github.com/select2/select2/issues/4220
|
22
22
|
width: 100% !important;
|
23
|
+
|
24
|
+
.select2-results__group {
|
25
|
+
font-size: 10px;
|
26
|
+
text-transform: uppercase;
|
27
|
+
}
|
23
28
|
}
|
24
29
|
|
25
30
|
.date-select,
|
@@ -84,6 +84,8 @@ $popover-arrow-width: 7px !default;
|
|
84
84
|
$dropdown-arrow-width: $popover-arrow-width !default;
|
85
85
|
$dropdown-arrow-outer-width: $dropdown-arrow-width + 1px !default;
|
86
86
|
|
87
|
+
$dropdown-header-color: #aaa !default;
|
88
|
+
|
87
89
|
$input-border: #ccc !default;
|
88
90
|
$input-border-focus: mix($brand-primary, $input-border) !default;
|
89
91
|
$input-bg-disabled: #fafafa !default;
|
@@ -6,7 +6,7 @@ class Trestle::DashboardController < Trestle::ApplicationController
|
|
6
6
|
|
7
7
|
private
|
8
8
|
def primary_admin
|
9
|
-
if navigation = Trestle.navigation.first
|
9
|
+
if navigation = Trestle.navigation(self).first
|
10
10
|
navigation.admin
|
11
11
|
elsif Trestle.admins.values.any?
|
12
12
|
Trestle.admins.values.first
|
@@ -3,7 +3,7 @@ module Trestle
|
|
3
3
|
def panel(options={}, &block)
|
4
4
|
html_class = options.fetch(:class) { "panel-default" }
|
5
5
|
|
6
|
-
content_tag(:div, class: ["panel", html_class]) do
|
6
|
+
content_tag(:div, options.slice(:id, :data).merge(class: ["panel", html_class])) do
|
7
7
|
if options[:title]
|
8
8
|
concat content_tag(:div, options[:title], class: "panel-heading")
|
9
9
|
end
|
@@ -14,6 +14,8 @@
|
|
14
14
|
|
15
15
|
<title><%= [yield(:title), Trestle.config.site_title].join(' :: ') %></title>
|
16
16
|
|
17
|
+
<%= favicon_link_tag Trestle.config.favicon if Trestle.config.favicon %>
|
18
|
+
|
17
19
|
<%= stylesheet_link_tag "trestle/admin", 'data-turbolinks-track': 'reload' %>
|
18
20
|
|
19
21
|
<%= hook :stylesheets %>
|
@@ -21,13 +23,13 @@
|
|
21
23
|
<%= javascript_include_tag "turbolinks" if Trestle.config.turbolinks %>
|
22
24
|
<%= javascript_include_tag "trestle/admin", 'data-turbolinks-track': 'reload' %>
|
23
25
|
|
24
|
-
|
26
|
+
<%= javascript_tag nonce: true do %>
|
25
27
|
<% Trestle.config.javascript_i18n_keys.each do |key| %>
|
26
|
-
Trestle.i18n['<%= key %>'] = "<%= escape_javascript(t(key, default:
|
28
|
+
Trestle.i18n['<%= key %>'] = "<%= escape_javascript(t(key, default: default_translation(key))) %>";
|
27
29
|
<% end %>
|
28
30
|
|
29
31
|
Trestle.localize(<%= i18n_fallbacks.map { |l| "'#{l}'" }.join(", ").html_safe %>);
|
30
|
-
|
32
|
+
<% end %>
|
31
33
|
|
32
34
|
<%= hook :javascripts %>
|
33
35
|
|
@@ -22,12 +22,12 @@
|
|
22
22
|
</div>
|
23
23
|
|
24
24
|
<div class="modal-footer">
|
25
|
-
<div class="btn-toolbar secondary-toolbar">
|
25
|
+
<div class="btn-toolbar secondary-toolbar" role="toolbar">
|
26
26
|
<%= render_toolbar(toolbar(:secondary)) %>
|
27
27
|
<%= deprecated_toolbar(:secondary) %>
|
28
28
|
</div>
|
29
29
|
|
30
|
-
<div class="btn-toolbar primary-toolbar">
|
30
|
+
<div class="btn-toolbar primary-toolbar" role="toolbar">
|
31
31
|
<%= render_toolbar(toolbar(:primary)) %>
|
32
32
|
<%= deprecated_toolbar(:primary) %>
|
33
33
|
</div>
|
@@ -16,12 +16,12 @@
|
|
16
16
|
</div>
|
17
17
|
|
18
18
|
<div class="content-header-toolbars">
|
19
|
-
<div class="btn-toolbar primary-toolbar">
|
19
|
+
<div class="btn-toolbar primary-toolbar" role="toolbar">
|
20
20
|
<%= render_toolbar(toolbar(:primary)) %>
|
21
21
|
<%= deprecated_toolbar(:primary) %>
|
22
22
|
</div>
|
23
23
|
|
24
|
-
<div class="btn-toolbar secondary-toolbar">
|
24
|
+
<div class="btn-toolbar secondary-toolbar" role="toolbar">
|
25
25
|
<%= render_toolbar(toolbar(:secondary)) %>
|
26
26
|
<%= deprecated_toolbar(:secondary) %>
|
27
27
|
</div>
|
@@ -15,7 +15,7 @@
|
|
15
15
|
<div class="app-sidebar-inner">
|
16
16
|
<nav class="app-nav">
|
17
17
|
<% collapsed = cookies["trestle:navigation:collapsed"].try(:split, ",") || [] %>
|
18
|
-
<% Trestle.navigation
|
18
|
+
<% Trestle.navigation(self).each do |group, items| %>
|
19
19
|
<ul<% if group.present? && collapsed.include?(group.id) %> class="collapsed"<% end %>>
|
20
20
|
<% if group.present? %>
|
21
21
|
<li class="nav-header"><%= link_to group.label, "##{group.id}" %></li>
|
data/config/locales/en.yml
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
ko: {
|
3
|
+
date: {
|
4
|
+
formats: {
|
5
|
+
trestle_date: "%Y년 %m월 %d일",
|
6
|
+
trestle_calendar: "%Y년 %m월 %d일",
|
7
|
+
}
|
8
|
+
},
|
9
|
+
|
10
|
+
time: {
|
11
|
+
formats: {
|
12
|
+
trestle_date: "%Y년 %m월 %d일",
|
13
|
+
trestle_time: "%H:%M",
|
14
|
+
trestle_time_with_seconds: "%H:%M:%S"
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
@@ -0,0 +1,96 @@
|
|
1
|
+
ko:
|
2
|
+
trestle:
|
3
|
+
title: "Trestle Admin"
|
4
|
+
footer: "Powered by Trestle"
|
5
|
+
version: "버전"
|
6
|
+
|
7
|
+
helpers:
|
8
|
+
page_entries_info:
|
9
|
+
one_page:
|
10
|
+
display_entries:
|
11
|
+
zero: "%{entry_name}을(를) 찾을 수 없습니다."
|
12
|
+
one: "<strong>1</strong> %{entry_name} 표시중"
|
13
|
+
other: "<strong>모든 %{count}</strong> %{entry_name} 표시중"
|
14
|
+
|
15
|
+
more_pages:
|
16
|
+
display_entries: "<b>%{total}</b> 중 <strong>%{first} - %{last}</strong> %{entry_name} 표시중"
|
17
|
+
|
18
|
+
onboarding:
|
19
|
+
welcome: "Trestle에 오신 것을 환영합니다."
|
20
|
+
no_admins: "사용하시려면 <code>app/admin</code>에 admin을 생성하십시오."
|
21
|
+
no_template: "이 템플릿을 사용자화 하시려면, <code>%{path}</code>를 생성하십시오."
|
22
|
+
no_form: "form block을 정의하시거나 <code>_form.html</code> partial를 생성하십시오."
|
23
|
+
|
24
|
+
ui:
|
25
|
+
toggle_navigation: "네비게이션 토글"
|
26
|
+
toggle_sidebar: "사이드바 토글"
|
27
|
+
|
28
|
+
dialog:
|
29
|
+
error: "완료될 수 없는 요청입니다."
|
30
|
+
|
31
|
+
confirmation:
|
32
|
+
title: "정말 하시겠습니까?"
|
33
|
+
delete: "삭제"
|
34
|
+
cancel: "취소"
|
35
|
+
|
36
|
+
admin:
|
37
|
+
titles:
|
38
|
+
index: "%{pluralized_model_name} 목록"
|
39
|
+
new: "%{model_name} 생성"
|
40
|
+
edit: "%{model_name} 수정"
|
41
|
+
|
42
|
+
buttons:
|
43
|
+
new: "%{model_name} 생성"
|
44
|
+
save: "%{model_name} 저장"
|
45
|
+
delete: "%{model_name} 삭제"
|
46
|
+
show: "%{model_name} 보기"
|
47
|
+
edit: "%{model_name} 수정"
|
48
|
+
ok: "확인"
|
49
|
+
|
50
|
+
breadcrumbs:
|
51
|
+
home: "Home"
|
52
|
+
|
53
|
+
flash:
|
54
|
+
create:
|
55
|
+
success:
|
56
|
+
title: "성공!"
|
57
|
+
message: "%{lowercase_model_name} 성공적으로 생성되었습니다."
|
58
|
+
|
59
|
+
failure:
|
60
|
+
title: "경고!"
|
61
|
+
message: "하기된 에러를 확인하십시오."
|
62
|
+
|
63
|
+
update:
|
64
|
+
success:
|
65
|
+
title: "성공!"
|
66
|
+
message: "%{lowercase_model_name} 성공적으로 수정되었습니다."
|
67
|
+
|
68
|
+
failure:
|
69
|
+
title: "경고!"
|
70
|
+
message: "하기된 에러를 확인하십시오."
|
71
|
+
|
72
|
+
destroy:
|
73
|
+
success:
|
74
|
+
title: "성공!"
|
75
|
+
message: "%{lowercase_model_name} 성공적으로 삭제되었습니다."
|
76
|
+
|
77
|
+
failure:
|
78
|
+
title: "경고!"
|
79
|
+
message: "%{lowercase_model_name} 삭제할 수 없습니다."
|
80
|
+
|
81
|
+
table:
|
82
|
+
headers:
|
83
|
+
id: "ID"
|
84
|
+
|
85
|
+
form:
|
86
|
+
select:
|
87
|
+
prompt: "- %{attribute_name} 선택 -"
|
88
|
+
|
89
|
+
format:
|
90
|
+
blank: "없음"
|
91
|
+
|
92
|
+
datepicker:
|
93
|
+
formats:
|
94
|
+
date: "Y/m/d"
|
95
|
+
datetime: "Y/m/d h:i K"
|
96
|
+
time: "h:i K"
|
data/gemfiles/rails-4.2.gemfile
CHANGED
data/gemfiles/rails-5.0.gemfile
CHANGED
data/gemfiles/rails-5.1.gemfile
CHANGED
data/gemfiles/rails-5.2.gemfile
CHANGED
data/gemfiles/rails-edge.gemfile
CHANGED