kadmin 1.0.9 → 1.1.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bc941c839a9a08a0ee49c52d60fd634d7a2b09bec14a5a2ded93ed5c2ae12d1e
|
4
|
+
data.tar.gz: 43b77a2767b748968f69b03d949c9bdc93de856914a61568233e5899482b1c7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7377a3142c16a114d6ee4d0c4c17eac612db6d2b0805c0ccd7a1be79bb0da58096a0b5435286afd9f5ff40d6746e19942a0e10c84cfc190d68d8e1e9cba880d
|
7
|
+
data.tar.gz: 01bc90cdffb34e6996f82d0878d446f52c1501db32c6f8fa609abe5f2bcb0b70474e78b7ec5154f7e9af3e9ad3cdc3672a39df2843cc5d844e0fc92b0718fb01
|
@@ -1,3 +1,54 @@
|
|
1
1
|
//= require modular
|
2
2
|
//= require jquery_ujs
|
3
3
|
//= require_tree .
|
4
|
+
|
5
|
+
// sortable tables
|
6
|
+
|
7
|
+
$( document ).ready(function() {
|
8
|
+
//commit=Filter&filter_name=test&page_offset=100&page_size=500&sort_asc=true&sort_column=
|
9
|
+
const urlParams = new URLSearchParams(window.location.search);
|
10
|
+
var params = {
|
11
|
+
commit: urlParams.get('commit'),
|
12
|
+
};
|
13
|
+
|
14
|
+
if (urlParams.get('page_size')) {
|
15
|
+
params['page_size'] = urlParams.get('page_size');
|
16
|
+
}
|
17
|
+
|
18
|
+
// adding filter(s)
|
19
|
+
for (let param of urlParams) {
|
20
|
+
if (param[0].startsWith('filter_')) {
|
21
|
+
params[param[0]] = param[1];
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
var path = window.location.pathname+'?';
|
26
|
+
|
27
|
+
$('th[sort-column]').each(function() {
|
28
|
+
var currentColumnName = $(this).attr('sort-column');
|
29
|
+
params['sort_column'] = currentColumnName;
|
30
|
+
|
31
|
+
params['sort_asc'] = 'true';
|
32
|
+
var sortIndicator = "";
|
33
|
+
if (urlParams.get('sort_column') === currentColumnName) {
|
34
|
+
//reverse sort order
|
35
|
+
if (urlParams.get('sort_asc') === 'true') {
|
36
|
+
params['sort_asc'] = 'false';
|
37
|
+
sortIndicator = ' ▴';
|
38
|
+
}
|
39
|
+
else {
|
40
|
+
params['sort_asc'] = 'true';
|
41
|
+
sortIndicator = ' ▾';
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
var linkElement = $( "<a/>", {
|
46
|
+
style: "padding:0;",
|
47
|
+
html: $(this).html() + sortIndicator,
|
48
|
+
"class": "btn btn-default",
|
49
|
+
href: path + $.param(params)
|
50
|
+
});
|
51
|
+
|
52
|
+
$(this).html(linkElement);
|
53
|
+
});
|
54
|
+
});
|
@@ -13,6 +13,12 @@ module Kadmin
|
|
13
13
|
# @return [ActiveRecord::Relation] the base relation to find items from
|
14
14
|
attr_reader :scope
|
15
15
|
|
16
|
+
# @return [String] name of column that is used in ORDER_BY clause
|
17
|
+
attr_reader :sort_column
|
18
|
+
|
19
|
+
# @return [bool] true if sort order is ASC, false if DESC
|
20
|
+
attr_reader :sort_asc
|
21
|
+
|
16
22
|
# @param [ActiveRecord::Relation] scope base relation to page/filter on
|
17
23
|
def initialize(scope)
|
18
24
|
@scope = scope
|
@@ -20,6 +26,7 @@ module Kadmin
|
|
20
26
|
@filters = {}
|
21
27
|
@results = nil
|
22
28
|
@filtering = false
|
29
|
+
@sort_asc = true
|
23
30
|
end
|
24
31
|
|
25
32
|
# @param [String] name the filter name (should be unique)
|
@@ -35,6 +42,15 @@ module Kadmin
|
|
35
42
|
return self
|
36
43
|
end
|
37
44
|
|
45
|
+
# sets sort order for scope, any existing order is overwritten
|
46
|
+
# @param [String] name of column to sort
|
47
|
+
# @param [bool] true for ASC sort, false otherwise
|
48
|
+
def order(sort_column, sort_asc)
|
49
|
+
@sort_column = sort_column
|
50
|
+
@sort_asc = sort_asc
|
51
|
+
@scope = @scope.reorder("#{sort_column} #{sort_asc ? 'ASC' : 'DESC'}")
|
52
|
+
end
|
53
|
+
|
38
54
|
def filtering?
|
39
55
|
return @filtering
|
40
56
|
end
|
@@ -14,13 +14,18 @@ module Kadmin
|
|
14
14
|
def resources_finder(scope, filters = [])
|
15
15
|
filters = Array.wrap(filters)
|
16
16
|
filter_params = filters.map { |hash| hash[:param] }
|
17
|
-
permitted = params.permit(:page_size, :page_offset, :format, *filter_params)
|
17
|
+
permitted = params.permit(:page_size, :page_offset, :format, *filter_params, :sort_column, :sort_asc)
|
18
18
|
|
19
19
|
page_size = permitted.fetch(:page_size, DEFAULT_FINDER_PAGE_SIZE).to_i
|
20
20
|
page_offset = permitted.fetch(:page_offset, 0).to_i
|
21
21
|
|
22
22
|
finder = Finder.new(scope)
|
23
23
|
finder.paginate(size: page_size, offset: page_offset)
|
24
|
+
|
25
|
+
if permitted[:sort_column].present?
|
26
|
+
finder.order(permitted[:sort_column], ActiveRecord::Type::Boolean.new.deserialize(permitted.fetch(:sort_asc, true)))
|
27
|
+
end
|
28
|
+
|
24
29
|
filters.each do |hash|
|
25
30
|
value = permitted[hash[:param]]
|
26
31
|
filter = if hash[:filter].present?
|
@@ -43,13 +48,16 @@ module Kadmin
|
|
43
48
|
# allowing you to reference joined tables as well.
|
44
49
|
def resources_filter_matches(columns)
|
45
50
|
return lambda do |v|
|
46
|
-
pattern = "%#{v}%"
|
47
51
|
conditions = Array.wrap(columns).reduce(nil) do |acc, column|
|
48
52
|
column = arel_table[column] unless column.is_a?(Arel::Attributes::Attribute)
|
49
|
-
matcher = column.
|
53
|
+
matcher = if type_for_attribute(column.name).type == :integer
|
54
|
+
column.eq(v)
|
55
|
+
else
|
56
|
+
pattern = "%#{v}%"
|
57
|
+
column.matches(pattern)
|
58
|
+
end
|
50
59
|
acc.nil? ? matcher : acc.or(matcher)
|
51
60
|
end
|
52
|
-
|
53
61
|
where(conditions)
|
54
62
|
end
|
55
63
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
<%= form_tag(request.fullpath, method: 'get', class: 'form-inline pull-right') do %>
|
2
|
+
<%= hidden_field_tag 'sort_column', finder&.sort_column %>
|
3
|
+
<%= hidden_field_tag 'sort_asc', finder&.sort_asc %>
|
2
4
|
<div class='form-group'>
|
3
5
|
<% unless local_assigns.fetch(:hide_create_button, false) %>
|
4
6
|
<%= link_to(t('kadmin.components.finder.create'), url_for(action: :new), class: 'btn btn-primary', style: 'margin-right: 20px') %>
|
data/lib/kadmin/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kadmin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicolas Pepin-Perreault
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2019-03-
|
13
|
+
date: 2019-03-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -196,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
196
|
version: '0'
|
197
197
|
requirements: []
|
198
198
|
rubyforge_project:
|
199
|
-
rubygems_version: 2.
|
199
|
+
rubygems_version: 2.7.8
|
200
200
|
signing_key:
|
201
201
|
specification_version: 4
|
202
202
|
summary: Collection of utility, configuration, etc., for admin areas
|