rails_admin_tag_list 0.1.5 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +7 -2
- data/app/helpers/rails_admin_tag_list/suggestions_helper.rb +37 -20
- data/app/views/rails_admin/main/_form_tag_list.html.haml +1 -1
- data/app/views/rails_admin/main/_tag_list_with_autocomplete.html.haml +45 -0
- data/app/views/rails_admin/main/_tag_list_with_suggestions.html.haml +21 -13
- data/lib/rails_admin_tag_list.rb +9 -6
- data/lib/rails_admin_tag_list/version.rb +1 -1
- metadata +20 -40
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 614ab64869f76d073241333bd070eea676e8daa2
|
4
|
+
data.tar.gz: 1c90897236400f2e6222b7ef1ba7becce56e69a4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0ada63826b3c409b79da17fabd82c232fe624be1e60172e360bb959ff0c9340017ff06c228c33094a194893b42570c4842654fcf764bfe951aa7a7a1e97f1247
|
7
|
+
data.tar.gz: 2f43199002c2f365b609205c8c903940df012f892973a1f6be92837b560e7c53456e1973d3887c8540f39c3772a57b0819637caf09b9f0a70c39187cda6603b0
|
data/README.md
CHANGED
@@ -43,13 +43,18 @@ There is your model:
|
|
43
43
|
|
44
44
|
> `attr_accessible :tag_list, :skill_list`
|
45
45
|
|
46
|
-
|
46
|
+
**edit field view**
|
47
|
+
|
48
|
+
In addition to default field view (named `form_tag_list`) this gem provides two custom views `tag_list_with_suggestions` and `tag_list_with_autocomplete`. To enable any of them specify partial name:
|
47
49
|
|
48
50
|
RailsAdmin.config do |config|
|
49
|
-
config.
|
51
|
+
config.model Player do
|
50
52
|
edit do
|
51
53
|
fields_of_type :tag_list do
|
52
54
|
partial 'tag_list_with_suggestions'
|
55
|
+
|
56
|
+
# the option sets max count of suggestions (default is 100); set -1 to abolish the limit
|
57
|
+
ratl_max_suggestions -1
|
53
58
|
end
|
54
59
|
end
|
55
60
|
end
|
@@ -1,30 +1,47 @@
|
|
1
1
|
module RailsAdminTagList
|
2
2
|
module SuggestionsHelper
|
3
|
-
def
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
options = defaults.deep_merge(options)
|
3
|
+
def ratl_suggestions(field, options={})
|
4
|
+
if tags_from_enum = ratl_tags_from_enum(field)
|
5
|
+
tags_from_enum
|
6
|
+
else
|
7
|
+
options = options.merge(max_count: field.ratl_max_suggestions)
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
tags[0..options[:length]].map(&:name)
|
9
|
+
tags = ratl_tags(field)
|
10
|
+
sorted_tags = ratl_sort_tags(tags, options[:order])
|
11
|
+
sorted_tags[0..options[:max_count]].map(&:name)
|
12
|
+
end
|
15
13
|
end
|
16
14
|
|
17
15
|
private
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
|
17
|
+
def ratl_tags_from_enum(field)
|
18
|
+
record = field.bindings[:object]
|
19
|
+
enum_method = '%s_enum' % field.name
|
20
|
+
if record.respond_to? enum_method
|
21
|
+
record.send(enum_method)
|
22
|
+
else
|
23
|
+
false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def ratl_tags(field)
|
28
|
+
model = field.abstract_model.model_name.constantize
|
29
|
+
tags_name = field.name.to_s.gsub(/_list/, '').pluralize.to_sym
|
30
|
+
|
31
|
+
model.tag_counts_on(tags_name)
|
32
|
+
end
|
33
|
+
|
34
|
+
def ratl_sort_tags(tags, order)
|
35
|
+
case order.to_sym
|
36
|
+
when :count
|
37
|
+
tags.sort_by { |tag| -tag.count }
|
38
|
+
when :name
|
39
|
+
tags.sort_by { |tag| tag.name }
|
40
|
+
when :rand, :random, :shuffle
|
41
|
+
tags.shuffle
|
42
|
+
else
|
43
|
+
raise ArgumentError.new("RailsAdminTagList field unrecognized sorting order")
|
26
44
|
end
|
27
|
-
tags
|
28
45
|
end
|
29
46
|
end
|
30
47
|
end
|
@@ -1 +1 @@
|
|
1
|
-
= form.send field.view_helper, field.method_name, field.html_attributes
|
1
|
+
= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, class: 'form-control', required: field.required})
|
@@ -0,0 +1,45 @@
|
|
1
|
+
= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, class: 'form-control', required: field.required})
|
2
|
+
|
3
|
+
:javascript
|
4
|
+
$(function() {
|
5
|
+
var availableTags = #{ratl_suggestions(field, order: :name)};
|
6
|
+
|
7
|
+
function split( val ) {
|
8
|
+
return val.split( /,\s*/ );
|
9
|
+
}
|
10
|
+
function extractLast( term ) {
|
11
|
+
return split( term ).pop();
|
12
|
+
}
|
13
|
+
|
14
|
+
$( "##{form.dom_id(field)}" )
|
15
|
+
// don't navigate away from the field on tab when selecting an item
|
16
|
+
.bind( "keydown", function( event ) {
|
17
|
+
if ( event.keyCode === $.ui.keyCode.TAB &&
|
18
|
+
$( this ).data( "ui-autocomplete" ).menu.active ) {
|
19
|
+
event.preventDefault();
|
20
|
+
}
|
21
|
+
})
|
22
|
+
.autocomplete({
|
23
|
+
minLength: 0,
|
24
|
+
source: function( request, response ) {
|
25
|
+
// delegate back to autocomplete, but extract the last term
|
26
|
+
response( $.ui.autocomplete.filter(
|
27
|
+
availableTags, extractLast( request.term ) ) );
|
28
|
+
},
|
29
|
+
focus: function() {
|
30
|
+
// prevent value inserted on focus
|
31
|
+
return false;
|
32
|
+
},
|
33
|
+
select: function( event, ui ) {
|
34
|
+
var terms = split( this.value );
|
35
|
+
// remove the current input
|
36
|
+
terms.pop();
|
37
|
+
// add the selected item
|
38
|
+
terms.push( ui.item.value );
|
39
|
+
// add placeholder to get the comma-and-space at the end
|
40
|
+
terms.push( "" );
|
41
|
+
this.value = terms.join( ", " );
|
42
|
+
return false;
|
43
|
+
}
|
44
|
+
});
|
45
|
+
});
|
@@ -1,7 +1,7 @@
|
|
1
|
-
= form.send field.view_helper, field.method_name, field.html_attributes
|
1
|
+
= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, class: 'form-control', required: field.required})
|
2
2
|
|
3
|
-
-
|
4
|
-
= link_to tag, '#', :
|
3
|
+
- ratl_suggestions(field, order: :count).each do |tag|
|
4
|
+
= link_to %{<i class="icon-tag"></i> #{tag}}.html_safe, '#', class: 'tag_suggestion', data: { input_id: form.dom_id(field), tag_value: tag }
|
5
5
|
|
6
6
|
:javascript
|
7
7
|
jQuery(function(){
|
@@ -13,7 +13,7 @@
|
|
13
13
|
values = jQuery.map(tag_list.val().split(','), function(val){ return jQuery.trim(val) });
|
14
14
|
// Remove empty strings from values
|
15
15
|
values = jQuery.grep(values, function(n) { return n.length > 0 });
|
16
|
-
tag = $(this).
|
16
|
+
tag = $(this).data('tag-value');
|
17
17
|
if (jQuery.inArray(tag, values) == -1) {
|
18
18
|
values.push(tag);
|
19
19
|
} else {
|
@@ -26,12 +26,20 @@
|
|
26
26
|
});
|
27
27
|
});
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
29
|
+
:sass
|
30
|
+
.tag_list_type
|
31
|
+
input
|
32
|
+
display: inline-block
|
33
|
+
margin-right: 10px
|
34
|
+
|
35
|
+
.tag_suggestion
|
36
|
+
margin: 0 5px
|
37
|
+
border-bottom: 1px dotted #b94a48
|
38
|
+
color: #777
|
39
|
+
text-decoration: none
|
40
|
+
&:hover
|
41
|
+
color: #aaa
|
42
|
+
border-bottom: 1px dotted #953b39
|
43
|
+
text-decoration: none
|
44
|
+
&:focus
|
45
|
+
text-decoration: none
|
data/lib/rails_admin_tag_list.rb
CHANGED
@@ -19,15 +19,17 @@ module RailsAdmin
|
|
19
19
|
register_instance_option(:pretty_value) do
|
20
20
|
value.join(', ')
|
21
21
|
end
|
22
|
+
|
22
23
|
# Accessor for field's label.
|
23
24
|
#
|
24
25
|
# @see RailsAdmin::AbstractModel.properties
|
25
26
|
register_instance_option(:help) do
|
26
|
-
I18n.t(:tag_list_help, :
|
27
|
-
end
|
28
|
-
register_instance_option(:partial) do
|
29
|
-
:form_tag_list
|
27
|
+
I18n.t(:tag_list_help, scope: [:admin, :new], default: 'Use commas to separate tags')
|
30
28
|
end
|
29
|
+
|
30
|
+
register_instance_option(:partial) { :form_tag_list }
|
31
|
+
|
32
|
+
register_instance_option(:ratl_max_suggestions) { 100 }
|
31
33
|
end
|
32
34
|
end
|
33
35
|
end
|
@@ -39,9 +41,10 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
|
|
39
41
|
|
40
42
|
if defined?(::ActsAsTaggableOn) && model.taggable?
|
41
43
|
tag_types = model.tag_types
|
42
|
-
|
43
|
-
name = "#{properties[:name].to_s.singularize}_list".to_sym
|
44
|
+
property_name = properties.respond_to?(:name) ? properties.name : properties[:name]
|
44
45
|
|
46
|
+
if tag_types.include?(property_name)
|
47
|
+
name = "#{property_name.to_s.singularize}_list".to_sym
|
45
48
|
fields << RailsAdmin::Config::Fields::Types::TagList.new(parent, name, properties)
|
46
49
|
end
|
47
50
|
end
|
metadata
CHANGED
@@ -1,62 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_admin_tag_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Andrey Samsonov
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-01-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: rails
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '3.1'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '3.1'
|
30
13
|
- !ruby/object:Gem::Dependency
|
31
14
|
name: rails_admin
|
32
15
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
16
|
requirements:
|
35
|
-
- -
|
17
|
+
- - ">="
|
36
18
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.
|
19
|
+
version: '0.6'
|
38
20
|
type: :runtime
|
39
21
|
prerelease: false
|
40
22
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
23
|
requirements:
|
43
|
-
- -
|
24
|
+
- - ">="
|
44
25
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.
|
26
|
+
version: '0.6'
|
46
27
|
- !ruby/object:Gem::Dependency
|
47
28
|
name: sqlite3
|
48
29
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
30
|
requirements:
|
51
|
-
- -
|
31
|
+
- - ">="
|
52
32
|
- !ruby/object:Gem::Version
|
53
33
|
version: '0'
|
54
34
|
type: :development
|
55
35
|
prerelease: false
|
56
36
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
37
|
requirements:
|
59
|
-
- -
|
38
|
+
- - ">="
|
60
39
|
- !ruby/object:Gem::Version
|
61
40
|
version: '0'
|
62
41
|
description: Implements field type and partial for "tag_list"(*_list) virtual attribute.
|
@@ -66,37 +45,38 @@ executables: []
|
|
66
45
|
extensions: []
|
67
46
|
extra_rdoc_files: []
|
68
47
|
files:
|
48
|
+
- MIT-LICENSE
|
49
|
+
- README.md
|
50
|
+
- Rakefile
|
69
51
|
- app/helpers/rails_admin_tag_list/suggestions_helper.rb
|
70
|
-
- app/views/rails_admin/main/_tag_list_with_suggestions.html.haml
|
71
52
|
- app/views/rails_admin/main/_form_tag_list.html.haml
|
53
|
+
- app/views/rails_admin/main/_tag_list_with_autocomplete.html.haml
|
54
|
+
- app/views/rails_admin/main/_tag_list_with_suggestions.html.haml
|
55
|
+
- lib/rails_admin_tag_list.rb
|
72
56
|
- lib/rails_admin_tag_list/engine.rb
|
73
57
|
- lib/rails_admin_tag_list/version.rb
|
74
|
-
- lib/rails_admin_tag_list.rb
|
75
|
-
- MIT-LICENSE
|
76
|
-
- Rakefile
|
77
|
-
- README.md
|
78
58
|
homepage: https://github.com/kryzhovnik/rails_admin_tag_list
|
79
59
|
licenses: []
|
60
|
+
metadata: {}
|
80
61
|
post_install_message:
|
81
62
|
rdoc_options: []
|
82
63
|
require_paths:
|
83
64
|
- lib
|
84
65
|
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
66
|
requirements:
|
87
|
-
- -
|
67
|
+
- - ">="
|
88
68
|
- !ruby/object:Gem::Version
|
89
69
|
version: '0'
|
90
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
71
|
requirements:
|
93
|
-
- -
|
72
|
+
- - ">="
|
94
73
|
- !ruby/object:Gem::Version
|
95
74
|
version: '0'
|
96
75
|
requirements: []
|
97
76
|
rubyforge_project:
|
98
|
-
rubygems_version:
|
77
|
+
rubygems_version: 2.4.5.1
|
99
78
|
signing_key:
|
100
|
-
specification_version:
|
79
|
+
specification_version: 4
|
101
80
|
summary: Support acts_as_taggable_on gem for rails_admin
|
102
81
|
test_files: []
|
82
|
+
has_rdoc:
|