tawork 0.0.22 → 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWJiZDIzZWI5OWE4NzM5OTljMTFjODA0YmJkMWU4ODAzNTFmMjdmMA==
4
+ YzE1NTgxMWQxYjI4MTJkMGJlYjEwM2U4YTY2ZWQ3OGVkMDE0NWRiNw==
5
5
  data.tar.gz: !binary |-
6
- NWIxOTIxODQwOWVhYzViNzM3ZWY1NTYxOTYyYTgwOWU5NDI5YTdlZQ==
6
+ ZTcwMzg0NzBkOTQ0NWRkNDNmMDcwM2Q1ZTVhZTlkMGM3ZGRjNmE4YQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- N2E3MDg0NGIwOWE4NmM5NmM5ZTAyYmYxYjRiYWQzMGE5OTBmMDgyNTU2Yjgx
10
- ODk1NmZmYTA4MjM1MmUwYWJmNWMwM2YyY2UzNGU3ZmFjODRiMTYxOGI1N2Y0
11
- M2E3OGY3Y2E3YTY3OGM5YmJjNmM2MWEwNDY2ZWNiNzVhYzQ4ZDI=
9
+ MGExNzkxNWY4ODExNTJkNGZmMWVkNDAyM2QxNTkxMTM3NjBlMjk1ZWVmZDc2
10
+ MDllZTBhY2ZjZTc0OWUyYTY0ZTk4NzVmNmJhMDgwOWUzZjFiMjkzNTMxMjdl
11
+ NThlMmZlNDU4NTQ2ZjAwODU4YTk5NmQ0NjQ5NTUyYmNiNTU4MDA=
12
12
  data.tar.gz: !binary |-
13
- OWNmMmI1OTVlM2YyOTc1ZWIzNmYyNDkwNDFhMTJjNTBmZjYxZjBiMzNlMjEw
14
- OTg1OWE3MzljYjY2YjQ2YzE4NWZlMDE1MTNhMTAyZjhiNTE1NzlhMWVjNDY1
15
- OTk2NmI0YWU4YjhkODIzNjFmNjhlOTc5ZGYxNzdjOWVjNGE3N2I=
13
+ NDkzMzZiOWI4NDZkYzdjYzVjMjM0MDNiMzhkMzUxMWVmNzBlYjIxMDdhMTM0
14
+ NzM5N2FhYTYzOTZlMGM5NDViOGJkMzI4N2JmZmYyYjRhYWFkMmE1OWVlOTFi
15
+ NDkxY2QyZmVmNzBmNWUwNjNhYWFjMDZiOTI0YTljYWM1ZmZlOGY=
@@ -1,7 +1,7 @@
1
1
  class SearchController < ApplicationController
2
2
  def index
3
3
  q = params[:term]
4
- @searcher = Searcher.search q
4
+ @searcher = Searcher.search query: q
5
5
 
6
6
  render layout: false
7
7
  end
@@ -9,44 +9,44 @@ class SearchController < ApplicationController
9
9
  def mentions
10
10
  q = params[:query]
11
11
  delimiter = params[:delimiter]
12
- search_group = "spaces,pages,projects,bugs,tasks,stories,users,attachments"
13
12
 
13
+ search_group = "pages,attachments"
14
14
  if delimiter == "!"
15
15
  search_group = "attachments"
16
16
  end
17
17
 
18
- query = Tire.search(search_group) do
19
- query do
20
- boolean do
21
- should { string "title:#{q}*" }
22
- should { string "filename:#{q}*" }
23
- should { string "name:#{q}*" }
24
- should { string "email:#{q}*" }
25
- end
26
- end
27
- end
18
+ q = ["title:#{q}*", "filename:#{q}*", "name:#{q}*", "email:#{q}*"].join(" OR ")
19
+ @searcher = Searcher.search q: q, search_group: search_group
28
20
 
29
- render json: query.results.map{|result| process_result(result) }
21
+ results = []
22
+ @searcher.results_with_hits{|result, hit| results << process_result(result, hit) }
23
+ render json: results
30
24
  end
31
25
 
32
26
  protected
33
27
 
34
28
  #TODO: dirty. fix.
35
- def process_result(result)
29
+ def process_result(result, hit)
36
30
  json = {}
37
- json[:type] = result._type
38
- if ["space", "page"].include?(result._type)
31
+ json[:type] = result.class.to_s.underscore
32
+ if ["space", "page"].include?(hit._type)
39
33
  json[:name] = result.title
40
34
  json[:url] = wiki_page_url(result.id)
41
- json[:space] = result.load.root.title
42
- elsif ["project", "bug", "task", "story"].include?(result._type)
35
+ json[:space] = result.root.title
36
+ if json[:type] == "space"
37
+ json[:icon] = "fa-bullseye"
38
+ else
39
+ json[:icon] = "fa-file"
40
+ end
41
+ elsif ["project", "bug", "task", "story"].include?(hit._type)
43
42
  json[:name] = result.title
44
43
  json[:url] = ticket_url(result.id)
45
- json[:project] = result.load.root.title
46
- elsif result._type == "attachment"
44
+ json[:project] = result.root.title
45
+ elsif hit._type == "attachment"
47
46
  json[:name] = result.filename
48
47
  json[:url] = attachment_url(result.id)
49
- elsif result._type == "user"
48
+ json[:icon] = "fa-paperclip"
49
+ elsif hit._type == "user"
50
50
  json[:name] = result.name
51
51
  json[:email] = result.email
52
52
  end
@@ -6,6 +6,17 @@ class Attachment < ActiveRecord::Base
6
6
  belongs_to :attachable, :polymorphic => true
7
7
  validates_presence_of :attachable
8
8
 
9
+ settings do
10
+ mappings dynamic: 'false' do
11
+ indexes :id, :index => :not_analyzed
12
+ indexes :type, :as => :type, :boost => 100
13
+ indexes :filename, :analyzer => 'snowball', :boost => 100
14
+ indexes :content_type, :analyzer => 'snowball'
15
+ indexes :created_at, :type => 'date', :include_in_all => false
16
+ indexes :updated_at, :type => 'date', :include_in_all => false
17
+ end
18
+ end
19
+
9
20
  def self.create_from_uploaded_file(file, user, options = {})
10
21
  filename = file.original_filename
11
22
  attachment = Attachment.create( options.merge(
@@ -71,7 +82,7 @@ class Attachment < ActiveRecord::Base
71
82
 
72
83
  def as_indexed_json(options = {})
73
84
  json = self.as_json
74
- json[:tag] = [self.class.to_s.underscore]
85
+ json[:type] = self.class.to_s.underscore
75
86
 
76
87
  json
77
88
  end
data/app/models/page.rb CHANGED
@@ -7,7 +7,7 @@ class Page < ActiveRecord::Base
7
7
  settings do
8
8
  mappings dynamic: 'false' do
9
9
  indexes :id, :index => :not_analyzed
10
- indexes :kind, :as => :type
10
+ indexes :type, :as => :type, :boost => 100
11
11
  indexes :ancestry, :index => :not_analyzed
12
12
  indexes :title, :analyzer => 'snowball', :boost => 100
13
13
  indexes :body, :analyzer => 'snowball'
@@ -87,7 +87,9 @@ class Page < ActiveRecord::Base
87
87
 
88
88
  def as_indexed_json(options = {})
89
89
  json = self.as_json
90
- json[:tag] = self.tag_list << self.class.to_s.underscore
90
+ json[:body] = Nokogiri::HTML(self.body || "").text
91
+ json[:tag] = self.tag_list
92
+ json[:type] = self.class.to_s.underscore
91
93
  json
92
94
  end
93
95
 
@@ -118,7 +118,7 @@
118
118
  text = item.type + ": " + item.project + " -> " + item.name
119
119
 
120
120
  return '<li>' +
121
- '<a href="javascript:;"><span>' + text + '</span></a>' +
121
+ '<a href="javascript:;"><i style="margin: 0 4px;" class="fa ' + (item.icon or "") + '"/><span>' + text + '</span></a>' +
122
122
  '</li>'
123
123
  insert: (item, delimiter) ->
124
124
  $html = $("<span>").text(item.name)
data/lib/searcher.rb CHANGED
@@ -1,12 +1,19 @@
1
1
  class Searcher
2
2
  attr_reader :results
3
3
 
4
- def initialize query
5
- @query = query
4
+ def initialize options = {}
5
+ @options = options
6
+
7
+ @query = options[:query]
8
+ @q = options[:q]
9
+
10
+ @search_group = options[:search_group] || "pages,attachments"
11
+ @type = options[:type]
12
+ @comparator = options[:comparator] || "AND"
6
13
  end
7
14
 
8
- def self.search query
9
- searcher = Searcher.new query
15
+ def self.search options = {}
16
+ searcher = Searcher.new options
10
17
  searcher.search
11
18
 
12
19
  searcher
@@ -14,9 +21,18 @@ class Searcher
14
21
 
15
22
  def search
16
23
  q = @query
17
- q = q.split(" ").collect{|x| "_all:" + x + "*"}.join(" AND ")
24
+
25
+ if @q
26
+ q = @q
27
+ else
28
+ q = q.split(" ").collect{|x| "_all:" + x + "*"}.join(" #{@comparator} ")
29
+ end
30
+
31
+ if @type
32
+ q = "(#{q}) AND type:#{@type}"
33
+ end
34
+
18
35
  client = Page.__elasticsearch__.client
19
- search_group = "pages,attachments"
20
36
  query = client.search index: search_group,
21
37
  size: 30,
22
38
  q: q
@@ -38,4 +54,8 @@ class Searcher
38
54
  yield grouped_results[hit._type][hit._source.id].first, hit
39
55
  end
40
56
  end
57
+
58
+ def search_group
59
+ @search_group
60
+ end
41
61
  end
@@ -1,3 +1,3 @@
1
1
  module Tawork
2
- VERSION = '0.0.22'
2
+ VERSION = '0.0.23'
3
3
  end
@@ -194,7 +194,7 @@
194
194
  var rtePosition = $(container).offset();
195
195
  var contentAreaPosition = $(this.editor.getContentAreaContainer() || this.editor.bodyElement).position();
196
196
  var nodePosition = $(this.editor.dom.select('span#autocomplete')).position();
197
- var top = rtePosition.top + nodePosition.top + $(this.editor.selection.getNode()).innerHeight() - $(this.editor.getDoc()).scrollTop() + 5;
197
+ var top = rtePosition.top + nodePosition.top + $(this.editor.selection.getNode()).innerHeight(); // - $(this.editor.getDoc()).scrollTop() + 5;
198
198
  var left = rtePosition.left + nodePosition.left;
199
199
 
200
200
  this.$dropdown = $(this.renderDropdown())
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tawork
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.22
4
+ version: 0.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adnan Ali