Retire this repo

The opendev project stopped runnin askbot a while ago. This theme is
no longer needed or used. To simplify things for us we are taking the
extra step of retiring this repo.

Change-Id: Ia45819d809cf1fde20d6d8cdd3d8f57a0341b594
This commit is contained in:
Clark Boylan 2022-02-17 13:04:07 -08:00
parent 66b357ad04
commit 986411efc5
18 changed files with 9 additions and 1862 deletions

2
.gitignore vendored
View File

@ -1,2 +0,0 @@
.sass-cache
.*.swp

View File

@ -1,6 +0,0 @@
source "https://rubygems.org"
# gem "rails"
gem 'sass', '~> 3.2.14'
gem 'sass-globbing', '~> 1.1.0'
gem 'compass', '>= 0.12.2'

202
LICENSE
View File

@ -1,202 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

9
README.md Normal file
View File

@ -0,0 +1,9 @@
This project is no longer maintained.
The contents of this repository are still available in the Git
source code management system. To see the contents of this
repository before it reached its end of life, please check out the
previous commit with "git checkout HEAD^1".
For any further questions, please email
service-discuss@lists.opendev.org or join #opendev on OFTC.

View File

View File

@ -1,38 +0,0 @@
# Copyright 2013 OpenStack Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# Require any additional compass plugins here.
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "os/media/style"
sass_dir = "os/media/sass"
images_dir = "os/media/images"
#javascripts_dir = "javascripts"
# You can select your preferred output style here (can be overridden via the command line):
# output_style = :expanded or :nested or :compact or :compressed
# To enable relative paths to assets via compass helper functions. Uncomment:
# relative_assets = true
# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false
# If you prefer the indented syntax, you might want to regenerate this
# project again passing --syntax sass, or you can uncomment this:
# preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass

View File

@ -1,233 +0,0 @@
import settings
import pickle
from askbot import models
from askbot.conf import settings as askbot_settings
from askbot.utils.console import ProgressBar
from askbot.utils.slug import slugify
from django.conf import settings as django_settings
from django.core.management.base import BaseCommand, CommandError
from django.db import transaction
from django.forms import EmailField, ValidationError
from datetime import datetime
from django.db.utils import IntegrityError
from django.utils import translation
import sys
from launchpadlib.launchpad import Launchpad
from launchpadlib.uris import LPNET_SERVICE_ROOT
def no_credential():
print "Can't proceed without Launchpad credential."
sys.exit()
"""Logs into Launchpad """
#cachedir = '/Users/evgenyfadeev/.launchadlib/cache'
launchpad = Launchpad.login_with(
'Extract Answers',
version='devel',
credential_save_failed=no_credential
)
user_mapping = {}
def get_questions(project_name):
"""Retrieves all questions in project_name on Launchpad"""
project = launchpad.projects[project_name]
return project.searchQuestions()
def get_user_data(user_link):
"""returns dictionary with keys:
* username
* confirmed_email_addresses
"""
# check out user cache first
if user_link in user_mapping:
return user_mapping[user_link]
username = user_link.split('~')[1]
user_data = {
'username': username,
'confirmed_email_addresses': list()
}
lp_user = launchpad.people[username]
for email in lp_user.confirmed_email_addresses:
# search for the user based on their email
email = str(email).split('/')[-1]
user_data['confirmed_email_addresses'].append(email)
user_mapping[user_link] = user_data
return user_data
def get_or_create_user(user_data):
"""returns Askbot user.
If user corresponding to the given data does not exist,
it is created
"""
username = user_data['username']
#check the cache by user name
if username in user_mapping:
return user_mapping[username]
try:
# find using identical username first
user = models.User.objects.get(username=username)
except models.User.DoesNotExist:
# we haven't created the user yet
try:
user = models.User.objects.filter(email__in=user_data['confirmed_email_addresses'])[0]
except:
user = models.User(username=username)
if len(user_data['confirmed_email_addresses']):
user.email = user_data['confirmed_email_addresses'][0]
user.save()
# cache the users we've seen so far to avoid API calls
user_mapping[username] = user
return user
def save_questions(questions, project_name, data_filename):
"""gets data from the launchpad answers and then
saves it in the python pickled format
so that the data can be uploaded elsewhere
"""
#create data file if not exists
data_file = open(data_filename, 'a+')
data_file.close()
#read the data file
try:
data_file = open(data_filename, 'r')
question_data = pickle.load(data_file)
data_file.close()
except EOFError:
question_data = dict()
try:
for question in questions:
print '"' + question.title + '",' + str(question.date_created)
if question.self_link in question_data:
continue
try:
responses = question.messages_collection.entries
print str(len(responses))
except AttributeError:
print "No Answers for question" + str(question)
responses = None
question_datum = {
'owner': get_user_data(question.owner_link),
'self_link': question.self_link,
'title': question.title,
'body_text': question.description,
'timestamp': question.date_created.replace(tzinfo=None),
'tags': project_name + ' migrated'
}
question_data[question.self_link] = question_datum
answer_data = list()
for response in responses:
try:
timestamp=datetime.strptime(response['date_created'][0:-6],
'%Y-%m-%dT%H:%M:%S.%f')
except ValueError:
#some timestamps don't have the millisectons, thanks LP!
timestamp=datetime.strptime(response['date_created'][0:-6],
'%Y-%m-%dT%H:%M:%S')
if 'content' in response and len(response['content']) > 1:
#for some reason, Launchpad allows blank answers
answer = {
'owner': get_user_data(response['owner_link']),
'body_text': response['content'],
'timestamp': timestamp
}
answer_data.append(answer)
question_datum['responses'] = answer_data
finally:
data_file = open(data_filename, 'w')
pickle.dump(question_data, data_file)
data_file.close()
def import_questions(data_filename):
"""loops through all items in launchpad Question format, and
adds them as askbot Questions and Answers"""
status_file = open('write.status', 'a')
try:
import_log = pickle.load(status_file)
if not isinstance(import_log, dict):
import_log = {}
except:
import_log = {}
data_file = open(data_filename, 'r')
questions = pickle.load(data_file)
for question in questions.values():
print '"' + question['title'] + '",' + str(question['timestamp'])
try:
responses = question['responses']
print str(len(responses))
except AttributeError:
responses = None
print "No Answers"
if question['self_link'] in import_log:
print "Already imported - skipping the above question"
continue
# post the question
question_user = get_or_create_user(question['owner'])
try:
ab_question = question_user.post_question(
title=question['title'],
body_text=question['body_text'],
timestamp=question['timestamp'],
tags=question['tags']
)
except IntegrityError:
# the question already exists, but we didn't find it somehow
print "Had an IntegrityError"
continue
for response in question['responses']:
if len(response['body_text']) == 0:
continue
response_user = get_or_create_user(response['owner'])
#for some reason, Launchpad allows blank answers
answer = response_user.post_answer(
question=ab_question,
body_text=response['body_text'],
timestamp=response['timestamp']
)
import_log[question['self_link']] = 1 #mark as imported
status_file.close()
status_file = open('write.status', 'w')
pickle.dump(import_log, status_file)
def main_read():
questions = get_questions('nova')
save_questions(questions, 'nova', 'launchpad.dat')
print str(len(questions)) + " found"
def main_write():
translation.activate('en')
setting_backup = askbot_settings.LIMIT_ONE_ANSWER_PER_USER
askbot_settings.update('LIMIT_ONE_ANSWER_PER_USER', False)
import_questions('launchpad.dat')
askbot_settings.update('LIMIT_ONE_ANSWER_PER_USER', setting_backup)

View File

@ -1,73 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>Site Maintenance | OpenStack Open Source Cloud Computing Software</title>
<!-- Bootstrap Core CSS -->
<link href="https://www.openstack.org/errors_pages/ui/404/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="https://www.openstack.org/errors_pages/ui/404/css/combined.css" rel="stylesheet">
<!-- Fonts -->
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300,400,700' rel='stylesheet' type='text/css'>
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- Page-specific CSS -->
</head>
<body>
<!-- Begin Page Content -->
<div class="container">
<div class="row">
<div class="col-lg-12 four-o-four-wrapper">
<h1>Site is down for maintenance</h1>
<p>We expect to be back in an hour. Thanks for your patience.
</p>
<p>Maybe <a href="http://openstack.org">go home</a> or try one of these instead.
</p>
<div class="four-o-four-links">
<a href="/software">Software</a>
<a href="/users">Users</a>
<a href="/community">Community</a>
<a href="/marketplace">Marketplace</a>
<a href="/events">Events</a>
<a href="/blog">Blog</a>
<a href="http://docs.openstack.org">Docs</a>
</div>
</div>
</div>
<!-- End Page Content -->
<!-- jQuery Version 1.11.0 -->
<script src="/themes/openstack/javascript/jquery.min.js"></script>
<!-- Bootstrap Core JavaScript -->
<script src="/themes/openstack/javascript/bootstrap.min.js"></script>
<!-- The rest of the JS -->
<script src="/themes/openstack/javascript/navigation.js"></script>
<script src="/themes/openstack/javascript/openstack-home.js"></script>
<!-- Javascript for page -->
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1,469 +0,0 @@
/*
Copyright 2013 OpenStack Foundation
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
*/
@import "compass/css3";
$body-font: 'Helvetica Neue', Arial, Helvetica, sans-serif;
$heading-font: 'PT Sans', serif;
body,
p,
.short-summary .counts,
#footer ul,
.short-summary .userinfo {
font-family: $body-font;
}
#secondaryHeader,
#questionCount,
#header,
#footer h3,
h1,
h1.section-title,
.box h2,
.question-page h1,
.short-summary h2,
.short-summary .counts .item-count,
.tag-right,
.tabBar,
.question-page .vote-number {
font-family: $heading-font;
}
.question-page {
.post-update-info {
line-height: 12px;
}
}
.post-update-info .user-info {
margin-top: 0px;
}
.user-profile-page ul.avatars .avatar-delete {
line-height: 7px;
padding: 8px;
}
.user-info-table .js-avatar {
height: 128px;
width: 128px;
}
.js-avatar {
height: 48px;
width: 48px;
}
.inbox .js-avatar {
height: 16px;
width: 16px;
}
.user-card {
.js-avatar-box {
margin-right: 10px;
}
.js-avatar {
height: 32px;
width: 32px;
}
}
.users-page .user-card .js-avatar-box {
margin: 3px 6px 0 0;
}
.comment-controls .js-avatar {
height: 16px;
width: 16px;
}
#header {
background: #e4eef1;
border-top: 3px solid #255e6e;
@include box-shadow(1px 1px 1px 1px #ccc);
}
.openid-signin {
#metaNav a.signin {
background: none;
@include box-shadow(0 0 0 0);
}
}
#metaNav {
position: absolute;
left: 200px;
bottom: 25px;
width: 750px;
a {
color: #255e6e;
font-size: 16px;
line-height: 16px;
height: 16px;
@include text-shadow(#fff 0 1px 1px);
}
a.signin {
background: #e8d895;
padding: 5px 8px;
@include border-radius(4px);
@include box-shadow(0 0 2px 2px white);
}
a.on {
font-weight: normal;
color: #e4eef1;
background: #255e6e !important;
@include border-radius(5px);
@include text-shadow(0 0 0);
@include box-shadow(0 0 2px 2px white);
}
#navTags,
#navBadges,
#navUsers,
#navGroups,
.help {
background: none;
padding: 3px 10px 6px 10px;
margin: 0 0 0 30px;
}
.dropdown,
a {
display: inline;
float: none;
padding: 0;
margin: 5px 0 0 0;
}
span.dropdown-toggle {
padding: 10px;
border-left: 1px solid #e4eef1;
/*background: url(../images/sprites.png) no-repeat -7px -242px;*/
position: relative;
&.lang-nav {
padding: 0;
}
}
span.dropdown-toggle:hover {
background: #e4eef1;
/*background: url(../images/sprites.png) no-repeat -7px -274px;*/
.dropdown-menu {
background: #e4eef1;
border-left: 1px solid #e4eef1;
display: block;
left: -1px;
padding: 4px 0 10px 0;
top: 36px;
}
&.lang-nav {
.dropdown-menu {
left: -14px;
min-width: auto !important;
top: 27px;
}
}
}
.dropdown-menu {
background: #e4eef1;
left: 26px;
top: 22px;
li {
line-height: 1.9;
padding: 0 0 0 13px;
margin: 0;
img {
margin-bottom: 3px;
}
}
li:hover {
background: #666 !important;
a {
color: lighten(#255e6e, 50%);
}
}
a {
margin: 0;
padding: 0;
@include text-shadow(none);
}
a:hover {
background: inherit;
text-decoration: none;
color: lighten(#255e6e, 50%);
@include text-shadow(none);
}
}
}
#userToolsNav {
.lang-nav {
float: right;
color: #255e6e;
font-size: 16px;
line-height: 16px;
height: 30px;
position: absolute !important;
right: 0;
ul, li {
background: #e4eef1;
}
a {
color: #255e6e;
background: transparent;
&:hover {
color: lighten(#255e6e, 50%);
}
}
.dropdown-menu li:hover {
background: transparent !important;
}
}
}
#metaNav a:hover {
color: #255e6e;
}
#header.with-logo #userToolsNav {
bottom: 19px;
}
#secondaryHeader {
background: #fff;
border: none;
margin-bottom: 7px;
td.search-bar {
padding-right: 62px;
}
}
.scope-selector {
font-size: 16px;
height: 37px;
border-bottom: 3px solid white;
&.on,
&:hover {
background: none;
border-bottom: 3px solid;
color: #cf2f19;
text-decoration: none;
@include transition(0.07s, ease);
}
&:hover {
color: #264D69;
}
&.ask-message:hover {
color: #7a7a6b;
border: none;
}
&:first-child {
margin-left: 0;
}
}
#homeButton {
display: none;
}
#askButton {
height: 42px;
font-size: 15px;
line-height: 42px;
padding: 0;
width: 168px;
@include box-shadow(0 0 0);
}
.tabBar {
background: none;
}
#logo img {
height: 56px;
margin-left: -10px;
}
#searchBar {
@include box-shadow(inset #eee 1px 1px 2px 1px);
}
.search-drop-menu {
position: relative;
bottom: -42px;
&.waiting {
bottom: -42px;
height: 25px;
}
.footer button {
padding: 2px 6px 3px;
@include background(linear-gradient(white, #F3F3F3 5%, rgb(245, 133, 12)));
@include box-shadow(0 0 2px 2px white);
@include text-shadow(0 0 0);
}
}
#ContentRight {
margin-top: -58px;
margin-bottom: 58px;
}
.main-page,
.question-page {
#ContentRight {
background: white;
padding-top: 2px;
}
}
#ContentLeft {
padding-bottom: 0;
}
.box {
h2,
.contributorback {
background: none;
text-align: left;
}
.inputs {
#interestingTagInput,
#ignoredTagInput,
#subscribedTagInput,
#ab-tag-search {
width: 128px;
height: 23px;
line-height: 23px;
}
}
}
input[type="submit"].searchBtn,
input.cancelSearchBtn {
border: 0;
display: none;
height: 0;
margin: 0;
padding: 0;
right: -500px;
}
#searchBar input[type="button"].cancelSearchBtn {
right: 8px;
border: none !important;
color: #888 !important;
background: transparent !important;
font-size: 23px !important;
height: 32px !important;
line-height: 36px !important;
width: 32px !important;
}
button,
input[type="submit"],
input[type="button"],
input[type="reset"],
.button {
font-family: $heading-font;
font-weight: normal;
border: 1px solid #e2e2e2 !important;
padding: 4px 15px;
color: #404040 !important;
text-decoration: none!important;
font-size: 12.5px;
background: #FFFFFF;
@include background(linear-gradient(#FFFFFF 0%, #F3F3F3 50%, #EBEBEB 100%));
@include box-shadow(0px 1px 1px rgba(0,0,0,.5));
@include text-shadow(#fff 0px 1px 1px);
@include border-radius(3px);
border-bottom-color: #a0a0a0 !important;
border-right-color: #bababa !important;
border-left-color: #bababa !important;
}
.comments {
input[type="submit"],
.controls a.button {
color: #4b4b4b !important;
border: none !important;
&:hover {
text-decoration: underline;
}
}
input[type="submit"] {
color: #1b71bd;
}
}
input[type="submit"].link {
border: none !important;
color: 4b4b4b !important;
}
#footer {
margin-top: 10px;
.span-4,
.span-8 {
margin: 0;
}
.span-4 {
width: 17%;
}
.span-8 {
width: 32%
}
a,
a:active,
a:hover,
a:visited,
p {
color: #666;
font-size: 12px;
line-height: 18px;
}
p {
margin-top: 14px;
}
h3 {
color: #de0000;
font-size: 16px;
margin: 0 0 8px 0;
padding: 0;
}
ul {
list-style: none;
margin: 0;
}
textarea {
display: block;
margin: 12px 0 10px;
width: 80%;
}
}
.pager,
.paginator {
margin-bottom: 0;
padding-bottom: 0;
}
.post-comments .submit {
line-height: inherit;
}
.question-instructions {
margin-top: -7px;
}
body.lang-zh_CN,
body.lang-zh-cn,
body.lang-zh {
.box {
.inputs {
#interestingTagInput,
#ignoredTagInput,
#subscribedTagInput,
#ab-tag-search {
width: 121px;
}
}
}
.scopes-True-True-True {
#searchBar,
.search-drop-menu {
margin-left: 185px;
}
}
.scopes-True-True-False {
#searchBar,
.search-drop-menu {
margin-left: 114px;
}
}
}

View File

@ -1,588 +0,0 @@
/*
Copyright 2013 OpenStack Foundation
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
*/
/* line 20, ../sass/extra.scss */
body,
p,
.short-summary .counts,
#footer ul,
.short-summary .userinfo {
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
}
/* line 27, ../sass/extra.scss */
#secondaryHeader,
#questionCount,
#header,
#footer h3,
h1,
h1.section-title,
.box h2,
.question-page h1,
.short-summary h2,
.short-summary .counts .item-count,
.tag-right,
.tabBar,
.question-page .vote-number {
font-family: "PT Sans", serif;
}
/* line 43, ../sass/extra.scss */
.question-page .post-update-info {
line-height: 12px;
}
/* line 47, ../sass/extra.scss */
.post-update-info .user-info {
margin-top: 0px;
}
/* line 50, ../sass/extra.scss */
.user-profile-page ul.avatars .avatar-delete {
line-height: 7px;
padding: 8px;
}
/* line 54, ../sass/extra.scss */
.user-info-table .js-avatar {
height: 128px;
width: 128px;
}
/* line 58, ../sass/extra.scss */
.js-avatar {
height: 48px;
width: 48px;
}
/* line 62, ../sass/extra.scss */
.inbox .js-avatar {
height: 16px;
width: 16px;
}
/* line 67, ../sass/extra.scss */
.user-card .js-avatar-box {
margin-right: 10px;
}
/* line 70, ../sass/extra.scss */
.user-card .js-avatar {
height: 32px;
width: 32px;
}
/* line 75, ../sass/extra.scss */
.users-page .user-card .js-avatar-box {
margin: 3px 6px 0 0;
}
/* line 78, ../sass/extra.scss */
.comment-controls .js-avatar {
height: 16px;
width: 16px;
}
/* line 82, ../sass/extra.scss */
#header {
background: #e4eef1;
border-top: 3px solid #255e6e;
-moz-box-shadow: 1px 1px 1px 1px #ccc;
-webkit-box-shadow: 1px 1px 1px 1px #ccc;
box-shadow: 1px 1px 1px 1px #ccc;
}
/* line 88, ../sass/extra.scss */
.openid-signin #metaNav a.signin {
background: none;
-moz-box-shadow: 0 0 0 0;
-webkit-box-shadow: 0 0 0 0;
box-shadow: 0 0 0 0;
}
/* line 93, ../sass/extra.scss */
#metaNav {
position: absolute;
left: 200px;
bottom: 25px;
width: 750px;
}
/* line 99, ../sass/extra.scss */
#metaNav a {
color: #255e6e;
font-size: 16px;
line-height: 16px;
height: 16px;
text-shadow: #fff 0 1px 1px;
}
/* line 107, ../sass/extra.scss */
#metaNav a.signin {
background: #e8d895;
padding: 5px 8px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: 0 0 2px 2px white;
-webkit-box-shadow: 0 0 2px 2px white;
box-shadow: 0 0 2px 2px white;
}
/* line 114, ../sass/extra.scss */
#metaNav a.on {
font-weight: normal;
color: #e4eef1;
background: #255e6e !important;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
text-shadow: 0 0 0;
-moz-box-shadow: 0 0 2px 2px white;
-webkit-box-shadow: 0 0 2px 2px white;
box-shadow: 0 0 2px 2px white;
}
/* line 123, ../sass/extra.scss */
#metaNav #navTags,
#metaNav #navBadges,
#metaNav #navUsers,
#metaNav #navGroups,
#metaNav .help {
background: none;
padding: 3px 10px 6px 10px;
margin: 0 0 0 30px;
}
/* line 133, ../sass/extra.scss */
#metaNav .dropdown,
#metaNav a {
display: inline;
float: none;
padding: 0;
margin: 5px 0 0 0;
}
/* line 140, ../sass/extra.scss */
#metaNav span.dropdown-toggle {
padding: 10px;
border-left: 1px solid #e4eef1;
/*background: url(../images/sprites.png) no-repeat -7px -242px;*/
position: relative;
}
/* line 145, ../sass/extra.scss */
#metaNav span.dropdown-toggle.lang-nav {
padding: 0;
}
/* line 149, ../sass/extra.scss */
#metaNav span.dropdown-toggle:hover {
background: #e4eef1;
/*background: url(../images/sprites.png) no-repeat -7px -274px;*/
}
/* line 152, ../sass/extra.scss */
#metaNav span.dropdown-toggle:hover .dropdown-menu {
background: #e4eef1;
border-left: 1px solid #e4eef1;
display: block;
left: -1px;
padding: 4px 0 10px 0;
top: 36px;
}
/* line 161, ../sass/extra.scss */
#metaNav span.dropdown-toggle:hover.lang-nav .dropdown-menu {
left: -14px;
min-width: auto !important;
top: 27px;
}
/* line 168, ../sass/extra.scss */
#metaNav .dropdown-menu {
background: #e4eef1;
left: 26px;
top: 22px;
}
/* line 172, ../sass/extra.scss */
#metaNav .dropdown-menu li {
line-height: 1.9;
padding: 0 0 0 13px;
margin: 0;
}
/* line 176, ../sass/extra.scss */
#metaNav .dropdown-menu li img {
margin-bottom: 3px;
}
/* line 180, ../sass/extra.scss */
#metaNav .dropdown-menu li:hover {
background: #666 !important;
}
/* line 182, ../sass/extra.scss */
#metaNav .dropdown-menu li:hover a {
color: #aed8e4;
}
/* line 186, ../sass/extra.scss */
#metaNav .dropdown-menu a {
margin: 0;
padding: 0;
text-shadow: none;
}
/* line 191, ../sass/extra.scss */
#metaNav .dropdown-menu a:hover {
background: inherit;
text-decoration: none;
color: #aed8e4;
text-shadow: none;
}
/* line 201, ../sass/extra.scss */
#userToolsNav .lang-nav {
float: right;
color: #255e6e;
font-size: 16px;
line-height: 16px;
height: 30px;
position: absolute !important;
right: 0;
}
/* line 209, ../sass/extra.scss */
#userToolsNav .lang-nav ul, #userToolsNav .lang-nav li {
background: #e4eef1;
}
/* line 212, ../sass/extra.scss */
#userToolsNav .lang-nav a {
color: #255e6e;
background: transparent;
}
/* line 215, ../sass/extra.scss */
#userToolsNav .lang-nav a:hover {
color: #aed8e4;
}
/* line 219, ../sass/extra.scss */
#userToolsNav .lang-nav .dropdown-menu li:hover {
background: transparent !important;
}
/* line 225, ../sass/extra.scss */
#metaNav a:hover {
color: #255e6e;
}
/* line 228, ../sass/extra.scss */
#header.with-logo #userToolsNav {
bottom: 19px;
}
/* line 231, ../sass/extra.scss */
#secondaryHeader {
background: #fff;
border: none;
margin-bottom: 7px;
}
/* line 235, ../sass/extra.scss */
#secondaryHeader td.search-bar {
padding-right: 62px;
}
/* line 239, ../sass/extra.scss */
.scope-selector {
font-size: 16px;
height: 37px;
border-bottom: 3px solid white;
}
/* line 243, ../sass/extra.scss */
.scope-selector.on, .scope-selector:hover {
background: none;
border-bottom: 3px solid;
color: #cf2f19;
text-decoration: none;
-moz-transition: 0.07s, ease;
-o-transition: 0.07s, ease;
-webkit-transition: 0.07s, ease;
transition: 0.07s, ease;
}
/* line 251, ../sass/extra.scss */
.scope-selector:hover {
color: #264D69;
}
/* line 254, ../sass/extra.scss */
.scope-selector.ask-message:hover {
color: #7a7a6b;
border: none;
}
/* line 258, ../sass/extra.scss */
.scope-selector:first-child {
margin-left: 0;
}
/* line 262, ../sass/extra.scss */
#homeButton {
display: none;
}
/* line 265, ../sass/extra.scss */
#askButton {
height: 42px;
font-size: 15px;
line-height: 42px;
padding: 0;
width: 168px;
-moz-box-shadow: 0 0 0;
-webkit-box-shadow: 0 0 0;
box-shadow: 0 0 0;
}
/* line 273, ../sass/extra.scss */
.tabBar {
background: none;
}
/* line 276, ../sass/extra.scss */
#logo img {
height: 56px;
margin-left: -10px;
}
/* line 280, ../sass/extra.scss */
#searchBar {
-moz-box-shadow: inset #eee 1px 1px 2px 1px;
-webkit-box-shadow: inset #eee 1px 1px 2px 1px;
box-shadow: inset #eee 1px 1px 2px 1px;
}
/* line 283, ../sass/extra.scss */
.search-drop-menu {
position: relative;
bottom: -42px;
}
/* line 286, ../sass/extra.scss */
.search-drop-menu.waiting {
bottom: -42px;
height: 25px;
}
/* line 290, ../sass/extra.scss */
.search-drop-menu .footer button {
padding: 2px 6px 3px;
background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iNSUiIHN0b3AtY29sb3I9IiNmM2YzZjMiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNTg1MGMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(5%, #f3f3f3), color-stop(100%, #f5850c));
background: -moz-linear-gradient(#ffffff, #f3f3f3 5%, #f5850c);
background: -webkit-linear-gradient(#ffffff, #f3f3f3 5%, #f5850c);
background: linear-gradient(#ffffff, #f3f3f3 5%, #f5850c);
-moz-box-shadow: 0 0 2px 2px white;
-webkit-box-shadow: 0 0 2px 2px white;
box-shadow: 0 0 2px 2px white;
text-shadow: 0 0 0;
}
/* line 298, ../sass/extra.scss */
#ContentRight {
margin-top: -58px;
margin-bottom: 58px;
}
/* line 304, ../sass/extra.scss */
.main-page #ContentRight,
.question-page #ContentRight {
background: white;
padding-top: 2px;
}
/* line 309, ../sass/extra.scss */
#ContentLeft {
padding-bottom: 0;
}
/* line 314, ../sass/extra.scss */
.box h2,
.box .contributorback {
background: none;
text-align: left;
}
/* line 320, ../sass/extra.scss */
.box .inputs #interestingTagInput,
.box .inputs #ignoredTagInput,
.box .inputs #subscribedTagInput,
.box .inputs #ab-tag-search {
width: 128px;
height: 23px;
line-height: 23px;
}
/* line 331, ../sass/extra.scss */
input[type="submit"].searchBtn,
input.cancelSearchBtn {
border: 0;
display: none;
height: 0;
margin: 0;
padding: 0;
right: -500px;
}
/* line 340, ../sass/extra.scss */
#searchBar input[type="button"].cancelSearchBtn {
right: 8px;
border: none !important;
color: #888 !important;
background: transparent !important;
font-size: 23px !important;
height: 32px !important;
line-height: 36px !important;
width: 32px !important;
}
/* line 350, ../sass/extra.scss */
button,
input[type="submit"],
input[type="button"],
input[type="reset"],
.button {
font-family: "PT Sans", serif;
font-weight: normal;
border: 1px solid #e2e2e2 !important;
padding: 4px 15px;
color: #404040 !important;
text-decoration: none !important;
font-size: 12.5px;
background: #FFFFFF;
background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iNTAlIiBzdG9wLWNvbG9yPSIjZjNmM2YzIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZWJlYmViIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(50%, #f3f3f3), color-stop(100%, #ebebeb));
background: -moz-linear-gradient(#ffffff 0%, #f3f3f3 50%, #ebebeb 100%);
background: -webkit-linear-gradient(#ffffff 0%, #f3f3f3 50%, #ebebeb 100%);
background: linear-gradient(#ffffff 0%, #f3f3f3 50%, #ebebeb 100%);
-moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
text-shadow: #fff 0px 1px 1px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
border-bottom-color: #a0a0a0 !important;
border-right-color: #bababa !important;
border-left-color: #bababa !important;
}
/* line 373, ../sass/extra.scss */
.comments input[type="submit"],
.comments .controls a.button {
color: #4b4b4b !important;
border: none !important;
}
/* line 377, ../sass/extra.scss */
.comments input[type="submit"]:hover,
.comments .controls a.button:hover {
text-decoration: underline;
}
/* line 381, ../sass/extra.scss */
.comments input[type="submit"] {
color: #1b71bd;
}
/* line 385, ../sass/extra.scss */
input[type="submit"].link {
border: none !important;
color: 4b4b4b !important;
}
/* line 390, ../sass/extra.scss */
#footer {
margin-top: 10px;
}
/* line 392, ../sass/extra.scss */
#footer .span-4,
#footer .span-8 {
margin: 0;
}
/* line 396, ../sass/extra.scss */
#footer .span-4 {
width: 17%;
}
/* line 399, ../sass/extra.scss */
#footer .span-8 {
width: 32%;
}
/* line 402, ../sass/extra.scss */
#footer a,
#footer a:active,
#footer a:hover,
#footer a:visited,
#footer p {
color: #666;
font-size: 12px;
line-height: 18px;
}
/* line 411, ../sass/extra.scss */
#footer p {
margin-top: 14px;
}
/* line 414, ../sass/extra.scss */
#footer h3 {
color: #de0000;
font-size: 16px;
margin: 0 0 8px 0;
padding: 0;
}
/* line 420, ../sass/extra.scss */
#footer ul {
list-style: none;
margin: 0;
}
/* line 424, ../sass/extra.scss */
#footer textarea {
display: block;
margin: 12px 0 10px;
width: 80%;
}
/* line 430, ../sass/extra.scss */
.pager,
.paginator {
margin-bottom: 0;
padding-bottom: 0;
}
/* line 436, ../sass/extra.scss */
.post-comments .submit {
line-height: inherit;
}
/* line 440, ../sass/extra.scss */
.question-instructions {
margin-top: -7px;
}
/* line 449, ../sass/extra.scss */
body.lang-zh_CN .box .inputs #interestingTagInput,
body.lang-zh_CN .box .inputs #ignoredTagInput,
body.lang-zh_CN .box .inputs #subscribedTagInput,
body.lang-zh_CN .box .inputs #ab-tag-search,
body.lang-zh-cn .box .inputs #interestingTagInput,
body.lang-zh-cn .box .inputs #ignoredTagInput,
body.lang-zh-cn .box .inputs #subscribedTagInput,
body.lang-zh-cn .box .inputs #ab-tag-search,
body.lang-zh .box .inputs #interestingTagInput,
body.lang-zh .box .inputs #ignoredTagInput,
body.lang-zh .box .inputs #subscribedTagInput,
body.lang-zh .box .inputs #ab-tag-search {
width: 121px;
}
/* line 458, ../sass/extra.scss */
body.lang-zh_CN .scopes-True-True-True #searchBar,
body.lang-zh_CN .scopes-True-True-True .search-drop-menu,
body.lang-zh-cn .scopes-True-True-True #searchBar,
body.lang-zh-cn .scopes-True-True-True .search-drop-menu,
body.lang-zh .scopes-True-True-True #searchBar,
body.lang-zh .scopes-True-True-True .search-drop-menu {
margin-left: 185px;
}
/* line 464, ../sass/extra.scss */
body.lang-zh_CN .scopes-True-True-False #searchBar,
body.lang-zh_CN .scopes-True-True-False .search-drop-menu,
body.lang-zh-cn .scopes-True-True-False #searchBar,
body.lang-zh-cn .scopes-True-True-False .search-drop-menu,
body.lang-zh .scopes-True-True-False #searchBar,
body.lang-zh .scopes-True-True-False .search-drop-menu {
margin-left: 114px;
}

View File

@ -1,17 +0,0 @@
<html>
<head>
<title>Site is in the maintenance</title>
<style class="text/css">
.content-wrapper {
width: 960px;
margin: auto;
}
</style>
</head>
<body>
<div class="content-wrapper">
<img src="open-stack-cloud-computing-logo-2.png" alt="Ask OpenStack Logo" /><br/>
<h1>Ask.OpenStack is in the maintenance, please come back later</h1>
</div>
</body>
</html>

View File

@ -1,29 +0,0 @@
<!--
Copyright 2013 OpenStack Foundation
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
{% if settings.USE_LOCAL_FONTS %}
{# this version is for serving fonts locally - e.g. for intranet sites #}
<style type="text/css">
@font-face {
font-family: 'Open Sans Condensed';
font-style: normal;
font-weight: 700;
src: url('{{"/images/OpenSans-CondBold.ttf"|media}}');
}
</style>
{% else %}
{# note: for IE8 we ask for fonts separately #}
<link href='//fonts.googleapis.com/css?family=PT+Sans&amp;subset=latin' rel='stylesheet' type='text/css'>
{% endif %}

View File

@ -1,65 +0,0 @@
<!--
Copyright 2013 OpenStack Foundation
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<div class="clearfix"></div>
<div class="content-wrapper">
<div id="footer">
<div class="span-8">
<h3>Feedback About This Page</h3>
<ul>
<li><a href="https://bugs.launchpad.net/openstack-community/+bugs?field.tag=askproject">Report a bug</a></li>
</ul>
</div>
<div class="span-4">
<h3>OpenStack</h3>
<ul>
<li><a href="http://www.openstack.org/projects/">Projects</a></li>
<li><a href="http://www.openstack.org/openstack-security/">OpenStack Security</a></li>
<li><a href="http://www.openstack.org/projects/openstack-faq/">Common Questions</a></li>
<li><a href="http://www.openstack.org/blog/">Blog</a></li>
</ul>
</div>
<div class="span-4">
<h3>Community</h3>
<ul>
<li><a href="http://www.openstack.org/community/">User Groups</a></li>
<li><a href="http://www.openstack.org/events/">Events</a></li>
<li><a href="http://www.openstack.org/jobs/">Jobs</a></li>
<li><a href="http://www.openstack.org/companies/">Companies</a></li>
<li><a href="http://docs.openstack.org/infra/manual/developers.html">Contribute</a></li>
</ul>
</div>
<div class="span-4">
<h3>Documentation</h3>
<ul>
<li><a href="http://docs.openstack.org/">OpenStack Manuals</a></li>
<li><a href="http://www.openstack.org/software/start/">Getting Started</a></li>
<li><a href="http://api.openstack.org/">API Documentation</a></li>
<li><a href="https://wiki.openstack.org/">Wiki</a></li>
</ul>
</div>
<div class="span-4 last">
<h3>Branding &amp; Legal</h3>
<ul>
<li><a href="http://www.openstack.org/brand/">Logos &amp; Guidelines</a></li>
<li><a href="http://www.openstack.org/brand/openstack-trademark-policy/">Trademark Policy</a></li>
<li><a href="http://www.openstack.org/privacy/">Privacy Policy</a></li>
<li><a href="https://wiki.openstack.org/wiki/CLA">OpenStack CLA</a></li>
</ul>
</div>
<div class="clearfix"></div>
<p>OpenStack is a trademark of OpenStack Foundation. This site is powered by <a href="http://askbot.com">Askbot</a>. (<a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3</a> or later; <a href="https://github.com/ASKBOT/askbot-devel">source</a>). Content on this site is licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">CC-BY 3.0</a> license.</p>
</div>
</div>

View File

@ -1,139 +0,0 @@
<!--
Copyright 2013 OpenStack Foundation
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
{% import "macros.html" as macros%}
{%- if request.user.is_authenticated() -%}
{% set user=request.user %}
<span class="dropdown-toggle">
<ul class="dropdown-menu">
{% if user.new_response_count + user.seen_response_count > 0 %}
<li>
<a id='ab-responses' href="{{user.get_absolute_url()}}?sort=inbox&section=forum">
<img
alt="{% trans username=user.username|escape %}responses for {{username}}{% endtrans %}"
{% if user.new_response_count > 0 %}
src="{{ "/images/mail-envelope-full.png"|media }}"
title="{% trans response_count=user.new_response_count %}you have {{response_count}} new response{% pluralize %}you have {{response_count}} new responses{% endtrans %}"
{% elif user.seen_response_count > 0 %}
src="{{ "/images/mail-envelope-empty.png"|media }}"
title="{% trans %}no new responses yet{% endtrans %}"
{% endif %}
/>
{% trans %}responses{% endtrans %}
</a>
</li>
{% endif %}
{% if moderation_items and (moderation_items['new_count'] + moderation_items['seen_count'] > 0) %}
<li>
<a id="ab-responses" href="{% url moderation_queue %}">
{% if moderation_items['new_count'] > 0 %}
<img src="{{'/images/dialog-warning.png'|media}}"
{% if moderation_items['seen_count'] > 0 %}
alt="{% trans new=moderation_items['new_count'], seen=moderation_items['seen_count']%}{{new}} new flagged posts and {{seen}} previous{% endtrans %}"
title="{% trans new=moderation_items['new_count'], seen=moderation_items['seen_count']%}{{new}} new flagged posts and {{seen}} previous{% endtrans %}"
{% else %}
alt="{% trans new=moderation_items['new_count'] %}{{new}} new flagged posts{% endtrans %}"
title="{% trans new=moderation_items['new_count'] %}{{new}} new flagged posts{% endtrans %}"
{% endif %}
/>
{% elif moderation_items['seen_count'] > 0 %}
<img src={{'/images/dialog-warning-off.png'|media}}
alt="{% trans seen=moderation_items['seen_count'] %}{{seen}} flagged posts{% endtrans %}"
title="{% trans seen=moderation_items['seen_count'] %}{{seen}} flagged posts{% endtrans %}"
/>
{% endif %}
{% trans %}moderation{% endtrans %}
</a>
</li>
{% endif %}
{%-
if settings.KARMA_MODE != 'hidden' and settings.BADGES_MODE != 'hidden'
-%}
<li>
<a class="user-micro-info"
href="{{user.get_absolute_url()}}?sort=reputation"
>{% trans %}karma:{% endtrans %} {{user.reputation}}</a>
</li>
{%- endif -%}
{% if settings.BADGES_MODE != 'hidden' %}
{% if user.gold + user.silver + user.bronze > 0 %}
<li>
<a class="user-micro-info"
href="{{user.get_absolute_url()}}#badges"
><span title="{{user.get_badge_summary()}}">{% trans %}badges:{% endtrans %}
{% if user.gold %}
<span class='badge1'>&#9679;</span>
<span class="badgecount">{{user.gold}}</span>
{% endif %}
{% if user.silver %}
<span class='badge2'>&#9679;</span>
<span class="badgecount">{{user.silver}}</span>
{% endif %}
{% if user.bronze %}
<span class='badge3'>&#9679;</span>
<span class="badgecount">{{user.bronze}}</span>
{%- endif -%}
</span></a>
</li>
{% endif %}
{% endif %}
{% if request.user.is_administrator() %}
<li>
<a class="settings" href="{% url site_settings %}">{% trans %}settings{% endtrans %}</a>
</li>
<li>
<a class="widgets" href="{% url widgets %}">{% trans %}widgets{% endtrans %}</a>
</li>
{% endif %}
{% if settings.USE_ASKBOT_LOGIN_SYSTEM %}
<li>
<a href="{{ settings.LOGOUT_URL }}?next={{ settings.LOGOUT_REDIRECT_URL }}"
>{% trans %}sign out{% endtrans %}</a>
</li>
{% endif %}
</ul>
<a href="{{ request.user.get_absolute_url() }}">{{ request.user.username|escape }}</a>
</span>
{% elif settings.USE_ASKBOT_LOGIN_SYSTEM %}
<a class="signin" href="{{ settings.LOGIN_URL }}?next={{request.path|clean_login_url|escape}}">{% trans %}Hi there! Please sign in{% endtrans %}</a>
{% endif %}
<a
id="navTags"
href="{% url tags %}"
{% if active_tab == 'tags' %}class="on"{% endif %}
>{% trans %}tags{% endtrans %}</a>
{% if settings.GROUPS_ENABLED %}
<span class="dropdown">
<a
id="navGroups" class='{% if active_tab == 'groups' %}"on"{% endif %}'
href="{% url groups %}" data-target="#" >
{% trans %}people & groups{% endtrans %}
</a>
</span>
{%else%}
<a
id="navUsers"
href="{% url users %}"
{% if active_tab == 'users' %}class="on"{% endif %}
>{% trans %}users{% endtrans %}</a>
{% endif %}
{% if settings.BADGES_MODE == 'public' %}
<a
id="navBadges"
href="{% url badges %}"
{% if active_tab == 'badges' %}class="on"{% endif %}
>{% trans %}badges{% endtrans %}</a>
{% endif %}
<a class="help" href="{% url "help" %}" title="{% trans %}help{% endtrans %}">{% trans %}help{% endtrans %}</a>

View File

@ -1 +0,0 @@
{# this file is empty on purpose #}