tailog 0.4.3 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -32,6 +32,17 @@
32
32
  </div>
33
33
 
34
34
  <script type="text/javascript">
35
+ String.prototype.hashCode = function(){
36
+ var hash = 0;
37
+ if (this.length == 0) return "0000000";
38
+ for (i = 0; i < this.length; i++) {
39
+ char = this.charCodeAt(i);
40
+ hash = ((hash<<5)-hash)+char;
41
+ hash = hash & hash; // Convert to 32bit integer
42
+ }
43
+ return ("0000000" + (hash >>> 0).toString(16)).substr(-8);
44
+ }
45
+
35
46
  var $settingsPanel = $("#settings-panel");
36
47
  $("#settings-toggle").click(function() {
37
48
  $settingsPanel.toggleClass("hidden");
@@ -49,18 +60,28 @@
49
60
  var $highlight = $("#highlight"),
50
61
  $highlightList = $("#highlight-list");
51
62
 
63
+ function highlightClassname(keyword) {
64
+ return 'highlight-' + keyword.hashCode();
65
+ }
66
+
52
67
  function rawHighlight(keyword) {
53
- $content.highlight(keyword, { className: 'highlight highlight-' + keyword });
68
+ $content.highlight(keyword, { className: 'highlight ' + highlightClassname(keyword) });
54
69
  }
55
70
 
56
71
  function rawUnhighlight(keyword) {
57
- $content.unhighlight({ className: 'highlight-' + keyword });
72
+ $content.unhighlight({ className: highlightClassname(keyword) });
58
73
  }
59
74
 
75
+ var highlightColors = ['#FFFF88', '#FF88FF', '#88FFFF', '#CCCCFF', '#CCFFCC', '#FFCCCC'];
60
76
  function highlight(keyword) {
61
- if ($highlightList.find('.highlight-' + keyword).length > 0) return;
77
+ var color = highlightColors[$highlightList.find("span").length % highlightColors.length];
78
+ var classname = highlightClassname(keyword);
79
+
80
+ if ($highlightList.find('.' + classname).length > 0) return;
62
81
  rawHighlight(keyword);
63
- $highlightList.append('<span class="label label-primary highlight-' + keyword + ' toggle-highlight">' + keyword + '</span>');
82
+ $highlightList.append('<div class="label label-primary ' + classname + '"><span>' + keyword + '</span><em>&bull;</em></div>');
83
+
84
+ $('body').append('<style>.highlight.' + classname + '{background-color:' + color + ';} .label.' + classname + '>em{color:' + color + ';}</style>');
64
85
  }
65
86
 
66
87
  $highlight.keypress(function(event) {
@@ -72,11 +93,12 @@
72
93
  highlight($highlight.val());
73
94
  });
74
95
 
75
- $("#highlight-list").on("click", ".toggle-highlight", function(event) {
96
+ $("#highlight-list").on("click", ".label", function(event) {
76
97
  var $this = $(this),
77
- keyword = $this.text();
78
- $this.data('hidden') ? rawHighlight(keyword) : rawUnhighlight(keyword);
79
- $this.data('hidden', !$this.data('hidden'));
98
+ keyword = $this.find('span').text();
99
+
100
+ $this.hasClass('highlight-hidden') ? rawHighlight(keyword) : rawUnhighlight(keyword);
101
+ $this.toggleClass('highlight-hidden');
80
102
  });
81
103
 
82
104
  window.fileSize = {};
@@ -101,9 +123,10 @@
101
123
  .append('<span class="text-info">' + data.server_hostname + ' - ' + data.file_size + '</span>')
102
124
  .append(ansi_up.ansi_to_html(data.content));
103
125
 
104
- $highlightList.find("span").each(function(index, node) {
105
- var $node = $(node);
106
- $node.data('hidden') || rawHighlight($node.text());
126
+ $highlightList.find(".label").each(function(index, node) {
127
+ var $node = $(node),
128
+ keyword = $node.find('span').text();
129
+ $node.hasClass('highlight-hidden') || rawHighlight(keyword);
107
130
  });
108
131
 
109
132
  if (shouldScrollToBottom) {
data/lib/tailog/eval.rb CHANGED
@@ -16,11 +16,17 @@ module Tailog
16
16
  else
17
17
  before = env["HTTP_TAILOG_EVAL_BEFORE"].presence
18
18
  after = env["HTTP_TAILOG_EVAL_AFTER"].presence
19
+ inject = env["HTTP_TAILOG_INJECT"].presence
20
+ inject_options = env["HTTP_TAILOG_INJECT_OPTIONS"].present? ? JSON.parse(env["HTTP_TAILOG_INJECT_OPTIONS"]).symbolize_keys : Hash.new
19
21
 
20
22
  binding = Object.new.send(:binding)
21
- binding.eval before if before
23
+ binding.eval(before) if before
24
+ Tailog.inject(inject.split(" "), inject_options) rescue nil if inject
25
+
22
26
  response = @app.call(env)
23
- binding.eval after if after
27
+
28
+ Tailog.cleanup(inject.split(" ")) if inject
29
+ binding.eval(after) if after
24
30
 
25
31
  response
26
32
  end
@@ -1,3 +1,3 @@
1
1
  module Tailog
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.5"
3
3
  end
@@ -34,6 +34,7 @@ module Tailog
34
34
  }
35
35
 
36
36
  def inject targets, options = {}
37
+ WatchMethods.logger.debug "Inject #{targets} with options #{options}."
37
38
  options = Tailog::WatchMethods.inject_options.merge(options)
38
39
  targets.each do |target|
39
40
  begin
@@ -51,6 +52,7 @@ module Tailog
51
52
  end
52
53
 
53
54
  def cleanup targets
55
+ WatchMethods.logger.debug "Cleanup #{targets}."
54
56
  targets.each do |target|
55
57
  if target.include? "#"
56
58
  cleanup_instance_method target
@@ -71,6 +73,11 @@ module Tailog
71
73
  end
72
74
 
73
75
  def inject_constant target, options
76
+ unless const_defined? target
77
+ WatchMethods.logger.error "Inject #{target} FAILED: NameError: uninitialized constant #{target}."
78
+ return
79
+ end
80
+
74
81
  constant = target.constantize
75
82
  constant.instance_methods(false).each do |method|
76
83
  inject_instance_method "#{target}##{method}", options unless raw_method? method
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tailog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - bbtfr
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-25 00:00:00.000000000 Z
11
+ date: 2016-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -59,14 +59,23 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - ".codeclimate.yml"
62
63
  - ".gitignore"
63
64
  - Gemfile
64
65
  - LICENSE.md
65
66
  - README.md
66
67
  - Rakefile
68
+ - app/assets/fonts/glyphicons-halflings-regular.eot
69
+ - app/assets/fonts/glyphicons-halflings-regular.svg
70
+ - app/assets/fonts/glyphicons-halflings-regular.ttf
71
+ - app/assets/fonts/glyphicons-halflings-regular.woff
72
+ - app/assets/fonts/glyphicons-halflings-regular.woff2
67
73
  - app/assets/javascripts/ansi_up.js
74
+ - app/assets/javascripts/jquery.form.js
68
75
  - app/assets/javascripts/jquery.highlight.js
76
+ - app/assets/javascripts/jquery.js
69
77
  - app/assets/stylesheets/application.css
78
+ - app/assets/stylesheets/bootstrap.css
70
79
  - app/views/env.erb
71
80
  - app/views/error.erb
72
81
  - app/views/layout.erb
@@ -105,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
114
  version: '0'
106
115
  requirements: []
107
116
  rubyforge_project:
108
- rubygems_version: 2.4.6
117
+ rubygems_version: 2.5.1
109
118
  signing_key:
110
119
  specification_version: 4
111
120
  summary: tail -f to the web-browser