express_admin 1.6.0 → 1.6.1
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/app/assets/javascripts/express_admin/scrollTableBody.js +24 -24
- data/app/assets/javascripts/express_admin.js +1 -0
- data/app/components/express_admin/smart_table.rb +2 -1
- data/lib/express_admin/engine.rb +1 -0
- data/lib/express_admin/version.rb +1 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/test/components/icon_link_test.rb +0 -1
- data/vendor/gems/express_templates/Gemfile.lock +2 -2
- data/vendor/gems/express_templates/express_templates-0.11.0.gem +0 -0
- data/vendor/gems/express_templates/lib/arbre/patches.rb +2 -2
- data/vendor/gems/express_templates/lib/express_templates/compiler.rb +1 -1
- data/vendor/gems/express_templates/lib/express_templates/components/all.rb +1 -1
- data/vendor/gems/express_templates/lib/express_templates/components/base.rb +0 -4
- data/vendor/gems/express_templates/lib/express_templates/components/configurable.rb +3 -1
- data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +7 -0
- data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +6 -0
- data/vendor/gems/express_templates/lib/express_templates/version.rb +1 -1
- data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +1 -1
- data/vendor/gems/express_templates/test/dummy/log/test.log +3210 -0
- metadata +17 -16
- data/vendor/gems/express_templates/express_templates-0.10.0.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.10.1.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.7.0.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.7.1.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.8.0.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.9.0.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.9.1.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.9.2.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.9.3.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.9.4.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.9.5.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.9.6.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.9.7.gem +0 -0
- data/vendor/gems/express_templates/express_templates-0.9.8.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7506c6470c547440b995022d7e43a0870e104c3
|
4
|
+
data.tar.gz: 5af377c17f7a68e8b803a2f0abbc1b01d04f6606
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0811310b3ad2e10e76b0e2d72f9d6e8d9698880fbec890a4f90018a700d4b7a49016163528c707956202274ca572f99b1611b830f4a29438581dfaf8711a3211
|
7
|
+
data.tar.gz: e69ee46045156ce056db8438deb34489984e9a5b52a9bb6988ebb308ab4026d9e68998f5a480a714c13470bc8d658598a7caef0e102724ac1548aafd248b5c3d
|
@@ -2,14 +2,14 @@
|
|
2
2
|
var defaults = {
|
3
3
|
rowsToDisplay: 10
|
4
4
|
};
|
5
|
-
|
5
|
+
|
6
6
|
var scrollBarWidth = 15, fixedTableWidth;
|
7
|
-
|
7
|
+
|
8
8
|
$.fn.scrollTableBody = function(options) {
|
9
9
|
options = $.extend(defaults, options);
|
10
|
-
|
10
|
+
|
11
11
|
var table = this;
|
12
|
-
|
12
|
+
|
13
13
|
wrapTable(table, options);
|
14
14
|
alignColumns(table);
|
15
15
|
|
@@ -18,52 +18,52 @@
|
|
18
18
|
if (canDebounce) resizeAlignFunction = _.debounce(resizeAlignFunction, 150);
|
19
19
|
$(window).resize(resizeAlignFunction);
|
20
20
|
};
|
21
|
-
|
21
|
+
|
22
22
|
function wrapTable(table, options) {
|
23
23
|
var existingClasses = table.attr('class');
|
24
24
|
var existingMarginBottom = table.css('margin-bottom');
|
25
25
|
table.css('margin-bottom', 0);
|
26
26
|
var rowHeight = table.find('tbody tr:first').outerHeight();
|
27
27
|
var tableHeight = rowHeight * options.rowsToDisplay;
|
28
|
-
|
28
|
+
|
29
29
|
var headerTable = $('<table style="table-layout:fixed;width:auto;margin-bottom:0;" class="jqstb-header-table ' + existingClasses + '"><thead><tr><td></td></tr></thead></table>'),
|
30
30
|
footerTable = $('<table style="table-layout:fixed;width:auto;margin-bottom:' + existingMarginBottom + ';" class="jqstb-footer-table ' + existingClasses + '"><tfoot><tr><td></td></tr></tfoot></table>'),
|
31
31
|
scrollDiv = '<div class="jqstb-scroll" style="height:' + tableHeight + 'px;overflow-y:auto"></div>';
|
32
|
-
|
32
|
+
|
33
33
|
// Insert the table that will hold the fixed header and footer, and insert the div that will get scrolled
|
34
34
|
table.before(headerTable).before(scrollDiv).after(footerTable);
|
35
35
|
}
|
36
|
-
|
36
|
+
|
37
37
|
function alignColumns(table) {
|
38
38
|
table.each(function (index) {
|
39
39
|
// To minimize "Flash of Unstyled Content" (FOUC), set the relevant variables before manipulating the DOM
|
40
40
|
var $dataTable = $(this);
|
41
41
|
var $headerTable = $('table.jqstb-header-table').eq(index);
|
42
42
|
var $footerTable = $('table.jqstb-footer-table').eq(index);
|
43
|
-
|
43
|
+
|
44
44
|
// Place main table data inside of relevant scrollable div (using jQuery eq() and index)
|
45
45
|
var $scrollDiv = $('div.jqstb-scroll').eq(index);
|
46
46
|
$scrollDiv.prepend($dataTable);
|
47
47
|
var scrollEl = $scrollDiv[0];
|
48
|
-
|
48
|
+
|
49
49
|
var hasHorizontalScroll = scrollEl.clientWidth < scrollEl.scrollWidth;
|
50
50
|
$scrollDiv.outerWidth(fixedTableWidth + scrollBarWidth + 2);
|
51
|
-
|
51
|
+
|
52
52
|
if (hasHorizontalScroll) {
|
53
53
|
var dataTableWidth = $dataTable.outerWidth();
|
54
54
|
$headerTable.width(dataTableWidth);
|
55
55
|
$footerTable.width(dataTableWidth);
|
56
56
|
$scrollDiv.outerWidth(scrollEl.clientWidth);
|
57
57
|
var scrollDivWidth = $scrollDiv.outerWidth();
|
58
|
-
|
58
|
+
|
59
59
|
var width = scrollDivWidth - scrollBarWidth;
|
60
|
-
|
60
|
+
|
61
61
|
var $headerScrollDiv = $('<div style="overflow:hidden;width:' + width + 'px" class="jqstb-header-scroll"></div>');
|
62
62
|
$headerTable.wrap($headerScrollDiv);
|
63
|
-
|
63
|
+
|
64
64
|
var $footerScrollDiv = $('<div style="overflow:hidden;width:' + width + 'px" class="jqstb-footer-scroll"></div>');
|
65
65
|
$footerTable.wrap($footerScrollDiv);
|
66
|
-
|
66
|
+
|
67
67
|
$scrollDiv.on('scroll', function() {
|
68
68
|
$('div.jqstb-header-scroll').scrollLeft($(this).scrollLeft());
|
69
69
|
$('div.jqstb-footer-scroll').scrollLeft($(this).scrollLeft());
|
@@ -74,7 +74,7 @@
|
|
74
74
|
$dataTable.find('thead tr:first th, tbody tr:first td').each(function () {
|
75
75
|
$(this).outerWidth($(this).outerWidth());
|
76
76
|
});
|
77
|
-
|
77
|
+
|
78
78
|
// Insert header data into fixed header table
|
79
79
|
$headerTable.find('thead').replaceWith($dataTable.children('caption, thead').clone());
|
80
80
|
|
@@ -82,15 +82,15 @@
|
|
82
82
|
$dataTable.find('tfoot tr:first td').each(function () {
|
83
83
|
$(this).outerWidth($(this).outerWidth());
|
84
84
|
});
|
85
|
-
|
85
|
+
|
86
86
|
// Insert footer data into fixed footer table
|
87
87
|
$footerTable.find('tfoot').replaceWith($dataTable.children('tfoot').clone());
|
88
|
-
|
88
|
+
|
89
89
|
// Hide original caption, header, and footer
|
90
90
|
$dataTable.children('caption, thead, tfoot').hide();
|
91
91
|
});
|
92
92
|
}
|
93
|
-
|
93
|
+
|
94
94
|
function alignOnResize(table) {
|
95
95
|
table.each(function (index) {
|
96
96
|
var $dataTable = $(this);
|
@@ -99,7 +99,7 @@
|
|
99
99
|
|
100
100
|
// Temporarily show the inner table's header and footer since the dom calculates width based on them being visible
|
101
101
|
$dataTable.children('thead, tfoot').show();
|
102
|
-
|
102
|
+
|
103
103
|
var scrollEl = $('div.jqstb-scroll')[0];
|
104
104
|
var hasHorizontalScroll = scrollEl.clientWidth < scrollEl.scrollWidth;
|
105
105
|
if (hasHorizontalScroll) {
|
@@ -107,7 +107,7 @@
|
|
107
107
|
$('div.jqstb-header-scroll').outerWidth(scrollDivWidth - scrollBarWidth);
|
108
108
|
$('div.jqstb-footer-scroll').outerWidth(scrollDivWidth - scrollBarWidth);
|
109
109
|
}
|
110
|
-
|
110
|
+
|
111
111
|
// Force column widths to be set for each header column
|
112
112
|
var $headerColumns = $headerTable.find('thead tr:first th');
|
113
113
|
$dataTable.find('thead tr:first th').each(function (i) {
|
@@ -119,9 +119,9 @@
|
|
119
119
|
$dataTable.find('tfoot tr:first td').each(function (i) {
|
120
120
|
$footerColumns.eq(i).outerWidth($(this).outerWidth());
|
121
121
|
});
|
122
|
-
|
123
|
-
// Hide the inner table's header and footer when we're done
|
122
|
+
|
123
|
+
// Hide the inner table's header and footer when we're done
|
124
124
|
$dataTable.children('thead, tfoot').hide();
|
125
125
|
});
|
126
126
|
}
|
127
|
-
})(jQuery);
|
127
|
+
})(jQuery);
|
@@ -44,6 +44,7 @@ module ExpressAdmin
|
|
44
44
|
}
|
45
45
|
}
|
46
46
|
tbody {
|
47
|
+
stored_member_assigns = assigns[collection_member_name.to_sym]
|
47
48
|
collection.each do |item|
|
48
49
|
assigns[collection_member_name.to_sym] = item
|
49
50
|
tr(id: row_id(item), class: row_class(item)) {
|
@@ -55,7 +56,7 @@ module ExpressAdmin
|
|
55
56
|
actions_column(item) if should_show_actions?
|
56
57
|
hidden_column_cell if columns_hidden?
|
57
58
|
}
|
58
|
-
assigns[collection_member_name.to_sym] =
|
59
|
+
assigns[collection_member_name.to_sym] = stored_member_assigns
|
59
60
|
end ; nil
|
60
61
|
}
|
61
62
|
|
data/lib/express_admin/engine.rb
CHANGED
data/test/dummy/db/test.sqlite3
CHANGED
Binary file
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
express_templates (0.10.
|
4
|
+
express_templates (0.10.1)
|
5
5
|
activesupport (~> 4.2)
|
6
6
|
arbre (~> 1.0)
|
7
7
|
parslet (~> 1.6)
|
@@ -88,7 +88,7 @@ GEM
|
|
88
88
|
ruby-progressbar
|
89
89
|
nokogiri (1.6.6.2)
|
90
90
|
mini_portile (~> 0.6.0)
|
91
|
-
parslet (1.7.
|
91
|
+
parslet (1.7.1)
|
92
92
|
blankslate (>= 2.0, <= 4.0)
|
93
93
|
pry (0.10.1)
|
94
94
|
coderay (~> 1.1.0)
|
Binary file
|
@@ -46,8 +46,8 @@ module Arbre
|
|
46
46
|
def method_missing(name, *args, &block)
|
47
47
|
if current_arbre_element.respond_to?(name)
|
48
48
|
current_arbre_element.send name, *args, &block
|
49
|
-
elsif assigns && assigns.has_key?(name)
|
50
|
-
assigns[name]
|
49
|
+
elsif assigns && assigns.has_key?(name.to_sym)
|
50
|
+
assigns[name.to_sym]
|
51
51
|
elsif helpers.respond_to?(name)
|
52
52
|
helper_method(name, *args, &block)
|
53
53
|
elsif route_proxy = possible_route_proxy(name)
|
@@ -4,7 +4,7 @@ module ExpressTemplates
|
|
4
4
|
|
5
5
|
template, src = _normalize(template_or_src)
|
6
6
|
|
7
|
-
%Q[
|
7
|
+
%Q[assigns.merge!(template_virtual_path: @virtual_path) ; Arbre::Context.new(assigns, self) { #{src || block.source_body} }.to_s]
|
8
8
|
end
|
9
9
|
|
10
10
|
private
|
@@ -32,10 +32,6 @@ module ExpressTemplates
|
|
32
32
|
add_class _default_classes
|
33
33
|
end
|
34
34
|
|
35
|
-
def assigns
|
36
|
-
@assigns_with_indifferent_access ||= super.merge(helpers.assigns.with_indifferent_access)
|
37
|
-
end
|
38
|
-
|
39
35
|
def self.contains(proc = nil, &block)
|
40
36
|
define_method(:_build_body, &(proc || block))
|
41
37
|
end
|
@@ -28,6 +28,13 @@ RUBY
|
|
28
28
|
# }
|
29
29
|
# end
|
30
30
|
|
31
|
+
class File < FormComponent
|
32
|
+
contains {
|
33
|
+
label_tag(label_name, label_text)
|
34
|
+
file_field_tag field_name_attribute, field_helper_options
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
31
38
|
class Textarea < FormComponent
|
32
39
|
contains {
|
33
40
|
label_tag(label_name, label_text)
|
@@ -10,6 +10,7 @@ module ExpressTemplates
|
|
10
10
|
has_option :action, 'The form action containing the resource path or url.'
|
11
11
|
has_option :on_success, 'Pass a form value indicating where to go on a successful submission.'
|
12
12
|
has_option :on_failure, 'Pass a form value indicating where to go on a failed submission.'
|
13
|
+
has_option :enctype, 'The enctype attribute specifies how the form-data should be encoded when submitting it to the server.'
|
13
14
|
|
14
15
|
prepends -> {
|
15
16
|
div(style: 'display:none') {
|
@@ -24,6 +25,7 @@ module ExpressTemplates
|
|
24
25
|
before_build -> {
|
25
26
|
set_attribute(:id, form_id)
|
26
27
|
set_attribute(:action, form_action)
|
28
|
+
set_attribute(:enctype, form_enctype) if form_enctype
|
27
29
|
add_class(config[:id])
|
28
30
|
}
|
29
31
|
|
@@ -35,6 +37,10 @@ module ExpressTemplates
|
|
35
37
|
config[:action] || (resource.try(:persisted?) ? resource_path(resource) : collection_path)
|
36
38
|
end
|
37
39
|
|
40
|
+
def form_enctype
|
41
|
+
config[:enctype]
|
42
|
+
end
|
43
|
+
|
38
44
|
end
|
39
45
|
end
|
40
46
|
end
|
@@ -3,7 +3,7 @@ require 'active_model'
|
|
3
3
|
|
4
4
|
class BasicFieldsTest < ActiveSupport::TestCase
|
5
5
|
|
6
|
-
BASIC_FIELDS = %w(email phone text password color date datetime
|
6
|
+
BASIC_FIELDS = %w(email phone text password color file date datetime
|
7
7
|
datetime_local number range
|
8
8
|
search telephone time url week)
|
9
9
|
|