mongodb_logger 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) Alexey Vasiliev
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -122,12 +122,14 @@ It:
122
122
 
123
123
  mongodb_logger_web config.yml -p 8282
124
124
 
125
- ### Passenger
125
+ ### Passenger, Unicorn, Thin, etc.
126
126
 
127
- Using Passenger? MongodbLogger ships with a `config.ru` you can use. See Phusion's guide:
127
+ Using Passenger, Unicorn, Thin, etc? MongodbLogger ships with a `config.ru` you can use. See guide:
128
128
 
129
- * Apache: <http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_a_rack_based_ruby_application>
130
- * Nginx: <http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_a_rack_app>
129
+ * Passenger Apache: <http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_a_rack_based_ruby_application>
130
+ * Passenger Nginx: <http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_a_rack_app>
131
+ * Unicorn: <http://unicorn.bogomips.org>
132
+ * Thin: <http://code.macournoyer.com/thin/usage>
131
133
 
132
134
  Don't forget setup MONGODBLOGGERCONFIG env variable, which provide information about MongodbLogger config. Example starting with unicorn:
133
135
 
data/Rakefile CHANGED
@@ -11,6 +11,34 @@ end
11
11
  require "bundler/gem_tasks"
12
12
 
13
13
 
14
+ #########################################
15
+ ### Help tasks
16
+ #########################################
17
+
18
+ require 'coffee-script'
19
+ namespace :js do
20
+ desc "compile coffee-scripts from ./lib/mongodb_logger/server/coffee to ./lib/mongodb_logger/server/public/javascripts"
21
+ task :compile do
22
+ source = "#{File.dirname(__FILE__)}/lib/mongodb_logger/server/coffee/"
23
+ javascripts = "#{File.dirname(__FILE__)}/lib/mongodb_logger/server/public/javascripts/"
24
+
25
+ Dir.foreach(source) do |cf|
26
+ unless cf == '.' || cf == '..'
27
+ js = CoffeeScript.compile File.read("#{source}#{cf}")
28
+ open "#{javascripts}#{cf.gsub('.coffee', '.js')}", 'w' do |f|
29
+ f.puts js
30
+ end
31
+ end
32
+ end
33
+
34
+ puts "All done."
35
+ end
36
+ end
37
+
38
+ #########################################
39
+ ### TESTS
40
+ #########################################
41
+
14
42
  desc 'Default: run unit tests.'
15
43
  task :default => [:test]
16
44
  #task :default => [:test, "cucumber:rails:all"]
data/config.ru CHANGED
@@ -8,9 +8,10 @@ require 'mongodb_logger/server'
8
8
  # config file you want loaded on boot.
9
9
  if ENV['MONGODBLOGGERCONFIG'] && ::File.exists?(::File.expand_path(ENV['MONGODBLOGGERCONFIG']))
10
10
  MongodbLogger::ServerConfig.set_config(::File.expand_path(ENV['MONGODBLOGGERCONFIG']))
11
+ use Rack::ShowExceptions
12
+ run MongodbLogger::Server.new
11
13
  else
12
14
  raise "Please provide config file"
15
+ exit 1
13
16
  end
14
17
 
15
- use Rack::ShowExceptions
16
- run MongodbLogger::Server.new
@@ -7,4 +7,6 @@ Feature: Install the Gem in a Rails application and test it
7
7
  When I generate a new Rails application
8
8
  And I configure my application to require the "mongodb_logger" gem
9
9
  And I setup mongodb_logger tests
10
+ And I setup all gems for rails
11
+ And I prepare rails environment for testing
10
12
  Then the tests should have run successfully
@@ -32,12 +32,19 @@ When /^I setup mongodb_logger tests$/ do
32
32
  add_routes
33
33
  end
34
34
 
35
- Then /^the tests should have run successfully$/ do
35
+ When /^I setup all gems for rails$/ do
36
36
  bundle_gem("therubyracer", nil) if rails31?
37
37
  step %{I run "bundle install"}
38
38
  @terminal.status.exitstatus.should == 0
39
+ end
40
+
41
+ When /^I prepare rails environment for testing$/ do
39
42
  step %{I run "rake db:create db:migrate RAILS_ENV=test --trace"}
40
43
  @terminal.status.exitstatus.should == 0
44
+ end
45
+
46
+
47
+ Then /^the tests should have run successfully$/ do
41
48
  step %{I run "rake test RAILS_ENV=test --trace"}
42
49
  @terminal.status.exitstatus.should == 0
43
50
  end
@@ -43,19 +43,25 @@ module MongodbLogger
43
43
  end
44
44
 
45
45
  def add(severity, message = nil, progname = nil, &block)
46
- if @level <= severity && message.present? && @mongo_record.present?
46
+ if @level && @level <= severity && message.present? && @mongo_record.present?
47
47
  # do not modify the original message used by the buffered logger
48
48
  msg = logging_colorized? ? message.to_s.gsub(/(\e(\[([\d;]*[mz]?))?)?/, '').strip : message
49
49
  @mongo_record[:messages][LOG_LEVEL_SYM[severity]] << msg
50
50
  end
51
51
  # may modify the original message
52
- disable_file_logging? ? message : super
52
+ disable_file_logging? ? message : (@level ? super : message)
53
53
  end
54
54
 
55
55
  # Drop the capped_collection and recreate it
56
56
  def reset_collection
57
- @mongo_collection.drop
58
- create_collection
57
+ if @mongo_connection && @mongo_collection
58
+ @mongo_collection.drop
59
+ create_collection
60
+ end
61
+ end
62
+
63
+ def flush
64
+ # do nothing
59
65
  end
60
66
 
61
67
  def mongoize(options={})
@@ -1,6 +1,9 @@
1
1
  require 'sinatra/base'
2
2
  require 'erubis'
3
3
  require 'json'
4
+ require 'active_support'
5
+
6
+ require 'mongodb_logger/server/view_helpers'
4
7
  require 'mongodb_logger/server/partials'
5
8
  require 'mongodb_logger/server/model/filter'
6
9
  require 'mongodb_logger/server_config'
@@ -11,6 +14,7 @@ end
11
14
 
12
15
  module MongodbLogger
13
16
  class Server < Sinatra::Base
17
+ helpers Sinatra::ViewHelpers
14
18
  helpers Sinatra::Partials
15
19
 
16
20
  dir = File.dirname(File.expand_path(__FILE__))
@@ -22,7 +26,7 @@ module MongodbLogger
22
26
  else
23
27
  set :public, "#{dir}/server/public"
24
28
  end
25
-
29
+ set :environment, :production
26
30
  set :static, true
27
31
 
28
32
  helpers do
@@ -42,19 +46,6 @@ module MongodbLogger
42
46
  request.env['SCRIPT_NAME']
43
47
  end
44
48
 
45
- def get_field_val(key)
46
- return MongodbLogger::ServerModel::Filter::DEFAULT_LIMIT if !@filter_model && "limit" == key
47
- @filter_model ? @filter_model.get_val(key) : nil
48
- end
49
-
50
- def select_tag(name, values, selected = nil)
51
- selector = ["<select name=#{name}>"]
52
- values.each do |val|
53
- selector << "<option value='#{val}' #{"selected='selected'" if val.to_s == selected.to_s}>#{val}</option>"
54
- end
55
- selector << "</select>"
56
- selector.join("\n")
57
- end
58
49
  end
59
50
 
60
51
  before do
@@ -70,10 +61,11 @@ module MongodbLogger
70
61
  erb :error, {:layout => false}, :error => "Can't connect to MongoDB!"
71
62
  return false
72
63
  end
64
+
65
+ cache_control :private, :must_revalidate, :max_age => 0
73
66
  end
74
67
 
75
68
  def show(page, layout = true)
76
- response["Cache-Control"] = "max-age=0, private, must-revalidate"
77
69
  begin
78
70
  erb page.to_sym, {:layout => layout}
79
71
  rescue => e
@@ -88,13 +80,8 @@ module MongodbLogger
88
80
 
89
81
  %w( overview ).each do |page|
90
82
  get "/#{page}/?" do
91
- if params[:f]
92
- @filter_model = MongodbLogger::ServerModel::Filter.new(params[:f])
93
- @logs = @collection.find(@filter_model.get_conditions).limit(@filter_model.get_limit)
94
- else
95
- @logs = @collection.find.limit(MongodbLogger::ServerModel::Filter::DEFAULT_LIMIT)
96
- end
97
- @logs = @logs.sort('$natural', -1)
83
+ @filter = MongodbLogger::ServerModel::Filter.new(params[:filter])
84
+ @logs = @collection.find(@filter.get_mongo_conditions).sort('$natural', -1).limit(@filter.get_mongo_limit)
98
85
  show page
99
86
  end
100
87
  end
@@ -126,11 +113,9 @@ module MongodbLogger
126
113
  partial(:"shared/log_info", :object => @log)
127
114
  end
128
115
 
129
- # application js
130
- get '/application.js' do
131
- content_type 'text/javascript'
132
- coffee :application
116
+ error do
117
+ erb :error, {:layout => false}, :error => 'Sorry there was a nasty error. Maybe no connection to MongoDB. Debug: ' + env['sinatra.error'].inspect
133
118
  end
134
119
 
135
120
  end
136
- end
121
+ end
@@ -43,12 +43,13 @@ MongodbLoggerJS =
43
43
  url: url
44
44
  dataType: "json"
45
45
  success: (data) ->
46
- if count != data.count
47
- if data.content? && data.content.length > 0
48
- $('#logs_list tr:first').after(data.content)
49
- count = data.count
50
46
  if data.time
51
47
  $('#tail_logs_time').text(data.time)
48
+ if count != data.count
49
+ count = data.count
50
+ if data.content? && data.content.length > 0
51
+ data.content += '<tr class="tail_date"><td colspan="6">' + data.time + '</td></tr>'
52
+ $('#logs_list tr:first').after(data.content).effect("highlight", {}, 1000)
52
53
  if MongodbLoggerJS.tail_log_started
53
54
  fcallback = -> MongodbLoggerJS.tail_logs(count)
54
55
  setTimeout fcallback, 2000
@@ -4,32 +4,47 @@ module MongodbLogger
4
4
 
5
5
  DEFAULT_LIMIT = 2000
6
6
  FIXED_PARAMS = ['action', 'controller', 'ip', 'application_name']
7
- attr_reader :params, :mongo_conditions
7
+ attr_reader :params, :mongo_conditions, :mongo_limit
8
8
 
9
9
  def initialize(params)
10
+ if params.nil?
11
+ params = Hash.new
12
+ FIXED_PARAMS.each do |key|
13
+ params[key] = nil
14
+ end
15
+ end
10
16
  @params = params
17
+ params.each do |k,v|
18
+ self.instance_variable_set("@#{k}", v) ## create instance variable
19
+ self.class.send(:define_method, k, proc{self.instance_variable_get("@#{k}")}) ## method to return instance variable
20
+ self.class.send(:define_method, "#{k}=", proc{|v| self.instance_variable_set("@#{k}", v)}) ## method to set instance variable
21
+ end
11
22
  build_mongo_conditions
12
23
  end
13
24
 
14
25
  def build_mongo_conditions
15
26
  @mongo_conditions = Hash.new
16
27
  FIXED_PARAMS.each do |param_key|
17
- @mongo_conditions[param_key] = @params[param_key] unless @params[param_key].blank?
28
+ if self.respond_to?(param_key)
29
+ value = self.send param_key
30
+ @mongo_conditions[param_key.to_s] = value unless value.blank?
31
+ end
18
32
  end
33
+ # set limit
34
+ @mongo_limit = DEFAULT_LIMIT
35
+ @mongo_limit = self.limit if self.respond_to?("limit")
19
36
  end
20
37
 
21
- def get_conditions
38
+ def get_mongo_conditions
22
39
  @mongo_conditions
23
40
  end
24
41
 
25
- def get_val(key)
26
- (@params[key] && !@params[key].blank?) ? @params[key] : nil
42
+ def get_mongo_limit
43
+ @mongo_limit
27
44
  end
28
45
 
29
- def get_limit
30
- limit = @params['limit'].to_i
31
- limit = DEFAULT_LIMIT if !limit || (limit && (limit < 1 || limit > 10000))
32
- limit
46
+ def form_name
47
+ "filter"
33
48
  end
34
49
 
35
50
  end
@@ -0,0 +1,80 @@
1
+ (function() {
2
+ var MongodbLoggerJS;
3
+
4
+ $(function() {
5
+ return MongodbLoggerJS.init();
6
+ });
7
+
8
+ MongodbLoggerJS = {
9
+ tail_logs_url: null,
10
+ tail_log_started: false,
11
+ init: function() {
12
+ var _this = this;
13
+ $(document).ajaxStart(function() {
14
+ return $('#ajax_loader').show();
15
+ });
16
+ $(document).ajaxStop(function() {
17
+ return $('#ajax_loader').hide();
18
+ });
19
+ $('#tail_logs_link').live('click', function(event) {
20
+ MongodbLoggerJS.tail_logs_url = $(event.target).attr('data-url');
21
+ $('#tail_logs_block').addClass('started');
22
+ MongodbLoggerJS.tail_logs(null);
23
+ return false;
24
+ });
25
+ $('#tail_logs_stop_link').live('click', function(event) {
26
+ MongodbLoggerJS.tail_log_started = false;
27
+ $('#tail_logs_block').removeClass('started');
28
+ return false;
29
+ });
30
+ return $('.log_info').live('click', function(event) {
31
+ var elm_obj, url;
32
+ elm_obj = $(event.target);
33
+ url = elm_obj.attr('data-url');
34
+ if (!(url != null)) url = elm_obj.parents('tr').attr('data-url');
35
+ if (url != null) {
36
+ elm_obj.parents('table').find('tr').removeClass('current');
37
+ elm_obj.parents('tr').addClass('current');
38
+ $('#log_info').load(url);
39
+ }
40
+ return false;
41
+ });
42
+ },
43
+ tail_logs: function(count) {
44
+ var url;
45
+ url = MongodbLoggerJS.tail_logs_url;
46
+ if (count != null) {
47
+ url = MongodbLoggerJS.tail_logs_url + "/" + count;
48
+ } else {
49
+ MongodbLoggerJS.tail_log_started = true;
50
+ count = 0;
51
+ }
52
+ if (MongodbLoggerJS.tail_log_started) {
53
+ return $.ajax({
54
+ url: url,
55
+ dataType: "json",
56
+ success: function(data) {
57
+ var fcallback;
58
+ if (data.time) {
59
+ $('#tail_logs_time').text(data.time);
60
+ if (count !== data.count) {
61
+ count = data.count;
62
+ if ((data.content != null) && data.content.length > 0) {
63
+ data.content += '<tr class="tail_date"><td colspan="6">' + data.time + '</td></tr>';
64
+ $('#logs_list tr:first').after(data.content).effect("highlight", {}, 1000);
65
+ }
66
+ }
67
+ }
68
+ if (MongodbLoggerJS.tail_log_started) {
69
+ fcallback = function() {
70
+ return MongodbLoggerJS.tail_logs(count);
71
+ };
72
+ return setTimeout(fcallback, 2000);
73
+ }
74
+ }
75
+ });
76
+ }
77
+ }
78
+ };
79
+
80
+ }).call(this);
@@ -0,0 +1,221 @@
1
+ /*
2
+ * jQuery UI Effects 1.8.16
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Effects/
9
+ */
10
+ jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
11
+ 16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
12
+ a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
13
+ a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
14
+ "borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
15
+ 0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
16
+ 211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
17
+ d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
18
+ f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
19
+ [{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.16",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
20
+ 0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),
21
+ d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement;
22
+ if(c.parent().is(".ui-effects-wrapper")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});
23
+ return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,
24
+ arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/
25
+ 2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,
26
+ d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,
27
+ a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,
28
+ d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=
29
+ 0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;
30
+ if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,
31
+ a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
32
+ ;/*
33
+ * jQuery UI Effects Blind 1.8.16
34
+ *
35
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
36
+ * Dual licensed under the MIT or GPL Version 2 licenses.
37
+ * http://jquery.org/license
38
+ *
39
+ * http://docs.jquery.com/UI/Effects/Blind
40
+ *
41
+ * Depends:
42
+ * jquery.effects.core.js
43
+ */
44
+ (function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
45
+ g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
46
+ ;/*
47
+ * jQuery UI Effects Bounce 1.8.16
48
+ *
49
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
50
+ * Dual licensed under the MIT or GPL Version 2 licenses.
51
+ * http://jquery.org/license
52
+ *
53
+ * http://docs.jquery.com/UI/Effects/Bounce
54
+ *
55
+ * Depends:
56
+ * jquery.effects.core.js
57
+ */
58
+ (function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
59
+ 3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
60
+ b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
61
+ ;/*
62
+ * jQuery UI Effects Clip 1.8.16
63
+ *
64
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
65
+ * Dual licensed under the MIT or GPL Version 2 licenses.
66
+ * http://jquery.org/license
67
+ *
68
+ * http://docs.jquery.com/UI/Effects/Clip
69
+ *
70
+ * Depends:
71
+ * jquery.effects.core.js
72
+ */
73
+ (function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
74
+ c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
75
+ ;/*
76
+ * jQuery UI Effects Drop 1.8.16
77
+ *
78
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
79
+ * Dual licensed under the MIT or GPL Version 2 licenses.
80
+ * http://jquery.org/license
81
+ *
82
+ * http://docs.jquery.com/UI/Effects/Drop
83
+ *
84
+ * Depends:
85
+ * jquery.effects.core.js
86
+ */
87
+ (function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
88
+ "show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
89
+ ;/*
90
+ * jQuery UI Effects Explode 1.8.16
91
+ *
92
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
93
+ * Dual licensed under the MIT or GPL Version 2 licenses.
94
+ * http://jquery.org/license
95
+ *
96
+ * http://docs.jquery.com/UI/Effects/Explode
97
+ *
98
+ * Depends:
99
+ * jquery.effects.core.js
100
+ */
101
+ (function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
102
+ 0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
103
+ e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
104
+ ;/*
105
+ * jQuery UI Effects Fade 1.8.16
106
+ *
107
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
108
+ * Dual licensed under the MIT or GPL Version 2 licenses.
109
+ * http://jquery.org/license
110
+ *
111
+ * http://docs.jquery.com/UI/Effects/Fade
112
+ *
113
+ * Depends:
114
+ * jquery.effects.core.js
115
+ */
116
+ (function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
117
+ ;/*
118
+ * jQuery UI Effects Fold 1.8.16
119
+ *
120
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
121
+ * Dual licensed under the MIT or GPL Version 2 licenses.
122
+ * http://jquery.org/license
123
+ *
124
+ * http://docs.jquery.com/UI/Effects/Fold
125
+ *
126
+ * Depends:
127
+ * jquery.effects.core.js
128
+ */
129
+ (function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
130
+ 10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
131
+ ;/*
132
+ * jQuery UI Effects Highlight 1.8.16
133
+ *
134
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
135
+ * Dual licensed under the MIT or GPL Version 2 licenses.
136
+ * http://jquery.org/license
137
+ *
138
+ * http://docs.jquery.com/UI/Effects/Highlight
139
+ *
140
+ * Depends:
141
+ * jquery.effects.core.js
142
+ */
143
+ (function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
144
+ this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
145
+ ;/*
146
+ * jQuery UI Effects Pulsate 1.8.16
147
+ *
148
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
149
+ * Dual licensed under the MIT or GPL Version 2 licenses.
150
+ * http://jquery.org/license
151
+ *
152
+ * http://docs.jquery.com/UI/Effects/Pulsate
153
+ *
154
+ * Depends:
155
+ * jquery.effects.core.js
156
+ */
157
+ (function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
158
+ a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
159
+ ;/*
160
+ * jQuery UI Effects Scale 1.8.16
161
+ *
162
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
163
+ * Dual licensed under the MIT or GPL Version 2 licenses.
164
+ * http://jquery.org/license
165
+ *
166
+ * http://docs.jquery.com/UI/Effects/Scale
167
+ *
168
+ * Depends:
169
+ * jquery.effects.core.js
170
+ */
171
+ (function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
172
+ b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
173
+ 1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
174
+ p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
175
+ if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
176
+ a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
177
+ child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
178
+ n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
179
+ ;/*
180
+ * jQuery UI Effects Shake 1.8.16
181
+ *
182
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
183
+ * Dual licensed under the MIT or GPL Version 2 licenses.
184
+ * http://jquery.org/license
185
+ *
186
+ * http://docs.jquery.com/UI/Effects/Shake
187
+ *
188
+ * Depends:
189
+ * jquery.effects.core.js
190
+ */
191
+ (function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
192
+ (h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
193
+ ;/*
194
+ * jQuery UI Effects Slide 1.8.16
195
+ *
196
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
197
+ * Dual licensed under the MIT or GPL Version 2 licenses.
198
+ * http://jquery.org/license
199
+ *
200
+ * http://docs.jquery.com/UI/Effects/Slide
201
+ *
202
+ * Depends:
203
+ * jquery.effects.core.js
204
+ */
205
+ (function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
206
+ var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
207
+ ;/*
208
+ * jQuery UI Effects Transfer 1.8.16
209
+ *
210
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
211
+ * Dual licensed under the MIT or GPL Version 2 licenses.
212
+ * http://jquery.org/license
213
+ *
214
+ * http://docs.jquery.com/UI/Effects/Transfer
215
+ *
216
+ * Depends:
217
+ * jquery.effects.core.js
218
+ */
219
+ (function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
220
+ b.dequeue()})})}})(jQuery);
221
+ ;
@@ -0,0 +1,23 @@
1
+ # view helpers
2
+ module Sinatra::ViewHelpers
3
+
4
+ def text_field_tag(object, name, options = {})
5
+ value = ""
6
+ value = options.delete(:value) if options[:value]
7
+ value = object.send name if object
8
+ attr = []
9
+ options.each do |key, val|
10
+ attr << "#{key}='#{val}'"
11
+ end
12
+ "<input type='text' name='#{object.form_name}[#{name.to_s}]' value='#{value}' #{attr.join(" ")} />"
13
+ end
14
+
15
+ def submit_tag(name, value, options = {})
16
+ attr = []
17
+ options.each do |key, val|
18
+ attr << "#{key}='#{val}'"
19
+ end
20
+ "<input type='submit' name='#{name.to_s}]' value='#{value}' #{attr.join(" ")} />"
21
+ end
22
+
23
+ end
@@ -4,7 +4,8 @@
4
4
  <title>MongoDB logger</title>
5
5
  <link href="<%=u 'stylesheets/all.css' %>" media="screen" rel="stylesheet" type="text/css">
6
6
  <script src="<%=u 'javascripts/jquery-1.7.min.js' %>" type="text/javascript"></script>
7
- <script src="<%=u 'application.js' %>" type="text/javascript"></script>
7
+ <script src="<%=u 'javascripts/jquery-ui-1.8.16.effects.min.js' %>" type="text/javascript"></script>
8
+ <script src="<%=u 'javascripts/application.js' %>" type="text/javascript"></script>
8
9
  </head>
9
10
  <body>
10
11
  <div class="page">
@@ -25,22 +25,22 @@
25
25
  <div class="unit size1of3">
26
26
  <div class="unit size1of2">
27
27
  <div class="prm">
28
- <input id="f_controller" type="text" name="f[controller]" value="<%=get_field_val('controller')%>" placeholder="Controller" />
28
+ <%= text_field_tag @filter, :controller, :placeholder => "Controller" %>
29
29
  </div> <!-- prm -->
30
30
  </div>
31
31
  <div class="unit size1of2">
32
32
  <div class="prm">
33
- <input id="f_action" type="text" name="f[action]" value="<%=get_field_val('action')%>" placeholder="Action" />
33
+ <%= text_field_tag @filter, :action, :placeholder => "Action" %>
34
34
  </div>
35
35
  </div>
36
36
  </div>
37
37
  <div class="unit size1of3">
38
- <div class="unit size1of2">
39
- <%=select_tag("f[limit]", [100, 500, 1000, 2000, 5000, 10000], get_field_val('limit'))%>
38
+ <div class="unit size1of2">
39
+ <%#= select_tag @filter, :limit, :options => [100, 500, 1000, 2000, 5000, 10000] %>
40
40
  </div>
41
41
  </div>
42
42
  <div class="unit size1of3 txtR">
43
- <input type="submit" name="submit" value="Filter" class="button primary" />
43
+ <%= submit_tag :submit, "Filter", :class => "button primary" %>
44
44
  <a href="<%=h url_path("overview") %>" class="button small mls">Clear</a>
45
45
  </div>
46
46
  </div> <!-- outer -->
@@ -48,21 +48,22 @@
48
48
  <div class="unit size1of3">
49
49
  <div class="unit size1of2">
50
50
  <div class="prm">
51
- <input id="f_application_name" type="text" name="f[application_name]" value="<%=get_field_val('application_name')%>" placeholder="Application Name" />
51
+ <%= text_field_tag @filter, :application_name, :placeholder => "Application Name" %>
52
52
  </div>
53
53
  </div>
54
54
  <div class="unit size1of2">
55
55
  <div class="prm">
56
- <input id="f_ip" type="text" name="f[ip]" value="<%=get_field_val('ip')%>" placeholder="IP" />
56
+ <%= text_field_tag @filter, :ip, :placeholder => "IP" %>
57
57
  </div>
58
58
  </div>
59
59
  </div>
60
60
  <div class="unit size1of3">
61
61
  <div class="unit size1of2">
62
- <div class="prm ptxs">
63
- <input type="checkbox" id="err"><label for="err">Error</label>
64
- </div>
62
+ <div class="prm ptxs">
63
+ <%#= f.check_box :is_exception %>
64
+ <%#= f.label :is_exception, "Filter exceptions" %>
65
65
  </div>
66
+ </div>
66
67
  </div> <!-- unit -->
67
68
  </div> <!-- outer -->
68
69
  </form>
@@ -74,8 +75,8 @@
74
75
  <table id="logs_list">
75
76
  <tr>
76
77
  <th>Received</th>
77
- <th>Action</th>
78
78
  <th>Controller</th>
79
+ <th>Action</th>
79
80
  <th>IP</th>
80
81
  <th>URL</th>
81
82
  <th>Runtime</th>
@@ -1,3 +1,3 @@
1
1
  module MongodbLogger
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -6,15 +6,19 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ["leopard.not.a@gmail.com"]
7
7
  gem.description = %q{MongoDB logger for Rails 3}
8
8
  gem.summary = %q{MongoDB logger for Rails 3}
9
- gem.homepage = ""
9
+ gem.homepage = "http://mongodb-logger.catware.org"
10
10
 
11
- gem.add_development_dependency "rspec", "~> 2.7.0"
12
- gem.add_development_dependency "shoulda", ">= 2.0.0"
13
- gem.add_development_dependency "mocha", "~> 0.10.0"
14
- gem.add_development_dependency "cucumber", "~> 1.1.2"
11
+ gem.extra_rdoc_files = [ "LICENSE", "README.md" ]
12
+ gem.rdoc_options = ["--charset=UTF-8"]
13
+
14
+ gem.add_development_dependency "rspec", "~> 2.7.0"
15
+ gem.add_development_dependency "shoulda", ">= 2.0.0"
16
+ gem.add_development_dependency "mocha", "~> 0.10.0"
17
+ gem.add_development_dependency "cucumber", "~> 1.1.2"
18
+ gem.add_development_dependency "coffee-script", "~> 2.2.0"
19
+ gem.add_development_dependency "therubyracer", "~> 0.9.9"
15
20
 
16
21
  gem.add_runtime_dependency "rake", "~> 0.9.0"
17
- gem.add_runtime_dependency "bundler", ">= 1.0.0"
18
22
  gem.add_runtime_dependency "mongo", "~> 1.4.0"
19
23
  gem.add_runtime_dependency "bson_ext", "~> 1.4.0"
20
24
  gem.add_runtime_dependency "i18n", ">= 0.4.1"
@@ -22,7 +26,6 @@ Gem::Specification.new do |gem|
22
26
  gem.add_runtime_dependency "activesupport", ">= 3.0.0"
23
27
  gem.add_runtime_dependency "sinatra", ">= 1.2.0"
24
28
  gem.add_runtime_dependency "erubis", ">= 2.6.6"
25
- gem.add_runtime_dependency "coffee-script", "~> 2.2.0"
26
29
  gem.add_runtime_dependency "vegas", "~> 0.1.2"
27
30
 
28
31
  gem.rubyforge_project = "mongodb_logger"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongodb_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-13 00:00:00.000000000 Z
12
+ date: 2011-11-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70142944021000 !ruby/object:Gem::Requirement
16
+ requirement: &70100132933360 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.7.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70142944021000
24
+ version_requirements: *70100132933360
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: shoulda
27
- requirement: &70142944019980 !ruby/object:Gem::Requirement
27
+ requirement: &70100132931920 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70142944019980
35
+ version_requirements: *70100132931920
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mocha
38
- requirement: &70142944198120 !ruby/object:Gem::Requirement
38
+ requirement: &70100132942920 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.10.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70142944198120
46
+ version_requirements: *70100132942920
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: cucumber
49
- requirement: &70142944195620 !ruby/object:Gem::Requirement
49
+ requirement: &70100132940840 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,32 +54,43 @@ dependencies:
54
54
  version: 1.1.2
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70142944195620
57
+ version_requirements: *70100132940840
58
58
  - !ruby/object:Gem::Dependency
59
- name: rake
60
- requirement: &70142944193820 !ruby/object:Gem::Requirement
59
+ name: coffee-script
60
+ requirement: &70100132954040 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
64
64
  - !ruby/object:Gem::Version
65
- version: 0.9.0
66
- type: :runtime
65
+ version: 2.2.0
66
+ type: :development
67
67
  prerelease: false
68
- version_requirements: *70142944193820
68
+ version_requirements: *70100132954040
69
69
  - !ruby/object:Gem::Dependency
70
- name: bundler
71
- requirement: &70142944206760 !ruby/object:Gem::Requirement
70
+ name: therubyracer
71
+ requirement: &70100132952500 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
- - - ! '>='
74
+ - - ~>
75
75
  - !ruby/object:Gem::Version
76
- version: 1.0.0
76
+ version: 0.9.9
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70100132952500
80
+ - !ruby/object:Gem::Dependency
81
+ name: rake
82
+ requirement: &70100132950780 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 0.9.0
77
88
  type: :runtime
78
89
  prerelease: false
79
- version_requirements: *70142944206760
90
+ version_requirements: *70100132950780
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: mongo
82
- requirement: &70142944202620 !ruby/object:Gem::Requirement
93
+ requirement: &70100132948020 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ~>
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: 1.4.0
88
99
  type: :runtime
89
100
  prerelease: false
90
- version_requirements: *70142944202620
101
+ version_requirements: *70100132948020
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: bson_ext
93
- requirement: &70142944200440 !ruby/object:Gem::Requirement
104
+ requirement: &70100132960200 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ~>
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: 1.4.0
99
110
  type: :runtime
100
111
  prerelease: false
101
- version_requirements: *70142944200440
112
+ version_requirements: *70100132960200
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: i18n
104
- requirement: &70142944214160 !ruby/object:Gem::Requirement
115
+ requirement: &70100132957100 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,10 +120,10 @@ dependencies:
109
120
  version: 0.4.1
110
121
  type: :runtime
111
122
  prerelease: false
112
- version_requirements: *70142944214160
123
+ version_requirements: *70100132957100
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: json
115
- requirement: &70142944212340 !ruby/object:Gem::Requirement
126
+ requirement: &70100132980140 !ruby/object:Gem::Requirement
116
127
  none: false
117
128
  requirements:
118
129
  - - ~>
@@ -120,10 +131,10 @@ dependencies:
120
131
  version: 1.6.1
121
132
  type: :runtime
122
133
  prerelease: false
123
- version_requirements: *70142944212340
134
+ version_requirements: *70100132980140
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: activesupport
126
- requirement: &70142944209540 !ruby/object:Gem::Requirement
137
+ requirement: &70100132978380 !ruby/object:Gem::Requirement
127
138
  none: false
128
139
  requirements:
129
140
  - - ! '>='
@@ -131,10 +142,10 @@ dependencies:
131
142
  version: 3.0.0
132
143
  type: :runtime
133
144
  prerelease: false
134
- version_requirements: *70142944209540
145
+ version_requirements: *70100132978380
135
146
  - !ruby/object:Gem::Dependency
136
147
  name: sinatra
137
- requirement: &70142944223380 !ruby/object:Gem::Requirement
148
+ requirement: &70100132977100 !ruby/object:Gem::Requirement
138
149
  none: false
139
150
  requirements:
140
151
  - - ! '>='
@@ -142,10 +153,10 @@ dependencies:
142
153
  version: 1.2.0
143
154
  type: :runtime
144
155
  prerelease: false
145
- version_requirements: *70142944223380
156
+ version_requirements: *70100132977100
146
157
  - !ruby/object:Gem::Dependency
147
158
  name: erubis
148
- requirement: &70142944232560 !ruby/object:Gem::Requirement
159
+ requirement: &70100132975940 !ruby/object:Gem::Requirement
149
160
  none: false
150
161
  requirements:
151
162
  - - ! '>='
@@ -153,21 +164,10 @@ dependencies:
153
164
  version: 2.6.6
154
165
  type: :runtime
155
166
  prerelease: false
156
- version_requirements: *70142944232560
157
- - !ruby/object:Gem::Dependency
158
- name: coffee-script
159
- requirement: &70142944230460 !ruby/object:Gem::Requirement
160
- none: false
161
- requirements:
162
- - - ~>
163
- - !ruby/object:Gem::Version
164
- version: 2.2.0
165
- type: :runtime
166
- prerelease: false
167
- version_requirements: *70142944230460
167
+ version_requirements: *70100132975940
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: vegas
170
- requirement: &70142944226860 !ruby/object:Gem::Requirement
170
+ requirement: &70100132974300 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ~>
@@ -175,19 +175,22 @@ dependencies:
175
175
  version: 0.1.2
176
176
  type: :runtime
177
177
  prerelease: false
178
- version_requirements: *70142944226860
178
+ version_requirements: *70100132974300
179
179
  description: MongoDB logger for Rails 3
180
180
  email:
181
181
  - leopard.not.a@gmail.com
182
182
  executables:
183
183
  - mongodb_logger_web
184
184
  extensions: []
185
- extra_rdoc_files: []
185
+ extra_rdoc_files:
186
+ - LICENSE
187
+ - README.md
186
188
  files:
187
189
  - .gitignore
188
190
  - .rvmrc
189
191
  - .travis.yml
190
192
  - Gemfile
193
+ - LICENSE
191
194
  - README.md
192
195
  - Rakefile
193
196
  - SUPPORTED_RAILS_VERSIONS
@@ -206,6 +209,7 @@ files:
206
209
  - lib/mongodb_logger/railtie.rb
207
210
  - lib/mongodb_logger/replica_set_helper.rb
208
211
  - lib/mongodb_logger/server.rb
212
+ - lib/mongodb_logger/server/coffee/application.coffee
209
213
  - lib/mongodb_logger/server/model/filter.rb
210
214
  - lib/mongodb_logger/server/partials.rb
211
215
  - lib/mongodb_logger/server/public/images/ajax-loader.gif
@@ -214,7 +218,9 @@ files:
214
218
  - lib/mongodb_logger/server/public/images/play-icon.png
215
219
  - lib/mongodb_logger/server/public/images/stop-icon.png
216
220
  - lib/mongodb_logger/server/public/images/success.png
221
+ - lib/mongodb_logger/server/public/javascripts/application.js
217
222
  - lib/mongodb_logger/server/public/javascripts/jquery-1.7.min.js
223
+ - lib/mongodb_logger/server/public/javascripts/jquery-ui-1.8.16.effects.min.js
218
224
  - lib/mongodb_logger/server/public/stylesheets/all.css
219
225
  - lib/mongodb_logger/server/public/stylesheets/grids.css
220
226
  - lib/mongodb_logger/server/public/stylesheets/group-buttons.css
@@ -225,7 +231,7 @@ files:
225
231
  - lib/mongodb_logger/server/public/stylesheets/library.css
226
232
  - lib/mongodb_logger/server/public/stylesheets/reset.css
227
233
  - lib/mongodb_logger/server/public/stylesheets/spaces.css
228
- - lib/mongodb_logger/server/views/application.coffee
234
+ - lib/mongodb_logger/server/view_helpers.rb
229
235
  - lib/mongodb_logger/server/views/error.erb
230
236
  - lib/mongodb_logger/server/views/layout.erb
231
237
  - lib/mongodb_logger/server/views/overview.erb
@@ -252,10 +258,11 @@ files:
252
258
  - test/test_helper.rb
253
259
  - test/unit/mongodb_logger_replica_test.rb
254
260
  - test/unit/mongodb_logger_test.rb
255
- homepage: ''
261
+ homepage: http://mongodb-logger.catware.org
256
262
  licenses: []
257
263
  post_install_message:
258
- rdoc_options: []
264
+ rdoc_options:
265
+ - --charset=UTF-8
259
266
  require_paths:
260
267
  - lib
261
268
  required_ruby_version: !ruby/object:Gem::Requirement