kadmin 1.0.9 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
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
|