hstatic 0.1.3 → 0.1.4

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
2
  SHA1:
3
- metadata.gz: a87fb753e036fc90718781e2343ef78d7b043b89
4
- data.tar.gz: 6e04b8a734f59391e3326ddd1ee9dc72bdbf0008
3
+ metadata.gz: fc6c94e2c7443c787a8f337d732043cec4a42148
4
+ data.tar.gz: 6c0e6225987069a69316b783bca50a87cb7b6809
5
5
  SHA512:
6
- metadata.gz: b0eeeaa9c35cda041f39a29fd07a0efdf1473370ab3970bf011f97461b9547809608f31a5742a79b34af9fbf753112670f0c207773ccb818156154db3aaa2f46
7
- data.tar.gz: 80c515b13c7f5d6e01bc780e956db067a89fe8135768c09e2bde29fbb007e3626b28eab4ca63ce20d85cd7133d7e49f99164d4c3625c326a320e20864840395a
6
+ metadata.gz: 6a496aaf963162bac12600556f8e4fc8d9a80c931cee789ec1fefbb8d0d98a474deffa06018296fe125bb63a7073261e3c6413f1f0ef40798c1812c87b4985c3
7
+ data.tar.gz: 1384c6eaeb79655ee6d4e251307ff394409ece790182be5e5a79cfbab21499a69772a6368c7dd9136e3bb4b385577971f50b6e9e536f496155e84b82e60d2027
@@ -0,0 +1,4 @@
1
+ inherit_from: /home/erickpc/.rubocop.yml
2
+
3
+ StringLiterals:
4
+ EnforcedStyle: single_quotes
@@ -0,0 +1,14 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard :minitest do
5
+ # with Minitest::Unit
6
+ watch(%r{^test/(.*)_test\.rb$}) { 'test' }
7
+ watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { 'test' }
8
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
9
+
10
+ # with Minitest::Spec
11
+ # watch(%r{^spec/(.*)_spec\.rb$})
12
+ # watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
13
+ # watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
14
+ end
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new(:test) do |t|
6
+ t.libs << 'lib'
7
+ t.libs << 'test'
8
+ t.pattern = 'test/*_test.rb'
9
+ t.verbose = false
10
+ end
@@ -22,6 +22,9 @@ It features a nice directory listing and automatic publishing of your index.html
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rack-test"
26
+ spec.add_development_dependency "guard"
27
+ spec.add_development_dependency "guard-minitest"
25
28
 
26
29
  spec.add_runtime_dependency "sinatra"
27
30
  spec.add_runtime_dependency "haml"
@@ -1,10 +1,11 @@
1
+ require 'pathname'
1
2
  require 'sinatra/base'
2
3
  require 'haml'
3
4
  require 'slim'
4
5
 
5
6
  # Main gem namespace
6
7
  module Hstatic
7
- BASEDIR = File.join(File.dirname(__FILE__), '..', '..')
8
+ BASEDIR = Pathname.new(__FILE__).dirname.join('..', '..')
8
9
 
9
10
  # Main Sinatra Application
10
11
  #
@@ -12,7 +13,7 @@ module Hstatic
12
13
  # templates files
13
14
  class App < Sinatra::Base
14
15
  configure do
15
- set :views, File.join(BASEDIR, 'views')
16
+ set :views, BASEDIR + 'views'
16
17
  set :environment, :development
17
18
  enable :logging
18
19
  end
@@ -33,14 +34,14 @@ module Hstatic
33
34
  # Finally every Tilt supported template is rendered
34
35
  helpers do
35
36
  def render_file(path)
36
- if template = Tilt[path]
37
+ if (template = Tilt[path])
37
38
  ext, _ = Tilt.mappings.find { |k, v| v.include? template }
38
39
 
39
40
  if self.respond_to? ext.to_sym
40
41
  method = self.method(ext)
41
- basename = File.basename(path, File.extname(path)).to_sym
42
+ basename = path.basename(path.extname).to_s.to_sym
42
43
 
43
- return method.call basename, :views => File.dirname(path)
44
+ return method.call basename, :views => path.dirname
44
45
  end
45
46
  end
46
47
 
@@ -49,62 +50,58 @@ module Hstatic
49
50
  end
50
51
 
51
52
  # Going around bootstrap
52
- get '/.res/bootstrap.min.css' do
53
- send_file(File.join(BASEDIR, 'res/bootstrap.min.css'))
54
- end
55
-
56
- get '/.res/style.css' do
57
- send_file(File.join(BASEDIR, 'res/style.css'))
58
- end
59
-
60
- get '/.res/jquery-1.10.2.min.js' do
61
- send_file(File.join(BASEDIR, 'res/jquery-1.10.2.min.js'))
62
- end
63
-
64
- get '/fonts/glyphicons-halflings-regular.woff' do
65
- send_file(File.join(BASEDIR, 'res/glyphicons-halflings-regular.woff'))
66
- end
67
-
68
- get '/fonts/glyphicons-halflings-regular.ttf' do
69
- send_file(File.join(BASEDIR, 'res/glyphicons-halflings-regular.ttf'))
53
+ %w(
54
+ /.res/bootstrap.min.css
55
+ /.res/style.css
56
+ /.res/jquery-1.10.2.min.js
57
+ ).each do |uri|
58
+ get uri do
59
+ send_file BASEDIR + uri.gsub(/^\/\./, '')
60
+ end
70
61
  end
71
62
 
72
- get '/fonts/glyphicons-halflings-regular.svg' do
73
- send_file(File.join(BASEDIR, 'res/glyphicons-halflings-regular.svg'))
63
+ %w(
64
+ /fonts/glyphicons-halflings-regular.woff
65
+ /fonts/glyphicons-halflings-regular.tff
66
+ /fonts/glyphicons-halflings-regular.svg
67
+ ).each do |uri|
68
+ get uri do
69
+ send_file BASEDIR + uri.gsub(/^\/fonts/, 'res')
70
+ end
74
71
  end
75
72
 
76
73
  # Catch all route
77
74
  get '*' do
78
- path = File.expand_path(File.join(Dir.pwd, unescape(request.path_info)))
75
+ # resource absolute path
76
+ path = Pathname.new(Dir.pwd).join(unescape(request.path_info).gsub(/^\//, ''))
77
+ path_info = Pathname.new request.path_info
79
78
 
80
- if File.file? path
79
+ if path.file?
81
80
  render_file path
82
- elsif File.exists?(File.expand_path(File.join(path, 'index.html')))
83
- redirect(File.join(request.path_info, 'index.html'))
84
- elsif File.directory? path
85
- # Building data
81
+ elsif path.directory?
82
+ %w(index.htm index.html).each do |file|
83
+ redirect(path_info + file) if (path + file).file?
84
+ end
85
+ # FIXME: ^^ using halt call inside redirect for control flow
86
+ # Building data for directory listing
86
87
  @folders = Array.new
87
88
  @files = Array.new
88
- @parent = File.dirname(request.path_info)
89
-
90
- Dir.foreach(path) do |entry|
91
- next if entry == '.' || entry == '..'
89
+ @parent = path_info.dirname
92
90
 
93
- url_base = File.join('/', request.path_info)
94
- link = File.join(url_base, entry)
95
- filename = File.expand_path(File.join(path, entry))
91
+ path.each_child do |entry|
92
+ link = path_info + entry.basename
96
93
 
97
- if File.directory? filename
98
- @folders << { name: entry, href: link }
94
+ if entry.directory?
95
+ @folders << { :name => entry.basename, :href => link }
99
96
  else
100
- @files << { name: unescape(entry),
101
- size: dynamic_size(File.size(filename)),
102
- href: link }
97
+ @files << { :name => entry.basename,
98
+ :size => dynamic_size(entry.size),
99
+ :href => link }
103
100
  end
104
101
  end
105
102
 
106
103
  # Render view
107
- haml :index
104
+ slim :index
108
105
  else
109
106
  [404, 'File not found']
110
107
  end
@@ -1,4 +1,4 @@
1
1
  # Main gem namespace
2
2
  module Hstatic
3
- VERSION = '0.1.3'
3
+ VERSION = '0.1.4'
4
4
  end
@@ -5,4 +5,10 @@
5
5
 
6
6
  .panel-heading button {
7
7
  margin-left: 20px;
8
+ }
9
+
10
+ .folder {
11
+ overflow: hidden;
12
+ text-overflow: ellipsis;
13
+ white-space: nowrap;
8
14
  }
@@ -0,0 +1,9 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Dummy Demo Index</title>
5
+ </head>
6
+ <body>
7
+ <p>This is a demo page</p>
8
+ </body>
9
+ </html>
@@ -0,0 +1,6 @@
1
+ %p This is a haml sample
2
+ %p This is another paragraph sample
3
+
4
+ %ul
5
+ %li First item
6
+ %li Second item
@@ -0,0 +1,6 @@
1
+ p This is a haml sample
2
+ p This is another paragraph sample
3
+
4
+ ul
5
+ li First item
6
+ li Second item
@@ -0,0 +1,33 @@
1
+ require_relative 'test_helper'
2
+
3
+ # Class for testing index.html redirection
4
+ class IndexTest < Minitest::Test
5
+ include Rack::Test::Methods
6
+
7
+ CONTENT = <<-BODY.strip_heredoc
8
+ <!DOCTYPE html>
9
+ <html>
10
+ <head>
11
+ <title>Dummy Demo Index</title>
12
+ </head>
13
+ <body>
14
+ <p>This is a demo page</p>
15
+ </body>
16
+ </html>
17
+ BODY
18
+
19
+ def app
20
+ Dir.chdir Pathname.new(__FILE__).dirname
21
+ Hstatic::App.new
22
+ end
23
+
24
+ def test_index_redirect
25
+ get '/dummy_folder'
26
+
27
+ assert_equal last_response.status, 302, 'Redirect failed'
28
+
29
+ follow_redirect!
30
+ assert_equal 200, last_response.status, 'Request status failed'
31
+ assert_equal last_response.body, CONTENT, 'Body content mismatched'
32
+ end
33
+ end
@@ -0,0 +1,64 @@
1
+ require_relative 'test_helper'
2
+
3
+ # Class for testing directory listing
4
+ class ListTest < Minitest::Test
5
+ include Rack::Test::Methods
6
+
7
+ TEST_LISTING = <<-BODY.strip_heredoc
8
+ <!DOCTYPE html><html><head><meta content="width=device-width, initial-scale=1.0" name="viewport" /><!--Bootstrap--><link href="/.res/bootstrap.min.css" rel="stylesheet" /><link href="/.res/style.css" rel="stylesheet" /><script src="/.res/jquery-1.10.2.min.js" type="text/javascript"></script></head><body><div class="container-fluid"><div class="row"><div class="col-md-4 col-md-offset-4"><input autofocus="" class="form-control" placeholder="Search" type="text" /></div></div><div class="row"><div class="col-lg-3 col-md-3 col-sm-3"><div class="panel panel-default"><div class="panel-heading">Folders<a class="pull-right" href="/"><span class="glyphicon glyphicon-arrow-up"></span>Up</a></div><div class="list-group"><a class="list-group-item folder" href="/dummy_folder" title="dummy_folder">dummy_folder</a></div></div></div><div class="col-lg-9 col-md-9 col-sm-9"><div class="panel panel-default"><div class="panel-heading">Files</div><table class="table table-hover"><thead><tr><th>#</th><th>Name</th><th>Size</th></tr></thead><tbody><tr><td>1</td><td><a href="/test_helper.rb">test_helper.rb</a></td><td> 0.00 kB</td></tr><tr><td>2</td><td><a href="/template_test.rb">template_test.rb</a></td><td> 0.00 kB</td></tr><tr><td>3</td><td><a href="/index_test.rb">index_test.rb</a></td><td> 0.00 kB</td></tr><tr><td>4</td><td><a href="/listing_test.rb">listing_test.rb</a></td><td> 2.00 kB</td></tr></tbody></table></div></div></div></div><script type="text/javascript">$(document).ready(function () {
9
+ var re = new RegExp;
10
+ /!* filtering */
11
+ $('input').on('input', function () {
12
+ value = $(this).val();
13
+ $('a.list-group-item, tr:has(a)').show();
14
+ if (value == "") {
15
+ return false;
16
+ }
17
+ re.compile(value, "i");
18
+ $.each($('a.list-group-item'), function(i, e){
19
+ if (! re.test(e.innerHTML)) {
20
+ $(e).hide();
21
+ }
22
+ });
23
+ $.each($('tr:has(a)'), function(i, e){
24
+ if (! re.test($('a', e).html())) {
25
+ $(e).hide();
26
+ }
27
+ });
28
+ });
29
+ $('input').on('keyup', function (event) {
30
+ if (event.which == 27) {
31
+ $('input').val("");
32
+ $('input').trigger('input');
33
+ }
34
+ });
35
+ });</script></body></html>
36
+ BODY
37
+
38
+ def app
39
+ Dir.chdir Pathname.new(__FILE__).dirname
40
+ Hstatic::App.new
41
+ end
42
+
43
+ def test_root
44
+ get '/'
45
+
46
+ assert last_response.ok?
47
+ end
48
+
49
+ def test_resources
50
+ %w(/.res/style.css /.res/bootstrap.min.css /.res/jquery-1.10.2.min.js).each do |uri|
51
+ get uri
52
+
53
+ assert_equal last_response.status, 200, 'Request status failed'
54
+ assert last_response.body != 'File not found', 'Body content mismatched'
55
+ end
56
+ end
57
+
58
+ def test_content
59
+ get '/'
60
+
61
+ assert_equal 200, last_response.status, 'Request status failed'
62
+ assert_equal last_response.body, TEST_LISTING.rstrip, 'Body content mismatched'
63
+ end
64
+ end
@@ -0,0 +1,36 @@
1
+ require_relative 'test_helper'
2
+
3
+ # Class for testing template rendering
4
+ class TemplateTest < Minitest::Test
5
+ include Rack::Test::Methods
6
+
7
+ HAML_CONTENT = <<-BODY.strip_heredoc
8
+ <p>This is a haml sample</p>
9
+ <p>This is another paragraph sample</p>
10
+ <ul>
11
+ <li>First item</li>
12
+ <li>Second item</li>
13
+ </ul>
14
+ BODY
15
+
16
+ SLIM_CONTENT = '<p>This is a haml sample</p><p>This is another paragraph sample</p><ul><li>First item</li><li>Second item</li></ul>'
17
+
18
+ def app
19
+ Dir.chdir Pathname.new(__FILE__).dirname
20
+ Hstatic::App.new
21
+ end
22
+
23
+ def test_haml_rendering
24
+ get '/dummy_folder/sample.haml'
25
+
26
+ assert_equal 200, last_response.status, 'Request status failed'
27
+ assert_equal last_response.body, HAML_CONTENT, 'Body content mismatched'
28
+ end
29
+
30
+ def test_slim_rendering
31
+ get '/dummy_folder/sample.slim'
32
+
33
+ assert_equal 200, last_response.status, 'Request status failed'
34
+ assert_equal last_response.body, SLIM_CONTENT, 'Body content mismatched'
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ require_relative '../lib/hstatic'
2
+
3
+ require 'minitest/autorun'
4
+ require 'rack/test'
5
+
6
+ # Migrated activesuport String#strip_heredoc patching
7
+ class String
8
+ def strip_heredoc
9
+ indent = scan(/^[ \t]*(?=\S)/).min.size || 0
10
+ gsub(/^[ \t]{#{indent}}/, '')
11
+ end
12
+ end
@@ -0,0 +1,76 @@
1
+ / UTF-8:
2
+
3
+ doctype 5
4
+ html
5
+ head
6
+ meta(name="viewport" content="width=device-width, initial-scale=1.0")
7
+
8
+ /! Bootstrap
9
+ link(href="/.res/bootstrap.min.css" rel="stylesheet")
10
+ link(href="/.res/style.css" rel="stylesheet")
11
+ script(src="/.res/jquery-1.10.2.min.js" type="text/javascript")
12
+ body
13
+ div.container-fluid
14
+ div.row
15
+ div.col-md-4.col-md-offset-4
16
+ input.form-control(type="text" placeholder="Search" autofocus)
17
+ div.row
18
+ div.col-lg-3.col-md-3.col-sm-3
19
+ div.panel.panel-default
20
+ div.panel-heading
21
+ | Folders
22
+ a.pull-right(href="#{@parent}")
23
+ span.glyphicon.glyphicon-arrow-up
24
+ | Up
25
+ div.list-group
26
+ - @folders.each do |folder|
27
+ a.list-group-item.folder(href="#{folder[:href]}" title="#{folder[:name]}") #{folder[:name]}
28
+
29
+ div.col-lg-9.col-md-9.col-sm-9
30
+ div.panel.panel-default
31
+ div.panel-heading Files
32
+ table.table.table-hover
33
+ thead
34
+ tr
35
+ th #
36
+ th Name
37
+ th Size
38
+ tbody
39
+ - i = 1
40
+ - @files.each do |file|
41
+ tr
42
+ td= i
43
+ td
44
+ a(href="#{file[:href]}") #{file[:name]}
45
+ td= file[:size]
46
+ - i += 1
47
+
48
+ javascript:
49
+ $(document).ready(function () {
50
+ var re = new RegExp;
51
+ /!* filtering */
52
+ $('input').on('input', function () {
53
+ value = $(this).val();
54
+ $('a.list-group-item, tr:has(a)').show();
55
+ if (value == "") {
56
+ return false;
57
+ }
58
+ re.compile(value, "i");
59
+ $.each($('a.list-group-item'), function(i, e){
60
+ if (! re.test(e.innerHTML)) {
61
+ $(e).hide();
62
+ }
63
+ });
64
+ $.each($('tr:has(a)'), function(i, e){
65
+ if (! re.test($('a', e).html())) {
66
+ $(e).hide();
67
+ }
68
+ });
69
+ });
70
+ $('input').on('keyup', function (event) {
71
+ if (event.which == 27) {
72
+ $('input').val("");
73
+ $('input').trigger('input');
74
+ }
75
+ });
76
+ });
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hstatic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erick Pérez Castellanos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-06 00:00:00.000000000 Z
11
+ date: 2014-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,48 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rack-test
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
41
83
  - !ruby/object:Gem::Dependency
42
84
  name: sinatra
43
85
  requirement: !ruby/object:Gem::Requirement
@@ -92,7 +134,9 @@ extensions: []
92
134
  extra_rdoc_files: []
93
135
  files:
94
136
  - ".gitignore"
137
+ - ".rubocop.yml"
95
138
  - Gemfile
139
+ - Guardfile
96
140
  - LICENSE.txt
97
141
  - README.md
98
142
  - Rakefile
@@ -109,7 +153,14 @@ files:
109
153
  - res/glyphicons-halflings-regular.woff
110
154
  - res/jquery-1.10.2.min.js
111
155
  - res/style.css
112
- - views/index.haml
156
+ - test/dummy_folder/index.html
157
+ - test/dummy_folder/sample.haml
158
+ - test/dummy_folder/sample.slim
159
+ - test/index_test.rb
160
+ - test/listing_test.rb
161
+ - test/template_test.rb
162
+ - test/test_helper.rb
163
+ - views/index.slim
113
164
  homepage: https://github.com/erick2red/hstatic
114
165
  licenses:
115
166
  - MIT
@@ -130,9 +181,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
181
  version: '0'
131
182
  requirements: []
132
183
  rubyforge_project:
133
- rubygems_version: 2.2.0
184
+ rubygems_version: 2.2.2
134
185
  signing_key:
135
186
  specification_version: 4
136
187
  summary: An HTTP server for you static files
137
- test_files: []
188
+ test_files:
189
+ - test/dummy_folder/index.html
190
+ - test/dummy_folder/sample.haml
191
+ - test/dummy_folder/sample.slim
192
+ - test/index_test.rb
193
+ - test/listing_test.rb
194
+ - test/template_test.rb
195
+ - test/test_helper.rb
138
196
  has_rdoc:
@@ -1,78 +0,0 @@
1
- -# UTF-8:
2
-
3
- !!! 5
4
- %html
5
- %head
6
- %meta(name="viewport" content="width=device-width, initial-scale=1.0")
7
-
8
- / Bootstrap
9
- %link(href="/.res/bootstrap.min.css" rel="stylesheet")
10
- %link(href="/.res/style.css" rel="stylesheet")
11
- %script(src="/.res/jquery-1.10.2.min.js" type="text/javascript")
12
- %body
13
- %div.container-fluid
14
- %div.row
15
- %div.col-md-4.col-md-offset-4
16
- %input.form-control(type="text" placeholder="Search" autofocus)
17
- %div.row
18
- %div.col-lg-3.col-md-3.col-sm-3
19
- %div.panel.panel-default
20
- %div.panel-heading
21
- Folders
22
- %a.pull-right(href="#{@parent}")
23
- %span.glyphicon.glyphicon-arrow-up
24
- Up
25
- %div.list-group
26
- - @folders.each do |folder|
27
- %a.list-group-item(href="#{folder[:href]}") #{folder[:name]}
28
-
29
- %div.col-lg-9.col-md-9.col-sm-9
30
- %div.panel.panel-default
31
- %div.panel-heading Files
32
- %table.table.table-hover
33
- %thead
34
- %tr
35
- %th #
36
- %th Name
37
- %th Size
38
- %tbody
39
- - i = 1
40
- - @files.each do |file|
41
- %tr
42
- %td= i
43
- %td
44
- %a(href="#{file[:href]}") #{file[:name]}
45
- %td= file[:size]
46
- - i += 1
47
-
48
- :javascript
49
- $(document).ready(function () {
50
- var re = new RegExp;
51
- /* filtering */
52
- $('input').on('input', function () {
53
- value = $(this).val();
54
- $('a.list-group-item, tr:has(a)').show();
55
- if (value == "") {
56
- return false;
57
- }
58
- re.compile(value, "i");
59
- $.each($('a.list-group-item'), function(i, e){
60
- if (! re.test(e.innerHTML)) {
61
- $(e).hide();
62
- }
63
- });
64
- $.each($('tr:has(a)'), function(i, e){
65
- if (! re.test($('a', e).html())) {
66
- $(e).hide();
67
- }
68
- });
69
- });
70
- $('input').on('keyup', function (event) {
71
- if (event.which == 27) {
72
- $('input').val("");
73
- $('input').trigger('input');
74
- }
75
- });
76
- });
77
-
78
-