autocomplete 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ data.tar.gz: 62e73fc4b6f0a72965949f13235ce9341047b4cb
4
+ metadata.gz: 7908775c05e267582ddc8ede2bd9303a93f41809
5
+ SHA512:
6
+ data.tar.gz: 9d83c69f6c2f055a3346f4c709077f3d9e81012c6abe4e738509423c9d81e6abc26518d7d8f0d7a7789491e63f96bc2d9878f2e90cae0fc3636615ed9a41eec8
7
+ metadata.gz: a140b84e2c33ed886797efc6226baec6fd2927c1c6a7cc2689a0ac1cc6c88d8f7d0f588f3d460e6a0003c2aa593aee77241ccc00c26cf0106bffc5c4fb9b66d4
data/Manifest CHANGED
@@ -1,11 +1,11 @@
1
1
  MIT-LICENSE
2
+ Manifest
2
3
  README.rdoc
3
4
  Rakefile
4
5
  assets/autocomplete-loading.gif
5
6
  assets/autocomplete.css
6
7
  assets/autocomplete.js
7
8
  autocomplete.gemspec
8
- id_rsa.pub
9
9
  init.rb
10
10
  install.rb
11
11
  lib/autocomplete.rb
@@ -13,4 +13,3 @@ lib/autocomplete_controller.rb
13
13
  lib/autocomplete_helper.rb
14
14
  tasks/autocomplete_tasks.rake
15
15
  test/autocomplete_test.rb
16
- Manifest
data/Rakefile CHANGED
@@ -2,12 +2,12 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require "echoe"
4
4
 
5
- Echoe.new('autocomplete', '1.0.1') do |p|
5
+ Echoe.new('autocomplete', '1.0.2') do |p|
6
6
  p.description = "Insert an autocomplete-search-box inside your view"
7
- p.url = "http://www.voja-jovanovic.info"
7
+ p.url = "http://www.vojajovanovic.com"
8
8
  p.author = "Voislav Jovanovic"
9
9
  p.email = "voislavj@gmail.com"
10
- p.ignore_pattern = ["tmp/*", "script/*"]
10
+ p.ignore_pattern = ["tmp/*", "script/*", "pkg*"]
11
11
  p.development_dependencies = []
12
12
  end
13
13
 
@@ -1,74 +1,74 @@
1
- .autocomplete-loading {
2
- background-image:url(/images/autocomplete-loading.gif);
3
- background-repeat: no-repeat;
4
- background-position: 98% center;
5
- }
6
- .autocomplete-multi-controls .autocomplete-remove {
7
- float:right;
8
- margin-bottom:5px;
9
- }
10
- .autocomplete-multi-controls a {
11
- outline:none;
12
- }
13
- .autocomplete-multi-container {
14
- width:200px;
15
- clear:both;
16
- border:1px solid #ccc;
17
- overflow:auto;
18
- }
19
- .autocomplete-multi-rowset {
20
- padding:2px 4px;
21
- border-bottom:1px dotted #ddd;
22
- cursor:default;
23
- }
24
- .autocomplete-multi-rowset:hover {
25
- background-color:#E8730C;
26
- color:#fff;
27
- }
28
- .autocomplete-multi-rowset.selected,
29
- .autocomplete-multi-rowset.selected:hover {
30
- background:#eee;color:#000
31
- }
32
- .autocomplete-multi-rowset label{margin-left:5px;}
33
- .autocomplete-multi-rowset:hover label{color:#fff}
34
- .autocomplete-multi-rowset.selected:hover label{color:#000}
35
-
36
- .autocomplete-list {
37
- list-style-type:none;
38
- position:absolute;
39
- background:#fff;
40
- border:1px solid #ccc;
41
- width:300px;
42
- max-height:200px;
43
- overflow:auto;
44
- }
45
- .autocomplete-list li{
46
- margin:0;
47
- padding:0;
48
- }
49
- .autocomplete-list li.empty{
50
- padding:2px 4px;
51
- color:#777;
52
- }
53
- .autocomplete-list li.odd {
54
- background:#eee;
55
- }
56
- .autocomplete-list a {
57
- display:block;
58
- text-decoration:none;
59
- padding:2px 4px;
60
- outline:none;
61
- }
62
- .autocomplete-list a:focus,
63
- .autocomplete-list a:hover {
64
- background:Highlight;
65
- color:HighlightText;
66
- }
67
- .autocomplete-multi-status {
68
- width:192px;
69
- background:#ccc;
70
- font-size:10px;
71
- color:#555;
72
- padding:2px 5px;
73
- text-align:right;
1
+ .autocomplete-loading {
2
+ background-image:url(/images/autocomplete-loading.gif);
3
+ background-repeat: no-repeat;
4
+ background-position: 98% center;
5
+ }
6
+ .autocomplete-multi-controls .autocomplete-remove {
7
+ float:right;
8
+ margin-bottom:5px;
9
+ }
10
+ .autocomplete-multi-controls a {
11
+ outline:none;
12
+ }
13
+ .autocomplete-multi-container {
14
+ width:200px;
15
+ clear:both;
16
+ border:1px solid #ccc;
17
+ overflow:auto;
18
+ }
19
+ .autocomplete-multi-rowset {
20
+ padding:2px 4px;
21
+ border-bottom:1px dotted #ddd;
22
+ cursor:default;
23
+ }
24
+ .autocomplete-multi-rowset:hover {
25
+ background-color:#E8730C;
26
+ color:#fff;
27
+ }
28
+ .autocomplete-multi-rowset.selected,
29
+ .autocomplete-multi-rowset.selected:hover {
30
+ background:#eee;color:#000
31
+ }
32
+ .autocomplete-multi-rowset label{margin-left:5px;}
33
+ .autocomplete-multi-rowset:hover label{color:#fff}
34
+ .autocomplete-multi-rowset.selected:hover label{color:#000}
35
+
36
+ .autocomplete-list {
37
+ list-style-type:none;
38
+ position:absolute;
39
+ background:#fff;
40
+ border:1px solid #ccc;
41
+ width:300px;
42
+ max-height:200px;
43
+ overflow:auto;
44
+ }
45
+ .autocomplete-list li{
46
+ margin:0;
47
+ padding:0;
48
+ }
49
+ .autocomplete-list li.empty{
50
+ padding:2px 4px;
51
+ color:#777;
52
+ }
53
+ .autocomplete-list li.odd {
54
+ background:#eee;
55
+ }
56
+ .autocomplete-list a {
57
+ display:block;
58
+ text-decoration:none;
59
+ padding:2px 4px;
60
+ outline:none;
61
+ }
62
+ .autocomplete-list a:focus,
63
+ .autocomplete-list a:hover {
64
+ background:Highlight;
65
+ color:HighlightText;
66
+ }
67
+ .autocomplete-multi-status {
68
+ width:192px;
69
+ background:#ccc;
70
+ font-size:10px;
71
+ color:#555;
72
+ padding:2px 5px;
73
+ text-align:right;
74
74
  }
@@ -1,31 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # stub: autocomplete 1.0.2 ruby lib
2
3
 
3
4
  Gem::Specification.new do |s|
4
- s.name = %q{autocomplete}
5
- s.version = "1.0.1"
5
+ s.name = "autocomplete"
6
+ s.version = "1.0.2"
6
7
 
7
8
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
9
+ s.require_paths = ["lib"]
8
10
  s.authors = ["Voislav Jovanovic"]
9
- s.date = %q{2010-07-23}
10
- s.description = %q{Insert an autocomplete-search-box inside your view}
11
- s.email = %q{voislavj@gmail.com}
11
+ s.date = "2014-03-24"
12
+ s.description = "Insert an autocomplete-search-box inside your view"
13
+ s.email = "voislavj@gmail.com"
12
14
  s.extra_rdoc_files = ["README.rdoc", "lib/autocomplete.rb", "lib/autocomplete_controller.rb", "lib/autocomplete_helper.rb", "tasks/autocomplete_tasks.rake"]
13
- s.files = ["MIT-LICENSE", "README.rdoc", "Rakefile", "assets/autocomplete-loading.gif", "assets/autocomplete.css", "assets/autocomplete.js", "autocomplete.gemspec", "id_rsa.pub", "init.rb", "install.rb", "lib/autocomplete.rb", "lib/autocomplete_controller.rb", "lib/autocomplete_helper.rb", "tasks/autocomplete_tasks.rake", "test/autocomplete_test.rb", "Manifest"]
14
- s.homepage = %q{http://www.voja-jovanovic.info}
15
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Autocomplete", "--main", "README.rdoc"]
16
- s.require_paths = ["lib"]
17
- s.rubyforge_project = %q{autocomplete}
18
- s.rubygems_version = %q{1.3.7}
19
- s.summary = %q{Insert an autocomplete-search-box inside your view}
15
+ s.files = ["MIT-LICENSE", "Manifest", "README.rdoc", "Rakefile", "assets/autocomplete-loading.gif", "assets/autocomplete.css", "assets/autocomplete.js", "autocomplete.gemspec", "init.rb", "install.rb", "lib/autocomplete.rb", "lib/autocomplete_controller.rb", "lib/autocomplete_helper.rb", "tasks/autocomplete_tasks.rake", "test/autocomplete_test.rb"]
16
+ s.homepage = "http://www.vojajovanovic.com"
17
+ s.rdoc_options = ["--line-numbers", "--title", "Autocomplete", "--main", "README.rdoc"]
18
+ s.rubyforge_project = "autocomplete"
19
+ s.rubygems_version = "2.2.2"
20
+ s.summary = "Insert an autocomplete-search-box inside your view"
20
21
  s.test_files = ["test/autocomplete_test.rb"]
21
-
22
- if s.respond_to? :specification_version then
23
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
- s.specification_version = 3
25
-
26
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
- else
28
- end
29
- else
30
- end
31
22
  end
@@ -1,78 +1,78 @@
1
- class AutocompleteController < ActionController::Base
2
-
3
- def find
4
- params[:map] = {:value=>[:id], :label=>[:name], :search=>[:name]} unless params[:map]
5
- params[:limit] ||= 50
6
- params[:skip] ||= []
7
- params[:map][:search] ||= []
8
- params[:glue] ||= " "
9
-
10
- params[:joins] ||= []
11
-
12
- @modelname = params[:model]
13
- @model = params[:model].constantize
14
-
15
- params[:map][:label] = parse_table_fields(params[:map][:label])
16
- params[:map][:value] = parse_table_fields(params[:map][:value])
17
- params[:map][:search] = parse_table_fields(params[:map][:search])
18
-
19
- params[:joins].each_with_index do |v,k|
20
- params[:joins][k] = eval(":#{v}")
21
- end
22
-
23
- value = "CONCAT_WS(' ',#{params[:map][:value].join(",")})"
24
- label = "CONCAT_WS('#{params[:glue]}',#{params[:map][:label].join(",")})"
25
- search = "CONCAT_WS(' ',#{(params[:map][:label]|params[:map][:search]).join(",")})"
26
-
27
- skip = ""
28
- toskip = ""
29
-
30
- params[:skip].each do |s|
31
- toskip += ","
32
- unless s.to_s.match(/^\d+$/i)
33
- s = "'#{s}'"
34
- end
35
- toskip += s
36
- end
37
-
38
- toskip = toskip.gsub(/^,/, "")
39
- if params[:skip].length>0
40
- skip = "AND #{value} NOT IN(#{toskip})"
41
- end
42
-
43
- debug params[:joins]
44
-
45
- result = @model.find(
46
- :all, {
47
- :select => "#{value} as `value`, #{label} as `label`",
48
- :conditions => ["#{search} LIKE ? #{skip}", "%" + params[:keyword].gsub("%", "\%") + "%"],
49
- :joins => params[:joins],
50
- :order => "label",
51
- :limit => params[:limit]
52
- }
53
- );
54
- render :text => result.to_json
55
- end
56
-
57
- def debug(var, mode="w")
58
- File.open("D:\\voja.log", mode) {|f| f.write(var.to_yaml); f.close}
59
- end
60
-
61
- def parse_table_fields(arr)
62
- single = false
63
- unless arr.is_a?(Array)
64
- arr = [arr]
65
- single = true
66
- end
67
-
68
- arr.each_with_index do |v,k|
69
- puts v.inspect + " => " + v.to_s.inspect
70
- if v.to_s.match(/\./)
71
- items = v.to_s.split(".",2)
72
- arr[k] = "#{items[0].constantize.table_name}.#{items[1]}"
73
- end
74
- end
75
- return single ? arr[0] : arr;
76
- end
77
-
1
+ class AutocompleteController < ActionController::Base
2
+
3
+ def find
4
+ params[:map] = {:value=>[:id], :label=>[:name], :search=>[:name]} unless params[:map]
5
+ params[:limit] ||= 50
6
+ params[:skip] ||= []
7
+ params[:map][:search] ||= []
8
+ params[:glue] ||= " "
9
+
10
+ params[:joins] ||= []
11
+
12
+ @modelname = params[:model]
13
+ @model = params[:model].constantize
14
+
15
+ params[:map][:label] = parse_table_fields(params[:map][:label])
16
+ params[:map][:value] = parse_table_fields(params[:map][:value])
17
+ params[:map][:search] = parse_table_fields(params[:map][:search])
18
+
19
+ params[:joins].each_with_index do |v,k|
20
+ params[:joins][k] = eval(":#{v}")
21
+ end
22
+
23
+ value = "CONCAT_WS(' ',#{params[:map][:value].join(",")})"
24
+ label = "CONCAT_WS('#{params[:glue]}',#{params[:map][:label].join(",")})"
25
+ search = "CONCAT_WS(' ',#{(params[:map][:label]|params[:map][:search]).join(",")})"
26
+
27
+ skip = ""
28
+ toskip = ""
29
+
30
+ params[:skip].each do |s|
31
+ toskip += ","
32
+ unless s.to_s.match(/^\d+$/i)
33
+ s = "'#{s}'"
34
+ end
35
+ toskip += s
36
+ end
37
+
38
+ toskip = toskip.gsub(/^,/, "")
39
+ if params[:skip].length>0
40
+ skip = "AND #{value} NOT IN(#{toskip})"
41
+ end
42
+
43
+ debug params[:joins]
44
+
45
+ result = @model.find(
46
+ :all, {
47
+ :select => "#{value} as `value`, #{label} as `label`",
48
+ :conditions => ["#{search} LIKE ? #{skip}", "%" + params[:keyword].gsub("%", "\%") + "%"],
49
+ :joins => params[:joins],
50
+ :order => "label",
51
+ :limit => params[:limit]
52
+ }
53
+ );
54
+ render :text => result.to_json
55
+ end
56
+
57
+ def debug(var, mode="w")
58
+ File.open("D:\\voja.log", mode) {|f| f.write(var.to_yaml); f.close}
59
+ end
60
+
61
+ def parse_table_fields(arr)
62
+ single = false
63
+ unless arr.is_a?(Array)
64
+ arr = [arr]
65
+ single = true
66
+ end
67
+
68
+ arr.each_with_index do |v,k|
69
+ puts v.inspect + " => " + v.to_s.inspect
70
+ if v.to_s.match(/\./)
71
+ items = v.to_s.split(".",2)
72
+ arr[k] = "#{items[0].constantize.table_name}.#{items[1]}"
73
+ end
74
+ end
75
+ return single ? arr[0] : arr;
76
+ end
77
+
78
78
  end
@@ -1,43 +1,43 @@
1
- module AutocompleteHelper
2
-
3
- # generate autocomplete text-field
4
- def autocomplete(options={})
5
- return nil unless options[:model]
6
-
7
- options[:name] ||= :autocomplete_keyword
8
- options[:multi] ||= false;
9
-
10
- options[:multi_height] ||= 150
11
- options[:uuid] = _uuid
12
-
13
- options[:map][:value] ||= :id
14
- options[:map][:label] ||= [:name]
15
- options[:map][:search] ||= []
16
-
17
- #txt_name = options[:multi] ? "autocomplete-keyword-#{options[:uuid]}" : options[:name]
18
- txt_name = "autocomplete-keyword-#{options[:uuid]}"
19
-
20
- ret = []
21
- ret << javascript_include_tag("autocomplete")
22
- ret << stylesheet_link_tag("autocomplete")
23
- ret << label_tag(txt_name, options[:model].camelize)
24
- ret << text_field_tag(txt_name, nil, {
25
- :onfocus => "Autocomplete(this, " + options.to_json.to_s + ")"
26
- })
27
-
28
- if options[:multi]
29
- ret << content_tag(:div, '<a class="autocomplete-remove" href="javascript:void(0);">remove selected</a> select <a href="javascript:void(0)" class="autocomplete-select-all">all</a> / <a href="javascript:void(0)" class="autocomplete-select-none">none</a>', :class=>"autocomplete-multi-controls")
30
- ret << content_tag(:div, "", :class=>"autocomplete-multi-container", :style=>"height: #{options[:multi_height]}px")
31
- ret << content_tag(:div, "<span class=\"length\">0</span> items", :class=>"autocomplete-multi-status")
32
- else
33
- ret << hidden_field_tag(options[:name], "")
34
- end
35
-
36
- return ret.join("\r\n")
37
- end
38
-
39
- def _uuid
40
- o = [('a'..'z'),('A'..'Z'),(0..9)].map{|i| i.to_a}.flatten;
41
- string = (0..10).map{ o[rand(o.length)] }.join;
42
- end
1
+ module AutocompleteHelper
2
+
3
+ # generate autocomplete text-field
4
+ def autocomplete(options={})
5
+ return nil unless options[:model]
6
+
7
+ options[:name] ||= :autocomplete_keyword
8
+ options[:multi] ||= false;
9
+
10
+ options[:multi_height] ||= 150
11
+ options[:uuid] = _uuid
12
+
13
+ options[:map][:value] ||= :id
14
+ options[:map][:label] ||= [:name]
15
+ options[:map][:search] ||= []
16
+
17
+ #txt_name = options[:multi] ? "autocomplete-keyword-#{options[:uuid]}" : options[:name]
18
+ txt_name = "autocomplete-keyword-#{options[:uuid]}"
19
+
20
+ ret = []
21
+ ret << javascript_include_tag("autocomplete")
22
+ ret << stylesheet_link_tag("autocomplete")
23
+ ret << label_tag(options[:name], options[:model].camelize)
24
+ ret << text_field_tag(txt_name, nil, {
25
+ :onfocus => "Autocomplete(this, " + options.to_json.to_s + ")"
26
+ })
27
+
28
+ if options[:multi]
29
+ ret << content_tag(:div, '<a class="autocomplete-remove" href="javascript:void(0);">remove selected</a> select <a href="javascript:void(0)" class="autocomplete-select-all">all</a> / <a href="javascript:void(0)" class="autocomplete-select-none">none</a>', :class=>"autocomplete-multi-controls")
30
+ ret << content_tag(:div, "", :class=>"autocomplete-multi-container", :style=>"height: #{options[:multi_height]}px")
31
+ ret << content_tag(:div, "<span class=\"length\">0</span> items", :class=>"autocomplete-multi-status")
32
+ else
33
+ ret << hidden_field_tag(options[:name], "")
34
+ end
35
+
36
+ return ret.join("\r\n")
37
+ end
38
+
39
+ def _uuid
40
+ o = [('a'..'z'),('A'..'Z'),(0..9)].map{|i| i.to_a}.flatten;
41
+ string = (0..10).map{ o[rand(o.length)] }.join;
42
+ end
43
43
  end
metadata CHANGED
@@ -1,13 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autocomplete
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 0
9
- - 1
10
- version: 1.0.1
4
+ version: 1.0.2
11
5
  platform: ruby
12
6
  authors:
13
7
  - Voislav Jovanovic
@@ -15,8 +9,7 @@ autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
11
 
18
- date: 2010-07-23 00:00:00 +02:00
19
- default_executable:
12
+ date: 2014-03-24 00:00:00 Z
20
13
  dependencies: []
21
14
 
22
15
  description: Insert an autocomplete-search-box inside your view
@@ -33,13 +26,13 @@ extra_rdoc_files:
33
26
  - tasks/autocomplete_tasks.rake
34
27
  files:
35
28
  - MIT-LICENSE
29
+ - Manifest
36
30
  - README.rdoc
37
31
  - Rakefile
38
32
  - assets/autocomplete-loading.gif
39
33
  - assets/autocomplete.css
40
34
  - assets/autocomplete.js
41
35
  - autocomplete.gemspec
42
- - id_rsa.pub
43
36
  - init.rb
44
37
  - install.rb
45
38
  - lib/autocomplete.rb
@@ -47,15 +40,14 @@ files:
47
40
  - lib/autocomplete_helper.rb
48
41
  - tasks/autocomplete_tasks.rake
49
42
  - test/autocomplete_test.rb
50
- - Manifest
51
- has_rdoc: true
52
- homepage: http://www.voja-jovanovic.info
43
+ homepage: http://www.vojajovanovic.com
53
44
  licenses: []
54
45
 
46
+ metadata: {}
47
+
55
48
  post_install_message:
56
49
  rdoc_options:
57
50
  - --line-numbers
58
- - --inline-source
59
51
  - --title
60
52
  - Autocomplete
61
53
  - --main
@@ -63,30 +55,21 @@ rdoc_options:
63
55
  require_paths:
64
56
  - lib
65
57
  required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
58
  requirements:
68
59
  - - ">="
69
60
  - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
61
  version: "0"
74
62
  required_rubygems_version: !ruby/object:Gem::Requirement
75
- none: false
76
63
  requirements:
77
64
  - - ">="
78
65
  - !ruby/object:Gem::Version
79
- hash: 11
80
- segments:
81
- - 1
82
- - 2
83
66
  version: "1.2"
84
67
  requirements: []
85
68
 
86
69
  rubyforge_project: autocomplete
87
- rubygems_version: 1.3.7
70
+ rubygems_version: 2.2.2
88
71
  signing_key:
89
- specification_version: 3
72
+ specification_version: 4
90
73
  summary: Insert an autocomplete-search-box inside your view
91
74
  test_files:
92
75
  - test/autocomplete_test.rb
data/id_rsa.pub DELETED
@@ -1 +0,0 @@
1
- ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxm7FhP0LM71UVtxZLiZdmx0cyzj2cNCqE4UOD+JF5HvkbAmv2ySIqyO4NMSq9Ww96P+GW8o6UlnhzhziNMRoeon2b59AsjV5d8q8rlOKGT5z7zkN8VpoT8iht+wpQrZX4SLshlmwR90nP4ygDWh9Z9wZ1GVje36GqVUdYAKh0c2zYH5MZrfEuTIIMzaMJm6faRE/MG1Gx/Lqo+0mGw6k1Uz4Y7j8M/rm+SDC6Ws0TotKnnHkvhT2ZDi8ZB0Qvf7Zz0U/oamKYArXeLAeR6U+ytNozXq9lWvB15wKzLFYEHJonpmh3IH2oazfvksE1nzBlMGF37oHTJCDZ/hsQ+yAiQ== User@VOJA