Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
14a94bac
Commit
14a94bac
authored
Oct 24, 2012
by
chrisndodge
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #954 from MITx/feature/cale/fixing-tests
Feature/cale/fixing tests
parents
a6c8d90a
28023021
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
87 additions
and
3125 deletions
+87
-3125
.gitmodules
+0
-3
askbot
+0
-1
cms/djangoapps/contentstore/views.py
+8
-3
cms/djangoapps/github_sync/__init__.py
+0
-125
cms/djangoapps/github_sync/exceptions.py
+0
-6
cms/djangoapps/github_sync/management/__init__.py
+0
-0
cms/djangoapps/github_sync/management/commands/__init__.py
+0
-0
cms/djangoapps/github_sync/management/commands/sync_with_github.py
+0
-14
cms/djangoapps/github_sync/tests/__init__.py
+0
-108
cms/djangoapps/github_sync/tests/test_views.py
+0
-43
cms/djangoapps/github_sync/views.py
+0
-51
cms/envs/common.py
+0
-1
cms/static/sass/_jquery-ui-calendar.scss
+1
-1
cms/urls.py
+0
-1
lms/djangoapps/courseware/access.py
+75
-41
lms/djangoapps/courseware/module_render.py
+3
-3
lms/envs/test.py
+0
-1
lms/static/sass/course.scss
+0
-13
lms/static/sass/course/discussion/_askbot-original.scss
+0
-2710
No files found.
.gitmodules
View file @
14a94bac
[submodule "askbot"]
path = askbot
url = git@github.com:MITx/askbot-devel.git
askbot
@
e56ae380
Subproject commit e56ae380846f7c6cdaeacfc58880fab103540491
cms/djangoapps/contentstore/views.py
View file @
14a94bac
...
@@ -36,7 +36,6 @@ from xmodule.modulestore.exceptions import ItemNotFoundError
...
@@ -36,7 +36,6 @@ from xmodule.modulestore.exceptions import ItemNotFoundError
from
xmodule.x_module
import
ModuleSystem
from
xmodule.x_module
import
ModuleSystem
from
xmodule.error_module
import
ErrorDescriptor
from
xmodule.error_module
import
ErrorDescriptor
from
xmodule.errortracker
import
exc_info_to_str
from
xmodule.errortracker
import
exc_info_to_str
from
github_sync
import
export_to_github
from
static_replace
import
replace_urls
from
static_replace
import
replace_urls
from
external_auth.views
import
ssl_login_shortcut
from
external_auth.views
import
ssl_login_shortcut
...
@@ -110,8 +109,14 @@ def index(request):
...
@@ -110,8 +109,14 @@ def index(request):
"""
"""
courses
=
modulestore
()
.
get_items
([
'i4x'
,
None
,
None
,
'course'
,
None
])
courses
=
modulestore
()
.
get_items
([
'i4x'
,
None
,
None
,
'course'
,
None
])
# filter out courses that we don't have access to
# filter out courses that we don't have access too
courses
=
filter
(
lambda
course
:
has_access
(
request
.
user
,
course
.
location
)
and
course
.
location
.
course
!=
'templates'
and
course
.
location
.
org
!=
''
and
course
.
location
.
course
!=
''
and
course
.
location
.
name
!=
''
,
courses
)
def
course_filter
(
course
):
return
(
has_access
(
request
.
user
,
course
.
location
)
and
course
.
location
.
course
!=
'templates'
and
course
.
location
.
org
!=
''
and
course
.
location
.
course
!=
''
and
course
.
location
.
name
!=
''
)
courses
=
filter
(
course_filter
,
courses
)
return
render_to_response
(
'index.html'
,
{
return
render_to_response
(
'index.html'
,
{
'new_course_template'
:
Location
(
'i4x'
,
'edx'
,
'templates'
,
'course'
,
'Empty'
),
'new_course_template'
:
Location
(
'i4x'
,
'edx'
,
'templates'
,
'course'
,
'Empty'
),
...
...
cms/djangoapps/github_sync/__init__.py
deleted
100644 → 0
View file @
a6c8d90a
import
logging
import
os
from
django.conf
import
settings
from
fs.osfs
import
OSFS
from
git
import
Repo
,
PushInfo
from
xmodule.modulestore.xml_importer
import
import_from_xml
from
xmodule.modulestore.django
import
modulestore
from
collections
import
namedtuple
from
.exceptions
import
GithubSyncError
,
InvalidRepo
log
=
logging
.
getLogger
(
__name__
)
RepoSettings
=
namedtuple
(
'RepoSettings'
,
'path branch origin'
)
def
sync_all_with_github
():
"""
Sync all defined repositories from github
"""
for
repo_name
in
settings
.
REPOS
:
sync_with_github
(
load_repo_settings
(
repo_name
))
def
sync_with_github
(
repo_settings
):
"""
Sync specified repository from github
repo_settings: A RepoSettings defining which repo to sync
"""
revision
,
course
=
import_from_github
(
repo_settings
)
export_to_github
(
course
,
"Changes from cms import of revision
%
s"
%
revision
,
"CMS <cms@edx.org>"
)
def
setup_repo
(
repo_settings
):
"""
Reset the local github repo specified by repo_settings
repo_settings (RepoSettings): The settings for the repo to reset
"""
course_dir
=
repo_settings
.
path
repo_path
=
settings
.
GITHUB_REPO_ROOT
/
course_dir
if
not
os
.
path
.
isdir
(
repo_path
):
Repo
.
clone_from
(
repo_settings
.
origin
,
repo_path
)
git_repo
=
Repo
(
repo_path
)
origin
=
git_repo
.
remotes
.
origin
origin
.
fetch
()
# Do a hard reset to the remote branch so that we have a clean import
git_repo
.
git
.
checkout
(
repo_settings
.
branch
)
return
git_repo
def
load_repo_settings
(
course_dir
):
"""
Returns the repo_settings for the course stored in course_dir
"""
if
course_dir
not
in
settings
.
REPOS
:
raise
InvalidRepo
(
course_dir
)
return
RepoSettings
(
course_dir
,
**
settings
.
REPOS
[
course_dir
])
def
import_from_github
(
repo_settings
):
"""
Imports data into the modulestore based on the XML stored on github
"""
course_dir
=
repo_settings
.
path
git_repo
=
setup_repo
(
repo_settings
)
git_repo
.
head
.
reset
(
'origin/
%
s'
%
repo_settings
.
branch
,
index
=
True
,
working_tree
=
True
)
module_store
=
import_from_xml
(
modulestore
(),
settings
.
GITHUB_REPO_ROOT
,
course_dirs
=
[
course_dir
])
return
git_repo
.
head
.
commit
.
hexsha
,
module_store
.
courses
[
course_dir
]
def
export_to_github
(
course
,
commit_message
,
author_str
=
None
):
'''
Commit any changes to the specified course with given commit message,
and push to github (if MITX_FEATURES['GITHUB_PUSH'] is True).
If author_str is specified, uses it in the commit.
'''
course_dir
=
course
.
metadata
.
get
(
'data_dir'
,
course
.
location
.
course
)
try
:
repo_settings
=
load_repo_settings
(
course_dir
)
except
InvalidRepo
:
log
.
warning
(
"Invalid repo {0}, not exporting data to xml"
.
format
(
course_dir
))
return
git_repo
=
setup_repo
(
repo_settings
)
fs
=
OSFS
(
git_repo
.
working_dir
)
xml
=
course
.
export_to_xml
(
fs
)
with
fs
.
open
(
'course.xml'
,
'w'
)
as
course_xml
:
course_xml
.
write
(
xml
)
if
git_repo
.
is_dirty
():
git_repo
.
git
.
add
(
A
=
True
)
if
author_str
is
not
None
:
git_repo
.
git
.
commit
(
m
=
commit_message
,
author
=
author_str
)
else
:
git_repo
.
git
.
commit
(
m
=
commit_message
)
origin
=
git_repo
.
remotes
.
origin
if
settings
.
MITX_FEATURES
[
'GITHUB_PUSH'
]:
push_infos
=
origin
.
push
()
if
len
(
push_infos
)
>
1
:
log
.
error
(
'Unexpectedly pushed multiple heads: {infos}'
.
format
(
infos
=
"
\n
"
.
join
(
str
(
info
.
summary
)
for
info
in
push_infos
)
))
if
push_infos
[
0
]
.
flags
&
PushInfo
.
ERROR
:
log
.
error
(
'Failed push: flags={p.flags}, local_ref={p.local_ref}, '
'remote_ref_string={p.remote_ref_string}, '
'remote_ref={p.remote_ref}, old_commit={p.old_commit}, '
'summary={p.summary})'
.
format
(
p
=
push_infos
[
0
]))
raise
GithubSyncError
(
'Failed to push: {info}'
.
format
(
info
=
str
(
push_infos
[
0
]
.
summary
)
))
cms/djangoapps/github_sync/exceptions.py
deleted
100644 → 0
View file @
a6c8d90a
class
GithubSyncError
(
Exception
):
pass
class
InvalidRepo
(
Exception
):
pass
cms/djangoapps/github_sync/management/__init__.py
deleted
100644 → 0
View file @
a6c8d90a
cms/djangoapps/github_sync/management/commands/__init__.py
deleted
100644 → 0
View file @
a6c8d90a
cms/djangoapps/github_sync/management/commands/sync_with_github.py
deleted
100644 → 0
View file @
a6c8d90a
###
### Script for syncing CMS with defined github repos
###
from
django.core.management.base
import
NoArgsCommand
from
github_sync
import
sync_all_with_github
class
Command
(
NoArgsCommand
):
help
=
\
'''Sync the CMS with the defined github repos'''
def
handle_noargs
(
self
,
**
options
):
sync_all_with_github
()
cms/djangoapps/github_sync/tests/__init__.py
deleted
100644 → 0
View file @
a6c8d90a
from
django.test
import
TestCase
from
path
import
path
import
shutil
from
github_sync
import
(
import_from_github
,
export_to_github
,
load_repo_settings
,
sync_all_with_github
,
sync_with_github
)
from
git
import
Repo
from
django.conf
import
settings
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore
import
Location
from
override_settings
import
override_settings
from
github_sync.exceptions
import
GithubSyncError
from
mock
import
patch
,
Mock
REPO_DIR
=
settings
.
GITHUB_REPO_ROOT
/
'local_repo'
WORKING_DIR
=
path
(
settings
.
TEST_ROOT
)
REMOTE_DIR
=
WORKING_DIR
/
'remote_repo'
@override_settings
(
REPOS
=
{
'local_repo'
:
{
'origin'
:
REMOTE_DIR
,
'branch'
:
'master'
,
}
})
class
GithubSyncTestCase
(
TestCase
):
def
cleanup
(
self
):
shutil
.
rmtree
(
REPO_DIR
,
ignore_errors
=
True
)
shutil
.
rmtree
(
REMOTE_DIR
,
ignore_errors
=
True
)
modulestore
()
.
collection
.
drop
()
def
setUp
(
self
):
# make sure there's no stale data lying around
self
.
cleanup
()
shutil
.
copytree
(
'common/test/data/toy'
,
REMOTE_DIR
)
remote
=
Repo
.
init
(
REMOTE_DIR
)
remote
.
git
.
add
(
A
=
True
)
remote
.
git
.
commit
(
m
=
'Initial commit'
)
remote
.
git
.
config
(
"receive.denyCurrentBranch"
,
"ignore"
)
self
.
import_revision
,
self
.
import_course
=
import_from_github
(
load_repo_settings
(
'local_repo'
))
def
tearDown
(
self
):
self
.
cleanup
()
def
test_initialize_repo
(
self
):
"""
Test that importing from github will create a repo if the repo doesn't already exist
"""
self
.
assertEquals
(
1
,
len
(
Repo
(
REPO_DIR
)
.
head
.
reference
.
log
()))
def
test_import_contents
(
self
):
"""
Test that the import loads the correct course into the modulestore
"""
self
.
assertEquals
(
'Toy Course'
,
self
.
import_course
.
metadata
[
'display_name'
])
self
.
assertIn
(
Location
(
'i4x://edX/toy/chapter/Overview'
),
[
child
.
location
for
child
in
self
.
import_course
.
get_children
()])
self
.
assertEquals
(
2
,
len
(
self
.
import_course
.
get_children
()))
@patch
(
'github_sync.sync_with_github'
)
def
test_sync_all_with_github
(
self
,
sync_with_github
):
sync_all_with_github
()
sync_with_github
.
assert_called_with
(
load_repo_settings
(
'local_repo'
))
def
test_sync_with_github
(
self
):
with
patch
(
'github_sync.import_from_github'
,
Mock
(
return_value
=
(
Mock
(),
Mock
())))
as
import_from_github
:
with
patch
(
'github_sync.export_to_github'
)
as
export_to_github
:
settings
=
load_repo_settings
(
'local_repo'
)
sync_with_github
(
settings
)
import_from_github
.
assert_called_with
(
settings
)
export_to_github
.
assert_called
@override_settings
(
MITX_FEATURES
=
{
'GITHUB_PUSH'
:
False
})
def
test_export_no_pash
(
self
):
"""
Test that with the GITHUB_PUSH feature disabled, no content is pushed to the remote
"""
export_to_github
(
self
.
import_course
,
'Test no-push'
)
self
.
assertEquals
(
1
,
Repo
(
REMOTE_DIR
)
.
head
.
commit
.
count
())
@override_settings
(
MITX_FEATURES
=
{
'GITHUB_PUSH'
:
True
})
def
test_export_push
(
self
):
"""
Test that with GITHUB_PUSH enabled, content is pushed to the remote
"""
self
.
import_course
.
metadata
[
'display_name'
]
=
'Changed display name'
export_to_github
(
self
.
import_course
,
'Test push'
)
self
.
assertEquals
(
2
,
Repo
(
REMOTE_DIR
)
.
head
.
commit
.
count
())
@override_settings
(
MITX_FEATURES
=
{
'GITHUB_PUSH'
:
True
})
def
test_export_conflict
(
self
):
"""
Test that if there is a conflict when pushing to the remote repo, nothing is pushed and an exception is raised
"""
self
.
import_course
.
metadata
[
'display_name'
]
=
'Changed display name'
remote
=
Repo
(
REMOTE_DIR
)
remote
.
git
.
commit
(
allow_empty
=
True
,
m
=
"Testing conflict commit"
)
self
.
assertRaises
(
GithubSyncError
,
export_to_github
,
self
.
import_course
,
'Test push'
)
self
.
assertEquals
(
2
,
remote
.
head
.
reference
.
commit
.
count
())
self
.
assertEquals
(
"Testing conflict commit
\n
"
,
remote
.
head
.
reference
.
commit
.
message
)
cms/djangoapps/github_sync/tests/test_views.py
deleted
100644 → 0
View file @
a6c8d90a
import
json
from
django.test.client
import
Client
from
django.test
import
TestCase
from
mock
import
patch
from
override_settings
import
override_settings
from
github_sync
import
load_repo_settings
@override_settings
(
REPOS
=
{
'repo'
:
{
'branch'
:
'branch'
,
'origin'
:
'origin'
}})
class
PostReceiveTestCase
(
TestCase
):
def
setUp
(
self
):
self
.
client
=
Client
()
@patch
(
'github_sync.views.import_from_github'
)
def
test_non_branch
(
self
,
import_from_github
):
self
.
client
.
post
(
'/github_service_hook'
,
{
'payload'
:
json
.
dumps
({
'ref'
:
'refs/tags/foo'
})
})
self
.
assertFalse
(
import_from_github
.
called
)
@patch
(
'github_sync.views.import_from_github'
)
def
test_non_watched_repo
(
self
,
import_from_github
):
self
.
client
.
post
(
'/github_service_hook'
,
{
'payload'
:
json
.
dumps
({
'ref'
:
'refs/heads/branch'
,
'repository'
:
{
'name'
:
'bad_repo'
}})
})
self
.
assertFalse
(
import_from_github
.
called
)
@patch
(
'github_sync.views.import_from_github'
)
def
test_non_tracked_branch
(
self
,
import_from_github
):
self
.
client
.
post
(
'/github_service_hook'
,
{
'payload'
:
json
.
dumps
({
'ref'
:
'refs/heads/non_branch'
,
'repository'
:
{
'name'
:
'repo'
}})
})
self
.
assertFalse
(
import_from_github
.
called
)
@patch
(
'github_sync.views.import_from_github'
)
def
test_tracked_branch
(
self
,
import_from_github
):
self
.
client
.
post
(
'/github_service_hook'
,
{
'payload'
:
json
.
dumps
({
'ref'
:
'refs/heads/branch'
,
'repository'
:
{
'name'
:
'repo'
}})
})
import_from_github
.
assert_called_with
(
load_repo_settings
(
'repo'
))
cms/djangoapps/github_sync/views.py
deleted
100644 → 0
View file @
a6c8d90a
import
logging
import
json
from
django.http
import
HttpResponse
from
django.conf
import
settings
from
django_future.csrf
import
csrf_exempt
from
.
import
import_from_github
,
load_repo_settings
log
=
logging
.
getLogger
()
@csrf_exempt
def
github_post_receive
(
request
):
"""
This view recieves post-receive requests from github whenever one of
the watched repositiories changes.
It is responsible for updating the relevant local git repo,
importing the new version of the course (if anything changed),
and then pushing back to github any changes that happened as part of the
import.
The github request format is described here: https://help.github.com/articles/post-receive-hooks
"""
payload
=
json
.
loads
(
request
.
POST
[
'payload'
])
ref
=
payload
[
'ref'
]
if
not
ref
.
startswith
(
'refs/heads/'
):
log
.
info
(
'Ignore changes to non-branch ref
%
s'
%
ref
)
return
HttpResponse
(
'Ignoring non-branch'
)
branch_name
=
ref
.
replace
(
'refs/heads/'
,
''
,
1
)
repo_name
=
payload
[
'repository'
][
'name'
]
if
repo_name
not
in
settings
.
REPOS
:
log
.
info
(
'No repository matching
%
s found'
%
repo_name
)
return
HttpResponse
(
'No Repo Found'
)
repo
=
load_repo_settings
(
repo_name
)
if
repo
.
branch
!=
branch_name
:
log
.
info
(
'Ignoring changes to non-tracked branch
%
s in repo
%
s'
%
(
branch_name
,
repo_name
))
return
HttpResponse
(
'Ignoring non-tracked branch'
)
import_from_github
(
repo
)
return
HttpResponse
(
'Push received'
)
cms/envs/common.py
View file @
14a94bac
...
@@ -284,7 +284,6 @@ INSTALLED_APPS = (
...
@@ -284,7 +284,6 @@ INSTALLED_APPS = (
# For CMS
# For CMS
'contentstore'
,
'contentstore'
,
'auth'
,
'auth'
,
'github_sync'
,
'student'
,
# misleading name due to sharing with lms
'student'
,
# misleading name due to sharing with lms
# For asset pipelining
# For asset pipelining
...
...
cms/static/sass/_jquery-ui-calendar.scss
View file @
14a94bac
...
@@ -22,7 +22,7 @@
...
@@ -22,7 +22,7 @@
.ui-icon-circle-triangle-e
,
.ui-icon-circle-triangle-e
,
.ui-icon-circle-triangle-w
{
.ui-icon-circle-triangle-w
{
background-image
:
url(
/static
/css/vendor/ui-lightness/images/ui-icons_ffffff_256x240.png)
;
background-image
:
url(
..
/css/vendor/ui-lightness/images/ui-icons_ffffff_256x240.png)
;
}
}
}
}
}
}
...
...
cms/urls.py
View file @
14a94bac
...
@@ -23,7 +23,6 @@ urlpatterns = ('',
...
@@ -23,7 +23,6 @@ urlpatterns = ('',
url
(
r'^(?P<org>[^/]+)/(?P<course>[^/]+)/import/(?P<name>[^/]+)$'
,
url
(
r'^(?P<org>[^/]+)/(?P<course>[^/]+)/import/(?P<name>[^/]+)$'
,
'contentstore.views.import_course'
,
name
=
'import_course'
),
'contentstore.views.import_course'
,
name
=
'import_course'
),
url
(
r'^github_service_hook$'
,
'github_sync.views.github_post_receive'
),
url
(
r'^preview/modx/(?P<preview_id>[^/]*)/(?P<location>.*?)/(?P<dispatch>[^/]*)$'
,
url
(
r'^preview/modx/(?P<preview_id>[^/]*)/(?P<location>.*?)/(?P<dispatch>[^/]*)$'
,
'contentstore.views.preview_dispatch'
,
name
=
'preview_dispatch'
),
'contentstore.views.preview_dispatch'
,
name
=
'preview_dispatch'
),
url
(
r'^(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<coursename>[^/]+)/upload_asset$'
,
url
(
r'^(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<coursename>[^/]+)/upload_asset$'
,
...
...
lms/djangoapps/courseware/access.py
View file @
14a94bac
...
@@ -11,19 +11,27 @@ from django.contrib.auth.models import Group
...
@@ -11,19 +11,27 @@ from django.contrib.auth.models import Group
from
xmodule.course_module
import
CourseDescriptor
from
xmodule.course_module
import
CourseDescriptor
from
xmodule.error_module
import
ErrorDescriptor
from
xmodule.error_module
import
ErrorDescriptor
from
xmodule.modulestore
import
Location
from
xmodule.modulestore
import
Location
from
xmodule.timeparse
import
parse_time
from
xmodule.x_module
import
XModule
,
XModuleDescriptor
from
xmodule.x_module
import
XModule
,
XModuleDescriptor
DEBUG_ACCESS
=
False
DEBUG_ACCESS
=
False
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
class
CourseContextRequired
(
Exception
):
"""
Raised when a course_context is required to determine permissions
"""
pass
def
debug
(
*
args
,
**
kwargs
):
def
debug
(
*
args
,
**
kwargs
):
# to avoid overly verbose output, this is off by default
# to avoid overly verbose output, this is off by default
if
DEBUG_ACCESS
:
if
DEBUG_ACCESS
:
log
.
debug
(
*
args
,
**
kwargs
)
log
.
debug
(
*
args
,
**
kwargs
)
def
has_access
(
user
,
obj
,
action
):
def
has_access
(
user
,
obj
,
action
,
course_context
=
None
):
"""
"""
Check whether a user has the access to do action on obj. Handles any magic
Check whether a user has the access to do action on obj. Handles any magic
switching based on various settings.
switching based on various settings.
...
@@ -42,6 +50,10 @@ def has_access(user, obj, action):
...
@@ -42,6 +50,10 @@ def has_access(user, obj, action):
actions depend on the obj type, but include e.g. 'enroll' for courses. See the
actions depend on the obj type, but include e.g. 'enroll' for courses. See the
type-specific functions below for the known actions for that type.
type-specific functions below for the known actions for that type.
course_context: A course_id specifying which course run this access is for.
Required when accessing anything other than a CourseDescriptor, 'global',
or a location with category 'course'
Returns a bool. It is up to the caller to actually deny access in a way
Returns a bool. It is up to the caller to actually deny access in a way
that makes sense in context.
that makes sense in context.
"""
"""
...
@@ -51,27 +63,28 @@ def has_access(user, obj, action):
...
@@ -51,27 +63,28 @@ def has_access(user, obj, action):
return
_has_access_course_desc
(
user
,
obj
,
action
)
return
_has_access_course_desc
(
user
,
obj
,
action
)
if
isinstance
(
obj
,
ErrorDescriptor
):
if
isinstance
(
obj
,
ErrorDescriptor
):
return
_has_access_error_desc
(
user
,
obj
,
action
)
return
_has_access_error_desc
(
user
,
obj
,
action
,
course_context
)
# NOTE: any descriptor access checkers need to go above this
# NOTE: any descriptor access checkers need to go above this
if
isinstance
(
obj
,
XModuleDescriptor
):
if
isinstance
(
obj
,
XModuleDescriptor
):
return
_has_access_descriptor
(
user
,
obj
,
action
)
return
_has_access_descriptor
(
user
,
obj
,
action
,
course_context
)
if
isinstance
(
obj
,
XModule
):
if
isinstance
(
obj
,
XModule
):
return
_has_access_xmodule
(
user
,
obj
,
action
)
return
_has_access_xmodule
(
user
,
obj
,
action
,
course_context
)
if
isinstance
(
obj
,
Location
):
if
isinstance
(
obj
,
Location
):
return
_has_access_location
(
user
,
obj
,
action
)
return
_has_access_location
(
user
,
obj
,
action
,
course_context
)
if
isinstance
(
obj
,
basestring
):
if
isinstance
(
obj
,
basestring
):
return
_has_access_string
(
user
,
obj
,
action
)
return
_has_access_string
(
user
,
obj
,
action
,
course_context
)
# Passing an unknown object here is a coding error, so rather than
# Passing an unknown object here is a coding error, so rather than
# returning a default, complain.
# returning a default, complain.
raise
TypeError
(
"Unknown object type in has_access(): '{0}'"
raise
TypeError
(
"Unknown object type in has_access(): '{0}'"
.
format
(
type
(
obj
)))
.
format
(
type
(
obj
)))
def
get_access_group_name
(
obj
,
action
):
def
get_access_group_name
(
obj
,
action
):
'''
'''
Returns group name for user group which has "action" access to the given object.
Returns group name for user group which has "action" access to the given object.
...
@@ -86,8 +99,8 @@ def get_access_group_name(obj,action):
...
@@ -86,8 +99,8 @@ def get_access_group_name(obj,action):
raise
TypeError
(
"Unknown object type in get_access_group_name(): '{0}'"
raise
TypeError
(
"Unknown object type in get_access_group_name(): '{0}'"
.
format
(
type
(
obj
)))
.
format
(
type
(
obj
)))
# ================ Implementation helpers ================================
# ================ Implementation helpers ================================
def
_has_access_course_desc
(
user
,
course
,
action
):
def
_has_access_course_desc
(
user
,
course
,
action
):
"""
"""
Check if user has access to a course descriptor.
Check if user has access to a course descriptor.
...
@@ -159,15 +172,17 @@ def _has_access_course_desc(user, course, action):
...
@@ -159,15 +172,17 @@ def _has_access_course_desc(user, course, action):
return
_dispatch
(
checkers
,
action
,
user
,
course
)
return
_dispatch
(
checkers
,
action
,
user
,
course
)
def
_get_access_group_name_course_desc
(
course
,
action
):
def
_get_access_group_name_course_desc
(
course
,
action
):
'''
'''
Return name of group which gives staff access to course. Only understands action = 'staff'
Return name of group which gives staff access to course. Only understands action = 'staff'
'''
'''
if
not
action
==
'staff'
:
if
not
action
==
'staff'
:
return
[]
return
[]
return
_course_staff_group_name
(
course
.
location
)
return
_course_staff_group_name
(
course
.
location
)
def
_has_access_error_desc
(
user
,
descriptor
,
action
):
def
_has_access_error_desc
(
user
,
descriptor
,
action
,
course_context
):
"""
"""
Only staff should see error descriptors.
Only staff should see error descriptors.
...
@@ -176,7 +191,7 @@ def _has_access_error_desc(user, descriptor, action):
...
@@ -176,7 +191,7 @@ def _has_access_error_desc(user, descriptor, action):
'staff' -- staff access to descriptor.
'staff' -- staff access to descriptor.
"""
"""
def
check_for_staff
():
def
check_for_staff
():
return
_has_staff_access_to_descriptor
(
user
,
descriptor
)
return
_has_staff_access_to_descriptor
(
user
,
descriptor
,
course_context
)
checkers
=
{
checkers
=
{
'load'
:
check_for_staff
,
'load'
:
check_for_staff
,
...
@@ -186,7 +201,7 @@ def _has_access_error_desc(user, descriptor, action):
...
@@ -186,7 +201,7 @@ def _has_access_error_desc(user, descriptor, action):
return
_dispatch
(
checkers
,
action
,
user
,
descriptor
)
return
_dispatch
(
checkers
,
action
,
user
,
descriptor
)
def
_has_access_descriptor
(
user
,
descriptor
,
action
):
def
_has_access_descriptor
(
user
,
descriptor
,
action
,
course_context
=
None
):
"""
"""
Check if user has access to this descriptor.
Check if user has access to this descriptor.
...
@@ -218,7 +233,7 @@ def _has_access_descriptor(user, descriptor, action):
...
@@ -218,7 +233,7 @@ def _has_access_descriptor(user, descriptor, action):
debug
(
"Allow: now > start date"
)
debug
(
"Allow: now > start date"
)
return
True
return
True
# otherwise, need staff access
# otherwise, need staff access
return
_has_staff_access_to_descriptor
(
user
,
descriptor
)
return
_has_staff_access_to_descriptor
(
user
,
descriptor
,
course_context
)
# No start date, so can always load.
# No start date, so can always load.
debug
(
"Allow: no start date"
)
debug
(
"Allow: no start date"
)
...
@@ -226,13 +241,13 @@ def _has_access_descriptor(user, descriptor, action):
...
@@ -226,13 +241,13 @@ def _has_access_descriptor(user, descriptor, action):
checkers
=
{
checkers
=
{
'load'
:
can_load
,
'load'
:
can_load
,
'staff'
:
lambda
:
_has_staff_access_to_descriptor
(
user
,
descriptor
)
'staff'
:
lambda
:
_has_staff_access_to_descriptor
(
user
,
descriptor
,
course_context
)
}
}
return
_dispatch
(
checkers
,
action
,
user
,
descriptor
)
return
_dispatch
(
checkers
,
action
,
user
,
descriptor
)
def
_has_access_xmodule
(
user
,
xmodule
,
action
):
def
_has_access_xmodule
(
user
,
xmodule
,
action
,
course_context
):
"""
"""
Check if user has access to this xmodule.
Check if user has access to this xmodule.
...
@@ -240,10 +255,10 @@ def _has_access_xmodule(user, xmodule, action):
...
@@ -240,10 +255,10 @@ def _has_access_xmodule(user, xmodule, action):
- same as the valid actions for xmodule.descriptor
- same as the valid actions for xmodule.descriptor
"""
"""
# Delegate to the descriptor
# Delegate to the descriptor
return
has_access
(
user
,
xmodule
.
descriptor
,
action
)
return
has_access
(
user
,
xmodule
.
descriptor
,
action
,
course_context
)
def
_has_access_location
(
user
,
location
,
action
):
def
_has_access_location
(
user
,
location
,
action
,
course_context
):
"""
"""
Check if user has access to this location.
Check if user has access to this location.
...
@@ -257,13 +272,13 @@ def _has_access_location(user, location, action):
...
@@ -257,13 +272,13 @@ def _has_access_location(user, location, action):
And in general, prefer checking access on loaded items, rather than locations.
And in general, prefer checking access on loaded items, rather than locations.
"""
"""
checkers
=
{
checkers
=
{
'staff'
:
lambda
:
_has_staff_access_to_location
(
user
,
location
)
'staff'
:
lambda
:
_has_staff_access_to_location
(
user
,
location
,
course_context
)
}
}
return
_dispatch
(
checkers
,
action
,
user
,
location
)
return
_dispatch
(
checkers
,
action
,
user
,
location
)
def
_has_access_string
(
user
,
perm
,
action
):
def
_has_access_string
(
user
,
perm
,
action
,
course_context
):
"""
"""
Check if user has certain special access, specified as string. Valid strings:
Check if user has certain special access, specified as string. Valid strings:
...
@@ -309,13 +324,16 @@ def _dispatch(table, action, user, obj):
...
@@ -309,13 +324,16 @@ def _dispatch(table, action, user, obj):
def
_does_course_group_name_exist
(
name
):
def
_does_course_group_name_exist
(
name
):
return
len
(
Group
.
objects
.
filter
(
name
=
name
))
>
0
return
len
(
Group
.
objects
.
filter
(
name
=
name
))
>
0
def
_course_staff_group_name
(
location
):
def
_course_staff_group_name
(
location
,
course_context
=
None
):
"""
"""
Get the name of the staff group for a location
. Right now, that's staff_COURSE
.
Get the name of the staff group for a location
in the context of a course run
.
location: something that can passed to Location.
location: something that can passed to Location
course_context: A course_id that specifies the course run in which the location occurs.
Required if location doesn't have category 'course'
cdodge: We're changing the name convention of the group to better epxress different runs of courses by
cdodge: We're changing the name convention of the group to better epxress different runs of courses by
using course_id rather than just the course number. So first check to see if the group name exists
using course_id rather than just the course number. So first check to see if the group name exists
...
@@ -325,15 +343,24 @@ def _course_staff_group_name(location):
...
@@ -325,15 +343,24 @@ def _course_staff_group_name(location):
if
_does_course_group_name_exist
(
legacy_name
):
if
_does_course_group_name_exist
(
legacy_name
):
return
legacy_name
return
legacy_name
return
'staff_
%
s'
%
loc
.
course_id
if
loc
.
category
==
'course'
:
course_id
=
loc
.
course_id
else
:
if
course_context
is
None
:
raise
CourseContextRequired
()
course_id
=
course_context
return
'staff_
%
s'
%
course_id
def
_course_instructor_group_name
(
location
):
def
_course_instructor_group_name
(
location
,
course_context
=
None
):
"""
"""
Get the name of the instructor group for a location
. Right now, that's instructor_COURSE
.
Get the name of the instructor group for a location
, in the context of a course run
.
A course instructor has all staff privileges, but also can manage list of course staff (add, remove, list).
A course instructor has all staff privileges, but also can manage list of course staff (add, remove, list).
location: something that can passed to Location.
location: something that can passed to Location.
course_context: A course_id that specifies the course run in which the location occurs.
Required if location doesn't have category 'course'
cdodge: We're changing the name convention of the group to better epxress different runs of courses by
cdodge: We're changing the name convention of the group to better epxress different runs of courses by
using course_id rather than just the course number. So first check to see if the group name exists
using course_id rather than just the course number. So first check to see if the group name exists
...
@@ -343,7 +370,14 @@ def _course_instructor_group_name(location):
...
@@ -343,7 +370,14 @@ def _course_instructor_group_name(location):
if
_does_course_group_name_exist
(
legacy_name
):
if
_does_course_group_name_exist
(
legacy_name
):
return
legacy_name
return
legacy_name
return
'instructor_
%
s'
%
loc
.
course_id
if
loc
.
category
==
'course'
:
course_id
=
loc
.
course_id
else
:
if
course_context
is
None
:
raise
CourseContextRequired
()
course_id
=
course_context
return
'instructor_
%
s'
%
course_id
def
_has_global_staff_access
(
user
):
def
_has_global_staff_access
(
user
):
...
@@ -355,15 +389,15 @@ def _has_global_staff_access(user):
...
@@ -355,15 +389,15 @@ def _has_global_staff_access(user):
return
False
return
False
def
_has_instructor_access_to_location
(
user
,
location
):
def
_has_instructor_access_to_location
(
user
,
location
,
course_context
=
None
):
return
_has_access_to_location
(
user
,
location
,
'instructor'
)
return
_has_access_to_location
(
user
,
location
,
'instructor'
,
course_context
)
def
_has_staff_access_to_location
(
user
,
location
):
def
_has_staff_access_to_location
(
user
,
location
,
course_context
=
None
):
return
_has_access_to_location
(
user
,
location
,
'staff'
)
return
_has_access_to_location
(
user
,
location
,
'staff'
,
course_context
)
def
_has_access_to_location
(
user
,
location
,
access_level
):
def
_has_access_to_location
(
user
,
location
,
access_level
,
course_context
):
'''
'''
Returns True if the given user has access_level (= staff or
Returns True if the given user has access_level (= staff or
instructor) access to a location. For now this is equivalent to
instructor) access to a location. For now this is equivalent to
...
@@ -389,14 +423,14 @@ def _has_access_to_location(user, location, access_level):
...
@@ -389,14 +423,14 @@ def _has_access_to_location(user, location, access_level):
user_groups
=
[
g
.
name
for
g
in
user
.
groups
.
all
()]
user_groups
=
[
g
.
name
for
g
in
user
.
groups
.
all
()]
if
access_level
==
'staff'
:
if
access_level
==
'staff'
:
staff_group
=
_course_staff_group_name
(
location
)
staff_group
=
_course_staff_group_name
(
location
,
course_context
)
if
staff_group
in
user_groups
:
if
staff_group
in
user_groups
:
debug
(
"Allow: user in group
%
s"
,
staff_group
)
debug
(
"Allow: user in group
%
s"
,
staff_group
)
return
True
return
True
debug
(
"Deny: user not in group
%
s"
,
staff_group
)
debug
(
"Deny: user not in group
%
s"
,
staff_group
)
if
access_level
==
'instructor'
or
access_level
==
'staff'
:
# instructors get staff privileges
if
access_level
==
'instructor'
or
access_level
==
'staff'
:
# instructors get staff privileges
instructor_group
=
_course_instructor_group_name
(
location
)
instructor_group
=
_course_instructor_group_name
(
location
,
course_context
)
if
instructor_group
in
user_groups
:
if
instructor_group
in
user_groups
:
debug
(
"Allow: user in group
%
s"
,
instructor_group
)
debug
(
"Allow: user in group
%
s"
,
instructor_group
)
return
True
return
True
...
@@ -411,22 +445,22 @@ def _has_access_to_location(user, location, access_level):
...
@@ -411,22 +445,22 @@ def _has_access_to_location(user, location, access_level):
def
_has_staff_access_to_course_id
(
user
,
course_id
):
def
_has_staff_access_to_course_id
(
user
,
course_id
):
"""Helper method that takes a course_id instead of a course name"""
"""Helper method that takes a course_id instead of a course name"""
loc
=
CourseDescriptor
.
id_to_location
(
course_id
)
loc
=
CourseDescriptor
.
id_to_location
(
course_id
)
return
_has_staff_access_to_location
(
user
,
loc
)
return
_has_staff_access_to_location
(
user
,
loc
,
course_id
)
def
_has_instructor_access_to_descriptor
(
user
,
descriptor
):
def
_has_instructor_access_to_descriptor
(
user
,
descriptor
,
course_context
=
None
):
"""Helper method that checks whether the user has staff access to
"""Helper method that checks whether the user has staff access to
the course of the location.
the course of the location.
descriptor: something that has a location attribute
descriptor: something that has a location attribute
"""
"""
return
_has_instructor_access_to_location
(
user
,
descriptor
.
location
)
return
_has_instructor_access_to_location
(
user
,
descriptor
.
location
,
course_context
)
def
_has_staff_access_to_descriptor
(
user
,
descriptor
):
def
_has_staff_access_to_descriptor
(
user
,
descriptor
,
course_context
=
None
):
"""Helper method that checks whether the user has staff access to
"""Helper method that checks whether the user has staff access to
the course of the location.
the course of the location.
descriptor: something that has a location attribute
descriptor: something that has a location attribute
"""
"""
return
_has_staff_access_to_location
(
user
,
descriptor
.
location
)
return
_has_staff_access_to_location
(
user
,
descriptor
.
location
,
course_context
)
lms/djangoapps/courseware/module_render.py
View file @
14a94bac
...
@@ -147,7 +147,7 @@ def _get_module(user, request, location, student_module_cache, course_id, positi
...
@@ -147,7 +147,7 @@ def _get_module(user, request, location, student_module_cache, course_id, positi
descriptor
=
modulestore
()
.
get_instance
(
course_id
,
location
)
descriptor
=
modulestore
()
.
get_instance
(
course_id
,
location
)
# Short circuit--if the user shouldn't have access, bail without doing any work
# Short circuit--if the user shouldn't have access, bail without doing any work
if
not
has_access
(
user
,
descriptor
,
'load'
):
if
not
has_access
(
user
,
descriptor
,
'load'
,
course_id
):
return
None
return
None
# Anonymized student identifier
# Anonymized student identifier
...
@@ -244,7 +244,7 @@ def _get_module(user, request, location, student_module_cache, course_id, positi
...
@@ -244,7 +244,7 @@ def _get_module(user, request, location, student_module_cache, course_id, positi
# make an ErrorDescriptor -- assuming that the descriptor's system is ok
# make an ErrorDescriptor -- assuming that the descriptor's system is ok
import_system
=
descriptor
.
system
import_system
=
descriptor
.
system
if
has_access
(
user
,
location
,
'staff'
):
if
has_access
(
user
,
location
,
'staff'
,
course_id
):
err_descriptor
=
ErrorDescriptor
.
from_xml
(
str
(
descriptor
),
import_system
,
err_descriptor
=
ErrorDescriptor
.
from_xml
(
str
(
descriptor
),
import_system
,
error_msg
=
exc_info_to_str
(
sys
.
exc_info
()))
error_msg
=
exc_info_to_str
(
sys
.
exc_info
()))
else
:
else
:
...
@@ -263,7 +263,7 @@ def _get_module(user, request, location, student_module_cache, course_id, positi
...
@@ -263,7 +263,7 @@ def _get_module(user, request, location, student_module_cache, course_id, positi
module
.
get_html
=
replace_course_urls
(
module
.
get_html
,
course_id
)
module
.
get_html
=
replace_course_urls
(
module
.
get_html
,
course_id
)
if
settings
.
MITX_FEATURES
.
get
(
'DISPLAY_HISTOGRAMS_TO_STAFF'
):
if
settings
.
MITX_FEATURES
.
get
(
'DISPLAY_HISTOGRAMS_TO_STAFF'
):
if
has_access
(
user
,
module
,
'staff'
):
if
has_access
(
user
,
module
,
'staff'
,
course_id
):
module
.
get_html
=
add_histogram
(
module
.
get_html
,
module
,
user
)
module
.
get_html
=
add_histogram
(
module
.
get_html
,
module
,
user
)
return
module
return
module
...
...
lms/envs/test.py
View file @
14a94bac
...
@@ -77,7 +77,6 @@ XQUEUE_WAITTIME_BETWEEN_REQUESTS = 5 # seconds
...
@@ -77,7 +77,6 @@ XQUEUE_WAITTIME_BETWEEN_REQUESTS = 5 # seconds
STATICFILES_DIRS
=
[
STATICFILES_DIRS
=
[
COMMON_ROOT
/
"static"
,
COMMON_ROOT
/
"static"
,
PROJECT_ROOT
/
"static"
,
PROJECT_ROOT
/
"static"
,
ASKBOT_ROOT
/
"askbot"
/
"skins"
,
]
]
STATICFILES_DIRS
+=
[
STATICFILES_DIRS
+=
[
(
course_dir
,
COMMON_TEST_DATA_ROOT
/
course_dir
)
(
course_dir
,
COMMON_TEST_DATA_ROOT
/
course_dir
)
...
...
lms/static/sass/course.scss
View file @
14a94bac
...
@@ -47,16 +47,3 @@
...
@@ -47,16 +47,3 @@
// instructor
// instructor
@import
"course/instructor/instructor"
;
@import
"course/instructor/instructor"
;
// Askbot / Discussion styles
@import
"course/discussion/askbot-original"
;
@import
"course/discussion/discussion"
;
@import
"course/discussion/sidebar"
;
@import
"course/discussion/questions"
;
@import
"course/discussion/tags"
;
@import
"course/discussion/question-view"
;
@import
"course/discussion/answers"
;
@import
"course/discussion/forms"
;
@import
"course/discussion/form-wmd-toolbar"
;
@import
"course/discussion/modals"
;
@import
"course/discussion/profile"
;
@import
"course/discussion/badges"
;
lms/static/sass/course/discussion/_askbot-original.scss
deleted
100644 → 0
View file @
a6c8d90a
// original Askbot styles
// body {
// background: #fff;
// font-size: 14px;
// line-height: 150%;
// margin: 0;
// padding: 0;
// color: #000;
// font-family: arial; }
// div {
// margin: 0 auto;
// padding: 0; }
// h1, h2, h3, h4, h5, h6, ul, li, dl, dt, dd, form, img, p {
// margin: 0;
// padding: 0;
// border: none; }
// label {
// vertical-align: middle; }
// hr {
// border: none;
// border-top: 1px dashed #ccccce; }
// input, select {
// vertical-align: middle;
// font-family: trebuchet ms,"segoe ui",helvetica,tahoma,verdana,mingliu,pmingliu,arial,sans-serif;
// margin-left: 0px; }
// textarea:focus, input:focus {
// outline: none; }
// iframe {
// border: none; }
// p {
// font-size: 14px;
// line-height: 140%;
// margin-bottom: 6px; }
// a {
// color: #1b79bd;
// text-decoration: none;
// cursor: pointer; }
// h2 {
// font-size: 21px;
// padding: 3px 0 3px 5px; }
// h3 {
// font-size: 19px;
// padding: 3px 0 3px 5px; }
// ul {
// list-style: disc;
// margin-left: 20px;
// padding-left: 0px;
// margin-bottom: 1em; }
// ol {
// list-style: decimal;
// margin-left: 30px;
// margin-bottom: 1em;
// padding-left: 0px; }
// td ul {
// vertical-align: middle; }
// li input {
// margin: 3px 3px 4px 3px; }
// pre {
// font-family: consolas, monaco, liberation mono, lucida console, monospace;
// font-size: 100%;
// margin-bottom: 10px;
// background-color: #f5f5f5;
// padding-left: 5px;
// padding-top: 5px;
// padding-bottom: 20px; }
// code {
// font-family: consolas, monaco, liberation mono, lucida console, monospace;
// font-size: 100%; }
// blockquote {
// margin-bottom: 10px;
// margin-right: 15px;
// padding: 10px 0px 1px 10px;
// background-color: #f5f5f5; }
// * html {
// .clearfix, .paginator {
// height: 1;
// overflow: visible; } }
// +html {
// .clearfix, .paginator {
// min-height: 1%; } }
// .clearfix:after, .paginator:after {
// clear: both;
// content: ".";
// display: block;
// height: 0;
// visibility: hidden; }
// .badges a {
// color: #763333;
// text-decoration: underline; }
// a:hover {
// text-decoration: underline; }
.badge-context-toggle.active
{
cursor
:
pointer
;
text-decoration
:
underline
;
}
// h1 {
// font-size: 24px;
// padding: 10px 0 5px 0px; }
body
.user-messages
{
margin-top
:
2
.4em
;
}
// .left {
// float: left; }
// .right {
// float: right; }
// .clean {
// clear: both; }
// .center {
// margin: 0 auto;
// padding: 0; }
.notify
{
position
:
fixed
;
top
:
0px
;
left
:
0px
;
width
:
100%
;
z-index
:
100
;
padding
:
0
;
text-align
:
center
;
background-color
:
#f5dd69
;
border-top
:
#fff
1px
solid
;
p
.notification
{
margin-top
:
6px
;
margin-bottom
:
6px
;
font-size
:
16px
;
color
:
#424242
;
}
}
#closenotify
{
position
:
absolute
;
right
:
5px
;
top
:
7px
;
color
:
#735005
;
text-decoration
:
none
;
line-height
:
18px
;
background
:
-6px
-5px
url(../default/media/images/sprites.png)
no-repeat
;
cursor
:
pointer
;
width
:
20px
;
height
:
20px
;
&
:hover
{
background
:
-26px
-5px
url(../default/media/images/sprites.png)
no-repeat
;
}
}
#header
{
margin-top
:
0px
;
background
:
#16160f
;
}
/*.content-wrapper {
width: 960px;
margin: auto;
position: relative; }*/
#logo
img
{
padding
:
5px
0px
5px
0px
;
height
:
75px
;
width
:
auto
;
float
:
left
;
}
#usertoolsnav
{
height
:
20px
;
padding-bottom
:
5px
;
a
{
height
:
35px
;
text-align
:
right
;
margin-left
:
20px
;
text-decoration
:
underline
;
color
:
#d0e296
;
font-size
:
16px
;
&
:first-child
{
margin-left
:
0
;
}
&
#ab-responses
{
margin-left
:
3px
;
}
}
.user-info
,
.user-micro-info
{
color
:
#b5b593
;
}
a
img
{
vertical-align
:
middle
;
margin-bottom
:
2px
;
}
.user-info
a
{
margin
:
0
;
text-decoration
:
none
;
}
}
#metanav
{
float
:
right
;
a
{
color
:
#e2e2ae
;
padding
:
0px
0px
0px
35px
;
height
:
25px
;
line-height
:
30px
;
margin
:
5px
0px
0px
10px
;
font-size
:
18px
;
font-weight
:
100
;
text-decoration
:
none
;
display
:
block
;
float
:
left
;
&
:hover
{
text-decoration
:
underline
;
}
&
.on
{
font-weight
:
bold
;
color
:
#fff
;
text-decoration
:
none
;
}
&
.special
{
font-size
:
18px
;
color
:
#b02b2c
;
font-weight
:
bold
;
text-decoration
:
none
;
&
:hover
{
text-decoration
:
underline
;
}
}
}
#navtags
{
background
:
-50px
-5px
url(../default/media/images/sprites.png)
no-repeat
;
}
#navusers
{
background
:
-125px
-5px
url(../default/media/images/sprites.png)
no-repeat
;
}
#navbadges
{
background
:
-210px
-5px
url(../default/media/images/sprites.png)
no-repeat
;
}
}
// #header {
// &.with-logo #usertoolsnav {
// position: absolute;
// bottom: 0;
// right: 0px; }
// &.without-logo {
// #usertoolsnav {
// float: left;
// margin-top: 7px; }
// #metanav {
// margin-bottom: 7px; } } }
// #secondaryheader {
// height: 55px;
// background: #e9e9e1;
// border-bottom: #d3d3c2 1px solid;
// border-top: #fcfcfc 1px solid;
// margin-bottom: 10px;
// font-family: 'yanone kaffeesatz',sans-serif;
// #homebutton {
// border-right: #afaf9e 1px solid;
// background: -6px -36px url(../default/media/images/sprites.png) no-repeat;
// height: 55px;
// width: 43px;
// display: block;
// float: left;
// &:hover {
// background: -51px -36px url(../default/media/images/sprites.png) no-repeat; } }
// #scopewrapper {
// width: 688px;
// float: left;
// a {
// display: block;
// float: left; }
// .scope-selector {
// font-size: 21px;
// color: #5a5a4b;
// height: 55px;
// line-height: 55px;
// margin-left: 24px; }
// .on {
// background: url(../default/media/images/scopearrow.png) no-repeat center bottom; }
// .ask-message {
// font-size: 24px; } } }
#searchbar
{
display
:
inline-block
;
background-color
:
#fff
;
width
:
412px
;
border
:
1px
solid
#c9c9b5
;
float
:
right
;
height
:
42px
;
margin
:
6px
0px
0px
15px
;
.searchinput
,
.searchinputcancelable
{
font-size
:
30px
;
height
:
40px
;
font-weight
:
300
;
background
:
#fff
;
border
:
0px
;
color
:
#484848
;
padding-left
:
10px
;
font-family
:
arial
;
vertical-align
:
middle
;
}
.searchinput
{
width
:
352px
;
}
.searchinputcancelable
{
width
:
317px
;
}
.logoutsearch
{
width
:
337px
;
}
.searchbtn
{
font-size
:
10px
;
color
:
#666
;
background-color
:
#eee
;
height
:
42px
;
border
:
#fff
1px
solid
;
line-height
:
22px
;
text-align
:
center
;
float
:
right
;
margin
:
0px
;
width
:
48px
;
background
:
-98px
-36px
url(../default/media/images/sprites.png)
no-repeat
;
cursor
:
pointer
;
&
:hover
{
background
:
-146px
-36px
url(../default/media/images/sprites.png)
no-repeat
;
}
}
.cancelsearchbtn
{
font-size
:
30px
;
color
:
#ce8888
;
background
:
#fff
;
height
:
42px
;
border
:
0px
;
border-left
:
#deded0
1px
solid
;
text-align
:
center
;
width
:
35px
;
cursor
:
pointer
;
&
:hover
{
color
:
#d84040
;
}
}
}
body
.anon
#searchbar
{
width
:
500px
;
.searchinput
{
width
:
440px
;
}
.searchinputcancelable
{
width
:
405px
;
}
}
#askbutton
{
background
:
url(../default/media/images/bigbutton.png)
repeat-x
bottom
;
line-height
:
44px
;
text-align
:
center
;
width
:
200px
;
height
:
42px
;
font-size
:
23px
;
color
:
#4a757f
;
margin-top
:
7px
;
float
:
right
;
text-transform
:
uppercase
;
border-radius
:
5px
;
-ms-border-radius
:
5px
;
-moz-border-radius
:
5px
;
-webkit-border-radius
:
5px
;
-khtml-border-radius
:
5px
;
-webkit-box-shadow
:
1px
1px
2px
#636363
;
-moz-box-shadow
:
1px
1px
2px
#636363
;
box-shadow
:
1px
1px
2px
#636363
;
&
:hover
{
text-decoration
:
none
;
background
:
url(../default/media/images/bigbutton.png)
repeat-x
top
;
text-shadow
:
0px
1px
0px
#c6d9dd
;
-moz-text-shadow
:
0px
1px
0px
#c6d9dd
;
-webkit-text-shadow
:
0px
1px
0px
#c6d9dd
;
}
}
/*#contentleft {
width: 730px;
float: left;
position: relative;
padding-bottom: 10px; }
#contentright {
width: 200px;
float: right;
padding: 0 0px 10px 0px; }*/
#contentfull
{
float
:
left
;
width
:
960px
;
}
.box
{
/*background: #fff;*/
/*padding: 4px 0px 10px 0px;*/
/*width: 200px;*/
p
{
margin-bottom
:
4px
;
&
.info-box-follow-up-links
{
text-align
:
right
;
margin
:
0
;
}
}
h2
{
// padding-left: 0;
// /*background: #eceeeb;*/
// height: 30px;
// line-height: 30px;
// /*text-align: right;*/
// /*font-size: 18px !important;*/
// // font-weight: normal;
// // color: #656565;
// /*padding-right: 10px;*/
// /*margin-bottom: 10px;*/
// /*font-family: 'yanone kaffeesatz',sans-serif;*/
}
// h3 {
// /*color: #4a757f;*/
// /*font-size: 18px;*/
// text-align: left;
// font-weight: normal;
// /*font-family: 'yanone kaffeesatz',sans-serif;*/
// padding-left: 0px; }
// .contributorback {
// background: #eceeeb url(../default/media/images/contributorsback.png) no-repeat center left; }
// label {
// color: #707070;
// font-size: 15px;
// display: block;
// float: right;
// text-align: left;
// font-family: 'yanone kaffeesatz',sans-serif;
// width: 80px;
// margin-right: 18px; }
// #displaytagfiltercontrol label {
// width: 160px; }
// ul {
// margin-left: 22px; }
// li {
// list-style-type: disc;
// font-size: 13px;
// line-height: 20px;
// margin-bottom: 10px;
// color: #707070; }
// ul.tags {
// list-style: none;
// margin: 0;
// padding: 0;
// line-height: 170%;
// display: block; }
// #displaytagfiltercontrol p label {
// color: #707070;
// font-size: 15px; }
/*.inputs {
#interestingtaginput, #ignoredtaginput {
width: 153px;
padding-left: 5px;
border: #c9c9b5 1px solid;
height: 25px; }
#interestingtagadd, #ignoredtagadd {
background: url(../default/media/images/small-button-blue.png) repeat-x top;
border: 0;
color: #4a757f;
font-weight: bold;
font-size: 12px;
width: 30px;
height: 27px;
margin-top: -2px;
cursor: pointer;
border-radius: 4px;
-ms-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-khtml-border-radius: 4px;
text-shadow: 0px 1px 0px #e6f6fa;
-moz-text-shadow: 0px 1px 0px #e6f6fa;
-webkit-text-shadow: 0px 1px 0px #e6f6fa;
-webkit-box-shadow: 1px 1px 2px #808080;
-moz-box-shadow: 1px 1px 2px #808080;
box-shadow: 1px 1px 2px #808080; }
#interestingtagadd:hover, #ignoredtagadd:hover {
background: url(../default/media/images/small-button-blue.png) repeat-x bottom; } }*/
// img.gravatar {
// margin: 1px; }
// a {
// &.followed, &.follow {
// background: url(../default/media/images/medium-button.png) top repeat-x;
// height: 34px;
// line-height: 34px;
// text-align: center;
// border: 0;
// font-family: 'yanone kaffeesatz',sans-serif;
// color: #4a757f;
// font-weight: normal;
// font-size: 21px;
// margin-top: 3px;
// display: block;
// width: 120px;
// text-decoration: none;
// border-radius: 4px;
// -ms-border-radius: 4px;
// -moz-border-radius: 4px;
// -webkit-border-radius: 4px;
// -khtml-border-radius: 4px;
// -webkit-box-shadow: 1px 1px 2px #636363;
// -moz-box-shadow: 1px 1px 2px #636363;
// box-shadow: 1px 1px 2px #636363;
// margin: 0 auto;
// padding: 0; }
// &.followed:hover, &.follow:hover {
// text-decoration: none;
// background: url(../default/media/images/medium-button.png) bottom repeat-x;
// text-shadow: 0px 1px 0px #c6d9dd;
// -moz-text-shadow: 0px 1px 0px #c6d9dd;
// -webkit-text-shadow: 0px 1px 0px #c6d9dd; }
// &.followed {
// div.unfollow {
// display: none; }
// &:hover div {
// display: none;
// &.unfollow {
// display: inline;
// color: #a05736; } } } }
// .favorite-number {
// padding: 5px 0 0 5px;
// font-size: 100%;
// font-family: arial;
// font-weight: bold;
// color: #777;
// text-align: center; }
// .notify-sidebar #question-subscribe-sidebar {
// margin: 7px 0 0 3px; }
}
//.statswidget p {
// color: #707070;
// font-size: 16px;
// border-bottom: #cccccc 1px solid;
// font-size: 13px;
// strong {
// float: right;
// padding-right: 10px; } }
// .questions-related {
// word-wrap: break-word;
// p {
// line-height: 20px;
// padding: 4px 0px 4px 0px;
// font-size: 16px;
// font-weight: normal;
// border-bottom: #cccccc 1px solid; }
// a {
// font-size: 13px; } }
// #tips {
// li {
// color: #707070;
// font-size: 13px;
// list-style-image: url(../default/media/images/tips.png); }
// a {
// font-size: 16px; } }
// #markdownhelp {
// li {
// color: #707070;
// font-size: 13px; }
// a {
// font-size: 16px; } }
// .tabbar {
// background-color: #eff5f6;
// height: 30px;
// margin-bottom: 3px;
// margin-top: 3px;
// float: right;
// font-family: georgia,serif;
// font-size: 16px;
// border-radius: 5px;
// -ms-border-radius: 5px;
// -moz-border-radius: 5px;
// -webkit-border-radius: 5px;
// -khtml-border-radius: 5px;
// h2 {
// float: left; } }
// .tabsa, .tabsc {
// float: right;
// position: relative;
// display: block;
// height: 20px; }
// .tabsa {
// float: right; }
// .tabsc {
// float: left; }
// .tabsa a, .tabsc a {
// border-left: 1px solid #d0e1e4;
// color: #7ea9b3;
// display: block;
// float: left;
// height: 20px;
// line-height: 20px;
// padding: 4px 7px 4px 7px;
// text-decoration: none; }
// .tabsa a.on, .tabsc a.on, .tabsa a:hover, .tabsc a:hover {
// color: #4a757f; }
// .tabsa .label, .tabsc .label {
// float: left;
// color: #646464;
// margin-top: 4px;
// margin-right: 5px; }
// .main-page .tabsa .label {
// margin-left: 8px; }
// .tabsb a {
// background: #eee;
// border: 1px solid #eee;
// color: #777;
// display: block;
// float: left;
// height: 22px;
// line-height: 28px;
// margin: 5px 0px 0 4px;
// padding: 0 11px 0 11px;
// text-decoration: none; }
// .tabsc .first {
// border: none; }
// .rss {
// float: right;
// font-size: 16px;
// color: #f57900;
// margin: 5px 0px 3px 7px;
// width: 52px;
// padding-left: 2px;
// padding-top: 3px;
// background: white url(../default/media/images/feed-icon-small.png) no-repeat center right;
// float: right;
// font-family: georgia,serif;
// font-size: 16px;
// &:hover {
// color: #f4a731 !important; } }
// #questioncount {
// font-weight: bold;
// font-size: 23px;
// color: #7ea9b3;
// width: 200px;
// float: left;
// margin-bottom: 8px;
// padding-top: 6px;
// font-family: 'yanone kaffeesatz',sans-serif; }
// #listsearchtags {
// float: left;
// margin-top: 3px;
// color: #707070;
// font-size: 16px;
// font-family: 'yanone kaffeesatz',sans-serif; }
// ul#searchtags {
// margin-left: 10px;
// float: right;
// padding-top: 2px; }
// .search-tips {
// font-size: 16px;
// line-height: 17px;
// color: #707070;
// margin: 5px 0 10px 0;
// padding: 0px;
// float: left;
// font-family: 'yanone kaffeesatz',sans-serif;
// a {
// text-decoration: underline;
// color: #1b79bd; } }
// #question-list {
// float: left;
// position: relative;
// background-color: #fff;
// padding: 0;
// width: 100%; }
// .short-summary {
// position: relative;
// filter: inherit;
// padding: 10px;
// border-bottom: 1px solid #dddbce;
// margin-bottom: 1px;
// overflow: hidden;
// width: 710px;
// float: left;
// background: url(../default/media/images/summary-background.png) repeat-x;
// h2 {
// font-size: 24px;
// font-weight: normal;
// line-height: 26px;
// padding-left: 0;
// margin-bottom: 6px;
// display: block;
// font-family: 'yanone kaffeesatz',sans-serif; }
// a {
// color: #464646; }
// .userinfo {
// text-align: right;
// line-height: 16px;
// font-family: arial;
// padding-right: 4px;
// .relativetime {
// font-size: 11px;
// clear: both;
// font-weight: normal;
// color: #555; } }
// span.anonymous {
// font-size: 11px;
// clear: both;
// font-weight: normal;
// color: #555; }
// .userinfo a {
// font-weight: bold;
// font-size: 11px; }
// .counts {
// float: right;
// margin: 4px 0 0 5px;
// font-family: 'yanone kaffeesatz',sans-serif;
// .item-count {
// padding: 0px 5px 0px 5px;
// font-size: 25px;
// font-family: 'yanone kaffeesatz',sans-serif; }
// .votes div, .views div, .answers div, .favorites div {
// margin-top: 3px;
// font-size: 14px;
// line-height: 14px;
// color: #646464; } }
// .tags {
// margin-top: 0; }
// .votes, .answers, .favorites, .views {
// text-align: center;
// margin: 0 3px;
// padding: 8px 2px 0px 2px;
// width: 51px;
// float: right;
// height: 44px;
// border: #dbdbd4 1px solid; }
// .votes {
// background: url(../default/media/images/vote-background.png) repeat-x; }
// .answers {
// background: url(../default/media/images/answers-background.png) repeat-x; }
// .views {
// background: url(../default/media/images/view-background.png) repeat-x; }
// .no-votes .item-count {
// color: #b1b5b6; }
// .some-votes .item-count {
// color: #4a757f; }
// .no-answers .item-count {
// color: #b1b5b6; }
// .some-answers .item-count {
// color: #eab243; }
// .no-views .item-count {
// color: #b1b5b6; }
// .some-views .item-count {
// color: #d33f00; }
// .accepted .item-count {
// background: url(../default/media/images/accept.png) no-repeat top right;
// display: block;
// text-align: center;
// width: 40px;
// color: #eab243; }
// .some-favorites .item-count {
// background: #338333;
// color: #d0f5a9; }
// .no-favorites .item-count {
// background: #eab243;
// color: yellow; } }
// .evenmore {
// font-size: 13px;
// color: #707070;
// padding: 15px 0px 10px 0px;
// clear: both;
// a {
// text-decoration: underline;
// color: #1b79bd; } }
.pager
{
margin-top
:
10px
;
margin-bottom
:
16px
;
}
.pagesize
{
margin-top
:
10px
;
margin-bottom
:
16px
;
float
:
right
;
}
// .paginator {
// padding: 5px 0 10px 0;
// font-size: 13px;
// margin-bottom: 10px;
// .prev a, .next a {
// background-color: #fff;
// color: #777;
// padding: 2px 4px 3px 4px;
// &:visited {
// background-color: #fff;
// color: #777;
// padding: 2px 4px 3px 4px; } }
// a {
// color: #7ea9b3; }
// .prev {
// margin-right: .5em; }
// .next {
// margin-left: .5em; }
// .page a {
// padding: .25em;
// background-color: #fff;
// margin: 0em .25em;
// color: #ff;
// &:visited {
// padding: .25em;
// background-color: #fff;
// margin: 0em .25em;
// color: #ff; } }
// .curr {
// padding: .25em;
// background-color: #fff;
// margin: 0em .25em;
// color: #ff;
// background-color: #8ebcc7;
// color: #fff;
// font-weight: bold; }
// .next a, .prev a {
// color: #7ea9b3; }
// .page a:hover, .curr a:hover, .prev a:hover, .next a:hover {
// color: #8c8c8c;
// background-color: #e1e1e1;
// text-decoration: none; }
// .text {
// color: #777;
// padding: .3em; }
// .paginator-container-left {
// padding: 5px 0 10px 0; } }
// .tag-size-1 {
// font-size: 12px; }
// .tag-size-2 {
// font-size: 13px; }
// .tag-size-3 {
// font-size: 14px; }
// .tag-size-4 {
// font-size: 15px; }
// .tag-size-5 {
// font-size: 16px; }
// .tag-size-6 {
// font-size: 17px; }
// .tag-size-7 {
// font-size: 18px; }
// .tag-size-8 {
// font-size: 19px; }
// .tag-size-9 {
// font-size: 20px; }
// .tag-size-10 {
// font-size: 21px; }
// ul {
// &.tags {
// list-style: none;
// margin: 0;
// padding: 0;
// line-height: 170%;
// display: block;
// &.marked-tags {
// list-style: none;
// margin: 0;
// padding: 0;
// line-height: 170%;
// display: block; } }
// &#related-tags {
// list-style: none;
// margin: 0;
// padding: 0;
// line-height: 170%;
// display: block; }
// &.tags li {
// float: left;
// display: block;
// margin: 0 8px 0 0;
// padding: 0;
// height: 20px; } }
// .wildcard-tags {
// clear: both; }
// ul.tags.marked-tags li, .wildcard-tags ul.tags li {
// margin-bottom: 5px; }
// #tagselector div.inputs {
// clear: both;
// float: none;
// margin-bottom: 10px; }
// .tags-page ul.tags li {
// width: 160px;
// margin: 5px; }
// ul {
// &#ab-user-tags li {
// width: 160px;
// margin: 5px; }
// &#related-tags li {
// margin: 0 5px 8px 0;
// float: left;
// clear: left; } }
// .tag-left {
// cursor: pointer;
// display: block;
// float: left;
// height: 17px;
// margin: 0 5px 0 0;
// padding: 0;
// -webkit-box-shadow: 0px 0px 5px #d3d6d7;
// -moz-box-shadow: 0px 0px 5px #d3d6d7;
// box-shadow: 0px 0px 5px #d3d6d7; }
// .tag-right {
// background: #f3f6f6;
// border: #fff 1px solid;
// border-top: #fff 2px solid;
// outline: #cfdbdb 1px solid;
// display: block;
// float: left;
// height: 17px;
// line-height: 17px;
// font-weight: normal;
// font-size: 11px;
// padding: 0px 8px 0px 8px;
// text-decoration: none;
// text-align: center;
// white-space: nowrap;
// vertical-align: middle;
// font-family: arial;
// color: #717179; }
// .deletable-tag {
// margin-right: 3px;
// white-space: nowrap;
// border-top-right-radius: 4px;
// border-bottom-right-radius: 4px;
// -moz-border-radius-topright: 4px;
// -moz-border-radius-bottomright: 4px;
// -webkit-border-bottom-right-radius: 4px;
// -webkit-border-top-right-radius: 4px; }
// .tags {
// a.tag-right, span.tag-right {
// color: #585858;
// text-decoration: none; }
// a:hover {
// color: #1a1a1a; } }
// .users-page h1, .tags-page h1 {
// float: left; }
// .main-page h1 {
// margin-right: 5px; }
// .delete-icon {
// margin-top: -1px;
// float: left;
// height: 21px;
// width: 18px;
// display: block;
// line-height: 20px;
// text-align: center;
// background: #bbcdcd;
// cursor: default;
// color: #fff;
// border-top: #cfdbdb 1px solid;
// font-family: arial;
// border-top-right-radius: 4px;
// border-bottom-right-radius: 4px;
// -moz-border-radius-topright: 4px;
// -moz-border-radius-bottomright: 4px;
// -webkit-border-bottom-right-radius: 4px;
// -webkit-border-top-right-radius: 4px;
// text-shadow: 0px 1px 0px #7ea0a0;
// -moz-text-shadow: 0px 1px 0px #7ea0a0;
// -webkit-text-shadow: 0px 1px 0px #7ea0a0;
// &:hover {
// background: #b32f2f; } }
// .tag-number {
// font-weight: normal;
// float: left;
// font-size: 16px;
// color: #5d5d5d; }
// .badges .tag-number {
// float: none;
// display: inline;
// padding-right: 15px; }
// .section-title {
// color: #7ea9b3;
// font-family: 'yanone kaffeesatz',sans-serif;
// font-weight: bold;
// font-size: 24px; }
// #fmask {
// margin-bottom: 30px;
// width: 100%; }
// #askformbar {
// display: inline-block;
// padding: 4px 7px 5px 0px;
// margin-top: 0px;
// p {
// margin: 0 0 5px 0;
// font-size: 14px;
// color: #525252;
// line-height: 1.4; }
// .questiontitleinput {
// font-size: 24px;
// line-height: 24px;
// height: 36px;
// margin: 0px;
// padding: 0px 0 0 5px;
// border: #cce6ec 3px solid;
// width: 725px; } }
// .ask-page div#question-list, .edit-question-page div#question-list {
// float: none;
// border-bottom: #f0f0ec 1px solid;
// float: left;
// margin-bottom: 10px; }
// .ask-page div#question-list a, .edit-question-page div#question-list a {
// line-height: 30px; }
// .ask-page div#question-list h2, .edit-question-page div#question-list h2 {
// font-size: 13px;
// padding-bottom: 0;
// color: #1b79bd;
// border-top: #f0f0ec 1px solid;
// border-left: #f0f0ec 1px solid;
// height: 30px;
// line-height: 30px;
// font-weight: normal; }
// .ask-page div#question-list span, .edit-question-page div#question-list span {
// width: 28px;
// height: 26px;
// line-height: 26px;
// text-align: center;
// margin-right: 10px;
// float: left;
// display: block;
// color: #fff;
// background: #b8d0d5;
// border-radius: 3px;
// -ms-border-radius: 3px;
// -moz-border-radius: 3px;
// -webkit-border-radius: 3px;
// -khtml-border-radius: 3px; }
// .ask-page label, .edit-question-page label {
// color: #525252;
// font-size: 13px; }
// .ask-page #id_tags, .edit-question-page #id_tags {
// border: #cce6ec 3px solid;
// height: 25px;
// padding-left: 5px;
// width: 395px;
// font-size: 14px; }
// .title-desc {
// color: #707070;
// font-size: 13px; }
// #fmanswer input.submit, .ask-page input.submit, .edit-question-page input.submit {
// float: left;
// background: url(../default/media/images/medium-button.png) top repeat-x;
// height: 34px;
// border: 0;
// font-family: 'yanone kaffeesatz',sans-serif;
// color: #4a757f;
// font-weight: normal;
// font-size: 21px;
// margin-top: 3px;
// border-radius: 4px;
// -ms-border-radius: 4px;
// -moz-border-radius: 4px;
// -webkit-border-radius: 4px;
// -khtml-border-radius: 4px;
// -webkit-box-shadow: 1px 1px 2px #636363;
// -moz-box-shadow: 1px 1px 2px #636363;
// box-shadow: 1px 1px 2px #636363;
// margin-right: 7px; }
// #fmanswer input.submit:hover, .ask-page input.submit:hover, .edit-question-page input.submit:hover {
// text-decoration: none;
// background: url(../default/media/images/medium-button.png) bottom repeat-x;
// text-shadow: 0px 1px 0px #c6d9dd;
// -moz-text-shadow: 0px 1px 0px #c6d9dd;
// -webkit-text-shadow: 0px 1px 0px #c6d9dd; }
// #editor {
// font-size: 100%;
// min-height: 200px;
// line-height: 18px;
// margin: 0;
// border-left: #cce6ec 3px solid;
// border-bottom: #cce6ec 3px solid;
// border-right: #cce6ec 3px solid;
// border-top: 0;
// padding: 10px;
// margin-bottom: 10px;
// width: 710px; }
// #id_title {
// width: 100%; }
// .wmd-preview {
// margin: 3px 0 5px 0;
// padding: 6px;
// background-color: #f5f5f5;
// min-height: 20px;
// overflow: auto;
// font-size: 13px;
// font-family: arial;
// p {
// margin-bottom: 14px;
// line-height: 1.4;
// font-size: 14px; }
// pre {
// background-color: #e7f1f8; }
// blockquote {
// background-color: #eee; }
// img {
// max-width: 600px; } }
// .preview-toggle {
// width: 100%;
// color: #b6a475;
// text-align: left;
// span:hover {
// cursor: pointer; } }
// .after-editor {
// margin-top: 15px;
// margin-bottom: 15px; }
.checkbox
{
margin-left
:
5px
;
font-weight
:
normal
;
cursor
:
help
;
}
// .question-options {
// margin-top: 1px;
// color: #666;
// line-height: 13px;
// margin-bottom: 5px;
// label {
// vertical-align: text-bottom; } }
// .edit-content-html {
// border-top: 1px dotted #d8d2a9;
// border-bottom: 1px dotted #d8d2a9;
// margin: 5px 0 5px 0; }
// .edit-question-page, #fmedit, .wmd-preview {
// color: #525252; }
// .edit-question-page #id_revision, #fmedit #id_revision, .wmd-preview #id_revision {
// font-size: 14px;
// margin-top: 5px;
// margin-bottom: 5px; }
// .edit-question-page #id_title, #fmedit #id_title, .wmd-preview #id_title {
// font-size: 24px;
// line-height: 24px;
// height: 36px;
// margin: 0px;
// padding: 0px 0 0 5px;
// border: #cce6ec 3px solid;
// width: 725px;
// margin-bottom: 10px; }
// .edit-question-page #id_summary, #fmedit #id_summary, .wmd-preview #id_summary {
// border: #cce6ec 3px solid;
// height: 25px;
// padding-left: 5px;
// width: 395px;
// font-size: 14px; }
// .edit-question-page .title-desc, #fmedit .title-desc, .wmd-preview .title-desc {
// margin-bottom: 10px; }
// .question-page {
// h1 {
// padding-top: 0px;
// font-family: 'yanone kaffeesatz',sans-serif;
// a {
// color: #464646;
// font-size: 30px;
// font-weight: normal;
// line-height: 1; } }
// p.rss {
// float: none;
// clear: both;
// padding: 3px 0 0 23px;
// font-size: 15px;
// width: 110px;
// background-position: center left;
// margin-left: 0px !important;
// a {
// font-family: 'yanone kaffeesatz',sans-serif;
// vertical-align: top; } }
// .question-content {
// float: right;
// width: 682px;
// margin-bottom: 10px; }
// #question-table {
// float: left;
// border-top: #f0f0f0 1px solid;
// margin: 6px 0 6px 0;
// border-spacing: 0px;
// width: 670px;
// padding-right: 10px; }
// .answer-table {
// margin: 6px 0 6px 0;
// border-spacing: 0px;
// width: 670px;
// padding-right: 10px;
// margin-top: 0px;
// border-bottom: 1px solid #d4d4d4;
// float: right;
// td {
// width: 20px;
// vertical-align: top; } }
// #question-table td {
// width: 20px;
// vertical-align: top; }
// .question-body, .answer-body {
// overflow: auto;
// margin-top: 10px;
// font-family: arial;
// color: #4b4b4b; }
// .question-body p, .answer-body p {
// margin-bottom: 14px;
// line-height: 1.4;
// font-size: 14px;
// padding: 0px 5px 5px 0px; }
// .question-body a, .answer-body a {
// color: #1b79bd; }
// .question-body li, .answer-body li {
// margin-bottom: 7px; }
// .question-body img, .answer-body img {
// max-width: 600px; }
// .post-update-info-container {
// float: right;
// width: 175px; }
// .post-update-info {
// background: white url(../default/media/images/background-user-info.png) repeat-x bottom;
// float: right;
// font-size: 9px;
// font-family: arial;
// width: 158px;
// padding: 4px;
// margin: 0px 0px 5px 5px;
// line-height: 14px;
// border-radius: 4px;
// -ms-border-radius: 4px;
// -moz-border-radius: 4px;
// -webkit-border-radius: 4px;
// -khtml-border-radius: 4px;
// -webkit-box-shadow: 0px 2px 1px #bfbfbf;
// -moz-box-shadow: 0px 2px 1px #bfbfbf;
// box-shadow: 0px 2px 1px #bfbfbf;
// p {
// line-height: 13px;
// font-size: 11px;
// margin: 0 0 2px 1px;
// padding: 0; }
// a {
// color: #444; }
// .gravatar {
// float: left;
// margin-right: 4px; }
// p.tip {
// color: #444;
// line-height: 13px;
// font-size: 10px; } }
// .post-controls {
// font-size: 11px;
// line-height: 12px;
// min-width: 200px;
// padding-left: 5px;
// text-align: right;
// clear: left;
// float: right;
// margin-top: 10px;
// margin-bottom: 8px;
// a {
// color: #777;
// padding: 0px 3px 3px 22px;
// cursor: pointer;
// border: none;
// font-size: 12px;
// font-family: arial;
// text-decoration: none;
// height: 18px;
// display: block;
// float: right;
// line-height: 18px;
// margin-top: -2px;
// margin-left: 4px;
// &:hover {
// background-color: #f5f0c9;
// border-radius: 3px;
// -ms-border-radius: 3px;
// -moz-border-radius: 3px;
// -webkit-border-radius: 3px;
// -khtml-border-radius: 3px; } }
// .sep {
// color: #ccc;
// float: right;
// height: 18px;
// font-size: 18px; }
// .question-delete {
// background: url(../default/media/images/delete.png) no-repeat center left;
// padding-left: 16px; } }
// .answer-controls .question-delete {
// background: url(../default/media/images/delete.png) no-repeat center left;
// padding-left: 16px; }
// .post-controls .question-flag, .answer-controls .question-flag {
// background: url(../default/media/images/flag.png) no-repeat center left; }
// .post-controls .question-edit, .answer-controls .question-edit {
// background: url(../default/media/images/edit2.png) no-repeat center left; }
// .post-controls .question-retag, .answer-controls .question-retag {
// background: url(../default/media/images/retag.png) no-repeat center left; }
// .post-controls .question-close, .answer-controls .question-close {
// background: url(../default/media/images/close.png) no-repeat center left; }
// .post-controls .permant-link, .answer-controls .permant-link {
// background: url(../default/media/images/link.png) no-repeat center left; }
// .tabbar {
// width: 100%; }
// #questioncount {
// float: left;
// font-family: 'yanone kaffeesatz',sans-serif;
// line-height: 15px; }
// .question-img-upvote, .question-img-downvote, .answer-img-upvote, .answer-img-downvote {
// width: 25px;
// height: 20px;
// cursor: pointer; }
// .question-img-upvote, .answer-img-upvote {
// background: url(../default/media/images/vote-arrow-up-new.png) no-repeat; }
// .question-img-downvote, .answer-img-downvote {
// background: url(../default/media/images/vote-arrow-down-new.png) no-repeat; }
// .question-img-upvote {
// &:hover, &.on {
// background: url(../default/media/images/vote-arrow-up-on-new.png) no-repeat; } }
// .answer-img-upvote {
// &:hover, &.on {
// background: url(../default/media/images/vote-arrow-up-on-new.png) no-repeat; } }
// .question-img-downvote {
// &:hover, &.on {
// background: url(../default/media/images/vote-arrow-down-on-new.png) no-repeat; } }
// .answer-img-downvote {
// &:hover, &.on {
// background: url(../default/media/images/vote-arrow-down-on-new.png) no-repeat; } }
// #fmanswer_button {
// margin: 8px 0px; }
// .question-img-favorite:hover {
// background: url(../default/media/images/vote-favorite-on.png); }
// div.comments {
// padding: 0; }
// #comment-title {
// font-weight: bold;
// font-size: 23px;
// color: #7ea9b3;
// width: 200px;
// float: left;
// font-family: 'yanone kaffeesatz',sans-serif; }
// .comments {
// font-size: 12px;
// clear: both;
// div.controls {
// clear: both;
// float: left;
// width: 100%;
// margin: 3px 0 20px 5px; }
// .controls a {
// color: #988e4c;
// padding: 0 3px 2px 22px;
// font-family: arial;
// font-size: 13px;
// background: url(../default/media/images/comment.png) no-repeat center left;
// &:hover {
// background-color: #f5f0c9;
// text-decoration: none; } }
// .button {
// color: #988e4c;
// font-size: 11px;
// padding: 3px;
// cursor: pointer; }
// a {
// background-color: inherit;
// color: #1b79bd;
// padding: 0; }
// form.post-comments {
// margin: 3px 26px 0 42px;
// textarea {
// font-size: 13px;
// line-height: 1.3; } }
// textarea {
// height: 42px;
// width: 100%;
// margin: 7px 0 5px 1px;
// font-family: arial;
// outline: none;
// overflow: auto;
// font-size: 12px;
// line-height: 140%;
// padding-left: 2px;
// padding-top: 3px;
// border: #cce6ec 3px solid; }
// input {
// margin-left: 10px;
// margin-top: 1px;
// vertical-align: top;
// width: 100px; }
// button {
// background: url(../default/media/images/small-button-blue.png) repeat-x top;
// border: 0;
// color: #4a757f;
// font-family: arial;
// font-size: 13px;
// width: 100px;
// font-weight: bold;
// height: 27px;
// line-height: 25px;
// margin-bottom: 5px;
// cursor: pointer;
// border-radius: 4px;
// -ms-border-radius: 4px;
// -moz-border-radius: 4px;
// -webkit-border-radius: 4px;
// -khtml-border-radius: 4px;
// text-shadow: 0px 1px 0px #e6f6fa;
// -moz-text-shadow: 0px 1px 0px #e6f6fa;
// -webkit-text-shadow: 0px 1px 0px #e6f6fa;
// -webkit-box-shadow: 1px 1px 2px #808080;
// -moz-box-shadow: 1px 1px 2px #808080;
// box-shadow: 1px 1px 2px #808080;
// &:hover {
// background: url(../default/media/images/small-button-blue.png) bottom repeat-x;
// text-shadow: 0px 1px 0px #c6d9dd;
// -moz-text-shadow: 0px 1px 0px #c6d9dd;
// -webkit-text-shadow: 0px 1px 0px #c6d9dd; } }
// .counter {
// display: inline-block;
// width: 245px;
// float: right;
// color: #b6a475 !important;
// vertical-align: top;
// font-family: arial;
// float: right;
// text-align: right; }
// .comment {
// border-bottom: 1px solid #edeeeb;
// clear: both;
// margin: 0;
// margin-top: 8px;
// padding-bottom: 4px;
// overflow: auto;
// font-family: arial;
// font-size: 11px;
// min-height: 25px;
// background: white url(../default/media/images/comment-background.png) bottom repeat-x;
// border-radius: 5px;
// -ms-border-radius: 5px;
// -moz-border-radius: 5px;
// -webkit-border-radius: 5px;
// -khtml-border-radius: 5px; }
// div.comment:hover {
// background-color: #efefef; }
// a.author {
// background-color: inherit;
// color: #1b79bd;
// padding: 0;
// &:hover {
// text-decoration: underline; } }
// span.delete-icon {
// background: url(../default/media/images/close-small.png) no-repeat;
// border: 0;
// width: 14px;
// height: 14px;
// &:hover {
// border: #bc564b 2px solid;
// border-radius: 10px;
// -ms-border-radius: 10px;
// -moz-border-radius: 10px;
// -webkit-border-radius: 10px;
// -khtml-border-radius: 10px;
// margin: -3px 0px 0px -2px; } }
// .content {
// margin-bottom: 7px; }
// .comment-votes {
// float: left;
// width: 37px;
// line-height: 130%;
// padding: 6px 5px 6px 3px; }
// .comment-body {
// line-height: 1.3;
// margin: 3px 26px 0 46px;
// padding: 5px 3px;
// color: #666;
// font-size: 13px;
// .edit {
// padding-left: 6px; }
// p {
// font-size: 13px;
// line-height: 1.3;
// margin-bottom: 3px;
// padding: 0; } }
// .comment-delete {
// float: right;
// width: 14px;
// line-height: 130%;
// padding: 8px 6px; }
// .upvote {
// margin: 0px;
// padding-right: 17px;
// padding-top: 2px;
// text-align: right;
// height: 20px;
// font-size: 13px;
// font-weight: bold;
// color: #777;
// &.upvoted {
// color: #d64000; }
// &.hover {
// background: url(../default/media/images/go-up-grey.png) no-repeat;
// background-position: right 1px; }
// &:hover {
// background: url(../default/media/images/go-up-orange.png) no-repeat;
// background-position: right 1px; } }
// .help-text {
// float: right;
// text-align: right;
// color: gray;
// margin-bottom: 0px;
// margin-top: 0px;
// line-height: 50%; } }
// #questiontools {
// font-size: 22px;
// margin-top: 11px;
// text-align: left; }
// .question-status {
// margin-top: 10px;
// margin-bottom: 15px;
// padding: 20px;
// background-color: #fef7cc;
// text-align: center;
// border: #e1c04a 1px solid;
// h3 {
// font-size: 20px;
// color: #707070;
// font-weight: normal; } }
// .vote-buttons {
// // float: left;
// // text-align: center;
// // padding-top: 2px;
// // margin: 10px 10px 0px 3px;
// img {
// cursor: pointer; } }
// .vote-number {
// font-family: 'yanone kaffeesatz',sans-serif;
// padding: 0px 0 5px 0;
// font-size: 25px;
// font-weight: bold;
// color: #777; }
// .vote-buttons .notify-sidebar {
// // text-align: left;
// // width: 120px;
// label {
// vertical-align: top; } }
// .tabbar-answer {
// margin-bottom: 15px;
// padding-left: 7px;
// width: 723px;
// margin-top: 10px; }
// .answer .vote-buttons {
// // float: left;
// }
// .accepted-answer {
// background-color: #f7fecc;
// border-bottom-color: #9bd59b;
// // .vote-buttons {
// // width: 27px;
// // margin-right: 10px;
// // margin-top: 10px; }
// }
// .answer .post-update-info a {
// color: #444444; }
// .answered {
// background: #ccc;
// color: #999; }
// .answered-accepted {
// background: #dcdcdc;
// color: #763333;
// strong {
// color: #e1e818; } }
// .answered-by-owner {
// background: #f1f1ff;
// .comments {
// .button {
// background-color: #e6ecff; }
// background-color: #e6ecff; }
// // .vote-buttons {
// // margin-right: 10px; }
// }
// .answer-img-accept:hover {
// background: url(../default/media/images/vote-accepted-on.png); }
// .answer-body {
// a {
// color: #1b79bd; }
// li {
// margin-bottom: 0.7em; } }
// #fmanswer {
// color: #707070;
// line-height: 1.2;
// margin-top: 10px;
// h2 {
// font-family: 'yanone kaffeesatz',sans-serif;
// color: #7ea9b3;
// font-size: 24px; }
// label {
// font-size: 13px; } }
// .message {
// padding: 5px;
// margin: 0px 0 10px 0; } }
// @media screen and (-webkit-min-device-pixel-ratio:0) {
// textarea {
// padding-left: 3px !important; } }
// .facebook-share.icon, .twitter-share.icon, .linkedin-share.icon, .identica-share.icon {
// background: url(../default/media/images/socialsprite.png) no-repeat;
// display: block;
// text-indent: -100em;
// height: 25px;
// width: 25px;
// margin-bottom: 3px; }
// .facebook-share.icon:hover, .twitter-share.icon:hover, .linkedin-share.icon:hover, .identica-share.icon:hover {
// opacity: 0.8;
// filter: alpha(opacity = 80); }
// .facebook-share.icon {
// background-position: -26px 0px; }
// .identica-share.icon {
// background-position: -78px 0px; }
// .twitter-share.icon {
// margin-top: 10px;
// background-position: 0px 0px; }
// .linkedin-share.icon {
// background-position: -52px 0px; }
// .openid-signin, .meta, .users-page, .user-profile-edit-page {
// font-size: 13px;
// line-height: 1.3;
// color: #525252; }
// .openid-signin p, .meta p, .users-page p, .user-profile-edit-page p {
// font-size: 13px;
// color: #707070;
// line-height: 1.3;
// font-family: arial;
// color: #525252;
// margin-bottom: 12px; }
// .openid-signin h2, .meta h2, .users-page h2, .user-profile-edit-page h2 {
// color: #525252;
// padding-left: 0px;
// font-size: 16px; }
// .openid-signin form, .meta form, .users-page form, .user-profile-edit-page form, .user-profile-page form {
// margin-bottom: 15px; }
// .openid-signin input[type="text"], .meta input[type="text"], .users-page input[type="text"], .user-profile-edit-page input[type="text"], .user-profile-page input[type="text"], .openid-signin input[type="password"], .meta input[type="password"], .users-page input[type="password"], .user-profile-edit-page input[type="password"], .user-profile-page input[type="password"], .openid-signin select, .meta select, .users-page select, .user-profile-edit-page select, .user-profile-page select {
// border: #cce6ec 3px solid;
// height: 25px;
// padding-left: 5px;
// width: 395px;
// font-size: 14px; }
// .openid-signin select, .meta select, .users-page select, .user-profile-edit-page select, .user-profile-page select {
// width: 405px;
// height: 30px; }
// .openid-signin textarea, .meta textarea, .users-page textarea, .user-profile-edit-page textarea, .user-profile-page textarea {
// border: #cce6ec 3px solid;
// padding-left: 5px;
// padding-top: 5px;
// width: 395px;
// font-size: 14px; }
// .openid-signin input.submit, .meta input.submit, .users-page input.submit, .user-profile-edit-page input.submit, .user-profile-page input.submit {
// background: url(../default/media/images/small-button-blue.png) repeat-x top;
// border: 0;
// color: #4a757f;
// font-weight: bold;
// font-size: 13px;
// font-family: arial;
// height: 26px;
// margin: 5px 0px;
// width: 100px;
// cursor: pointer;
// border-radius: 4px;
// -ms-border-radius: 4px;
// -moz-border-radius: 4px;
// -webkit-border-radius: 4px;
// -khtml-border-radius: 4px;
// text-shadow: 0px 1px 0px #e6f6fa;
// -moz-text-shadow: 0px 1px 0px #e6f6fa;
// -webkit-text-shadow: 0px 1px 0px #e6f6fa;
// -webkit-box-shadow: 1px 1px 2px #808080;
// -moz-box-shadow: 1px 1px 2px #808080;
// box-shadow: 1px 1px 2px #808080; }
// .openid-signin input.submit:hover, .meta input.submit:hover, .users-page input.submit:hover, .user-profile-edit-page input.submit:hover, .user-profile-page input.submit:hover {
// background: url(../default/media/images/small-button-blue.png) repeat-x bottom;
// text-decoration: none; }
.openid-signin
.cancel
,
.meta
.cancel
,
.users-page
.cancel
,
.user-profile-edit-page
.cancel
,
.user-profile-page
.cancel
{
background
:
url(../default/media/images/small-button-cancel.png)
repeat-x
top
!
important
;
color
:
#525252
!
important
;
}
.openid-signin
.cancel
:hover
,
.meta
.cancel
:hover
,
.users-page
.cancel
:hover
,
.user-profile-edit-page
.cancel
:hover
,
.user-profile-page
.cancel
:hover
{
background
:
url(../default/media/images/small-button-cancel.png)
repeat-x
bottom
!
important
;
}
#email-input-fs
,
#local_login_buttons
,
#password-fs
,
#openid-fs
{
margin-top
:
10px
;
}
#email-input-fs
#id_email
,
#local_login_buttons
#id_email
,
#password-fs
#id_email
,
#openid-fs
#id_email
,
#email-input-fs
#id_username
,
#local_login_buttons
#id_username
,
#password-fs
#id_username
,
#openid-fs
#id_username
,
#email-input-fs
#id_password
,
#local_login_buttons
#id_password
,
#password-fs
#id_password
,
#openid-fs
#id_password
{
font-size
:
12px
;
line-height
:
20px
;
height
:
20px
;
margin
:
0px
;
padding
:
0px
0
0
5px
;
border
:
#cce6ec
3px
solid
;
width
:
200px
;
}
#email-input-fs
.submit-b
,
#local_login_buttons
.submit-b
,
#password-fs
.submit-b
,
#openid-fs
.submit-b
{
background
:
url(../default/media/images/small-button-blue.png)
repeat-x
top
;
border
:
0
;
color
:
#4a757f
;
font-weight
:
bold
;
font-size
:
13px
;
font-family
:
arial
;
height
:
24px
;
margin-top
:
-2px
;
padding-left
:
10px
;
padding-right
:
10px
;
cursor
:
pointer
;
border-radius
:
4px
;
-ms-border-radius
:
4px
;
-moz-border-radius
:
4px
;
-webkit-border-radius
:
4px
;
-khtml-border-radius
:
4px
;
text-shadow
:
0px
1px
0px
#e6f6fa
;
-moz-text-shadow
:
0px
1px
0px
#e6f6fa
;
-webkit-text-shadow
:
0px
1px
0px
#e6f6fa
;
-webkit-box-shadow
:
1px
1px
2px
#808080
;
-moz-box-shadow
:
1px
1px
2px
#808080
;
box-shadow
:
1px
1px
2px
#808080
;
}
#email-input-fs
.submit-b
:hover
,
#local_login_buttons
.submit-b
:hover
,
#password-fs
.submit-b
:hover
,
#openid-fs
.submit-b
:hover
{
background
:
url(../default/media/images/small-button-blue.png)
repeat-x
bottom
;
}
.openid-input
{
background
:
url(../default/media/images/openid.gif)
no-repeat
;
padding-left
:
15px
;
cursor
:
pointer
;
}
.openid-login-input
{
background-position
:
center
left
;
background
:
url(../default/media/images/openid.gif)
no-repeat
0%
50%
;
padding
:
5px
5px
5px
15px
;
cursor
:
pointer
;
font-family
:
trebuchet
ms
;
font-weight
:
300
;
font-size
:
150%
;
width
:
500px
;
}
.openid-login-submit
{
height
:
40px
;
width
:
80px
;
line-height
:
40px
;
cursor
:
pointer
;
border
:
1px
solid
#777
;
font-weight
:
bold
;
font-size
:
120%
;
}
.tabbar-user
{
width
:
375px
;
}
// .user {
// padding: 5px;
// line-height: 140%;
// width: 166px;
// border: #eee 1px solid;
// margin-bottom: 5px;
// border-radius: 3px;
// -ms-border-radius: 3px;
// -moz-border-radius: 3px;
// -webkit-border-radius: 3px;
// -khtml-border-radius: 3px;
// .user-micro-info {
// color: #525252; }
// ul {
// margin: 0;
// list-style-type: none; }
// .thumb {
// clear: both;
// float: left;
// margin-right: 4px;
// display: inline; } }
// .tabbar-tags {
// width: 270px;
// margin-bottom: 15px; }
// a {
// &.medal {
// font-size: 17px;
// line-height: 250%;
// margin-right: 5px;
// color: #333;
// text-decoration: none;
// background: url(../default/media/images/medala.gif) no-repeat;
// border-left: 1px solid #eee;
// border-top: 1px solid #eee;
// border-bottom: 1px solid #ccc;
// border-right: 1px solid #ccc;
// padding: 4px 12px 4px 6px; }
// &:hover.medal {
// color: #333;
// text-decoration: none;
// background: url(../default/media/images/medala_on.gif) no-repeat;
// border-left: 1px solid #e7e296;
// border-top: 1px solid #e7e296;
// border-bottom: 1px solid #d1ca3d;
// border-right: 1px solid #d1ca3d; } }
#award-list
.user
{
float
:
left
;
margin
:
5px
;
}
.tabbar-profile
{
width
:
100%
;
margin-bottom
:
15px
;
float
:
left
;
}
// .user-profile-page {
// font-size: 13px;
// color: #525252;
// p {
// font-size: 13px;
// line-height: 1.3;
// color: #525252; }
// .avatar img {
// border: #eee 1px solid;
// padding: 5px; }
// h2 {
// padding: 10px 0px 10px 0px;
// font-family: 'yanone kaffeesatz',sans-serif; } }
.user-details
{
font-size
:
13px
;
h3
{
font-size
:
16px
;
}
}
.user-about
{
background-color
:
#eeeeee
;
height
:
200px
;
line-height
:
20px
;
overflow
:
auto
;
padding
:
10px
;
width
:
90%
;
p
{
font-size
:
13px
;
}
}
// .follow-toggle, .submit {
// border: 0 !important;
// color: #4a757f;
// font-weight: bold;
// font-size: 12px;
// height: 26px;
// line-height: 26px;
// margin-top: -2px;
// font-size: 15px;
// cursor: pointer;
// font-family: 'yanone kaffeesatz',sans-serif;
// background: url(../default/media/images/small-button-blue.png) repeat-x top;
// border-radius: 4px;
// -ms-border-radius: 4px;
// -moz-border-radius: 4px;
// -webkit-border-radius: 4px;
// -khtml-border-radius: 4px;
// text-shadow: 0px 1px 0px #e6f6fa;
// -moz-text-shadow: 0px 1px 0px #e6f6fa;
// -webkit-text-shadow: 0px 1px 0px #e6f6fa;
// -webkit-box-shadow: 1px 1px 2px #808080;
// -moz-box-shadow: 1px 1px 2px #808080;
// box-shadow: 1px 1px 2px #808080; }
// .follow-toggle:hover, .submit:hover {
// background: url(../default/media/images/small-button-blue.png) repeat-x bottom;
// text-decoration: none !important; }
// .follow-toggle {
// .follow {
// font-color: #000;
// font-style: normal; }
// .unfollow {
// div.unfollow-red {
// display: none; }
// &:hover div {
// &.unfollow-red {
// display: inline;
// color: #fff;
// font-weight: bold;
// color: #a05736; }
// &.unfollow-green {
// display: none; } } } }
.count
{
font-family
:
'yanone kaffeesatz'
,
sans-serif
;
font-size
:
200%
;
font-weight
:
700
;
color
:
#777777
;
}
.scorenumber
{
font-family
:
'yanone kaffeesatz'
,
sans-serif
;
font-size
:
35px
;
font-weight
:
800
;
color
:
#777
;
line-height
:
40px
;
margin-top
:
3px
;
}
.vote-count
{
font-family
:
arial
;
font-size
:
160%
;
font-weight
:
700
;
color
:
#777
;
}
// .answer-summary {
// display: block;
// clear: both;
// padding: 3px; }
.answer-votes
{
background-color
:
#eeeeee
;
color
:
#555555
;
float
:
left
;
font-family
:
arial
;
font-size
:
15px
;
font-weight
:
bold
;
height
:
17px
;
padding
:
2px
4px
5px
;
text-align
:
center
;
text-decoration
:
none
;
width
:
20px
;
margin-right
:
10px
;
border-radius
:
4px
;
-ms-border-radius
:
4px
;
-moz-border-radius
:
4px
;
-webkit-border-radius
:
4px
;
-khtml-border-radius
:
4px
;
}
.karma-summary
{
padding
:
5px
;
font-size
:
13px
;
h3
{
text-align
:
center
;
font-weight
:
bold
;
padding
:
5px
;
}
}
.karma-diagram
{
width
:
477px
;
height
:
300px
;
float
:
left
;
margin-right
:
10px
;
}
.karma-details
{
float
:
right
;
width
:
450px
;
height
:
250px
;
overflow-y
:
auto
;
word-wrap
:
break-word
;
p
{
margin-bottom
:
10px
;
}
}
.karma-gained
{
font-weight
:
bold
;
background
:
#eee
;
width
:
25px
;
margin-right
:
5px
;
color
:
green
;
padding
:
3px
;
display
:
block
;
float
:
left
;
text-align
:
center
;
border-radius
:
3px
;
-ms-border-radius
:
3px
;
-moz-border-radius
:
3px
;
-webkit-border-radius
:
3px
;
-khtml-border-radius
:
3px
;
}
.karma-lost
{
font-weight
:
bold
;
background
:
#eee
;
width
:
25px
;
color
:
red
;
padding
:
3px
;
display
:
block
;
margin-right
:
5px
;
float
:
left
;
text-align
:
center
;
border-radius
:
3px
;
-ms-border-radius
:
3px
;
-moz-border-radius
:
3px
;
-webkit-border-radius
:
3px
;
-khtml-border-radius
:
3px
;
}
.submit-row
{
margin-bottom
:
10px
;
}
.revision
{
margin
:
10px
0
10px
0
;
font-size
:
13px
;
color
:
#525252
;
p
{
font-size
:
13px
;
line-height
:
1
.3
;
color
:
#525252
;
}
h3
{
font-family
:
'yanone kaffeesatz'
,
sans-serif
;
font-size
:
21px
;
padding-left
:
0px
;
}
.header
{
background-color
:
#f5f5f5
;
padding
:
5px
;
cursor
:
pointer
;
}
.author
{
background-color
:
#e9f3f5
;
}
.summary
{
padding
:
5px
0
10px
0
;
span
{
background-color
:
#fde785
;
padding
:
6px
;
border-radius
:
4px
;
-ms-border-radius
:
4px
;
-moz-border-radius
:
4px
;
-webkit-border-radius
:
4px
;
-khtml-border-radius
:
4px
;
display
:
inline
;
-webkit-box-shadow
:
1px
1px
4px
#cfb852
;
-moz-box-shadow
:
1px
1px
4px
#cfb852
;
box-shadow
:
1px
1px
4px
#cfb852
;
}
}
.answerbody
{
padding
:
10px
0
5px
10px
;
}
.revision-mark
{
width
:
150px
;
text-align
:
left
;
display
:
inline-block
;
font-size
:
11px
;
overflow
:
hidden
;
.gravatar
{
float
:
left
;
margin-right
:
4px
;
padding-top
:
5px
;
}
}
.revision-number
{
font-size
:
300%
;
font-weight
:
bold
;
font-family
:
sans-serif
;
}
}
// del {
// color: #c34719;
// .post-tag {
// color: #c34719; } }
ins
{
.post-tag
,
p
{
background-color
:
#e6f0a2
;
}
background-color
:
#e6f0a2
;
}
// .vote-notification {
// z-index: 1;
// cursor: pointer;
// display: none;
// position: absolute;
// font-family: arial;
// font-size: 14px;
// font-weight: normal;
// color: white;
// background-color: #8e0000;
// text-align: center;
// padding-bottom: 10px;
// -webkit-box-shadow: 0px 2px 4px #370000;
// -moz-box-shadow: 0px 2px 4px #370000;
// box-shadow: 0px 2px 4px #370000;
// border-radius: 4px;
// -ms-border-radius: 4px;
// -moz-border-radius: 4px;
// -webkit-border-radius: 4px;
// -khtml-border-radius: 4px;
// h3 {
// background: url(../default/media/images/notification.png) repeat-x top;
// padding: 10px 10px 10px 10px;
// font-size: 13px;
// margin-bottom: 5px;
// border-top: #8e0000 1px solid;
// color: #fff;
// font-weight: normal;
// border-top-right-radius: 4px;
// border-top-left-radius: 4px;
// -moz-border-radius-topright: 4px;
// -moz-border-radius-topleft: 4px;
// -webkit-border-top-left-radius: 4px;
// -webkit-border-top-right-radius: 4px; }
// a {
// color: #fb7321;
// text-decoration: underline;
// font-weight: bold; } }
// #ground {
// width: 100%;
// clear: both;
// border-top: 1px solid #000;
// padding: 6px 0 0 0;
// background: #16160f;
// font-size: 16px;
// font-family: 'yanone kaffeesatz',sans-serif;
// p {
// margin-bottom: 0; } }
.footer-links
{
color
:
#eee
;
text-align
:
left
;
width
:
500px
;
float
:
left
;
a
{
color
:
#e7e8a8
;
}
}
.powered-link
{
width
:
500px
;
float
:
left
;
text-align
:
left
;
a
{
color
:
#8ebcc7
;
}
}
.copyright
{
color
:
#616161
;
width
:
450px
;
float
:
right
;
text-align
:
right
;
a
{
color
:
#8ebcc7
;
}
img
.license-logo
{
margin
:
6px
0px
20px
10px
;
float
:
right
;
}
}
.notify-me
{
float
:
left
;
}
span
{
&
.text-counter
{
margin-right
:
20px
;
}
// &.form-error {
// color: #990000;
// font-weight: normal;
// margin-left: 5px; }
}
p
.form-item
{
margin
:
0px
;
}
// .deleted {
// background: #f4e7e7 none repeat scroll 0 0; }
.form-row
{
line-height
:
25px
;
}
table
{
&
.form-as-table
{
margin-top
:
5px
;
ul
{
list-style-type
:
none
;
display
:
inline
;
}
li
{
display
:
inline
;
}
td
{
text-align
:
right
;
}
th
{
text-align
:
left
;
font-weight
:
normal
;
}
}
&
.ab-subscr-form
,
&
.ab-tag-filter-form
{
width
:
45em
;
}
}
.submit-row
{
line-height
:
30px
;
padding-top
:
10px
;
display
:
block
;
clear
:
both
;
}
.errors
{
line-height
:
20px
;
color
:
red
;
}
.error
{
color
:
darkred
;
margin
:
0
;
font-size
:
10px
;
}
label
.retag-error
{
color
:
darkred
;
padding-left
:
5px
;
font-size
:
10px
;
}
.fieldset
{
border
:
none
;
margin-top
:
10px
;
padding
:
10px
;
}
// span.form-error {
// color: #990000;
// font-size: 90%;
// font-weight: normal;
// margin-left: 5px; }
.favorites-empty
{
width
:
32px
;
height
:
45px
;
float
:
left
;
}
.user-info-table
{
margin-bottom
:
10px
;
border-spacing
:
0
;
}
.user-stats-table
.narrow
{
width
:
660px
;
}
.narrow
.summary
h3
{
padding
:
0px
;
margin
:
0px
;
}
.relativetime
{
font-weight
:
bold
;
text-decoration
:
none
;
}
// .narrow .tags {
// float: left; }
.user-action-1
{
font-weight
:
bold
;
color
:
#333
;
}
.user-action-2
{
font-weight
:
bold
;
color
:
#ccc
;
}
.user-action-3
,
.user-action-4
{
color
:
#333
;
}
.user-action-5
,
.user-action-6
{
color
:
darkred
;
}
.user-action-7
{
color
:
#333
;
}
.user-action-8
{
padding
:
3px
;
font-weight
:
bold
;
background-color
:
#ccc
;
color
:
#763333
;
}
.revision-summary
{
background-color
:
#fffe9b
;
padding
:
2px
;
}
.question-title-link
a
{
font-weight
:
bold
;
color
:
#0077cc
;
}
.answer-title-link
a
{
color
:
#333
;
}
.post-type-1
a
,
.post-type-3
a
,
.post-type-5
a
{
font-weight
:
bold
;
}
.post-type-2
a
,
.post-type-4
a
,
.post-type-6
a
,
.post-type-8
a
{
color
:
#333
;
}
.hilite
,
.hilite1
{
background-color
:
#ff0
;
}
.hilite2
{
background-color
:
#f0f
;
}
.hilite3
{
background-color
:
#0ff
;
}
// .gold, .badge1 {
// color: #ffcc00; }
// .silver, .badge2 {
// color: #cccccc; }
// .bronze, .badge3 {
// color: #cc9933; }
.score
{
font-weight
:
800
;
color
:
#333
;
}
a
{
&
.comment
{
background
:
#eee
;
color
:
#993300
;
padding
:
5px
;
}
&
.offensive
{
color
:
#999
;
}
}
.message
{
h1
{
padding-top
:
0px
;
font-size
:
15px
;
}
p
{
margin-bottom
:
0px
;
}
}
p
.space-above
{
margin-top
:
10px
;
}
.warning
{
color
:
red
;
}
button
:
:-
moz-focus-inner
{
padding
:
0
;
border
:
none
;
}
// .submit {
// cursor: pointer;
// background-color: #d4d0c8;
// height: 30px;
// border: 1px solid #777777;
// font-weight: bold;
// font-size: 120%;
// &:hover {
// text-decoration: underline; }
// &.small {
// margin-right: 5px;
// height: 20px;
// font-weight: normal;
// font-size: 12px;
// padding: 1px 5px;
// &:hover {
// text-decoration: none; } } }
.question-page
a
.submit
{
display
:
-
moz-inline-stack
;
display
:
inline-block
;
line-height
:
30px
;
padding
:
0
5px
;
*
display
:
inline
;
}
.noscript
{
position
:
fixed
;
top
:
0px
;
left
:
0px
;
width
:
100%
;
z-index
:
100
;
padding
:
5px
0
;
text-align
:
center
;
font-family
:
sans-serif
;
font-size
:
120%
;
font-weight
:
bold
;
color
:
#ffffff
;
background-color
:
#ae0000
;
}
.big
{
font-size
:
14px
;
}
.strong
{
font-weight
:
bold
;
}
.orange
{
color
:
#d64000
;
font-weight
:
bold
;
}
.grey
{
color
:
#808080
;
}
.about
div
{
padding
:
10px
5px
10px
5px
;
border-top
:
1px
dashed
#aaaaaa
;
}
.highlight
{
background-color
:
#fff8c6
;
}
.nomargin
{
margin
:
0
;
}
.margin-bottom
{
margin-bottom
:
10px
;
}
.margin-top
{
margin-top
:
10px
;
}
.inline-block
{
display
:
inline-block
;
}
.action-status
{
margin
:
0
;
border
:
none
;
text-align
:
center
;
line-height
:
10px
;
font-size
:
12px
;
padding
:
0
;
span
{
padding
:
3px
5px
3px
5px
;
background-color
:
#fff380
;
font-weight
:
normal
;
-moz-border-radius
:
5px
;
-khtml-border-radius
:
5px
;
-webkit-border-radius
:
5px
;
}
}
.list-table
td
{
vertical-align
:
top
;
}
table
.form-as-table
{
.errorlist
{
display
:
block
;
margin
:
0
;
padding
:
0
0
0
5px
;
text-align
:
left
;
font-size
:
10px
;
color
:
darkred
;
}
input
{
display
:
inline
;
margin-left
:
4px
;
}
th
{
vertical-align
:
bottom
;
padding-bottom
:
4px
;
}
}
.form-row-vertical
{
margin-top
:
8px
;
display
:
block
;
label
{
margin-bottom
:
3px
;
display
:
block
;
}
}
.text-align-right
{
text-align
:
center
;
}
ul
.form-horizontal-rows
{
list-style
:
none
;
margin
:
0
;
li
{
position
:
relative
;
height
:
40px
;
}
label
{
display
:
inline-block
;
}
ul
.errorlist
{
list-style
:
none
;
color
:
darkred
;
font-size
:
10px
;
line-height
:
10px
;
position
:
absolute
;
top
:
2px
;
left
:
180px
;
text-align
:
left
;
margin
:
0
;
li
{
height
:
10px
;
}
}
label
{
position
:
absolute
;
left
:
0px
;
bottom
:
6px
;
margin
:
0px
;
line-height
:
12px
;
font-size
:
12px
;
}
li
input
{
position
:
absolute
;
bottom
:
0px
;
left
:
180px
;
margin
:
0px
;
}
}
.narrow
.summary
{
float
:
left
;
}
.user-profile-tool-links
{
font-weight
:
bold
;
vertical-align
:
top
;
}
// ul {
// &.post-tags {
// margin-left: 3px;
// li {
// margin-top: 4px;
// margin-bottom: 3px; } }
// &.post-retag {
// margin-bottom: 0px;
// margin-left: 5px; } }
// #question-controls .tags {
// margin: 0 0 3px 0; }
// #tagselector {
// padding-bottom: 2px;
// margin-bottom: 0; }
// #related-tags {
// padding-left: 3px; }
#hideignoredtagscontrol
{
margin
:
5px
0
0
0
;
label
{
font-size
:
12px
;
color
:
#666
;
}
}
#hideignoredtagscb
{
margin
:
0
2px
0
1px
;
}
#recaptcha_widget_div
{
width
:
318px
;
float
:
left
;
clear
:
both
;
}
p
.signup_p
{
margin
:
20px
0px
0px
0px
;
}
.simple-subscribe-options
ul
{
list-style
:
none
;
list-style-position
:
outside
;
margin
:
0
;
}
.wmd-preview
{
a
{
color
:
#1b79bd
;
}
li
{
margin-bottom
:
7px
;
font-size
:
14px
;
}
}
// .search-result-summary {
// font-weight: bold;
// font-size: 18px;
// line-height: 22px;
// margin: 0px 0px 0px 0px;
// padding: 2px 0 0 0;
// float: left; }
.faq-rep-item
{
text-align
:
right
;
padding-right
:
5px
;
}
.user-info-table
.gravatar
{
margin
:
0
;
}
#responses
{
clear
:
both
;
line-height
:
18px
;
margin-bottom
:
15px
;
div
.face
{
float
:
left
;
text-align
:
center
;
width
:
54px
;
padding
:
3px
;
overflow
:
hidden
;
}
}
.response-parent
{
margin-top
:
18px
;
strong
{
font-size
:
20px
;
}
}
.re
{
min-height
:
57px
;
clear
:
both
;
margin-top
:
10px
;
}
#responses
input
{
float
:
left
;
}
#re_tools
{
margin-bottom
:
10px
;
}
#re_sections
{
margin-bottom
:
6px
;
.on
{
font-weight
:
bold
;
}
}
.avatar-page
{
ul
{
list-style
:
none
;
}
li
{
display
:
inline
;
}
}
// .user-profile-page {
// .avatar p {
// margin-bottom: 0px; }
// .tabbar a#stats {
// margin-left: 0; }
// img.gravatar {
// margin: 2px 0 3px 0; }
// h3 {
// padding: 0;
// margin-top: -3px; } }
.userlist
{
font-size
:
13px
;
}
img
.flag
{
border
:
1px
solid
#eee
;
vertical-align
:
text-top
;
}
.main-page
img
.flag
{
vertical-align
:
text-bottom
;
}
a
.edit
{
padding-left
:
3px
;
color
:
#145bff
;
}
.str
{
color
:
#080
;
}
.kwd
{
color
:
#008
;
}
.com
{
color
:
#800
;
}
.typ
{
color
:
#606
;
}
.lit
{
color
:
#066
;
}
.pun
{
color
:
#660
;
}
.pln
{
color
:
#000
;
}
// .tag {
// color: #008; }
.atn
{
color
:
#606
;
}
.atv
{
color
:
#080
;
}
.dec
{
color
:
#606
;
}
pre
.prettyprint
{
clear
:
both
;
padding
:
3px
;
border
:
0px
solid
#888
;
}
// @media print {
// .str {
// color: #060; }
// .kwd {
// color: #006;
// font-weight: bold; }
// .com {
// color: #600;
// font-style: italic; }
// .typ {
// color: #404;
// font-weight: bold; }
// .lit {
// color: #044; }
// .pun {
// color: #440; }
// .pln {
// color: #000; }
// .tag {
// color: #006;
// font-weight: bold; }
// .atn {
// color: #404; }
// .atv {
// color: #060; } }
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment