Initial commit
176
LICENSE
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
|
||||||
|
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.
|
||||||
|
|
0
dashboard/__init__.py
Normal file
11
dashboard/manage.py
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
from django.core.management import execute_manager
|
||||||
|
try:
|
||||||
|
import settings # Assumed to be in the same directory.
|
||||||
|
except ImportError:
|
||||||
|
import sys
|
||||||
|
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
execute_manager(settings)
|
88
dashboard/settings.py
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
import datetime
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
sys.path.append(ROOT_PATH)
|
||||||
|
|
||||||
|
DEBUG = False
|
||||||
|
TEMPLATE_DEBUG = DEBUG
|
||||||
|
|
||||||
|
SITE_ID = 1
|
||||||
|
SITE_NAME = 'openstack-dashboard'
|
||||||
|
|
||||||
|
LOGIN_URL = '/accounts/login'
|
||||||
|
LOGIN_REDIRECT_URL = '/'
|
||||||
|
|
||||||
|
MEDIA_ROOT = os.path.join(ROOT_PATH, '..', 'media')
|
||||||
|
MEDIA_URL = '/media/'
|
||||||
|
ADMIN_MEDIA_PREFIX = '/media/admin/'
|
||||||
|
|
||||||
|
CREDENTIAL_AUTHORIZATION_DAYS = '5'
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'dashboard.urls'
|
||||||
|
|
||||||
|
MIDDLEWARE_CLASSES = (
|
||||||
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
|
'django.middleware.doc.XViewMiddleware',
|
||||||
|
)
|
||||||
|
|
||||||
|
TEMPLATE_CONTEXT_PROCESSORS = (
|
||||||
|
'django.core.context_processors.auth',
|
||||||
|
'django.core.context_processors.debug',
|
||||||
|
'django.core.context_processors.i18n',
|
||||||
|
'django.core.context_processors.request',
|
||||||
|
'django.core.context_processors.media',
|
||||||
|
'django.contrib.messages.context_processors.messages',
|
||||||
|
)
|
||||||
|
|
||||||
|
TEMPLATE_LOADERS = (
|
||||||
|
'django.template.loaders.filesystem.load_template_source',
|
||||||
|
'django.template.loaders.app_directories.load_template_source',
|
||||||
|
)
|
||||||
|
|
||||||
|
TEMPLATE_DIRS = (
|
||||||
|
os.path.join(ROOT_PATH, 'templates'),
|
||||||
|
)
|
||||||
|
|
||||||
|
INSTALLED_APPS = (
|
||||||
|
'dashboard',
|
||||||
|
'django.contrib.auth',
|
||||||
|
'django.contrib.admin',
|
||||||
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.messages',
|
||||||
|
'django.contrib.comments',
|
||||||
|
'django.contrib.sites',
|
||||||
|
'django.contrib.markup',
|
||||||
|
'django.contrib.syndication',
|
||||||
|
'django_nose',
|
||||||
|
'django_nova',
|
||||||
|
'registration',
|
||||||
|
)
|
||||||
|
|
||||||
|
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
|
||||||
|
|
||||||
|
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
|
||||||
|
MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
|
||||||
|
|
||||||
|
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
||||||
|
TIME_ZONE = 'PST+08PDT,M3.2.0,M11.1.0'
|
||||||
|
LANGUAGE_CODE = 'en-us'
|
||||||
|
USE_I18N = False
|
||||||
|
|
||||||
|
ACCOUNT_ACTIVATION_DAYS = 7
|
||||||
|
|
||||||
|
try:
|
||||||
|
from local.local_settings import *
|
||||||
|
except Exception, e:
|
||||||
|
logging.exception(e)
|
||||||
|
|
||||||
|
if DEBUG:
|
||||||
|
logging.basicConfig(level=logging.DEBUG)
|
35
dashboard/templates/403.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %} - Forbidden{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="right_content">
|
||||||
|
<div id="page_head">
|
||||||
|
<h2 id="page_heading">Forbidden</h2>
|
||||||
|
<p id="page_description">You do not have the required privileges to access this content. If you believe this message to be in error,
|
||||||
|
please contact your project manager.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
<div id="sidebar">
|
||||||
|
<ul id="navigation">
|
||||||
|
{% block nav_home %}
|
||||||
|
<li><h3><a href="/">Home</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_projects %}
|
||||||
|
<li><h3><a href="/">Projects</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_forum %}
|
||||||
|
<li><h3><a href="/forum">Forums</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_kb %}
|
||||||
|
<li><h3><a href="/kb/show/Start/">Knowledge Base</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
</ul>
|
||||||
|
</div> <!-- end sidebar -->
|
||||||
|
{% endblock %}
|
34
dashboard/templates/404.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %} - Page Not Found{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="right_content">
|
||||||
|
<div id="page_head">
|
||||||
|
<h2 id="page_heading">The page you were looking for doesn't exist</h2>
|
||||||
|
<p id="page_description">You may have mistyped the address or the page may have moved.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
<div id="sidebar">
|
||||||
|
<ul id="navigation">
|
||||||
|
{% block nav_home %}
|
||||||
|
<li><h3><a href="/">Home</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_projects %}
|
||||||
|
<li><h3><a href="/">Projects</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_forum %}
|
||||||
|
<li><h3><a href="/forum">Forums</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_kb %}
|
||||||
|
<li><h3><a href="/kb/show/Start/">Knowledge Base</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
</ul>
|
||||||
|
</div> <!-- end sidebar -->
|
||||||
|
{% endblock %}
|
34
dashboard/templates/500.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %} - Internal Server Error{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="right_content">
|
||||||
|
<div id="page_head">
|
||||||
|
<h2 id="page_heading">Internal Server Error</h2>
|
||||||
|
<p id="page_description">An unexpected error occurred while processing your request. Please try your request again.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
<div id="sidebar">
|
||||||
|
<ul id="navigation">
|
||||||
|
{% block nav_home %}
|
||||||
|
<li><h3><a href="/">Home</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_projects %}
|
||||||
|
<li><h3><a href="/">Projects</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_forum %}
|
||||||
|
<li><h3><a href="/forum">Forums</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_kb %}
|
||||||
|
<li><h3><a href="/kb/show/Start/">Knowledge Base</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
</ul>
|
||||||
|
</div> <!-- end sidebar -->
|
||||||
|
{% endblock %}
|
96
dashboard/templates/admin/index.html
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
{% extends "admin/base_site.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/dashboard.css" />{% endblock %}
|
||||||
|
|
||||||
|
{% block coltype %}colMS{% endblock %}
|
||||||
|
|
||||||
|
{% block bodyclass %}dashboard{% endblock %}
|
||||||
|
|
||||||
|
{% block breadcrumbs %}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="content-main">
|
||||||
|
{% if app_list %}
|
||||||
|
|
||||||
|
<div class="module">
|
||||||
|
<table summary="Models available in the OpenStack application.">
|
||||||
|
<caption><a href="{% url admin_projects %}" class="section">OpenStack</a></caption>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th scope="row"><a href="{% url admin_projects %}">Projects</a></th>
|
||||||
|
<td><a href="{% url add_project %}" class="addlink">Add</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row"><a href="{% url admin_users_list %}">Global Roles</a></th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% for app in app_list %}
|
||||||
|
<div class="module">
|
||||||
|
<table summary="{% blocktrans with app.name as name %}Models available in the {{ name }} application.{% endblocktrans %}">
|
||||||
|
<caption><a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a></caption>
|
||||||
|
{% for model in app.models %}
|
||||||
|
<tr>
|
||||||
|
{% if model.perms.change %}
|
||||||
|
<th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
|
||||||
|
{% else %}
|
||||||
|
<th scope="row">{{ model.name }}</th>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if model.perms.add %}
|
||||||
|
<td><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td>
|
||||||
|
{% else %}
|
||||||
|
<td> </td>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if model.perms.change %}
|
||||||
|
<td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
|
||||||
|
{% else %}
|
||||||
|
<td> </td>
|
||||||
|
{% endif %}
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<p>{% trans "You don't have permission to edit anything." %}</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
<div id="content-related">
|
||||||
|
<div class="module" id="recent-actions-module">
|
||||||
|
<h2>{% trans 'Recent Actions' %}</h2>
|
||||||
|
<h3>{% trans 'My Actions' %}</h3>
|
||||||
|
{% load log %}
|
||||||
|
{% get_admin_log 10 as admin_log for_user user %}
|
||||||
|
{% if not admin_log %}
|
||||||
|
<p>{% trans 'None available' %}</p>
|
||||||
|
{% else %}
|
||||||
|
<ul class="actionlist">
|
||||||
|
{% for entry in admin_log %}
|
||||||
|
<li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
|
||||||
|
{% if entry.is_deletion %}
|
||||||
|
{{ entry.object_repr }}
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
|
||||||
|
{% endif %}
|
||||||
|
<br/>
|
||||||
|
{% if entry.content_type %}
|
||||||
|
<span class="mini quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="mini quiet">{% trans 'Unknown content' %}</span>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
63
dashboard/templates/base-root.html
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xml:lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
|
||||||
|
<title>OpenStack Dashboard{% block title %}{% endblock %}{% block subtitle %}{% endblock %}</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/media/dashboard/css/new_dash.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/media/dashboard/css/cupertino/jquery-ui-1.7.2.custom.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/media/dashboard/css/openstack.css"/>
|
||||||
|
{% block headercss %}{% endblock %}
|
||||||
|
<!--[if IE 7]><link rel="stylesheet" href="/media/dashboard/css/ie7.css" type="text/css" media="screen, projection"><![endif]-->
|
||||||
|
|
||||||
|
<script type="text/javascript" src="/media/dashboard/js/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/media/dashboard/js/jquery-ui.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/media/dashboard/js/dashboard.js"></script>
|
||||||
|
|
||||||
|
{% block headerjs %}{% endblock %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="wrapper">
|
||||||
|
<div id="header">
|
||||||
|
<h1><a href="/">OpenStack<span> Cloud Computing</span></a></h1>
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<div id="user_info">
|
||||||
|
<span class="user">Signed in as <strong>{{ request.user.username }}</strong>.</a></span>
|
||||||
|
<ul>
|
||||||
|
<li><a id="lnk_logout" href="{% url auth_logout %}">Sign Out</a></li>
|
||||||
|
<li><a id="lnk_change_password" href="{% url auth_password_change %}">Change Password</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div id="user_info">
|
||||||
|
<a id="lnk_login" href="/accounts/login">Sign In</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="content_wrap">
|
||||||
|
{% block sidebar %}{% endblock %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
{% block forum_breadcrumbs %}{% endblock %}
|
||||||
|
<div id="content" class="{% block pageclass %}{% endblock %}">
|
||||||
|
{% block rootcontent %}{% endblock %}
|
||||||
|
</div><!-- end content -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="footer">
|
||||||
|
<div id="foot">
|
||||||
|
<div class="c7">
|
||||||
|
<div class="ft_sitemap">
|
||||||
|
<div class="sub"><a href="{% url index %}">Dashboard</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="{% url index %}">Home</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="clr"></div>
|
||||||
|
</div>
|
||||||
|
{% block footerjs %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
15
dashboard/templates/base-sidebar.html
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
<div id="sidebar">
|
||||||
|
<ul id="navigation">
|
||||||
|
{% block nav_home %}
|
||||||
|
<li><h3><a href="/">Home</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block nav_projects %}
|
||||||
|
<li><h3><a href="/">Projects</a></h3></li>
|
||||||
|
{% endblock %}
|
||||||
|
</ul>
|
||||||
|
</div> <!-- end sidebar -->
|
||||||
|
{% endblock %}
|
5
dashboard/templates/base.html
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{% extends "base-root.html" %}
|
||||||
|
|
||||||
|
{% block rootcontent %}
|
||||||
|
{% block content %}{% endblock %}
|
||||||
|
{% endblock %}
|
56
dashboard/templates/index.html
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block headercss %}
|
||||||
|
{% endblock %}
|
||||||
|
{% block pageclass %}home{% endblock %}
|
||||||
|
|
||||||
|
{% block title %} - Cloud Computing{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Welcome to the Openstack Dashboard</h2>
|
||||||
|
<p>Lorem ipsum oblique praesent theophrastus ut eos. No altera eirmod
|
||||||
|
graecis ius. Pri mucius salutandi at, usu admodum neglegentur ad.
|
||||||
|
In qui propriae fabellas comprehensam.
|
||||||
|
{% if not request.user.is_authenticated %}
|
||||||
|
<a id="lnk_register" href="{% url registration_register %}">Register</a>
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if request.user.is_authenticated %}
|
||||||
|
<div id="projects" class="block">
|
||||||
|
<h3>Your Projects</h3>
|
||||||
|
<ul>
|
||||||
|
{% for project in projects %}
|
||||||
|
<li class="project {% cycle 'odd' 'even' %}">
|
||||||
|
<a id="lnk_project_{{ project.projectname }}" href="{% url nova_project project.projectname %}">
|
||||||
|
{{ project.projectname|capfirst }}
|
||||||
|
<span class="data">{{ project.description|capfirst }}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div id="home_login" class="block">
|
||||||
|
<h3>Sign In</h3>
|
||||||
|
<form action="{% url auth_login %}" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<fieldset>
|
||||||
|
{% if form.errors %}
|
||||||
|
<p class="error">Your username and password didn't match. Please try again.</p>
|
||||||
|
{% endif %}
|
||||||
|
<label for="username">Username:</label><input id="username" type="text" name="username" />
|
||||||
|
<label for="password">Password:</label><input id="password" type="password" name="password" />
|
||||||
|
<input type="hidden" name="next" value="/" />
|
||||||
|
<div class="button">
|
||||||
|
<input id="home_login_btn" type="submit" value="Sign In">
|
||||||
|
<span id="forgot_password">or <a id="forgot_password_link" href="{% url auth_password_reset %}">Forgot Password?</a></span>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
11
dashboard/templates/permission_denied.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{% extends "dashboard/base.html" %}
|
||||||
|
|
||||||
|
{% block title %} - Permission Denied{% endblock %}
|
||||||
|
{% block pageclass %}denied{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2 id="page_heading">Permission Denied</h2>
|
||||||
|
<p id="page_description">You do not have permission to view the requested page.</p>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
34
dashboard/templates/registration/activate.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Account Activation{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% if account %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Activation successful</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-state-highlight ui-corner-all success">
|
||||||
|
<span class="close ui-icon ui-icon-circle-close" style="display:none;"></span>
|
||||||
|
<p>
|
||||||
|
<span class="ui-icon ui-icon-check"></span>
|
||||||
|
Your account has been successfully activated.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
You may now <a id="lnk_login" href="{% url auth_login %}">log in</a> to your account.
|
||||||
|
</p>
|
||||||
|
{% else %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Activation failed</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We are unable to activate your account at this time. It is possible that the activation
|
||||||
|
period for your account has expired. Please register your account again, or contact the
|
||||||
|
site administrator for help resolving this issue.
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
21
dashboard/templates/registration/activation_email.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{% autoescape off %}
|
||||||
|
Welcome to the NASA Nebula Dashboard!
|
||||||
|
|
||||||
|
|
||||||
|
This message contains information about how to activate your NASA Nebula Dashboard account.
|
||||||
|
|
||||||
|
|
||||||
|
The NASA Nebula Dashboard is a web based management system that enables to easily manage your Nebula projects and instances.
|
||||||
|
|
||||||
|
|
||||||
|
PLEASE NOTE: Before you can access your Dashboard account, you must first be connected to your Nebula OpenVPN account. You should receive another message soon with instructions on how to connect to your VPN.
|
||||||
|
|
||||||
|
|
||||||
|
When you're ready, connect to your Nebula OpenVPN and visit the following link to activate your account:
|
||||||
|
|
||||||
|
http://{{ site.domain }}/accounts/activate/{{ activation_key }}
|
||||||
|
|
||||||
|
Please note that this invitation will expire in {{ expiration_days }} days. After that time, you will need to contact your Nebula account manager for another invitation.
|
||||||
|
|
||||||
|
The Nebula Team
|
||||||
|
{% endautoescape %}
|
@ -0,0 +1 @@
|
|||||||
|
Welcome to the NASA Nebula Dashboard!
|
36
dashboard/templates/registration/login.html
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block headerjs %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block pageclass %}login{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Sign in to your Nebula Dashboard</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="home_login" class="block">
|
||||||
|
<h3>Sign In</h3>
|
||||||
|
|
||||||
|
<form action="{% url auth_login %}" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<fieldset>
|
||||||
|
{% if form.errors %}
|
||||||
|
<p class="error">Your username and password didn't match. Please try again.</p>
|
||||||
|
{% endif %}
|
||||||
|
<input type="hidden" name="next" value="{{ next }}" />
|
||||||
|
{{ form.username.label_tag }}{{ form.username }}
|
||||||
|
{{ form.password.label_tag }}{{ form.password }}
|
||||||
|
<div class="button">
|
||||||
|
<input type="submit" value="Sign In">
|
||||||
|
<span id="forgot_password">or <a href="{% url auth_password_reset %}">Forgot Password?</a></span>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
14
dashboard/templates/registration/logout.html
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Signed Out{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Signed out</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You have successfully signed out of your account.
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
18
dashboard/templates/registration/password_change_done.html
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Change Password{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Change Password</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-state-highlight ui-corner-all success">
|
||||||
|
<span class="close ui-icon ui-icon-circle-close" style="display:none;"></span>
|
||||||
|
<p>
|
||||||
|
<span class="ui-icon ui-icon-check"></span>
|
||||||
|
Your password has been successfully changed.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
23
dashboard/templates/registration/password_change_form.html
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Change Password{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div id="page_head">
|
||||||
|
<h1>Change Password</h1>
|
||||||
|
<p id="page_description">To change your password, complete the form below.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="home_login" class="block reset">
|
||||||
|
<h3>Change Password</h3>
|
||||||
|
<form action="" method="post">
|
||||||
|
<fieldset>
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.as_p }}
|
||||||
|
<input id="bnt_set_password" type="submit" value="Set my password" />
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
@ -0,0 +1,19 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Reset Password{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Password reset complete</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-state-highlight ui-corner-all success">
|
||||||
|
<span class="close ui-icon ui-icon-circle-close" style="display:none;"></span>
|
||||||
|
<p>
|
||||||
|
<span class="ui-icon ui-icon-check"></span>
|
||||||
|
Your password has been reset. You can now <a href="/accounts/login">login</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
26
dashboard/templates/registration/password_reset_confirm.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Reset Password{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Change your password below.</h2>
|
||||||
|
<p id="page_description">To complete the reset of your password, fill out the form below.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="home_login" class="block reset">
|
||||||
|
<h3>Reset Password</h3>
|
||||||
|
<form action="" method="post">
|
||||||
|
<fieldset>
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.new_password1.errors }}
|
||||||
|
<label for="id_new_password1">New Password:</label>{{form.new_password1 }}
|
||||||
|
|
||||||
|
{{ form.new_password2.errors }}
|
||||||
|
<label for="id_new_password2">Confirm Password:</label>{{ form.new_password2 }}
|
||||||
|
<input id="bnt_set_password" type="submit" value="Set my password" />
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
17
dashboard/templates/registration/password_reset_done.html
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Password Reset{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Password reset initiated</h2>
|
||||||
|
</div>
|
||||||
|
<div class="ui-state-highlight ui-corner-all success">
|
||||||
|
<span class="close ui-icon ui-icon-circle-close" style="display:none;"></span>
|
||||||
|
<p>
|
||||||
|
<span class="ui-icon ui-icon-check"></span>
|
||||||
|
We've emailed you instructions for resetting your password.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
13
dashboard/templates/registration/password_reset_email.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{% load i18n %}{% autoescape off %}
|
||||||
|
You're receiving this e-mail because you requested a password reset for your user account at {{ site_name }}.
|
||||||
|
|
||||||
|
Please sign in to your Nebula VPN and go to the following page and choose a new password:
|
||||||
|
{% block reset_link %}
|
||||||
|
{{ protocol }}://{{ domain }}{% url django.contrib.auth.views.password_reset_confirm uidb36=uid token=token %}
|
||||||
|
{% endblock %}
|
||||||
|
Your user name, in case you've forgotten: {{ user.username }}
|
||||||
|
|
||||||
|
Thanks for using our site!
|
||||||
|
|
||||||
|
The Nebula Team
|
||||||
|
{% endautoescape %}
|
23
dashboard/templates/registration/password_reset_form.html
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Reset Password{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div id="page_head">
|
||||||
|
<h1>Reset Password</h1>
|
||||||
|
<p id="page_description">Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="home_login" class="block reset">
|
||||||
|
<h3>Reset Password</h3>
|
||||||
|
<form action="" method="post">
|
||||||
|
<fieldset>
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.email.errors }}
|
||||||
|
<p><label for="id_email">E-mail address:</label> {{ form.email }} <input id="btn_reset_password" type="submit" value="Reset Password" /></p>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
22
dashboard/templates/registration/registration_complete.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Registration Complete{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h2>Registration complete</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-state-highlight ui-corner-all success">
|
||||||
|
<span class="close ui-icon ui-icon-circle-close" style="display:none;"></span>
|
||||||
|
<p>
|
||||||
|
<span class="ui-icon ui-icon-check"></span>
|
||||||
|
Your account has been created.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
Soon you will receive instructions for activating your account in your inbox.
|
||||||
|
Please follow the activation link provided in the message to complete your registration.
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
29
dashboard/templates/registration/registration_form.html
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block region %}{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}Register{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="page_head">
|
||||||
|
<h1>Create Your Account</h1>
|
||||||
|
<p id="page_description">Create your new account by providing the information blow.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="home_login" class="block reset">
|
||||||
|
<h3>Register</h3>
|
||||||
|
<form action="" method="post">
|
||||||
|
<fieldset>
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.username.errors }}
|
||||||
|
<label for="id_username">Username:</label> {{ form.username }}
|
||||||
|
{{ form.email.errors }}
|
||||||
|
<label for="id_email">E-mail address:</label> {{ form.email }}
|
||||||
|
{{ form.password1.errors }}
|
||||||
|
<label for="id_password1">Password:</label> {{ form.password1 }}
|
||||||
|
{{ form.password2.errors }}
|
||||||
|
<label for="id_password2">Confirm Password:</label> {{ form.password2 }}
|
||||||
|
<input id="btn_reset_password" type="submit" value="Reset Password" />
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
57
dashboard/urls.py
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||||
|
|
||||||
|
# Copyright 2010 United States Government as represented by the
|
||||||
|
# Administrator of the National Aeronautics and Space Administration.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
"""
|
||||||
|
URL patterns for the OpenStack Dashboard.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.conf.urls.defaults import *
|
||||||
|
from django.conf import settings
|
||||||
|
from django.contrib import admin
|
||||||
|
from registration import forms as reg_forms
|
||||||
|
|
||||||
|
|
||||||
|
admin.autodiscover()
|
||||||
|
|
||||||
|
urlpatterns = patterns('',
|
||||||
|
url(r'^$', 'dashboard.views.index', name='index'),
|
||||||
|
url(r'^accounts/register/$',
|
||||||
|
'registration.views.register',
|
||||||
|
{ 'form_class': reg_forms.RegistrationFormUniqueEmail },
|
||||||
|
name='registration_register'),
|
||||||
|
url(r'^accounts/', include('registration.urls')),
|
||||||
|
url(r'^project/', include('django_nova.urls.project')),
|
||||||
|
url(r'^region/', include('django_nova.urls.region')),
|
||||||
|
url(r'^admin/project/', include('django_nova.urls.admin_project')),
|
||||||
|
url(r'^admin/roles/', include('django_nova.urls.admin_roles')),
|
||||||
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
|
)
|
||||||
|
|
||||||
|
urlpatterns += patterns('django.views.generic.simple',
|
||||||
|
url(r'^denied/$',
|
||||||
|
'direct_to_template',
|
||||||
|
{'template': 'permission_denied.html'},
|
||||||
|
name='dashboard_permission_denied'),
|
||||||
|
)
|
||||||
|
|
||||||
|
urlpatterns += patterns('',
|
||||||
|
(r'^%s(?P<path>.*)$' % settings.MEDIA_URL[1:],
|
||||||
|
'django.views.static.serve',
|
||||||
|
{'document_root': settings.MEDIA_ROOT,
|
||||||
|
'show_indexes': True}),
|
||||||
|
)
|
39
dashboard/views.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||||
|
|
||||||
|
# Copyright 2010 United States Government as represented by the
|
||||||
|
# Administrator of the National Aeronautics and Space Administration.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Views for home page.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django import template
|
||||||
|
from django.shortcuts import render_to_response
|
||||||
|
from django.views.decorators.vary import vary_on_cookie
|
||||||
|
from django_nova.shortcuts import get_projects
|
||||||
|
|
||||||
|
|
||||||
|
@vary_on_cookie
|
||||||
|
def index(request):
|
||||||
|
projects = None
|
||||||
|
page_type = "home"
|
||||||
|
if request.user.is_authenticated():
|
||||||
|
projects = get_projects(user=request.user)
|
||||||
|
|
||||||
|
return render_to_response('index.html', {
|
||||||
|
'projects': projects,
|
||||||
|
'page_type': page_type,
|
||||||
|
}, context_instance = template.RequestContext(request))
|
29
dashboard/wsgi/django.wsgi
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import django.core.handlers.wsgi
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
os.environ['DJANGO_SETTINGS_MODULE'] = 'dashboard.settings'
|
||||||
|
sys.stdout = sys.stderr
|
||||||
|
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
class WSGIRequest(django.core.handlers.wsgi.WSGIRequest):
|
||||||
|
def is_secure(self):
|
||||||
|
value = self.META.get('wsgi.url_scheme', '').lower()
|
||||||
|
if value == 'https':
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
class WSGIHandler(django.core.handlers.wsgi.WSGIHandler):
|
||||||
|
request_class = WSGIRequest
|
||||||
|
|
||||||
|
_application = WSGIHandler()
|
||||||
|
|
||||||
|
def application(environ, start_response):
|
||||||
|
environ['PATH_INFO'] = environ['SCRIPT_NAME'] + environ['PATH_INFO']
|
||||||
|
environ['wsgi.url_scheme'] = environ.get('HTTP_X_URL_SCHEME', 'http')
|
||||||
|
|
||||||
|
return _application(environ, start_response)
|
||||||
|
|
0
local/__init__.py
Normal file
22
local/local_settings.py.example
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
DEBUG = True
|
||||||
|
TEMPLATE_DEBUG = DEBUG
|
||||||
|
PROD = False
|
||||||
|
USE_SSL = False
|
||||||
|
|
||||||
|
LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
|
'NAME': os.path.join(LOCAL_PATH, 'dashboard_openstack'),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
CACHE_BACKEND = 'dummy://'
|
||||||
|
|
||||||
|
NOVA_DEFAULT_ENDPOINT = 'http://localhoat:8773/services/Cloud'
|
||||||
|
NOVA_DEFAULT_REGION = 'nova'
|
||||||
|
NOVA_ACCESS_KEY = 'admin'
|
||||||
|
NOVA_SECRET_KEY = 'admin'
|
||||||
|
|
After Width: | Height: | Size: 251 B |
After Width: | Height: | Size: 181 B |
After Width: | Height: | Size: 158 B |
After Width: | Height: | Size: 131 B |
After Width: | Height: | Size: 124 B |
After Width: | Height: | Size: 103 B |
After Width: | Height: | Size: 118 B |
After Width: | Height: | Size: 104 B |
After Width: | Height: | Size: 119 B |
BIN
media/dashboard/css/cupertino/images/ui-icons_2694e8_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
media/dashboard/css/cupertino/images/ui-icons_2e83ff_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
media/dashboard/css/cupertino/images/ui-icons_3d80b3_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
media/dashboard/css/cupertino/images/ui-icons_72a7cf_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
media/dashboard/css/cupertino/images/ui-icons_ffffff_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
406
media/dashboard/css/cupertino/jquery-ui-1.7.2.custom.css
vendored
Normal file
@ -0,0 +1,406 @@
|
|||||||
|
/*
|
||||||
|
* jQuery UI CSS Framework
|
||||||
|
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Layout helpers
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-helper-hidden { display: none; }
|
||||||
|
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
|
||||||
|
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
||||||
|
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
||||||
|
.ui-helper-clearfix { display: inline-block; }
|
||||||
|
/* required comment for clearfix to work in Opera \*/
|
||||||
|
* html .ui-helper-clearfix { height:1%; }
|
||||||
|
.ui-helper-clearfix { display:block; }
|
||||||
|
/* end clearfix */
|
||||||
|
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
||||||
|
|
||||||
|
|
||||||
|
/* Interaction Cues
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-disabled { cursor: default !important; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Icons
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* states and images */
|
||||||
|
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc visuals
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* Overlays */
|
||||||
|
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* jQuery UI CSS Framework
|
||||||
|
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
||||||
|
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=deedf7&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=04_highlight_hard.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=02_glass.png&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=3baae3&bgTextureActive=02_glass.png&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=ffef8f&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=01_flat.png&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=eeeeee&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=04_highlight_hard.png&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Component containers
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }
|
||||||
|
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }
|
||||||
|
.ui-widget-content { border: 1px solid #dddddd; background: #f2f5f7 url(images/ui-bg_highlight-hard_100_f2f5f7_1x100.png) 50% top repeat-x; color: #362b36; }
|
||||||
|
.ui-widget-content a { color: #362b36; }
|
||||||
|
.ui-widget-header { border: 1px solid #aed0ea; background: #deedf7 url(images/ui-bg_highlight-soft_100_deedf7_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
|
||||||
|
.ui-widget-header a { color: #222222; }
|
||||||
|
|
||||||
|
/* Interaction states
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #aed0ea; background: #d7ebf9 url(images/ui-bg_glass_80_d7ebf9_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2779aa; outline: none; }
|
||||||
|
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2779aa; text-decoration: none; outline: none; }
|
||||||
|
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #74b2e2; background: #e4f1fb url(images/ui-bg_glass_100_e4f1fb_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #0070a3; outline: none; }
|
||||||
|
.ui-state-hover a, .ui-state-hover a:hover { color: #0070a3; text-decoration: none; outline: none; }
|
||||||
|
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #2694e8; background: #3baae3 url(images/ui-bg_glass_50_3baae3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; outline: none; }
|
||||||
|
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; outline: none; text-decoration: none; }
|
||||||
|
|
||||||
|
/* Interaction Cues
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #f9dd34; background: #ffef8f url(images/ui-bg_highlight-soft_25_ffef8f_1x100.png) 50% top repeat-x; color: #363636; }
|
||||||
|
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
|
||||||
|
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #cd0a0a url(images/ui-bg_flat_15_cd0a0a_40x100.png) 50% 50% repeat-x; color: #ffffff; }
|
||||||
|
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
|
||||||
|
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
|
||||||
|
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
||||||
|
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
|
||||||
|
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
||||||
|
|
||||||
|
/* Icons
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* states and images */
|
||||||
|
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_72a7cf_256x240.png); }
|
||||||
|
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_72a7cf_256x240.png); }
|
||||||
|
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_72a7cf_256x240.png); }
|
||||||
|
.ui-state-default .ui-icon { background-image: url(images/ui-icons_3d80b3_256x240.png); }
|
||||||
|
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_2694e8_256x240.png); }
|
||||||
|
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
|
||||||
|
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
|
||||||
|
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
|
||||||
|
|
||||||
|
/* positioning */
|
||||||
|
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||||
|
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
||||||
|
.ui-icon-carat-1-e { background-position: -32px 0; }
|
||||||
|
.ui-icon-carat-1-se { background-position: -48px 0; }
|
||||||
|
.ui-icon-carat-1-s { background-position: -64px 0; }
|
||||||
|
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
||||||
|
.ui-icon-carat-1-w { background-position: -96px 0; }
|
||||||
|
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
||||||
|
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
||||||
|
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
||||||
|
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||||
|
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||||
|
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||||
|
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||||
|
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
||||||
|
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||||
|
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||||
|
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||||
|
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||||
|
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||||
|
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||||
|
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||||
|
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||||
|
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||||
|
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
||||||
|
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||||
|
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||||
|
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||||
|
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||||
|
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||||
|
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||||
|
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||||
|
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
||||||
|
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||||
|
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||||
|
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||||
|
.ui-icon-extlink { background-position: -32px -80px; }
|
||||||
|
.ui-icon-newwin { background-position: -48px -80px; }
|
||||||
|
.ui-icon-refresh { background-position: -64px -80px; }
|
||||||
|
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||||
|
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||||
|
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||||
|
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||||
|
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||||
|
.ui-icon-document { background-position: -32px -96px; }
|
||||||
|
.ui-icon-document-b { background-position: -48px -96px; }
|
||||||
|
.ui-icon-note { background-position: -64px -96px; }
|
||||||
|
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||||
|
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||||
|
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||||
|
.ui-icon-comment { background-position: -128px -96px; }
|
||||||
|
.ui-icon-person { background-position: -144px -96px; }
|
||||||
|
.ui-icon-print { background-position: -160px -96px; }
|
||||||
|
.ui-icon-trash { background-position: -176px -96px; }
|
||||||
|
.ui-icon-locked { background-position: -192px -96px; }
|
||||||
|
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||||
|
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||||
|
.ui-icon-tag { background-position: -240px -96px; }
|
||||||
|
.ui-icon-home { background-position: 0 -112px; }
|
||||||
|
.ui-icon-flag { background-position: -16px -112px; }
|
||||||
|
.ui-icon-calendar { background-position: -32px -112px; }
|
||||||
|
.ui-icon-cart { background-position: -48px -112px; }
|
||||||
|
.ui-icon-pencil { background-position: -64px -112px; }
|
||||||
|
.ui-icon-clock { background-position: -80px -112px; }
|
||||||
|
.ui-icon-disk { background-position: -96px -112px; }
|
||||||
|
.ui-icon-calculator { background-position: -112px -112px; }
|
||||||
|
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||||
|
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||||
|
.ui-icon-search { background-position: -160px -112px; }
|
||||||
|
.ui-icon-wrench { background-position: -176px -112px; }
|
||||||
|
.ui-icon-gear { background-position: -192px -112px; }
|
||||||
|
.ui-icon-heart { background-position: -208px -112px; }
|
||||||
|
.ui-icon-star { background-position: -224px -112px; }
|
||||||
|
.ui-icon-link { background-position: -240px -112px; }
|
||||||
|
.ui-icon-cancel { background-position: 0 -128px; }
|
||||||
|
.ui-icon-plus { background-position: -16px -128px; }
|
||||||
|
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||||
|
.ui-icon-minus { background-position: -48px -128px; }
|
||||||
|
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||||
|
.ui-icon-close { background-position: -80px -128px; }
|
||||||
|
.ui-icon-closethick { background-position: -96px -128px; }
|
||||||
|
.ui-icon-key { background-position: -112px -128px; }
|
||||||
|
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||||
|
.ui-icon-scissors { background-position: -144px -128px; }
|
||||||
|
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||||
|
.ui-icon-copy { background-position: -176px -128px; }
|
||||||
|
.ui-icon-contact { background-position: -192px -128px; }
|
||||||
|
.ui-icon-image { background-position: -208px -128px; }
|
||||||
|
.ui-icon-video { background-position: -224px -128px; }
|
||||||
|
.ui-icon-script { background-position: -240px -128px; }
|
||||||
|
.ui-icon-alert { background-position: 0 -144px; }
|
||||||
|
.ui-icon-info { background-position: -16px -144px; }
|
||||||
|
.ui-icon-notice { background-position: -32px -144px; }
|
||||||
|
.ui-icon-help { background-position: -48px -144px; }
|
||||||
|
.ui-icon-check { background-position: -64px -144px; }
|
||||||
|
.ui-icon-bullet { background-position: -80px -144px; }
|
||||||
|
.ui-icon-radio-off { background-position: -96px -144px; }
|
||||||
|
.ui-icon-radio-on { background-position: -112px -144px; }
|
||||||
|
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||||
|
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||||
|
.ui-icon-play { background-position: 0 -160px; }
|
||||||
|
.ui-icon-pause { background-position: -16px -160px; }
|
||||||
|
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||||
|
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||||
|
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||||
|
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||||
|
.ui-icon-stop { background-position: -96px -160px; }
|
||||||
|
.ui-icon-eject { background-position: -112px -160px; }
|
||||||
|
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||||
|
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||||
|
.ui-icon-power { background-position: 0 -176px; }
|
||||||
|
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||||
|
.ui-icon-signal { background-position: -32px -176px; }
|
||||||
|
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||||
|
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||||
|
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||||
|
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||||
|
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||||
|
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||||
|
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||||
|
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||||
|
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||||
|
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||||
|
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||||
|
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||||
|
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||||
|
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||||
|
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||||
|
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||||
|
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||||
|
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||||
|
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||||
|
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||||
|
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||||
|
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||||
|
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||||
|
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||||
|
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||||
|
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||||
|
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||||
|
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||||
|
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||||
|
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc visuals
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* Corner radius */
|
||||||
|
.ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; }
|
||||||
|
.ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; }
|
||||||
|
.ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; }
|
||||||
|
.ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; }
|
||||||
|
.ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; }
|
||||||
|
.ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; }
|
||||||
|
.ui-corner-right { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; }
|
||||||
|
.ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; }
|
||||||
|
.ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; }
|
||||||
|
|
||||||
|
/* Overlays */
|
||||||
|
.ui-widget-overlay { background: #eeeeee url(images/ui-bg_diagonals-thick_90_eeeeee_40x40.png) 50% 50% repeat; opacity: .80;filter:Alpha(Opacity=80); }
|
||||||
|
.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #000000 url(images/ui-bg_highlight-hard_70_000000_1x100.png) 50% top repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
||||||
|
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
||||||
|
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
||||||
|
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
|
||||||
|
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
||||||
|
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
|
||||||
|
.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
|
||||||
|
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
||||||
|
.ui-datepicker .ui-datepicker-next { right:2px; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
||||||
|
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
||||||
|
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
||||||
|
.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
|
||||||
|
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
||||||
|
.ui-datepicker select.ui-datepicker-month,
|
||||||
|
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
||||||
|
.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
|
||||||
|
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
||||||
|
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
||||||
|
.ui-datepicker td { border: 0; padding: 1px; }
|
||||||
|
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
||||||
|
|
||||||
|
/* with multiple calendars */
|
||||||
|
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
||||||
|
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
||||||
|
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
||||||
|
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
||||||
|
.ui-datepicker-row-break { clear:both; width:100%; }
|
||||||
|
|
||||||
|
/* RTL support */
|
||||||
|
.ui-datepicker-rtl { direction: rtl; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||||
|
|
||||||
|
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
||||||
|
.ui-datepicker-cover {
|
||||||
|
display: none; /*sorry for IE5*/
|
||||||
|
display/**/: block; /*sorry for IE5*/
|
||||||
|
position: absolute; /*must have*/
|
||||||
|
z-index: -1; /*must have*/
|
||||||
|
filter: mask(); /*must have*/
|
||||||
|
top: -4px; /*must have*/
|
||||||
|
left: -4px; /*must have*/
|
||||||
|
width: 200px; /*must have*/
|
||||||
|
height: 200px; /*must have*/
|
||||||
|
}/* Dialog
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-dialog { position: relative; padding: .2em; width: 300px; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
|
||||||
|
.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
||||||
|
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
||||||
|
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
||||||
|
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
|
||||||
|
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
||||||
|
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
||||||
|
/* Progressbar
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-progressbar { height:2em; text-align: left; }
|
||||||
|
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-resizable { position: relative;}
|
||||||
|
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
|
||||||
|
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||||
|
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
|
||||||
|
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
|
||||||
|
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
|
||||||
|
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
|
||||||
|
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||||
|
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||||
|
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||||
|
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-slider { position: relative; text-align: left; }
|
||||||
|
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
||||||
|
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
|
||||||
|
|
||||||
|
.ui-slider-horizontal { height: .8em; }
|
||||||
|
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
||||||
|
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
||||||
|
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
||||||
|
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
||||||
|
|
||||||
|
.ui-slider-vertical { width: .8em; height: 100px; }
|
||||||
|
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
||||||
|
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
||||||
|
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
||||||
|
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-tabs { padding: .2em; zoom: 1; }
|
||||||
|
.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
|
||||||
|
.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
|
||||||
|
.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
||||||
|
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
||||||
|
.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
|
||||||
|
.ui-tabs .ui-tabs-hide { display: none !important; }
|
749
media/dashboard/css/dashboard.css
Executable file
@ -0,0 +1,749 @@
|
|||||||
|
#head{height:115px;margin-top:5px}.logo{background:url(/media/dashboard/img/home_head_logo.png) no-repeat left;float:left;height:85px;width:550px}.nav{float:right}.sub_nav {background:url(/media/dashboard/img/nav_highlight.png) no-repeat 6px bottom;float:right;height:30px;}.sub_nav a {display:block;float:left;height:20px;margin-top:4px;}
|
||||||
|
.nav {
|
||||||
|
padding-top:1px;
|
||||||
|
}
|
||||||
|
.nav a {
|
||||||
|
background:url(/media/dashboard/img/home-head-nav.png) no-repeat 0 0;
|
||||||
|
display:block;
|
||||||
|
float:left;
|
||||||
|
height:84px;
|
||||||
|
width:78px
|
||||||
|
}
|
||||||
|
.account a, .nav a {
|
||||||
|
color:#fff;font-weight:normal;
|
||||||
|
}
|
||||||
|
.account {
|
||||||
|
float:right;height:62px;width:390px;
|
||||||
|
}
|
||||||
|
.account a {
|
||||||
|
display:block;float:right;font-size:.9em;margin:12px 0;padding:8px;
|
||||||
|
}
|
||||||
|
#content {
|
||||||
|
padding:15px 0 10px;
|
||||||
|
}
|
||||||
|
.page_title {
|
||||||
|
padding-bottom:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%; margin-bottom: 25px
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
background: #333; color: white; padding: 4px 8px; font-size: 1.2em;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
padding: 4px 8px;
|
||||||
|
}
|
||||||
|
.odd {
|
||||||
|
background: #adf;
|
||||||
|
}
|
||||||
|
.section {
|
||||||
|
background: #333; color: white; padding: 4px 8px; font-size: 1.5em
|
||||||
|
}
|
||||||
|
|
||||||
|
/* __ */
|
||||||
|
|
||||||
|
#bread_crumbs {
|
||||||
|
background: #2d2d2d;
|
||||||
|
float: left;
|
||||||
|
width: 920px;
|
||||||
|
color: #989898;
|
||||||
|
border-top: 1px solid #000;
|
||||||
|
margin-left: 10px;
|
||||||
|
padding: 0 5px 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bread_crumbs ul {
|
||||||
|
float: left;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#bread_crumbs ul li {
|
||||||
|
float: left;
|
||||||
|
margin-right: 10px;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bread_crumbs ul li a {
|
||||||
|
background: url(/media/dashboard/img/bread_crumb.gif) top right no-repeat;
|
||||||
|
display: block;
|
||||||
|
color: #ccc;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
padding-right: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bread_crumbs ul li a:hover {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#links {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login {
|
||||||
|
width: 445px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login fieldset {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login #error {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 14px;
|
||||||
|
background: rgba(255,0,0,0.51);
|
||||||
|
padding: 5px;
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
border-top: 1px solid rgba(255,0,0,0.47);
|
||||||
|
border-bottom: 1px solid rgba(255,0,0,0.47);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#home_login label {
|
||||||
|
display: block;
|
||||||
|
float: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 0 5px;
|
||||||
|
width: auto;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login fieldset {
|
||||||
|
background: 0;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login input {
|
||||||
|
height: 25px;
|
||||||
|
font-size: 20px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
#home_login input[type="submit"] {
|
||||||
|
height: 31px;
|
||||||
|
background: url(/media/dashboard/img/login_btn.png) top left repeat-x;
|
||||||
|
border: 1px solid #206cb5;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px 0 0;
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
-border-radius: 3px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
width: 121px;
|
||||||
|
font-size: 18px;
|
||||||
|
text-shadow: #06416e -1px -1px 2px;
|
||||||
|
cursor: pointer;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login input[type="submit"]:hover {
|
||||||
|
background-position: center left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login input[type="submit"]:active {
|
||||||
|
background-position: bottom left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login div {
|
||||||
|
float: right;
|
||||||
|
width: 125px;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login div a {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
color: rgba(255,0,4,0.75) !important;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
#home_login div a:hover {
|
||||||
|
color: rgba(255,0,4,1) !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#tab_content {
|
||||||
|
float: left;
|
||||||
|
margin-left: 25px;
|
||||||
|
width: 538px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block {
|
||||||
|
float: left;
|
||||||
|
width: 254px;
|
||||||
|
margin-right: 30px;
|
||||||
|
background-color: #dff2ff;
|
||||||
|
border: 1px solid #b1e7ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#last.block {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block ul {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block ul li.odd {
|
||||||
|
background: #d2edff;
|
||||||
|
}
|
||||||
|
.block ul li {
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block ul li.last {
|
||||||
|
border: navajowhite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block a {
|
||||||
|
font-size: 12px;
|
||||||
|
display: block;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-left: 10px;
|
||||||
|
color: #0a4a7a !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tab_content.home {
|
||||||
|
margin-left: 0;
|
||||||
|
width: 888px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
#projects {
|
||||||
|
float: left;
|
||||||
|
margin: 0 20px 0 0;
|
||||||
|
width: 456px;
|
||||||
|
|
||||||
|
}
|
||||||
|
#projects li {
|
||||||
|
border-bottom: 1px solid #bce3ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projects a {
|
||||||
|
display: block;
|
||||||
|
background: url(/media/dashboard/img/server_icon.png) no-repeat 13px 9px;
|
||||||
|
font-size: 14px;
|
||||||
|
padding-left: 58px;
|
||||||
|
height: 35px;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
z-index: 100;
|
||||||
|
text-shadow: #000000 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projects a:hover {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #b8e1ff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projects a:active {
|
||||||
|
background-color: #30a9ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.data {
|
||||||
|
color: #0d66a9;
|
||||||
|
font-size: 11px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav {
|
||||||
|
float: left;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
width: 154px;
|
||||||
|
height: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav a {
|
||||||
|
background: url(/media/dashboard/img/nav_bg.png) top left repeat-x;
|
||||||
|
display: block;
|
||||||
|
height: 16px;
|
||||||
|
color: #666;
|
||||||
|
padding: 7px;
|
||||||
|
width: 140px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav li.active {
|
||||||
|
width: 155px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav li.active a {
|
||||||
|
background: #f2f5f7;
|
||||||
|
width: 141px;
|
||||||
|
border-bottom: 1px solid #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav a:hover{
|
||||||
|
background-position: bottom left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content {
|
||||||
|
float: left;
|
||||||
|
width: 743px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#welcome {
|
||||||
|
float: left;
|
||||||
|
width: 350px;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav {
|
||||||
|
margin: 0 0 20px;
|
||||||
|
list-style: none;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav li {
|
||||||
|
background: #444 ;
|
||||||
|
float: left;
|
||||||
|
margin-right: 10px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
-border-radius: 3px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
width: 847px;
|
||||||
|
padding: 1px 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav li:hover {
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav a {
|
||||||
|
font-weight: normal;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav a:hover {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav li a span {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#lnk_board {
|
||||||
|
background: url(/media/dashboard/img/chat_icon.png) no-repeat 0 12px;
|
||||||
|
display: block;
|
||||||
|
height: 18px;
|
||||||
|
color: #e5e5e5;
|
||||||
|
text-shadow: #595959 0 1px 2px;
|
||||||
|
padding: 7px 7px 7px 51px;
|
||||||
|
text-decoration: none;
|
||||||
|
float: left;
|
||||||
|
width: 809px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#lnk_wiki {
|
||||||
|
background: url(/media/dashboard/img/book_icon.png) no-repeat 0 12px;
|
||||||
|
display: block;
|
||||||
|
height: 18px;
|
||||||
|
width: 809px;
|
||||||
|
color: #e5e5e5;
|
||||||
|
padding: 7px 7px 7px 50px;
|
||||||
|
text-decoration: none;
|
||||||
|
text-shadow: #595959 0 1px 2px;
|
||||||
|
float: left;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_resources {
|
||||||
|
float: left;
|
||||||
|
width: 408px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content form {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content .block {
|
||||||
|
width: 341px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content label {
|
||||||
|
text-align: left;
|
||||||
|
margin: 10px 0 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
text-shadow: #fff 0 1px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content fieldset {
|
||||||
|
padding: 20px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content .block h2 {
|
||||||
|
margin: 0 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content form input {
|
||||||
|
width: 90%;
|
||||||
|
padding: 7px;
|
||||||
|
height: 15px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.block.last {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-widget-content{
|
||||||
|
background-image: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dash-wrap {
|
||||||
|
background: url(/media/dashboard/img/content_bg.gif) repeat-y 0 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content th, #radar th, fieldset h3, .block h3 {
|
||||||
|
background: #1b1b1b url(/media/dashboard/img/table_header_bg.png) repeat-x top left;
|
||||||
|
border: 1px solid #6e6e6e;
|
||||||
|
text-shadow: #4f4f4f 0 1px 2px;
|
||||||
|
color: #ebebeb;
|
||||||
|
font-size: 14px;
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tab_content.home .block h3 {
|
||||||
|
margin: 0;
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block h3 {
|
||||||
|
margin: 0;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block fieldset h3 {
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-left: 10px;
|
||||||
|
margin: -20px -20px 10px;
|
||||||
|
height: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset h3 {
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-left: -20px;
|
||||||
|
padding: 7px 0 5px 8px;
|
||||||
|
height: 17px;
|
||||||
|
margin-right: -20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#right_content tr.odd, #radar tr.odd {
|
||||||
|
background: #dff2ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content tr.even, #radar tr.even {
|
||||||
|
background: #f1f9ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content tr.even td.odd, #radar tr.even td.odd {
|
||||||
|
background: #e9f5ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content tr.odd td.odd, #radar tr.odd td.odd {
|
||||||
|
background: #cceaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content table form#instances {
|
||||||
|
margin-right: -27px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content table form.volume {
|
||||||
|
margin-right: -50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content table form {
|
||||||
|
margin-right: -18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content input[type="submit"], a.ui-state-default {
|
||||||
|
height: 35px;
|
||||||
|
width: auto;
|
||||||
|
float: right;
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 0 4px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content input[type="submit"]:hover, a.ui-state-default:hover {
|
||||||
|
background: url(/media/dashboard/css/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content input[type="submit"]:active, a.ui-state-default:active {
|
||||||
|
background-color: #c2ecff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content fieldset input {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-right: 0;
|
||||||
|
width: 279px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.ui-state-default {
|
||||||
|
padding: 8px;
|
||||||
|
height: 18px;
|
||||||
|
margin-left: -23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page_head h2, .page_title h2{
|
||||||
|
background: url(/media/dashboard/img/page_header.png) repeat-x top left;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 24px;
|
||||||
|
padding: 8px 20px;
|
||||||
|
text-shadow: #00294d -1px 0 2px;
|
||||||
|
margin-top: -10px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
-moz-border-radius: 5px;
|
||||||
|
-border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page_head p{
|
||||||
|
color: #636363;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home #page_head h2{
|
||||||
|
margin-top: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#spinner {
|
||||||
|
background: url(/media/dashboard/img/spinner.gif) no-repeat;
|
||||||
|
float: right;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
margin-top: 1px;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.home #page_head p {
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#resources {
|
||||||
|
float: right;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch label{
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch select, #authorize select {
|
||||||
|
width: 150px;
|
||||||
|
float: left;
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#authorize label {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch .odd, #frm_launch .even {
|
||||||
|
float: left;
|
||||||
|
width: 326px;
|
||||||
|
margin: 0 -20px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch .odd {
|
||||||
|
background: #def5ff}
|
||||||
|
|
||||||
|
#frm_launch .even {
|
||||||
|
background: #c0e5ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch textarea {
|
||||||
|
width: 98%;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch h3 {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.image_location {
|
||||||
|
clear: both;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.volumes form label {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.volumes form select {
|
||||||
|
float: left;
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content .errorlist {
|
||||||
|
padding: 5px;
|
||||||
|
margin-top: 0;
|
||||||
|
height: 15px;
|
||||||
|
float: left;
|
||||||
|
width: 283px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content .errorlist li {
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch .errorlist {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block fieldset li {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-state-highlight.success {
|
||||||
|
background: #baffd4 !important;
|
||||||
|
border: 1px solid #72df9b !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-state-error {
|
||||||
|
background: #f99 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ft_info {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c7 {
|
||||||
|
width: 650px;
|
||||||
|
}
|
||||||
|
|
||||||
|
em {
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#radar_service td{
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#dlg_launch {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dlg_launch #frm_launch div {
|
||||||
|
width: 385px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dlg_launch #frm_launch textarea {
|
||||||
|
width: 280px;
|
||||||
|
margin-left: 95px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch input.ui-state-default {
|
||||||
|
margin-top: 20px !important;
|
||||||
|
margin-right: -5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-widget-header {
|
||||||
|
background: #1b1b1b url(/media/dashboard/img/table_header_bg.png) top left repeat-x!important;
|
||||||
|
border: none !important;
|
||||||
|
font-weight: bold !important;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-dialog-buttonpane {
|
||||||
|
background: #c0e5ff !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
form.form-terminate input {
|
||||||
|
margin-right: 15px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
form.form-key-delete input {
|
||||||
|
position: relative;
|
||||||
|
margin-left: 30px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#image_launch a {
|
||||||
|
margin-left: -38px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-widget .close {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.error {
|
||||||
|
background-color: #f99;
|
||||||
|
color: white;
|
||||||
|
border: 1px solid #ff7676;
|
||||||
|
font-size: 13px;
|
||||||
|
padding: 5px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#radar_service {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.radar_name a{
|
||||||
|
display: block;
|
||||||
|
height: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tr#heading {
|
||||||
|
margin-top: -20px !Important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#service_head {
|
||||||
|
margin-top: 10px ;
|
||||||
|
}
|
||||||
|
#service_stats tr td{
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#radar_service th, #service_head th {
|
||||||
|
height: 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#id_community_advprofile_avatar {
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
background: #e1e1e1;
|
||||||
|
padding: 5px;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre code {
|
||||||
|
background: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
217
media/dashboard/css/dashboard_sub.css
Executable file
@ -0,0 +1,217 @@
|
|||||||
|
#content {background:url(/media/dashboard/img/content_shadow.png) no-repeat center top;}
|
||||||
|
.sphboard_categories {
|
||||||
|
border-collapse:collapse;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
.sphboard_categories td, .sphboard_categories th {
|
||||||
|
border:1px solid gray;
|
||||||
|
padding:5px;
|
||||||
|
}
|
||||||
|
.sphboard_categories th {
|
||||||
|
white-space:nowrap;
|
||||||
|
}
|
||||||
|
.sphboard_threadcount, .sphboard_postcount, .sphboard_threadcount, .sphboard_viewcount {
|
||||||
|
text-align:right;
|
||||||
|
width:5%;
|
||||||
|
}
|
||||||
|
.sphboard_latestpost {
|
||||||
|
width:40%;
|
||||||
|
}
|
||||||
|
.sphboard_postform {
|
||||||
|
border:1px solid black;
|
||||||
|
border-collapse:collapse;
|
||||||
|
width:80%;
|
||||||
|
}
|
||||||
|
.sphboard_postform td, .sphboard_postform th {
|
||||||
|
padding:3px;
|
||||||
|
}
|
||||||
|
.sphboard_postform input[type="text"], .sphboard_postform textarea {
|
||||||
|
width:80%;
|
||||||
|
}
|
||||||
|
.sph_captcha input[type="text"] {
|
||||||
|
width:100px;
|
||||||
|
}
|
||||||
|
.sphboard_post_list {
|
||||||
|
border-collapse:collapse;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
.sphboard_post_list td, .sphboard_post_list th {
|
||||||
|
border:1px solid gray;
|
||||||
|
padding:5px;
|
||||||
|
}
|
||||||
|
.sphboard_post_list td.sphboard_post_subject {
|
||||||
|
height:10px;
|
||||||
|
}
|
||||||
|
.sphboard_post_list td.sphboard_post_body {
|
||||||
|
min-height:100px;
|
||||||
|
vertical-align:top;
|
||||||
|
}
|
||||||
|
.sphboard_post_list td.sphboard_post_authorinfo {
|
||||||
|
padding-top:2em;
|
||||||
|
vertical-align:top;
|
||||||
|
width:150px;
|
||||||
|
}
|
||||||
|
dl.sphboard_post_authorinfo_details dt {
|
||||||
|
font-weight:bold;
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
dl.sphboard_post_authorinfo_details dt:after {
|
||||||
|
content:": ";
|
||||||
|
}
|
||||||
|
dl.sphboard_post_authorinfo_details dd {
|
||||||
|
margin:0 0 0 1em;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
.sphboard_thread_list {
|
||||||
|
border-collapse:collapse;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
.sphboard_mainhead {
|
||||||
|
background-color:#0066CC;
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
.sphboard_thread_list td, .sphboard_thread_list th {
|
||||||
|
border:1px solid gray;
|
||||||
|
padding:5px;
|
||||||
|
}
|
||||||
|
.sphboard_post_body .signature {
|
||||||
|
border-top:1px solid gray;
|
||||||
|
color:gray;
|
||||||
|
display:block;
|
||||||
|
font-size:smaller;
|
||||||
|
margin-top:20px;
|
||||||
|
padding-left:10px;
|
||||||
|
}
|
||||||
|
.sphboard_post_body .annotation_not_hidden {
|
||||||
|
border-bottom:1px solid gray;
|
||||||
|
font-size:smaller;
|
||||||
|
}
|
||||||
|
.sphboard_post_body .attachments {
|
||||||
|
border-top:1px solid black;
|
||||||
|
font-size:smaller;
|
||||||
|
margin-top:20px;
|
||||||
|
padding-left:10px;
|
||||||
|
}
|
||||||
|
.sphboard_post_body .attachments:before {
|
||||||
|
content:attr(title);
|
||||||
|
}
|
||||||
|
.sphboard {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
.sphboard textarea {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sphboard label {
|
||||||
|
margin-left:20px;
|
||||||
|
width:auto;
|
||||||
|
float:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sphboard input {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.board_previewarea {
|
||||||
|
border:2px solid gray;
|
||||||
|
display:none;
|
||||||
|
max-height:500px;
|
||||||
|
overflow:scroll;
|
||||||
|
padding:5px;
|
||||||
|
visibility:hidden;
|
||||||
|
}
|
||||||
|
.board_threadcount {
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
.board_pagination {
|
||||||
|
display:block;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
.board_postdate {
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
.board_controls {
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
.polls_percent {
|
||||||
|
white-space:nowrap;
|
||||||
|
}
|
||||||
|
.polls_percentbar {
|
||||||
|
background-color:#CCCCCC;
|
||||||
|
font-size:5px;
|
||||||
|
height:10px;
|
||||||
|
}
|
||||||
|
.polls_choices {
|
||||||
|
list-style:none outside none;
|
||||||
|
}
|
||||||
|
ul.sphboard_post_summary {
|
||||||
|
display:block;
|
||||||
|
list-style-type:none;
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
.sphboard_post_summary li {
|
||||||
|
border-bottom:1px dotted gray;
|
||||||
|
display:block;
|
||||||
|
margin:0;
|
||||||
|
padding:1em;
|
||||||
|
}
|
||||||
|
.sphboard_post_summary li:hover {
|
||||||
|
background-color:#DDDDFF;
|
||||||
|
}
|
||||||
|
.sphboard_post_summary dt {
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
.sphboard_post_summary dd.category {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
.sphboard_post_summary .postdate {
|
||||||
|
font-size:x-small;
|
||||||
|
font-weight:bold;
|
||||||
|
margin-bottom:1em;
|
||||||
|
}
|
||||||
|
.sphboard_post_summary .subject {
|
||||||
|
}
|
||||||
|
.sphboard_post_summary .body {
|
||||||
|
max-height:4em;
|
||||||
|
overflow:hidden;
|
||||||
|
}
|
||||||
|
.sphboard_post_summary li:hover .body {
|
||||||
|
max-height:20em;
|
||||||
|
}
|
||||||
|
table.sphlist_threadlist {
|
||||||
|
border-collapse:collapse;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
table.sphlist_threadlist th {
|
||||||
|
font-size:smaller;
|
||||||
|
}
|
||||||
|
table.sphlist_threadlist td, table.sphlist_threadlist th {
|
||||||
|
border:1px solid gray;
|
||||||
|
padding:5px;
|
||||||
|
}
|
||||||
|
.sphlist_threadlist_newpost {
|
||||||
|
width:20px;
|
||||||
|
}
|
||||||
|
td.sphlist_threadlist_views, td.sphlist_threadlist_posts {
|
||||||
|
text-align:right;
|
||||||
|
width:5%;
|
||||||
|
}
|
||||||
|
th.sphlist_threadlist_views {
|
||||||
|
white-space:nowrap;
|
||||||
|
}
|
||||||
|
div.sortorder_desc:after {
|
||||||
|
content:"↓";
|
||||||
|
}
|
||||||
|
div.sortorder_asc:after {
|
||||||
|
content:"↑";
|
||||||
|
}
|
||||||
|
.sphlist_threadlist_object_count {
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
.sphlist_threadlist_pagination {
|
||||||
|
display:block;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
541
media/dashboard/css/django-admin-widgets.css
Normal file
@ -0,0 +1,541 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) Django Software Foundation and individual contributors.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of Django nor the names of its contributors may be used
|
||||||
|
to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* SELECTOR (FILTER INTERFACE) */
|
||||||
|
|
||||||
|
.selector {
|
||||||
|
width: 580px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector select {
|
||||||
|
width: 270px;
|
||||||
|
height: 17.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-available, .selector-chosen {
|
||||||
|
float: left;
|
||||||
|
width: 270px;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-available h2, .selector-chosen h2 {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
background: #C9DBED url(/media/admin/img/admin/default-bg.gif) bottom left repeat-x;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-available h2 {
|
||||||
|
background: white url(/media/admin/img/admin/nav-bg.gif) bottom left repeat-x;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-filter {
|
||||||
|
background: white;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-width: 0 1px;
|
||||||
|
padding: 3px;
|
||||||
|
color: #999;
|
||||||
|
font-size: 10px;
|
||||||
|
margin: 0;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-chosen .selector-filter {
|
||||||
|
padding: 4px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-available input {
|
||||||
|
width: 230px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector ul.selector-chooser {
|
||||||
|
float: left;
|
||||||
|
width: 22px;
|
||||||
|
height: 50px;
|
||||||
|
background: url(/media/admin/img/admin/chooser-bg.gif) top center no-repeat;
|
||||||
|
margin: 8em 3px 0 3px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-chooser li {
|
||||||
|
margin: 0;
|
||||||
|
padding: 3px;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector select {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-add, .selector-remove {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: block;
|
||||||
|
text-indent: -3000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-add {
|
||||||
|
background: url(/media/admin/img/admin/selector-add.gif) top center no-repeat;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-remove {
|
||||||
|
background: url(/media/admin/img/admin/selector-remove.gif) top center no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-chooseall, a.selector-clearall {
|
||||||
|
display: block;
|
||||||
|
width: 6em;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666;
|
||||||
|
padding: 3px 0 3px 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-chooseall:hover, a.selector-clearall:hover {
|
||||||
|
color: #036;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-chooseall {
|
||||||
|
width: 7em;
|
||||||
|
background: url(/media/admin/img/admin/selector-addall.gif) left center no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-clearall {
|
||||||
|
background: url(/media/admin/img/admin/selector-removeall.gif) left center no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* STACKED SELECTORS */
|
||||||
|
|
||||||
|
.stacked {
|
||||||
|
float: left;
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked select {
|
||||||
|
width: 480px;
|
||||||
|
height: 10.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-available, .stacked .selector-chosen {
|
||||||
|
width: 480px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-available {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-available input {
|
||||||
|
width: 442px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked ul.selector-chooser {
|
||||||
|
height: 22px;
|
||||||
|
width: 50px;
|
||||||
|
margin: 0 0 3px 40%;
|
||||||
|
background: url(/media/admin/img/admin/chooser_stacked-bg.gif) top center no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-chooser li {
|
||||||
|
float: left;
|
||||||
|
padding: 3px 3px 3px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-chooseall, .stacked .selector-clearall {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-add {
|
||||||
|
background-image: url(/media/admin/img/admin/selector_stacked-add.gif);
|
||||||
|
}
|
||||||
|
|
||||||
|
.stacked .selector-remove {
|
||||||
|
background-image: url(/media/admin/img/admin/selector_stacked-remove.gif);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* DATE AND TIME */
|
||||||
|
|
||||||
|
p.datetime {
|
||||||
|
line-height: 20px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
color: #666;
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datetime span {
|
||||||
|
font-size: 11px;
|
||||||
|
color: #ccc;
|
||||||
|
font-weight: normal;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
table p.datetime {
|
||||||
|
font-size: 10px;
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FILE UPLOADS */
|
||||||
|
|
||||||
|
p.file-upload {
|
||||||
|
line-height: 20px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
color: #666;
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-upload a {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-upload .deletelink {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CALENDARS & CLOCKS */
|
||||||
|
|
||||||
|
.calendarbox, .clockbox {
|
||||||
|
margin: 5px auto;
|
||||||
|
font-size: 11px;
|
||||||
|
width: 16em;
|
||||||
|
text-align: center;
|
||||||
|
background: white;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockbox {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar table {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
background: white;
|
||||||
|
width: 99%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar caption, .calendarbox h2 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 11px;
|
||||||
|
text-align: center;
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar th {
|
||||||
|
font-size: 10px;
|
||||||
|
color: #666;
|
||||||
|
padding: 2px 3px;
|
||||||
|
text-align: center;
|
||||||
|
background: #e1e1e1 url(/media/admin/img/admin/nav-bg.gif) 0 50% repeat-x;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td {
|
||||||
|
font-size: 11px;
|
||||||
|
text-align: center;
|
||||||
|
padding: 0;
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td.selected a {
|
||||||
|
background: #C9DBED;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td.nonday {
|
||||||
|
background: #efefef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td.today a {
|
||||||
|
background: #ffc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td a, .timelist a {
|
||||||
|
display: block;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 4px;
|
||||||
|
text-decoration: none;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td a:hover, .timelist a:hover {
|
||||||
|
background: #5b80b2;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar td a:active, .timelist a:active {
|
||||||
|
background: #036;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav {
|
||||||
|
font-size: 10px;
|
||||||
|
text-align: center;
|
||||||
|
color: #ccc;
|
||||||
|
margin: 0;
|
||||||
|
padding: 1px 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav a:link, #calendarnav a:visited, #calendarnav a:hover {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-shortcuts {
|
||||||
|
background: white;
|
||||||
|
font-size: 10px;
|
||||||
|
line-height: 11px;
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
padding: 3px 0 4px;
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 12px;
|
||||||
|
background: #C9DBED url(/media/admin/img/admin/default-bg.gif) bottom left repeat-x;
|
||||||
|
padding: 1px 4px 2px 4px;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav-previous:hover, .calendarnav-next:hover {
|
||||||
|
background: #036;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav-previous {
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarnav-next {
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-cancel {
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 10px;
|
||||||
|
background: #e1e1e1 url(/media/admin/img/admin/nav-bg.gif) 0 50% repeat-x;
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-cancel a {
|
||||||
|
padding: 2px;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.timelist, .timelist li {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timelist a {
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* INLINE ORDERER */
|
||||||
|
|
||||||
|
ul.orderer {
|
||||||
|
position: relative;
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li {
|
||||||
|
list-style-type: none;
|
||||||
|
display: block;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: 1px solid #bbb;
|
||||||
|
border-width: 0 1px 1px 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
background: #e2e2e2 url(/media/admin/img/admin/nav-bg-grabber.gif) repeat-y;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li:hover {
|
||||||
|
cursor: move;
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li a.selector {
|
||||||
|
margin-left: 12px;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 83%;
|
||||||
|
font-size: 10px !important;
|
||||||
|
padding: 0.6em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li a:link, ul.orderer li a:visited {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li .inline-deletelink {
|
||||||
|
position: absolute;
|
||||||
|
right: 4px;
|
||||||
|
margin-top: 0.6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li.selected {
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
border-right-color: #f8f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li.deleted {
|
||||||
|
background: #bbb url(/media/admin/img/admin/deleted-overlay.gif);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li.deleted a:link, ul.orderer li.deleted a:visited {
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li.deleted .inline-deletelink {
|
||||||
|
background-image: url(/media/admin/img/admin/inline-restore.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.orderer li.deleted:hover, ul.orderer li.deleted a.selector:hover {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EDIT INLINE */
|
||||||
|
|
||||||
|
.inline-deletelink {
|
||||||
|
display: block;
|
||||||
|
text-indent: -9999px;
|
||||||
|
background: transparent url(/media/admin/img/admin/inline-delete.png) no-repeat;
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
margin: 0.4em 0;
|
||||||
|
border: 0px none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-deletelink:hover {
|
||||||
|
background-position: -15px 0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline button.addlink {
|
||||||
|
border: 0px none;
|
||||||
|
color: #5b80b2;
|
||||||
|
font-size: 100%;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline button.addlink:hover {
|
||||||
|
color: #036;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline table .help {
|
||||||
|
text-align: right;
|
||||||
|
float: right;
|
||||||
|
padding-left: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline tfoot .addlink {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline table thead th:last-child {
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline tr.deleted {
|
||||||
|
background: #ddd url(/media/admin/img/admin/deleted-overlay.gif);
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline tr.deleted .inline-deletelink {
|
||||||
|
background-image: url(/media/admin/img/admin/inline-restore.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline tr.deleted td:hover {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline tr.deleted td:first-child {
|
||||||
|
background-image: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EDIT INLINE - STACKED */
|
||||||
|
|
||||||
|
.editinline-stacked {
|
||||||
|
min-width: 758px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline-stacked .inline-object {
|
||||||
|
margin-left: 210px;
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline-stacked .inline-source {
|
||||||
|
float: left;
|
||||||
|
width: 200px;
|
||||||
|
background: #f8f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline-stacked .inline-splitter {
|
||||||
|
float: left;
|
||||||
|
width: 9px;
|
||||||
|
background: #f8f8f8 url(/media/admin/img/admin/inline-splitter-bg.gif) 50% 50% no-repeat;
|
||||||
|
border-right: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editinline-stacked .controls {
|
||||||
|
clear: both;
|
||||||
|
background: #e1e1e1 url(/media/admin/img/admin/nav-bg.gif) top left repeat-x;
|
||||||
|
padding: 3px 4px;
|
||||||
|
font-size: 11px;
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
form#send_credentials {
|
||||||
|
clear: both;
|
||||||
|
}
|
18
media/dashboard/css/global.css
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
html, body, div, span, img, h1, h2, h3, h4, h5, h6, p, big, small, a, del, em, strong, sub, sup, code, pre, dl, dt, dd, ol, ul, li, blockquote, q, form, label, legend, fieldset, input, select, textarea, table, tbody, tfoot, thead, caption, tr, th, td{font:normal normal normal 100%/1.22em 'Helvetica', Arial, sans-serif;margin:0;padding:0}p, h1, h2, h3, h4, h5, h6, ol, ul, table{margin-bottom:20px}body{background-color:#FBFEFF;background-position:50% top;background-repeat:repeat-x;color:#333;font-size:.875em}img, fieldset{border:0}h1, h2, h3, h4, h5, h6, strong{font-weight:bold}h1, h2, h3{margin-bottom:15px}h1{font-size:1.3em}h2{font-size:1.2em}h3, big{font-size:1.1em}h4{font-size:1em}h5, small{font-size:.9em}h6, .tiny{font-size:.8em}a{color:#06c;font-weight:bold}a:hover{cursor:pointer;text-decoration:underline}a, del{text-decoration:none}sup{vertical-align:text-top}sub{vertical-align:text-bottom}ol, ul{line-height:1.5em;margin-left:30px}ol ol, ol ul, ul ol, ul ul{margin-bottom:0}blockquote, q{quotes: none}blockquote:before, blockquote:after, q:before, q:after{content: '';content: none}table{border-collapse:collapse;border-spacing:0}caption, th{text-align:left}.right{float:right}.left{float:left}img.right{margin:0 0 5px 15px}img.left{margin:0 20px 5px 0}.clr{clear:both}#head, #content, #foot, .box{clear:both;margin:0 auto;width:960px}#content{padding:30px 0 10px}
|
||||||
|
|
||||||
|
.page_title {padding-bottom:30px}.page_side p, .page_side ol, .page_side ul {margin-bottom:5px}.page_side_item{border-bottom:1px solid #adf;margin-bottom:17px;padding-bottom:5px}
|
||||||
|
|
||||||
|
.title_blank {background:url(/media/dashboard/img/title-blank.png) no-repeat top left;color:#fff;display:block;height:74px;font-size:24px;font-weight:bold;line-height:73px;padding-left:25px;}
|
||||||
|
|
||||||
|
.blog_post {border-bottom:1px solid #adf;margin-bottom:15px}.blog_post_last {margin-bottom:20px}.blog_post_info h3, .blog_post_info p {line-height:1.5em}.blog_post_info h3 {display:inline;margin:0}.blog_post_info p {color:#555;font-size:.9em;margin:-2px 0 10px}.blog_comment {margin-left:30px;}.blog_subs ul, .blog_archive ul {list-style:none;margin-left:10px}.blog_subs a {background:url(/media/dashboard/img/item-icon-rss.png) no-repeat;padding:0 0 0 25px;}.blog_subs a, .blog_archive a {display:block;margin:0;height:25px;width:170px;}.blog_archive div {margin-bottom:5px;}
|
||||||
|
|
||||||
|
.pagi_bar {border-bottom:1px solid #adf;font-size:1.2em;margin-bottom:15px;}.pagi_bar span {font-weight:bold;}a.pagi_first, a.pagi_prev, a.pagi_next, a.pagi_last {background:url(/media/dashboard/img/item-icon-pagination.png) no-repeat 0 1px;display:block;height:15px;width:15px;}a.pagi_first, a.pagi_prev, .page_pages, a.pagi_next, a.pagi_last {float:left;}.pagi_pagination {float:right}a:hover.pagi_first {background-position:0 -14px}a.pagi_prev {background-position:-12px 1px}a.pagi_first, a.pagi_prev {margin-right:5px}a.pagi_next {background-position:-24px 1px}a.pagi_last {background-position:-40px 1px}a.pagi_next, a.pagi_last {margin-left:5px;}
|
||||||
|
|
||||||
|
form h2 {background:url(/media/dashboard/img/title-blank-short.png) no-repeat top left;color:#fff;display:block;height:40px;font-size:18px;font-weight:bold;line-height:40px;padding-left:25px;margin:0}
|
||||||
|
form div, form p {margin:0 15px 5px} form label, form input {margin-right:10px;} form label {display:block;float:left;font-size:.9em;font-weight:bold;margin-left:10px;text-align:right;width:150px;} form input {width:150px;} .form_button {margin:-5px 0 30px 185px;} fieldset {background:#def5ff url(/media/dashboard/img/title-blank-short-foot.png) no-repeat bottom;margin-bottom:25px;padding: 20px 0 15px;}
|
||||||
|
|
||||||
|
.errorlist {background:#fcc;border:1px solid #c66;color:#600;list-style:none;margin:5px 15px 15px 170px;padding:4px 8px 3px;}
|
||||||
|
|
||||||
|
.foot{background:#D0F0FF url(/media/dashboard/img/foot_back.png) repeat-x 50% top}#foot{padding:40px 0 15px}#foot, #foot a{color:#fff}.ft_sitemap div{clear:both;height:20px;margin-bottom:15px}.ft_sitemap ul{list-style:none;margin-left:0}.ft_sitemap ul li{float:left;font-size:.8em;list-style:none;margin:3px 20px 0 0}.ft_sitemap .sub{padding-bottom:15px}.ft_social{float:right}.ft_social a{display:block;float:left;margin-left:10px;height:36px;width:36px}.ft_s_twitter{background:url(/media/dashboard/img/social_icon_twitter.png)}.ft_s_facebook{background:url(/media/dashboard/img/social_icon_facebook.png)}.ft_s_digg{background:url(/media/dashboard/img/social_icon_digg.png)}.ft_s_delicious{background:url(/media/dashboard/img/social_icon_delicious.png)}.ft_s_stumble{background:url(/media/dashboard/img/social_icon_stumble.png)}.ft_s_reddit{background:url(/media/dashboard/img/social_icon_reddit.png)}.ft_s_technorati{background:url(/media/dashboard/img/social_icon_technorati.png)}.ft_s_newsvine{background:url(/media/dashboard/img/social_icon_newsvine.png)}.ft_info{font-size:.9em;margin-top:60px;text-align:right}
|
||||||
|
|
||||||
|
.c3, .c4, .c5, .c6, .c7, .c8, .c9, .c12{display: inline;float: left;position: relative;margin:0 10px 0}.first{margin-left:0}.last{margin-right:0}.c3{width: 220px}.c4{width: 300px}.c5{width: 380px}.c6{width: 460px}.c7{width: 540px}.c8{width: 620px}.c9{width: 700px}.c12{width: 940px}#content .c3 {width: 190px;padding:0 15px}#content .c4 {width: 270px;padding:0 15px}#content .c8 {width: 590px;padding:0 15px}#content .c9 {width: 670px;padding:0 15px}
|
745
media/dashboard/css/home.css
Normal file
@ -0,0 +1,745 @@
|
|||||||
|
.nav {
|
||||||
|
padding-top:1px;
|
||||||
|
}
|
||||||
|
.nav a {
|
||||||
|
background:url(/media/dashboard/img/home-head-nav.png) no-repeat 0 0;
|
||||||
|
display:block;
|
||||||
|
float:left;
|
||||||
|
height:84px;
|
||||||
|
width:78px
|
||||||
|
}
|
||||||
|
.account a, .nav a {
|
||||||
|
color:#fff;font-weight:normal;
|
||||||
|
}
|
||||||
|
.account {
|
||||||
|
float:right;height:62px;width:390px;
|
||||||
|
}
|
||||||
|
.account a {
|
||||||
|
display:block;float:right;font-size:.9em;margin:12px 0;padding:8px;
|
||||||
|
}
|
||||||
|
#content {
|
||||||
|
padding:15px 0 10px;
|
||||||
|
}
|
||||||
|
.page_title {
|
||||||
|
padding-bottom:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%; margin-bottom: 25px
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
background: #333; color: white; padding: 4px 8px; font-size: 1.2em;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
padding: 4px 8px;
|
||||||
|
}
|
||||||
|
.odd {
|
||||||
|
background: #adf;
|
||||||
|
}
|
||||||
|
.section {
|
||||||
|
background: #333; color: white; padding: 4px 8px; font-size: 1.5em
|
||||||
|
}
|
||||||
|
|
||||||
|
/* __ */
|
||||||
|
|
||||||
|
#bread_crumbs {
|
||||||
|
background: #2d2d2d;
|
||||||
|
float: left;
|
||||||
|
width: 920px;
|
||||||
|
color: #989898;
|
||||||
|
border-top: 1px solid #000;
|
||||||
|
margin-left: 10px;
|
||||||
|
padding: 0 5px 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bread_crumbs ul {
|
||||||
|
float: left;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#bread_crumbs ul li {
|
||||||
|
float: left;
|
||||||
|
margin-right: 10px;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bread_crumbs ul li a {
|
||||||
|
background: url(/media/dashboard/img/bread_crumb.gif) top right no-repeat;
|
||||||
|
display: block;
|
||||||
|
color: #ccc;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
padding-right: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bread_crumbs ul li a:hover {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#links {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login {
|
||||||
|
width: 445px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login fieldset {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#forgot_password {
|
||||||
|
width: 200px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
#home_login #error {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 14px;
|
||||||
|
background: rgba(255,0,0,0.51);
|
||||||
|
padding: 5px;
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
border-top: 1px solid rgba(255,0,0,0.47);
|
||||||
|
border-bottom: 1px solid rgba(255,0,0,0.47);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#home_login label {
|
||||||
|
display: block;
|
||||||
|
float: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 0 5px;
|
||||||
|
width: auto;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login fieldset {
|
||||||
|
background: 0;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login input {
|
||||||
|
height: 25px;
|
||||||
|
font-size: 20px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
#home_login input[type="submit"] {
|
||||||
|
height: 31px;
|
||||||
|
background: url(/media/dashboard/img/login_btn.png) top left repeat-x;
|
||||||
|
border: 1px solid #206cb5;
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px 0 0;
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
-border-radius: 3px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
width: 121px;
|
||||||
|
font-size: 18px;
|
||||||
|
text-shadow: #06416e -1px -1px 2px;
|
||||||
|
cursor: pointer;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login input[type="submit"]:hover {
|
||||||
|
background-position: center left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login input[type="submit"]:active {
|
||||||
|
background-position: bottom left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login div {
|
||||||
|
float: right;
|
||||||
|
width: 125px;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login div a {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
color: rgba(255,0,4,0.75) !important;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
#home_login div a:hover {
|
||||||
|
color: rgba(255,0,4,1) !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#tab_content {
|
||||||
|
float: left;
|
||||||
|
margin-left: 25px;
|
||||||
|
width: 538px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block {
|
||||||
|
float: left;
|
||||||
|
width: 254px;
|
||||||
|
margin-right: 30px;
|
||||||
|
background-color: #dff2ff;
|
||||||
|
border: 1px solid #b1e7ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#last.block {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block ul {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block ul li.odd {
|
||||||
|
background: #d2edff;
|
||||||
|
}
|
||||||
|
.block ul li {
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block ul li.last {
|
||||||
|
border: navajowhite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block a {
|
||||||
|
font-size: 12px;
|
||||||
|
display: block;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-left: 10px;
|
||||||
|
color: #0a4a7a !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tab_content.home {
|
||||||
|
margin-left: 30px;
|
||||||
|
width: 888px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
#projects {
|
||||||
|
float: left;
|
||||||
|
margin: 0 20px 0 0;
|
||||||
|
width: 456px;
|
||||||
|
|
||||||
|
}
|
||||||
|
#projects li {
|
||||||
|
border-bottom: 1px solid #bce3ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projects a {
|
||||||
|
display: block;
|
||||||
|
background: url(/media/dashboard/img/server_icon.png) no-repeat 13px 9px;
|
||||||
|
font-size: 14px;
|
||||||
|
padding-left: 58px;
|
||||||
|
height: 35px;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
z-index: 100;
|
||||||
|
text-shadow: #000000 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projects a:hover {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #b8e1ff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projects a:active {
|
||||||
|
background-color: #30a9ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.data {
|
||||||
|
color: #0d66a9;
|
||||||
|
font-size: 11px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav {
|
||||||
|
float: left;
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
width: 154px;
|
||||||
|
height: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav a {
|
||||||
|
background: url(/media/dashboard/img/nav_bg.png) top left repeat-x;
|
||||||
|
display: block;
|
||||||
|
height: 16px;
|
||||||
|
color: #666;
|
||||||
|
padding: 7px;
|
||||||
|
width: 140px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav li.active {
|
||||||
|
width: 155px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav li.active a {
|
||||||
|
background: #f2f5f7;
|
||||||
|
width: 141px;
|
||||||
|
border-bottom: 1px solid #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashboard_nav a:hover{
|
||||||
|
background-position: bottom left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content {
|
||||||
|
float: left;
|
||||||
|
width: 743px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#welcome {
|
||||||
|
float: left;
|
||||||
|
width: 350px;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav {
|
||||||
|
margin: 0 0 20px;
|
||||||
|
list-style: none;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav li {
|
||||||
|
background: #444 ;
|
||||||
|
float: left;
|
||||||
|
margin-right: 10px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
-border-radius: 3px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
width: 847px;
|
||||||
|
padding: 1px 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav li:hover {
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav a {
|
||||||
|
font-weight: normal;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav a:hover {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#content_nav li a span {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
display: block;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#lnk_board {
|
||||||
|
background: url(/media/dashboard/img/chat_icon.png) no-repeat 0 12px;
|
||||||
|
display: block;
|
||||||
|
height: 18px;
|
||||||
|
color: #e5e5e5;
|
||||||
|
text-shadow: #595959 0 1px 2px;
|
||||||
|
padding: 7px 7px 7px 51px;
|
||||||
|
text-decoration: none;
|
||||||
|
float: left;
|
||||||
|
width: 809px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#lnk_wiki {
|
||||||
|
background: url(/media/dashboard/img/book_icon.png) no-repeat 0 12px;
|
||||||
|
display: block;
|
||||||
|
height: 18px;
|
||||||
|
width: 809px;
|
||||||
|
color: #e5e5e5;
|
||||||
|
padding: 7px 7px 7px 50px;
|
||||||
|
text-decoration: none;
|
||||||
|
text-shadow: #595959 0 1px 2px;
|
||||||
|
float: left;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_resources {
|
||||||
|
float: left;
|
||||||
|
width: 408px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content form {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content .block {
|
||||||
|
width: 341px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content label {
|
||||||
|
text-align: left;
|
||||||
|
margin: 10px 0 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
text-shadow: #fff 0 1px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content fieldset {
|
||||||
|
padding: 20px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content .block h2 {
|
||||||
|
margin: 0 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content form input {
|
||||||
|
width: 90%;
|
||||||
|
padding: 7px;
|
||||||
|
height: 15px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.block.last {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-widget-content{
|
||||||
|
background-image: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dash-wrap {
|
||||||
|
background: url(/media/dashboard/img/content_bg.gif) repeat-y 0 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content th, #radar th, fieldset h3, .block h3 {
|
||||||
|
background: url(/media/dashboard/img/table_header_bg.png) top left repeat-x;
|
||||||
|
border: 1px solid #6e6e6e;
|
||||||
|
text-shadow: #4f4f4f 0 1px 2px;
|
||||||
|
color: #ebebeb;
|
||||||
|
font-size: 14px;
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tab_content.home .block h3 {
|
||||||
|
margin: 0;
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block h3 {
|
||||||
|
margin: 0;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block fieldset h3 {
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-left: 10px;
|
||||||
|
margin: -20px -20px 10px;
|
||||||
|
height: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset h3 {
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-left: -20px;
|
||||||
|
padding: 7px 0 5px 8px;
|
||||||
|
height: 17px;
|
||||||
|
margin-right: -20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#right_content tr.odd, #radar tr.odd {
|
||||||
|
background: #dff2ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content tr.even, #radar tr.even {
|
||||||
|
background: #f1f9ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content tr.even td.odd, #radar tr.even td.odd {
|
||||||
|
background: #e9f5ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content tr.odd td.odd, #radar tr.odd td.odd {
|
||||||
|
background: #cceaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content table form#instances {
|
||||||
|
margin-right: -27px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content table form.volume {
|
||||||
|
margin-right: -50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content table form {
|
||||||
|
margin-right: -18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content input[type="submit"], a.ui-state-default {
|
||||||
|
height: 35px;
|
||||||
|
width: auto;
|
||||||
|
float: right;
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 0 4px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content input[type="submit"]:hover, a.ui-state-default:hover {
|
||||||
|
background: url(/media/dashboard/css/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content input[type="submit"]:active, a.ui-state-default:active {
|
||||||
|
background-color: #c2ecff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content fieldset input {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-right: 0;
|
||||||
|
width: 279px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.ui-state-default {
|
||||||
|
padding: 8px;
|
||||||
|
height: 18px;
|
||||||
|
margin-left: -23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page_head h2, .page_title h2{
|
||||||
|
background: url(/media/dashboard/img/page_header.png) repeat-x top left;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 24px;
|
||||||
|
padding: 20px;
|
||||||
|
text-shadow: #00294d -1px 0 2px;
|
||||||
|
margin-top: -10px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
-moz-border-radius: 5px;
|
||||||
|
-border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page_head p{
|
||||||
|
color: #636363;
|
||||||
|
margin-top: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home #page_head h2{
|
||||||
|
margin-top: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#spinner {
|
||||||
|
background: url(/media/dashboard/img/spinner.gif) no-repeat;
|
||||||
|
float: right;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
margin-top: 1px;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.home #page_head p {
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#resources {
|
||||||
|
float: right;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch label{
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch select, #authorize select {
|
||||||
|
width: 150px;
|
||||||
|
float: left;
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#authorize label {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch .odd, #frm_launch .even {
|
||||||
|
float: left;
|
||||||
|
width: 326px;
|
||||||
|
margin: 0 -20px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch .odd {
|
||||||
|
background: #def5ff}
|
||||||
|
|
||||||
|
#frm_launch .even {
|
||||||
|
background: #c0e5ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch textarea {
|
||||||
|
width: 98%;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch h3 {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.image_location {
|
||||||
|
clear: both;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.volumes form label {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.volumes form select {
|
||||||
|
float: left;
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content .errorlist {
|
||||||
|
padding: 5px;
|
||||||
|
margin-top: 0;
|
||||||
|
height: 15px;
|
||||||
|
float: left;
|
||||||
|
width: 283px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right_content .errorlist li {
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch .errorlist {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block fieldset li {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-state-highlight.success {
|
||||||
|
background: #baffd4 !important;
|
||||||
|
border: 1px solid #72df9b !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-state-error {
|
||||||
|
background: #f99 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ft_info {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c7 {
|
||||||
|
width: 650px;
|
||||||
|
}
|
||||||
|
|
||||||
|
em {
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#radar_service td{
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#service_head th{
|
||||||
|
margin-top: 12px;
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dlg_launch {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dlg_launch #frm_launch div {
|
||||||
|
width: 385px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dlg_launch #frm_launch textarea {
|
||||||
|
width: 280px;
|
||||||
|
margin-left: 95px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch input.ui-state-default {
|
||||||
|
margin-top: 20px !important;
|
||||||
|
margin-right: -5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-widget-header {
|
||||||
|
background: #1b1b1b url(/media/dashboard/img/table_header_bg.png) top left repeat-x!important;
|
||||||
|
border: none !important;
|
||||||
|
font-weight: bold !important;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-dialog-buttonpane {
|
||||||
|
background: #c0e5ff !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
form.form-terminate input {
|
||||||
|
margin-right: 15px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
form.form-key-delete input {
|
||||||
|
position: relative;
|
||||||
|
margin-left: 30px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#image_launch a {
|
||||||
|
margin-left: -38px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-widget .close {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.error {
|
||||||
|
background-color: #f99;
|
||||||
|
color: white;
|
||||||
|
border: 1px solid #ff7676;
|
||||||
|
font-size: 13px;
|
||||||
|
padding: 5px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.radar_name a{
|
||||||
|
display: block;
|
||||||
|
height: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#service_head {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#radar_service th, #service_head th {
|
||||||
|
height: 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#id_community_advprofile_avatar {
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
background: #e1e1e1;
|
||||||
|
padding: 5px;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre code {
|
||||||
|
background: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
85
media/dashboard/css/ie7.css
Executable file
@ -0,0 +1,85 @@
|
|||||||
|
#home_login input[type="submit"] { border: none !important; }
|
||||||
|
#resources.block h3 {
|
||||||
|
width: 329px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frm_launch input[type="submit"]{
|
||||||
|
margin-right: -2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.create, input.attach {
|
||||||
|
margin-right: -11px !important;
|
||||||
|
}
|
||||||
|
.dash_block .errorlist {
|
||||||
|
width: 282px !important;
|
||||||
|
padding-left: 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#lnk_board, #lnk_wiki {
|
||||||
|
padding-top: 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 a{position:relative !important;}
|
||||||
|
|
||||||
|
#preview {
|
||||||
|
margin-top: -13px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*#projects .project.active {
|
||||||
|
height: 180px;
|
||||||
|
display: block;
|
||||||
|
filter: alpha(opacity=100);
|
||||||
|
}
|
||||||
|
|
||||||
|
#projects .project.inactive {
|
||||||
|
height: 0;
|
||||||
|
filter: alpha(opacity=0);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
.ft_info {
|
||||||
|
margin-top: 0;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home_login .error, #home_login .errorlist {
|
||||||
|
background: #ef767d !important;
|
||||||
|
border-top: 1px solid #f63e42 !important;
|
||||||
|
border-bottom: 1px solid #f63e42 !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#radar_service {margin-bottom: 50px !important; float: left;}
|
||||||
|
|
||||||
|
#header h1 a sup {
|
||||||
|
margin-right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#user_info ul li {
|
||||||
|
list-style: disc inside;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image_detail, .instance_detail { position: relative; }
|
||||||
|
|
||||||
|
a.launch {
|
||||||
|
margin-left: 10px !important;
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image_detail a.launch {
|
||||||
|
margin-left: 31px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a#edit_image_link, a#edit_instance_link {
|
||||||
|
margin-left: -40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image_detail .image_privacy input, .image_detail .delete input {
|
||||||
|
margin-left: -15px;
|
||||||
|
margin-top: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post_status {
|
||||||
|
width: 20px !important;
|
||||||
|
}
|
||||||
|
|
9
media/dashboard/css/jquery.tooltip.css
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#tooltip {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 3000;
|
||||||
|
border: 1px solid #111;
|
||||||
|
background-color: #eee;
|
||||||
|
padding: 5px;
|
||||||
|
opacity: 0.85;
|
||||||
|
}
|
||||||
|
#tooltip h3, #tooltip div { margin: 0; }
|
1145
media/dashboard/css/new_dash.css
Normal file
63
media/dashboard/css/openstack.css
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
body {
|
||||||
|
background: #f1f4f6;
|
||||||
|
font-family: "Lucida Grande", "Lucida Sans", sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 18px;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header h1 a {
|
||||||
|
background: url(../img/logo.gif) no-repeat top left;
|
||||||
|
color: #6e6d6e;
|
||||||
|
margin-left: 30px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding: 24px 0 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content_wrap {
|
||||||
|
float: left;
|
||||||
|
width: 100%;
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
-webkit-border-bottom-right-radius: 10px;
|
||||||
|
-webkit-border-bottom-left-radius: 10px;
|
||||||
|
-moz-border-radius-bottomright: 10px;
|
||||||
|
-moz-border-radius-bottomleft: 10px;
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
-webkit-border-top-right-radius: 10px;
|
||||||
|
-webkit-border-top-left-radius: 10px;
|
||||||
|
-moz-border-radius-topright: 10px;
|
||||||
|
-moz-border-radius-topleft: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-bottom: 25px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tab_content.home {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content.home, #content.login {
|
||||||
|
width: 909px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content.home #page_head, #content.login #page_head {
|
||||||
|
width: 870px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header a { color: #6e6d6e; }
|
||||||
|
#header a:hover { color: #989698; }
|
||||||
|
|
||||||
|
#user_info {
|
||||||
|
float: right;
|
||||||
|
color: #6e6d6e;
|
||||||
|
width: 180px;
|
||||||
|
height: 50px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
50
media/dashboard/css/reset.css
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
html, body, div, span, applet, object, iframe,
|
||||||
|
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||||
|
a, abbr, acronym, address, big, cite, code,
|
||||||
|
del, dfn, em, font, img, ins, kbd, q, s, samp,
|
||||||
|
small, strike, strong, sub, sup, tt, var,
|
||||||
|
b, u, i, center,
|
||||||
|
dl, dt, dd, ol, ul, li,
|
||||||
|
fieldset, form, label, legend,
|
||||||
|
table, caption, tbody, tfoot, thead, tr, th, td {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
outline: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
vertical-align: baseline;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
ol, ul {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
blockquote, q {
|
||||||
|
quotes: none;
|
||||||
|
}
|
||||||
|
blockquote:before, blockquote:after,
|
||||||
|
q:before, q:after {
|
||||||
|
content: '';
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remember to define focus styles! */
|
||||||
|
:focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remember to highlight inserts somehow! */
|
||||||
|
ins {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
del {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tables still need 'cellspacing="0"' in the markup */
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
BIN
media/dashboard/img/body_bg.gif
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
media/dashboard/img/body_bg.png
Executable file
After Width: | Height: | Size: 2.2 KiB |
BIN
media/dashboard/img/book_icon.png
Normal file
After Width: | Height: | Size: 741 B |
BIN
media/dashboard/img/bread_crumb.gif
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
media/dashboard/img/btn_bg.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
media/dashboard/img/chat_icon.png
Normal file
After Width: | Height: | Size: 847 B |
BIN
media/dashboard/img/content_bg.gif
Normal file
After Width: | Height: | Size: 105 B |
BIN
media/dashboard/img/content_shadow.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
media/dashboard/img/dashboard_nav_bg.png
Normal file
After Width: | Height: | Size: 255 B |
BIN
media/dashboard/img/foot_back.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
media/dashboard/img/gears.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
media/dashboard/img/header_bg.png
Executable file
After Width: | Height: | Size: 966 B |
BIN
media/dashboard/img/home_head_back.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
media/dashboard/img/image_detail.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
media/dashboard/img/logged_in_box_bg.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
media/dashboard/img/login_bg.png
Normal file
After Width: | Height: | Size: 476 B |
BIN
media/dashboard/img/login_btn.png
Normal file
After Width: | Height: | Size: 282 B |
BIN
media/dashboard/img/logo.gif
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
media/dashboard/img/nav_arrow.png
Normal file
After Width: | Height: | Size: 471 B |
BIN
media/dashboard/img/nav_bg.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
media/dashboard/img/nav_highlight.png
Executable file
After Width: | Height: | Size: 598 B |
BIN
media/dashboard/img/page_header.png
Normal file
After Width: | Height: | Size: 782 B |
BIN
media/dashboard/img/projects_bg.png
Normal file
After Width: | Height: | Size: 408 B |
BIN
media/dashboard/img/server_icon.png
Normal file
After Width: | Height: | Size: 433 B |
BIN
media/dashboard/img/spinner.gif
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
media/dashboard/img/sub-head-back.png
Normal file
After Width: | Height: | Size: 426 B |
BIN
media/dashboard/img/sub_head_back.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
media/dashboard/img/table_header_bg.png
Normal file
After Width: | Height: | Size: 157 B |
BIN
media/dashboard/img/table_heading_bg.png
Normal file
After Width: | Height: | Size: 968 B |
BIN
media/dashboard/img/title-blank-short-foot.png
Normal file
After Width: | Height: | Size: 435 B |
4
media/dashboard/js/dashboard.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
$(function() {
|
||||||
|
// Display notification message close boxes and wire up click handlers.
|
||||||
|
$('.message .close').show().click(function() { $(this).closest('.message').fadeOut(); });
|
||||||
|
});
|
564
media/dashboard/js/django-admin.multiselect.js
Normal file
@ -0,0 +1,564 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) Django Software Foundation and individual contributors.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of Django nor the names of its contributors may be used
|
||||||
|
to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Handles related-objects functionality: lookup link for raw_id_fields
|
||||||
|
// and Add Another links.
|
||||||
|
|
||||||
|
function html_unescape(text) {
|
||||||
|
// Unescape a string that was escaped using django.utils.html.escape.
|
||||||
|
text = text.replace(/</g, '<');
|
||||||
|
text = text.replace(/>/g, '>');
|
||||||
|
text = text.replace(/"/g, '"');
|
||||||
|
text = text.replace(/'/g, "'");
|
||||||
|
text = text.replace(/&/g, '&');
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
// IE doesn't accept periods or dashes in the window name, but the element IDs
|
||||||
|
// we use to generate popup window names may contain them, therefore we map them
|
||||||
|
// to allowed characters in a reversible way so that we can locate the correct
|
||||||
|
// element when the popup window is dismissed.
|
||||||
|
function id_to_windowname(text) {
|
||||||
|
text = text.replace(/\./g, '__dot__');
|
||||||
|
text = text.replace(/\-/g, '__dash__');
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
function windowname_to_id(text) {
|
||||||
|
text = text.replace(/__dot__/g, '.');
|
||||||
|
text = text.replace(/__dash__/g, '-');
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showRelatedObjectLookupPopup(triggeringLink) {
|
||||||
|
var name = triggeringLink.id.replace(/^lookup_/, '');
|
||||||
|
name = id_to_windowname(name);
|
||||||
|
var href;
|
||||||
|
if (triggeringLink.href.search(/\?/) >= 0) {
|
||||||
|
href = triggeringLink.href + '&pop=1';
|
||||||
|
} else {
|
||||||
|
href = triggeringLink.href + '?pop=1';
|
||||||
|
}
|
||||||
|
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
|
||||||
|
win.focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function dismissRelatedLookupPopup(win, chosenId) {
|
||||||
|
var name = windowname_to_id(win.name);
|
||||||
|
var elem = document.getElementById(name);
|
||||||
|
if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
|
||||||
|
elem.value += ',' + chosenId;
|
||||||
|
} else {
|
||||||
|
document.getElementById(name).value = chosenId;
|
||||||
|
}
|
||||||
|
win.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
function showAddAnotherPopup(triggeringLink) {
|
||||||
|
var name = triggeringLink.id.replace(/^add_/, '');
|
||||||
|
name = id_to_windowname(name);
|
||||||
|
href = triggeringLink.href
|
||||||
|
if (href.indexOf('?') == -1) {
|
||||||
|
href += '?_popup=1';
|
||||||
|
} else {
|
||||||
|
href += '&_popup=1';
|
||||||
|
}
|
||||||
|
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
|
||||||
|
win.focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function dismissAddAnotherPopup(win, newId, newRepr) {
|
||||||
|
// newId and newRepr are expected to have previously been escaped by
|
||||||
|
// django.utils.html.escape.
|
||||||
|
newId = html_unescape(newId);
|
||||||
|
newRepr = html_unescape(newRepr);
|
||||||
|
var name = windowname_to_id(win.name);
|
||||||
|
var elem = document.getElementById(name);
|
||||||
|
if (elem) {
|
||||||
|
if (elem.nodeName == 'SELECT') {
|
||||||
|
var o = new Option(newRepr, newId);
|
||||||
|
elem.options[elem.options.length] = o;
|
||||||
|
o.selected = true;
|
||||||
|
} else if (elem.nodeName == 'INPUT') {
|
||||||
|
if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
|
||||||
|
elem.value += ',' + newId;
|
||||||
|
} else {
|
||||||
|
elem.value = newId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var toId = name + "_to";
|
||||||
|
elem = document.getElementById(toId);
|
||||||
|
var o = new Option(newRepr, newId);
|
||||||
|
SelectBox.add_to_cache(toId, o);
|
||||||
|
SelectBox.redisplay(toId);
|
||||||
|
}
|
||||||
|
win.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* gettext library */
|
||||||
|
|
||||||
|
var catalog = new Array();
|
||||||
|
|
||||||
|
function pluralidx(count) { return (count == 1) ? 0 : 1; }
|
||||||
|
|
||||||
|
|
||||||
|
function gettext(msgid) {
|
||||||
|
var value = catalog[msgid];
|
||||||
|
if (typeof(value) == 'undefined') {
|
||||||
|
return msgid;
|
||||||
|
} else {
|
||||||
|
return (typeof(value) == 'string') ? value : value[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ngettext(singular, plural, count) {
|
||||||
|
value = catalog[singular];
|
||||||
|
if (typeof(value) == 'undefined') {
|
||||||
|
return (count == 1) ? singular : plural;
|
||||||
|
} else {
|
||||||
|
return value[pluralidx(count)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function gettext_noop(msgid) { return msgid; }
|
||||||
|
|
||||||
|
function interpolate(fmt, obj, named) {
|
||||||
|
if (named) {
|
||||||
|
return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])});
|
||||||
|
} else {
|
||||||
|
return fmt.replace(/%s/g, function(match){return String(obj.shift())});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Core javascript helper functions
|
||||||
|
|
||||||
|
//basic browser identification & version
|
||||||
|
var isOpera = (navigator.userAgent.indexOf("Opera")>=0) && parseFloat(navigator.appVersion);
|
||||||
|
var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]);
|
||||||
|
|
||||||
|
//Cross-browser event handlers.
|
||||||
|
function addEvent(obj, evType, fn) {
|
||||||
|
if (obj.addEventListener) {
|
||||||
|
obj.addEventListener(evType, fn, false);
|
||||||
|
return true;
|
||||||
|
} else if (obj.attachEvent) {
|
||||||
|
var r = obj.attachEvent("on" + evType, fn);
|
||||||
|
return r;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeEvent(obj, evType, fn) {
|
||||||
|
if (obj.removeEventListener) {
|
||||||
|
obj.removeEventListener(evType, fn, false);
|
||||||
|
return true;
|
||||||
|
} else if (obj.detachEvent) {
|
||||||
|
obj.detachEvent("on" + evType, fn);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]);
|
||||||
|
function quickElement() {
|
||||||
|
var obj = document.createElement(arguments[0]);
|
||||||
|
if (arguments[2] != '' && arguments[2] != null) {
|
||||||
|
var textNode = document.createTextNode(arguments[2]);
|
||||||
|
obj.appendChild(textNode);
|
||||||
|
}
|
||||||
|
var len = arguments.length;
|
||||||
|
for (var i = 3; i < len; i += 2) {
|
||||||
|
obj.setAttribute(arguments[i], arguments[i+1]);
|
||||||
|
}
|
||||||
|
arguments[1].appendChild(obj);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
//Cross-browser xmlhttp object
|
||||||
|
//from http://jibbering.com/2002/4/httprequest.html
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
var xmlhttp;
|
||||||
|
/*@cc_on @*/
|
||||||
|
/*@if (@_jscript_version >= 5)
|
||||||
|
try {
|
||||||
|
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
|
||||||
|
} catch (e) {
|
||||||
|
try {
|
||||||
|
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
|
||||||
|
} catch (E) {
|
||||||
|
xmlhttp = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@else
|
||||||
|
xmlhttp = false;
|
||||||
|
@end @*/
|
||||||
|
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
|
||||||
|
xmlhttp = new XMLHttpRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
//Find-position functions by PPK
|
||||||
|
//See http://www.quirksmode.org/js/findpos.html
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
function findPosX(obj) {
|
||||||
|
var curleft = 0;
|
||||||
|
if (obj.offsetParent) {
|
||||||
|
while (obj.offsetParent) {
|
||||||
|
curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft);
|
||||||
|
obj = obj.offsetParent;
|
||||||
|
}
|
||||||
|
// IE offsetParent does not include the top-level
|
||||||
|
if (isIE && obj.parentElement){
|
||||||
|
curleft += obj.offsetLeft - obj.scrollLeft;
|
||||||
|
}
|
||||||
|
} else if (obj.x) {
|
||||||
|
curleft += obj.x;
|
||||||
|
}
|
||||||
|
return curleft;
|
||||||
|
}
|
||||||
|
|
||||||
|
function findPosY(obj) {
|
||||||
|
var curtop = 0;
|
||||||
|
if (obj.offsetParent) {
|
||||||
|
while (obj.offsetParent) {
|
||||||
|
curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop);
|
||||||
|
obj = obj.offsetParent;
|
||||||
|
}
|
||||||
|
// IE offsetParent does not include the top-level
|
||||||
|
if (isIE && obj.parentElement){
|
||||||
|
curtop += obj.offsetTop - obj.scrollTop;
|
||||||
|
}
|
||||||
|
} else if (obj.y) {
|
||||||
|
curtop += obj.y;
|
||||||
|
}
|
||||||
|
return curtop;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//Date object extensions
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
Date.prototype.getCorrectYear = function() {
|
||||||
|
// Date.getYear() is unreliable --
|
||||||
|
// see http://www.quirksmode.org/js/introdate.html#year
|
||||||
|
var y = this.getYear() % 100;
|
||||||
|
return (y < 38) ? y + 2000 : y + 1900;
|
||||||
|
}
|
||||||
|
|
||||||
|
Date.prototype.getTwoDigitMonth = function() {
|
||||||
|
return (this.getMonth() < 9) ? '0' + (this.getMonth()+1) : (this.getMonth()+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Date.prototype.getTwoDigitDate = function() {
|
||||||
|
return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
Date.prototype.getTwoDigitHour = function() {
|
||||||
|
return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours();
|
||||||
|
}
|
||||||
|
|
||||||
|
Date.prototype.getTwoDigitMinute = function() {
|
||||||
|
return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes();
|
||||||
|
}
|
||||||
|
|
||||||
|
Date.prototype.getTwoDigitSecond = function() {
|
||||||
|
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
|
||||||
|
}
|
||||||
|
|
||||||
|
Date.prototype.getISODate = function() {
|
||||||
|
return this.getCorrectYear() + '-' + this.getTwoDigitMonth() + '-' + this.getTwoDigitDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
Date.prototype.getHourMinute = function() {
|
||||||
|
return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute();
|
||||||
|
}
|
||||||
|
|
||||||
|
Date.prototype.getHourMinuteSecond = function() {
|
||||||
|
return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond();
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
//String object extensions
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
String.prototype.pad_left = function(pad_length, pad_string) {
|
||||||
|
var new_string = this;
|
||||||
|
for (var i = 0; new_string.length < pad_length; i++) {
|
||||||
|
new_string = pad_string + new_string;
|
||||||
|
}
|
||||||
|
return new_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
//Get the computed style for and element
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
function getStyle(oElm, strCssRule){
|
||||||
|
var strValue = "";
|
||||||
|
if(document.defaultView && document.defaultView.getComputedStyle){
|
||||||
|
strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
|
||||||
|
}
|
||||||
|
else if(oElm.currentStyle){
|
||||||
|
strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
|
||||||
|
return p1.toUpperCase();
|
||||||
|
});
|
||||||
|
strValue = oElm.currentStyle[strCssRule];
|
||||||
|
}
|
||||||
|
return strValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var SelectBox = {
|
||||||
|
cache: new Object(),
|
||||||
|
init: function(id) {
|
||||||
|
var box = document.getElementById(id);
|
||||||
|
var node;
|
||||||
|
SelectBox.cache[id] = new Array();
|
||||||
|
var cache = SelectBox.cache[id];
|
||||||
|
for (var i = 0; (node = box.options[i]); i++) {
|
||||||
|
cache.push({value: node.value, text: node.text, displayed: 1});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
redisplay: function(id) {
|
||||||
|
// Repopulate HTML select box from cache
|
||||||
|
var box = document.getElementById(id);
|
||||||
|
box.options.length = 0; // clear all options
|
||||||
|
for (var i = 0, j = SelectBox.cache[id].length; i < j; i++) {
|
||||||
|
var node = SelectBox.cache[id][i];
|
||||||
|
if (node.displayed) {
|
||||||
|
box.options[box.options.length] = new Option(node.text, node.value, false, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
filter: function(id, text) {
|
||||||
|
// Redisplay the HTML select box, displaying only the choices containing ALL
|
||||||
|
// the words in text. (It's an AND search.)
|
||||||
|
var tokens = text.toLowerCase().split(/\s+/);
|
||||||
|
var node, token;
|
||||||
|
for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
|
||||||
|
node.displayed = 1;
|
||||||
|
for (var j = 0; (token = tokens[j]); j++) {
|
||||||
|
if (node.text.toLowerCase().indexOf(token) == -1) {
|
||||||
|
node.displayed = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SelectBox.redisplay(id);
|
||||||
|
},
|
||||||
|
delete_from_cache: function(id, value) {
|
||||||
|
var node, delete_index = null;
|
||||||
|
for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
|
||||||
|
if (node.value == value) {
|
||||||
|
delete_index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var j = SelectBox.cache[id].length - 1;
|
||||||
|
for (var i = delete_index; i < j; i++) {
|
||||||
|
SelectBox.cache[id][i] = SelectBox.cache[id][i+1];
|
||||||
|
}
|
||||||
|
SelectBox.cache[id].length--;
|
||||||
|
},
|
||||||
|
add_to_cache: function(id, option) {
|
||||||
|
SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1});
|
||||||
|
},
|
||||||
|
cache_contains: function(id, value) {
|
||||||
|
// Check if an item is contained in the cache
|
||||||
|
var node;
|
||||||
|
for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
|
||||||
|
if (node.value == value) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
move: function(from, to) {
|
||||||
|
var from_box = document.getElementById(from);
|
||||||
|
var to_box = document.getElementById(to);
|
||||||
|
var option;
|
||||||
|
for (var i = 0; (option = from_box.options[i]); i++) {
|
||||||
|
if (option.selected && SelectBox.cache_contains(from, option.value)) {
|
||||||
|
SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
|
||||||
|
SelectBox.delete_from_cache(from, option.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SelectBox.redisplay(from);
|
||||||
|
SelectBox.redisplay(to);
|
||||||
|
},
|
||||||
|
move_all: function(from, to) {
|
||||||
|
var from_box = document.getElementById(from);
|
||||||
|
var to_box = document.getElementById(to);
|
||||||
|
var option;
|
||||||
|
for (var i = 0; (option = from_box.options[i]); i++) {
|
||||||
|
if (SelectBox.cache_contains(from, option.value)) {
|
||||||
|
SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
|
||||||
|
SelectBox.delete_from_cache(from, option.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SelectBox.redisplay(from);
|
||||||
|
SelectBox.redisplay(to);
|
||||||
|
},
|
||||||
|
sort: function(id) {
|
||||||
|
SelectBox.cache[id].sort( function(a, b) {
|
||||||
|
a = a.text.toLowerCase();
|
||||||
|
b = b.text.toLowerCase();
|
||||||
|
try {
|
||||||
|
if (a > b) return 1;
|
||||||
|
if (a < b) return -1;
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
// silently fail on IE 'unknown' exception
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
} );
|
||||||
|
},
|
||||||
|
select_all: function(id) {
|
||||||
|
var box = document.getElementById(id);
|
||||||
|
for (var i = 0; i < box.options.length; i++) {
|
||||||
|
box.options[i].selected = 'selected';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
SelectFilter2 - Turns a multiple-select box into a filter interface.
|
||||||
|
|
||||||
|
Different than SelectFilter because this is coupled to the admin framework.
|
||||||
|
|
||||||
|
Requires core.js, SelectBox.js and addevent.js.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function findForm(node) {
|
||||||
|
// returns the node of the form containing the given node
|
||||||
|
if (node.tagName.toLowerCase() != 'form') {
|
||||||
|
return findForm(node.parentNode);
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
var SelectFilter = {
|
||||||
|
init: function(field_id, field_name, is_stacked, admin_media_prefix) {
|
||||||
|
var from_box = document.getElementById(field_id);
|
||||||
|
from_box.id += '_from'; // change its ID
|
||||||
|
from_box.className = 'filtered';
|
||||||
|
|
||||||
|
// Remove <p class="info">, because it just gets in the way.
|
||||||
|
var ps = from_box.parentNode.getElementsByTagName('p');
|
||||||
|
for (var i=0; i<ps.length; i++) {
|
||||||
|
from_box.parentNode.removeChild(ps[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// <div class="selector"> or <div class="selector stacked">
|
||||||
|
var selector_div = quickElement('div', from_box.parentNode);
|
||||||
|
selector_div.className = is_stacked ? 'selector stacked' : 'selector';
|
||||||
|
|
||||||
|
// <div class="selector-available">
|
||||||
|
var selector_available = quickElement('div', selector_div, '');
|
||||||
|
selector_available.className = 'selector-available';
|
||||||
|
quickElement('h2', selector_available, interpolate(gettext('Available %s'), [field_name]));
|
||||||
|
var filter_p = quickElement('p', selector_available, '');
|
||||||
|
filter_p.className = 'selector-filter';
|
||||||
|
quickElement('img', filter_p, '', 'src', admin_media_prefix + 'img/admin/selector-search.gif');
|
||||||
|
filter_p.appendChild(document.createTextNode(' '));
|
||||||
|
var filter_input = quickElement('input', filter_p, '', 'type', 'text');
|
||||||
|
filter_input.id = field_id + '_input';
|
||||||
|
selector_available.appendChild(from_box);
|
||||||
|
var choose_all = quickElement('a', selector_available, gettext('Choose all'), 'href', 'javascript: (function(){ SelectBox.move_all("' + field_id + '_from", "' + field_id + '_to"); })()');
|
||||||
|
choose_all.className = 'selector-chooseall';
|
||||||
|
|
||||||
|
// <ul class="selector-chooser">
|
||||||
|
var selector_chooser = quickElement('ul', selector_div, '');
|
||||||
|
selector_chooser.className = 'selector-chooser';
|
||||||
|
var add_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Add'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_from","' + field_id + '_to");})()');
|
||||||
|
add_link.className = 'selector-add';
|
||||||
|
var remove_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Remove'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_to","' + field_id + '_from");})()');
|
||||||
|
remove_link.className = 'selector-remove';
|
||||||
|
|
||||||
|
// <div class="selector-chosen">
|
||||||
|
var selector_chosen = quickElement('div', selector_div, '');
|
||||||
|
selector_chosen.className = 'selector-chosen';
|
||||||
|
quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s'), [field_name]));
|
||||||
|
var selector_filter = quickElement('p', selector_chosen, gettext('Select your choice(s) and click '));
|
||||||
|
selector_filter.className = 'selector-filter';
|
||||||
|
quickElement('img', selector_filter, '', 'src', admin_media_prefix + (is_stacked ? 'img/admin/selector_stacked-add.gif':'img/admin/selector-add.gif'), 'alt', 'Add');
|
||||||
|
var to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', 'multiple', 'size', from_box.size, 'name', from_box.getAttribute('name'));
|
||||||
|
to_box.className = 'filtered';
|
||||||
|
var clear_all = quickElement('a', selector_chosen, gettext('Clear all'), 'href', 'javascript: (function() { SelectBox.move_all("' + field_id + '_to", "' + field_id + '_from");})()');
|
||||||
|
clear_all.className = 'selector-clearall';
|
||||||
|
|
||||||
|
from_box.setAttribute('name', from_box.getAttribute('name') + '_old');
|
||||||
|
|
||||||
|
// Set up the JavaScript event handlers for the select box filter interface
|
||||||
|
addEvent(filter_input, 'keyup', function(e) { SelectFilter.filter_key_up(e, field_id); });
|
||||||
|
addEvent(filter_input, 'keydown', function(e) { SelectFilter.filter_key_down(e, field_id); });
|
||||||
|
addEvent(from_box, 'dblclick', function() { SelectBox.move(field_id + '_from', field_id + '_to'); });
|
||||||
|
addEvent(to_box, 'dblclick', function() { SelectBox.move(field_id + '_to', field_id + '_from'); });
|
||||||
|
addEvent(findForm(from_box), 'submit', function() { SelectBox.select_all(field_id + '_to'); });
|
||||||
|
SelectBox.init(field_id + '_from');
|
||||||
|
SelectBox.init(field_id + '_to');
|
||||||
|
// Move selected from_box options to to_box
|
||||||
|
SelectBox.move(field_id + '_from', field_id + '_to');
|
||||||
|
},
|
||||||
|
filter_key_up: function(event, field_id) {
|
||||||
|
from = document.getElementById(field_id + '_from');
|
||||||
|
// don't submit form if user pressed Enter
|
||||||
|
if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
|
||||||
|
from.selectedIndex = 0;
|
||||||
|
SelectBox.move(field_id + '_from', field_id + '_to');
|
||||||
|
from.selectedIndex = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var temp = from.selectedIndex;
|
||||||
|
SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value);
|
||||||
|
from.selectedIndex = temp;
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
filter_key_down: function(event, field_id) {
|
||||||
|
from = document.getElementById(field_id + '_from');
|
||||||
|
// right arrow -- move across
|
||||||
|
if ((event.which && event.which == 39) || (event.keyCode && event.keyCode == 39)) {
|
||||||
|
var old_index = from.selectedIndex;
|
||||||
|
SelectBox.move(field_id + '_from', field_id + '_to');
|
||||||
|
from.selectedIndex = (old_index == from.length) ? from.length - 1 : old_index;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// down arrow -- wrap around
|
||||||
|
if ((event.which && event.which == 40) || (event.keyCode && event.keyCode == 40)) {
|
||||||
|
from.selectedIndex = (from.length == from.selectedIndex + 1) ? 0 : from.selectedIndex + 1;
|
||||||
|
}
|
||||||
|
// up arrow -- wrap around
|
||||||
|
if ((event.which && event.which == 38) || (event.keyCode && event.keyCode == 38)) {
|
||||||
|
from.selectedIndex = (from.selectedIndex == 0) ? from.length - 1 : from.selectedIndex - 1;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
9
media/dashboard/js/jquery-ui.min.js
vendored
Executable file
675
media/dashboard/js/jquery.form.js
Normal file
@ -0,0 +1,675 @@
|
|||||||
|
/*!
|
||||||
|
* jQuery Form Plugin
|
||||||
|
* version: 2.43 (12-MAR-2010)
|
||||||
|
* @requires jQuery v1.3.2 or later
|
||||||
|
*
|
||||||
|
* Examples and documentation at: http://malsup.com/jquery/form/
|
||||||
|
* Dual licensed under the MIT and GPL licenses:
|
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*/
|
||||||
|
;(function($) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
Usage Note:
|
||||||
|
-----------
|
||||||
|
Do not use both ajaxSubmit and ajaxForm on the same form. These
|
||||||
|
functions are intended to be exclusive. Use ajaxSubmit if you want
|
||||||
|
to bind your own submit handler to the form. For example,
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#myForm').bind('submit', function() {
|
||||||
|
$(this).ajaxSubmit({
|
||||||
|
target: '#output'
|
||||||
|
});
|
||||||
|
return false; // <-- important!
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
Use ajaxForm when you want the plugin to manage all the event binding
|
||||||
|
for you. For example,
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#myForm').ajaxForm({
|
||||||
|
target: '#output'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
When using ajaxForm, the ajaxSubmit function will be invoked for you
|
||||||
|
at the appropriate time.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ajaxSubmit() provides a mechanism for immediately submitting
|
||||||
|
* an HTML form using AJAX.
|
||||||
|
*/
|
||||||
|
$.fn.ajaxSubmit = function(options) {
|
||||||
|
// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
|
||||||
|
if (!this.length) {
|
||||||
|
log('ajaxSubmit: skipping submit process - no element selected');
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof options == 'function')
|
||||||
|
options = { success: options };
|
||||||
|
|
||||||
|
var url = $.trim(this.attr('action'));
|
||||||
|
if (url) {
|
||||||
|
// clean url (don't include hash vaue)
|
||||||
|
url = (url.match(/^([^#]+)/)||[])[1];
|
||||||
|
}
|
||||||
|
url = url || window.location.href || '';
|
||||||
|
|
||||||
|
options = $.extend({
|
||||||
|
url: url,
|
||||||
|
type: this.attr('method') || 'GET',
|
||||||
|
iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
|
||||||
|
}, options || {});
|
||||||
|
|
||||||
|
// hook for manipulating the form data before it is extracted;
|
||||||
|
// convenient for use with rich editors like tinyMCE or FCKEditor
|
||||||
|
var veto = {};
|
||||||
|
this.trigger('form-pre-serialize', [this, options, veto]);
|
||||||
|
if (veto.veto) {
|
||||||
|
log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// provide opportunity to alter form data before it is serialized
|
||||||
|
if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
|
||||||
|
log('ajaxSubmit: submit aborted via beforeSerialize callback');
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
var a = this.formToArray(options.semantic);
|
||||||
|
if (options.data) {
|
||||||
|
options.extraData = options.data;
|
||||||
|
for (var n in options.data) {
|
||||||
|
if(options.data[n] instanceof Array) {
|
||||||
|
for (var k in options.data[n])
|
||||||
|
a.push( { name: n, value: options.data[n][k] } );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
a.push( { name: n, value: options.data[n] } );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// give pre-submit callback an opportunity to abort the submit
|
||||||
|
if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
|
||||||
|
log('ajaxSubmit: submit aborted via beforeSubmit callback');
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fire vetoable 'validate' event
|
||||||
|
this.trigger('form-submit-validate', [a, this, options, veto]);
|
||||||
|
if (veto.veto) {
|
||||||
|
log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
var q = $.param(a);
|
||||||
|
|
||||||
|
if (options.type.toUpperCase() == 'GET') {
|
||||||
|
options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
|
||||||
|
options.data = null; // data is null for 'get'
|
||||||
|
}
|
||||||
|
else
|
||||||
|
options.data = q; // data is the query string for 'post'
|
||||||
|
|
||||||
|
var $form = this, callbacks = [];
|
||||||
|
if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
|
||||||
|
if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
|
||||||
|
|
||||||
|
// perform a load on the target only if dataType is not provided
|
||||||
|
if (!options.dataType && options.target) {
|
||||||
|
var oldSuccess = options.success || function(){};
|
||||||
|
callbacks.push(function(data) {
|
||||||
|
var fn = options.replaceTarget ? 'replaceWith' : 'html';
|
||||||
|
$(options.target)[fn](data).each(oldSuccess, arguments);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (options.success)
|
||||||
|
callbacks.push(options.success);
|
||||||
|
|
||||||
|
options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
|
||||||
|
for (var i=0, max=callbacks.length; i < max; i++)
|
||||||
|
callbacks[i].apply(options, [data, status, xhr || $form, $form]);
|
||||||
|
};
|
||||||
|
|
||||||
|
// are there files to upload?
|
||||||
|
var files = $('input:file', this).fieldValue();
|
||||||
|
var found = false;
|
||||||
|
for (var j=0; j < files.length; j++)
|
||||||
|
if (files[j])
|
||||||
|
found = true;
|
||||||
|
|
||||||
|
var multipart = false;
|
||||||
|
// var mp = 'multipart/form-data';
|
||||||
|
// multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
|
||||||
|
|
||||||
|
// options.iframe allows user to force iframe mode
|
||||||
|
// 06-NOV-09: now defaulting to iframe mode if file input is detected
|
||||||
|
if ((files.length && options.iframe !== false) || options.iframe || found || multipart) {
|
||||||
|
// hack to fix Safari hang (thanks to Tim Molendijk for this)
|
||||||
|
// see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
|
||||||
|
if (options.closeKeepAlive)
|
||||||
|
$.get(options.closeKeepAlive, fileUpload);
|
||||||
|
else
|
||||||
|
fileUpload();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$.ajax(options);
|
||||||
|
|
||||||
|
// fire 'notify' event
|
||||||
|
this.trigger('form-submit-notify', [this, options]);
|
||||||
|
return this;
|
||||||
|
|
||||||
|
|
||||||
|
// private function for handling file uploads (hat tip to YAHOO!)
|
||||||
|
function fileUpload() {
|
||||||
|
var form = $form[0];
|
||||||
|
|
||||||
|
if ($(':input[name=submit]', form).length) {
|
||||||
|
alert('Error: Form elements must not be named "submit".');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var opts = $.extend({}, $.ajaxSettings, options);
|
||||||
|
var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);
|
||||||
|
|
||||||
|
var id = 'jqFormIO' + (new Date().getTime());
|
||||||
|
var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" onload="(jQuery(this).data(\'form-plugin-onload\'))()" />');
|
||||||
|
var io = $io[0];
|
||||||
|
|
||||||
|
$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
|
||||||
|
|
||||||
|
var xhr = { // mock object
|
||||||
|
aborted: 0,
|
||||||
|
responseText: null,
|
||||||
|
responseXML: null,
|
||||||
|
status: 0,
|
||||||
|
statusText: 'n/a',
|
||||||
|
getAllResponseHeaders: function() {},
|
||||||
|
getResponseHeader: function() {},
|
||||||
|
setRequestHeader: function() {},
|
||||||
|
abort: function() {
|
||||||
|
this.aborted = 1;
|
||||||
|
$io.attr('src', opts.iframeSrc); // abort op in progress
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var g = opts.global;
|
||||||
|
// trigger ajax global events so that activity/block indicators work like normal
|
||||||
|
if (g && ! $.active++) $.event.trigger("ajaxStart");
|
||||||
|
if (g) $.event.trigger("ajaxSend", [xhr, opts]);
|
||||||
|
|
||||||
|
if (s.beforeSend && s.beforeSend(xhr, s) === false) {
|
||||||
|
s.global && $.active--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (xhr.aborted)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var cbInvoked = false;
|
||||||
|
var timedOut = 0;
|
||||||
|
|
||||||
|
// add submitting element to data if we know it
|
||||||
|
var sub = form.clk;
|
||||||
|
if (sub) {
|
||||||
|
var n = sub.name;
|
||||||
|
if (n && !sub.disabled) {
|
||||||
|
opts.extraData = opts.extraData || {};
|
||||||
|
opts.extraData[n] = sub.value;
|
||||||
|
if (sub.type == "image") {
|
||||||
|
opts.extraData[n+'.x'] = form.clk_x;
|
||||||
|
opts.extraData[n+'.y'] = form.clk_y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// take a breath so that pending repaints get some cpu time before the upload starts
|
||||||
|
function doSubmit() {
|
||||||
|
// make sure form attrs are set
|
||||||
|
var t = $form.attr('target'), a = $form.attr('action');
|
||||||
|
|
||||||
|
// update form attrs in IE friendly way
|
||||||
|
form.setAttribute('target',id);
|
||||||
|
if (form.getAttribute('method') != 'POST')
|
||||||
|
form.setAttribute('method', 'POST');
|
||||||
|
if (form.getAttribute('action') != opts.url)
|
||||||
|
form.setAttribute('action', opts.url);
|
||||||
|
|
||||||
|
// ie borks in some cases when setting encoding
|
||||||
|
if (! opts.skipEncodingOverride) {
|
||||||
|
$form.attr({
|
||||||
|
encoding: 'multipart/form-data',
|
||||||
|
enctype: 'multipart/form-data'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// support timout
|
||||||
|
if (opts.timeout)
|
||||||
|
setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
|
||||||
|
|
||||||
|
// add "extra" data to form if provided in options
|
||||||
|
var extraInputs = [];
|
||||||
|
try {
|
||||||
|
if (opts.extraData)
|
||||||
|
for (var n in opts.extraData)
|
||||||
|
extraInputs.push(
|
||||||
|
$('<input type="hidden" name="'+n+'" value="'+opts.extraData[n]+'" />')
|
||||||
|
.appendTo(form)[0]);
|
||||||
|
|
||||||
|
// add iframe to doc and submit the form
|
||||||
|
$io.appendTo('body');
|
||||||
|
$io.data('form-plugin-onload', cb);
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
// reset attrs and remove "extra" input elements
|
||||||
|
form.setAttribute('action',a);
|
||||||
|
t ? form.setAttribute('target', t) : $form.removeAttr('target');
|
||||||
|
$(extraInputs).remove();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (opts.forceSync)
|
||||||
|
doSubmit();
|
||||||
|
else
|
||||||
|
setTimeout(doSubmit, 10); // this lets dom updates render
|
||||||
|
|
||||||
|
var domCheckCount = 100;
|
||||||
|
|
||||||
|
function cb() {
|
||||||
|
if (cbInvoked)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var ok = true;
|
||||||
|
try {
|
||||||
|
if (timedOut) throw 'timeout';
|
||||||
|
// extract the server response from the iframe
|
||||||
|
var data, doc;
|
||||||
|
|
||||||
|
doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
|
||||||
|
|
||||||
|
var isXml = opts.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
|
||||||
|
log('isXml='+isXml);
|
||||||
|
if (!isXml && (doc.body == null || doc.body.innerHTML == '')) {
|
||||||
|
if (--domCheckCount) {
|
||||||
|
// in some browsers (Opera) the iframe DOM is not always traversable when
|
||||||
|
// the onload callback fires, so we loop a bit to accommodate
|
||||||
|
log('requeing onLoad callback, DOM not available');
|
||||||
|
setTimeout(cb, 250);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log('Could not access iframe DOM after 100 tries.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
log('response detected');
|
||||||
|
cbInvoked = true;
|
||||||
|
xhr.responseText = doc.body ? doc.body.innerHTML : null;
|
||||||
|
xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
|
||||||
|
xhr.getResponseHeader = function(header){
|
||||||
|
var headers = {'content-type': opts.dataType};
|
||||||
|
return headers[header];
|
||||||
|
};
|
||||||
|
|
||||||
|
if (opts.dataType == 'json' || opts.dataType == 'script') {
|
||||||
|
// see if user embedded response in textarea
|
||||||
|
var ta = doc.getElementsByTagName('textarea')[0];
|
||||||
|
if (ta)
|
||||||
|
xhr.responseText = ta.value;
|
||||||
|
else {
|
||||||
|
// account for browsers injecting pre around json response
|
||||||
|
var pre = doc.getElementsByTagName('pre')[0];
|
||||||
|
if (pre)
|
||||||
|
xhr.responseText = pre.innerHTML;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
|
||||||
|
xhr.responseXML = toXml(xhr.responseText);
|
||||||
|
}
|
||||||
|
data = $.httpData(xhr, opts.dataType);
|
||||||
|
}
|
||||||
|
catch(e){
|
||||||
|
log('error caught:',e);
|
||||||
|
ok = false;
|
||||||
|
xhr.error = e;
|
||||||
|
$.handleError(opts, xhr, 'error', e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ordering of these callbacks/triggers is odd, but that's how $.ajax does it
|
||||||
|
if (ok) {
|
||||||
|
opts.success(data, 'success');
|
||||||
|
if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
|
||||||
|
}
|
||||||
|
if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
|
||||||
|
if (g && ! --$.active) $.event.trigger("ajaxStop");
|
||||||
|
if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
|
||||||
|
|
||||||
|
// clean up
|
||||||
|
setTimeout(function() {
|
||||||
|
$io.removeData('form-plugin-onload');
|
||||||
|
$io.remove();
|
||||||
|
xhr.responseXML = null;
|
||||||
|
}, 100);
|
||||||
|
};
|
||||||
|
|
||||||
|
function toXml(s, doc) {
|
||||||
|
if (window.ActiveXObject) {
|
||||||
|
doc = new ActiveXObject('Microsoft.XMLDOM');
|
||||||
|
doc.async = 'false';
|
||||||
|
doc.loadXML(s);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
doc = (new DOMParser()).parseFromString(s, 'text/xml');
|
||||||
|
return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ajaxForm() provides a mechanism for fully automating form submission.
|
||||||
|
*
|
||||||
|
* The advantages of using this method instead of ajaxSubmit() are:
|
||||||
|
*
|
||||||
|
* 1: This method will include coordinates for <input type="image" /> elements (if the element
|
||||||
|
* is used to submit the form).
|
||||||
|
* 2. This method will include the submit element's name/value data (for the element that was
|
||||||
|
* used to submit the form).
|
||||||
|
* 3. This method binds the submit() method to the form for you.
|
||||||
|
*
|
||||||
|
* The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
|
||||||
|
* passes the options argument along after properly binding events for submit elements and
|
||||||
|
* the form itself.
|
||||||
|
*/
|
||||||
|
$.fn.ajaxForm = function(options) {
|
||||||
|
return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$(this).ajaxSubmit(options);
|
||||||
|
}).bind('click.form-plugin', function(e) {
|
||||||
|
var target = e.target;
|
||||||
|
var $el = $(target);
|
||||||
|
if (!($el.is(":submit,input:image"))) {
|
||||||
|
// is this a child element of the submit el? (ex: a span within a button)
|
||||||
|
var t = $el.closest(':submit');
|
||||||
|
if (t.length == 0)
|
||||||
|
return;
|
||||||
|
target = t[0];
|
||||||
|
}
|
||||||
|
var form = this;
|
||||||
|
form.clk = target;
|
||||||
|
if (target.type == 'image') {
|
||||||
|
if (e.offsetX != undefined) {
|
||||||
|
form.clk_x = e.offsetX;
|
||||||
|
form.clk_y = e.offsetY;
|
||||||
|
} else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
|
||||||
|
var offset = $el.offset();
|
||||||
|
form.clk_x = e.pageX - offset.left;
|
||||||
|
form.clk_y = e.pageY - offset.top;
|
||||||
|
} else {
|
||||||
|
form.clk_x = e.pageX - target.offsetLeft;
|
||||||
|
form.clk_y = e.pageY - target.offsetTop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// clear form vars
|
||||||
|
setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
|
||||||
|
$.fn.ajaxFormUnbind = function() {
|
||||||
|
return this.unbind('submit.form-plugin click.form-plugin');
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* formToArray() gathers form element data into an array of objects that can
|
||||||
|
* be passed to any of the following ajax functions: $.get, $.post, or load.
|
||||||
|
* Each object in the array has both a 'name' and 'value' property. An example of
|
||||||
|
* an array for a simple login form might be:
|
||||||
|
*
|
||||||
|
* [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
|
||||||
|
*
|
||||||
|
* It is this array that is passed to pre-submit callback functions provided to the
|
||||||
|
* ajaxSubmit() and ajaxForm() methods.
|
||||||
|
*/
|
||||||
|
$.fn.formToArray = function(semantic) {
|
||||||
|
var a = [];
|
||||||
|
if (this.length == 0) return a;
|
||||||
|
|
||||||
|
var form = this[0];
|
||||||
|
var els = semantic ? form.getElementsByTagName('*') : form.elements;
|
||||||
|
if (!els) return a;
|
||||||
|
for(var i=0, max=els.length; i < max; i++) {
|
||||||
|
var el = els[i];
|
||||||
|
var n = el.name;
|
||||||
|
if (!n) continue;
|
||||||
|
|
||||||
|
if (semantic && form.clk && el.type == "image") {
|
||||||
|
// handle image inputs on the fly when semantic == true
|
||||||
|
if(!el.disabled && form.clk == el) {
|
||||||
|
a.push({name: n, value: $(el).val()});
|
||||||
|
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var v = $.fieldValue(el, true);
|
||||||
|
if (v && v.constructor == Array) {
|
||||||
|
for(var j=0, jmax=v.length; j < jmax; j++)
|
||||||
|
a.push({name: n, value: v[j]});
|
||||||
|
}
|
||||||
|
else if (v !== null && typeof v != 'undefined')
|
||||||
|
a.push({name: n, value: v});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!semantic && form.clk) {
|
||||||
|
// input type=='image' are not found in elements array! handle it here
|
||||||
|
var $input = $(form.clk), input = $input[0], n = input.name;
|
||||||
|
if (n && !input.disabled && input.type == 'image') {
|
||||||
|
a.push({name: n, value: $input.val()});
|
||||||
|
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes form data into a 'submittable' string. This method will return a string
|
||||||
|
* in the format: name1=value1&name2=value2
|
||||||
|
*/
|
||||||
|
$.fn.formSerialize = function(semantic) {
|
||||||
|
//hand off to jQuery.param for proper encoding
|
||||||
|
return $.param(this.formToArray(semantic));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes all field elements in the jQuery object into a query string.
|
||||||
|
* This method will return a string in the format: name1=value1&name2=value2
|
||||||
|
*/
|
||||||
|
$.fn.fieldSerialize = function(successful) {
|
||||||
|
var a = [];
|
||||||
|
this.each(function() {
|
||||||
|
var n = this.name;
|
||||||
|
if (!n) return;
|
||||||
|
var v = $.fieldValue(this, successful);
|
||||||
|
if (v && v.constructor == Array) {
|
||||||
|
for (var i=0,max=v.length; i < max; i++)
|
||||||
|
a.push({name: n, value: v[i]});
|
||||||
|
}
|
||||||
|
else if (v !== null && typeof v != 'undefined')
|
||||||
|
a.push({name: this.name, value: v});
|
||||||
|
});
|
||||||
|
//hand off to jQuery.param for proper encoding
|
||||||
|
return $.param(a);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value(s) of the element in the matched set. For example, consider the following form:
|
||||||
|
*
|
||||||
|
* <form><fieldset>
|
||||||
|
* <input name="A" type="text" />
|
||||||
|
* <input name="A" type="text" />
|
||||||
|
* <input name="B" type="checkbox" value="B1" />
|
||||||
|
* <input name="B" type="checkbox" value="B2"/>
|
||||||
|
* <input name="C" type="radio" value="C1" />
|
||||||
|
* <input name="C" type="radio" value="C2" />
|
||||||
|
* </fieldset></form>
|
||||||
|
*
|
||||||
|
* var v = $(':text').fieldValue();
|
||||||
|
* // if no values are entered into the text inputs
|
||||||
|
* v == ['','']
|
||||||
|
* // if values entered into the text inputs are 'foo' and 'bar'
|
||||||
|
* v == ['foo','bar']
|
||||||
|
*
|
||||||
|
* var v = $(':checkbox').fieldValue();
|
||||||
|
* // if neither checkbox is checked
|
||||||
|
* v === undefined
|
||||||
|
* // if both checkboxes are checked
|
||||||
|
* v == ['B1', 'B2']
|
||||||
|
*
|
||||||
|
* var v = $(':radio').fieldValue();
|
||||||
|
* // if neither radio is checked
|
||||||
|
* v === undefined
|
||||||
|
* // if first radio is checked
|
||||||
|
* v == ['C1']
|
||||||
|
*
|
||||||
|
* The successful argument controls whether or not the field element must be 'successful'
|
||||||
|
* (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
|
||||||
|
* The default value of the successful argument is true. If this value is false the value(s)
|
||||||
|
* for each element is returned.
|
||||||
|
*
|
||||||
|
* Note: This method *always* returns an array. If no valid value can be determined the
|
||||||
|
* array will be empty, otherwise it will contain one or more values.
|
||||||
|
*/
|
||||||
|
$.fn.fieldValue = function(successful) {
|
||||||
|
for (var val=[], i=0, max=this.length; i < max; i++) {
|
||||||
|
var el = this[i];
|
||||||
|
var v = $.fieldValue(el, successful);
|
||||||
|
if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
|
||||||
|
continue;
|
||||||
|
v.constructor == Array ? $.merge(val, v) : val.push(v);
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value of the field element.
|
||||||
|
*/
|
||||||
|
$.fieldValue = function(el, successful) {
|
||||||
|
var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
|
||||||
|
if (typeof successful == 'undefined') successful = true;
|
||||||
|
|
||||||
|
if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
|
||||||
|
(t == 'checkbox' || t == 'radio') && !el.checked ||
|
||||||
|
(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
|
||||||
|
tag == 'select' && el.selectedIndex == -1))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (tag == 'select') {
|
||||||
|
var index = el.selectedIndex;
|
||||||
|
if (index < 0) return null;
|
||||||
|
var a = [], ops = el.options;
|
||||||
|
var one = (t == 'select-one');
|
||||||
|
var max = (one ? index+1 : ops.length);
|
||||||
|
for(var i=(one ? index : 0); i < max; i++) {
|
||||||
|
var op = ops[i];
|
||||||
|
if (op.selected) {
|
||||||
|
var v = op.value;
|
||||||
|
if (!v) // extra pain for IE...
|
||||||
|
v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
|
||||||
|
if (one) return v;
|
||||||
|
a.push(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return el.value;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the form data. Takes the following actions on the form's input fields:
|
||||||
|
* - input text fields will have their 'value' property set to the empty string
|
||||||
|
* - select elements will have their 'selectedIndex' property set to -1
|
||||||
|
* - checkbox and radio inputs will have their 'checked' property set to false
|
||||||
|
* - inputs of type submit, button, reset, and hidden will *not* be effected
|
||||||
|
* - button elements will *not* be effected
|
||||||
|
*/
|
||||||
|
$.fn.clearForm = function() {
|
||||||
|
return this.each(function() {
|
||||||
|
$('input,select,textarea', this).clearFields();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the selected form elements.
|
||||||
|
*/
|
||||||
|
$.fn.clearFields = $.fn.clearInputs = function() {
|
||||||
|
return this.each(function() {
|
||||||
|
var t = this.type, tag = this.tagName.toLowerCase();
|
||||||
|
if (t == 'text' || t == 'password' || tag == 'textarea')
|
||||||
|
this.value = '';
|
||||||
|
else if (t == 'checkbox' || t == 'radio')
|
||||||
|
this.checked = false;
|
||||||
|
else if (tag == 'select')
|
||||||
|
this.selectedIndex = -1;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the form data. Causes all form elements to be reset to their original value.
|
||||||
|
*/
|
||||||
|
$.fn.resetForm = function() {
|
||||||
|
return this.each(function() {
|
||||||
|
// guard against an input with the name of 'reset'
|
||||||
|
// note that IE reports the reset function as an 'object'
|
||||||
|
if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
|
||||||
|
this.reset();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables or disables any matching elements.
|
||||||
|
*/
|
||||||
|
$.fn.enable = function(b) {
|
||||||
|
if (b == undefined) b = true;
|
||||||
|
return this.each(function() {
|
||||||
|
this.disabled = !b;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks/unchecks any matching checkboxes or radio buttons and
|
||||||
|
* selects/deselects and matching option elements.
|
||||||
|
*/
|
||||||
|
$.fn.selected = function(select) {
|
||||||
|
if (select == undefined) select = true;
|
||||||
|
return this.each(function() {
|
||||||
|
var t = this.type;
|
||||||
|
if (t == 'checkbox' || t == 'radio')
|
||||||
|
this.checked = select;
|
||||||
|
else if (this.tagName.toLowerCase() == 'option') {
|
||||||
|
var $sel = $(this).parent('select');
|
||||||
|
if (select && $sel[0] && $sel[0].type == 'select-one') {
|
||||||
|
// deselect all other options
|
||||||
|
$sel.find('option').selected(false);
|
||||||
|
}
|
||||||
|
this.selected = select;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// helper fn for console logging
|
||||||
|
// set $.fn.ajaxSubmit.debug to true to enable debug logging
|
||||||
|
function log() {
|
||||||
|
if ($.fn.ajaxSubmit.debug) {
|
||||||
|
var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
|
||||||
|
if (window.console && window.console.log)
|
||||||
|
window.console.log(msg);
|
||||||
|
else if (window.opera && window.opera.postError)
|
||||||
|
window.opera.postError(msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
})(jQuery);
|
154
media/dashboard/js/jquery.min.js
vendored
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
/*!
|
||||||
|
* jQuery JavaScript Library v1.4.2
|
||||||
|
* http://jquery.com/
|
||||||
|
*
|
||||||
|
* Copyright 2010, John Resig
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* Includes Sizzle.js
|
||||||
|
* http://sizzlejs.com/
|
||||||
|
* Copyright 2010, The Dojo Foundation
|
||||||
|
* Released under the MIT, BSD, and GPL Licenses.
|
||||||
|
*
|
||||||
|
* Date: Sat Feb 13 22:33:48 2010 -0500
|
||||||
|
*/
|
||||||
|
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
|
||||||
|
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
|
||||||
|
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
|
||||||
|
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
|
||||||
|
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
|
||||||
|
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
|
||||||
|
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
|
||||||
|
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
|
||||||
|
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
|
||||||
|
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
|
||||||
|
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
|
||||||
|
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
|
||||||
|
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
|
||||||
|
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
|
||||||
|
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
|
||||||
|
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
|
||||||
|
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
|
||||||
|
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
|
||||||
|
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
|
||||||
|
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
|
||||||
|
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
|
||||||
|
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
|
||||||
|
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
|
||||||
|
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
|
||||||
|
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
|
||||||
|
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
|
||||||
|
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
|
||||||
|
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
|
||||||
|
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
|
||||||
|
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
|
||||||
|
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
|
||||||
|
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
|
||||||
|
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
|
||||||
|
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
|
||||||
|
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
|
||||||
|
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
|
||||||
|
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
|
||||||
|
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
|
||||||
|
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
|
||||||
|
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
|
||||||
|
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
|
||||||
|
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
|
||||||
|
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
|
||||||
|
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
|
||||||
|
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
|
||||||
|
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
|
||||||
|
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
|
||||||
|
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
|
||||||
|
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
|
||||||
|
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
|
||||||
|
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
|
||||||
|
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
|
||||||
|
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
|
||||||
|
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
|
||||||
|
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
|
||||||
|
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
|
||||||
|
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
|
||||||
|
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
|
||||||
|
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
|
||||||
|
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
|
||||||
|
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
|
||||||
|
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
|
||||||
|
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
|
||||||
|
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
|
||||||
|
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
|
||||||
|
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
|
||||||
|
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
|
||||||
|
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
|
||||||
|
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
|
||||||
|
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
|
||||||
|
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
|
||||||
|
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
|
||||||
|
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
|
||||||
|
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
|
||||||
|
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
|
||||||
|
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
|
||||||
|
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
|
||||||
|
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
|
||||||
|
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
|
||||||
|
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
|
||||||
|
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
|
||||||
|
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
|
||||||
|
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
|
||||||
|
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
|
||||||
|
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
|
||||||
|
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
|
||||||
|
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
|
||||||
|
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
|
||||||
|
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
|
||||||
|
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
|
||||||
|
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
|
||||||
|
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
|
||||||
|
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
|
||||||
|
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
|
||||||
|
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
|
||||||
|
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
|
||||||
|
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
|
||||||
|
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
|
||||||
|
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
|
||||||
|
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
|
||||||
|
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
|
||||||
|
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
|
||||||
|
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
|
||||||
|
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
|
||||||
|
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
|
||||||
|
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
|
||||||
|
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
|
||||||
|
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
|
||||||
|
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
|
||||||
|
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
|
||||||
|
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
|
||||||
|
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
|
||||||
|
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
|
||||||
|
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
|
||||||
|
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
|
||||||
|
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
|
||||||
|
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
|
||||||
|
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
|
||||||
|
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
|
||||||
|
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
|
||||||
|
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
|
||||||
|
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
|
||||||
|
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
|
||||||
|
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
|
||||||
|
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
|
||||||
|
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
|
||||||
|
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
|
||||||
|
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
|
||||||
|
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
|
||||||
|
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
|
||||||
|
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
|
||||||
|
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
|
||||||
|
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
|
||||||
|
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
|
||||||
|
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
|
||||||
|
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
|
||||||
|
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
|
||||||
|
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
|
||||||
|
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
|
139
tools/install_venv.py
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||||
|
|
||||||
|
# Copyright 2010 United States Government as represented by the
|
||||||
|
# Administrator of the National Aeronautics and Space Administration.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Copyright 2010 OpenStack, LLC
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Installation script for the OpenStack Dashboard development virtualenv.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
VENV = os.path.join(ROOT, '.dashboard-venv')
|
||||||
|
WITH_VENV = os.path.join(ROOT, 'tools', 'with_venv.sh')
|
||||||
|
PIP_REQUIRES = os.path.join(ROOT, 'tools', 'pip-requires')
|
||||||
|
|
||||||
|
def die(message, *args):
|
||||||
|
print >>sys.stderr, message % args
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def run_command(cmd, redirect_output=True, check_exit_code=True, cwd=ROOT):
|
||||||
|
"""
|
||||||
|
Runs a command in an out-of-process shell, returning the
|
||||||
|
output of that command. Working directory is ROOT.
|
||||||
|
"""
|
||||||
|
if redirect_output:
|
||||||
|
stdout = subprocess.PIPE
|
||||||
|
else:
|
||||||
|
stdout = None
|
||||||
|
|
||||||
|
proc = subprocess.Popen(cmd, cwd=cwd, stdout=stdout)
|
||||||
|
output = proc.communicate()[0]
|
||||||
|
if check_exit_code and proc.returncode != 0:
|
||||||
|
die('Command "%s" failed.\n%s', ' '.join(cmd), output)
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
HAS_EASY_INSTALL = bool(run_command(['which', 'easy_install'], check_exit_code=False).strip())
|
||||||
|
HAS_VIRTUALENV = bool(run_command(['which', 'virtualenv'], check_exit_code=False).strip())
|
||||||
|
|
||||||
|
|
||||||
|
def check_dependencies():
|
||||||
|
"""Make sure virtualenv is in the path."""
|
||||||
|
|
||||||
|
if not HAS_VIRTUALENV:
|
||||||
|
print 'not found.'
|
||||||
|
# Try installing it via easy_install...
|
||||||
|
if HAS_EASY_INSTALL:
|
||||||
|
print 'Installing virtualenv via easy_install...',
|
||||||
|
if not run_command(['which', 'virtualenv']):
|
||||||
|
die('ERROR: virtualenv not found.\n\nevelopment requires virtualenv,'
|
||||||
|
' please install it using your favorite package management tool')
|
||||||
|
print 'done.'
|
||||||
|
print 'done.'
|
||||||
|
|
||||||
|
|
||||||
|
def create_virtualenv(venv=VENV):
|
||||||
|
"""Creates the virtual environment and installs PIP only into the
|
||||||
|
virtual environment
|
||||||
|
"""
|
||||||
|
print 'Creating venv...',
|
||||||
|
run_command(['virtualenv', '-q', '--no-site-packages', VENV])
|
||||||
|
print 'done.'
|
||||||
|
print 'Installing pip in virtualenv...',
|
||||||
|
if not run_command([WITH_VENV, 'easy_install', 'pip']).strip():
|
||||||
|
die("Failed to install pip.")
|
||||||
|
print 'done.'
|
||||||
|
|
||||||
|
|
||||||
|
def install_dependencies(venv=VENV):
|
||||||
|
print 'Installing dependencies with pip (this can take a while)...'
|
||||||
|
run_command([WITH_VENV, 'pip', 'install', '-E', venv, '-r', PIP_REQUIRES],
|
||||||
|
redirect_output=False)
|
||||||
|
|
||||||
|
# Tell the virtual env how to "import dashboard"
|
||||||
|
pthfile = os.path.join(venv, "lib", "python2.6", "site-packages", "dashboard.pth")
|
||||||
|
f = open(pthfile, 'w')
|
||||||
|
f.write("%s\n" % ROOT)
|
||||||
|
|
||||||
|
|
||||||
|
def install_django_nova(path):
|
||||||
|
print 'Installing django_nova in development mode...'
|
||||||
|
run_command([WITH_VENV, 'python', 'setup.py', 'develop'], cwd=path)
|
||||||
|
|
||||||
|
def print_usage():
|
||||||
|
usage = """
|
||||||
|
OpenStack Dashboard development uses virtualenv to track and manage Python
|
||||||
|
dependencies while in development and testing.
|
||||||
|
|
||||||
|
It uses the OpenStack django_nova module. For more information on how to
|
||||||
|
obtian the django_nova module, please refer to the README file.
|
||||||
|
|
||||||
|
usage: python install_venv.py <path to django_nova checkout>
|
||||||
|
"""
|
||||||
|
print usage
|
||||||
|
|
||||||
|
def print_summary():
|
||||||
|
summary = """
|
||||||
|
OpenStack Dashboard development environment setup is complete.
|
||||||
|
|
||||||
|
To activate the virtualenv for the extent of your current shell session you
|
||||||
|
can run:
|
||||||
|
|
||||||
|
$ source .dashboard-venv/bin/activate
|
||||||
|
"""
|
||||||
|
print summary
|
||||||
|
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
if len(argv) != 2:
|
||||||
|
print_usage()
|
||||||
|
sys.exit(1)
|
||||||
|
check_dependencies()
|
||||||
|
create_virtualenv()
|
||||||
|
install_dependencies()
|
||||||
|
install_django_nova(argv[1])
|
||||||
|
print_summary()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(sys.argv)
|
6
tools/pip-requires
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
boto==1.9b
|
||||||
|
nose==1.0.0
|
||||||
|
Django==1.2.3
|
||||||
|
django-nose==0.1.2
|
||||||
|
django-registration==0.7
|
||||||
|
|
5
tools/with_venv.sh
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
TOOLS=`dirname $0`
|
||||||
|
VENV=$TOOLS/../.dashboard-venv
|
||||||
|
source $VENV/bin/activate && $@
|
||||||
|
|