mongo3 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY CHANGED
@@ -1,8 +1,16 @@
1
1
  0.0.1 - Initial Drop
2
- not much there yet...
2
+ o not much there yet...
3
+
3
4
  0.0.2 -
4
- Added mongo auth
5
- Added collection/db views
5
+ o Added mongo auth
6
+ o Added collection/db views
7
+
6
8
  0.0.3 -
7
- Added collection crud
8
- Refactored view code
9
+ o Added collection crud
10
+ o Refactored view code
11
+
12
+ 0.0.4 - Winter cleaning!
13
+ o Fixed issue on over extending cookies. Ie mongo3 suffered amnesia. Switching to memcache
14
+ o Using memcache for session store - will need a local memcache server on default port!
15
+ o Added confirm dialog on clear and drop
16
+ o Bug fixes and some refactor
data/README.rdoc CHANGED
@@ -38,6 +38,7 @@
38
38
 
39
39
  * mongo + mongo_ext
40
40
  * agnostic-will_paginate
41
+ * memcache-client
41
42
 
42
43
  == INSTALL:
43
44
 
@@ -65,7 +66,9 @@
65
66
 
66
67
  === Launch It!
67
68
 
68
- Launch it. Fires up sinatra and opens up the console
69
+ Launch it. Fires up sinatra and opens up the console
70
+ NOTE: Assumes memcache server is running on local host with default port!
71
+
69
72
  > mongo3
70
73
 
71
74
  == LICENSE:
data/bin/mongo3 CHANGED
@@ -26,4 +26,4 @@ Thread.new do
26
26
  open( "http://localhost:6666/explore" )
27
27
  end
28
28
 
29
- Sinatra::Application.run! :port => 6666
29
+ Sinatra::Application.run! :port => 6666, :environment => 'production'
data/data/populate CHANGED
@@ -6,8 +6,13 @@ connection = Mongo::Connection.new( 'localhost', 27018 )
6
6
  db = connection.db( 'admin' )
7
7
  db.authenticate( 'admin', 'admin')
8
8
 
9
- db = connection.db( 'fernand' )
10
- cltn = db.create_collection( "blee" )
9
+ db_name = "fernand_mdb"
10
+ cltn_name = "blee"
11
+
12
+
13
+ db = connection.db( db_name )
14
+
15
+ cltn = db.create_collection( cltn_name )
11
16
  cltn.remove
12
17
 
13
18
  10.times do |i|
@@ -16,5 +21,6 @@ puts "Inserting row #{row.inspect}"
16
21
  cltn.insert( row )
17
22
  end
18
23
 
19
- cltn = db["fred"]
20
- puts "Inserted `#{cltn.count} records"
24
+ cltn = db[cltn_name]
25
+ puts ""
26
+ puts "Inserted `#{cltn.count} records in `#{cltn_name}"
@@ -4,12 +4,12 @@ module Collections
4
4
 
5
5
  # ---------------------------------------------------------------------------
6
6
  # Paginate on a collection
7
- get "/collections/:page" do
7
+ get "/collections/:page" do
8
8
  @back_url = "/explore/back"
9
9
  @page = params[:page].to_i || 1
10
10
  @title = title_for( session[:path_names] )
11
11
 
12
- load_cltn( params[:page].to_i )
12
+ load_cltn( params[:page].to_i )
13
13
  erb :'collections/list'
14
14
  end
15
15
 
@@ -55,20 +55,16 @@ module Collections
55
55
 
56
56
  get '/collections/clear/' do
57
57
  path_names = session[:path_names]
58
- options.connection.clear_cltn( path_names )
59
- load_cltn
60
-
61
- flash_it!( :info, "Collection #{path_names.split('|').last} was cleared successfully!" )
62
- erb :'collections/results.js', :layout => false
58
+ options.connection.clear_cltn( path_names )
59
+ flash_it!( :info, "Collection `#{path_names.split('|').last} was cleared successfully!" )
60
+ erb :'collections/all_done.js', :layout => false
63
61
  end
64
62
 
65
63
  get '/collections/drop/' do
66
64
  path_names = session[:path_names]
67
- options.connection.drop_cltn( path_names )
68
- load_cltn
69
-
70
- flash_it!( :info, "Collection #{path_names.split('|').last} was dropped successfully!" )
71
- erb :'collections/results.js', :layout => false
65
+ options.connection.drop_cltn( path_names )
66
+ flash_it!( :info, "Collection `#{path_names.split('|').last} was dropped successfully!" )
67
+ erb :'collections/all_done.js', :layout => false
72
68
  end
73
69
 
74
70
  # ===========================================================================
@@ -82,10 +78,8 @@ module Collections
82
78
  @query = [query_params.first.to_json, query_params.last.to_json].join( " | " )
83
79
  @query.gsub!( /\"/, "'" )
84
80
  end
85
- puts "QUERY #{@query.inspect}"
86
81
  @page = page
87
82
  path_names = session[:path_names]
88
- path_ids = session[:path_ids]
89
83
 
90
84
  @cltn = options.connection.paginate_cltn( path_names, query_params, @page, 15 )
91
85
  @cols = []
@@ -3,7 +3,6 @@ module Databases
3
3
  # ---------------------------------------------------------------------------
4
4
  get "/databases/:page" do
5
5
  page = params[:page].to_i || 1
6
- path_ids = session[:path_ids]
7
6
  path_names = session[:path_names]
8
7
 
9
8
  @cltns = options.connection.paginate_db( path_names, page, 10 )
@@ -11,6 +10,27 @@ module Databases
11
10
  @back_url = "/explore/back"
12
11
 
13
12
  erb :'databases/list'
14
- end
13
+ end
14
+
15
+ # ---------------------------------------------------------------------------
16
+ get "/databases/drop/" do
17
+ path_names = session[:path_names]
18
+ options.connection.drop_db( path_names )
19
+
20
+ redirect "/explore/back"
21
+ end
22
+
23
+ # ---------------------------------------------------------------------------
24
+ post "/databases/delete/" do
25
+ path = params[:path]
26
+
27
+ options.connection.drop_cltn( path )
28
+
29
+ flash_it!( :info, "Collection #{path.split('|').last} was dropped successfully!" )
30
+
31
+ @cltns = options.connection.paginate_db( session[:path_names], 1, 10 )
32
+
33
+ erb :'databases/results.js', :layout => false
34
+ end
15
35
 
16
36
  end
@@ -12,17 +12,17 @@ module Explore
12
12
  session[:selected_cols] = nil
13
13
  session[:query_params] = nil
14
14
 
15
- back_paths!
16
- path_ids = session[:path_ids]
17
- path_names = session[:path_names]
15
+ back_paths!
18
16
 
19
17
  reset_crumbs!
18
+ path_names = session[:path_names]
19
+ path_ids = session[:path_ids]
20
20
  crumbs_from_path( path_ids, path_names )
21
21
 
22
- @root = options.connection.build_partial_tree( path_ids, path_names )
22
+ @root = options.connection.build_partial_tree( path_names )
23
23
 
24
24
  # need to adjust crumbs in case something got blown...
25
- @center = path_ids.split( "|" ).last
25
+ @center = path_ids.split('|').last
26
26
 
27
27
  erb :'explore/explore'
28
28
  end
@@ -31,26 +31,24 @@ module Explore
31
31
  get '/explore/show/:path_ids/:path_names' do
32
32
  path_ids = params[:path_ids]
33
33
  path_names = params[:path_names]
34
-
35
- @info = options.connection.show( path_names )
34
+
35
+ update_paths!( path_ids, path_names )
36
36
 
37
- session[:path_ids] = path_ids
38
- session[:path_names] = path_names
39
-
37
+ @info = options.connection.show( path_names )
40
38
  partial :'explore/info'
41
39
  end
42
40
 
43
41
  # -----------------------------------------------------------------------------
44
42
  get '/explore/more_data/:path_ids/:path_names/*' do
45
43
  path_ids = params[:path_ids]
44
+ parent_id = path_ids.split("|").last
46
45
  path_names = params[:path_names]
47
46
 
48
- session[:path_ids] = path_ids
49
- session[:path_names] = path_names
47
+ update_paths!( path_ids, path_names )
50
48
 
51
49
  crumbs_from_path( path_ids, path_names )
52
50
 
53
- @sub_tree = options.connection.build_sub_tree( path_ids, path_names )
51
+ @sub_tree = options.connection.build_sub_tree( parent_id, path_names )
54
52
  @node_id = @sub_tree.first[:id]
55
53
 
56
54
  erb :'explore/more_data_js', :layout => false
@@ -31,7 +31,7 @@ module CrumbHelper
31
31
 
32
32
  def reset_crumbs!
33
33
  @crumbs = [ ["home", '/explore/center/home'] ]
34
- session[:crumbs] = @crumbs
34
+ session[:crumbs] = @crumbs
35
35
  end
36
36
 
37
37
  def add_crumb( title, url )
@@ -1,6 +1,12 @@
1
1
  module MainHelper
2
2
  helpers do
3
3
 
4
+ def update_paths!( path_ids, path_names )
5
+ puts "UPDAING PATH #{path_ids} -- #{path_names}"
6
+ session[:path_ids] = path_ids
7
+ session[:path_names] = path_names
8
+ end
9
+
4
10
  def align_for( value )
5
11
  return "right" if value.is_a?(Fixnum)
6
12
  "left"
@@ -12,16 +18,16 @@ module MainHelper
12
18
  value
13
19
  end
14
20
 
15
- def back_paths!
21
+ def back_paths!
16
22
  path_ids = session[:path_ids]
17
- path_names = session[:path_names]
18
23
  new_path_ids = path_ids.split( "|" )
19
24
  new_path_ids.pop
20
- session[:path_ids] = new_path_ids.join( "|" )
21
25
 
26
+ path_names = session[:path_names]
22
27
  new_path_names = path_names.split( "|" )
23
28
  new_path_names.pop
24
- session[:path_names] = new_path_names.join( "|" )
29
+
30
+ update_paths!( new_path_ids.join( "|" ), new_path_names.join( "|" ) )
25
31
  end
26
32
 
27
33
  def title_for( path_names )
data/lib/main.rb CHANGED
@@ -15,7 +15,8 @@ configure do
15
15
  Mongo3.load_all_libs_relative_to(__FILE__, 'helpers' )
16
16
  Mongo3.load_all_libs_relative_to(__FILE__, 'controllers' )
17
17
 
18
- set :sessions , true
18
+ use Rack::Session::Memcache, :namespace => 'mongo3'
19
+
19
20
  set :connection, Mongo3::Connection.new( File.join( ENV['HOME'], %w[.mongo3 landscape.yml] ) )
20
21
  end
21
22
 
@@ -5,6 +5,15 @@ module Mongo3
5
5
  @config_file = config_file
6
6
  end
7
7
 
8
+ def drop_db( path_names )
9
+ path_name_tokens = path_names.split( "|" )
10
+ env = path_name_tokens[1]
11
+ connect_for( env ) do |con|
12
+ db_name = path_name_tokens.pop
13
+ con.drop_database( db_name )
14
+ end
15
+ end
16
+
8
17
  def drop_cltn( path_names )
9
18
  path_name_tokens = path_names.split( "|" )
10
19
  env = path_name_tokens[1]
@@ -56,11 +65,14 @@ module Mongo3
56
65
  con.database_info.sort { |a,b| b[1] <=> a[1] }.each { |e| info[:databases][e[0]] = to_mb( e[1] ) }
57
66
  info[:server] = con.server_info
58
67
  end
68
+ # BOZO !! Need to figure out links strategy!
59
69
  elsif path_name_tokens.size == 3
60
70
  db_name = path_name_tokens.pop
71
+ info[:links] = OrderedHash.new
61
72
  connect_for( env ) do |con|
62
73
  db = con.db( db_name )
63
- info[:edit] = "/databases/1"
74
+ info[:links][:manage] = "/databases/1"
75
+ # info[:links][:drop] = "/databases/drop/"
64
76
  info[:size] = to_mb( con.database_info[db_name] )
65
77
  info[:node] = db.nodes
66
78
  info[:collections] = db.collection_names.size
@@ -68,16 +80,18 @@ module Mongo3
68
80
  info[:last_status] = db.last_status
69
81
  end
70
82
  elsif path_name_tokens.size == 4
83
+ info[:links] = OrderedHash.new
71
84
  cltn_name = path_name_tokens.pop
72
85
  db_name = path_name_tokens.pop
73
86
  connect_for( env ) do |con|
74
87
  db = con.db( db_name )
75
88
  cltn = db[cltn_name]
76
89
  indexes = db.index_information( cltn_name )
77
-
78
- info[:edit] = "/collections/1"
79
- info[:size] = cltn.count
80
- info[:indexes] = format_indexes( indexes ) if indexes and !indexes.empty?
90
+
91
+ info[:links][:manage] = "/collections/1"
92
+ # info[:links][:drop] = "/collections/drop/"
93
+ info[:size] = cltn.count
94
+ info[:indexes] = format_indexes( indexes ) if indexes and !indexes.empty?
81
95
  end
82
96
  end
83
97
  info
@@ -151,8 +165,7 @@ module Mongo3
151
165
  end
152
166
 
153
167
  # Build environment tree
154
- def build_partial_tree( path_ids, path_names )
155
- path_id_tokens = path_ids.split( "|" )
168
+ def build_partial_tree( path_names )
156
169
  path_name_tokens = path_names.split( "|" )
157
170
  bm_env = path_name_tokens[1]
158
171
  bm_cltn = path_name_tokens.pop if path_name_tokens.size == 4
@@ -192,11 +205,9 @@ module Mongo3
192
205
  end
193
206
 
194
207
  # Build an appropriate subtree based on requested item
195
- def build_sub_tree( path_ids, path_names )
196
- path_id_tokens = path_ids.split( "|" )
208
+ def build_sub_tree( parent_id, path_names )
197
209
  path_name_tokens = path_names.split( "|" )
198
210
  env = path_name_tokens[1]
199
- parent_id = path_id_tokens.last
200
211
 
201
212
  if db_request?( path_name_tokens )
202
213
  sub_tree = build_db_tree( parent_id, env )
data/lib/mongo3.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  module Mongo3
3
3
 
4
4
  # :stopdoc:
5
- VERSION = '0.0.3'
5
+ VERSION = '0.0.4'
6
6
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
7
7
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
8
8
  # :startdoc:
Binary file
@@ -420,3 +420,46 @@ input.no_input {
420
420
  color: #c1c1c1;
421
421
  }
422
422
 
423
+ div#mgmt_actions {
424
+ text-align: right;
425
+ width: 100%;
426
+ }
427
+ div#mgmt_actions span {
428
+ font-size: 1em;
429
+ }
430
+
431
+ button.action {
432
+ background: transparent url(/images/button_act.png) repeat-x center bottom;
433
+ }
434
+ button.clear:hover {
435
+ background-color: #3e41bd;
436
+ }
437
+ button.drop:hover {
438
+ background-color: #bb1947;
439
+ }
440
+
441
+ img.delete {
442
+ cursor: pointer;
443
+ border: 0;
444
+ display:none;
445
+ }
446
+ img.wait {
447
+ width: 16px;
448
+ height: 16px;
449
+ vertical-align: sub;
450
+ display: none;
451
+ }
452
+
453
+ .modal {
454
+ background-color: #212021;
455
+ display: none;
456
+ width: 350px;
457
+ padding: 15px;
458
+ text-align: center;
459
+ border: 2px solid #333;
460
+ opacity: 0.8;
461
+ -moz-border-radius: 6px;
462
+ -webkit-border-radius: 6px;
463
+ -moz-box-shadow: 0 0 20px #92b948;
464
+ -webkit-box-shadow: 0 0 20px #92b948;
465
+ }
@@ -14,8 +14,8 @@
14
14
  <% id = cltn['_id'] %>
15
15
  <tr id="<%=id%>" valign="top">
16
16
  <td id="<%=id%>">
17
- <img class="delete" id="<%=id%>" src="/images/delete.png" style="cursor:pointer;border:0;display:none" title="delete this record"/>
18
- <img id="wait_<%=id%>" src="/images/loading.gif" style="width:16px;height:16px;vertical-align:sub;display:none"></img>
17
+ <img class="delete" id="<%=id%>" src="/images/delete.png" title="delete this record"/>
18
+ <img class="wait" id="wait_<%=id%>" src="/images/loading.gif"></img>
19
19
  </td>
20
20
  <% @selected_cols.each do |k| %>
21
21
  <td><%= format_number(cltn[k]) %></td>
@@ -30,24 +30,26 @@
30
30
  </div>
31
31
 
32
32
  <script>
33
- $("table#cltn tr" ).hover(
34
- function() {
35
- $(this).addClass( 'highlight' );
36
- $("td#" + $(this).attr('id') + " img.delete" ).show();
37
- },
38
- function() {
39
- $(this).removeClass( 'highlight' );
40
- $("td#" + $(this).attr('id') + " img.delete" ).hide();
41
- });
42
- $( "img.delete" ).click( function() {
43
- var id = $(this).attr('id');
44
- $.ajax({
45
- data: {id: id},
46
- dataType: 'script',
47
- type: 'post',
48
- url: '/collections/delete/',
49
- beforeSend: function() { $('img#_wait_' + id ).show(); },
50
- complete: function() { $('img#_wait_' + id ).hide(); }
51
- });
33
+ $( function() {
34
+ $("table#cltn tr" ).hover(
35
+ function() {
36
+ $(this).addClass( 'highlight' );
37
+ $("td#" + $(this).attr('id') + " img.delete" ).show();
38
+ },
39
+ function() {
40
+ $(this).removeClass( 'highlight' );
41
+ $("td#" + $(this).attr('id') + " img.delete" ).hide();
42
+ });
43
+ $( "img.delete" ).click( function() {
44
+ var id = $(this).attr('id');
45
+ $.ajax({
46
+ data: {id: id},
47
+ dataType: 'script',
48
+ type: 'post',
49
+ url: '/collections/delete/',
50
+ beforeSend: function() { $('img#_wait_' + id ).show(); },
51
+ complete: function() { $('img#_wait_' + id ).hide(); }
52
+ });
53
+ });
52
54
  });
53
55
  </script>
@@ -1,3 +1,5 @@
1
+ <script src="/javascripts/jquery.example.js" type="text/javascript"></script>
2
+
1
3
  <form id="search" onsubmit="search_submit();return false;" action="/collections/search/" method="post" style="text-align:center;margin:10px">
2
4
  <fieldset>
3
5
  <input id="search" type="text" name="search" class="search" value="<%=@query%>"/>
@@ -0,0 +1,2 @@
1
+ <%= erb :'shared/flash.js', :layout => false %>
2
+ $('div#results').html( "<div class=\"no_items\">All done here! Click the `back link to continue.</span>" );
@@ -1,52 +1,53 @@
1
- <style>
2
- div#actions {
3
- text-align: right;
4
- width: 100%;
5
- }
6
- div#actions span {
7
- font-size: 1em;
8
- }
9
- button.action {
10
- background: transparent url(/images/button_act.png) repeat-x center bottom;
11
- }
12
- button.clear:hover {
13
- background-color: #3e41bd;
14
- }
15
- button.drop:hover {
16
- background-color: #bb1947;
17
- }
18
- </style>
19
-
20
1
  <div class="cltn">
21
2
  <div class="title"><%=@title%></div>
22
3
  <a class="back" href="<%=@back_url%>">&laquo;&nbsp;back</a>
23
4
 
24
- <div id="actions">
5
+ <div id="mgmt_actions">
25
6
  <img id="action_load" src="/images/loading.gif" style="width:25px;height:25px;vertical-align:sub;display:none"></img>
26
- <button class="action clear" title="Delete all records from collection">clear</button>
27
- <button class="action drop" title="Drop the entire collection">drop</button>
7
+ <button class="action clear" rel="#confirm_clear" title="Delete all records from collection">clear</button>
8
+ <button class="action drop" rel="#confirm_drop" title="Drop the entire collection">drop</button>
28
9
  </div>
29
10
  <div id="results">
30
11
  <%= partial :'collections/results' %>
31
12
  </div>
32
13
  <div>
33
14
 
34
-
15
+ <div class="modal" id="confirm_clear">
16
+ <p>Clearing out the whole collection. Are you sure?</p>
17
+ <p style="margin:10px">
18
+ <button class="close yes" id="clear"> Yes </button>
19
+ <button class="close"> No </button>
20
+ </p>
21
+ </div>
22
+
23
+ <div class="modal" id="confirm_drop">
24
+ <p>Dropping the whole collection. Are you sure?</p>
25
+ <p style="margin:10px">
26
+ <button class="close yes" id="drop"> Yes </button>
27
+ <button class="close"> No </button>
28
+ </p>
29
+ </div>
30
+
35
31
  <script>
36
32
  $( function() {
37
- $( 'button.action' ).click( function() {
38
- var r = confirm( "Are you sure?" );
39
- if( r == false )
40
- return false;
33
+ $('button.action' ).overlay( {
34
+ expose: {
35
+ color: '#212021',
36
+ loadSpeed: 200,
37
+ opacity: 0.9
38
+ },
39
+ closeOnClick: false
40
+ });
41
41
 
42
+ $( 'button.yes' ).click( function() {
42
43
  $.ajax({
43
44
  dataType: 'script',
44
45
  type: 'get',
45
- url: '/collections/' + $(this).html() + "/",
46
+ url: '/collections/' + $(this).attr('id') + "/",
46
47
  beforeSend: function() { $('img#action_load').show(); },
47
48
  complete: function() { $('img#action_load').hide(); }
48
- });
49
- })
49
+ });
50
+ });
50
51
  });
51
52
  </script>
52
53
 
@@ -0,0 +1,57 @@
1
+ <div id="summary">
2
+ <%= page_entries_info @cltns, :entry_name => 'item' %>
3
+ </div>
4
+
5
+ <table id="cltn" class="cltn" border="0" cellpadding="10" cellspacing="20">
6
+ <thead>
7
+ <th width="2%">&nbsp;</th>
8
+ <% cols = @cltns.first.keys %>
9
+ <% cols.each do |col| %>
10
+ <th align="<%=align_for( @cltns.first[col] )%>"><%=col%></th>
11
+ <% end %>
12
+ </thead>
13
+ <tbody>
14
+ <% count = 0; @cltns.each do |cltn| %>
15
+ <% path = "#{session[:path_names]}|#{cltn[:name]}"%>
16
+ <tr id="<%=count%>" valign="top">
17
+ <td id="<%=count%>">
18
+ <img class="delete" id="<%=path%>" rel="<%=count%>" src="/images/delete.png" title="drop this collection"/>
19
+ <img class="wait" id="wait_<%=count%>" src="/images/loading.gif"></img>
20
+ </td>
21
+ <% cltn.each_pair do |k, v| %>
22
+ <td align="<%=align_for( v )%>"><%= format_number(v) %></td>
23
+ <% end %>
24
+ </tr>
25
+ <% count+=1;end %>
26
+ </tbody>
27
+ </table>
28
+
29
+ <div id="links">
30
+ <%= will_paginate @cltns, :params => { :url => "/databases" } %>
31
+ </div>
32
+
33
+ <script>
34
+ $( function() {
35
+ $("table#cltn tr" ).hover(
36
+ function() {
37
+ $(this).addClass( 'highlight' );
38
+ $("td#" + $(this).attr('id') + " img.delete" ).show();
39
+ },
40
+ function() {
41
+ $(this).removeClass( 'highlight' );
42
+ $("td#" + $(this).attr('id') + " img.delete" ).hide();
43
+ });
44
+ $( "img.delete" ).click( function() {
45
+ var id = $(this).attr('id');
46
+ var count = $(this).attr('rel')
47
+ $.ajax({
48
+ data: {path: id},
49
+ dataType: 'script',
50
+ type: 'post',
51
+ url: '/databases/delete/',
52
+ beforeSend: function() { $('img#_wait_' + count ).show(); },
53
+ complete: function() { $('img#_wait_' + count ).hide(); }
54
+ });
55
+ });
56
+ });
57
+ </script>
@@ -2,29 +2,7 @@
2
2
  <div class="title"><%=@title%></div>
3
3
  <a class="back" href="<%=@back_url%>">&laquo;&nbsp;back</a>
4
4
 
5
- <div id="summary">
6
- <%= page_entries_info @cltns, :entry_name => 'item' %>
5
+ <div id="results">
6
+ <%= partial :'databases/results'%>
7
7
  </div>
8
-
9
- <table class="cltn" border="0" cellpadding="10" cellspacing="20">
10
- <thead>
11
- <% cols = @cltns.first.keys %>
12
- <% cols.each do |col| %>
13
- <th align="<%=align_for( @cltns.first[col] )%>"><%=col%></th>
14
- <% end %>
15
- </thead>
16
- <tbody>
17
- <% @cltns.each do |cltn| %>
18
- <tr valign="top">
19
- <% cltn.each_pair do |k, v| %>
20
- <td align="<%=align_for( v )%>"><%= format_number(v) %></td>
21
- <% end %>
22
- </tr>
23
- <% end %>
24
- </tbody>
25
- </table>
26
-
27
- <div id="links">
28
- <%= will_paginate @cltns, :params => { :url => "/databases" } %>
29
- </div>
30
- <div>
8
+ <div>
@@ -0,0 +1,2 @@
1
+ <%= erb :'shared/flash.js', :layout => false %>
2
+ $('div#results').html( "<%=escape_javascript(partial(:'databases/results'))%>" );
@@ -1,13 +1,15 @@
1
1
  <h1 style="text-align:center">Details for <em><%=@info.delete( :title ) %></em></h1>
2
2
 
3
- <% if @info.has_key? :edit %>
3
+ <% if @info.has_key? :links %>
4
4
  <div style="text-align:right;">
5
- <a href='<%=@info.delete(:edit)%>'>manage</a>
5
+ <% @info.delete(:links).each_pair do |name, url| %>
6
+ <a href='<%=url%>'><%=name%></a>
7
+ <% end %>
6
8
  </div>
7
9
  <% end %>
8
10
 
9
- <table border="0" cellpadding="10" cellspacing="20" style="width:100%;border-collapse:collapse;;font-size:0.7em;text-align:left">
10
- <thead style="font-weight:bold;font-size:1em;border-bottom:1px #c1c1c1 solid;color:#c1c1c1">
11
+ <table class="cltn" border="0" cellpadding="10" cellspacing="20">
12
+ <thead>
11
13
  <th width="20%">Name</th>
12
14
  <th width="80%">Value</th>
13
15
  </thead>
data/lib/views/layout.erb CHANGED
@@ -9,9 +9,8 @@
9
9
  <script src="/javascripts/jquery_min.js" type="text/javascript"></script>
10
10
  <script src="/javascripts/jquery_ui_min.js" type="text/javascript"></script>
11
11
  <script src="/javascripts/jquery.tools.min.js" type="text/javascript"></script>
12
- <script src="/javascripts/application.js" type="text/javascript"></script>
12
+ <script src="/javascripts/application.js" type="text/javascript"></script>
13
13
  <script src="/javascripts/jit.min.js" type="text/javascript"></script>
14
- <script src="/javascripts/jquery.example.js" type="text/javascript"></script>
15
14
  </head>
16
15
 
17
16
  <body id="body">
@@ -5,4 +5,4 @@ $('div.flash').show();
5
5
  <% else %>
6
6
  $('div.flash').attr( 'class', 'flash flash_info' );
7
7
  <% end %>
8
- $('div.flash').fadeOut( 5000 );
8
+ $('div.flash').fadeOut( 3000 );
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fernand Galiana
@@ -63,10 +63,13 @@ extra_rdoc_files:
63
63
  - lib/views/collections/_results.erb
64
64
  - lib/views/collections/_rows.erb
65
65
  - lib/views/collections/_search_form.erb
66
+ - lib/views/collections/all_done.js.erb
66
67
  - lib/views/collections/list.erb
67
68
  - lib/views/collections/results.js.erb
68
69
  - lib/views/collections/update.js.erb
70
+ - lib/views/databases/_results.erb
69
71
  - lib/views/databases/list.erb
72
+ - lib/views/databases/results.js.erb
70
73
  - lib/views/explore/_crumbs.erb
71
74
  - lib/views/explore/_dump_array.erb
72
75
  - lib/views/explore/_dump_hash.erb
@@ -151,6 +154,7 @@ files:
151
154
  - lib/public/images/tooltip/white_arrow.png
152
155
  - lib/public/images/tooltip/white_arrow_big.png
153
156
  - lib/public/images/tooltip/white_big.png
157
+ - lib/public/javascripts/.DS_Store
154
158
  - lib/public/javascripts/Jit-1.1.3.zip
155
159
  - lib/public/javascripts/Jit/Examples/Hypertree/example1.html
156
160
  - lib/public/javascripts/Jit/Examples/Hypertree/example1.js
@@ -196,7 +200,6 @@ files:
196
200
  - lib/public/javascripts/Jit/jit.js
197
201
  - lib/public/javascripts/application.js
198
202
  - lib/public/javascripts/jit.min.js
199
- - lib/public/javascripts/jquery.confirm.js
200
203
  - lib/public/javascripts/jquery.example.js
201
204
  - lib/public/javascripts/jquery.tools.min.js
202
205
  - lib/public/javascripts/jquery_min.js
@@ -207,10 +210,13 @@ files:
207
210
  - lib/views/collections/_results.erb
208
211
  - lib/views/collections/_rows.erb
209
212
  - lib/views/collections/_search_form.erb
213
+ - lib/views/collections/all_done.js.erb
210
214
  - lib/views/collections/list.erb
211
215
  - lib/views/collections/results.js.erb
212
216
  - lib/views/collections/update.js.erb
217
+ - lib/views/databases/_results.erb
213
218
  - lib/views/databases/list.erb
219
+ - lib/views/databases/results.js.erb
214
220
  - lib/views/explore/_crumbs.erb
215
221
  - lib/views/explore/_dump_array.erb
216
222
  - lib/views/explore/_dump_hash.erb
@@ -1,132 +0,0 @@
1
- /**
2
- * Confirm plugin 1.2
3
- *
4
- * Copyright (c) 2007 Nadia Alramli (http://nadiana.com/)
5
- * Dual licensed under the MIT (MIT-LICENSE.txt)
6
- * and GPL (GPL-LICENSE.txt) licenses.
7
- */
8
-
9
- /**
10
- * For more docs and examples visit:
11
- * http://nadiana.com/jquery-confirm-plugin
12
- * For comments, suggestions or bug reporting,
13
- * email me at: http://nadiana.com/contact/
14
- */
15
-
16
- jQuery.fn.confirm = function(options) {
17
- options = jQuery.extend({
18
- msg: 'Are you sure?',
19
- stopAfter: 'never',
20
- wrapper: '<span></span>',
21
- eventType: 'click',
22
- dialogShow: 'show',
23
- dialogSpeed: '',
24
- timeout: 0
25
- }, options);
26
- options.stopAfter = options.stopAfter.toLowerCase();
27
- if (!options.stopAfter in ['never', 'once', 'ok', 'cancel']) {
28
- options.stopAfter = 'never';
29
- }
30
- options.buttons = jQuery.extend({
31
- ok: 'Yes',
32
- cancel: 'No',
33
- wrapper:'<a href="#"></a>',
34
- separator: '/'
35
- }, options.buttons);
36
-
37
- // Shortcut to eventType.
38
- var type = options.eventType;
39
-
40
- return this.each(function() {
41
- var target = this;
42
- var $target = jQuery(target);
43
- var timer;
44
- var saveHandlers = function() {
45
- var events = jQuery.data(target, 'events');
46
- if (!events) {
47
- // There are no handlers to save.
48
- return;
49
- }
50
- target._handlers = new Array();
51
- for (var i in events[type]) {
52
- target._handlers.push(events[type][i]);
53
- }
54
- }
55
-
56
- // Create ok button, and bind in to a click handler.
57
- var $ok = jQuery(options.buttons.wrapper)
58
- .append(options.buttons.ok)
59
- .click(function() {
60
- // Check if timeout is set.
61
- if (options.timeout != 0) {
62
- clearTimeout(timer);
63
- }
64
- $target.unbind(type, handler);
65
- $target.show();
66
- $dialog.hide();
67
- // Rebind the saved handlers.
68
- if (target._handlers != undefined) {
69
- jQuery.each(target._handlers, function() {
70
- $target.click(this);
71
- });
72
- }
73
- // Trigger click event.
74
- $target.click();
75
- if (options.stopAfter != 'ok' && options.stopAfter != 'once') {
76
- $target.unbind(type);
77
- // Rebind the confirmation handler.
78
- $target.one(type, handler);
79
- }
80
- return false;
81
- })
82
-
83
- var $cancel = jQuery(options.buttons.wrapper).append(options.buttons.cancel).click(function() {
84
- // Check if timeout is set.
85
- if (options.timeout != 0) {
86
- clearTimeout(timer);
87
- }
88
- if (options.stopAfter != 'cancel' && options.stopAfter != 'once') {
89
- $target.one(type, handler);
90
- }
91
- $target.show();
92
- $dialog.hide();
93
- return false;
94
- });
95
-
96
- if (options.buttons.cls) {
97
- $ok.addClass(options.buttons.cls);
98
- $cancel.addClass(options.buttons.cls);
99
- }
100
-
101
- var $dialog = jQuery(options.wrapper)
102
- .append(options.msg)
103
- .append($ok)
104
- .append(options.buttons.separator)
105
- .append($cancel);
106
-
107
- var handler = function() {
108
- jQuery(this).hide();
109
-
110
- // Do this check because of a jQuery bug
111
- if (options.dialogShow != 'show') {
112
- $dialog.hide();
113
- }
114
-
115
- $dialog.insertBefore(this);
116
- // Display the dialog.
117
- $dialog[options.dialogShow](options.dialogSpeed);
118
- if (options.timeout != 0) {
119
- // Set timeout
120
- clearTimeout(timer);
121
- timer = setTimeout(function() {$cancel.click(); $target.one(type, handler);}, options.timeout);
122
- }
123
- return false;
124
- };
125
-
126
- saveHandlers();
127
- $target.unbind(type);
128
- target._confirm = handler
129
- target._confirmEvent = type;
130
- $target.one(type, handler);
131
- });
132
- }