tawork 0.0.19 → 0.0.20

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.
@@ -31,3 +31,4 @@
31
31
  //= require jquery.blockUI
32
32
  //= require backbone
33
33
  //= require backbone/tawork
34
+ //= require global_search
@@ -0,0 +1,76 @@
1
+ class window.GlobalSearch extends Backbone.View
2
+ events:
3
+ 'keyup #global-search': 'search'
4
+
5
+ initialize: (options = {}) ->
6
+ @$field = $("#global-search")
7
+ @$results = $("#global-search-results")
8
+ @$results.css
9
+ right: @$field.offset().left - @$field.outerWidth() - @$results.outerWidth()
10
+
11
+ search: (event) ->
12
+ value = $.trim @$field.val()
13
+
14
+ return @clear() if value.length == 0
15
+ return if value.length < 2
16
+ return if value == @last_value
17
+
18
+ @last_value = @$field.val()
19
+ @run_search()
20
+ # @interval = setInterval(@run_search, 300) if !@interval
21
+
22
+ clear: ->
23
+ @$results.addClass("hide")
24
+ clearInterval(@interval)
25
+ @interval = undefined
26
+ @last_search = undefined
27
+ @last_value = ""
28
+ @$el.removeClass("clear").removeClass("loading")
29
+ @$results.empty()
30
+ @$field.val("").focus()
31
+
32
+ run_search: ->
33
+ query = $.trim @$field.val()
34
+ return @clear() if query == ""
35
+
36
+ return if query == @last_search
37
+ @last_search = query
38
+
39
+ @loading.abort() if @loading
40
+
41
+ @$el.addClass("loading").removeClass("clear")
42
+ @$results.removeClass("hide")
43
+ console.log "running for: #{query}"
44
+
45
+ @loading = $.ajax
46
+ url: '/search'
47
+ data: { term: query }
48
+ success: (data) =>
49
+ @$results.html(data)
50
+ clearInterval(@interval)
51
+ @interval = undefined
52
+ @$el.removeClass("loading").addClass("clear")
53
+ @loading = undefined
54
+
55
+ dataType: 'html'
56
+ type: 'get'
57
+
58
+ # $ ->
59
+ # $("#global-search").autocomplete
60
+ # source: "/search"
61
+ # appendTo: "#global-autocomplete-results"
62
+ # minLength: 2
63
+ # select: ( event, ui ) ->
64
+ # response = if ui.item
65
+ # console.log ui.item
66
+ # "Selected: " + ui.item.value + " aka " + ui.item.id
67
+ # else
68
+ # "Nothing selected, input was " + this.value
69
+ # console.log response
70
+
71
+ # $("#global-search").data("ui-autocomplete")._renderItem = ( ul, item ) ->
72
+ # console.log item
73
+ # $( "<li>" )
74
+ # .attr( "data-value", item.title )
75
+ # .append( $( "<a>" ).text( item.title or item.filename ) )
76
+ # .appendTo( ul );
@@ -271,3 +271,27 @@ div.tokenfield.form-control
271
271
 
272
272
  .meta
273
273
  margin-bottom: 10px
274
+
275
+ #global-search-container
276
+ position: relative
277
+ #global-search-results
278
+ position: absolute
279
+ background-color: #292929
280
+ padding: 10px
281
+ height: 300px
282
+ width: 600px
283
+ color: #999999
284
+ border: 1px solid black
285
+ overflow-y: auto
286
+ .result
287
+ padding: 5px
288
+
289
+ &:hover
290
+ background-color: lighten(#999999, 10)
291
+
292
+ a
293
+ color: white
294
+ &:hover
295
+ text-decoration: none
296
+ i
297
+ padding-right: 4px
@@ -0,0 +1,53 @@
1
+ .ui-autocomplete {
2
+ position: absolute;
3
+ top: 100%;
4
+ left: 0;
5
+ z-index: 1000;
6
+ float: left;
7
+ display: none;
8
+ min-width: 160px;
9
+ _width: 160px;
10
+ padding: 4px 0;
11
+ margin: 2px 0 0 0;
12
+ list-style: none;
13
+ background-color: #ffffff;
14
+ border-color: #ccc;
15
+ border-color: rgba(0, 0, 0, 0.2);
16
+ border-style: solid;
17
+ border-width: 1px;
18
+ -webkit-border-radius: 5px;
19
+ -moz-border-radius: 5px;
20
+ border-radius: 5px;
21
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
22
+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
23
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
24
+ -webkit-background-clip: padding-box;
25
+ -moz-background-clip: padding;
26
+ background-clip: padding-box;
27
+ *border-right-width: 2px;
28
+ *border-bottom-width: 2px;
29
+
30
+ .ui-menu-item > a.ui-corner-all {
31
+ display: block;
32
+ padding: 3px 15px;
33
+ clear: both;
34
+ font-weight: normal;
35
+ line-height: 18px;
36
+ color: #555555;
37
+ white-space: nowrap;
38
+
39
+ &.ui-state-hover, &.ui-state-active {
40
+ color: #ffffff;
41
+ text-decoration: none;
42
+ background-color: #0088cc;
43
+ border-radius: 0px;
44
+ -webkit-border-radius: 0px;
45
+ -moz-border-radius: 0px;
46
+ background-image: none;
47
+ }
48
+ }
49
+ }
50
+
51
+ .ui-helper-hidden-accessible {
52
+ display: none;
53
+ }
@@ -1,4 +1,18 @@
1
1
  class SearchController < ApplicationController
2
+ def index
3
+ q = params[:term] + "*"
4
+ search_group = "spaces,pages,attachments"
5
+
6
+ query = Tire.search(search_group, load: true) do
7
+ query do
8
+ string q
9
+ end
10
+ end
11
+ @results = query.results
12
+
13
+ render layout: false
14
+ end
15
+
2
16
  def mentions
3
17
  q = params[:query]
4
18
  delimiter = params[:delimiter]
data/app/models/page.rb CHANGED
@@ -72,6 +72,12 @@ class Page < ActiveRecord::Base
72
72
  Page.where(id: (ancestor_ids + old_ancestor_ids).uniq).update_all(updated_at: Time.now)
73
73
  end
74
74
 
75
+ def to_indexed_json
76
+ json = self.as_json
77
+ json[:tag] = self.tag_list
78
+ json.to_json
79
+ end
80
+
75
81
  private
76
82
 
77
83
  end
@@ -1,6 +1,6 @@
1
1
  .navbar.navbar-inverse.navbar-fixed-top.main-navbar
2
2
  .container-fluid
3
- .navbar-header
3
+ .navbar-header.col-md-3
4
4
  %button.navbar-toggle{"data-target" => "#bs-example-navbar-collapse-1", "data-toggle" => "collapse", type: "button"}
5
5
  %span.sr-only Toggle navigation
6
6
  %span.icon-bar
@@ -11,9 +11,30 @@
11
11
 
12
12
  .collapse.navbar-collapse
13
13
  %ul.nav.navbar-nav
14
+ %li.dropdown
15
+ %a.dropdown-toggle{"data-toggle" => "dropdown", :href => "#"}
16
+ Spaces
17
+ %b.caret
18
+ %ul.dropdown-menu
19
+ %li
20
+ = link_to "Spaces Listing", wiki_pages_path, class: "space-link"
21
+ %li.divider
22
+ - Page.roots.each do |page|
23
+ %li
24
+ = link_to page.title, wiki_page_path(page)
25
+ %li.divider
26
+ %li
27
+ = link_to "Create New Space", new_wiki_space_path
14
28
  -# %li
15
29
  -# = link_to "wiki", wiki_path
16
30
  %ul.nav.navbar-nav.navbar-right
31
+ %li
32
+ #global-search-container
33
+ %form.navbar-form
34
+ %input#global-search.form-control{type: "text", placeholder: "Search...", style: "width: 400px;"}
35
+ #global-search-results.hide
36
+ :coffeescript
37
+ view = new GlobalSearch(el: $("#global-search-container"))
17
38
  - if user_signed_in?
18
39
  %li
19
40
  %a #{current_user.display_name}
@@ -40,3 +40,5 @@
40
40
  %i.fa.fa-plus
41
41
  .col-md-9.col-md-offset-3
42
42
  = yield
43
+
44
+ #global-autocomplete-results
@@ -0,0 +1,5 @@
1
+ = link_to wiki_page_path(result.attachable) do
2
+ %i.fa.fa-paperclip
3
+ = result.filename
4
+ attached to
5
+ = result.attachable.title
@@ -0,0 +1,4 @@
1
+ -# %pre= result.to_yaml
2
+ = link_to wiki_page_path(result) do
3
+ %i.fa.fa-file
4
+ = result.title
@@ -0,0 +1,4 @@
1
+ -# %pre= hit.to_yaml
2
+ = link_to wiki_page_path(result) do
3
+ %i.fa.fa-bullseye
4
+ = result.title
@@ -0,0 +1,8 @@
1
+ %p
2
+ #{pluralize(@results.total, "item")} found
3
+
4
+ %ul.results.list-unstyled
5
+ - @results.each_with_hit do |result, hit|
6
+ %li.result
7
+ = render "#{hit['_type']}", result: result, hit: hit
8
+
@@ -2,5 +2,5 @@
2
2
  - if @last_updated
3
3
  %span Last updated by
4
4
  .user= @last_updated.owner.display_name
5
- \-
5
+ %br/
6
6
  .time{data: {timestamp: @last_updated.created_at}}= timeago_tag @last_updated.created_at, date_only: false, format: :casual
data/config/routes.rb CHANGED
@@ -9,6 +9,7 @@ Rails.application.class.routes.draw do
9
9
  get 'sink/components' #=> "sink#components"
10
10
 
11
11
  get 'search/mentions' => "search#mentions"
12
+ get 'search' => "search#index"
12
13
 
13
14
  get 'wiki' => "wiki/pages#index"
14
15
  namespace :work do
data/db/schema.rb CHANGED
@@ -70,7 +70,7 @@ ActiveRecord::Schema.define(version: 20140314014649) do
70
70
  t.string "title"
71
71
  t.text "body"
72
72
  t.integer "creator_id"
73
- t.integer "position"
73
+ t.integer "position", default: 1000
74
74
  t.datetime "created_at"
75
75
  t.datetime "updated_at"
76
76
  end
@@ -1,3 +1,3 @@
1
1
  module Tawork
2
- VERSION = '0.0.19'
2
+ VERSION = '0.0.20'
3
3
  end
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tawork
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.19
4
+ version: 0.0.20
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Adnan Ali
@@ -13,6 +14,7 @@ dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rails
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - '='
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - '='
25
28
  - !ruby/object:Gem::Version
@@ -54,10 +57,12 @@ files:
54
57
  - app/assets/javascripts/backbone/views/ticket.js.coffee
55
58
  - app/assets/javascripts/backbone/views/tree_node_page.js.coffee
56
59
  - app/assets/javascripts/backbone/views/tree_node_ticket.js.coffee
60
+ - app/assets/javascripts/global_search.js.coffee
57
61
  - app/assets/javascripts/wiki/pages.js.coffee
58
62
  - app/assets/stylesheets/application.css
59
63
  - app/assets/stylesheets/bootstrap_and_overrides.sass
60
64
  - app/assets/stylesheets/diff.css
65
+ - app/assets/stylesheets/jquery-ui-autocomplete.css.scss
61
66
  - app/assets/stylesheets/wiki/pages.css.scss
62
67
  - app/controllers/application_controller.rb
63
68
  - app/controllers/assignments_controller.rb
@@ -126,6 +131,10 @@ files:
126
131
  - app/views/public_activity/ticket/_reorder.html.haml
127
132
  - app/views/public_activity/ticket/_state_change.html.haml
128
133
  - app/views/public_activity/ticket/_update_details.html.haml
134
+ - app/views/search/_attachment.html.haml
135
+ - app/views/search/_page.html.haml
136
+ - app/views/search/_space.html.haml
137
+ - app/views/search/index.html.haml
129
138
  - app/views/tickets/_activity.html.haml
130
139
  - app/views/tickets/_breadcrumb.html.haml
131
140
  - app/views/tickets/_bug_form.html.haml
@@ -293,26 +302,27 @@ files:
293
302
  homepage: ''
294
303
  licenses:
295
304
  - MIT
296
- metadata: {}
297
305
  post_install_message:
298
306
  rdoc_options: []
299
307
  require_paths:
300
308
  - lib
301
309
  required_ruby_version: !ruby/object:Gem::Requirement
310
+ none: false
302
311
  requirements:
303
312
  - - ! '>='
304
313
  - !ruby/object:Gem::Version
305
314
  version: '0'
306
315
  required_rubygems_version: !ruby/object:Gem::Requirement
316
+ none: false
307
317
  requirements:
308
318
  - - ! '>='
309
319
  - !ruby/object:Gem::Version
310
320
  version: '0'
311
321
  requirements: []
312
322
  rubyforge_project:
313
- rubygems_version: 2.2.2
323
+ rubygems_version: 1.8.23
314
324
  signing_key:
315
- specification_version: 4
325
+ specification_version: 3
316
326
  summary: Wiki and Tickets
317
327
  test_files: []
318
328
  has_rdoc:
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NzBhNzdiMDRlZTc5YmFhYjg2MGIzZDRlYTkwYjA4NWJlMzdiMTNhZQ==
5
- data.tar.gz: !binary |-
6
- NzhjNDA5ZDYyZjc5NmU4MmY0ZDk2ZmViODAxYzQyZTJlYWM4MTIwYg==
7
- SHA512:
8
- metadata.gz: !binary |-
9
- MDVjMTFjZGI3YmM1MzMwMzM5MGFjNGNkZjI1MjU0YTI5YWMyZDgzMTBiY2Ey
10
- ODk0ODdmZTlhOGNlMDI5Nzk2ZDg1NWNhN2M2ZTAxODU2YTQwNTdiNmFjNWQ2
11
- NjM1ZDBmNWY2MDQ3N2IxOGI5YzNhYWU3YzBhOGYzNDZhZjVlMWQ=
12
- data.tar.gz: !binary |-
13
- M2QwNWFmMWJmODFmZmNkOWYzNzM3MmM1OGZiNWYyZDc4MTdmNjRmOWZkOWQ5
14
- MTVmODM5NTM2NDc2YTljZjFiZTA1YzA0MDI1MTMzMGQ4NDRjMzIxNTJhYTBl
15
- ZGUzODI4NzA5MGE5YzRmNTMzNzViZTBmNWE3OGMxYTc2YmViNjc=