grandstand 0.2.1
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/.gitignore +2 -0
- data/MIT-LICENSE +20 -0
- data/README +7 -0
- data/Rakefile +44 -0
- data/VERSION +1 -0
- data/app/controllers/admin/galleries_controller.rb +52 -0
- data/app/controllers/admin/images_controller.rb +68 -0
- data/app/controllers/admin/main_controller.rb +36 -0
- data/app/controllers/admin/pages_controller.rb +51 -0
- data/app/controllers/admin/posts_controller.rb +48 -0
- data/app/controllers/admin/sessions_controller.rb +41 -0
- data/app/controllers/admin/templates_controller.rb +6 -0
- data/app/controllers/admin/users_controller.rb +48 -0
- data/app/controllers/galleries_controller.rb +5 -0
- data/app/controllers/pages_controller.rb +5 -0
- data/app/controllers/posts_controller.rb +5 -0
- data/app/helpers/admin/main_helper.rb +31 -0
- data/app/helpers/admin/pages_helper.rb +2 -0
- data/app/helpers/admin/posts_helper.rb +2 -0
- data/app/helpers/admin/sessions_helper.rb +2 -0
- data/app/helpers/admin/templates_helper.rb +2 -0
- data/app/helpers/admin/users_helper.rb +2 -0
- data/app/helpers/pages_helper.rb +2 -0
- data/app/helpers/posts_helper.rb +2 -0
- data/app/helpers/site_helper.rb +2 -0
- data/app/models/gallery.rb +22 -0
- data/app/models/image.rb +61 -0
- data/app/models/page.rb +45 -0
- data/app/models/page_section.rb +6 -0
- data/app/models/post.rb +27 -0
- data/app/models/template.rb +33 -0
- data/app/models/user.rb +68 -0
- data/app/stylesheets/_buttons.less +76 -0
- data/app/stylesheets/_dialogs.less +85 -0
- data/app/stylesheets/application.less +238 -0
- data/app/stylesheets/global.less +435 -0
- data/app/stylesheets/login.less +30 -0
- data/app/stylesheets/wysiwyg.less +96 -0
- data/app/views/admin/galleries/_form.html.erb +11 -0
- data/app/views/admin/galleries/_gallery.html.erb +16 -0
- data/app/views/admin/galleries/_list.html.erb +17 -0
- data/app/views/admin/galleries/delete.html.erb +8 -0
- data/app/views/admin/galleries/edit.html.erb +8 -0
- data/app/views/admin/galleries/editor.html.erb +13 -0
- data/app/views/admin/galleries/editor_with_images.html.erb +19 -0
- data/app/views/admin/galleries/index.html.erb +13 -0
- data/app/views/admin/galleries/new.html.erb +8 -0
- data/app/views/admin/galleries/show.html.erb +15 -0
- data/app/views/admin/images/_form.html.erb +11 -0
- data/app/views/admin/images/delete.html.erb +8 -0
- data/app/views/admin/images/edit.html.erb +8 -0
- data/app/views/admin/images/new.html.erb +8 -0
- data/app/views/admin/images/upload.html.erb +11 -0
- data/app/views/admin/main/index.html.erb +10 -0
- data/app/views/admin/pages/_form.html.erb +33 -0
- data/app/views/admin/pages/_left.html.erb +3 -0
- data/app/views/admin/pages/_row.html.erb +9 -0
- data/app/views/admin/pages/delete.html.erb +8 -0
- data/app/views/admin/pages/edit.html.erb +8 -0
- data/app/views/admin/pages/index.html.erb +20 -0
- data/app/views/admin/pages/new.html.erb +8 -0
- data/app/views/admin/pages/show.html.erb +3 -0
- data/app/views/admin/posts/_form.html.erb +29 -0
- data/app/views/admin/posts/_left.html.erb +3 -0
- data/app/views/admin/posts/_list.html.erb +22 -0
- data/app/views/admin/posts/delete.html.erb +9 -0
- data/app/views/admin/posts/edit.html.erb +10 -0
- data/app/views/admin/posts/index.html.erb +10 -0
- data/app/views/admin/posts/new.html.erb +10 -0
- data/app/views/admin/posts/show.html.erb +4 -0
- data/app/views/admin/sessions/forgot.html.erb +8 -0
- data/app/views/admin/sessions/show.html.erb +12 -0
- data/app/views/admin/shared/_flash.html.erb +3 -0
- data/app/views/admin/users/_form.html.erb +16 -0
- data/app/views/admin/users/_left.html.erb +3 -0
- data/app/views/admin/users/delete.html.erb +10 -0
- data/app/views/admin/users/edit.html.erb +8 -0
- data/app/views/admin/users/index.html.erb +22 -0
- data/app/views/admin/users/new.html.erb +8 -0
- data/app/views/admin/users/show.html.erb +12 -0
- data/app/views/galleries/index.html.erb +0 -0
- data/app/views/galleries/show.html.erb +12 -0
- data/app/views/layouts/admin.html.erb +80 -0
- data/app/views/layouts/admin_login.html.erb +17 -0
- data/app/views/layouts/admin_xhr.html.erb +3 -0
- data/app/views/pages/show.html.erb +8 -0
- data/app/views/posts/show.html.erb +3 -0
- data/app/views/shared/404.html.erb +5 -0
- data/app/views/shared/gallery.html +14 -0
- data/app/views/shared/image.html +1 -0
- data/app/views/shared/page.html +0 -0
- data/app/views/shared/post.html +3 -0
- data/grandstand.gemspec +189 -0
- data/lib/grandstand/application.rb +50 -0
- data/lib/grandstand/controller/development.rb +15 -0
- data/lib/grandstand/controller.rb +104 -0
- data/lib/grandstand/helper.rb +117 -0
- data/lib/grandstand/routes.rb +59 -0
- data/lib/grandstand/session.rb +25 -0
- data/lib/grandstand.rb +27 -0
- data/public/.DS_Store +0 -0
- data/public/admin/.DS_Store +0 -0
- data/public/admin/images/.DS_Store +0 -0
- data/public/admin/images/background-input.gif +0 -0
- data/public/admin/images/background-progress-bar.png +0 -0
- data/public/admin/images/background-progress-complete.gif +0 -0
- data/public/admin/images/background-progress.gif +0 -0
- data/public/admin/images/icons/.DS_Store +0 -0
- data/public/admin/images/icons/add.png +0 -0
- data/public/admin/images/icons/collapse.png +0 -0
- data/public/admin/images/icons/delete.png +0 -0
- data/public/admin/images/icons/edit.png +0 -0
- data/public/admin/images/icons/editor/bold.png +0 -0
- data/public/admin/images/icons/editor/gallery.png +0 -0
- data/public/admin/images/icons/editor/image-center.png +0 -0
- data/public/admin/images/icons/editor/image-left.png +0 -0
- data/public/admin/images/icons/editor/image-right.png +0 -0
- data/public/admin/images/icons/editor/image.png +0 -0
- data/public/admin/images/icons/editor/italic.png +0 -0
- data/public/admin/images/icons/editor/ordered-list.png +0 -0
- data/public/admin/images/icons/editor/quote.png +0 -0
- data/public/admin/images/icons/editor/source.png +0 -0
- data/public/admin/images/icons/editor/strikethrough.png +0 -0
- data/public/admin/images/icons/editor/underline.png +0 -0
- data/public/admin/images/icons/editor/unordered-list.png +0 -0
- data/public/admin/images/icons/error.png +0 -0
- data/public/admin/images/icons/expand.png +0 -0
- data/public/admin/images/icons/galleries.png +0 -0
- data/public/admin/images/icons/gallery.png +0 -0
- data/public/admin/images/icons/image.png +0 -0
- data/public/admin/images/icons/okay.png +0 -0
- data/public/admin/images/icons/pages.png +0 -0
- data/public/admin/images/icons/posts.png +0 -0
- data/public/admin/images/icons/upload.png +0 -0
- data/public/admin/images/icons/users.png +0 -0
- data/public/admin/images/logo.png +0 -0
- data/public/admin/images/spinner-dark.gif +0 -0
- data/public/admin/images/uploader.swf +0 -0
- data/public/admin/javascripts/application.js +231 -0
- data/public/admin/javascripts/jquery.js +404 -0
- data/public/admin/javascripts/mustache.js +324 -0
- data/public/admin/javascripts/selection.js +280 -0
- data/public/admin/javascripts/string.js +264 -0
- data/public/admin/javascripts/wysiwyg.js +335 -0
- data/public/admin/stylesheets/application.css +1 -0
- data/public/admin/stylesheets/global.css +1 -0
- data/public/admin/stylesheets/login.css +1 -0
- data/public/admin/stylesheets/wysiwyg-content.css +20 -0
- data/public/admin/stylesheets/wysiwyg.css +1 -0
- data/vendor/cache/more-0.1.1.gem +0 -0
- metadata +216 -0
data/app/models/post.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class Post < ActiveRecord::Base
|
|
2
|
+
before_save :set_url
|
|
3
|
+
belongs_to :user
|
|
4
|
+
default_scope order('created_at DESC')
|
|
5
|
+
|
|
6
|
+
validates_presence_of :name, :message => 'Your post needs a name'
|
|
7
|
+
validates_uniqueness_of :name, :message => 'A post with that name already exists'
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
def extract_month(attribute)
|
|
11
|
+
"strftime('%m', #{attribute})"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def extract_year(attribute)
|
|
15
|
+
"strftime('%Y', #{attribute})"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# def to_param
|
|
20
|
+
# url
|
|
21
|
+
# end
|
|
22
|
+
|
|
23
|
+
protected
|
|
24
|
+
def set_url
|
|
25
|
+
self.url ||= name.parameterize
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class Template
|
|
2
|
+
class << self
|
|
3
|
+
def [](name)
|
|
4
|
+
@templates ||= {}
|
|
5
|
+
@templates[name] ||= new(name)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
protected
|
|
9
|
+
def method_missing(*args)
|
|
10
|
+
method = args.shift.to_sym
|
|
11
|
+
self[method].render
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def initialize(name, body = nil)
|
|
16
|
+
@file = Dir[*ApplicationController.view_paths.map {|path| File.join(path.to_s, 'shared', "#{name}.html")}].find {|file| File.file?(file)}
|
|
17
|
+
if body
|
|
18
|
+
@body = body
|
|
19
|
+
elsif @file
|
|
20
|
+
@body = File.read(@file)
|
|
21
|
+
else
|
|
22
|
+
return false
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def path
|
|
27
|
+
@file.freeze
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def render
|
|
31
|
+
@body.freeze
|
|
32
|
+
end
|
|
33
|
+
end
|
data/app/models/user.rb
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
class User < ActiveRecord::Base
|
|
2
|
+
attr_accessor :password
|
|
3
|
+
attr_accessible :email, :first_name, :last_name, :password, :password_confirmation
|
|
4
|
+
|
|
5
|
+
before_save :encrypt_password
|
|
6
|
+
|
|
7
|
+
default_scope :order => [:first_name, :last_name]
|
|
8
|
+
|
|
9
|
+
has_many :galleries
|
|
10
|
+
has_many :images
|
|
11
|
+
has_many :posts
|
|
12
|
+
|
|
13
|
+
validates_confirmation_of :password, :allow_nil => true
|
|
14
|
+
validates_presence_of :email
|
|
15
|
+
validates_uniqueness_of :email, :allow_nil => true
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
def authenticates_with(credentials)
|
|
19
|
+
password = credentials.delete(:password)
|
|
20
|
+
first(:conditions => credentials)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Check whether or not a given password hashes out to this models'
|
|
25
|
+
# stored password.
|
|
26
|
+
def authenticates_with?(check_password)
|
|
27
|
+
encrypted_password == password_digest(check_password)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Provides a mailto: formatted link to this users' e-mail address
|
|
31
|
+
def mailto
|
|
32
|
+
"mailto:#{email}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Creates a whitespace-cleaned combination of this users' first and
|
|
36
|
+
# last names
|
|
37
|
+
def name
|
|
38
|
+
return @name if @name
|
|
39
|
+
name = [first_name, last_name].reject(&:blank?).join(' ')
|
|
40
|
+
@name = name.blank? ? email : name
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
protected
|
|
44
|
+
# Store a models' salt and password fields. Salting ensures that
|
|
45
|
+
# identical passwords do not appear the same in the database. So
|
|
46
|
+
# if two people have "foobar" as their password, they'll be completely
|
|
47
|
+
# different. Helps prevent rainbow-style attackyness.
|
|
48
|
+
def encrypt_password
|
|
49
|
+
unless password.blank?
|
|
50
|
+
self.salt = Digest::SHA1.hexdigest([Time.now.to_s, (1..10).map{ rand.to_s }].join('--'))
|
|
51
|
+
self.encrypted_password = password_digest(password)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Returns a hash of a given password string. Used both for storing
|
|
56
|
+
# passwords and authenticating later. The DIGEST_STRETCHES constant
|
|
57
|
+
# ensures passwords are hashed more than once - which prevents brute-
|
|
58
|
+
# force attacks from being even remotely efficient. Take that, hacker
|
|
59
|
+
# dickheads.
|
|
60
|
+
def password_digest(password)
|
|
61
|
+
password_digest = SITE_KEY
|
|
62
|
+
# Perform stretching per RESTful Authentication's guidelines
|
|
63
|
+
DIGEST_STRETCHES.times do
|
|
64
|
+
password_digest = Digest::SHA1.hexdigest([password_digest, salt, password, SITE_KEY].join('--'))
|
|
65
|
+
end
|
|
66
|
+
password_digest
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
buttons.less contains all button styling. Button styling should be mixed-in
|
|
3
|
+
using #grandstand > .button-class to whatever elements need to look like buttons -
|
|
4
|
+
be they links, button tags, or menu items.
|
|
5
|
+
*/
|
|
6
|
+
#grandstand {
|
|
7
|
+
.styled-toolbar {
|
|
8
|
+
background-color:#a7a7a7;
|
|
9
|
+
background-image:-moz-linear-gradient(top, #cacaca, #a7a7a7);
|
|
10
|
+
background-image:-webkit-gradient(linear, left top, left bottom, from(#cacaca), to(#a7a7a7));
|
|
11
|
+
overflow:hidden;
|
|
12
|
+
padding:5px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.button-default {
|
|
16
|
+
background-color:#ececec;
|
|
17
|
+
background-image:-moz-linear-gradient(top, #f4f4f4, #ececec);
|
|
18
|
+
background-image:-webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec));
|
|
19
|
+
border:1px solid #d4d4d4;
|
|
20
|
+
color:#333;
|
|
21
|
+
cursor:pointer;
|
|
22
|
+
display:inline-block;
|
|
23
|
+
font-size:12px;
|
|
24
|
+
font-weight:bold;
|
|
25
|
+
line-height:16px;
|
|
26
|
+
margin:0;
|
|
27
|
+
overflow:hidden;
|
|
28
|
+
padding:4px 10px;
|
|
29
|
+
text-decoration:none;
|
|
30
|
+
text-shadow:#fff 0 1px 0;
|
|
31
|
+
vertical-align:baseline;
|
|
32
|
+
vertical-align:middle;
|
|
33
|
+
-moz-border-radius:2px;
|
|
34
|
+
-webkit-border-radius:2px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.button-hover {
|
|
38
|
+
background-color:#3072b3;
|
|
39
|
+
background-image:-moz-linear-gradient(top, #599bdc, #3072b3);
|
|
40
|
+
background-image:-webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3));
|
|
41
|
+
border-color:#518cc6;
|
|
42
|
+
border-bottom-color:#2a65a0;
|
|
43
|
+
color:#fff;
|
|
44
|
+
text-shadow:rgba(0, 0, 0, 0.4) 0 -1px 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.button-active {
|
|
48
|
+
background-color:#599bdc;
|
|
49
|
+
background-image:-moz-linear-gradient(top, #3072b3, #599bdc);
|
|
50
|
+
background-image:-webkit-gradient(linear, left top, left bottom, from(#3072b3), to(#599bdc));
|
|
51
|
+
border-bottom-color:#518cc6;
|
|
52
|
+
border-top-color:#2a65a0;
|
|
53
|
+
-moz-box-shadow:inset rgba(0, 0, 0, 0.2) 0 0 1px;
|
|
54
|
+
-webkit-box-shadow:inset rgba(0, 0, 0, 0.2) 0 0 1px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.button-grey {
|
|
58
|
+
background-color:#333;
|
|
59
|
+
background-image:-moz-linear-gradient(top, #333, #444);
|
|
60
|
+
background-image:-webkit-gradient(linear, left top, left bottom, from(#444), to(#333));
|
|
61
|
+
border-color:#000;
|
|
62
|
+
color:#fff;
|
|
63
|
+
text-shadow:#000 0 -1px 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.button-grey-hover {
|
|
67
|
+
background-color:#444;
|
|
68
|
+
background-image:-moz-linear-gradient(top, #333, #444);
|
|
69
|
+
background-image:-webkit-gradient(linear, left top, left bottom, from(#333), to(#444));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.button-grey-active {
|
|
73
|
+
-moz-box-shadow:inset rgba(0, 0, 0, 1) 0 0px 1px;
|
|
74
|
+
-webkit-box-shadow:inset rgba(0, 0, 0, 1) 0 0px 1px;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
dialogs.less contains the styling for drop-down dialogs in the WYSIWYG editor. Ideally,
|
|
3
|
+
it should be merged with the #pulldown styling from application.less to create something
|
|
4
|
+
a bit more seamless
|
|
5
|
+
*/
|
|
6
|
+
.admin .wysiwyg .dialog {
|
|
7
|
+
> form {
|
|
8
|
+
background:#fff;
|
|
9
|
+
left:50%;
|
|
10
|
+
margin-left:-40%;
|
|
11
|
+
position:absolute;
|
|
12
|
+
top:0;
|
|
13
|
+
width:80%;
|
|
14
|
+
z-index:3;
|
|
15
|
+
-moz-border-radius-bottomleft:5px;
|
|
16
|
+
-moz-border-radius-bottomright:5px;
|
|
17
|
+
-moz-box-shadow:#444 0 2px 2px;
|
|
18
|
+
-webkit-border-bottom-left-radius:5px;
|
|
19
|
+
-webkit-border-bottom-right-radius:5px;
|
|
20
|
+
-webkit-box-shadow:#444 0 2px 2px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.pad {
|
|
24
|
+
padding:10px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.xhr, form, .source, .destination {
|
|
28
|
+
/* height:100%;*/
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.source {
|
|
32
|
+
background:#d9dfe8;
|
|
33
|
+
border-right:1px solid #aaa;
|
|
34
|
+
float:left;
|
|
35
|
+
overflow-x:hidden;
|
|
36
|
+
overflow-y:auto;
|
|
37
|
+
width:200px;
|
|
38
|
+
-moz-border-radius-bottomleft:5px;
|
|
39
|
+
-webkit-border-bottom-left-radius:5px;
|
|
40
|
+
|
|
41
|
+
.header {
|
|
42
|
+
background-image:none !important;
|
|
43
|
+
border-width:0 !important;
|
|
44
|
+
color:#505d81;
|
|
45
|
+
font-weight:bold;
|
|
46
|
+
padding:10px 10px 5px 10px;
|
|
47
|
+
text-shadow:#f1f5f8 0 1px 0;
|
|
48
|
+
text-transform:uppercase;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
a {
|
|
52
|
+
border-top:1px solid #d9dfe8;
|
|
53
|
+
color:#000;
|
|
54
|
+
display:block;
|
|
55
|
+
padding:5px 5px 5px 20px;
|
|
56
|
+
text-decoration:none;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
a.active {
|
|
60
|
+
background:-webkit-gradient(linear, left top, left bottom, from(#63a4e2), to(#0066c0));
|
|
61
|
+
border-top:1px solid #4691d6;
|
|
62
|
+
color:#fff;
|
|
63
|
+
text-shadow:#000 0 1px 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.destination {
|
|
68
|
+
margin-left:201px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.image {
|
|
72
|
+
cursor:pointer;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.scrollable {
|
|
76
|
+
/* height:100%;*/
|
|
77
|
+
overflow-x:hidden;
|
|
78
|
+
overflow-y:auto;
|
|
79
|
+
padding:10px 0;
|
|
80
|
+
width:100%;
|
|
81
|
+
-moz-box-sizing:border-box;
|
|
82
|
+
-ms-box-sizing:border-box;
|
|
83
|
+
-webkit-box-sizing:border-box;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/*
|
|
2
|
+
application.less contains all of the layout elements for the logged-in application state. This is styling
|
|
3
|
+
for the editor UI ONLY. It relies heavily on global.less, which provides all form element styling and much
|
|
4
|
+
of the generic UI found in the app - including during inline editing and the like.
|
|
5
|
+
*/
|
|
6
|
+
@import url('_buttons');
|
|
7
|
+
|
|
8
|
+
/* Layout Elements */
|
|
9
|
+
|
|
10
|
+
body {
|
|
11
|
+
overflow:hidden;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
#header {
|
|
15
|
+
background-color:#eee;
|
|
16
|
+
background-image:-moz-linear-gradient(top, #eee, #ddd);
|
|
17
|
+
background-image:-webkit-gradient(linear, left top, left bottom, from(#eee), to(#ddd));
|
|
18
|
+
border-bottom:1px solid #eee;
|
|
19
|
+
border-top:1px solid #fff;
|
|
20
|
+
height:32px;
|
|
21
|
+
left:0;
|
|
22
|
+
padding:0 10px;
|
|
23
|
+
position:absolute;
|
|
24
|
+
width:100%;
|
|
25
|
+
z-index:2;
|
|
26
|
+
box-sizing:border-box;
|
|
27
|
+
-moz-box-sizing:border-box;
|
|
28
|
+
-ms-box-sizing:border-box;
|
|
29
|
+
-webkit-box-sizing:border-box;
|
|
30
|
+
-moz-box-shadow:#111 0 2px 2px;
|
|
31
|
+
-webkit-box-shadow:#999 0 1px 2px;
|
|
32
|
+
|
|
33
|
+
.float-right {
|
|
34
|
+
line-height:30px;
|
|
35
|
+
/* margin-top:11px;*/
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.float-right a {
|
|
39
|
+
color:#000;
|
|
40
|
+
display:inline-block;
|
|
41
|
+
padding:0 7px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.float-right a:hover {
|
|
45
|
+
background-color:rgba(255, 255, 255, 0.3);
|
|
46
|
+
text-decoration:underline;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#logo {
|
|
51
|
+
display:inline-block;
|
|
52
|
+
padding-top:0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#content {
|
|
56
|
+
height:100%;
|
|
57
|
+
overflow:hidden;
|
|
58
|
+
padding:31px 0 0 0;
|
|
59
|
+
position:absolute;
|
|
60
|
+
width:100%;
|
|
61
|
+
box-sizing:border-box;
|
|
62
|
+
-moz-box-sizing:border-box;
|
|
63
|
+
-ms-box-sizing:border-box;
|
|
64
|
+
-webkit-box-sizing:border-box;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
#left {
|
|
68
|
+
left:20px;
|
|
69
|
+
position:absolute;
|
|
70
|
+
top:51px;
|
|
71
|
+
width:150px;
|
|
72
|
+
|
|
73
|
+
.button {
|
|
74
|
+
display:block;
|
|
75
|
+
margin-bottom:10px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
ul {
|
|
79
|
+
background-color:#ececec;
|
|
80
|
+
background-image:-moz-linear-gradient(top, #f4f4f4, #ececec);
|
|
81
|
+
background-image:-webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec));
|
|
82
|
+
list-style-type:none;
|
|
83
|
+
margin:0;
|
|
84
|
+
padding:0;
|
|
85
|
+
-moz-border-radius:2px;
|
|
86
|
+
-webkit-border-radius:2px;
|
|
87
|
+
|
|
88
|
+
li.first {
|
|
89
|
+
> a {
|
|
90
|
+
border-top-color:#d4d4d4;
|
|
91
|
+
-webkit-border-top-left-radius:2px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
a.expand {
|
|
95
|
+
-webkit-border-top-left-radius:0;
|
|
96
|
+
-webkit-border-top-right-radius:2px;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
li {
|
|
101
|
+
margin:0;
|
|
102
|
+
padding:0;
|
|
103
|
+
|
|
104
|
+
a {
|
|
105
|
+
#grandstand > .button-default;
|
|
106
|
+
border-top-color:#f4f4f4;
|
|
107
|
+
display:block;
|
|
108
|
+
padding:5px;
|
|
109
|
+
-moz-border-radius:0;
|
|
110
|
+
-webkit-border-radius:0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
a:hover {
|
|
114
|
+
#grandstand > .button-hover;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
a:active {
|
|
118
|
+
#grandstand > .button-active;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
a.expand {
|
|
122
|
+
float:right;
|
|
123
|
+
margin-right:0;
|
|
124
|
+
height:26px;
|
|
125
|
+
line-height:26px;
|
|
126
|
+
padding:0;
|
|
127
|
+
width:15px;
|
|
128
|
+
|
|
129
|
+
span {
|
|
130
|
+
background:url(../images/icons/expand.png) center bottom no-repeat;
|
|
131
|
+
display:block;
|
|
132
|
+
height:16px;
|
|
133
|
+
margin-top:4px;
|
|
134
|
+
width:16px;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
ul {
|
|
139
|
+
display:none;
|
|
140
|
+
|
|
141
|
+
li a {
|
|
142
|
+
font-size:10px;
|
|
143
|
+
padding-left:20px;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
li.expandable {
|
|
149
|
+
> a {
|
|
150
|
+
border-right-width:0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
> a.expand {
|
|
154
|
+
border-right-width:1px;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
li.last a {
|
|
159
|
+
-webkit-border-bottom-left-radius:2px;
|
|
160
|
+
-webkit-border-bottom-right-radius:2px;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
li.expanded {
|
|
164
|
+
a.expand span {
|
|
165
|
+
background-image:url(../images/icons/collapse.png);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
ul {
|
|
169
|
+
display:block;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
#main {
|
|
176
|
+
height:100%;
|
|
177
|
+
padding:20px 20px 20px 190px;
|
|
178
|
+
overflow-x:hidden;
|
|
179
|
+
overflow-y:auto;
|
|
180
|
+
box-sizing:border-box;
|
|
181
|
+
-moz-box-sizing:border-box;
|
|
182
|
+
-ms-box-sizing:border-box;
|
|
183
|
+
-webkit-box-sizing:border-box;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
#cover {
|
|
187
|
+
background-color:#000;
|
|
188
|
+
height:100%;
|
|
189
|
+
left:0;
|
|
190
|
+
opacity:0.6;
|
|
191
|
+
position:fixed;
|
|
192
|
+
top:0;
|
|
193
|
+
width:100%;
|
|
194
|
+
z-index:2;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
#pulldown {
|
|
198
|
+
left:50%;
|
|
199
|
+
margin-left:-200px;
|
|
200
|
+
position:fixed;
|
|
201
|
+
top:0;
|
|
202
|
+
width:400px;
|
|
203
|
+
z-index:3;
|
|
204
|
+
|
|
205
|
+
h2 {
|
|
206
|
+
background:#fafafa;
|
|
207
|
+
border-bottom:1px solid #ddd;
|
|
208
|
+
color:#555;
|
|
209
|
+
font-size:10pt;
|
|
210
|
+
margin-bottom:0;
|
|
211
|
+
padding:5px;
|
|
212
|
+
text-shadow:#fff 0 1px 0;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
form {
|
|
216
|
+
border-top:1px solid #fff;
|
|
217
|
+
margin:0;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
form .field {
|
|
221
|
+
background:#f0f0f0;
|
|
222
|
+
padding:10px;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.toolbar {
|
|
226
|
+
#grandstand > .styled-toolbar;
|
|
227
|
+
border-top:1px solid #888;
|
|
228
|
+
text-align:right;
|
|
229
|
+
-moz-border-radius-bottomleft:5px;
|
|
230
|
+
-moz-border-radius-bottomright:5px;
|
|
231
|
+
-webkit-border-bottom-left-radius:5px;
|
|
232
|
+
-webkit-border-bottom-right-radius:5px;
|
|
233
|
+
|
|
234
|
+
.button {
|
|
235
|
+
border-color:#888;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|