mongo3 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY +6 -1
- data/README.rdoc +2 -0
- data/Rakefile +0 -1
- data/data/populate +4 -4
- data/lib/controllers/collections.rb +42 -8
- data/lib/controllers/databases.rb +11 -1
- data/lib/controllers/explore.rb +49 -12
- data/lib/helpers/collection_helper.rb +18 -0
- data/lib/helpers/crumb_helper.rb +4 -4
- data/lib/helpers/database_helper.rb +17 -0
- data/lib/helpers/explore_helper.rb +30 -0
- data/lib/helpers/flash_helper.rb +7 -0
- data/lib/helpers/main_helper.rb +12 -30
- data/lib/helpers/paths_helper.rb +40 -0
- data/lib/mongo3.rb +1 -1
- data/lib/mongo3/connection.rb +95 -34
- data/lib/mongo3/node.rb +43 -28
- data/lib/public/images/edit.png +0 -0
- data/lib/public/images/selected_bg.png +0 -0
- data/lib/public/stylesheets/mongo3.css +87 -76
- data/lib/views/collections/_index_form.erb +35 -0
- data/lib/views/collections/_index_rows.erb +54 -0
- data/lib/views/collections/_indexes.erb +3 -0
- data/lib/views/collections/_results.erb +1 -2
- data/lib/views/collections/_rows.erb +26 -22
- data/lib/views/collections/_search_form.erb +2 -3
- data/lib/views/collections/list.erb +18 -6
- data/lib/views/collections/update.js.erb +2 -0
- data/lib/views/collections/update_indexes.js.erb +3 -0
- data/lib/views/databases/_results.erb +30 -26
- data/lib/views/databases/list.erb +7 -3
- data/lib/views/explore/_node_info.erb +131 -0
- data/lib/views/explore/center_js.erb +1 -0
- data/lib/views/explore/explore.erb +11 -80
- data/lib/views/explore/more_data_js.erb +1 -0
- data/lib/views/explore/update.js.erb +5 -0
- data/lib/views/explore/update_crumb_js.erb +2 -1
- data/lib/views/layout.erb +2 -2
- data/lib/views/shared/flash.js.erb +9 -7
- data/spec/landscape.yml +3 -0
- data/spec/mongo3/connection_spec.rb +146 -0
- data/spec/mongo3/node_spec.rb +26 -8
- data/spec/spec_helper.rb +4 -1
- data/tasks/rdoc.rake +2 -2
- metadata +23 -2
data/lib/mongo3.rb
CHANGED
data/lib/mongo3/connection.rb
CHANGED
@@ -5,15 +5,62 @@ module Mongo3
|
|
5
5
|
@config_file = config_file
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
# drop a database using context and db name
|
9
|
+
def drop_database( path_names, db_name )
|
9
10
|
path_name_tokens = path_names.split( "|" )
|
10
11
|
env = path_name_tokens[1]
|
12
|
+
connect_for( env ) do |con|
|
13
|
+
con.drop_database( db_name )
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def drop_db( path_names )
|
18
|
+
path_name_tokens = path_names.split( "|" )
|
19
|
+
env = path_name_tokens[1]
|
11
20
|
connect_for( env ) do |con|
|
12
21
|
db_name = path_name_tokens.pop
|
13
22
|
con.drop_database( db_name )
|
14
23
|
end
|
15
24
|
end
|
16
25
|
|
26
|
+
def indexes_for( path_names )
|
27
|
+
path_name_tokens = path_names.split( "|" )
|
28
|
+
env = path_name_tokens[1]
|
29
|
+
indexes = {}
|
30
|
+
connect_for( env ) do |con|
|
31
|
+
cltn_name = path_name_tokens.pop
|
32
|
+
db_name = path_name_tokens.pop
|
33
|
+
db = con.db( db_name )
|
34
|
+
cltn = db[cltn_name]
|
35
|
+
indexes = cltn.index_information
|
36
|
+
end
|
37
|
+
indexes
|
38
|
+
end
|
39
|
+
|
40
|
+
def drop_index( path_names, index )
|
41
|
+
path_name_tokens = path_names.split( "|" )
|
42
|
+
env = path_name_tokens[1]
|
43
|
+
connect_for( env ) do |con|
|
44
|
+
cltn_name = path_name_tokens.pop
|
45
|
+
db_name = path_name_tokens.pop
|
46
|
+
db = con.db( db_name )
|
47
|
+
cltn = db[cltn_name]
|
48
|
+
cltn.drop_index( index )
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_index( path_names, index, constraints )
|
53
|
+
path_name_tokens = path_names.split( "|" )
|
54
|
+
env = path_name_tokens[1]
|
55
|
+
connect_for( env ) do |con|
|
56
|
+
cltn_name = path_name_tokens.pop
|
57
|
+
db_name = path_name_tokens.pop
|
58
|
+
db = con.db( db_name )
|
59
|
+
cltn = db[cltn_name]
|
60
|
+
cltn.create_index( index, constraints ? constraints['unique'] == 1 : false )
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
17
64
|
def drop_cltn( path_names )
|
18
65
|
path_name_tokens = path_names.split( "|" )
|
19
66
|
env = path_name_tokens[1]
|
@@ -75,7 +122,7 @@ module Mongo3
|
|
75
122
|
# info[:links][:drop] = "/databases/drop/"
|
76
123
|
info[:size] = to_mb( con.database_info[db_name] )
|
77
124
|
info[:node] = db.nodes
|
78
|
-
info[:collections] = db.
|
125
|
+
info[:collections] = collection_names( db ).size
|
79
126
|
info[:error] = db.error
|
80
127
|
info[:last_status] = db.last_status
|
81
128
|
end
|
@@ -104,7 +151,7 @@ module Mongo3
|
|
104
151
|
connect_for( env ) do |con|
|
105
152
|
db_name = path_name_tokens.pop
|
106
153
|
db = con.db( db_name )
|
107
|
-
cltn = db.
|
154
|
+
cltn = collection_names(db).sort
|
108
155
|
|
109
156
|
list = WillPaginate::Collection.create( page, per_page, cltn.size ) do |pager|
|
110
157
|
offset = (page-1)*per_page
|
@@ -131,15 +178,17 @@ module Mongo3
|
|
131
178
|
cltn_name = path_name_tokens.pop
|
132
179
|
db_name = path_name_tokens.pop
|
133
180
|
db = con.db( db_name )
|
134
|
-
cltn = db[cltn_name]
|
181
|
+
cltn = db[cltn_name]
|
182
|
+
count = cltn.find( query_params.first ).count
|
135
183
|
|
136
|
-
list = WillPaginate::Collection.create( page, per_page,
|
184
|
+
list = WillPaginate::Collection.create( page, per_page, count ) do |pager|
|
137
185
|
offset = (page-1)*per_page
|
138
|
-
sort = query_params.last.empty? ? [ ['_id', Mongo::DESCENDING] ] : query_params.last
|
139
|
-
|
186
|
+
sort = query_params.last.empty? ? [ ['_id', Mongo::DESCENDING] ] : query_params.last
|
187
|
+
results = cltn.find( query_params.first,
|
140
188
|
:sort => sort,
|
141
189
|
:skip => offset,
|
142
|
-
:limit => per_page ).to_a
|
190
|
+
:limit => per_page ).to_a
|
191
|
+
pager.replace( results )
|
143
192
|
end
|
144
193
|
end
|
145
194
|
list
|
@@ -177,26 +226,27 @@ module Mongo3
|
|
177
226
|
config.each_pair do |env, info|
|
178
227
|
node = Node.new( env, env, :dyna => true )
|
179
228
|
root << node
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
229
|
+
|
230
|
+
next unless node.name == bm_env
|
231
|
+
|
232
|
+
connect_for( env ) do |con|
|
233
|
+
count = 0
|
234
|
+
data = { :dyna => true }
|
235
|
+
database_names( con ).each do |db_name|
|
236
|
+
db = con.db( db_name, :strict => true )
|
237
|
+
cltns = collection_names( db )
|
238
|
+
db_node = Node.new( "#{env}_#{count}", "#{db_name}(#{cltns.size})", data.clone )
|
239
|
+
node << db_node
|
240
|
+
count += 1
|
241
|
+
if bm_db and db_node.name =~ /^#{bm_db}/
|
242
|
+
cltn_count = 0
|
243
|
+
data = { :dyna => false }
|
244
|
+
cltns.each do |cltn_name|
|
245
|
+
size = db[cltn_name].count
|
246
|
+
cltn_node = Node.new( "#{db_name}_#{cltn_count}", "#{cltn_name}(#{size})", data.clone )
|
247
|
+
db_node << cltn_node
|
248
|
+
cltn_count += 1
|
249
|
+
end
|
200
250
|
end
|
201
251
|
end
|
202
252
|
end
|
@@ -209,13 +259,13 @@ module Mongo3
|
|
209
259
|
path_name_tokens = path_names.split( "|" )
|
210
260
|
env = path_name_tokens[1]
|
211
261
|
|
212
|
-
if db_request?( path_name_tokens )
|
262
|
+
if db_request?( path_name_tokens )
|
213
263
|
sub_tree = build_db_tree( parent_id, env )
|
214
264
|
else
|
215
265
|
db_name = path_name_tokens.last
|
216
266
|
sub_tree = build_cltn_tree( parent_id, env, db_name )
|
217
267
|
end
|
218
|
-
sub_tree
|
268
|
+
sub_tree
|
219
269
|
end
|
220
270
|
|
221
271
|
# Connects to host and spews out all available dbs
|
@@ -230,9 +280,9 @@ module Mongo3
|
|
230
280
|
|
231
281
|
count = 0
|
232
282
|
data = { :dyna => true }
|
233
|
-
con.
|
283
|
+
database_names( con ).each do |db_name|
|
234
284
|
db = con.db( db_name, :strict => true )
|
235
|
-
cltns = db.
|
285
|
+
cltns = collection_names( db ).size
|
236
286
|
node = Node.new( "#{env}_#{count}", "#{db_name}(#{cltns})", data.clone )
|
237
287
|
sub_root << node
|
238
288
|
count += 1
|
@@ -254,7 +304,7 @@ module Mongo3
|
|
254
304
|
|
255
305
|
count = 0
|
256
306
|
data = { :dyna => false }
|
257
|
-
db.
|
307
|
+
collection_names( db ).each do |cltn_name|
|
258
308
|
size = db[cltn_name].count
|
259
309
|
node = Node.new( "#{db_name}_#{count}", "#{cltn_name}(#{size})", data.clone )
|
260
310
|
sub_root << node
|
@@ -267,12 +317,23 @@ module Mongo3
|
|
267
317
|
# =========================================================================
|
268
318
|
private
|
269
319
|
|
320
|
+
def collection_names( db )
|
321
|
+
excludes = %w[system.indexes]
|
322
|
+
db.collection_names - excludes
|
323
|
+
end
|
324
|
+
|
325
|
+
# Filters out system dbs
|
326
|
+
def database_names( con )
|
327
|
+
excludes = %w[admin local slave]
|
328
|
+
con.database_names - excludes
|
329
|
+
end
|
330
|
+
|
270
331
|
# Connects to mongo given an environment
|
271
332
|
# BOZO !! Auth...
|
272
333
|
def connect_for( env, &block )
|
273
334
|
info = landscape[env]
|
274
335
|
puts ">>> Connecting for #{env} -- #{info['host']}-#{info['port']}"
|
275
|
-
con = Mongo::Connection.new( info['host'], info['port'] )
|
336
|
+
con = Mongo::Connection.new( info['host'], info['port'], { :slave_ok => true } )
|
276
337
|
|
277
338
|
if info['user'] and info['password']
|
278
339
|
con.db( 'admin' ).authenticate( info['user'], info['password'] )
|
data/lib/mongo3/node.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
require 'json'
|
2
|
+
require 'mongo/util/ordered_hash'
|
2
3
|
|
3
4
|
module Mongo3
|
4
5
|
class Node
|
5
6
|
attr_accessor :oid, :name, :children, :data, :parent
|
6
7
|
|
7
|
-
def initialize( oid, name, data=
|
8
|
+
def initialize( oid, name, data=nil )
|
8
9
|
@oid = oid
|
9
10
|
@name = name
|
10
11
|
@children = []
|
11
|
-
@data = data ||
|
12
|
+
@data = data || OrderedHash.new
|
12
13
|
@parent = nil
|
13
14
|
end
|
14
15
|
|
@@ -23,14 +24,18 @@ module Mongo3
|
|
23
24
|
update_paths( new_one )
|
24
25
|
end
|
25
26
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
def find( node_id )
|
28
|
+
_find( self, node_id )
|
29
|
+
end
|
30
|
+
|
31
|
+
def _find( node, node_id )
|
32
|
+
return node if node.oid == node_id
|
33
|
+
unless node.children.empty?
|
34
|
+
node.children.each { |c| found = _find( c, node_id ); return found if found }
|
31
35
|
end
|
32
|
-
|
33
|
-
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
|
34
39
|
# convert a tree node to a set of adjacencies
|
35
40
|
def to_adjacencies
|
36
41
|
root_level = { :id => self.oid, :name => self.name, :data => self.data, :adjacencies => [] }
|
@@ -42,27 +47,14 @@ module Mongo3
|
|
42
47
|
cltn
|
43
48
|
end
|
44
49
|
|
45
|
-
def path( accessor=:oid )
|
46
|
-
path = []
|
47
|
-
traverse( path, self, accessor )
|
48
|
-
path.reverse.join( "|" )
|
49
|
-
end
|
50
|
-
|
51
|
-
def traverse( path, node, accessor )
|
52
|
-
path << node.send( accessor ).gsub( /\(\d+\)/, "" )
|
53
|
-
if node.parent
|
54
|
-
traverse( path, node.parent, accessor )
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
50
|
# converts to json
|
59
51
|
def to_json(*a)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
52
|
+
hash = OrderedHash.new
|
53
|
+
hash[:id] = oid
|
54
|
+
hash[:name] = self.name
|
55
|
+
hash[:children] = self.children
|
56
|
+
hash[:data] = self.data
|
57
|
+
hash.to_json(*a)
|
66
58
|
end
|
67
59
|
|
68
60
|
# Debug...
|
@@ -79,6 +71,29 @@ module Mongo3
|
|
79
71
|
puts ' '*level + "%-#{20-level}s (%d) [%s] -- %s" % [adj[:id], adj[:adjacencies].size, adj[:name], (adj[:data] ? adj[:data].inspect : 'N/A' )]
|
80
72
|
end
|
81
73
|
end
|
74
|
+
|
75
|
+
# =========================================================================
|
76
|
+
private
|
77
|
+
|
78
|
+
def update_paths( node )
|
79
|
+
node.data[:path_names] = node.send( :path, :name )
|
80
|
+
node.data[:path_ids] = node.send( :path, :oid )
|
81
|
+
node.children.each do |child|
|
82
|
+
child.send( :update_paths, child )
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def path( accessor=:oid )
|
87
|
+
path = []
|
88
|
+
traverse( path, self, accessor )
|
89
|
+
path.reverse.join( "|" )
|
90
|
+
end
|
82
91
|
|
92
|
+
def traverse( path, node, accessor )
|
93
|
+
path << node.send( accessor ).to_s.gsub( /\(\d+\)/, "" )
|
94
|
+
if node.parent
|
95
|
+
traverse( path, node.parent, accessor )
|
96
|
+
end
|
97
|
+
end
|
83
98
|
end
|
84
99
|
end
|
Binary file
|
Binary file
|
@@ -19,16 +19,24 @@ body {
|
|
19
19
|
margin: 0;
|
20
20
|
}
|
21
21
|
|
22
|
+
img {
|
23
|
+
border: none;
|
24
|
+
vertical-align: text-top;
|
25
|
+
}
|
26
|
+
|
27
|
+
/* Flash */
|
22
28
|
div.flash {
|
23
29
|
display: none;
|
30
|
+
width: 95%;
|
24
31
|
padding: 10px;
|
25
|
-
|
32
|
+
margin: 20px 0 0px 300px;
|
33
|
+
font-size: .5em;
|
26
34
|
color: #fff;
|
27
35
|
border: 1px #92b948 solid;
|
28
|
-
-moz-border-radius-bottomleft:
|
29
|
-
-moz-border-radius-topleft:
|
30
|
-
-moz-border-radius-bottomright:
|
31
|
-
-moz-border-radius-topright:
|
36
|
+
-moz-border-radius-bottomleft: 20px;
|
37
|
+
-moz-border-radius-topleft: 0px;
|
38
|
+
-moz-border-radius-bottomright: 0px;
|
39
|
+
-moz-border-radius-topright: 20px;
|
32
40
|
}
|
33
41
|
div.flash_error {
|
34
42
|
color: #f00;
|
@@ -45,10 +53,6 @@ div.flash_info {
|
|
45
53
|
overflow: none;
|
46
54
|
}
|
47
55
|
|
48
|
-
span#log {
|
49
|
-
color: #ff9d2a;
|
50
|
-
}
|
51
|
-
|
52
56
|
div#logo {
|
53
57
|
float: left;
|
54
58
|
width: 45%;
|
@@ -117,28 +121,6 @@ p.title span{
|
|
117
121
|
/* ---------------------------------------------------------------------------- */
|
118
122
|
/* Common */
|
119
123
|
|
120
|
-
div.item {
|
121
|
-
border-top: 1px #1c1c1c solid;
|
122
|
-
padding: 10px 0px 0px 0px;
|
123
|
-
height: 100px;
|
124
|
-
clear: both;
|
125
|
-
width: 100%;
|
126
|
-
}
|
127
|
-
|
128
|
-
div.item .tag {
|
129
|
-
float:left;
|
130
|
-
}
|
131
|
-
|
132
|
-
div.item .lock {
|
133
|
-
float: right;
|
134
|
-
width: 5%;
|
135
|
-
color: #434343;
|
136
|
-
}
|
137
|
-
|
138
|
-
div.selected {
|
139
|
-
background: transparent url(/images/li_select.png) repeat-x;
|
140
|
-
cursor: pointer;
|
141
|
-
}
|
142
124
|
ul.host_info {
|
143
125
|
font-size: 0.5em;
|
144
126
|
color: #c1c1c1;
|
@@ -146,7 +128,7 @@ ul.host_info {
|
|
146
128
|
}
|
147
129
|
span {
|
148
130
|
color: #c1c1c1;
|
149
|
-
font-size:
|
131
|
+
font-size: 1.0em;
|
150
132
|
}
|
151
133
|
p.heading {
|
152
134
|
width: 80%;
|
@@ -168,11 +150,6 @@ div#details {
|
|
168
150
|
font-size: 0.5em;
|
169
151
|
color: #fff;
|
170
152
|
background: #1c1c1c;
|
171
|
-
border: 1px #92b948 solid;
|
172
|
-
-moz-border-radius-bottomleft: 7px;
|
173
|
-
-moz-border-radius-topleft: 7px;
|
174
|
-
-moz-border-radius-bottomright: 7px;
|
175
|
-
-moz-border-radius-topright: 7px;
|
176
153
|
}
|
177
154
|
|
178
155
|
.overlay {
|
@@ -183,10 +160,6 @@ div#details {
|
|
183
160
|
color: #fff;
|
184
161
|
width: 650px;
|
185
162
|
min-height: 400px;
|
186
|
-
-moz-border-radius-bottomleft: 7px;
|
187
|
-
-moz-border-radius-topleft: 7px;
|
188
|
-
-moz-border-radius-bottomright: 7px;
|
189
|
-
-moz-border-radius-topright: 7px;
|
190
163
|
-moz-box-shadow: 0 0 90px 5px #000;
|
191
164
|
-webkit-box-shadow: 0 0 90px #000;
|
192
165
|
}
|
@@ -206,50 +179,55 @@ div#details {
|
|
206
179
|
div.scrollable {
|
207
180
|
position: relative;
|
208
181
|
overflow: hidden;
|
209
|
-
height:
|
182
|
+
height: 445px;
|
183
|
+
width: 255px;
|
210
184
|
}
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
height:20000em;
|
185
|
+
div.scrollable div.items {
|
186
|
+
width: 255px;
|
187
|
+
position: absolute;
|
188
|
+
height: 20000em;
|
216
189
|
}
|
217
190
|
|
218
191
|
#actions {
|
219
|
-
|
220
|
-
|
192
|
+
font-size: 0.5em;
|
193
|
+
width: 255px;
|
194
|
+
height: 15px;
|
195
|
+
margin: 7px 0 1px 0;
|
221
196
|
}
|
222
|
-
|
223
197
|
#actions a {
|
224
198
|
font-size: 0.6em;
|
225
199
|
text-decoration: none;
|
226
200
|
cursor: pointer;
|
227
201
|
color: #c1c1c1;
|
228
202
|
}
|
229
|
-
|
230
203
|
#actions a:hover {
|
231
204
|
text-decoration: underline;
|
232
205
|
color: #92b948;
|
233
206
|
}
|
234
|
-
|
235
207
|
.disabled {
|
236
208
|
visibility:hidden;
|
237
209
|
}
|
238
|
-
|
239
210
|
.nextPage {
|
240
211
|
float:right;
|
241
212
|
}
|
242
213
|
|
214
|
+
/* Commons */
|
215
|
+
div.borders {
|
216
|
+
-moz-border-radius-bottomleft: 7px;
|
217
|
+
-moz-border-radius-topleft: 7px;
|
218
|
+
-moz-border-radius-bottomright: 7px;
|
219
|
+
-moz-border-radius-topright: 7px;
|
220
|
+
-webkit-border-top-left-radius: 7px;
|
221
|
+
-webkit-border-top-right-radius: 7px;
|
222
|
+
-webkit-border-bottom-right-radius: 7px;
|
223
|
+
-webkit-border-bottom-left-radius: 7px;
|
224
|
+
border: 1px #92b948 solid;
|
225
|
+
}
|
243
226
|
|
244
227
|
/* Explorer css */
|
245
228
|
div#landscape {
|
246
229
|
width: 615px;
|
247
230
|
height: 550px;
|
248
|
-
-moz-border-radius-bottomleft: 7px;
|
249
|
-
-moz-border-radius-topleft: 7px;
|
250
|
-
-moz-border-radius-bottomright: 7px;
|
251
|
-
-moz-border-radius-topright: 7px;
|
252
|
-
border: 1px #92b948 solid;
|
253
231
|
float: left;
|
254
232
|
}
|
255
233
|
|
@@ -258,11 +236,6 @@ div#right {
|
|
258
236
|
padding: 10px;
|
259
237
|
width: 254px;
|
260
238
|
height: 530px;
|
261
|
-
-moz-border-radius-bottomleft: 7px;
|
262
|
-
-moz-border-radius-topleft: 7px;
|
263
|
-
-moz-border-radius-bottomright: 7px;
|
264
|
-
-moz-border-radius-topright: 7px;
|
265
|
-
border: 1px #92b948 solid;
|
266
239
|
}
|
267
240
|
|
268
241
|
|
@@ -333,13 +306,16 @@ fieldset.check {
|
|
333
306
|
width: 20%;
|
334
307
|
}
|
335
308
|
|
309
|
+
p.ctx {
|
310
|
+
font-size: 0.7em;
|
311
|
+
text-align: right;
|
312
|
+
}
|
313
|
+
p.ctx span {
|
314
|
+
color: #92b948;
|
315
|
+
}
|
316
|
+
|
336
317
|
div.table {
|
337
|
-
padding:
|
338
|
-
-moz-border-radius-bottomleft: 7px;
|
339
|
-
-moz-border-radius-topleft: 7px;
|
340
|
-
-moz-border-radius-bottomright: 7px;
|
341
|
-
-moz-border-radius-topright: 7px;
|
342
|
-
border: 1px #92b948 solid;
|
318
|
+
/* padding: 10px;*/
|
343
319
|
}
|
344
320
|
|
345
321
|
table.cltn {
|
@@ -371,18 +347,37 @@ div.cltn div#links {
|
|
371
347
|
text-align: center;
|
372
348
|
}
|
373
349
|
|
350
|
+
/* Indexes... */
|
351
|
+
div#indexes {
|
352
|
+
margin: 10px 0px;
|
353
|
+
}
|
354
|
+
fieldset.sep {
|
355
|
+
margin-top: 10px;
|
356
|
+
padding: 0 0 0 20px;
|
357
|
+
border-top: 1px #434343 solid;
|
358
|
+
}
|
359
|
+
fieldset.sep legend {
|
360
|
+
color: #fff;
|
361
|
+
padding: 0 5px;
|
362
|
+
font-size: 1.2em;
|
363
|
+
}
|
364
|
+
img.del_index {
|
365
|
+
display:none;
|
366
|
+
}
|
367
|
+
|
374
368
|
input.search {
|
375
|
-
background:
|
376
|
-
width:
|
369
|
+
background: transparent url(/images/search.png) no-repeat 2px 6px;
|
370
|
+
width: 96%;
|
377
371
|
border: 2px #434343 solid;
|
378
|
-
-moz-border-radius-bottomleft:
|
379
|
-
-moz-border-radius-bottomright:
|
380
|
-
-moz-border-radius-topleft:
|
381
|
-
-moz-border-radius-topright:
|
372
|
+
-moz-border-radius-bottomleft: 0px;
|
373
|
+
-moz-border-radius-bottomright: 10px;
|
374
|
+
-moz-border-radius-topleft: 10px;
|
375
|
+
-moz-border-radius-topright: 0px;
|
382
376
|
height: 25px;
|
383
377
|
font-size: 1.2em;
|
384
|
-
color: #
|
378
|
+
color: #92b948;
|
385
379
|
padding: 5px 0px 0px 20px;
|
380
|
+
margin: 5px 5px;
|
386
381
|
}
|
387
382
|
|
388
383
|
button {
|
@@ -451,6 +446,7 @@ img.wait {
|
|
451
446
|
}
|
452
447
|
|
453
448
|
.modal {
|
449
|
+
font-size: 0.6em;
|
454
450
|
background-color: #212021;
|
455
451
|
display: none;
|
456
452
|
width: 350px;
|
@@ -463,3 +459,18 @@ img.wait {
|
|
463
459
|
-moz-box-shadow: 0 0 20px #92b948;
|
464
460
|
-webkit-box-shadow: 0 0 20px #92b948;
|
465
461
|
}
|
462
|
+
|
463
|
+
/* Node details */
|
464
|
+
div#wrap {
|
465
|
+
font-size: 0.7em;
|
466
|
+
}
|
467
|
+
|
468
|
+
/* Node info */
|
469
|
+
span#log {
|
470
|
+
color: #92b948;
|
471
|
+
font-size: 0.5em;
|
472
|
+
}
|
473
|
+
|
474
|
+
div#info {
|
475
|
+
min-height: 520px;
|
476
|
+
}
|