trestle 0.8.3 → 0.8.6
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 +4 -4
- data/.gitignore +4 -0
- data/.travis.yml +10 -1
- data/Gemfile +4 -0
- data/README.md +1 -0
- data/app/assets/javascripts/trestle/admin.js +24 -0
- data/app/assets/javascripts/trestle/components/_confirmation.js +23 -0
- data/app/assets/javascripts/trestle/components/_datepicker.js +22 -0
- data/app/assets/javascripts/trestle/components/_dialog.js +107 -0
- data/app/assets/javascripts/trestle/components/_errors.js +11 -0
- data/app/assets/javascripts/trestle/components/_form.js +48 -0
- data/app/assets/javascripts/trestle/components/_gallery.js +27 -0
- data/app/assets/javascripts/trestle/components/_select.js +11 -0
- data/app/assets/javascripts/trestle/components/_sidebar.js +75 -0
- data/app/assets/javascripts/trestle/components/_table.js +21 -0
- data/app/assets/javascripts/trestle/components/_tabs.js +24 -0
- data/app/assets/javascripts/trestle/components/_tooltips.js +3 -0
- data/app/assets/javascripts/trestle/core/_contexts.js +13 -0
- data/app/assets/javascripts/trestle/core/_cookies.js +24 -0
- data/app/assets/javascripts/trestle/core/_events.js +39 -0
- data/app/assets/javascripts/trestle/core/_visit.js +10 -0
- data/app/assets/javascripts/trestle/custom.js +4 -0
- data/app/assets/stylesheets/trestle/components/_alerts.scss +28 -0
- data/app/assets/stylesheets/trestle/components/_buttons.scss +9 -0
- data/app/assets/stylesheets/trestle/components/_modal.scss +92 -0
- data/app/assets/stylesheets/trestle/components/_navigation.scss +80 -10
- data/app/assets/stylesheets/trestle/components/_sidebar.scss +1 -0
- data/app/assets/stylesheets/trestle/components/_table.scss +6 -0
- data/app/assets/stylesheets/trestle/core/_defaults.scss +5 -1
- data/app/controllers/trestle/application_controller.rb +5 -1
- data/app/helpers/trestle/dialog_helper.rb +7 -0
- data/app/helpers/trestle/form_helper.rb +8 -1
- data/app/helpers/trestle/format_helper.rb +48 -0
- data/app/helpers/trestle/hook_helper.rb +8 -3
- data/app/helpers/trestle/url_helper.rb +33 -11
- data/app/views/layouts/trestle/admin.html.erb +4 -4
- data/app/views/trestle/admin/index.html.erb +1 -1
- data/app/views/trestle/application/_alert.html.erb +2 -0
- data/app/views/trestle/application/_dialog.html.erb +36 -0
- data/app/views/trestle/application/_flash.html.erb +18 -4
- data/app/views/trestle/application/_tabs.html.erb +7 -1
- data/app/views/trestle/dashboard/index.html.erb +2 -2
- data/app/views/trestle/resource/_form.html.erb +1 -1
- data/app/views/trestle/resource/edit.html.erb +6 -6
- data/app/views/trestle/resource/index.html.erb +5 -2
- data/app/views/trestle/resource/new.html.erb +4 -4
- data/app/views/trestle/resource/show.html.erb +6 -6
- data/app/views/trestle/shared/_sidebar.html.erb +7 -4
- data/bower.json +2 -2
- data/config/locales/en.yml +38 -18
- data/config/locales/fr.rb +18 -0
- data/config/locales/fr.yml +69 -0
- data/config/locales/nl.rb +18 -0
- data/config/locales/nl.yml +67 -0
- data/config/locales/pl.rb +18 -0
- data/config/locales/pl.yml +70 -0
- data/config/locales/pt-BR.rb +18 -0
- data/config/locales/pt-BR.yml +69 -0
- data/gemfiles/rails-4.2.gemfile +14 -0
- data/gemfiles/rails-5.0.gemfile +14 -0
- data/gemfiles/rails-5.1.gemfile +14 -0
- data/gemfiles/rails-edge.gemfile +15 -0
- data/lib/generators/trestle/install/install_generator.rb +3 -3
- data/lib/generators/trestle/install/templates/custom.js +7 -0
- data/lib/generators/trestle/install/templates/trestle.rb.erb +9 -2
- data/lib/generators/trestle/resource/templates/admin.rb.erb +1 -1
- data/lib/trestle/adapters/active_record_adapter.rb +46 -20
- data/lib/trestle/adapters/adapter.rb +176 -0
- data/lib/trestle/adapters/sequel_adapter.rb +85 -0
- data/lib/trestle/adapters.rb +7 -64
- data/lib/trestle/admin/builder.rb +10 -2
- data/lib/trestle/admin.rb +14 -1
- data/lib/trestle/attribute.rb +14 -37
- data/lib/trestle/breadcrumb.rb +19 -0
- data/lib/trestle/configuration.rb +14 -3
- data/lib/trestle/display.rb +1 -1
- data/lib/trestle/form/automatic.rb +29 -21
- data/lib/trestle/form/builder.rb +4 -0
- data/lib/trestle/form/field.rb +2 -2
- data/lib/trestle/form/fields/check_box.rb +1 -1
- data/lib/trestle/form/fields/collection_select.rb +1 -1
- data/lib/trestle/form/fields/date_select.rb +1 -1
- data/lib/trestle/form/fields/datetime_select.rb +1 -1
- data/lib/trestle/form/fields/grouped_collection_select.rb +1 -1
- data/lib/trestle/form/fields/select.rb +2 -2
- data/lib/trestle/form/fields/tag_select.rb +1 -2
- data/lib/trestle/form/fields/time_select.rb +1 -1
- data/lib/trestle/form/fields/time_zone_select.rb +1 -1
- data/lib/trestle/form.rb +7 -3
- data/lib/trestle/model_name.rb +64 -0
- data/lib/trestle/navigation/group.rb +8 -0
- data/lib/trestle/navigation/item.rb +1 -1
- data/lib/trestle/options.rb +7 -5
- data/lib/trestle/reloader.rb +1 -1
- data/lib/trestle/resource/builder.rb +17 -1
- data/lib/trestle/resource/controller.rb +80 -18
- data/lib/trestle/resource.rb +26 -16
- data/lib/trestle/scope.rb +1 -1
- data/lib/trestle/table/actions_column.rb +21 -16
- data/lib/trestle/table/automatic.rb +5 -12
- data/lib/trestle/table/builder.rb +3 -2
- data/lib/trestle/table/column.rb +27 -45
- data/lib/trestle/table/row.rb +8 -2
- data/lib/trestle/table.rb +7 -1
- data/lib/trestle/version.rb +1 -1
- data/lib/trestle.rb +1 -0
- data/trestle.gemspec +5 -5
- data/vendor/assets/bower_components/trestle/flatpickr/dist/flatpickr.css +51 -26
- data/vendor/assets/bower_components/trestle/flatpickr/dist/flatpickr.js +349 -299
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ar.js +5 -5
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/bg.js +5 -5
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/bn.js +5 -5
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/cat.js +7 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/cs.js +7 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/cy.js +7 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/da.js +6 -6
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/de.js +10 -10
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/eo.js +11 -11
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/es.js +7 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/et.js +11 -11
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/fa.js +6 -6
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/fi.js +7 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/fr.js +11 -11
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/gr.js +13 -13
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/he.js +5 -5
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/hi.js +5 -5
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/hr.js +6 -6
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/hu.js +10 -10
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/id.js +7 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/index.js +97 -0
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/it.js +10 -10
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ja.js +5 -5
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ko.js +6 -6
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/lt.js +10 -10
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/lv.js +6 -6
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/mk.js +8 -8
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ms.js +7 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/my.js +7 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/nl.js +11 -11
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/no.js +11 -11
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/pa.js +5 -5
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/pl.js +6 -6
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/pt.js +6 -8
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ro.js +7 -9
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ru.js +6 -8
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/si.js +5 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sk.js +8 -8
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sl.js +8 -10
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sq.js +5 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sr.js +9 -10
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sv.js +8 -10
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/th.js +10 -11
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/tr.js +6 -8
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/uk.js +6 -7
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/vn.js +6 -8
- data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/zh.js +9 -11
- data/vendor/assets/bower_components/trestle/select2/dist/js/select2.full.js +90 -69
- metadata +58 -33
- data/app/assets/javascripts/trestle/_confirmation.js.coffee +0 -18
- data/app/assets/javascripts/trestle/_datepicker.js.coffee +0 -18
- data/app/assets/javascripts/trestle/_errors.js.coffee +0 -8
- data/app/assets/javascripts/trestle/_form.js.coffee +0 -4
- data/app/assets/javascripts/trestle/_gallery.js.coffee +0 -21
- data/app/assets/javascripts/trestle/_select.js.coffee +0 -7
- data/app/assets/javascripts/trestle/_sidebar.js.coffee +0 -45
- data/app/assets/javascripts/trestle/_table.js.coffee +0 -16
- data/app/assets/javascripts/trestle/_tabs.js.coffee +0 -9
- data/app/assets/javascripts/trestle/_tooltips.js.coffee +0 -2
- data/app/assets/javascripts/trestle/admin.js.coffee +0 -22
- data/app/assets/javascripts/trestle/custom.js.coffee +0 -4
- data/lib/generators/trestle/install/templates/custom.js.coffee +0 -7
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
module Trestle
|
|
2
2
|
class Table
|
|
3
3
|
class ActionsColumn
|
|
4
|
-
attr_reader :table, :block
|
|
4
|
+
attr_reader :table, :options, :block
|
|
5
5
|
|
|
6
|
-
def initialize(table, &block)
|
|
7
|
-
@table = table
|
|
6
|
+
def initialize(table, options={}, &block)
|
|
7
|
+
@table, @options = table, options
|
|
8
8
|
@block = block_given? ? block : default_actions
|
|
9
9
|
end
|
|
10
10
|
|
|
@@ -13,8 +13,10 @@ module Trestle
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def default_actions
|
|
16
|
+
admin = table.admin
|
|
17
|
+
|
|
16
18
|
->(action) do
|
|
17
|
-
action.delete
|
|
19
|
+
action.delete if admin && admin.actions.include?(:destroy)
|
|
18
20
|
end
|
|
19
21
|
end
|
|
20
22
|
|
|
@@ -23,37 +25,40 @@ module Trestle
|
|
|
23
25
|
|
|
24
26
|
delegate :table, to: :@column
|
|
25
27
|
|
|
28
|
+
delegate :concat, :icon, :link_to, :admin_url_for, :admin_link_to, to: :@template
|
|
29
|
+
|
|
26
30
|
def initialize(column, template, instance)
|
|
27
31
|
@column, @template, @instance = column, template, instance
|
|
28
32
|
end
|
|
29
33
|
|
|
34
|
+
def show
|
|
35
|
+
button(icon("fa fa-info"), instance, action: :show, class: "btn-info")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def edit
|
|
39
|
+
button(icon("fa fa-pencil"), instance, action: :edit, class: "btn-warning")
|
|
40
|
+
end
|
|
41
|
+
|
|
30
42
|
def delete
|
|
31
|
-
button(
|
|
43
|
+
button(icon("fa fa-trash"), instance, action: :destroy, method: :delete, class: "btn-danger", data: { toggle: "confirm-delete", placement: "left" })
|
|
32
44
|
end
|
|
33
45
|
|
|
34
|
-
def button(content,
|
|
46
|
+
def button(content, instance_or_url, options={})
|
|
35
47
|
options[:class] = Array(options[:class])
|
|
36
48
|
options[:class] << "btn" unless options[:class].include?("btn")
|
|
37
49
|
|
|
38
|
-
|
|
50
|
+
concat admin_link_to(content, instance_or_url, options.reverse_merge(admin: table.admin))
|
|
39
51
|
end
|
|
40
52
|
alias_method :link, :button
|
|
41
53
|
end
|
|
42
54
|
|
|
43
55
|
class Renderer < Column::Renderer
|
|
44
56
|
def header
|
|
57
|
+
options[:header]
|
|
45
58
|
end
|
|
46
59
|
|
|
47
60
|
def classes
|
|
48
|
-
"actions"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def options
|
|
52
|
-
{}
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def data
|
|
56
|
-
{}
|
|
61
|
+
super + ["actions"]
|
|
57
62
|
end
|
|
58
63
|
|
|
59
64
|
def content(instance)
|
|
@@ -3,7 +3,6 @@ module Trestle
|
|
|
3
3
|
class Automatic < Table
|
|
4
4
|
def initialize(admin)
|
|
5
5
|
super(sortable: true, admin: admin)
|
|
6
|
-
@admin = admin
|
|
7
6
|
end
|
|
8
7
|
|
|
9
8
|
def columns
|
|
@@ -11,20 +10,14 @@ module Trestle
|
|
|
11
10
|
end
|
|
12
11
|
|
|
13
12
|
def content_columns
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if attribute.association?
|
|
13
|
+
admin.default_table_attributes.map.with_index do |attribute, index|
|
|
14
|
+
case attribute.type
|
|
15
|
+
when :association
|
|
19
16
|
Column.new(self, attribute.association_name, sort: false)
|
|
20
|
-
elsif attribute.text?
|
|
21
|
-
Column.new(self, attribute.name, link: index.zero?) do |instance|
|
|
22
|
-
truncate(instance.public_send(attribute.name))
|
|
23
|
-
end
|
|
24
17
|
else
|
|
25
|
-
Column.new(self, attribute.name, link: index.zero?, align: (:center if
|
|
18
|
+
Column.new(self, attribute.name, link: index.zero?, align: (:center if [:datetime, :boolean].include?(attribute.type)))
|
|
26
19
|
end
|
|
27
|
-
end
|
|
20
|
+
end
|
|
28
21
|
end
|
|
29
22
|
|
|
30
23
|
def actions_column
|
|
@@ -5,6 +5,7 @@ module Trestle
|
|
|
5
5
|
|
|
6
6
|
def initialize(options={})
|
|
7
7
|
@table = Table.new(options)
|
|
8
|
+
@output_buffer = ActionView::OutputBuffer.new
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def row(options={}, &block)
|
|
@@ -24,8 +25,8 @@ module Trestle
|
|
|
24
25
|
table.columns << Column.new(table, field, options, &(proc || block))
|
|
25
26
|
end
|
|
26
27
|
|
|
27
|
-
def actions(&block)
|
|
28
|
-
table.columns << ActionsColumn.new(table, &block)
|
|
28
|
+
def actions(options={}, &block)
|
|
29
|
+
table.columns << ActionsColumn.new(table, options, &block)
|
|
29
30
|
end
|
|
30
31
|
end
|
|
31
32
|
end
|
data/lib/trestle/table/column.rb
CHANGED
|
@@ -28,8 +28,18 @@ module Trestle
|
|
|
28
28
|
options[:sort].is_a?(Hash) ? options[:sort] : {}
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
+
def header
|
|
32
|
+
if options[:header]
|
|
33
|
+
options[:header]
|
|
34
|
+
elsif table.admin
|
|
35
|
+
table.admin.human_attribute_name(field)
|
|
36
|
+
else
|
|
37
|
+
field.to_s.humanize.titleize
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
31
41
|
class Renderer
|
|
32
|
-
delegate :options, to: :@column
|
|
42
|
+
delegate :options, :table, to: :@column
|
|
33
43
|
|
|
34
44
|
def initialize(column, template)
|
|
35
45
|
@column, @template = column, template
|
|
@@ -38,24 +48,22 @@ module Trestle
|
|
|
38
48
|
def header
|
|
39
49
|
return if options.has_key?(:header) && options[:header].in?([nil, false])
|
|
40
50
|
|
|
41
|
-
header = I18n.t("admin.table.headers.#{@column.field}", default:
|
|
51
|
+
header = I18n.t("admin.table.headers.#{@column.field}", default: @column.header)
|
|
42
52
|
header = @template.sort_link(header, @column.sort_field, @column.sort_options) if @column.sortable?
|
|
43
53
|
header
|
|
44
54
|
end
|
|
45
55
|
|
|
46
56
|
def content(instance)
|
|
47
57
|
value = column_value(instance)
|
|
48
|
-
|
|
49
|
-
return blank_column(instance) if value.nil?
|
|
50
|
-
|
|
51
|
-
content = format_column(value)
|
|
58
|
+
content = @template.format_value(value, options)
|
|
52
59
|
|
|
53
60
|
if value.respond_to?(:id) && options[:link] != false
|
|
61
|
+
# Column value was a model instance (e.g. from an association).
|
|
54
62
|
# Automatically link to instance's admin if available
|
|
55
63
|
content = @template.admin_link_to(content, value)
|
|
56
64
|
elsif options[:link]
|
|
57
65
|
# Explicitly link to the specified admin, or the table's admin
|
|
58
|
-
content = @template.admin_link_to(content, instance, admin: options[:admin] ||
|
|
66
|
+
content = @template.admin_link_to(content, instance, admin: options[:admin] || table.admin)
|
|
59
67
|
end
|
|
60
68
|
|
|
61
69
|
content
|
|
@@ -72,48 +80,22 @@ module Trestle
|
|
|
72
80
|
private
|
|
73
81
|
def column_value(instance)
|
|
74
82
|
if @column.block
|
|
75
|
-
|
|
83
|
+
if defined?(Haml) && Haml::Helpers.block_is_haml?(@column.block)
|
|
84
|
+
# In order for table column blocks to work properly within Haml templates,
|
|
85
|
+
# the _hamlout local variable needs to be defined in the scope of the block,
|
|
86
|
+
# so that the Haml version of the capture method is used. Because we
|
|
87
|
+
# evaluate the block using instance_exec, we need to set this up manually.
|
|
88
|
+
-> {
|
|
89
|
+
_hamlout = eval('_hamlout', @column.block.binding)
|
|
90
|
+
@template.capture { @template.instance_exec(instance, &@column.block).to_s }
|
|
91
|
+
}.call
|
|
92
|
+
else
|
|
93
|
+
@template.capture { @template.instance_exec(instance, &@column.block).to_s }
|
|
94
|
+
end
|
|
76
95
|
else
|
|
77
96
|
instance.send(@column.field)
|
|
78
97
|
end
|
|
79
98
|
end
|
|
80
|
-
|
|
81
|
-
def blank_column(value)
|
|
82
|
-
text = options.key?(:blank) ? options[:blank] : I18n.t("admin.table.column.blank")
|
|
83
|
-
@template.content_tag(:span, text, class: "blank")
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def format_column(value)
|
|
87
|
-
if options.key?(:format)
|
|
88
|
-
format_from_options(value)
|
|
89
|
-
else
|
|
90
|
-
autoformat_value(value)
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def format_from_options(value)
|
|
95
|
-
case options[:format]
|
|
96
|
-
when :currency
|
|
97
|
-
@template.number_to_currency(value)
|
|
98
|
-
else
|
|
99
|
-
value
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def autoformat_value(value)
|
|
104
|
-
case value
|
|
105
|
-
when Time, DateTime
|
|
106
|
-
@template.timestamp(value)
|
|
107
|
-
when Date
|
|
108
|
-
@template.datestamp(value)
|
|
109
|
-
when TrueClass, FalseClass
|
|
110
|
-
@template.status_tag(@template.icon("fa fa-check"), :success) if value
|
|
111
|
-
when ->(value) { value.respond_to?(:id) }
|
|
112
|
-
@template.display(value)
|
|
113
|
-
else
|
|
114
|
-
value
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
99
|
end
|
|
118
100
|
end
|
|
119
101
|
end
|
data/lib/trestle/table/row.rb
CHANGED
|
@@ -21,15 +21,21 @@ module Trestle
|
|
|
21
21
|
|
|
22
22
|
def options(instance)
|
|
23
23
|
options = Trestle::Options.new
|
|
24
|
-
|
|
24
|
+
|
|
25
|
+
if table.admin && table.autolink?
|
|
26
|
+
options.merge!(data: { url: admin_url_for(instance) })
|
|
27
|
+
options.merge!(data: { behavior: "dialog" }) if table.admin.form.dialog?
|
|
28
|
+
end
|
|
29
|
+
|
|
25
30
|
options.merge!(@row.options)
|
|
26
31
|
options.merge!(@template.instance_exec(instance, &@row.block)) if @row.block
|
|
32
|
+
|
|
27
33
|
options
|
|
28
34
|
end
|
|
29
35
|
|
|
30
36
|
protected
|
|
31
37
|
def admin_url_for(instance)
|
|
32
|
-
@template.admin_url_for(instance, admin: table.
|
|
38
|
+
@template.admin_url_for(instance, admin: table.admin)
|
|
33
39
|
end
|
|
34
40
|
end
|
|
35
41
|
end
|
data/lib/trestle/table.rb
CHANGED
|
@@ -9,11 +9,13 @@ module Trestle
|
|
|
9
9
|
autoload :SelectColumn
|
|
10
10
|
autoload :Row
|
|
11
11
|
|
|
12
|
-
attr_reader :columns, :options
|
|
12
|
+
attr_reader :columns, :options, :admin
|
|
13
13
|
attr_writer :row
|
|
14
14
|
|
|
15
15
|
def initialize(options={})
|
|
16
16
|
@options = options
|
|
17
|
+
@admin = Trestle.lookup(options[:admin]) if options.key?(:admin)
|
|
18
|
+
|
|
17
19
|
@columns = []
|
|
18
20
|
end
|
|
19
21
|
|
|
@@ -21,6 +23,10 @@ module Trestle
|
|
|
21
23
|
options[:sortable] == true
|
|
22
24
|
end
|
|
23
25
|
|
|
26
|
+
def autolink?
|
|
27
|
+
options[:autolink] != false
|
|
28
|
+
end
|
|
29
|
+
|
|
24
30
|
def renderer(template)
|
|
25
31
|
Renderer.new(self, template)
|
|
26
32
|
end
|
data/lib/trestle/version.rb
CHANGED
data/lib/trestle.rb
CHANGED
data/trestle.gemspec
CHANGED
|
@@ -33,11 +33,11 @@ Gem::Specification.new do |spec|
|
|
|
33
33
|
|
|
34
34
|
spec.required_ruby_version = ">= 2.2.2"
|
|
35
35
|
|
|
36
|
-
spec.add_dependency "
|
|
37
|
-
spec.add_dependency "
|
|
38
|
-
spec.add_dependency "
|
|
39
|
-
spec.add_dependency "autoprefixer-rails", "
|
|
40
|
-
spec.add_dependency "kaminari", "~>
|
|
36
|
+
spec.add_dependency "railties", ">= 4.2.0"
|
|
37
|
+
spec.add_dependency "activemodel", ">= 4.2.0"
|
|
38
|
+
spec.add_dependency "sass-rails", ">= 5.0.6"
|
|
39
|
+
spec.add_dependency "autoprefixer-rails", ">= 7.1.2"
|
|
40
|
+
spec.add_dependency "kaminari", "~> 1.1.0"
|
|
41
41
|
|
|
42
42
|
spec.add_development_dependency "bundler", "~> 1.12"
|
|
43
43
|
spec.add_development_dependency "rake", "~> 10.0"
|
|
@@ -14,12 +14,14 @@
|
|
|
14
14
|
line-height: 24px;
|
|
15
15
|
border-radius: 5px;
|
|
16
16
|
position: absolute;
|
|
17
|
-
width:
|
|
18
|
-
box-sizing: border-box;
|
|
17
|
+
width: 307.875px;
|
|
18
|
+
-webkit-box-sizing: border-box;
|
|
19
|
+
box-sizing: border-box;
|
|
19
20
|
-ms-touch-action: manipulation;
|
|
20
21
|
touch-action: manipulation;
|
|
21
22
|
background: #fff;
|
|
22
|
-
box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);
|
|
23
|
+
-webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);
|
|
24
|
+
box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);
|
|
23
25
|
}
|
|
24
26
|
.flatpickr-calendar.open,
|
|
25
27
|
.flatpickr-calendar.inline {
|
|
@@ -194,6 +196,7 @@
|
|
|
194
196
|
}
|
|
195
197
|
.flatpickr-prev-month svg path,
|
|
196
198
|
.flatpickr-next-month svg path {
|
|
199
|
+
-webkit-transition: fill 0.1s;
|
|
197
200
|
transition: fill 0.1s;
|
|
198
201
|
fill: inherit;
|
|
199
202
|
}
|
|
@@ -218,7 +221,8 @@
|
|
|
218
221
|
opacity: 0;
|
|
219
222
|
cursor: pointer;
|
|
220
223
|
border: 1px solid rgba(57,57,57,0.05);
|
|
221
|
-
box-sizing: border-box;
|
|
224
|
+
-webkit-box-sizing: border-box;
|
|
225
|
+
box-sizing: border-box;
|
|
222
226
|
}
|
|
223
227
|
.numInputWrapper span:hover {
|
|
224
228
|
background: rgba(0,0,0,0.1);
|
|
@@ -326,7 +330,8 @@
|
|
|
326
330
|
}
|
|
327
331
|
.flatpickr-current-month input.cur-year {
|
|
328
332
|
background: transparent;
|
|
329
|
-
box-sizing: border-box;
|
|
333
|
+
-webkit-box-sizing: border-box;
|
|
334
|
+
box-sizing: border-box;
|
|
330
335
|
color: inherit;
|
|
331
336
|
cursor: default;
|
|
332
337
|
padding: 0 0 0 0.5ch;
|
|
@@ -355,10 +360,12 @@
|
|
|
355
360
|
background: transparent;
|
|
356
361
|
text-align: center;
|
|
357
362
|
overflow: hidden;
|
|
358
|
-
width:
|
|
363
|
+
width: 100%;
|
|
364
|
+
display: -webkit-box;
|
|
359
365
|
display: -webkit-flex;
|
|
360
366
|
display: -ms-flexbox;
|
|
361
367
|
display: flex;
|
|
368
|
+
-webkit-box-align: center;
|
|
362
369
|
-webkit-align-items: center;
|
|
363
370
|
-ms-flex-align: center;
|
|
364
371
|
align-items: center;
|
|
@@ -373,6 +380,7 @@ span.flatpickr-weekday {
|
|
|
373
380
|
margin: 0;
|
|
374
381
|
text-align: center;
|
|
375
382
|
display: block;
|
|
383
|
+
-webkit-box-flex: 1;
|
|
376
384
|
-webkit-flex: 1;
|
|
377
385
|
-ms-flex: 1;
|
|
378
386
|
flex: 1;
|
|
@@ -385,10 +393,11 @@ span.flatpickr-weekday {
|
|
|
385
393
|
.flatpickr-days {
|
|
386
394
|
position: relative;
|
|
387
395
|
overflow: hidden;
|
|
396
|
+
display: -webkit-box;
|
|
388
397
|
display: -webkit-flex;
|
|
389
398
|
display: -ms-flexbox;
|
|
390
399
|
display: flex;
|
|
391
|
-
width:
|
|
400
|
+
width: 307.875px;
|
|
392
401
|
}
|
|
393
402
|
.flatpickr-days:focus {
|
|
394
403
|
outline: 0;
|
|
@@ -397,12 +406,14 @@ span.flatpickr-weekday {
|
|
|
397
406
|
padding: 0;
|
|
398
407
|
outline: 0;
|
|
399
408
|
text-align: left;
|
|
400
|
-
width:
|
|
401
|
-
min-width:
|
|
402
|
-
max-width:
|
|
403
|
-
box-sizing: border-box;
|
|
409
|
+
width: 307.875px;
|
|
410
|
+
min-width: 307.875px;
|
|
411
|
+
max-width: 307.875px;
|
|
412
|
+
-webkit-box-sizing: border-box;
|
|
413
|
+
box-sizing: border-box;
|
|
404
414
|
display: inline-block;
|
|
405
415
|
display: -ms-flexbox;
|
|
416
|
+
display: -webkit-box;
|
|
406
417
|
display: -webkit-flex;
|
|
407
418
|
display: flex;
|
|
408
419
|
-webkit-flex-wrap: wrap;
|
|
@@ -442,7 +453,8 @@ span.flatpickr-weekday {
|
|
|
442
453
|
background: none;
|
|
443
454
|
border: 1px solid transparent;
|
|
444
455
|
border-radius: 150px;
|
|
445
|
-
box-sizing: border-box;
|
|
456
|
+
-webkit-box-sizing: border-box;
|
|
457
|
+
box-sizing: border-box;
|
|
446
458
|
color: #393939;
|
|
447
459
|
cursor: pointer;
|
|
448
460
|
font-weight: 400;
|
|
@@ -450,12 +462,13 @@ span.flatpickr-weekday {
|
|
|
450
462
|
-webkit-flex-basis: 14.2857143%;
|
|
451
463
|
-ms-flex-preferred-size: 14.2857143%;
|
|
452
464
|
flex-basis: 14.2857143%;
|
|
453
|
-
max-width:
|
|
454
|
-
height:
|
|
455
|
-
line-height:
|
|
465
|
+
max-width: 39px;
|
|
466
|
+
height: 39px;
|
|
467
|
+
line-height: 39px;
|
|
456
468
|
margin: 0;
|
|
457
469
|
display: inline-block;
|
|
458
470
|
position: relative;
|
|
471
|
+
-webkit-box-pack: center;
|
|
459
472
|
-webkit-justify-content: center;
|
|
460
473
|
-ms-flex-pack: center;
|
|
461
474
|
justify-content: center;
|
|
@@ -506,7 +519,8 @@ span.flatpickr-weekday {
|
|
|
506
519
|
.flatpickr-day.startRange.nextMonthDay,
|
|
507
520
|
.flatpickr-day.endRange.nextMonthDay {
|
|
508
521
|
background: #569ff7;
|
|
509
|
-
box-shadow: none;
|
|
522
|
+
-webkit-box-shadow: none;
|
|
523
|
+
box-shadow: none;
|
|
510
524
|
color: #fff;
|
|
511
525
|
border-color: #569ff7;
|
|
512
526
|
}
|
|
@@ -523,7 +537,8 @@ span.flatpickr-weekday {
|
|
|
523
537
|
.flatpickr-day.selected.startRange + .endRange,
|
|
524
538
|
.flatpickr-day.startRange.startRange + .endRange,
|
|
525
539
|
.flatpickr-day.endRange.startRange + .endRange {
|
|
526
|
-
box-shadow: -10px 0 0 #569ff7;
|
|
540
|
+
-webkit-box-shadow: -10px 0 0 #569ff7;
|
|
541
|
+
box-shadow: -10px 0 0 #569ff7;
|
|
527
542
|
}
|
|
528
543
|
.flatpickr-day.selected.startRange.endRange,
|
|
529
544
|
.flatpickr-day.startRange.startRange.endRange,
|
|
@@ -532,7 +547,8 @@ span.flatpickr-weekday {
|
|
|
532
547
|
}
|
|
533
548
|
.flatpickr-day.inRange {
|
|
534
549
|
border-radius: 0;
|
|
535
|
-
box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
|
|
550
|
+
-webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
|
|
551
|
+
box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
|
|
536
552
|
}
|
|
537
553
|
.flatpickr-day.disabled,
|
|
538
554
|
.flatpickr-day.disabled:hover {
|
|
@@ -552,7 +568,8 @@ span.flatpickr-weekday {
|
|
|
552
568
|
}
|
|
553
569
|
.flatpickr-day.week.selected {
|
|
554
570
|
border-radius: 0;
|
|
555
|
-
box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
|
|
571
|
+
-webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
|
|
572
|
+
box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
|
|
556
573
|
}
|
|
557
574
|
.rangeMode .flatpickr-day {
|
|
558
575
|
margin-top: 1px;
|
|
@@ -563,7 +580,8 @@ span.flatpickr-weekday {
|
|
|
563
580
|
}
|
|
564
581
|
.flatpickr-weekwrapper .flatpickr-weeks {
|
|
565
582
|
padding: 0 12px;
|
|
566
|
-
box-shadow: 1px 0 0 #e6e6e6;
|
|
583
|
+
-webkit-box-shadow: 1px 0 0 #e6e6e6;
|
|
584
|
+
box-shadow: 1px 0 0 #e6e6e6;
|
|
567
585
|
}
|
|
568
586
|
.flatpickr-weekwrapper .flatpickr-weekday {
|
|
569
587
|
float: none;
|
|
@@ -577,16 +595,19 @@ span.flatpickr-weekday {
|
|
|
577
595
|
}
|
|
578
596
|
.flatpickr-innerContainer {
|
|
579
597
|
display: block;
|
|
598
|
+
display: -webkit-box;
|
|
580
599
|
display: -webkit-flex;
|
|
581
600
|
display: -ms-flexbox;
|
|
582
601
|
display: flex;
|
|
583
|
-
box-sizing: border-box;
|
|
602
|
+
-webkit-box-sizing: border-box;
|
|
603
|
+
box-sizing: border-box;
|
|
584
604
|
overflow: hidden;
|
|
585
605
|
}
|
|
586
606
|
.flatpickr-rContainer {
|
|
587
607
|
display: inline-block;
|
|
588
608
|
padding: 0;
|
|
589
|
-
box-sizing: border-box;
|
|
609
|
+
-webkit-box-sizing: border-box;
|
|
610
|
+
box-sizing: border-box;
|
|
590
611
|
}
|
|
591
612
|
.flatpickr-time {
|
|
592
613
|
text-align: center;
|
|
@@ -595,8 +616,10 @@ span.flatpickr-weekday {
|
|
|
595
616
|
height: 0;
|
|
596
617
|
line-height: 40px;
|
|
597
618
|
max-height: 40px;
|
|
598
|
-
box-sizing: border-box;
|
|
619
|
+
-webkit-box-sizing: border-box;
|
|
620
|
+
box-sizing: border-box;
|
|
599
621
|
overflow: hidden;
|
|
622
|
+
display: -webkit-box;
|
|
600
623
|
display: -webkit-flex;
|
|
601
624
|
display: -ms-flexbox;
|
|
602
625
|
display: flex;
|
|
@@ -607,6 +630,7 @@ span.flatpickr-weekday {
|
|
|
607
630
|
clear: both;
|
|
608
631
|
}
|
|
609
632
|
.flatpickr-time .numInputWrapper {
|
|
633
|
+
-webkit-box-flex: 1;
|
|
610
634
|
-webkit-flex: 1;
|
|
611
635
|
-ms-flex: 1;
|
|
612
636
|
flex: 1;
|
|
@@ -628,7 +652,8 @@ span.flatpickr-weekday {
|
|
|
628
652
|
}
|
|
629
653
|
.flatpickr-time input {
|
|
630
654
|
background: transparent;
|
|
631
|
-
box-shadow: none;
|
|
655
|
+
-webkit-box-shadow: none;
|
|
656
|
+
box-shadow: none;
|
|
632
657
|
border: 0;
|
|
633
658
|
border-radius: 0;
|
|
634
659
|
text-align: center;
|
|
@@ -640,7 +665,8 @@ span.flatpickr-weekday {
|
|
|
640
665
|
color: #393939;
|
|
641
666
|
font-size: 14px;
|
|
642
667
|
position: relative;
|
|
643
|
-
box-sizing: border-box;
|
|
668
|
+
-webkit-box-sizing: border-box;
|
|
669
|
+
box-sizing: border-box;
|
|
644
670
|
}
|
|
645
671
|
.flatpickr-time input.flatpickr-hour {
|
|
646
672
|
font-weight: bold;
|
|
@@ -668,7 +694,6 @@ span.flatpickr-weekday {
|
|
|
668
694
|
user-select: none;
|
|
669
695
|
-webkit-align-self: center;
|
|
670
696
|
-ms-flex-item-align: center;
|
|
671
|
-
-ms-grid-row-align: center;
|
|
672
697
|
align-self: center;
|
|
673
698
|
}
|
|
674
699
|
.flatpickr-time .flatpickr-am-pm {
|