bigbluebutton_rails 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/CHANGELOG.rdoc +12 -0
- data/Gemfile.lock +53 -14
- data/README.rdoc +31 -29
- data/Rakefile +63 -11
- data/app/controllers/bigbluebutton/rooms_controller.rb +89 -26
- data/app/controllers/bigbluebutton/servers_controller.rb +38 -5
- data/app/helpers/bigbluebutton_rails_helper.rb +12 -0
- data/app/models/bigbluebutton_room.rb +44 -1
- data/app/models/bigbluebutton_server.rb +48 -12
- data/app/views/bigbluebutton/rooms/_form.html.erb +8 -0
- data/app/views/bigbluebutton/rooms/index.html.erb +34 -43
- data/app/views/bigbluebutton/rooms/join_mobile.html.erb +9 -0
- data/app/views/bigbluebutton/rooms/show.html.erb +8 -0
- data/app/views/bigbluebutton/servers/_activity_list.html.erb +48 -0
- data/app/views/bigbluebutton/servers/_form.html.erb +4 -0
- data/app/views/bigbluebutton/servers/activity.html.erb +51 -0
- data/app/views/bigbluebutton/servers/index.html.erb +21 -25
- data/app/views/bigbluebutton/servers/show.html.erb +5 -0
- data/bigbluebutton_rails.gemspec +9 -6
- data/config/locales/en.yml +11 -2
- data/lib/bigbluebutton_rails/controller_methods.rb +47 -14
- data/lib/bigbluebutton_rails/exceptions.rb +6 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +17 -12
- data/lib/bigbluebutton_rails/rails.rb +4 -0
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/bigbluebutton_rails.rb +1 -0
- data/lib/generators/bigbluebutton_rails/install_generator.rb +28 -5
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +3 -0
- data/lib/generators/bigbluebutton_rails/templates/migration_0_0_4.rb +38 -0
- data/lib/generators/bigbluebutton_rails/templates/migration_0_0_5.rb +23 -0
- data/{lib/generators/bigbluebutton_rails/templates/public → public}/images/loading.gif +0 -0
- data/{lib/generators/bigbluebutton_rails/templates/public → public}/javascripts/jquery.min.js +0 -0
- data/public/stylesheets/bigbluebutton_rails.css +138 -0
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +284 -25
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +93 -1
- data/spec/factories/bigbluebutton_room.rb +1 -0
- data/spec/factories/bigbluebutton_server.rb +1 -0
- data/spec/factories/integration/bigbluebutton_server_integration.rb +8 -0
- data/spec/generators/install_generator_spec.rb +53 -10
- data/spec/generators/views_generator_spec.rb +6 -2
- data/spec/helpers/bigbluebutton_rails_helper_spec.rb +19 -0
- data/spec/integration_conf.yml.example +5 -0
- data/spec/models/bigbluebutton_room_spec.rb +99 -72
- data/spec/models/bigbluebutton_server_spec.rb +81 -20
- data/spec/rails_app/.gitignore +2 -1
- data/spec/rails_app/app/views/layouts/application.html.erb +1 -1
- data/spec/rails_app/config/cucumber.yml +8 -0
- data/spec/rails_app/config/database.yml +4 -1
- data/spec/rails_app/db/seeds.rb +6 -5
- data/spec/rails_app/features/manage_bigbluebutton_rooms.feature +9 -0
- data/spec/rails_app/features/manage_bigbluebutton_servers.feature +9 -0
- data/spec/rails_app/features/step_definitions/bigbluebutton_room_steps.rb +38 -0
- data/spec/rails_app/features/step_definitions/bigbluebutton_server_steps.rb +23 -0
- data/spec/rails_app/features/step_definitions/common_steps.rb +3 -0
- data/spec/rails_app/features/step_definitions/web_steps.rb +211 -0
- data/spec/rails_app/features/support/content.rb +11 -0
- data/spec/rails_app/features/support/env.rb +50 -0
- data/spec/rails_app/features/support/env_gem.rb +9 -0
- data/spec/rails_app/features/support/paths.rb +38 -0
- data/spec/rails_app/features/support/selectors.rb +39 -0
- data/spec/rails_app/lib/tasks/cucumber.rake +65 -0
- data/spec/rails_app/public/images/loading.gif +0 -0
- data/spec/rails_app/public/javascripts/jquery.min.js +16 -0
- data/spec/rails_app/public/stylesheets/bigbluebutton_rails.css +138 -0
- data/spec/rails_app/script/cucumber +10 -0
- data/spec/routing/bigbluebutton/rooms_routing_spec.rb +12 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/support/integration/integration_conf.rb +16 -0
- data/spec/support/matchers/shoulda/respond_with_json_matcher.rb +67 -0
- data/spec/support/mocked_server.rb +1 -0
- metadata +91 -29
- data/lib/generators/bigbluebutton_rails/public_generator.rb +0 -16
- data/spec/generators/public_generator_spec.rb +0 -31
data/config/locales/en.yml
CHANGED
@@ -7,6 +7,9 @@ en:
|
|
7
7
|
success: "Your server was successfully created."
|
8
8
|
update:
|
9
9
|
success: "Your server was successfully updated."
|
10
|
+
errors:
|
11
|
+
param_format: 'you can only use letters, numbers and the symbols "-" or "_" (not at the begin or end)'
|
12
|
+
url_format: 'should use the pattern http://<server>/bigbluebutton/api'
|
10
13
|
rooms:
|
11
14
|
notice:
|
12
15
|
create:
|
@@ -18,21 +21,25 @@ en:
|
|
18
21
|
end:
|
19
22
|
success: "The meeting was successfully ended."
|
20
23
|
not_running: "The meeting could not be ended because it is not running."
|
21
|
-
|
24
|
+
destroy:
|
25
|
+
success: "The meeting was successfully destroyed."
|
26
|
+
errors:
|
22
27
|
auth:
|
23
28
|
failure: "Authentication failure."
|
24
29
|
not_running: "The meeting is not running. You must wait for a moderator to join."
|
30
|
+
param_format: 'you can only use letters, numbers and the symbols "-" or "_" (not at the begin or end)'
|
25
31
|
|
26
32
|
activerecord:
|
27
33
|
models:
|
28
34
|
bigbluebutton_server: "BigBlueButton Server"
|
29
35
|
bigbluebutton_room: "BigBlueButton Room"
|
30
|
-
attributes:
|
36
|
+
attributes:
|
31
37
|
bigbluebutton_server:
|
32
38
|
name: "Name"
|
33
39
|
url: "URL"
|
34
40
|
salt: "Security Salt"
|
35
41
|
version: "Version"
|
42
|
+
param: "String ID"
|
36
43
|
bigbluebutton_room:
|
37
44
|
server_id: "Server ID"
|
38
45
|
meetingid: "Meeting ID"
|
@@ -46,4 +53,6 @@ en:
|
|
46
53
|
dial_number: "Dial Number"
|
47
54
|
voice_bridge: "Voice Bridge"
|
48
55
|
max_participants: "Maximum Number of Participants"
|
56
|
+
external: "Externally created"
|
57
|
+
param: "String ID"
|
49
58
|
|
@@ -26,25 +26,58 @@ module BigbluebuttonRails
|
|
26
26
|
current_user
|
27
27
|
end
|
28
28
|
|
29
|
-
# Returns the role that the current user has in the room 'room'.
|
30
|
-
#
|
31
|
-
# :moderator
|
32
|
-
# :
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
29
|
+
# Returns the role that the current user has in the room 'room'. Return values:
|
30
|
+
# :moderator # the user has attendee permissions
|
31
|
+
# :attendee # the user has moderator permissions
|
32
|
+
# :password # the user must enter a password that will define his role
|
33
|
+
# nil # no role at all (the room is blocked to this user)
|
34
|
+
#
|
35
|
+
# Returning :moderator or :attendee means that the current user has access
|
36
|
+
# to the room and has moderator or attendee privileges, respectively.
|
37
|
+
# Returning :password indicates that the user must enter a password to define
|
38
|
+
# his role in the room.
|
39
|
+
# At last, returning nil means that the user cannot access access this room
|
40
|
+
# at all. BigbluebuttonRails::RoomController will thrown an exception of the
|
41
|
+
# class BigbluebuttonRails::RoomAccessDenied in this case. By default rails will
|
42
|
+
# show an error page whenever an exception is thrown (and not catch). To show
|
43
|
+
# a better-looking page, add in your ApplicationController a block to catch the
|
44
|
+
# exception, such as:
|
45
|
+
#
|
46
|
+
# rescue_from BigbluebuttonRails::RoomAccessDenied do |exception|
|
47
|
+
# flash[:error] = "You don't have permission to access this room!"
|
48
|
+
# redirect_to root_url
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# You may want to redefine this method in your application to define
|
52
|
+
# real roles to the users. By default, if the room is not private and the user
|
53
|
+
# is logged, he will have moderator permissions. Otherwise, he must enter
|
54
|
+
# a password. Redefine it in your ApplicationController to make it available
|
55
|
+
# to all controllers. For example:
|
37
56
|
#
|
38
57
|
# def bigbluebutton_role(@room)
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
58
|
+
#
|
59
|
+
# # the owner is the moderator
|
60
|
+
# if @room.owner == bigbluebutton_user
|
61
|
+
# :moderator
|
62
|
+
#
|
63
|
+
# # only friends are allowed to enter
|
64
|
+
# elsif @room.owner.friends.include? bigbluebutton_user
|
65
|
+
# if @room.private
|
66
|
+
# :password # with password if the room is private
|
67
|
+
# else
|
68
|
+
# :attendee
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# # not a friend? you're not allowed in
|
72
|
+
# else
|
73
|
+
# nil
|
74
|
+
# end
|
75
|
+
#
|
43
76
|
# end
|
44
77
|
#
|
45
78
|
def bigbluebutton_role(room)
|
46
|
-
if room.private or
|
47
|
-
|
79
|
+
if room.private or bigbluebutton_user.nil?
|
80
|
+
:password # ask for a password
|
48
81
|
else
|
49
82
|
:moderator
|
50
83
|
end
|
@@ -52,18 +52,20 @@ module ActionDispatch::Routing
|
|
52
52
|
#
|
53
53
|
# The routes generated are:
|
54
54
|
#
|
55
|
-
# user_room
|
56
|
-
#
|
57
|
-
# user_join_room
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
55
|
+
# user_room GET /users/:user_id/room/:id(.:format)
|
56
|
+
# { :controller=>"bigbluebutton/rooms", :action=>"show" }
|
57
|
+
# user_join_room GET /users/:user_id/room/:id/join(.:format)
|
58
|
+
# { :controller=>"bigbluebutton/rooms", :action=>"join" }
|
59
|
+
# user_join_mobile_room GET /users/:user_id/room/:id/invite(.:format)
|
60
|
+
# { :controller=>"bigbluebutton/rooms", :action=>"invite" }
|
61
|
+
# user_auth_room POST /users/:user_id/room/:id/join(.:format)
|
62
|
+
# { :controller=>"bigbluebutton/rooms", :action=>"auth" }
|
63
|
+
# user_running_room GET /users/:user_id/room/:id/running(.:format)
|
64
|
+
# { :controller=>"bigbluebutton/rooms", :action=>"running" }
|
65
|
+
# user_end_room GET /users/:user_id/room/:id/end(.:format)
|
66
|
+
# { :controller=>"bigbluebutton/rooms", :action=>"end" }
|
67
|
+
# user_invite_room GET /users/:user_id/room/:id/invite(.:format)
|
68
|
+
# { :controller=>"bigbluebutton/rooms", :action=>"invite" }
|
67
69
|
#
|
68
70
|
def bigbluebutton_routes(*params)
|
69
71
|
options = params.extract_options!
|
@@ -79,11 +81,13 @@ module ActionDispatch::Routing
|
|
79
81
|
|
80
82
|
scope options_scope, :as => options_scope do
|
81
83
|
resources :servers, :controller => BigbluebuttonRails.controllers[:servers] do
|
84
|
+
get :activity, :on => :member
|
82
85
|
resources :rooms, :controller => BigbluebuttonRails.controllers[:rooms] do
|
83
86
|
get :join, :on => :member
|
84
87
|
get :running, :on => :member
|
85
88
|
get :end, :on => :member
|
86
89
|
get :invite, :on => :member
|
90
|
+
get :join_mobile, :on => :member
|
87
91
|
post :join, :on => :member, :action => :auth
|
88
92
|
end
|
89
93
|
end
|
@@ -94,6 +98,7 @@ module ActionDispatch::Routing
|
|
94
98
|
# TODO This is generating helpers like "user_running_room" instead of "running_user_room"
|
95
99
|
get 'room/:id' => "#{BigbluebuttonRails.controllers[:rooms]}#show", :as => 'room'
|
96
100
|
get 'room/:id/join' => "#{BigbluebuttonRails.controllers[:rooms]}#join", :as => 'join_room'
|
101
|
+
get 'room/:id/join_mobile' => "#{BigbluebuttonRails.controllers[:rooms]}#join_mobile", :as => 'join_mobile_room'
|
97
102
|
post 'room/:id/join' => "#{BigbluebuttonRails.controllers[:rooms]}#auth", :as => 'join_room'
|
98
103
|
get 'room/:id/running' => "#{BigbluebuttonRails.controllers[:rooms]}#running", :as => 'running_room'
|
99
104
|
get 'room/:id/end' => "#{BigbluebuttonRails.controllers[:rooms]}#end", :as => 'end_room'
|
@@ -1,6 +1,10 @@
|
|
1
1
|
module BigbluebuttonRails
|
2
2
|
class Engine < ::Rails::Engine
|
3
3
|
|
4
|
+
initializer 'bigbluebutton_rails.helper' do |app|
|
5
|
+
ActionView::Base.send :include, BigbluebuttonRailsHelper
|
6
|
+
end
|
7
|
+
|
4
8
|
initializer "bigbluebutton_rails.controller_methods" do
|
5
9
|
ActiveSupport.on_load(:action_controller) do
|
6
10
|
include BigbluebuttonRails::ControllerMethods
|
data/lib/bigbluebutton_rails.rb
CHANGED
@@ -6,6 +6,7 @@ module BigbluebuttonRails
|
|
6
6
|
require 'bigbluebutton_rails/rails'
|
7
7
|
require 'bigbluebutton_rails/controller_methods'
|
8
8
|
require 'bigbluebutton_rails/rails/routes'
|
9
|
+
require 'bigbluebutton_rails/exceptions'
|
9
10
|
|
10
11
|
# Default controllers to generate the routes
|
11
12
|
mattr_accessor :controllers
|
@@ -4,13 +4,22 @@ module BigbluebuttonRails
|
|
4
4
|
module Generators
|
5
5
|
class InstallGenerator < Rails::Generators::Base
|
6
6
|
include Rails::Generators::Migration
|
7
|
-
|
7
|
+
argument :migrate_to_version, :type => :string, :default => "", :description => "Generate migration to this version"
|
8
|
+
class_option :migration_only, :type => :boolean, :default => false, :description => "Generate only the migration file"
|
9
|
+
source_root File.expand_path("../../../../", __FILE__) # set to gem root
|
8
10
|
|
9
|
-
desc "Creates the
|
11
|
+
desc "Creates the migrations and locale files. Also used to create migrations when updating the gem version."
|
10
12
|
|
11
13
|
def copy_locale
|
12
|
-
|
13
|
-
|
14
|
+
copy_file "config/locales/en.yml", "config/locales/bigbluebutton_rails.en.yml" unless options.migration_only?
|
15
|
+
end
|
16
|
+
|
17
|
+
def copy_public_files
|
18
|
+
unless options.migration_only?
|
19
|
+
copy_file "public/javascripts/jquery.min.js", "public/javascripts/jquery.min.js"
|
20
|
+
copy_file "public/images/loading.gif", "public/images/loading.gif"
|
21
|
+
copy_file "public/stylesheets/bigbluebutton_rails.css", "public/stylesheets/bigbluebutton_rails.css"
|
22
|
+
end
|
14
23
|
end
|
15
24
|
|
16
25
|
def self.next_migration_number(dirname)
|
@@ -18,7 +27,21 @@ module BigbluebuttonRails
|
|
18
27
|
end
|
19
28
|
|
20
29
|
def create_migration_file
|
21
|
-
|
30
|
+
if migrate_to_version.blank?
|
31
|
+
migration_template "#{migration_path}/migration.rb", "db/migrate/create_bigbluebutton_rails.rb"
|
32
|
+
else
|
33
|
+
migration_template "#{migration_path}/migration_#{version_filename}.rb", "db/migrate/bigbluebutton_rails_to_#{version_filename}.rb"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
def migration_path
|
40
|
+
File.join("lib", "generators", "bigbluebutton_rails", "templates")
|
41
|
+
end
|
42
|
+
|
43
|
+
def version_filename
|
44
|
+
migrate_to_version.gsub(".", "_")
|
22
45
|
end
|
23
46
|
|
24
47
|
end
|
@@ -6,6 +6,7 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
|
|
6
6
|
t.string :url
|
7
7
|
t.string :salt
|
8
8
|
t.string :version
|
9
|
+
t.string :param
|
9
10
|
t.timestamps
|
10
11
|
end
|
11
12
|
create_table :bigbluebutton_rooms do |t|
|
@@ -23,6 +24,8 @@ class CreateBigbluebuttonRails < ActiveRecord::Migration
|
|
23
24
|
t.integer :max_participants
|
24
25
|
t.boolean :private, :default => false
|
25
26
|
t.boolean :randomize_meetingid, :default => true
|
27
|
+
t.boolean :external, :default => false
|
28
|
+
t.string :param
|
26
29
|
t.timestamps
|
27
30
|
end
|
28
31
|
add_index :bigbluebutton_rooms, :server_id
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class BigbluebuttonRailsTo004 < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
create_table :bigbluebutton_servers do |t|
|
5
|
+
t.string :name
|
6
|
+
t.string :url
|
7
|
+
t.string :salt
|
8
|
+
t.string :version
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
create_table :bigbluebutton_rooms do |t|
|
12
|
+
t.integer :server_id
|
13
|
+
t.integer :owner_id
|
14
|
+
t.string :owner_type
|
15
|
+
t.string :meetingid
|
16
|
+
t.string :name
|
17
|
+
t.string :attendee_password
|
18
|
+
t.string :moderator_password
|
19
|
+
t.string :welcome_msg
|
20
|
+
t.string :logout_url
|
21
|
+
t.string :voice_bridge
|
22
|
+
t.string :dial_number
|
23
|
+
t.integer :max_participants
|
24
|
+
t.boolean :private, :default => false
|
25
|
+
t.boolean :randomize_meetingid, :default => true
|
26
|
+
t.timestamps
|
27
|
+
end
|
28
|
+
add_index :bigbluebutton_rooms, :server_id
|
29
|
+
add_index :bigbluebutton_rooms, :meetingid, :unique => true
|
30
|
+
add_index :bigbluebutton_rooms, :voice_bridge, :unique => true
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.down
|
34
|
+
drop_table :bigbluebutton_rooms
|
35
|
+
drop_table :bigbluebutton_servers
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class BigbluebuttonRailsTo005 < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
add_column :bigbluebutton_rooms, :external, :boolean, :default => false
|
5
|
+
add_column :bigbluebutton_rooms, :param, :string
|
6
|
+
add_column :bigbluebutton_servers, :param, :string
|
7
|
+
|
8
|
+
BigbluebuttonRoom.all.each do |r|
|
9
|
+
r.update_attributes(:param => r.name.parameterize.downcase) unless r.name.nil?
|
10
|
+
end
|
11
|
+
BigbluebuttonServer.all.each do |s|
|
12
|
+
s.update_attributes(:param => s.name.parameterize.downcase) unless s.name.nil?
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.down
|
18
|
+
remove_column :bigbluebutton_rooms, :external
|
19
|
+
remove_column :bigbluebutton_rooms, :param
|
20
|
+
remove_column :bigbluebutton_servers, :param
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
File without changes
|
data/{lib/generators/bigbluebutton_rails/templates/public → public}/javascripts/jquery.min.js
RENAMED
File without changes
|
@@ -0,0 +1,138 @@
|
|
1
|
+
.bbbrails_meeting_description {
|
2
|
+
padding: 5px;
|
3
|
+
margin-top: 20px;
|
4
|
+
}
|
5
|
+
|
6
|
+
.bbbrails_meeting_description span.running {
|
7
|
+
color: green;
|
8
|
+
}
|
9
|
+
|
10
|
+
.bbbrails_meeting_description span.not_running {
|
11
|
+
color: #a00000;
|
12
|
+
}
|
13
|
+
|
14
|
+
.bbbrails_meeting_description .button_bar {
|
15
|
+
float: right;
|
16
|
+
margin-right: 10px;
|
17
|
+
border-left: 1px solid #aaa;
|
18
|
+
}
|
19
|
+
|
20
|
+
.bbbrails_meeting_description .button_bar a {
|
21
|
+
margin-left: 5px;
|
22
|
+
}
|
23
|
+
|
24
|
+
.bbbrails_meeting_description .title_bar {
|
25
|
+
padding: 5px;
|
26
|
+
background: #f0f0f0;
|
27
|
+
}
|
28
|
+
|
29
|
+
.bbbrails_meeting_description_changed {
|
30
|
+
border: 1px solid #d00000;
|
31
|
+
}
|
32
|
+
|
33
|
+
.bbbrails_countdown {
|
34
|
+
float: right;
|
35
|
+
padding: 5px;
|
36
|
+
margin: 10px;
|
37
|
+
}
|
38
|
+
|
39
|
+
.bbbrails_meeting_attendees {
|
40
|
+
margin-top: 10px;
|
41
|
+
}
|
42
|
+
|
43
|
+
.bbbrails_meeting_attendees .header, .bbbrails_meeting_attendees .row {
|
44
|
+
clear: both;
|
45
|
+
border-top: 1px solid #ddd;
|
46
|
+
}
|
47
|
+
|
48
|
+
.bbbrails_meeting_attendees .header .field {
|
49
|
+
float: left;
|
50
|
+
margin: 0 5px 0 0;
|
51
|
+
width: 180px;
|
52
|
+
font-weight: bold;
|
53
|
+
padding: 3px;
|
54
|
+
}
|
55
|
+
|
56
|
+
.bbbrails_meeting_attendees .row .field {
|
57
|
+
float: left;
|
58
|
+
margin: 0 5px 0 0;
|
59
|
+
width: 180px;
|
60
|
+
padding: 3px;
|
61
|
+
}
|
62
|
+
|
63
|
+
|
64
|
+
/*
|
65
|
+
* Used in bigbluebutton_servers/index
|
66
|
+
*/
|
67
|
+
|
68
|
+
#bbbrails_servers_list {
|
69
|
+
list-style-type: none;
|
70
|
+
margin: 0;
|
71
|
+
padding: 0;
|
72
|
+
}
|
73
|
+
|
74
|
+
#bbbrails_servers_links {
|
75
|
+
margin-bottom: 5px;
|
76
|
+
padding-bottom: 5px;
|
77
|
+
border-bottom: 1px solid #ddd;
|
78
|
+
}
|
79
|
+
|
80
|
+
#bbbrails_servers_list li {
|
81
|
+
margin-bottom: 5px;
|
82
|
+
padding-bottom: 5px;
|
83
|
+
border-bottom: 1px solid #ddd;
|
84
|
+
clear: both;
|
85
|
+
}
|
86
|
+
|
87
|
+
#bbbrails_servers_list div.field {
|
88
|
+
margin: 0;
|
89
|
+
padding: 0;
|
90
|
+
clear: both;
|
91
|
+
}
|
92
|
+
|
93
|
+
#bbbrails_servers_list label {
|
94
|
+
font-weight: bold;
|
95
|
+
width: 150px;
|
96
|
+
float: left;
|
97
|
+
text-align: right;
|
98
|
+
margin-right: 10px;
|
99
|
+
clear: both;
|
100
|
+
}
|
101
|
+
|
102
|
+
/*
|
103
|
+
* Used in bigbluebutton_rooms/index
|
104
|
+
*/
|
105
|
+
|
106
|
+
#bbbrails_rooms_list {
|
107
|
+
list-style-type: none;
|
108
|
+
margin: 0;
|
109
|
+
padding: 0;
|
110
|
+
}
|
111
|
+
|
112
|
+
#bbbrails_rooms_links {
|
113
|
+
margin-bottom: 5px;
|
114
|
+
padding-bottom: 5px;
|
115
|
+
border-bottom: 1px solid #ddd;
|
116
|
+
}
|
117
|
+
|
118
|
+
#bbbrails_rooms_list li {
|
119
|
+
margin-bottom: 5px;
|
120
|
+
padding-bottom: 5px;
|
121
|
+
border-bottom: 1px solid #ddd;
|
122
|
+
clear: both;
|
123
|
+
}
|
124
|
+
|
125
|
+
#bbbrails_rooms_list div.field {
|
126
|
+
margin: 0;
|
127
|
+
padding: 0;
|
128
|
+
clear: both;
|
129
|
+
}
|
130
|
+
|
131
|
+
#bbbrails_rooms_list label {
|
132
|
+
font-weight: bold;
|
133
|
+
width: 300px;
|
134
|
+
float: left;
|
135
|
+
text-align: right;
|
136
|
+
margin-right: 10px;
|
137
|
+
clear: both;
|
138
|
+
}
|