From 7b3ec96608d8f546fb82127d7416922c4b968ef5 Mon Sep 17 00:00:00 2001 From: Dmitry Burmistrov Date: Tue, 22 Oct 2013 13:22:57 +0400 Subject: [PATCH] Update DEB-specs to 2013.2 version --- debian/README.compression | 3 +- debian/changelog | 106 +- debian/control | 5 +- debian/openstack-dashboard.conf | 3 +- debian/openstack-dashboard.dirs | 3 + debian/openstack-dashboard.install | 2 +- debian/openstack-dashboard.postinst | 56 +- debian/openstack-dashboard.postrm | 38 +- debian/openstack-dashboard.preinst | 7 + .../patches/fix-dashboard-django-wsgi.patch | 8 +- debian/patches/fix-dashboard-manage.patch | 9 +- debian/patches/fix-ubuntu-tests.patch | 7 +- debian/patches/series | 2 +- debian/patches/ubuntu_local_settings.patch | 52 - debian/patches/ubuntu_settings.patch | 76 + debian/rules | 11 +- .../{3c066b7fc33c.css => d46048c6478b.css} | 2646 +++++++------- .../js/{7d82b0a14954.js => 271a130e6a31.js} | 287 +- .../js/{967e5ade6890.js => 588884c5a22a.js} | 2 +- .../static/openstack-dashboard/manifest.json | 6 +- debian/theme/css/ubuntu.css | 3025 ++++++++++------- 21 files changed, 3670 insertions(+), 2684 deletions(-) delete mode 100644 debian/patches/ubuntu_local_settings.patch create mode 100644 debian/patches/ubuntu_settings.patch rename debian/static/openstack-dashboard/css/{3c066b7fc33c.css => d46048c6478b.css} (63%) rename debian/static/openstack-dashboard/js/{7d82b0a14954.js => 271a130e6a31.js} (77%) rename debian/static/openstack-dashboard/js/{967e5ade6890.js => 588884c5a22a.js} (58%) diff --git a/debian/README.compression b/debian/README.compression index 4492b0f..a74700f 100644 --- a/debian/README.compression +++ b/debian/README.compression @@ -1,5 +1,6 @@ Until this can be scripted and integrated into package build, updating the pre-compressed static CSS and JS requires a some manual steps: - sudo apt-get install node-less nodejs-legacy python-openstack-auth python-compressor + sudo apt-get install python-lesscpy python-openstack-auth python-compressor + quilt pop top ./debian/rules refresh-static-assets diff --git a/debian/changelog b/debian/changelog index 61f16fe..56c3afb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,108 @@ -horizon (1:2013.2~b2-0ubuntu2~cloud0) precise-havana; urgency=low +horizon (1:2013.2-0ubuntu1~cloud0) precise-havana; urgency=low - * New upstream release for the Ubuntu Cloud Archive. + * New upstream release for the Ubuntu Cloud Archive. - -- Chuck Short Tue, 23 Jul 2013 08:19:16 -0400 + -- Chuck Short Wed, 16 Oct 2013 20:28:28 -0400 + +horizon (1:2013.2~rc3-0ubuntu1) saucy; urgency=low + + * New upstream release candidate (LP: #1240665). + + -- Chuck Short Wed, 16 Oct 2013 20:10:52 -0400 + +horizon (1:2013.2~rc2-0ubuntu1) saucy; urgency=low + + * New upstream release candidate. (#1239156) + * debian/README.compression: Updated documenation on how to + refresh the static assets. + + -- Chuck Short Tue, 15 Oct 2013 10:20:05 -0400 + +horizon (1:2013.2~rc1-0ubuntu2) saucy; urgency=low + + * d/theme/css/ubuntu.css: Refresh Ubuntu theme against new Havana + stylesheets, fixing network and chart layouts (LP: #1235249). + * d/openstack-dashboard.postinst: Allow horizon user to read and + write data in /var/lib/openstack-dashboard inline with user and + group permissions set in Apache configuration. + + -- James Page Fri, 04 Oct 2013 14:17:43 +0100 + +horizon (1:2013.2~rc1-0ubuntu1) saucy; urgency=low + + [ James Page ] + * New upstream release candidate: + - d/static: Refreshed static assets for 2013.2~rc1. + - d/patches: Refreshed patches. + + [ Chuck Short ] + * debian/control: Add python-lesscpy as a suggests to optionally + support online compression of static assets (LP: #1226674). + + -- James Page Thu, 03 Oct 2013 13:48:12 +0100 + +horizon (1:2013.2~b3-0ubuntu2) saucy; urgency=low + + * Don't use /etc/openstack-dashboard for in-process generated data + (LP: #1233752): + - d/openstack-dashboard.{dirs,postinst}: + + Create /var/lib/openstack-dashboard with restricted permissions, + allowing www-data user to write a secret_key if need be. + + Move /etc/openstack-dashboard/secret_key to correct location if + it already exists. + - d/p/ubuntu_settings.patch: Use /var/lib/openstack-dashboard for + secret key storage instead of /etc/openstack-dashboard. + + -- James Page Wed, 02 Oct 2013 10:31:15 +0100 + +horizon (1:2013.2~b3-0ubuntu1) saucy; urgency=low + + * New upstream release. + * debian/control: Minimum python-openstack-auth version >= 1.1.1. + * debian/control: Add python-troveclient. + * debian/static: Refresh static assets for 2013.2~b3. + * debian/patches: ubuntu_local_settings.patch -> ubuntu_settings.patch, also + patch location of secret key in openstack_dashboard/settings.py + + -- Adam Gandelman Fri, 06 Sep 2013 11:59:43 -0700 + +horizon (1:2013.2~b2-0ubuntu6) saucy; urgency=low + + * debian/patches/ubuntu_local_settings.py: Set flexible + default for ALLOWED_HOSTS that should be changed for production + deployments (LP: #1214982). + * Fix (LP: #1216019): + - debian/openstack-dashboard.{postinst, postrm}: Add/remove horizon + user. Ensure /etc/openstack-dashbard ownership. + - debian/openstack-dashboard.conf: Run WSGIDaemonProcess as user + horizon, set WSGIProcessGroup to horizon. + - debian/patches/ubuntu_local_settings.py: Generate and load secret + key from /etc/openstack-dashboard/secret_key. + + -- Adam Gandelman Fri, 06 Sep 2013 10:33:18 -0700 + +horizon (1:2013.2~b2-0ubuntu5) saucy; urgency=low + + * d/static/*: Refresh static assets for 2013.2~b2. + * d/rules: Tweak helper for refreshing static assets to link + local_settings.py correctly. + * d/openstack-dashboard.p*: Fix typo in configuration file name, + ensure consistent use of tabs/spaces. + + -- James Page Mon, 02 Sep 2013 16:43:56 +0100 + +horizon (1:2013.2~b2-0ubuntu4) saucy; urgency=low + + * Update for apache 2.4, preserve 2.2 compatability. (LP: #1218535) + + -- Adam Gandelman Fri, 30 Aug 2013 15:31:49 -0700 + +horizon (1:2013.2~b2-0ubuntu3) saucy; urgency=low + + * debian/rules: Don't remove egg information while cleaning. + (LP: #1210253) + + -- Chuck Short Wed, 21 Aug 2013 10:08:35 -0400 horizon (1:2013.2~b2-0ubuntu2) saucy; urgency=low diff --git a/debian/control b/debian/control index e9e743f..bb6895b 100644 --- a/debian/control +++ b/debian/control @@ -33,13 +33,15 @@ Depends: python-cloudfiles, python-memcache, python-netaddr, python-novaclient, - python-openstack-auth, + python-openstack-auth (>= 1.1.1), python-swiftclient, + python-troveclient, python-tz, python-neutronclient, ${misc:Depends}, ${python:Depends} Recommends: memcached +Suggests: python-lesscpy Description: Django module providing web based interaction with OpenStack The Django-Nova project is a Django module that is used to provide web based interactions with the OpenStack Nova cloud controller. @@ -48,6 +50,7 @@ Package: openstack-dashboard Architecture: all Pre-Depends: dpkg (>= 1.15.7.2) Depends: adduser, + apache2 | httpd, libapache2-mod-wsgi (>= 2.3), python-django-horizon (= ${source:Version}), ${misc:Depends}, diff --git a/debian/openstack-dashboard.conf b/debian/openstack-dashboard.conf index 908c8c0..1dfc262 100755 --- a/debian/openstack-dashboard.conf +++ b/debian/openstack-dashboard.conf @@ -1,5 +1,6 @@ WSGIScriptAlias /horizon /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi -WSGIDaemonProcess horizon user=www-data group=www-data processes=3 threads=10 +WSGIDaemonProcess horizon user=horizon group=horizon processes=3 threads=10 +WSGIProcessGroup horizon Alias /static /usr/share/openstack-dashboard/openstack_dashboard/static/ Order allow,deny diff --git a/debian/openstack-dashboard.dirs b/debian/openstack-dashboard.dirs index 2e95e15..b8f6a27 100644 --- a/debian/openstack-dashboard.dirs +++ b/debian/openstack-dashboard.dirs @@ -1,3 +1,6 @@ +/etc/openstack-dashboard +/usr/share/openstack-dashboard /usr/share/openstack-dashboard/bin/less/ /usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/js /usr/share/openstack-dashboard/openstack_dashboard/static/dashboard/css +/var/lib/openstack-dashboard diff --git a/debian/openstack-dashboard.install b/debian/openstack-dashboard.install index 70c359a..ad31d08 100644 --- a/debian/openstack-dashboard.install +++ b/debian/openstack-dashboard.install @@ -1,4 +1,4 @@ -etc/apache2/conf.d +debian/openstack-dashboard.conf etc/apache2/conf-available etc/openstack-dashboard usr/share/openstack-dashboard debian/static/openstack-dashboard/manifest.json usr/share/openstack-dashboard/openstack_dashboard/static/dashboard diff --git a/debian/openstack-dashboard.postinst b/debian/openstack-dashboard.postinst index b6f1ada..7e75670 100755 --- a/debian/openstack-dashboard.postinst +++ b/debian/openstack-dashboard.postinst @@ -1,21 +1,63 @@ #!/bin/sh +# vim: set ts=2 et: set -e +CONF="openstack-dashboard.conf" + if [ "$1" = "configure" ]; then - # /etc/apache2/conf.d/dashboard.conf -> /etc/apache2/conf.d/openstack-dashboard.conf - dpkg-maintscript-helper mv_conffile \ - /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf.d/openstack-dashboard.conf \ - 2012.1~rc1-0ubuntu1 -- "$@" + # /etc/apache2/conf.d/dashboard.conf -> /etc/apache2/conf-available/openstack-dashboard.conf + dpkg-maintscript-helper mv_conffile \ + /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf-available/$CONF \ + 2012.1~rc1-0ubuntu1 -- "$@" + + # Transition config to apache 2.4 compatable location. + dpkg-maintscript-helper mv_conffile \ + /etc/apache2/conf.d/$CONF \ + /etc/apache2/conf-available/$CONF \ + 1:2013.2~b2-0ubuntu3 -- "$@" - if [ -x /etc/init.d/apache2 ]; then - invoke-rc.d --quiet apache2 reload + if ! getent group horizon > /dev/null 2>&1 + then + addgroup --system horizon >/dev/null + fi + if ! getent passwd horizon > /dev/null 2>&1 + then + adduser --system --home /usr/share/openstack-dashboard/ --ingroup horizon \ + --no-create-home --shell /bin/false horizon fi if [ -e /usr/share/openstack-dashboard/openstack_dashboard/static ] ; then - chown -R www-data:www-data \ + chown -R horizon:horizon \ /usr/share/openstack-dashboard/openstack_dashboard/static fi + + if [ -d /etc/openstack-dashboard/ ] ; then + chown horizon:horizon /etc/openstack-dashboard/ + fi + + A22_STATE=$(dpkg-query -f '${Status}' -W 'apache2.2-common' 2>/dev/null | awk '{print $3}' || true) + + if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then + # apache 2.4 + . /usr/share/apache2/apache2-maintscript-helper + apache2_invoke enconf $CONF || exit $? + elif [ "$A22_STATE" = "installed" ] || [ "$A22_STATE" = "unpacked" ] ; then + # apache 2.2 + [ -d /etc/apache2/conf.d/ ] && [ ! -L /etc/apache2/conf.d/$CONF ] && + ln -s ../conf-available/$CONF /etc/apache2/conf.d/$CONF + [ -x /etc/init.d/apache2 ] && invoke-rc.d --quiet apache2 reload + fi + + if [ -d /var/lib/openstack-dashboard ] ; then + # Generated secret storage for single node use - see local_settings.py + # for more details of SECRET_KEY + chmod 0700 /var/lib/openstack-dashboard + if [ -f /etc/openstack-dashboard/secret_key ]; then + mv /etc/openstack-dashboard/secret_key /var/lib/openstack-dashboard + fi + chown -R horizon:horizon /var/lib/openstack-dashboard + fi fi #DEBHELPER# diff --git a/debian/openstack-dashboard.postrm b/debian/openstack-dashboard.postrm index 5d3b5d4..407ec1b 100755 --- a/debian/openstack-dashboard.postrm +++ b/debian/openstack-dashboard.postrm @@ -1,14 +1,44 @@ #!/bin/sh +# vim: set ts=2 et: set -e -# /etc/apache2/conf.d/dashboard.conf -> /etc/apache2/conf.d/openstack-dashboard.conf +CONF="openstack-dashboard.conf" + +# /etc/apache2/conf.d/dashboard.conf -> /etc/apache2/conf-available/openstack-dashboard.conf dpkg-maintscript-helper mv_conffile \ - /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf.d/openstack-dashboard.conf \ + /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf-available/$CONF \ 2012.1~rc1-0ubuntu1 -- "$@" -if [ -x "`which invoke-rc.d 2>/dev/null`" -a -x "/etc/init.d/apache2" ] ; then - invoke-rc.d --quiet apache2 reload +# Transition config to apache 2.4 compatable location. +dpkg-maintscript-helper mv_conffile \ + /etc/apache2/conf.d/openstack-dashboard.conf \ + /etc/apache2/conf-available/openstack-dashboard.conf \ + 1:2013.2~b2-0ubuntu3 -- "$@" + +if [ "$1" = "remove" ] || [ "$1" = "purge" ] ; then + A22_STATE=$(dpkg-query -f '${Status}' -W 'apache2.2-common' 2>/dev/null | awk '{print $3}' || true) + + if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then + # apache 2.4 + . /usr/share/apache2/apache2-maintscript-helper + apache2_invoke disconf $CONF || exit $? + elif [ "$A22_STATE" = "installed" ] || [ "$A22_STATE" = "unpacked" ] ; then + # apache 2.2 + [ -d /etc/apache2/conf.d/ ] && [ -L /etc/apache2/conf.d/$CONF ] && + rm /etc/apache2/conf.d/$CONF + [ -x /etc/init.d/apache2 ] && invoke-rc.d --quiet apache2 reload + fi + +fi + +if [ "$1" = "purge" ] ; then + if (which deluser && getent passwd horizon) > /dev/null 2>&1; then + deluser --system --quiet --backup-to /var/lib horizon + fi + if (which delgroup && getent group horizon) > /dev/null 2>&1; then + delgroup --system --quiet horizon + fi fi #DEBHELPER# diff --git a/debian/openstack-dashboard.preinst b/debian/openstack-dashboard.preinst index fd4f425..4979072 100755 --- a/debian/openstack-dashboard.preinst +++ b/debian/openstack-dashboard.preinst @@ -1,4 +1,5 @@ #!/bin/sh +# vim: set ts=2 et: set -e @@ -7,4 +8,10 @@ dpkg-maintscript-helper mv_conffile \ /etc/apache2/conf.d/dashboard.conf /etc/apache2/conf.d/openstack-dashboard.conf \ 2012.1~rc1-0ubuntu1 -- "$@" +# Transition config to apache 2.4 compatable location. +dpkg-maintscript-helper mv_conffile \ + /etc/apache2/conf.d/openstack-dashboard.conf \ + /etc/apache2/conf-available/openstack-dashboard.conf \ + 1:2013.2~b2-0ubuntu3 -- "$@" + #DEBHELPER# diff --git a/debian/patches/fix-dashboard-django-wsgi.patch b/debian/patches/fix-dashboard-django-wsgi.patch index af18a09..4b232aa 100644 --- a/debian/patches/fix-dashboard-django-wsgi.patch +++ b/debian/patches/fix-dashboard-django-wsgi.patch @@ -1,8 +1,6 @@ -Index: horizon/openstack_dashboard/wsgi/django.wsgi -=================================================================== ---- horizon.orig/openstack_dashboard/wsgi/django.wsgi 2012-07-03 14:07:21.316118123 -0700 -+++ horizon/openstack_dashboard/wsgi/django.wsgi 2012-07-03 14:07:26.176118333 -0700 -@@ -9,6 +9,8 @@ +--- a/openstack_dashboard/wsgi/django.wsgi ++++ b/openstack_dashboard/wsgi/django.wsgi +@@ -9,6 +9,8 @@ sys.path.insert(0, os.path.join(os.path. os.environ['DJANGO_SETTINGS_MODULE'] = 'openstack_dashboard.settings' sys.stdout = sys.stderr diff --git a/debian/patches/fix-dashboard-manage.patch b/debian/patches/fix-dashboard-manage.patch index 426f87a..060d69c 100644 --- a/debian/patches/fix-dashboard-manage.patch +++ b/debian/patches/fix-dashboard-manage.patch @@ -1,10 +1,9 @@ -diff -Naurp horizon-2013.1.orig/manage.py horizon-2013.1/manage.py ---- horizon-2013.1.orig/manage.py 2012-11-20 22:59:38.000000000 -0600 -+++ horizon-2013.1/manage.py 2012-11-21 12:28:58.773240222 -0600 +--- a/manage.py ++++ b/manage.py @@ -5,6 +5,8 @@ import sys - + from django.core.management import execute_from_command_line # noqa - + +sys.path.append("/usr/share/openstack-dashboard") + if __name__ == "__main__": diff --git a/debian/patches/fix-ubuntu-tests.patch b/debian/patches/fix-ubuntu-tests.patch index cc34d09..585ff02 100644 --- a/debian/patches/fix-ubuntu-tests.patch +++ b/debian/patches/fix-ubuntu-tests.patch @@ -1,7 +1,6 @@ -diff -Naurp horizon-2013.1.orig/run_tests.sh horizon-2013.1/run_tests.sh ---- horizon-2013.1.orig/run_tests.sh 2012-11-20 22:59:39.000000000 -0600 -+++ horizon-2013.1/run_tests.sh 2012-11-21 12:25:55.197240133 -0600 -@@ -292,25 +292,25 @@ function run_tests_all { +--- a/run_tests.sh ++++ b/run_tests.sh +@@ -298,25 +298,25 @@ function run_tests_all { if [ "$NOSE_WITH_HTML_OUTPUT" = '1' ]; then export NOSE_HTML_OUT_FILE='horizon_nose_results.html' fi diff --git a/debian/patches/series b/debian/patches/series index 75d3260..cb08dbd 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -5,4 +5,4 @@ fix-dashboard-manage.patch #add_juju_settings_panel.patch fix-ubuntu-tests.patch -ubuntu_local_settings.patch +ubuntu_settings.patch diff --git a/debian/patches/ubuntu_local_settings.patch b/debian/patches/ubuntu_local_settings.patch deleted file mode 100644 index aa902ff..0000000 --- a/debian/patches/ubuntu_local_settings.patch +++ /dev/null @@ -1,52 +0,0 @@ -diff -Naurp horizon-2013.2.a96.gd17fd51.orig/openstack_dashboard/local/local_settings.py.example horizon-2013.2.a96.gd17fd51/openstack_dashboard/local/local_settings.py.example ---- horizon-2013.2.a96.gd17fd51.orig/openstack_dashboard/local/local_settings.py.example 2013-05-21 09:33:32.000000000 -0500 -+++ horizon-2013.2.a96.gd17fd51/openstack_dashboard/local/local_settings.py.example 2013-05-21 11:34:34.426566745 -0500 -@@ -4,7 +4,7 @@ from django.utils.translation import uge - - from openstack_dashboard import exceptions - --DEBUG = True -+DEBUG = False - TEMPLATE_DEBUG = DEBUG - - # Required for Django 1.5. -@@ -90,19 +90,29 @@ SECRET_KEY = secret_key.generate_or_read - # We recommend you use memcached for development; otherwise after every reload - # of the django development server, you will have to login again. To use - # memcached set CACHES to something like --# CACHES = { --# 'default': { --# 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache', --# 'LOCATION' : '127.0.0.1:11211', --# } --#} -- - CACHES = { -- 'default': { -- 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' -- } -+ 'default': { -+ 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache', -+ 'LOCATION' : '127.0.0.1:11211', -+ } - } - -+# Enable the Ubuntu theme if it is present. -+try: -+ from ubuntu_theme import * -+except ImportError: -+ pass -+ -+# Default Ubuntu apache configuration uses /horizon as the application root. -+# Configure auth redirects here accordingly. -+LOGIN_URL='/horizon/auth/login/' -+LOGIN_REDIRECT_URL='/horizon' -+ -+# The Ubuntu package includes pre-compressed JS and compiled CSS to allow -+# offline compression by default. To enable online compression, install -+# the node-less package and enable the following option. -+COMPRESS_OFFLINE = True -+ - # Send email to the console by default - EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' - # Or send them to /dev/null diff --git a/debian/patches/ubuntu_settings.patch b/debian/patches/ubuntu_settings.patch new file mode 100644 index 0000000..bc064c1 --- /dev/null +++ b/debian/patches/ubuntu_settings.patch @@ -0,0 +1,76 @@ +--- a/openstack_dashboard/local/local_settings.py.example ++++ b/openstack_dashboard/local/local_settings.py.example +@@ -4,7 +4,7 @@ from django.utils.translation import uge + + from openstack_dashboard import exceptions + +-DEBUG = True ++DEBUG = False + TEMPLATE_DEBUG = DEBUG + + # Required for Django 1.5. +@@ -89,22 +89,16 @@ LOCAL_PATH = os.path.dirname(os.path.abs + # requests routed to the same dashboard instance or you set the same SECRET_KEY + # for all of them. + from horizon.utils import secret_key +-SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH, '.secret_key_store')) ++SECRET_KEY = secret_key.generate_or_read_from_file('/var/lib/openstack-dashboard/secret_key') + + # We recommend you use memcached for development; otherwise after every reload + # of the django development server, you will have to login again. To use + # memcached set CACHES to something like +-# CACHES = { +-# 'default': { +-# 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache', +-# 'LOCATION' : '127.0.0.1:11211', +-# } +-#} +- + CACHES = { +- 'default': { +- 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' +- } ++ 'default': { ++ 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache', ++ 'LOCATION' : '127.0.0.1:11211', ++ } + } + + # Send email to the console by default +@@ -406,3 +400,24 @@ SECURITY_GROUP_RULES = { + 'to_port': '3389', + }, + } ++ ++# Enable the Ubuntu theme if it is present. ++try: ++ from ubuntu_theme import * ++except ImportError: ++ pass ++ ++# Default Ubuntu apache configuration uses /horizon as the application root. ++# Configure auth redirects here accordingly. ++LOGIN_URL='/horizon/auth/login/' ++LOGIN_REDIRECT_URL='/horizon' ++ ++# The Ubuntu package includes pre-compressed JS and compiled CSS to allow ++# offline compression by default. To enable online compression, install ++# the node-less package and enable the following option. ++COMPRESS_OFFLINE = True ++ ++# By default, validation of the HTTP Host header is disabled. Production ++# installations should have this set accordingly. For more information ++# see https://docs.djangoproject.com/en/dev/ref/settings/. ++ALLOWED_HOSTS = '*' +--- a/openstack_dashboard/settings.py ++++ b/openstack_dashboard/settings.py +@@ -217,8 +217,7 @@ if not SECRET_KEY: + from horizon.utils import secret_key + LOCAL_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), + 'local') +- SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH, +- '.secret_key_store')) ++ SECRET_KEY = secret_key.generate_or_read_from_file('/var/lib/openstack-dashboard/secret_key') + + from openstack_dashboard import policy + POLICY_CHECK_FUNCTION = policy.check diff --git a/debian/rules b/debian/rules index 17e745e..5730ae0 100755 --- a/debian/rules +++ b/debian/rules @@ -11,12 +11,12 @@ override_dh_auto_install: python setup.py install --root=$(CURDIR)/debian/tmp --no-compile -O0 --install-layout=deb install -d -m 755 $(CURDIR)/debian/tmp/usr/share/openstack-dashboard install -d -m 755 $(CURDIR)/debian/tmp/etc/openstack-dashboard - install -d -m 755 $(CURDIR)/debian/tmp/etc/apache2/conf.d - + install -d -m 755 $(CURDIR)/debian/tmp/etc/apache2/conf-available + cp -a $(CURDIR)/openstack_dashboard/ $(CURDIR)/debian/tmp/usr/share/openstack-dashboard/ + install -d -m 755 $(CURDIR)/debian/tmp/etc/openstack-dashboard cp -a $(CURDIR)/openstack_dashboard/settings.py $(CURDIR)/debian/tmp/usr/share/openstack-dashboard/ - - cp -a $(CURDIR)/debian/openstack-dashboard.conf $(CURDIR)/debian/tmp/etc/apache2/conf.d + cp $(CURDIR)/openstack_dashboard/local/local_settings.py.example \ $(CURDIR)/debian/tmp/etc/openstack-dashboard/local_settings.py cp $(CURDIR)/manage.py \ @@ -34,7 +34,6 @@ endif override_dh_auto_clean: dh_clean rm -rf $(CURDIR)/build - rm -rf $(CURDIR)/horizon.egg-info rm -rf $(CURDIR)/debian/openstack-dashboard rm -rf $(CURDIR)/debian/python-django-horizon rm -rf $(CURDIR)/debian/tmp @@ -44,7 +43,7 @@ get-orig-source: uscan --verbose --force-download --rename --destdir=../build-area refresh-static-assets: - ln -sf openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py + (cd openstack_dashboard/local; ln -sf local_settings.py.example local_settings.py) python ./manage.py compress --force rm -rf debian/static/openstack-dashboard/* cp -r static/dashboard/* debian/static/openstack-dashboard/ diff --git a/debian/static/openstack-dashboard/css/3c066b7fc33c.css b/debian/static/openstack-dashboard/css/d46048c6478b.css similarity index 63% rename from debian/static/openstack-dashboard/css/3c066b7fc33c.css rename to debian/static/openstack-dashboard/css/d46048c6478b.css index a2eb0a2..2bfb435 100644 --- a/debian/static/openstack-dashboard/css/3c066b7fc33c.css +++ b/debian/static/openstack-dashboard/css/d46048c6478b.css @@ -1,12 +1,3 @@ -/*! - * Bootstrap v2.0.1 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ article, aside, details, @@ -19,9 +10,7 @@ nav, section { display: block; } -audio, -canvas, -video { +audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; @@ -35,16 +24,14 @@ html { -ms-text-size-adjust: 100%; } a:focus { - outline: thin dotted #333; + outline: thin dotted #333333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -a:hover, -a:active { +a:hover, a:active { outline: 0; } -sub, -sup { +sub, sup { position: relative; font-size: 75%; line-height: 0; @@ -62,28 +49,20 @@ img { border: 0; -ms-interpolation-mode: bicubic; } -button, -input, -select, -textarea { +button, input, select, textarea { margin: 0; font-size: 100%; vertical-align: middle; } -button, -input { +button, input { *overflow: visible; line-height: normal; } -button::-moz-focus-inner, -input::-moz-focus-inner { +button::-moz-focus-inner, input::-moz-focus-inner { padding: 0; border: 0; } -button, -input[type="button"], -input[type="reset"], -input[type="submit"] { +button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; } @@ -104,8 +83,7 @@ textarea { .clearfix { *zoom: 1; } -.clearfix:before, -.clearfix:after { +.clearfix:before, .clearfix:after { display: table; content: ""; } @@ -132,8 +110,7 @@ a:hover { margin-left: -20px; *zoom: 1; } -.row:before, -.row:after { +.row:before, .row:after { display: table; content: ""; } @@ -177,8 +154,7 @@ a:hover { .span11 { width: 860px; } -.span12, -.container { +.span12, .container { width: 940px; } .offset1 { @@ -218,8 +194,7 @@ a:hover { width: 100%; *zoom: 1; } -.row-fluid:before, -.row-fluid:after { +.row-fluid:before, .row-fluid:after { display: table; content: ""; } @@ -249,25 +224,25 @@ a:hover { width: 40.425531911%; } .row-fluid > .span6 { - width: 48.93617020799999%; + width: 48.936170208%; } .row-fluid > .span7 { width: 57.446808505%; } .row-fluid > .span8 { - width: 65.95744680199999%; + width: 65.957446802%; } .row-fluid > .span9 { width: 74.468085099%; } .row-fluid > .span10 { - width: 82.97872339599999%; + width: 82.978723396%; } .row-fluid > .span11 { width: 91.489361693%; } .row-fluid > .span12 { - width: 99.99999998999999%; + width: 99.99999999%; } .container { width: 940px; @@ -275,8 +250,7 @@ a:hover { margin-right: auto; *zoom: 1; } -.container:before, -.container:after { +.container:before, .container:after { display: table; content: ""; } @@ -288,8 +262,7 @@ a:hover { padding-right: 20px; *zoom: 1; } -.container-fluid:before, -.container-fluid:after { +.container-fluid:before, .container-fluid:after { display: table; content: ""; } @@ -312,23 +285,13 @@ p small { font-weight: 200; line-height: 27px; } -h1, -h2, -h3, -h4, -h5, -h6 { +h1, h2, h3, h4, h5, h6 { margin: 0; font-weight: bold; color: #333333; text-rendering: optimizelegibility; } -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { +h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { font-weight: normal; color: #999999; } @@ -353,9 +316,7 @@ h3 { h3 small { font-size: 14px; } -h4, -h5, -h6 { +h4, h5, h6 { line-height: 18px; } h4 { @@ -380,15 +341,11 @@ h6 { .page-header h1 { line-height: 1; } -ul, -ol { +ul, ol { padding: 0; margin: 0 0 9px 25px; } -ul ul, -ul ol, -ol ol, -ol ul { +ul ul, ul ol, ol ol, ol ul { margin-bottom: 0; } ul { @@ -400,8 +357,7 @@ ol { li { line-height: 18px; } -ul.unstyled, -ol.unstyled { +ul.unstyled, ol.unstyled { margin-left: 0; list-style: none; } @@ -412,8 +368,7 @@ table ul { dl { margin-bottom: 18px; } -dt, -dd { +dt, dd { line-height: 18px; } dt { @@ -440,7 +395,7 @@ em { abbr { font-size: 90%; text-transform: uppercase; - border-bottom: 1px dotted #ddd; + border-bottom: 1px dotted #dddddd; cursor: help; } blockquote { @@ -469,14 +424,10 @@ blockquote.pull-right { border-left: 0; border-right: 5px solid #eeeeee; } -blockquote.pull-right p, -blockquote.pull-right small { +blockquote.pull-right p, blockquote.pull-right small { text-align: right; } -q:before, -q:after, -blockquote:before, -blockquote:after { +q:before, q:after, blockquote:before, blockquote:after { content: ""; } address { @@ -491,8 +442,7 @@ small { cite { font-style: normal; } -code, -pre { +code, pre { padding: 0 3px 2px; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; @@ -503,7 +453,7 @@ pre { } code { padding: 3px 4px; - color: #d14; + color: #dd1144; background-color: #f7f7f9; border: 1px solid #e1e1e8; } @@ -514,8 +464,8 @@ pre { font-size: 12px; line-height: 18px; background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); + border: 1px solid #cccccc; + border: 1px solid rgba(0,0,0,.15); -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; @@ -554,25 +504,18 @@ legend { line-height: 36px; color: #333333; border: 0; - border-bottom: 1px solid #eee; + border-bottom: 1px solid #eeeeee; } legend small { font-size: 13.5px; color: #999999; } -label, -input, -button, -select, -textarea { +label, input, button, select, textarea { font-size: 13px; font-weight: normal; line-height: 18px; } -input, -button, -select, -textarea { +input, button, select, textarea { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } label { @@ -580,10 +523,7 @@ label { margin-bottom: 5px; color: #333333; } -input, -textarea, -select, -.uneditable-input { +input, textarea, select, .uneditable-input { display: inline-block; width: 210px; height: 18px; @@ -592,7 +532,7 @@ select, font-size: 13px; line-height: 18px; color: #555555; - border: 1px solid #ccc; + border: 1px solid #cccccc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; @@ -601,29 +541,21 @@ select, width: auto; height: auto; } -label input, -label textarea, -label select { +label input, label textarea, label select { display: block; } -input[type="image"], -input[type="checkbox"], -input[type="radio"] { +input[type="image"], input[type="checkbox"], input[type="radio"] { width: auto; height: auto; padding: 0; margin: 3px 0; *margin-top: 0; - /* IE7 */ - line-height: normal; cursor: pointer; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; border: 0 \9; - /* IE9 and down */ - } input[type="image"] { border: 0; @@ -639,20 +571,13 @@ input[type="file"] { -moz-box-shadow: none; box-shadow: none; } -input[type="button"], -input[type="reset"], -input[type="submit"] { +input[type="button"], input[type="reset"], input[type="submit"] { width: auto; height: auto; } -select, -input[type="file"] { +select, input[type="file"] { height: 28px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - line-height: 28px; } input[type="file"] { @@ -662,8 +587,7 @@ select { width: 220px; background-color: #ffffff; } -select[multiple], -select[size] { +select[multiple], select[size] { height: auto; } input[type="image"] { @@ -677,51 +601,42 @@ textarea { input[type="hidden"] { display: none; } -.radio, -.checkbox { +.radio, .checkbox { padding-left: 18px; } -.radio input[type="radio"], -.checkbox input[type="checkbox"] { +.radio input[type="radio"], .checkbox input[type="checkbox"] { float: left; margin-left: -18px; } -.controls > .radio:first-child, -.controls > .checkbox:first-child { +.controls > .radio:first-child, .controls > .checkbox:first-child { padding-top: 5px; } -.radio.inline, -.checkbox.inline { +.radio.inline, .checkbox.inline { display: inline-block; padding-top: 5px; margin-bottom: 0; vertical-align: middle; } -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { +.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { margin-left: 10px; } -input, -textarea { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -ms-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} -input:focus, -textarea:focus { - border-color: rgba(82, 168, 236, 0.8); - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +input, textarea { + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + -webkit-transition: border linear .2s, box-shadow linear .2s; + -moz-transition: border linear .2s, box-shadow linear .2s; + -ms-transition: border linear .2s, box-shadow linear .2s; + -o-transition: border linear .2s, box-shadow linear .2s; + transition: border linear .2s, box-shadow linear .2s; +} +input:focus, textarea:focus { + border-color: rgba(82,168,236,.8); + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); outline: 0; outline: thin dotted \9; - /* IE6-9 */ - } input[type="file"]:focus, input[type="radio"]:focus, @@ -730,7 +645,7 @@ select:focus { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; - outline: thin dotted #333; + outline: thin dotted #333333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } @@ -759,64 +674,40 @@ textarea[class*="span"], float: none; margin-left: 0; } -input.span1, -textarea.span1, -.uneditable-input.span1 { +input.span1, textarea.span1, .uneditable-input.span1 { width: 50px; } -input.span2, -textarea.span2, -.uneditable-input.span2 { +input.span2, textarea.span2, .uneditable-input.span2 { width: 130px; } -input.span3, -textarea.span3, -.uneditable-input.span3 { +input.span3, textarea.span3, .uneditable-input.span3 { width: 210px; } -input.span4, -textarea.span4, -.uneditable-input.span4 { +input.span4, textarea.span4, .uneditable-input.span4 { width: 290px; } -input.span5, -textarea.span5, -.uneditable-input.span5 { +input.span5, textarea.span5, .uneditable-input.span5 { width: 370px; } -input.span6, -textarea.span6, -.uneditable-input.span6 { +input.span6, textarea.span6, .uneditable-input.span6 { width: 450px; } -input.span7, -textarea.span7, -.uneditable-input.span7 { +input.span7, textarea.span7, .uneditable-input.span7 { width: 530px; } -input.span8, -textarea.span8, -.uneditable-input.span8 { +input.span8, textarea.span8, .uneditable-input.span8 { width: 610px; } -input.span9, -textarea.span9, -.uneditable-input.span9 { +input.span9, textarea.span9, .uneditable-input.span9 { width: 690px; } -input.span10, -textarea.span10, -.uneditable-input.span10 { +input.span10, textarea.span10, .uneditable-input.span10 { width: 770px; } -input.span11, -textarea.span11, -.uneditable-input.span11 { +input.span11, textarea.span11, .uneditable-input.span11 { width: 850px; } -input.span12, -textarea.span12, -.uneditable-input.span12 { +input.span12, textarea.span12, .uneditable-input.span12 { width: 930px; } input[disabled], @@ -826,18 +717,18 @@ input[readonly], select[readonly], textarea[readonly] { background-color: #f5f5f5; - border-color: #ddd; + border-color: #dddddd; cursor: not-allowed; } .control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline { - color: #c09853; + color: #333333; } .control-group.warning input, .control-group.warning select, .control-group.warning textarea { - color: #c09853; + color: #333333; border-color: #c09853; } .control-group.warning input:focus, @@ -850,19 +741,19 @@ textarea[readonly] { } .control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on { - color: #c09853; + color: #333333; background-color: #fcf8e3; - border-color: #c09853; + border-color: #333333; } .control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline { - color: #b94a48; + color: #333333; } .control-group.error input, .control-group.error select, .control-group.error textarea { - color: #b94a48; + color: #333333; border-color: #b94a48; } .control-group.error input:focus, @@ -875,19 +766,19 @@ textarea[readonly] { } .control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on { - color: #b94a48; + color: #333333; background-color: #f2dede; - border-color: #b94a48; + border-color: #333333; } .control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline { - color: #468847; + color: #333333; } .control-group.success input, .control-group.success select, .control-group.success textarea { - color: #468847; + color: #333333; border-color: #468847; } .control-group.success input:focus, @@ -900,9 +791,9 @@ textarea[readonly] { } .control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on { - color: #468847; + color: #333333; background-color: #dff0d8; - border-color: #468847; + border-color: #333333; } input:focus:required:invalid, textarea:focus:required:invalid, @@ -923,15 +814,15 @@ select:focus:required:invalid:focus { margin-top: 18px; margin-bottom: 18px; background-color: #f5f5f5; - border-top: 1px solid #ddd; + border-top: 1px solid #dddddd; } .uneditable-input { display: block; background-color: #ffffff; - border-color: #eee; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + border-color: #eeeeee; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.025); + -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.025); + box-shadow: inset 0 1px 2px rgba(0,0,0,.025); cursor: not-allowed; } :-moz-placeholder { @@ -949,50 +840,44 @@ select:focus:required:invalid:focus { .help-inline { display: inline-block; *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; margin-bottom: 9px; vertical-align: middle; padding-left: 5px; } -.input-prepend, -.input-append { +.input-prepend, .input-append { margin-bottom: 5px; *zoom: 1; } .input-prepend:before, -.input-append:before, .input-prepend:after, +.input-append:before, .input-append:after { display: table; content: ""; } -.input-prepend:after, -.input-append:after { +.input-prepend:after, .input-append:after { clear: both; } .input-prepend input, -.input-append input, .input-prepend .uneditable-input, +.input-append input, .input-append .uneditable-input { -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend input:focus, -.input-append input:focus, .input-prepend .uneditable-input:focus, +.input-append input:focus, .input-append .uneditable-input:focus { position: relative; z-index: 2; } -.input-prepend .uneditable-input, -.input-append .uneditable-input { - border-left-color: #ccc; +.input-prepend .uneditable-input, .input-append .uneditable-input { + border-left-color: #cccccc; } -.input-prepend .add-on, -.input-append .add-on { +.input-prepend .add-on, .input-append .add-on { float: left; display: block; width: auto; @@ -1006,31 +891,27 @@ select:focus:required:invalid:focus { text-align: center; text-shadow: 0 1px 0 #ffffff; background-color: #f5f5f5; - border: 1px solid #ccc; + border: 1px solid #cccccc; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } -.input-prepend .active, -.input-append .active { +.input-prepend .active, .input-append .active { background-color: #a9dba9; border-color: #46a546; } .input-prepend .add-on { *margin-top: 1px; - /* IE6-7 */ - } -.input-append input, -.input-append .uneditable-input { +.input-append input, .input-append .uneditable-input { float: left; -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append .uneditable-input { - border-left-color: #eee; - border-right-color: #ccc; + border-left-color: #eeeeee; + border-right-color: #cccccc; } .input-append .add-on { margin-right: 0; @@ -1054,26 +935,24 @@ select:focus:required:invalid:focus { border-radius: 14px; } .form-search input, -.form-inline input, -.form-horizontal input, .form-search textarea, -.form-inline textarea, -.form-horizontal textarea, .form-search select, -.form-inline select, -.form-horizontal select, .form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, .form-search .uneditable-input, +.form-inline input, +.form-inline textarea, +.form-inline select, +.form-inline .help-inline, .form-inline .uneditable-input, +.form-horizontal input, +.form-horizontal textarea, +.form-horizontal select, +.form-horizontal .help-inline, .form-horizontal .uneditable-input { display: inline-block; margin-bottom: 0; } -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { +.form-search .hide, .form-inline .hide, .form-horizontal .hide { display: none; } .form-search label, @@ -1108,8 +987,7 @@ legend + .control-group { margin-bottom: 18px; *zoom: 1; } -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { +.form-horizontal .control-group:before, .form-horizontal .control-group:after { display: table; content: ""; } @@ -1137,13 +1015,12 @@ table { width: 100%; margin-bottom: 18px; } -.table th, -.table td { +.table th, .table td { padding: 8px; line-height: 18px; text-align: left; vertical-align: top; - border-top: 1px solid #ddd; + border-top: 1px solid #dddddd; } .table th { font-weight: bold; @@ -1151,19 +1028,17 @@ table { .table thead th { vertical-align: bottom; } -.table thead:first-child tr th, -.table thead:first-child tr td { +.table thead:first-child tr th, .table thead:first-child tr td { border-top: 0; } .table tbody + tbody { - border-top: 2px solid #ddd; + border-top: 2px solid #dddddd; } -.table-condensed th, -.table-condensed td { +.table-condensed th, .table-condensed td { padding: 4px 5px; } .table-bordered { - border: 1px solid #ddd; + border: 1px solid #dddddd; border-collapse: separate; *border-collapse: collapsed; -webkit-border-radius: 4px; @@ -1174,7 +1049,7 @@ table { .table-bordered td + td, .table-bordered th + td, .table-bordered td + th { - border-left: 1px solid #ddd; + border-left: 1px solid #dddddd; } .table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, @@ -1205,12 +1080,10 @@ table { -moz-border-radius: 0 0 4px 0; border-radius: 0 0 4px 0; } -.table-striped tbody tr:nth-child(odd) td, -.table-striped tbody tr:nth-child(odd) th { +.table-striped tbody tr:nth-child(odd)td, .table-striped tbody tr:nth-child(odd)th { background-color: #f9f9f9; } -.table tbody tr:hover td, -.table tbody tr:hover th { +.table tbody tr:hover td, .table tbody tr:hover th { background-color: #f5f5f5; } table .span1 { @@ -1273,8 +1146,7 @@ table .span12 { width: 924px; margin-left: 0; } -[class^="icon-"], -[class*=" icon-"] { +[class^="icon-"], [class*=" icon-"] { display: inline-block; width: 14px; height: 14px; @@ -1285,15 +1157,14 @@ table .span12 { background-repeat: no-repeat; *margin-right: .3em; } -[class^="icon-"]:last-child, -[class*=" icon-"]:last-child { +[class^="icon-"]:last-child, [class*=" icon-"]:last-child { *margin-left: 0; } .icon-white { background-image: url('/static/bootstrap/img/glyphicons-halflings-white.png'); } .icon-glass { - background-position: 0 0; + background-position: 0 0; } .icon-music { background-position: -24px 0; @@ -1658,8 +1529,7 @@ table .span12 { .dropdown-toggle { *margin-bottom: -3px; } -.dropdown-toggle:active, -.open .dropdown-toggle { +.dropdown-toggle:active, .open .dropdown-toggle { outline: 0; } .caret { @@ -1680,8 +1550,7 @@ table .span12 { margin-top: 8px; margin-left: 2px; } -.dropdown:hover .caret, -.open.dropdown .caret { +.dropdown:hover .caret, .open.dropdown .caret { opacity: 1; filter: alpha(opacity=100); } @@ -1698,16 +1567,16 @@ table .span12 { margin: 0; list-style: none; background-color: #ffffff; - border-color: #ccc; - border-color: rgba(0, 0, 0, 0.2); + border-color: #cccccc; + border-color: rgba(0,0,0,.2); border-style: solid; border-width: 1px; -webkit-border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; border-radius: 0 0 5px 5px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); + -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2); + box-shadow: 0 5px 10px rgba(0,0,0,.2); -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; @@ -1749,8 +1618,8 @@ table .span12 { } .dropdown.open .dropdown-toggle { color: #ffffff; - background: #ccc; - background: rgba(0, 0, 0, 0.3); + background: #cccccc; + background: rgba(0,0,0,.3); } .dropdown.open .dropdown-menu { display: block; @@ -1766,36 +1635,36 @@ table .span12 { padding: 19px; margin-bottom: 20px; background-color: #f5f5f5; - border: 1px solid #eee; - border: 1px solid rgba(0, 0, 0, 0.05); + border: 1px solid #eeeeee; + border: 1px solid rgba(0,0,0,.05); -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.05); + box-shadow: inset 0 1px 1px rgba(0,0,0,.05); } .well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); + border-color: #dddddd; + border-color: rgba(0,0,0,.15); } .fade { - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -ms-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; + -webkit-transition: opacity .15s linear; + -moz-transition: opacity .15s linear; + -ms-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; opacity: 0; } .fade.in { opacity: 1; } .collapse { - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -ms-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; + -webkit-transition: height .35s ease; + -moz-transition: height .35s ease; + -ms-transition: height .35s ease; + -o-transition: height .35s ease; + transition: height .35s ease; position: relative; overflow: hidden; height: 0; @@ -1809,7 +1678,7 @@ table .span12 { font-weight: bold; line-height: 18px; color: #000000; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #ffffff01; opacity: 0.2; filter: alpha(opacity=20); } @@ -1828,41 +1697,37 @@ table .span12 { line-height: 18px; color: #333333; text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + text-shadow: 0 1px 1px rgba(255,255,255,.75); vertical-align: middle; background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(top, #ffffff, #e6e6e6); + background-image: -moz-linear-gradient(top,#ffffff,#e6e6e6 ); + background-image: -ms-linear-gradient(top,#ffffff,#e6e6e6 ); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#e6e6e6 )); + background-image: -webkit-linear-gradient(top,#ffffff,#e6e6e6 ); + background-image: -o-linear-gradient(top,#ffffff,#e6e6e6 ); + background-image: linear-gradient(top,#ffffff,#e6e6e6 ); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border: 1px solid #ccc; - border-bottom-color: #bbb; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6 ', GradientType=0); + border-color: #e6e6e6 #e6e6e6 #c0c0c0; + border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border: 1px solid #cccccc; + border-bottom-color: #bbbbbb; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); cursor: pointer; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); *margin-left: .3em; } -.btn:hover, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { +.btn:hover, .btn:active, .btn.active, .btn.disabled, .btn[disabled] { background-color: #e6e6e6; } -.btn:active, -.btn.active { - background-color: #cccccc \9; +.btn:active, .btn.active { + background-color: #cdcdcd \9; } .btn:first-child { *margin-left: 0; @@ -1872,29 +1737,27 @@ table .span12 { text-decoration: none; background-color: #e6e6e6; background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -ms-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; + -webkit-transition: background-position .1s linear; + -moz-transition: background-position .1s linear; + -ms-transition: background-position .1s linear; + -o-transition: background-position .1s linear; + transition: background-position .1s linear; } .btn:focus { - outline: thin dotted #333; + outline: thin dotted #333333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -.btn.active, -.btn:active { +.btn.active, .btn:active { background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); background-color: #e6e6e6; background-color: #d9d9d9 \9; outline: 0; } -.btn.disabled, -.btn[disabled] { +.btn.disabled, .btn[disabled] { cursor: default; background-image: none; background-color: #e6e6e6; @@ -1940,7 +1803,7 @@ table .span12 { .btn-info:hover, .btn-inverse, .btn-inverse:hover { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + text-shadow: 0 -1px 0 rgba(0,0,0,.25); color: #ffffff; } .btn-primary.active, @@ -1949,20 +1812,20 @@ table .span12 { .btn-success.active, .btn-info.active, .btn-dark.active { - color: rgba(255, 255, 255, 0.75); + color: rgba(255,255,255,.75); } .btn-primary { - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -ms-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(top, #0088cc, #0044cc); + background-color: #006ccc; + background-image: -moz-linear-gradient(top,#0088cc,#0044cc ); + background-image: -ms-linear-gradient(top,#0088cc,#0044cc ); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#0088cc),to(#0044cc )); + background-image: -webkit-linear-gradient(top,#0088cc,#0044cc ); + background-image: -o-linear-gradient(top,#0088cc,#0044cc ); + background-image: linear-gradient(top,#0088cc,#0044cc ); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc ', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-primary:hover, @@ -1972,22 +1835,21 @@ table .span12 { .btn-primary[disabled] { background-color: #0044cc; } -.btn-primary:active, -.btn-primary.active { +.btn-primary:active, .btn-primary.active { background-color: #003399 \9; } .btn-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -ms-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(top, #fbb450, #f89406); + background-color: #f9a732; + background-image: -moz-linear-gradient(top,#fbb450 ,#f89406); + background-image: -ms-linear-gradient(top,#fbb450 ,#f89406); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#fbb450 ),to(#f89406)); + background-image: -webkit-linear-gradient(top,#fbb450 ,#f89406); + background-image: -o-linear-gradient(top,#fbb450 ,#f89406); + background-image: linear-gradient(top,#fbb450 ,#f89406); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450 ', endColorstr='#f89406', GradientType=0); border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-warning:hover, @@ -1997,22 +1859,21 @@ table .span12 { .btn-warning[disabled] { background-color: #f89406; } -.btn-warning:active, -.btn-warning.active { +.btn-warning:active, .btn-warning.active { background-color: #c67605 \9; } .btn-danger { - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(top, #ee5f5b, #bd362f); + background-color: #da4e49; + background-image: -moz-linear-gradient(top,#ee5f5b,#bd362f); + background-image: -ms-linear-gradient(top,#ee5f5b,#bd362f); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f)); + background-image: -webkit-linear-gradient(top,#ee5f5b,#bd362f); + background-image: -o-linear-gradient(top,#ee5f5b,#bd362f); + background-image: linear-gradient(top,#ee5f5b,#bd362f); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0); border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-danger:hover, @@ -2022,22 +1883,21 @@ table .span12 { .btn-danger[disabled] { background-color: #bd362f; } -.btn-danger:active, -.btn-danger.active { +.btn-danger:active, .btn-danger.active { background-color: #942a25 \9; } .btn-success { - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -ms-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(top, #62c462, #51a351); + background-color: #5bb65b; + background-image: -moz-linear-gradient(top,#62c462,#51a351); + background-image: -ms-linear-gradient(top,#62c462,#51a351); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351)); + background-image: -webkit-linear-gradient(top,#62c462,#51a351); + background-image: -o-linear-gradient(top,#62c462,#51a351); + background-image: linear-gradient(top,#62c462,#51a351); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0); border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-success:hover, @@ -2047,22 +1907,21 @@ table .span12 { .btn-success[disabled] { background-color: #51a351; } -.btn-success:active, -.btn-success.active { +.btn-success:active, .btn-success.active { background-color: #408140 \9; } .btn-info { background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(top, #5bc0de, #2f96b4); + background-image: -moz-linear-gradient(top,#5bc0de,#2f96b4); + background-image: -ms-linear-gradient(top,#5bc0de,#2f96b4); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4)); + background-image: -webkit-linear-gradient(top,#5bc0de,#2f96b4); + background-image: -o-linear-gradient(top,#5bc0de,#2f96b4); + background-image: linear-gradient(top,#5bc0de,#2f96b4); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0); border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-info:hover, @@ -2072,22 +1931,21 @@ table .span12 { .btn-info[disabled] { background-color: #2f96b4; } -.btn-info:active, -.btn-info.active { +.btn-info:active, .btn-info.active { background-color: #24748c \9; } .btn-inverse { - background-color: #393939; - background-image: -moz-linear-gradient(top, #454545, #262626); - background-image: -ms-linear-gradient(top, #454545, #262626); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#454545), to(#262626)); - background-image: -webkit-linear-gradient(top, #454545, #262626); - background-image: -o-linear-gradient(top, #454545, #262626); - background-image: linear-gradient(top, #454545, #262626); + background-color: #383838; + background-image: -moz-linear-gradient(top,#454545,#262626); + background-image: -ms-linear-gradient(top,#454545,#262626); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#454545),to(#262626)); + background-image: -webkit-linear-gradient(top,#454545,#262626); + background-image: -o-linear-gradient(top,#454545,#262626); + background-image: linear-gradient(top,#454545,#262626); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#454545', endColorstr='#262626', GradientType=0); border-color: #262626 #262626 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-inverse:hover, @@ -2097,27 +1955,22 @@ table .span12 { .btn-inverse[disabled] { background-color: #262626; } -.btn-inverse:active, -.btn-inverse.active { +.btn-inverse:active, .btn-inverse.active { background-color: #0c0c0c \9; } -button.btn, -input[type="submit"].btn { +button.btn, input[type="submit"].btn { *padding-top: 2px; *padding-bottom: 2px; } -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { +button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner { padding: 0; border: 0; } -button.btn.large, -input[type="submit"].btn.large { +button.btn.large, input[type="submit"].btn.large { *padding-top: 7px; *padding-bottom: 7px; } -button.btn.small, -input[type="submit"].btn.small { +button.btn.small, input[type="submit"].btn.small { *padding-top: 3px; *padding-bottom: 3px; } @@ -2126,8 +1979,7 @@ input[type="submit"].btn.small { *zoom: 1; *margin-left: .3em; } -.btn-group:before, -.btn-group:after { +.btn-group:before, .btn-group:after { display: table; content: ""; } @@ -2147,8 +1999,6 @@ input[type="submit"].btn.small { .btn-toolbar .btn-group { display: inline-block; *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; } .btn-group .btn { @@ -2168,8 +2018,7 @@ input[type="submit"].btn.small { -moz-border-radius-bottomleft: 4px; border-bottom-left-radius: 4px; } -.btn-group .btn:last-child, -.btn-group .dropdown-toggle { +.btn-group .btn:last-child, .btn-group .dropdown-toggle { -webkit-border-top-right-radius: 4px; -moz-border-radius-topright: 4px; border-top-right-radius: 4px; @@ -2186,8 +2035,7 @@ input[type="submit"].btn.small { -moz-border-radius-bottomleft: 6px; border-bottom-left-radius: 6px; } -.btn-group .btn.large:last-child, -.btn-group .large.dropdown-toggle { +.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle { -webkit-border-top-right-radius: 6px; -moz-border-radius-topright: 6px; border-top-right-radius: 6px; @@ -2201,16 +2049,15 @@ input[type="submit"].btn.small { .btn-group .btn.active { z-index: 2; } -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { +.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group .dropdown-toggle { padding-left: 8px; padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); *padding-top: 5px; *padding-bottom: 5px; } @@ -2226,16 +2073,15 @@ input[type="submit"].btn.small { } .btn-group.open .dropdown-toggle { background-image: none; - -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); } .btn .caret { margin-top: 7px; margin-left: 0; } -.btn:hover .caret, -.open.btn-group .caret { +.btn:hover .caret, .open.btn-group .caret { opacity: 1; filter: alpha(opacity=100); } @@ -2254,15 +2100,14 @@ input[type="submit"].btn.small { .alert { padding: 8px 35px 8px 14px; margin-bottom: 18px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-shadow: 0 1px 0 rgba(255,255,255,.5); background-color: #fcf8e3; - border: 1px solid #fbeed5; + border: 1px solid #fbefd5; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } -.alert, -.alert-heading { +.alert, .alert-heading { color: #c09853; } .alert .close { @@ -2275,12 +2120,10 @@ input[type="submit"].btn.small { background-color: #dff0d8; border-color: #d6e9c6; } -.alert-success, -.alert-success .alert-heading { +.alert-success, .alert-success .alert-heading { color: #468847; } -.alert-danger, -.alert-error { +.alert-danger, .alert-error { background-color: #f2dede; border-color: #eed3d7; } @@ -2294,16 +2137,14 @@ input[type="submit"].btn.small { background-color: #d9edf7; border-color: #bce8f1; } -.alert-info, -.alert-info .alert-heading { +.alert-info, .alert-info .alert-heading { color: #3a87ad; } .alert-block { padding-top: 14px; padding-bottom: 14px; } -.alert-block > p, -.alert-block > ul { +.alert-block > p, .alert-block > ul { margin-bottom: 0; } .alert-block p + p { @@ -2328,7 +2169,7 @@ input[type="submit"].btn.small { font-weight: bold; line-height: 18px; color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-shadow: 0 1px 0 rgba(255,255,255,.5); text-transform: uppercase; } .nav li + .nav-header { @@ -2339,52 +2180,43 @@ input[type="submit"].btn.small { padding-right: 14px; margin-bottom: 0; } -.nav-list > li > a, -.nav-list .nav-header { +.nav-list > li > a, .nav-list .nav-header { margin-left: -15px; margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-shadow: 0 1px 0 rgba(255,255,255,.5); } .nav-list > li > a { padding: 3px 15px; } -.nav-list .active > a, -.nav-list .active > a:hover { +.nav-list .active > a, .nav-list .active > a:hover { color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + text-shadow: 0 -1px 0 rgba(0,0,0,.2); background-color: #0088cc; } .nav-list [class^="icon-"] { margin-right: 2px; } -.nav-tabs, -.nav-pills { +.nav-tabs, .nav-pills { *zoom: 1; } -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { +.nav-tabs:before, .nav-tabs:after, .nav-pills:before, .nav-pills:after { display: table; content: ""; } -.nav-tabs:after, -.nav-pills:after { +.nav-tabs:after, .nav-pills:after { clear: both; } -.nav-tabs > li, -.nav-pills > li { +.nav-tabs > li, .nav-pills > li { float: left; } -.nav-tabs > li > a, -.nav-pills > li > a { +.nav-tabs > li > a, .nav-pills > li > a { padding-right: 12px; padding-left: 12px; margin-right: 2px; line-height: 14px; } .nav-tabs { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #dddddd; } .nav-tabs > li { margin-bottom: -1px; @@ -2400,11 +2232,10 @@ input[type="submit"].btn.small { .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #dddddd; } -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover { +.nav-tabs > .active > a, .nav-tabs > .active > a:hover { color: #555555; background-color: #ffffff; - border: 1px solid #ddd; + border: 1px solid #dddddd; border-bottom-color: transparent; cursor: default; } @@ -2417,8 +2248,7 @@ input[type="submit"].btn.small { -moz-border-radius: 5px; border-radius: 5px; } -.nav-pills .active > a, -.nav-pills .active > a:hover { +.nav-pills .active > a, .nav-pills .active > a:hover { color: #ffffff; background-color: #0088cc; } @@ -2432,7 +2262,7 @@ input[type="submit"].btn.small { border-bottom: 0; } .nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; + border: 1px solid #dddddd; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; @@ -2448,7 +2278,7 @@ input[type="submit"].btn.small { border-radius: 0 0 4px 4px; } .nav-tabs.nav-stacked > li > a:hover { - border-color: #ddd; + border-color: #dddddd; z-index: 2; } .nav-pills.nav-stacked > li > a { @@ -2457,8 +2287,7 @@ input[type="submit"].btn.small { .nav-pills.nav-stacked > li:last-child > a { margin-bottom: 1px; } -.nav-tabs .dropdown-menu, -.nav-pills .dropdown-menu { +.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu { margin-top: 1px; border-width: 1px; } @@ -2467,13 +2296,11 @@ input[type="submit"].btn.small { -moz-border-radius: 4px; border-radius: 4px; } -.nav-tabs .dropdown-toggle .caret, -.nav-pills .dropdown-toggle .caret { +.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret { border-top-color: #0088cc; margin-top: 6px; } -.nav-tabs .dropdown-toggle:hover .caret, -.nav-pills .dropdown-toggle:hover .caret { +.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret { border-top-color: #005580; } .nav-tabs .active .dropdown-toggle .caret, @@ -2491,9 +2318,7 @@ input[type="submit"].btn.small { background-color: #999999; border-color: #999999; } -.nav .open .caret, -.nav .open.active .caret, -.nav .open a:hover .caret { +.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret { border-top-color: #ffffff; opacity: 1; filter: alpha(opacity=100); @@ -2504,8 +2329,7 @@ input[type="submit"].btn.small { .tabbable { *zoom: 1; } -.tabbable:before, -.tabbable:after { +.tabbable:before, .tabbable:after { display: table; content: ""; } @@ -2515,21 +2339,17 @@ input[type="submit"].btn.small { .tab-content { overflow: hidden; } -.tabs-below .nav-tabs, -.tabs-right .nav-tabs, -.tabs-left .nav-tabs { +.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs { border-bottom: 0; } -.tab-content > .tab-pane, -.pill-content > .pill-pane { +.tab-content > .tab-pane, .pill-content > .pill-pane { display: none; } -.tab-content > .active, -.pill-content > .active { +.tab-content > .active, .pill-content > .active { display: block; } .tabs-below .nav-tabs { - border-top: 1px solid #ddd; + border-top: 1px solid #dddddd; } .tabs-below .nav-tabs > li { margin-top: -1px; @@ -2542,18 +2362,15 @@ input[type="submit"].btn.small { } .tabs-below .nav-tabs > li > a:hover { border-bottom-color: transparent; - border-top-color: #ddd; + border-top-color: #dddddd; } -.tabs-below .nav-tabs .active > a, -.tabs-below .nav-tabs .active > a:hover { - border-color: transparent #ddd #ddd #ddd; +.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover { + border-color: transparent #dddddd #dddddd #dddddd; } -.tabs-left .nav-tabs > li, -.tabs-right .nav-tabs > li { +.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li { float: none; } -.tabs-left .nav-tabs > li > a, -.tabs-right .nav-tabs > li > a { +.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a { min-width: 74px; margin-right: 0; margin-bottom: 3px; @@ -2561,7 +2378,7 @@ input[type="submit"].btn.small { .tabs-left .nav-tabs { float: left; margin-right: 19px; - border-right: 1px solid #ddd; + border-right: 1px solid #dddddd; } .tabs-left .nav-tabs > li > a { margin-right: -1px; @@ -2572,15 +2389,14 @@ input[type="submit"].btn.small { .tabs-left .nav-tabs > li > a:hover { border-color: #eeeeee #dddddd #eeeeee #eeeeee; } -.tabs-left .nav-tabs .active > a, -.tabs-left .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; +.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover { + border-color: #dddddd transparent #dddddd #dddddd; *border-right-color: #ffffff; } .tabs-right .nav-tabs { float: right; margin-left: 19px; - border-left: 1px solid #ddd; + border-left: 1px solid #dddddd; } .tabs-right .nav-tabs > li > a { margin-left: -1px; @@ -2591,9 +2407,8 @@ input[type="submit"].btn.small { .tabs-right .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #eeeeee #dddddd; } -.tabs-right .nav-tabs .active > a, -.tabs-right .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; +.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover { + border-color: #dddddd #dddddd #dddddd transparent; *border-left-color: #ffffff; } .navbar { @@ -2604,20 +2419,20 @@ input[type="submit"].btn.small { padding-left: 20px; padding-right: 20px; background-color: #2c2c2c; - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -ms-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); - background-image: linear-gradient(top, #333333, #222222); + background-image: -moz-linear-gradient(top,#333333,#222222); + background-image: -ms-linear-gradient(top,#333333,#222222); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#333333),to(#222222)); + background-image: -webkit-linear-gradient(top,#333333,#222222); + background-image: -o-linear-gradient(top,#333333,#222222); + background-image: linear-gradient(top,#333333,#222222); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1); + -moz-box-shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1); + box-shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1); } .btn-navbar { display: none; @@ -2626,20 +2441,20 @@ input[type="submit"].btn.small { margin-left: 5px; margin-right: 5px; background-color: #2c2c2c; - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -ms-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); - background-image: linear-gradient(top, #333333, #222222); + background-image: -moz-linear-gradient(top,#333333,#222222); + background-image: -ms-linear-gradient(top,#333333,#222222); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#333333),to(#222222)); + background-image: -webkit-linear-gradient(top,#333333,#222222); + background-image: -o-linear-gradient(top,#333333,#222222); + background-image: linear-gradient(top,#333333,#222222); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: rgba(0,0,0,.1)rgba(0,0,0,.1)fadein(rgba(0,0,0,.1),15%); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); + box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); } .btn-navbar:hover, .btn-navbar:active, @@ -2648,8 +2463,7 @@ input[type="submit"].btn.small { .btn-navbar[disabled] { background-color: #222222; } -.btn-navbar:active, -.btn-navbar.active { +.btn-navbar:active, .btn-navbar.active { background-color: #080808 \9; } .btn-navbar .icon-bar { @@ -2660,9 +2474,9 @@ input[type="submit"].btn.small { -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.25); + -moz-box-shadow: 0 1px 0 rgba(0,0,0,.25); + box-shadow: 0 1px 0 rgba(0,0,0,.25); } .btn-navbar .icon-bar + .icon-bar { margin-top: 3px; @@ -2692,8 +2506,7 @@ input[type="submit"].btn.small { color: #ffffff; background-color: transparent; } -.navbar .btn, -.navbar .btn-group { +.navbar .btn, .navbar .btn-group { margin-top: 5px; } .navbar .btn-group .btn { @@ -2703,22 +2516,19 @@ input[type="submit"].btn.small { margin-bottom: 0; *zoom: 1; } -.navbar-form:before, -.navbar-form:after { +.navbar-form:before, .navbar-form:after { display: table; content: ""; } .navbar-form:after { clear: both; } -.navbar-form input, -.navbar-form select { +.navbar-form input, .navbar-form select { display: inline-block; margin-top: 5px; margin-bottom: 0; } -.navbar-form .radio, -.navbar-form .checkbox { +.navbar-form .radio, .navbar-form .checkbox { margin-top: 5px; } .navbar-form input[type="image"], @@ -2726,13 +2536,11 @@ input[type="submit"].btn.small { .navbar-form input[type="radio"] { margin-top: 3px; } -.navbar-form .input-append, -.navbar-form .input-prepend { +.navbar-form .input-append, .navbar-form .input-prepend { margin-top: 6px; white-space: nowrap; } -.navbar-form .input-append input, -.navbar-form .input-prepend input { +.navbar-form .input-append input, .navbar-form .input-prepend input { margin-top: 0; } .navbar-search { @@ -2748,13 +2556,13 @@ input[type="submit"].btn.small { font-weight: normal; line-height: 1; color: #ffffff; - color: rgba(255, 255, 255, 0.75); - background: #666; - background: rgba(255, 255, 255, 0.3); - border: 1px solid #111; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + color: rgba(255,255,255,.75); + background: #666666; + background: rgba(255,255,255,.3); + border: 1px solid #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); + -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); + box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); -webkit-transition: none; -moz-transition: none; -ms-transition: none; @@ -2770,18 +2578,17 @@ input[type="submit"].btn.small { .navbar-search .search-query:hover { color: #ffffff; background-color: #999999; - background-color: rgba(255, 255, 255, 0.5); + background-color: rgba(255,255,255,.5); } -.navbar-search .search-query:focus, -.navbar-search .search-query.focused { +.navbar-search .search-query:focus, .navbar-search .search-query.focused { padding: 5px 10px; color: #333333; text-shadow: 0 1px 0 #ffffff; background-color: #ffffff; border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -webkit-box-shadow: 0 0 3px rgba(0,0,0,.15); + -moz-box-shadow: 0 0 3px rgba(0,0,0,.15); + box-shadow: 0 0 3px rgba(0,0,0,.15); outline: 0; } .navbar-fixed-top { @@ -2818,15 +2625,14 @@ input[type="submit"].btn.small { line-height: 19px; color: #999999; text-decoration: none; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + text-shadow: 0 -1px 0 rgba(0,0,0,.25); } .navbar .nav > li > a:hover { - background-color: #NaNbbaaNaN00NaN00NaN00NaN00NaN; + background-color: transparent; color: #ffffff; text-decoration: none; } -.navbar .nav .active > a, -.navbar .nav .active > a:hover { +.navbar .nav .active > a, .navbar .nav .active > a:hover { color: #ffffff; text-decoration: none; background-color: #222222; @@ -2854,8 +2660,8 @@ input[type="submit"].btn.small { display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); + border-bottom: 7px solid #cccccc; + border-bottom-color: rgba(0,0,0,.2); position: absolute; top: -7px; left: 9px; @@ -2870,8 +2676,7 @@ input[type="submit"].btn.small { top: -6px; left: 10px; } -.navbar .nav .dropdown-toggle .caret, -.navbar .nav .open.dropdown .caret { +.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret { border-top-color: #ffffff; } .navbar .nav .active .caret { @@ -2902,15 +2707,15 @@ input[type="submit"].btn.small { padding: 7px 14px; margin: 0 0 18px; background-color: #fbfbfb; - background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5)); - background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); - background-image: linear-gradient(top, #ffffff, #f5f5f5); + background-image: -moz-linear-gradient(top,#ffffff,#f5f5f5); + background-image: -ms-linear-gradient(top,#ffffff,#f5f5f5); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#ffffff),to(#f5f5f5)); + background-image: -webkit-linear-gradient(top,#ffffff,#f5f5f5); + background-image: -o-linear-gradient(top,#ffffff,#f5f5f5); + background-image: linear-gradient(top,#ffffff,#f5f5f5); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); - border: 1px solid #ddd; + border: 1px solid #dddddd; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; @@ -2936,17 +2741,15 @@ input[type="submit"].btn.small { .pagination ul { display: inline-block; *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; margin-left: 0; margin-bottom: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05); + box-shadow: 0 1px 2px rgba(0,0,0,.05); } .pagination li { display: inline; @@ -2956,19 +2759,17 @@ input[type="submit"].btn.small { padding: 0 14px; line-height: 34px; text-decoration: none; - border: 1px solid #ddd; + border: 1px solid #dddddd; border-left-width: 0; } -.pagination a:hover, -.pagination .active a { +.pagination a:hover, .pagination .active a { background-color: #f5f5f5; } .pagination .active a { color: #999999; cursor: default; } -.pagination .disabled a, -.pagination .disabled a:hover { +.pagination .disabled a, .pagination .disabled a:hover { color: #999999; background-color: transparent; cursor: default; @@ -2997,8 +2798,7 @@ input[type="submit"].btn.small { text-align: center; *zoom: 1; } -.pager:before, -.pager:after { +.pager:before, .pager:after { display: table; content: ""; } @@ -3011,8 +2811,8 @@ input[type="submit"].btn.small { .pager a { display: inline-block; padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; + background-color: #ffffff; + border: 1px solid #dddddd; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; @@ -3051,8 +2851,7 @@ input[type="submit"].btn.small { .modal-backdrop.fade { opacity: 0; } -.modal-backdrop, -.modal-backdrop.fade.in { +.modal-backdrop, .modal-backdrop.fade.in { opacity: 0.8; filter: alpha(opacity=80); } @@ -3066,17 +2865,15 @@ input[type="submit"].btn.small { width: 560px; margin: -250px 0 0 -280px; background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - + border: 1px solid #999999; + border: 1px solid rgba(0,0,0,.3); + *border: 1px solid #999999; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3); + -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3); + box-shadow: 0 3px 7px rgba(0,0,0,0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; @@ -3094,7 +2891,7 @@ input[type="submit"].btn.small { } .modal-header { padding: 9px 15px; - border-bottom: 1px solid #eee; + border-bottom: 1px solid #eeeeee; } .modal-header .close { margin-top: 2px; @@ -3109,7 +2906,7 @@ input[type="submit"].btn.small { padding: 14px 15px 15px; margin-bottom: 0; background-color: #f5f5f5; - border-top: 1px solid #ddd; + border-top: 1px solid #dddddd; -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; @@ -3118,8 +2915,7 @@ input[type="submit"].btn.small { box-shadow: inset 0 1px 0 #ffffff; *zoom: 1; } -.modal-footer:before, -.modal-footer:after { +.modal-footer:before, .modal-footer:after { display: table; content: ""; } @@ -3161,32 +2957,32 @@ input[type="submit"].btn.small { bottom: 0; left: 50%; margin-left: -5px; - border-left: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; - border-right: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; + border-left: 5px solid transparent; + border-right: 5px solid transparent; border-top: 5px solid #000000; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; - border-top: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; - border-bottom: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; border-left: 5px solid #000000; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; - border-left: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; - border-right: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; + border-left: 5px solid transparent; + border-right: 5px solid transparent; border-bottom: 5px solid #000000; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; - border-top: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; - border-bottom: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; border-right: 5px solid #000000; } .tooltip-inner { @@ -3229,32 +3025,32 @@ input[type="submit"].btn.small { bottom: 0; left: 50%; margin-left: -5px; - border-left: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; - border-right: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; + border-left: 5px solid transparent; + border-right: 5px solid transparent; border-top: 5px solid #000000; } .popover.right .arrow { top: 50%; left: 0; margin-top: -5px; - border-top: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; - border-bottom: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; border-right: 5px solid #000000; } .popover.bottom .arrow { top: 0; left: 50%; margin-left: -5px; - border-left: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; - border-right: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; + border-left: 5px solid transparent; + border-right: 5px solid transparent; border-bottom: 5px solid #000000; } .popover.left .arrow { top: 50%; right: 0; margin-top: -5px; - border-top: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; - border-bottom: 5px solid #NaNbbaaNaN00NaN00NaN00NaN00NaN; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; border-left: 5px solid #000000; } .popover .arrow { @@ -3267,19 +3063,19 @@ input[type="submit"].btn.small { width: 280px; overflow: hidden; background: #000000; - background: rgba(0, 0, 0, 0.8); + background: rgba(0,0,0,.8); -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3); + -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3); + box-shadow: 0 3px 7px rgba(0,0,0,0.3); } .popover-title { padding: 9px 15px; line-height: 1; background-color: #f5f5f5; - border-bottom: 1px solid #eee; + border-bottom: 1px solid #eeeeee; -webkit-border-radius: 3px 3px 0 0; -moz-border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0; @@ -3294,9 +3090,7 @@ input[type="submit"].btn.small { -moz-background-clip: padding-box; background-clip: padding-box; } -.popover-content p, -.popover-content ul, -.popover-content ol { +.popover-content p, .popover-content ul, .popover-content ol { margin-bottom: 0; } .thumbnails { @@ -3304,8 +3098,7 @@ input[type="submit"].btn.small { list-style: none; *zoom: 1; } -.thumbnails:before, -.thumbnails:after { +.thumbnails:before, .thumbnails:after { display: table; content: ""; } @@ -3320,19 +3113,19 @@ input[type="submit"].btn.small { display: block; padding: 4px; line-height: 1; - border: 1px solid #ddd; + border: 1px solid #dddddd; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.075); + -moz-box-shadow: 0 1px 1px rgba(0,0,0,.075); + box-shadow: 0 1px 1px rgba(0,0,0,.075); } a.thumbnail:hover { border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -webkit-box-shadow: 0 1px 4px rgba(0,105,214,.25); + -moz-box-shadow: 0 1px 4px rgba(0,105,214,.25); + box-shadow: 0 1px 4px rgba(0,105,214,.25); } .thumbnail > img { display: block; @@ -3345,10 +3138,10 @@ a.thumbnail:hover { } .label { padding: 2px 4px 3px; - font-size: 11.049999999999999px; + font-size: 11.05px; font-weight: bold; color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + text-shadow: 0 -1px 0 rgba(0,0,0,.25); background-color: #999999; -webkit-border-radius: 3px; -moz-border-radius: 3px; @@ -3410,18 +3203,18 @@ a.thumbnail:hover { overflow: hidden; height: 18px; margin-bottom: 18px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(top, #f5f5f5, #f9f9f9); + background-color: #f6f6f6; + background-image: -moz-linear-gradient(top,#f5f5f5,#f9f9f9); + background-image: -ms-linear-gradient(top,#f5f5f5,#f9f9f9); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9)); + background-image: -webkit-linear-gradient(top,#f5f5f5,#f9f9f9); + background-image: -o-linear-gradient(top,#f5f5f5,#f9f9f9); + background-image: linear-gradient(top,#f5f5f5,#f9f9f9); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); + -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); + box-shadow: inset 0 1px 2px rgba(0,0,0,.1); -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; @@ -3432,38 +3225,36 @@ a.thumbnail:hover { color: #ffffff; font-size: 12px; text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -ms-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(top, #149bdf, #0480be); + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + background-color: #0d90d1; + background-image: -moz-linear-gradient(top,#149bdf,#0480be); + background-image: -ms-linear-gradient(top,#149bdf,#0480be); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be)); + background-image: -webkit-linear-gradient(top,#149bdf,#0480be); + background-image: -o-linear-gradient(top,#149bdf,#0480be); + background-image: linear-gradient(top,#149bdf,#0480be); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 -1px 0 rgba(0,0,0,.15); -webkit-box-sizing: border-box; -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - -o-box-sizing: border-box; box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -ms-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; + -webkit-transition: width .6s ease; + -moz-transition: width .6s ease; + -ms-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; } .progress-striped .bar { background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, #NaNbbaaNaN00NaN00NaN00NaN00NaN), to(#NaNbbaaNaN00NaN00NaN00NaN00NaN)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); + background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent)); + background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); -webkit-background-size: 40px 40px; -moz-background-size: 40px 40px; -o-background-size: 40px 40px; @@ -3475,64 +3266,64 @@ a.thumbnail:hover { animation: progress-bar-stripes 2s linear infinite; } .progress-danger .bar { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(top, #ee5f5b, #c43c35); + background-color: #dd514b; + background-image: -moz-linear-gradient(top,#ee5f5b,#c43c35); + background-image: -ms-linear-gradient(top,#ee5f5b,#c43c35); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35)); + background-image: -webkit-linear-gradient(top,#ee5f5b,#c43c35); + background-image: -o-linear-gradient(top,#ee5f5b,#c43c35); + background-image: linear-gradient(top,#ee5f5b,#c43c35); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); } .progress-danger.progress-striped .bar { background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, #NaNbbaaNaN00NaN00NaN00NaN00NaN), to(#NaNbbaaNaN00NaN00NaN00NaN00NaN)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); + background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent)); + background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); } .progress-success .bar { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -ms-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(top, #62c462, #57a957); + background-color: #5db95d; + background-image: -moz-linear-gradient(top,#62c462,#57a957); + background-image: -ms-linear-gradient(top,#62c462,#57a957); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957)); + background-image: -webkit-linear-gradient(top,#62c462,#57a957); + background-image: -o-linear-gradient(top,#62c462,#57a957); + background-image: linear-gradient(top,#62c462,#57a957); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); } .progress-success.progress-striped .bar { background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, #NaNbbaaNaN00NaN00NaN00NaN00NaN), to(#NaNbbaaNaN00NaN00NaN00NaN00NaN)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); + background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent)); + background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); } .progress-info .bar { background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(top, #5bc0de, #339bb9); + background-image: -moz-linear-gradient(top,#5bc0de,#339bb9); + background-image: -ms-linear-gradient(top,#5bc0de,#339bb9); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9)); + background-image: -webkit-linear-gradient(top,#5bc0de,#339bb9); + background-image: -o-linear-gradient(top,#5bc0de,#339bb9); + background-image: linear-gradient(top,#5bc0de,#339bb9); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); } .progress-info.progress-striped .bar { background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, #NaNbbaaNaN00NaN00NaN00NaN00NaN), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, #NaNbbaaNaN00NaN00NaN00NaN00NaN), to(#NaNbbaaNaN00NaN00NaN00NaN00NaN)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 25%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN 75%, #NaNbbaaNaN00NaN00NaN00NaN00NaN); + background-image: -webkit-gradient(linear,0 100%,100% 0,color-stop(.25,rgba(255,255,255,.15)),color-stop(.25,transparent),color-stop(.5,transparent),color-stop(.5,rgba(255,255,255,.15)),color-stop(.75,rgba(255,255,255,.15)),color-stop(.75,transparent),to(transparent)); + background-image: -webkit-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -moz-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -ms-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: -o-linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); + background-image: linear-gradient(-45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent); } .accordion { margin-bottom: 18px; @@ -3568,26 +3359,23 @@ a.thumbnail:hover { .carousel .item { display: none; position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -ms-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; + -webkit-transition: .6s ease-in-out left; + -moz-transition: .6s ease-in-out left; + -ms-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; } .carousel .item > img { display: block; line-height: 1; } -.carousel .active, -.carousel .next, -.carousel .prev { +.carousel .active, .carousel .next, .carousel .prev { display: block; } .carousel .active { left: 0; } -.carousel .next, -.carousel .prev { +.carousel .next, .carousel .prev { position: absolute; top: 0; width: 100%; @@ -3598,8 +3386,7 @@ a.thumbnail:hover { .carousel .prev { left: -100%; } -.carousel .next.left, -.carousel .prev.right { +.carousel .next.left, .carousel .prev.right { left: 0; } .carousel .active.left { @@ -3645,10 +3432,9 @@ a.thumbnail:hover { bottom: 0; padding: 10px 15px 5px; background: #333333; - background: rgba(0, 0, 0, 0.75); + background: rgba(0,0,0,.75); } -.carousel-caption h4, -.carousel-caption p { +.carousel-caption h4, .carousel-caption p { color: #ffffff; } .hero-unit { @@ -3685,14 +3471,6 @@ a.thumbnail:hover { .invisible { visibility: hidden; } -/*! - * Datepicker for Bootstrap - * - * Copyright 2012 Stefan Petre - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - */ .datepicker { top: 0; left: 0; @@ -3701,18 +3479,14 @@ a.thumbnail:hover { -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - /*.dow { - border-top: 1px solid #ddd !important; - }*/ - } .datepicker:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); + border-bottom: 7px solid #cccccc; + border-bottom-color: rgba(0,0,0,0.2); position: absolute; top: -7px; left: 6px; @@ -3734,8 +3508,7 @@ a.thumbnail:hover { width: 100%; margin: 0; } -.datepicker td, -.datepicker th { +.datepicker td, .datepicker th { text-align: center; width: 20px; height: 20px; @@ -3750,29 +3523,25 @@ a.thumbnail:hover { .datepicker td.day.disabled { color: #eeeeee; } -.datepicker td.old, -.datepicker td.new { +.datepicker td.old, .datepicker td.new { color: #999999; } -.datepicker td.active, -.datepicker td.active:hover { +.datepicker td.active, .datepicker td.active:hover { color: #ffffff; background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-image: -moz-linear-gradient(top,#0088cc,#0044cc); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#0088cc),to(#0044cc)); + background-image: -webkit-linear-gradient(top,#0088cc,#0044cc); + background-image: -o-linear-gradient(top,#0088cc,#0044cc); + background-image: linear-gradient(to bottom,#0088cc,#0044cc); background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: rgba(0,0,0,0.1)rgba(0,0,0,0.1)rgba(0,0,0,0.25); *background-color: #0044cc; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:dximagetransform.microsoft.gradient(enabled=false); - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0,0,0,0.25); } .datepicker td.active:hover, .datepicker td.active:hover:hover, @@ -3814,21 +3583,19 @@ a.thumbnail:hover { .datepicker td span.active { color: #ffffff; background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-image: -moz-linear-gradient(top,#0088cc,#0044cc); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#0088cc),to(#0044cc)); + background-image: -webkit-linear-gradient(top,#0088cc,#0044cc); + background-image: -o-linear-gradient(top,#0088cc,#0044cc); + background-image: linear-gradient(to bottom,#0088cc,#0044cc); background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: rgba(0,0,0,0.1)rgba(0,0,0,0.1)rgba(0,0,0,0.25); *background-color: #0044cc; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:dximagetransform.microsoft.gradient(enabled=false); - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0,0,0,0.25); } .datepicker td span.active:hover, .datepicker td span.active:focus, @@ -3840,8 +3607,7 @@ a.thumbnail:hover { background-color: #0044cc; *background-color: #003bb3; } -.datepicker td span.active:active, -.datepicker td span.active.active { +.datepicker td span.active:active, .datepicker td span.active.active { background-color: #003399 \9; } .datepicker td span.old { @@ -3850,8 +3616,7 @@ a.thumbnail:hover { .datepicker th.switch { width: 145px; } -.datepicker th.next, -.datepicker th.prev { +.datepicker th.next, .datepicker th.prev { font-size: 21px; } .datepicker thead tr:first-child th { @@ -3860,14 +3625,12 @@ a.thumbnail:hover { .datepicker thead tr:first-child th:hover { background: #eeeeee; } -.input-append.date .add-on i, -.input-prepend.date .add-on i { +.input-append.date .add-on i, .input-prepend.date .add-on i { display: block; cursor: pointer; width: 16px; height: 16px; } -/* new clearfix */ .clearfix:after { visibility: hidden; display: block; @@ -3879,15 +3642,13 @@ a.thumbnail:hover { * html .clearfix { zoom: 1; } -/* IE6 */ -*:first-child + html .clearfix { +* :first-child + html .clearfix { zoom: 1; } -/* IE7 */ @font-face { font-family: 'anivers'; src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot'); - src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?iefix') format('eot'), url('/static/dashboard/fonts/Anivers_Regular-webfont.woff') format('woff'), url('/static/dashboard/fonts/Anivers_Regular-webfont.ttf') format('truetype'), url('/static/dashboard/fonts/Anivers_Regular-webfont.svg#webfont3JLVF59W') format('svg'); + src: url('/static/dashboard/fonts/Anivers_Regular-webfont.eot?iefix')format('eot'), url('/static/dashboard/fonts/Anivers_Regular-webfont.woff')format('woff'), url('/static/dashboard/fonts/Anivers_Regular-webfont.ttf')format('truetype'), url('/static/dashboard/fonts/Anivers_Regular-webfont.svg#webfont3JLVF59W') format('svg'); font-weight: normal; font-style: normal; } @@ -3938,7 +3699,7 @@ dt { width: 130px; } #user_info { - color: #888; + color: #888888; margin: auto 0; } #user_info > a { @@ -3957,10 +3718,9 @@ h2 { font-weight: normal; } body { - background-color: #fff; + background-color: #ffffff; min-width: 890px; } -/* Login Splash Page */ #splash { background: #fafafa; } @@ -3977,9 +3737,9 @@ body { -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3); + -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3); + box-shadow: 0 3px 7px rgba(0,0,0,0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; @@ -4000,7 +3760,7 @@ body { margin-top: 190px; } .nav li a { - color: #8EACB7; + color: #8eacb7; text-shadow: none; } .container-fluid { @@ -4014,7 +3774,7 @@ body { } .sidebar h4 { margin-left: 14px; - color: #999; + color: #999999; } .sidebar .nav-tabs { margin-top: -34px; @@ -4039,7 +3799,6 @@ h1.brand a { margin-top: 15px; margin-bottom: 25px; } -/* Tenant Dropdown */ a.current_item { width: 163px; float: left; @@ -4047,8 +3806,7 @@ a.current_item { a.current_item:hover { text-decoration: none; } -a.current_item:hover h3, -a.current_item:hover h4 { +a.current_item:hover h3, a.current_item:hover h4 { color: #39738c; } .sidebar .switcher_bar { @@ -4164,43 +3922,40 @@ a.current_item:hover h4 { border: none; } .table-bordered tr.table_caption + tr th { - border-top: 1px solid #ddd; + border-top: 1px solid #dddddd; } .table-bordered tr.table_caption + tr th:first-child, .table-bordered tr.table_caption + tr th.hide + th { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; - border-left: 1px solid #ddd; + border-left: 1px solid #dddddd; } .table-bordered tr.table_caption + tr th:last-child { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; - border-right: 1px solid #ddd; + border-right: 1px solid #dddddd; } -.table-bordered tbody tr td:first-child, -.table-bordered tfoot tr td:first-child { - border-left: 1px solid #ddd; +.table-bordered tbody tr td:first-child, .table-bordered tfoot tr td:first-child { + border-left: 1px solid #dddddd; } -.table-bordered tbody tr td:last-child, -.table-bordered tfoot tr td:last-child { - border-right: 1px solid #ddd; +.table-bordered tbody tr td:last-child, .table-bordered tfoot tr td:last-child { + border-right: 1px solid #dddddd; } .table-bordered tfoot tr td:first-child { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #dddddd; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } .table-bordered tfoot tr td:last-child { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #dddddd; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.table_title h3, -.table_header h3 { +.table_title h3, .table_header h3 { font-family: anivers; font-weight: normal; font-size: 24px; @@ -4222,12 +3977,10 @@ a.current_item:hover h4 { background-color: transparent; cursor: default; } -.table th.headerSortUp:hover, -.table th.headerSortDown:hover { +.table th.headerSortUp:hover, .table th.headerSortDown:hover { background-color: #dfdfdf; } -.table th.headerSortUp, -.table th.headerSortDown { +.table th.headerSortUp, .table th.headerSortDown { background-color: #dfdfdf; background-repeat: no-repeat; background-position: 98% center; @@ -4238,8 +3991,7 @@ a.current_item:hover h4 { .table th.headerSortUp { background-image: url('/static/dashboard/img/up_arrow.png'); } -.table tr.summation td:first-child, -.table tr.summation td:last-child { +.table tr.summation td:first-child, .table tr.summation td:last-child { border-radius: 0; border-bottom: 0 none; } @@ -4258,17 +4010,17 @@ small { margin: 10px 0 20px 0; } .main_nav a { - color: #999; + color: #999999; width: 185px; padding: 10px; display: block; margin-left: 20px; } .main_nav a.active { - background: #fff; + background: #ffffff; border: 2px solid #d8d8d8; border-right: 0; - border-bottom-color: #ccc; + border-bottom-color: #cccccc; } table form { margin-bottom: 0; @@ -4282,9 +4034,9 @@ table form { width: 300px; } .messages .alert-block { - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3); + -moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3); + box-shadow: 0 3px 7px rgba(0,0,0,0.3); } .messages .alert-block.alert-error { border: 1px solid #9d261d; @@ -4296,9 +4048,7 @@ table form { margin-top: -23px; margin-right: -23px; } -.modal > form, -.login > form, -.alert-actions > form { +.modal > form, .login > form, .alert-actions > form { margin-bottom: 0; } .alert-block p { @@ -4333,8 +4083,8 @@ table form { text-align: center; } .table tfoot tr td { - border-top: 1px solid #DDD; - background-color: #F1F1F1; + border-top: 1px solid #dddddd; + background-color: #f1f1f1; font-size: 11px; line-height: 14px; } @@ -4342,8 +4092,7 @@ table form { float: right; min-width: 400px; } -.table_actions .table_search, -.table_actions .table_filter { +.table_actions .table_search, .table_actions .table_filter { display: inline-block; } .table_search input { @@ -4351,21 +4100,18 @@ table form { display: inline-block; margin-bottom: 0; } -.table_actions a, -.table_actions button { +.table_actions a, .table_actions button { float: right; margin-left: 10px; } .table_actions button.filter { margin-left: 0; } -.table_actions a.btn-create, -.table_actions a.btn-launch { +.table_actions a.btn-create, .table_actions a.btn-launch { padding-left: 23px; position: relative; } -.table_actions a.btn-create:before, -.table_actions a.btn-launch:before { +.table_actions a.btn-create:before, .table_actions a.btn-launch:before { display: inline-block; content: ""; width: 18px; @@ -4418,13 +4164,11 @@ table form { top: 0px; left: 0px; } -.table_actions button.btn-delete, -.table_actions button.btn-terminate { +.table_actions button.btn-delete, .table_actions button.btn-terminate { padding-left: 23px; position: relative; } -.table_actions button.btn-delete:before, -.table_actions button.btn-terminate:before { +.table_actions button.btn-delete:before, .table_actions button.btn-terminate:before { display: inline-block; content: ""; width: 18px; @@ -4462,11 +4206,6 @@ table form { .hidden { display: none; } -/* - * Bootstrap styles table backgrounds using nth-child(2n+1), which is - * oblivious to hidden elements. The styles below allow us to override - * the bootstrap style when neccessary by setting the odd/even classes. - */ .table-striped.datatable tbody tr.odd td { background-color: #f9f9f9; } @@ -4478,10 +4217,10 @@ table form { .table-striped.datatable tbody tr:hover th { background-color: #f5f5f5; } -.table-striped tbody tr.status_unknown:nth-child(odd) td { +.table-striped tbody tr.status_unknown:nth-child(odd)td { background-color: #ffffb5; } -.table-striped tbody tr.status_unknown:nth-child(even) td { +.table-striped tbody tr.status_unknown:nth-child(even)td { background-color: #ffffc6; } .nowrap-col { @@ -4505,24 +4244,20 @@ table form { float: left; line-height: 18px; } -#external_links, -#external_links li { +#external_links, #external_links li { float: left; } #external_links li { margin: 0 0 0 15px; } -/* Forms */ form label { text-align: left; - color: #555; + color: #555555; font-weight: bold; } .modal { width: 700px; max-height: none; - /* Prevents large modals from scrolling unnecessarily */ - top: 80px; margin-top: 0; position: absolute; @@ -4539,23 +4274,27 @@ form label { bottom: 0; width: 150px; } +.datepicker { + margin-top: 10px; +} +.datepicker input { + width: 65px; + margin-right: 10px; +} +.datepicker .btn { + margin-right: 10px; +} form.horizontal .form-field { float: left; } form.horizontal.split_half .form-field { width: 334px; - /* Fits 2 fields to a row */ - } form.horizontal.split_quarter .form-field { width: 167px; - /* Fits 4 fields to a row */ - } form.horizontal.split_five .form-field { width: 133px; - /* Fits 5 fields to a row */ - } form.horizontal fieldset { width: 100%; @@ -4573,8 +4312,8 @@ form.horizontal fieldset { .static_page { float: left; width: 700px; - background-color: #FFF; - border: 1px solid #DDD; + background-color: #ffffff; + border: 1px solid #dddddd; } .static_page > form { margin-bottom: 0; @@ -4603,7 +4342,7 @@ form.horizontal fieldset { vertical-align: top; width: 340px; padding-left: 10px; - border-left: 1px solid #DDD; + border-left: 1px solid #dddddd; } .workflow fieldset > table { margin-bottom: 0; @@ -4622,8 +4361,7 @@ form.horizontal fieldset { .modal-body fieldset ul { width: 90%; } -.modal-body fieldset .form-field input, -.modal-body fieldset .form-field textarea { +.modal-body fieldset .form-field input, .modal-body fieldset .form-field textarea { width: 298px; } .modal-body fieldset .form-field select { @@ -4644,7 +4382,7 @@ form.horizontal fieldset { margin-top: 0; margin-right: 5px; font-size: 12px; - color: #666; + color: #666666; font-weight: normal; filter: alpha(opacity=100); -khtml-opacity: 1; @@ -4652,7 +4390,7 @@ form.horizontal fieldset { opacity: 1; } .modal-footer a.close:hover { - color: #333; + color: #333333; text-decoration: underline; } .modal-body .help-block { @@ -4679,22 +4417,18 @@ form.horizontal fieldset { #images #actions { width: 100px; } -/*New List Patches*/ .details-modal .modal-body { padding-bottom: 20px; } .form-inline { display: inline; } -.form-inline input, -.form-inline button, -.form-inline a.btn { +.form-inline input, .form-inline button, .form-inline a.btn { margin-left: 5px; } td.select { width: 10px; } -/* Actions dropdown */ td.actions_column { white-space: nowrap; padding: 10px; @@ -4725,9 +4459,10 @@ td.actions_column .row_actions .hide { td.actions_column .btn-action-required { font-weight: bold; } -/* Makes size consistent across browsers when mixing "btn-group" and "small" */ -.btn.hide, -.btn-group .hide { +.tab-content { + overflow: visible; +} +.btn.hide, .btn-group .hide { display: none; } .btn-group .dropdown-toggle:focus { @@ -4735,8 +4470,6 @@ td.actions_column .btn-action-required { } .dropdown-menu button { line-height: 18px; - /* Matches rule for ".dropdown-menu a" in bootstrap */ - width: 100%; } .btn-group .dropdown-menu .btn { @@ -4749,26 +4482,23 @@ td.actions_column .btn-action-required { .dropdown-menu .btn.btn-info, .dropdown-menu .btn.btn-info:hover { text-shadow: none; - /* remove default bootstrap shadowing from button text. */ - } .dropdown-menu li:hover { background: none; } .dropdown-menu li.divider:hover { - background-color: #E5E5E5; + background-color: #e5e5e5; } td.actions_column .dropdown-menu a:hover, td.actions_column .dropdown-menu button:hover { - background-color: #CDCDCD; + background-color: #cdcdcd; } .dropdown-menu .btn.btn-danger { - color: #C43C35; + color: #c43c35; } .dropdown-menu .btn.btn-danger:hover { background-color: #f6e0df; } -/* Overrides for single-action rows (no dropdown) */ tr td.actions_column ul.row_actions.single, tr:hover td.actions_column ul.row_actions.single, td.actions_column ul.row_actions.single, @@ -4791,12 +4521,10 @@ td.actions_column ul.row_actions.single input:hover, td.actions_column ul.row_actions.single button:hover { color: black; } -th.multi_select_column, -td.multi_select_column { +th.multi_select_column, td.multi_select_column { width: 25px; } -th.multi_select_column, -td.multi_select_column { +th.multi_select_column, td.multi_select_column { text-align: center; } .table-fixed { @@ -4834,7 +4562,7 @@ tr.terminated { border-bottom: none; } #instance_tabs li.active a { - background: #fff; + background: #ffffff; padding-bottom: 8px; margin-bottom: -5px; } @@ -4842,7 +4570,7 @@ tr.terminated { margin-bottom: 0; } #main_content .tab-content { - border: 1px solid #ddd; + border: 1px solid #dddddd; border-top: 0 none; padding: 10px; } @@ -4858,13 +4586,12 @@ tr.terminated { .tab_wrapper { padding-top: 50px; } -/* Fix tooltip z-index to show above modals. Bootstrap bug 582*/ .tooltip { z-index: 12000; } .volume_boot_disclosure { font-weight: bold; - color: #555; + color: #555555; cursor: pointer; background-image: url('/static/dashboard/img/right_droparrow.png'); background-repeat: no-repeat; @@ -4873,7 +4600,7 @@ tr.terminated { .volume_boot_disclosure.on { width: 334px; margin-bottom: 10px; - border-bottom: solid 1px #E1E1E1; + border-bottom: solid 1px #e1e1e1; background-image: url('/static/dashboard/img/drop_arrow.png'); } form div.clearfix.error { @@ -4883,12 +4610,18 @@ form div.clearfix.error { cursor: pointer; } .nav-tabs li.error a { - color: #B94A48; + color: #b94a48; } .nav-tabs li.error a:after { content: "*"; } -/* Region selector in header */ +.nav-tabs li.required a:after, form .form-field.required > label:after { + content: "*"; + font-weight: bold; + line-height: 0; + padding-left: 4px; + color: #3290c0; +} #region_selector { position: absolute; z-index: 9999; @@ -4910,7 +4643,7 @@ form div.clearfix.error { #region_selector li a { padding: 3px 3px 3px 5px; display: none; - background: #E1E1E1; + background: #e1e1e1; margin-top: -10px; } #region_selector li:first-child p { @@ -4923,7 +4656,7 @@ iframe { border: none; } .item_detail ul li label { - color: #000; + color: #000000; font-weight: bold; display: block; margin-top: 5px; @@ -4931,19 +4664,18 @@ iframe { .progress_bar { height: 100%; width: 100%; - border: 1px solid #CCC; - background-color: #CCC; + border: 1px solid #cccccc; + background-color: #cccccc; } -.progress_bar_fill, -.progress_bar_selected { +.progress_bar_fill, .progress_bar_selected { height: 100%; float: left; } .progress_bar_fill { - background-color: #666; + background-color: #666666; } .progress_bar_selected { - background-color: #4790AE; + background-color: #4790ae; width: 0; } .progress_bar_over { @@ -4961,12 +4693,12 @@ iframe { margin-bottom: 8px; } .quota_title { - color: #999; + color: #999999; padding-bottom: 0; margin-bottom: 8px; } .quota_title strong { - color: #000; + color: #000000; } .quota_title strong span { font-weight: normal; @@ -4980,7 +4712,7 @@ iframe { margin: -8px 0 8px; } div .flavor_table { - border: 1px solid #AAA; + border: 1px solid #aaaaaa; width: 100%; margin-bottom: 14px; } @@ -5005,8 +4737,7 @@ div .flavor_table { float: left; margin-right: 50px; } -.error .help-inline, -.dynamic-error { +.error .help-inline, .dynamic-error { background: #efdfdf; border: 1px solid #ead5d8; padding: 10px; @@ -5022,36 +4753,36 @@ label.log-length { } .progress-success.bar { background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -ms-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(top, #62c462, #57a957); + background-image: -moz-linear-gradient(top,#62c462,#57a957); + background-image: -ms-linear-gradient(top,#62c462,#57a957); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957)); + background-image: -webkit-linear-gradient(top,#62c462,#57a957); + background-image: -o-linear-gradient(top,#62c462,#57a957); + background-image: linear-gradient(top,#62c462,#57a957); background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); } .progress_bar_fill.progress-warning.bar { background-color: #898989; - background-image: -moz-linear-gradient(top, #999999, #333333); - background-image: -ms-linear-gradient(top, #999999, #333333); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#999999), to(#333333)); - background-image: -webkit-linear-gradient(top, #999999, #333333); - background-image: -o-linear-gradient(top, #999999, #333333); - background-image: linear-gradient(top, #999999, #333333); + background-image: -moz-linear-gradient(top,#999999,#333333); + background-image: -ms-linear-gradient(top,#999999,#333333); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#999999),to(#333333)); + background-image: -webkit-linear-gradient(top,#999999,#333333); + background-image: -o-linear-gradient(top,#999999,#333333); + background-image: linear-gradient(top,#999999,#333333); background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#999999', endColorstr='#333333', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#999999', endColorstr='#333333', GradientType=0); } .progress_bar_over.bar { background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(top, #ee5f5b, #c43c35); + background-image: -moz-linear-gradient(top,#ee5f5b,#c43c35); + background-image: -ms-linear-gradient(top,#ee5f5b,#c43c35); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35)); + background-image: -webkit-linear-gradient(top,#ee5f5b,#c43c35); + background-image: -o-linear-gradient(top,#ee5f5b,#c43c35); + background-image: linear-gradient(top,#ee5f5b,#c43c35); background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); } .split_five div.control-group input[type="text"], .split_five div.control-group select { @@ -5065,8 +4796,7 @@ label.log-length { .warning .warning-text { text-align: center; } -.warning .warning-text h3, -.warning .warning-text a { +.warning .warning-text h3, .warning .warning-text a { display: inline-block; } .warning .warning-text h3 { @@ -5080,107 +4810,93 @@ label.log-length { .no_split { margin-top: -60px; } -/* Project Membership UI */ -.project_membership { +.membership { min-height: 200px; - /* Buttons */ - - /* Header */ - - /* 'Fake table' body */ - - /* User lists */ - - /* List filtering */ - - /* Role dropdown menus */ - } -.project_membership .btn-group { +.membership .btn-group { margin-left: 0px; padding: 2px 10px 0 0; margin-bottom: 0px; - border: 1px solid #DDD; + border: 1px solid #dddddd; border-bottom: none; } -.project_membership .btn-group .active { +.membership .btn-group .active { float: right; } -.project_membership a.btn-primary:hover { - background-color: #04C; +.membership a.btn-primary:hover { + background-color: #0044cc; } -.project_membership .help_text { +.membership .help_text { margin-left: 15px; margin-bottom: 15px; } -.project_membership .users_title { - color: #555; +.membership .members_title { + color: #555555; font-weight: bold; padding-left: 10px; float: left; } -.project_membership input { +.membership input { background: url('/static/dashboard/img/search.png') no-repeat 105px 5px whiteSmoke; } -.project_membership .fake_table_header { - background-color: #F1F1F1; +.membership .fake_table_header { + background-color: #f1f1f1; width: 306px; height: 38px; padding-top: 15px; - border: 1px solid #DDD; + border: 1px solid #dddddd; border-bottom: none; } -.project_membership .fake_table { +.membership .fake_table { margin-left: 5px; width: 315px; } -.project_membership .fake_table ul.no_results { +.membership .fake_table ul.no_results { width: 298px; } -.project_membership .fake_table ul.btn-group:hover { - background-color: #DDD; +.membership .fake_table ul.btn-group:hover { + background-color: #dddddd; } -.project_membership .left .fake_table_header { +.membership .left .fake_table_header { width: 318px; } -.project_membership .right .fake_table_header { +.membership .right .fake_table_header { width: 318px; margin-left: -15px; } -.project_membership .right .fake_table ul.no_results { +.membership .right .fake_table ul.no_results { margin-left: -20px; } -.project_membership .member { +.membership .member { padding: 10px; text-align: left; } -.project_membership .project_members { +.membership .members { margin-left: -20px; } -.project_membership .project_members ul.btn-group, -.project_membership .available_users ul.btn-group { +.membership .members ul.btn-group, .membership .available_members ul.btn-group { width: 308px; } -.project_membership .dark_stripe { - background-color: #F9F9F9; +.membership .dark_stripe { + background-color: #f9f9f9; } -.project_membership .light_stripe { +.membership .light_stripe { background-color: white; } -.project_membership .last_stripe { - border-bottom: 1px solid #DDD; +.membership .last_stripe { + border-bottom: 1px solid #dddddd; } -.project_membership .filter { +.membership .filter { width: 120px; margin: -5px 13px 15px 0px; float: right; } -.project_membership .no_results { - border: 1px solid #DDD; +.membership .no_results { + border: 1px solid #dddddd; padding: 10px; opacity: 0.5; } -.project_membership .role_dropdown li { +.membership .role_dropdown li { cursor: pointer; background: none; float: none; @@ -5195,40 +4911,37 @@ label.log-length { box-shadow: none; z-index: 99999; } -.project_membership .role_dropdown li i { +.membership .role_dropdown li i { opacity: 0; } -.project_membership .role_dropdown li:hover { - background-color: #CDCDCD; +.membership .role_dropdown li:hover { + background-color: #cdcdcd; } -.project_membership .role_dropdown li.selected i { +.membership .role_dropdown li.selected i { opacity: 1; } -.project_membership .dropdown-menu.role_dropdown { +.membership .dropdown-menu.role_dropdown { right: 0; left: auto; } -.project_membership .nav .role_options { +.membership .nav .role_options { float: right; padding-right: 5px; } -/* Inline user creation */ -.add_user_btn { +.add_member_btn { display: inline; } -#add_user { +#add_member { clear: both; } -.add_user { +.add_member { float: right; margin-top: 10px; margin-right: 15px; } -/* Fixes overflow on dropdowns in modal */ .dropdown_fix { overflow: visible; } -/* Replaces CPU hungry spin.js with animated gif */ .loading_gif { width: 35px; height: 13px; @@ -5243,7 +4956,6 @@ label.log-length { padding-right: 5px; float: left; } -/* ResourceBrowser style */ #browser_wrapper { width: 100%; min-width: 1000px; @@ -5257,7 +4969,7 @@ label.log-length { clear: both; padding: 8px; border-top: 1px solid #dddddd; - background-color: #F1F1F1; + background-color: #f1f1f1; font-size: 11px; line-height: 14px; } @@ -5267,12 +4979,10 @@ label.log-length { #browser_wrapper .tfoot span.navigation_table_count { width: 30%; } -#browser_wrapper form, -#browser_wrapper table { +#browser_wrapper form, #browser_wrapper table { margin-bottom: 0; } -#browser_wrapper .navigation_wrapper, -#browser_wrapper .content_wrapper { +#browser_wrapper .navigation_wrapper, #browser_wrapper .content_wrapper { position: relative; float: left; } @@ -5293,7 +5003,7 @@ label.log-length { max-width: 200px; } #browser_wrapper div.navigation_wrapper tr.current_selected td { - background-color: #E9F5FA; + background-color: #e9f5fa; } #browser_wrapper div.navigation_wrapper tfoot td { border-right: 0 none; @@ -5312,12 +5022,6 @@ label.log-length { } #browser_wrapper div.content_wrapper { width: 70%; - /* FIXME(Ke Wu): for now there are two breadcrumb tr in both table - * and this one in the content table is hidden. This hack is made to - * fix the alignment of two table, needs a better solution in the - * future. - */ - } #browser_wrapper div.content_wrapper div.table_wrapper, #browser_wrapper div.content_wrapper thead th.table_header { @@ -5354,7 +5058,7 @@ label.log-length { background-color: #eeeeee; } #browser_wrapper table tbody tr:last-child td { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #dddddd; border-radius: 0; } #browser_wrapper table tbody tr.empty td { @@ -5368,7 +5072,6 @@ label.log-length { padding: 6px; margin: 0 0 1px 0; } -/* Styling for inline object creation buttons */ .btn-inline { margin-bottom: 9px; } @@ -5376,14 +5079,13 @@ label.log-length { width: 275px; margin-right: 2px; } -/* Styling for draged network object */ #networkListSortContainer { display: none; } .networklist { padding: 6px; - background: #eee; - border: 1px solid #ccc; + background: #eeeeee; + border: 1px solid #cccccc; min-height: 2em; width: auto !important; -webkit-box-sizing: border-box; @@ -5395,18 +5097,18 @@ label.log-length { list-style-type: none; margin: 6px auto; padding: 3px; - background: #fff; - border: 1px solid #aaa; + background: #ffffff; + border: 1px solid #aaaaaa; line-height: 18px; border-radius: 3px; cursor: move; padding-left: 23px; - background: #ffffff url('/static/dashboard/img/drag.png') no-repeat 11px 50%; + background: white url('/static/dashboard/img/drag.png') no-repeat 11px 50%; } .networklist li em { font-size: 0.5em; line-height: 1em; - color: #999; + color: #999999; font-style: normal; margin-left: 0.8em; } @@ -5432,10 +5134,10 @@ label.log-length { content: "+"; } .networklist li.ui-sortable-helper { - background-color: #def; + background-color: #ddeeff; } .networklist li.ui-state-highlight { - border: 1px dotted #ccc; + border: 1px dotted #cccccc; background: #efefef; height: 0.5em; } @@ -5460,12 +5162,12 @@ label.log-length { content: "-"; } #selected_network li:before { - content: "nic:" counter(v1); + content: "nic:"counter(v1); counter-increment: v1; display: inline-block; margin-right: 5px; - background: #666; - color: #fff; + background: #666666; + color: #ffffff; font-size: 90%; padding: 0px 4px; vertical-align: middle; @@ -5475,344 +5177,235 @@ label.log-length { } #selected_network.dragging li:before { content: "nic:"; - background-color: rgba(102, 102, 102, 0.5); + background-color: rgba(102,102,102,0.5); padding-right: 10px; } #selected_network.dragging li.ui-state-highlight:before { content: ""; background: transparent; } -/* Styling for network topology */ -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 20px 0; - } - to { - background-position: 0 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 20px 0; - } - to { - background-position: 0 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 20px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 20px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 20px 0; - } - to { - background-position: 0 0; - } -} -#topologyCanvas { +#topologyCanvasContainer { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - -o-box-sizing: border-box; box-sizing: border-box; width: 100%; - height: 500px; + height: auto; padding: 25px; padding-left: 50px; background: #efefef; + min-height: 400px; } -#topologyCanvas div.nodata { +#topologyCanvasContainer div.nodata { font-size: 150%; - font-weight: bold; text-align: center; - padding-top: 200px; + padding-top: 150px; display: none; } -div.networks { - height: 100%; +#topologyCanvasContainer.noinfo div.nodata { + display: block; } -div.network { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - -o-box-sizing: border-box; - box-sizing: border-box; +#topologyCanvasContainer.noinfo #topology_canvas { + display: none; +} +.topologyNavi { + overflow: hidden; + margin: 10px 0 20px; +} +.topologyNavi i { + margin-right: 3px; +} +.topologyNavi .toggleView { float: left; - width: 270px; - height: 100%; - position: relative; } -div.network .nicname { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - -o-box-sizing: border-box; - box-sizing: border-box; - height: 100%; - width: 17px; - border-radius: 17px; - z-index: 200; - color: #fff; +.topologyNavi .launchButtons { + float: right; + text-align: right; +} +.topologyNavi .launchButtons a.btn { + margin-left: 10px; +} +.topologyBalloon { + display: none; + background: #ffffff; position: absolute; - left: -8px; + left: 100px; + top: 20px; + z-index: 600; + border-radius: 5px; + color: #333333; + min-width: 200px; + line-height: 1.2; + font-size: 11px; + -webkit-box-shadow: 0px 1px 6px #777777; + -moz-box-shadow: 0px 1px 6px #777777; + box-shadow: 0px 1px 6px #777777; +} +.topologyBalloon.on { + display: block; +} +.topologyBalloon .vnc_window { + margin-left: 10px; +} +.topologyBalloon .closeTopologyBalloon { + font-size: 16px; + line-height: 1; + display: block; + position: absolute; + font-weight: bold; + right: 6px; top: 0px; cursor: pointer; + padding: 3px; + color: #aaaaaa; } -div.network .nicname:hover { - background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15)); - background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15)); - background-image: -ms-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15)); - background-image: -o-linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15)); - background-image: linear-gradient(rgba(0, 0, 0, 0.15), rgba(0, 0, 0, 0.15)); - background-size: 10px 10px; +.topologyBalloon .closeTopologyBalloon:hover { + color: #777777; + text-decoration: none; } -div.network .nicname.nourl { - cursor: auto; +.topologyBalloon .contentBody { + padding: 8px 8px 0; } -div.network .nicname.nourl:hover { - background-image: none; +.topologyBalloon span.active:before, .topologyBalloon span.down:before { + content: ""; + width: 9px; + height: 9px; + display: inline-block; + background: #0d925b; + margin-right: 3px; + border-radius: 10px; + vertical-align: middle; +} +.topologyBalloon span.down:before { + background: #e64b41; +} +.topologyBalloon .footer { + background: #efefef; + border-top: 1px solid #d9d9d9; + padding: 8px; + border-radius: 0px 0px 7px 7px; +} +.topologyBalloon .footer .footerInner { + display: table; + width: 100%; +} +.topologyBalloon .footer .cell { + display: table-cell; + padding-right: 10px; } -div.network .nicname h3 { +.topologyBalloon .footer .link { font-size: 12px; - line-height: 1; - position: relative; - font-weight: normal; - top: 55%; - color: #fff; - left: -1px; - letter-spacing: 0.2em; - -webkit-transform: rotate(-90deg); - -moz-transform: rotate(-90deg); - -ms-transform: rotate(-90deg); - -o-transform: rotate(-90deg); - transform: rotate(-90deg); - white-space: nowrap; - text-shadow: 0px 0px 5px #000; } -div.network .nicname span.ip { - position: absolute; - bottom: -10px; - left: 20px; - color: #000; - display: block; - font-weight: normal; - font-size: 90%; - letter-spacing: 0.2em; - -webkit-transform: rotate(-90deg); - -moz-transform: rotate(-90deg); - -ms-transform: rotate(-90deg); - -o-transform: rotate(-90deg); - transform: rotate(-90deg); - -webkit-transform-origin: 0% 0%; - -moz-transform-origin: 0% 0%; - -ms-transform-origin: 0% 0%; - -o-transform-origin: 0% 0%; - transform-origin: 0% 0%; - white-space: nowrap; - text-shadow: 0px 0px 2px #fff,0px 0px 2px #fff; +.topologyBalloon .footer .delete { + padding-right: 0; + text-align: right; } -div.network .router, -div.network .server, -div.network .device { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - -o-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; - width: 90px; - border: 3px solid #444; - position: absolute; - top: 30px; - left: 90px; - color: #fff; - padding: 0 3px; - background: #666; - margin-bottom: 20px; - border-radius: 8px; +.topologyBalloon .footer .delete .btn:before { + content: "Delete "; } -div.network .router:before, -div.network .server:before, -div.network .device:before { - content: ""; - width: 20px; - height: 20px; - border: 2px solid #444; - line-height: 1.2; - position: absolute; - border-radius: 20px; - top: -10px; - left: -10px; - background: #ffffff url('/static/dashboard/img/router.png') no-repeat center center; - background-size: 16px 16px; -} -div.network .router:after, -div.network .server:after, -div.network .device:after { - content: ""; - width: 100%; - line-height: 1.2; - position: absolute; - text-align: center; - border-radius: 0; - background: #444; - color: #fff; - font-size: 11px; - height: 1.5em; - bottom: 0px; - left: 0px; +.topologyBalloon .footer .delete .btn.deleting:before { + content: "Deleting "; } -div.network .router span.devicename, -div.network .server span.devicename, -div.network .device span.devicename { - position: absolute; - color: #fff; - bottom: 0px; +.topologyBalloon .footer .delete .btn.instance:before { + content: "Terminate "; +} +.topologyBalloon .footer .delete .btn.instance.deleting:before { + content: "Terminating "; +} +.topologyBalloon table.detaiInfoTable { + margin-bottom: 5px; +} +.topologyBalloon table.detaiInfoTable caption { + text-align: left; font-size: 12px; - line-height: 14px; - width: 100%; - text-align: center; - z-index: 300; - left: -2px; + font-weight: bold; + margin-bottom: 0px; } -div.network .router span.name, -div.network .server span.name, -div.network .device span.name { - overflow: hidden; +.topologyBalloon table.detaiInfoTable th, .topologyBalloon table.detaiInfoTable td { + text-align: left; + vertical-align: middle; + padding-bottom: 3px; + background: transparent; +} +.topologyBalloon table.detaiInfoTable th { + color: #999999; + padding-right: 8px; + width: 80px; +} +.topologyBalloon table.detaiInfoTable th span { + vertical-align: middle; + width: 80px; white-space: nowrap; + overflow: hidden; text-overflow: ellipsis; - display: block; - font-size: 12px; - position: relative; - z-index: 10; - text-align: center; - top: 4px; - padding: 0 3px; + display: inline-block; } -div.network .router div.port, -div.network .server div.port, -div.network .device div.port { +.topologyBalloon table.detaiInfoTable th.device { text-align: right; - min-width: 90px; - height: 10px; - font: 0px/0px sans-serif; - position: absolute; - left: -91px; - top: 8px; - background-color: #37a9e3; - background-image: none; - -webkit-background-size: 20px 20px; - -moz-background-size: 20px 20px; - -o-background-size: 20px 20px; - background-size: 20px 20px; - z-index: 100; -} -div.network .router div.port span.ip, -div.network .server div.port span.ip, -div.network .device div.port span.ip { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - -o-box-sizing: border-box; - box-sizing: border-box; - color: #333; - font-size: 9px; - line-height: 1; - text-shadow: 0px -1px #ffffff; - position: relative; - width: 90px; - display: inline-block; - padding-right: 8px; - padding-left: 8px; - word-wrap: break-word; - word-break: break-all; } -div.network .router div.port.right, -div.network .server div.port.right, -div.network .device div.port.right { - left: auto; - right: -92px; - width: 92px; - text-align: left; +.topologyBalloon table.detaiInfoTable td { + padding-right: 5px; + white-space: nowrap; } -div.network .router:hover, -div.network .server:hover, -div.network .device:hover { - border-color: #222; +.topologyBalloon table.detaiInfoTable td.delete { + padding-right: 0; + text-align: right; } -div.network .router:hover div.port, -div.network .server:hover div.port, -div.network .device:hover div.port { - cursor: pointer; - background-color: #2688c0; - -webkit-animation: progress-bar-stripes 1s linear infinite; - -moz-animation: progress-bar-stripes 1s linear infinite; - -ms-animation: progress-bar-stripes 1s linear infinite; - -o-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite; -} -div.network .router:hover div.port:hover, -div.network .server:hover div.port:hover, -div.network .device:hover div.port:hover { - -webkit-animation: progress-bar-stripes 0.3s linear infinite; - -moz-animation: progress-bar-stripes 0.3s linear infinite; - -ms-animation: progress-bar-stripes 0.3s linear infinite; - -o-animation: progress-bar-stripes 0.3s linear infinite; - animation: progress-bar-stripes 0.3s linear infinite; -} -div.network .router:hover div.port.nourl, -div.network .server:hover div.port.nourl, -div.network .device:hover div.port.nourl { - cursor: auto; - background-image: none; +.topologyBalloon table.detaiInfoTable .btn { + line-height: 1.4; } -div.network .router:hover div.port.nourl:hover, -div.network .server:hover div.port.nourl:hover, -div.network .device:hover div.port.nourl:hover { - background-image: none; +.topologyBalloon table.detaiInfoTable .btn:before { + content: "Delete "; } -div.network .router:hover:after, -div.network .server:hover:after, -div.network .device:hover:after { - background-color: #222; - border-color: #222; +.topologyBalloon table.detaiInfoTable .btn.deleting:before { + content: "Deleting "; } -div.network .device { - border: none; - background: transparent; +.topologyBalloon:before { + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + border-right: 9px solid #bbbbbb; + display: block; + position: absolute; + top: 30px; + left: -9px; + width: 0; + height: 0; + content: ""; } -div.network .server { - background: #fff; - color: #333; +.topologyBalloon:after { + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; + border-right: 8px solid #ffffff; + display: block; + position: absolute; + top: 31px; + left: -8px; + width: 0; + height: 0; + content: ""; } -div.network .server:before { - background: #ffffff url('/static/dashboard/img/server.png') no-repeat center center; - background-size: 14px 14px; +.topologyBalloon.leftPosition:before { + border-right: none; + border-left: 9px solid #bbbbbb; + right: -9px; + top: 30px; + left: auto; } -.launchButtons { - text-align: right; - margin: 10px 0px 15px 10px; +.topologyBalloon.leftPosition:after { + border-right: none; + border-left: 8px solid #ffffff; + right: -8px; + top: 31px; + left: auto; } -.launchButtons a.btn { - margin-left: 10px; +#topologyMessages { + width: 1px; + height: 1px; + visibility: hidden; + position: absolute; + top: -100px; } -/**** Resource Topology CSS ****/ .link { - stroke: #000; + stroke: #999999; stroke-width: 1.5px; } .node { @@ -5875,3 +5468,518 @@ div.network .server:before { #info_box .error { color: darkred; } +#ceilometer-stats .form-horizontal .control-label { + width: auto; +} +#ceilometer-stats .form-horizontal .controls { + float: left; + margin-left: 0; +} +#ceilometer-stats .form-horizontal .control-group { + float: left; + margin-right: 20px; +} +#ceilometer-stats .form-horizontal .btn { + float: left; + margin-right: 20px; + margin-bottom: 18px; +} +#ruleListSortContainer { + display: none; +} +.rulelist { + padding: 6px; + background: #eeeeee; + border: 1px solid #cccccc; + min-height: 2em; + width: auto !important; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.rulelist li { + width: 226px; + list-style-type: none; + margin: 6px auto; + padding: 3px; + background: #ffffff; + border: 1px solid #aaaaaa; + line-height: 18px; + border-radius: 3px; + cursor: move; + padding-left: 23px; + background: white url('/static/dashboard/img/drag.png') no-repeat 11px 50%; +} +.rulelist li em { + font-size: 0.5em; + line-height: 1em; + color: #999999; + font-style: normal; + margin-left: 0.8em; +} +.rulelist li i { + margin-right: 5px; + vertical-align: middle; +} +.rulelist li a.btn { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + font-size: 11px; + line-height: 12px; + padding: 2px 5px 3px; + margin-right: 1px; + width: 18px; + text-align: center; + right: 5px; + vertical-align: middle; + float: right; +} +.rulelist li a.btn:before { + content: "+"; +} +.rulelist li.ui-sortable-helper { + background-color: #ddeeff; +} +.rulelist li.ui-state-highlight { + border: 1px dotted #cccccc; + background: #efefef; + height: 0.5em; +} +.rulelist li:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; +} +#selected_rule { + margin-bottom: 1.5em; + counter-reset: v1 0; + background: #edf9ff; + border: 1px solid #c0d9e4; +} +#selected_rule li { + position: relative; +} +#selected_rule li a.btn:before { + content: "-"; +} +#selected_rule li:before { + content: "rule:"counter(v1); + counter-increment: v1; + display: inline-block; + margin-right: 5px; + background: #666666; + color: #ffffff; + font-size: 90%; + padding: 0px 4px; + vertical-align: middle; + border-radius: 2px; + position: absolute; + left: -2em; +} +#selected_rule.dragging li:before { + content: "rule:"; + background-color: rgba(102,102,102,0.5); + padding-right: 10px; +} +#selected_rule.dragging li.ui-state-highlight:before { + content: ""; + background: transparent; +} + +.rickshaw_graph .detail { + pointer-events: none; + position: absolute; + top: 0; + z-index: 2; + background: rgba(0, 0, 0, 0.1); + bottom: 0; + width: 1px; + transition: opacity 0.25s linear; + -moz-transition: opacity 0.25s linear; + -o-transition: opacity 0.25s linear; + -webkit-transition: opacity 0.25s linear; +} +.rickshaw_graph .detail.inactive { + opacity: 0; +} +.rickshaw_graph .detail .item.active { + opacity: 1; +} +.rickshaw_graph .detail .x_label { + font-family: Arial, sans-serif; + border-radius: 3px; + padding: 6px; + opacity: 0.5; + border: 1px solid #e0e0e0; + font-size: 12px; + position: absolute; + background: white; + white-space: nowrap; +} +.rickshaw_graph .detail .item { + position: absolute; + z-index: 2; + border-radius: 3px; + padding: 0.25em; + font-size: 12px; + font-family: Arial, sans-serif; + opacity: 0; + background: rgba(0, 0, 0, 0.4); + color: white; + border: 1px solid rgba(0, 0, 0, 0.4); + margin-left: 1em; + margin-top: -1em; + white-space: nowrap; +} +.rickshaw_graph .detail .item.active { + opacity: 1; + background: rgba(0, 0, 0, 0.8); +} +.rickshaw_graph .detail .item:before { + content: "\25c2"; + position: absolute; + left: -0.5em; + color: rgba(0, 0, 0, 0.7); + width: 0; +} +.rickshaw_graph .detail .dot { + width: 4px; + height: 4px; + margin-left: -4px; + margin-top: -3px; + border-radius: 5px; + position: absolute; + box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + background: white; + border-width: 2px; + border-style: solid; + display: none; + background-clip: padding-box; +} +.rickshaw_graph .detail .dot.active { + display: block; +} +/* graph */ + +.rickshaw_graph { + position: relative; +} +.rickshaw_graph svg { + display: block; + overflow: hidden; +} + +/* ticks */ + +.rickshaw_graph .x_tick { + position: absolute; + top: 0; + bottom: 0; + width: 0px; + border-left: 1px dotted rgba(0, 0, 0, 0.2); + pointer-events: none; +} +.rickshaw_graph .x_tick .title { + position: absolute; + font-size: 12px; + font-family: Arial, sans-serif; + opacity: 0.5; + white-space: nowrap; + margin-left: 3px; + bottom: 1px; +} + +/* annotations */ + +.rickshaw_annotation_timeline { + height: 1px; + border-top: 1px solid #e0e0e0; + margin-top: 10px; + position: relative; +} +.rickshaw_annotation_timeline .annotation { + position: absolute; + height: 6px; + width: 6px; + margin-left: -2px; + top: -3px; + border-radius: 5px; + background-color: rgba(0, 0, 0, 0.25); +} +.rickshaw_graph .annotation_line { + position: absolute; + top: 0; + bottom: -6px; + width: 0px; + border-left: 2px solid rgba(0, 0, 0, 0.3); + display: none; +} +.rickshaw_graph .annotation_line.active { + display: block; +} + +.rickshaw_graph .annotation_range { + background: rgba(0, 0, 0, 0.1); + display: none; + position: absolute; + top: 0; + bottom: -6px; +} +.rickshaw_graph .annotation_range.active { + display: block; +} +.rickshaw_graph .annotation_range.active.offscreen { + display: none; +} + +.rickshaw_annotation_timeline .annotation .content { + background: white; + color: black; + opacity: 0.9; + padding: 5px 5px; + box-shadow: 0 0 2px rgba(0, 0, 0, 0.8); + border-radius: 3px; + position: relative; + z-index: 20; + font-size: 12px; + padding: 6px 8px 8px; + top: 18px; + left: -11px; + width: 160px; + display: none; + cursor: pointer; +} +.rickshaw_annotation_timeline .annotation .content:before { + content: "\25b2"; + position: absolute; + top: -11px; + color: white; + text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.8); +} +.rickshaw_annotation_timeline .annotation.active, +.rickshaw_annotation_timeline .annotation:hover { + background-color: rgba(0, 0, 0, 0.8); + cursor: none; +} +.rickshaw_annotation_timeline .annotation .content:hover { + z-index: 50; +} +.rickshaw_annotation_timeline .annotation.active .content { + display: block; +} +.rickshaw_annotation_timeline .annotation:hover .content { + display: block; + z-index: 50; +} +.rickshaw_graph .y_axis, +.rickshaw_graph .x_axis_d3 { + fill: none; +} +.rickshaw_graph .y_ticks .tick, +.rickshaw_graph .x_ticks_d3 .tick { + stroke: rgba(0, 0, 0, 0.16); + stroke-width: 2px; + shape-rendering: crisp-edges; + pointer-events: none; +} +.rickshaw_graph .y_grid .tick, +.rickshaw_graph .x_grid_d3 .tick { + z-index: -1; + stroke: rgba(0, 0, 0, 0.20); + stroke-width: 1px; + stroke-dasharray: 1 1; +} +.rickshaw_graph .y_grid path, +.rickshaw_graph .x_grid_d3 path { + fill: none; + stroke: none; +} +.rickshaw_graph .y_ticks path, +.rickshaw_graph .x_ticks_d3 path { + fill: none; + stroke: #808080; +} +.rickshaw_graph .y_ticks text, +.rickshaw_graph .x_ticks_d3 text { + opacity: 0.5; + font-size: 12px; + pointer-events: none; +} +.rickshaw_graph .x_tick.glow .title, +.rickshaw_graph .y_ticks.glow text { + fill: black; + color: black; + text-shadow: + -1px 1px 0 rgba(255, 255, 255, 0.1), + 1px -1px 0 rgba(255, 255, 255, 0.1), + 1px 1px 0 rgba(255, 255, 255, 0.1), + 0px 1px 0 rgba(255, 255, 255, 0.1), + 0px -1px 0 rgba(255, 255, 255, 0.1), + 1px 0px 0 rgba(255, 255, 255, 0.1), + -1px 0px 0 rgba(255, 255, 255, 0.1), + -1px -1px 0 rgba(255, 255, 255, 0.1); +} +.rickshaw_graph .x_tick.inverse .title, +.rickshaw_graph .y_ticks.inverse text { + fill: white; + color: white; + text-shadow: + -1px 1px 0 rgba(0, 0, 0, 0.8), + 1px -1px 0 rgba(0, 0, 0, 0.8), + 1px 1px 0 rgba(0, 0, 0, 0.8), + 0px 1px 0 rgba(0, 0, 0, 0.8), + 0px -1px 0 rgba(0, 0, 0, 0.8), + 1px 0px 0 rgba(0, 0, 0, 0.8), + -1px 0px 0 rgba(0, 0, 0, 0.8), + -1px -1px 0 rgba(0, 0, 0, 0.8); +} +.rickshaw_legend { + font-family: Arial; + font-size: 12px; + color: white; + background: #404040; + display: inline-block; + padding: 12px 5px; + border-radius: 2px; + position: relative; +} +.rickshaw_legend:hover { + z-index: 10; +} +.rickshaw_legend .swatch { + width: 10px; + height: 10px; + border: 1px solid rgba(0, 0, 0, 0.2); +} +.rickshaw_legend .line { + clear: both; + line-height: 140%; + padding-right: 15px; +} +.rickshaw_legend .line .swatch { + display: inline-block; + margin-right: 3px; + border-radius: 2px; +} +.rickshaw_legend .label { + margin: 0; + white-space: nowrap; + display: inline; + font-size: inherit; + background-color: transparent; + color: inherit; + font-weight: normal; + line-height: normal; + padding: 0px; + text-shadow: none; +} +.rickshaw_legend .action:hover { + opacity: 0.6; +} +.rickshaw_legend .action { + margin-right: 0.2em; + font-size: 10px; + opacity: 0.2; + cursor: pointer; + font-size: 14px; +} +.rickshaw_legend .line.disabled { + opacity: 0.4; +} +.rickshaw_legend ul { + list-style-type: none; + margin: 0; + padding: 0; + margin: 2px; + cursor: pointer; +} +.rickshaw_legend li { + padding: 0 0 0 2px; + min-width: 80px; + white-space: nowrap; +} +.rickshaw_legend li:hover { + background: rgba(255, 255, 255, 0.08); + border-radius: 3px; +} +.rickshaw_legend li:active { + background: rgba(255, 255, 255, 0.2); + border-radius: 3px; +} + +.chart_container { + position: relative; + min-height: 300px; + min-width: 400px; +} +.chart_container .chart { + position: relative; + min-height: 300px; + min-width: 400px; +} +.chart_container .chart .detail .x_label { + display: none; +} +.chart_container .chart .detail .item { + line-height: 1.4; + padding: 0.5em; +} +.chart_container .chart .detail .date { + color: #a0a0a0; +} +.chart_container .chart .modal-backdrop { + position: absolute; + opacity: 0.5; + top: 0; + left: 0; + min-height: 300px; + min-width: 400px; +} +.chart_container .chart svg { + padding: 0 0 5px 0; +} +.chart_container .detail_swatch { + float: right; + display: inline-block; + width: 10px; + height: 10px; + margin: 0 4px 0 0; +} +.legend_container { + min-width: 90px; + margin-left: 20px; +} +.legend_container .swatch { + float: right; + display: inline-block; + width: 10px; + height: 10px; + margin: 0 4px 0 0; +} +.legend_container .modal-backdrop { + position: absolute; + opacity: 0.5; + top: 0; + left: 0; + min-width: 90px; +} +.legend_container .rickshaw_legend.disabled { + padding: 0; +} +.spinner_wrapper { + position: absolute; + top: 40%; + left: 40%; +} +.rickshaw_legend { + background: white; + color: #404040; +} +.rickshaw_legend .action { + text-decoration: none; + color: #000000; +} diff --git a/debian/static/openstack-dashboard/js/7d82b0a14954.js b/debian/static/openstack-dashboard/js/271a130e6a31.js similarity index 77% rename from debian/static/openstack-dashboard/js/7d82b0a14954.js rename to debian/static/openstack-dashboard/js/271a130e6a31.js index ced03d0..dd375e9 100644 --- a/debian/static/openstack-dashboard/js/7d82b0a14954.js +++ b/debian/static/openstack-dashboard/js/271a130e6a31.js @@ -193,18 +193,22 @@ Hogan.parse=function(tokens,text,options){options=options||{};return buildTree(t t=this.generate(this.parse(this.scan(text,options.delimiters),text,options),text,options);return this.cache[key]=t;};})(typeof exports!=='undefined'?exports:Hogan);horizon.ajax={_queue:[],_active:[],get_messages:function(request){return request.getResponseHeader("X-Horizon-Messages");},queue:function(opts){var complete=opts.complete,active=horizon.ajax._active;opts.complete=function(){var index=$.inArray(request,active);if(index>-1){active.splice(index,1);} horizon.ajax.next();if(complete){complete.apply(this,arguments);}};function request(){return $.ajax(opts);} horizon.ajax._queue.push(request);horizon.ajax.next();},next:function(){var queue=horizon.ajax._queue,limit=horizon.conf.ajax.queue_limit,request;if(queue.length&&(!limit||horizon.ajax._active.length+");$this.after($button);});};horizon.forms.prevent_multiple_submission=function(el){var $form=$(el).find("form");$form.submit(function(){var button=$(this).find('[type="submit"]');if(button.hasClass('btn-primary')&&!button.hasClass('always-enabled')){$(this).submit(function(){return false;});button.removeClass('primary').addClass('disabled');button.attr('disabled','disabled');} -return true;});};horizon.forms.init_examples=function(el){var $el=$(el);$el.find("#id_description").attr("placeholder",gettext("Additional information here..."));$el.find("#create_image_form input#id_copy_from").attr("placeholder","http://example.com/image.iso");$el.find(".table_search input").attr("placeholder",gettext("Filter"));$el.find("#attach_volume_form #id_device").attr("placeholder","/dev/vdc");};horizon.addInitFunction(function(){horizon.forms.prevent_multiple_submission($('body'));horizon.modals.addModalInitFunction(horizon.forms.prevent_multiple_submission);horizon.forms.bind_add_item_handlers($("body"));horizon.modals.addModalInitFunction(horizon.forms.bind_add_item_handlers);horizon.forms.init_examples($("body"));horizon.modals.addModalInitFunction(horizon.forms.init_examples);horizon.forms.handle_snapshot_source();horizon.forms.handle_image_source();$("body").on("click","form button.btn-danger",function(evt){horizon.datatables.confirm(this);evt.preventDefault();});$(document).on("change",'select.switchable',function(evt){var $fieldset=$(evt.target).closest('fieldset'),$switchables=$fieldset.find('.switchable');$switchables.each(function(index,switchable){var $switchable=$(switchable),slug=$switchable.data('slug'),visible=$switchable.is(':visible'),val=$switchable.val();$fieldset.find('.switched[data-switch-on*="'+slug+'"]').each(function(index,input){var $input=$(input),data=$input.data(slug+"-"+val);if(typeof data==="undefined"||!visible){$input.closest('.form-field').hide();}else{$('label[for='+$input.attr('id')+']').html(data);$input.closest('.form-field').show();}});});});$('select.switchable').trigger('change');horizon.modals.addModalInitFunction(function(modal){$(modal).find('select.switchable').trigger('change');});function update_volume_source_displayed_fields(field){var $this=$(field),base_type=$this.val();$this.find("option").each(function(){if(this.value!=base_type){$("#id_"+this.value).closest(".control-group").hide();}else{$("#id_"+this.value).closest(".control-group").show();}});} -$(document).on('change','#id_volume_source_type',function(evt){update_volume_source_displayed_fields(this);});$('#id_volume_source_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_volume_source_type").change();});$(document).tooltip({selector:"div.form-field :input:not(:checkbox)",placement:function(tip,input){return $(input).closest("form[class*='split']").length?"bottom":'right';},trigger:'focus',title:function(){return $(this).closest('div.form-field').children('.help-block').text();}});$(document).on('mousedown keydown','.form-field select',function(evt){$(this).tooltip('hide');});$('span.help-block').hide();});horizon.instances={user_decided_length:false,networks_selected:[],networks_available:[],getConsoleLog:function(via_user_submit){var form_element=$("#tail_length"),data;if(!via_user_submit){via_user_submit=false;} +return $.parseJSON(cookie);},write:function(cookie_name,data){$.cookie("horizon."+cookie_name,JSON.stringify(data),{path:"/"});},update:function(cookie_name,key,value){var data=horizon.cookies.read("horizon."+cookie_name);data[key]=value;horizon.cookies.write(cookie_name,data);},remove:function(cookie_name){$.cookie("horizon."+cookie_name,null);}};horizon.forms={handle_snapshot_source:function(){$("div.table_wrapper, #modal_wrapper").on("change","select#id_snapshot_source",function(evt){var $option=$(this).find("option:selected");var $form=$(this).closest('form');var $volName=$form.find('input#id_name');if(_.isEmpty($volName.val())){$volName.val($option.data("display_name"));} +var $volSize=$form.find('input#id_size');var volSize=parseInt($volSize.val(),10)||-1;var dataSize=parseInt($option.data("size"),10)||-1;if(volSizeendDate.date.valueOf()){var newDate=new Date(ev.date) +newDate.setDate(newDate.getDate()+1);endDate.setValue(newDate);$('input#id_end')[0].focus();} +startDate.hide();}).data('datepicker');var endDate=$('input#id_end').datepicker({onRender:function(date){return date.valueOf()+");$this.after($button);});};horizon.forms.prevent_multiple_submission=function(el){var $form=$(el).find("form");$form.submit(function(){var button=$(this).find('[type="submit"]');if(button.hasClass('btn-primary')&&!button.hasClass('always-enabled')){$(this).submit(function(){return false;});button.removeClass('primary').addClass('disabled');button.attr('disabled','disabled');} +return true;});};horizon.forms.init_examples=function(el){var $el=$(el);$el.find("#id_description").attr("placeholder",gettext("Additional information here..."));$el.find("#create_image_form input#id_copy_from").attr("placeholder","http://example.com/image.iso");$el.find(".table_search input").attr("placeholder",gettext("Filter"));$el.find("#attach_volume_form #id_device").attr("placeholder","/dev/vdc");};horizon.addInitFunction(function(){horizon.forms.prevent_multiple_submission($('body'));horizon.modals.addModalInitFunction(horizon.forms.prevent_multiple_submission);horizon.forms.bind_add_item_handlers($("body"));horizon.modals.addModalInitFunction(horizon.forms.bind_add_item_handlers);horizon.forms.init_examples($("body"));horizon.modals.addModalInitFunction(horizon.forms.init_examples);horizon.forms.handle_snapshot_source();horizon.forms.handle_image_source();horizon.forms.datepicker();$("body").on("click","form button.btn-danger",function(evt){horizon.datatables.confirm(this);evt.preventDefault();});$(document).on("change",'select.switchable',function(evt){var $fieldset=$(evt.target).closest('fieldset'),$switchables=$fieldset.find('.switchable');$switchables.each(function(index,switchable){var $switchable=$(switchable),slug=$switchable.data('slug'),visible=$switchable.is(':visible'),val=$switchable.val();$fieldset.find('.switched[data-switch-on*="'+slug+'"]').each(function(index,input){var $input=$(input),data=$input.data(slug+"-"+val);if(typeof data==="undefined"||!visible){$input.closest('.form-field').hide();}else{$('label[for='+$input.attr('id')+']').html(data);$input.closest('.form-field').show();}});});});$('select.switchable').trigger('change');horizon.modals.addModalInitFunction(function(modal){$(modal).find('select.switchable').trigger('change');});function update_volume_source_displayed_fields(field){var $this=$(field),base_type=$this.val();$this.find("option").each(function(){if(this.value!=base_type){$("#id_"+this.value).closest(".control-group").hide();}else{$("#id_"+this.value).closest(".control-group").show();}});} +$(document).on('change','#id_volume_source_type',function(evt){update_volume_source_displayed_fields(this);});$('#id_volume_source_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_volume_source_type").change();});$(document).tooltip({selector:"div.form-field :input:not(:checkbox)",placement:function(tip,input){return $(input).closest("form[class*='split']").length?"bottom":'right';},trigger:'focus',title:function(){return $(this).closest('div.form-field').children('.help-block').text();}});$(document).on('mousedown keydown','.form-field select',function(evt){$(this).tooltip('hide');});$(document).on('keydown.esc_btn',function(evt){if(evt.keyCode==27){$('.tooltip').hide();}});$('span.help-block').hide();});horizon.instances={user_decided_length:false,networks_selected:[],networks_available:[],getConsoleLog:function(via_user_submit){var form_element=$("#tail_length"),data;if(!via_user_submit){via_user_submit=false;} if(this.user_decided_length){data=$(form_element).serialize();}else{data="length=35";} -$.ajax({url:$(form_element).attr('action'),data:data,method:'get',success:function(response_body){$('pre.logs').text(response_body);},error:function(response){if(via_user_submit){horizon.clearErrorMessages();horizon.alert('error',gettext('There was a problem communicating with the server, please try again.'));}}});},disable_launch_button:function(){var launch_button="#instances__action_launch";$(launch_button).click(function(e){if($(launch_button).hasClass("disabled")){e.preventDefault();e.stopPropagation();}});},get_network_element:function(network_id){return $('li > label[for^="id_network_'+network_id+'"]');},init_network_list:function(){horizon.instances.networks_selected=[];horizon.instances.networks_available=[];$(this.get_network_element("")).each(function(){var $this=$(this);var $input=$this.children("input");var network_property={name:$this.text().replace(/^\s+/,""),id:$input.attr("id"),value:$input.attr("value")};if($input.is(':checked')){horizon.instances.networks_selected.push(network_property);}else{horizon.instances.networks_available.push(network_property);}});},generate_network_element:function(name,id,value){var $li=$('
  • ');$li.attr('name',value).html(name+'('+value+')');return $li;},generate_networklist_html:function(){var self=this;var updateForm=function(){var lists=$("#networkListId div.input li").attr('data-index',100);var active_networks=$("#selected_network > li").map(function(){return $(this).attr("name");});$("#networkListId div.input input:checkbox").removeAttr('checked');active_networks.each(function(index,value){$("#networkListId div.input input:checkbox[value="+value+"]").attr('checked','checked').parents("li").attr('data-index',index);});$("#networkListId div.input ul").html(lists.sort(function(a,b){if($(a).data("index")<$(b).data("index"))return-1;if($(a).data("index")>$(b).data("index"))return 1;return 0;}));};$("#networkListSortContainer").show();$("#networkListIdContainer").hide();self.init_network_list();$("#available_network").empty();$.each(self.networks_available,function(index,value){$("#available_network").append(self.generate_network_element(value.name,value.id,value.value));});$("#selected_network").empty();$.each(self.networks_selected,function(index,value){$("#selected_network").append(self.generate_network_element(value.name,value.id,value.value));});$(".networklist > li > a.btn").click(function(e){var $this=$(this);e.preventDefault();e.stopPropagation();if($this.parents("ul#available_network").length>0){$this.parent().appendTo($("#selected_network"));}else if($this.parents("ul#selected_network").length>0){$this.parent().appendTo($("#available_network"));} +$.ajax({url:$(form_element).attr('action'),data:data,method:'get',success:function(response_body){$('pre.logs').text(response_body);},error:function(response){if(via_user_submit){horizon.clearErrorMessages();horizon.alert('error',gettext('There was a problem communicating with the server, please try again.'));}}});},get_network_element:function(network_id){return $('li > label[for^="id_network_'+network_id+'"]');},init_network_list:function(){horizon.instances.networks_selected=[];horizon.instances.networks_available=[];$(this.get_network_element("")).each(function(){var $this=$(this);var $input=$this.children("input");var network_property={name:$this.text().replace(/^\s+/,""),id:$input.attr("id"),value:$input.attr("value")};if($input.is(':checked')){horizon.instances.networks_selected.push(network_property);}else{horizon.instances.networks_available.push(network_property);}});},generate_network_element:function(name,id,value){var $li=$('
  • ');$li.attr('name',value).html(name+'('+value+')');return $li;},generate_networklist_html:function(){var self=this;var updateForm=function(){var lists=$("#networkListId div.input li").attr('data-index',100);var active_networks=$("#selected_network > li").map(function(){return $(this).attr("name");});$("#networkListId div.input input:checkbox").removeAttr('checked');active_networks.each(function(index,value){$("#networkListId div.input input:checkbox[value="+value+"]").attr('checked','checked').parents("li").attr('data-index',index);});$("#networkListId div.input ul").html(lists.sort(function(a,b){if($(a).data("index")<$(b).data("index"))return-1;if($(a).data("index")>$(b).data("index"))return 1;return 0;}));};$("#networkListSortContainer").show();$("#networkListIdContainer").hide();self.init_network_list();$("#available_network").empty();$.each(self.networks_available,function(index,value){$("#available_network").append(self.generate_network_element(value.name,value.id,value.value));});$("#selected_network").empty();$.each(self.networks_selected,function(index,value){$("#selected_network").append(self.generate_network_element(value.name,value.id,value.value));});$(".networklist > li > a.btn").click(function(e){var $this=$(this);e.preventDefault();e.stopPropagation();if($this.parents("ul#available_network").length>0){$this.parent().appendTo($("#selected_network"));}else if($this.parents("ul#selected_network").length>0){$this.parent().appendTo($("#available_network"));} updateForm();});if($("#networkListId > div.control-group.error").length>0){var errortext=$("#networkListId > div.control-group.error").find("span.help-inline").text();$("#selected_network_h4").before($('
    ').html(errortext));} -$(".networklist").sortable({connectWith:"ul.networklist",placeholder:"ui-state-highlight",distance:5,start:function(e,info){$("#selected_network").addClass("dragging");},stop:function(e,info){$("#selected_network").removeClass("dragging");updateForm();}}).disableSelection();},workflow_init:function(modal){horizon.instances.generate_networklist_html();}};horizon.addInitFunction(function(){$(document).on('submit','#tail_length',function(evt){horizon.instances.user_decided_length=true;horizon.instances.getConsoleLog(true);evt.preventDefault();});horizon.instances.disable_launch_button();function update_launch_source_displayed_fields(field){var $this=$(field),base_type=$this.val();$this.find("option").each(function(){if(this.value!=base_type){$("#id_"+this.value).closest(".control-group").hide();}else{$("#id_"+this.value).closest(".control-group").show();}});} -$(document).on('change','.workflow #id_source_type',function(evt){update_launch_source_displayed_fields(this);});$('.workflow #id_source_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_source_type").change();});function update_launch_volume_displayed_fields(field){var $this=$(field),volume_opt=$this.val(),$extra_fields=$("#id_delete_on_terminate, #id_device_name");$this.find("option").each(function(){if(this.value!=volume_opt){$("#id_"+this.value).closest(".control-group").hide();}else{$("#id_"+this.value).closest(".control-group").show();}});if(volume_opt==="volume_id"||volume_opt==="volume_snapshot_id"){$extra_fields.closest(".control-group").show();}else{$extra_fields.closest(".control-group").hide();}} -$(document).on('change','.workflow #id_volume_type',function(evt){update_launch_volume_displayed_fields(this);});$('.workflow #id_volume_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_volume_type").change();});});horizon.alert=function(type,message,extra_tags){safe=false +$(".networklist").sortable({connectWith:"ul.networklist",placeholder:"ui-state-highlight",distance:5,start:function(e,info){$("#selected_network").addClass("dragging");},stop:function(e,info){$("#selected_network").removeClass("dragging");updateForm();}}).disableSelection();},workflow_init:function(modal){horizon.instances.generate_networklist_html();}};horizon.addInitFunction(function(){$(document).on('submit','#tail_length',function(evt){horizon.instances.user_decided_length=true;horizon.instances.getConsoleLog(true);evt.preventDefault();});function update_launch_source_displayed_fields(field){var $this=$(field),base_type=$this.val();$this.closest(".control-group").nextAll().hide();switch(base_type){case"image_id":$("#id_image_id").closest(".control-group").show();break;case"instance_snapshot_id":$("#id_instance_snapshot_id").closest(".control-group").show();break;case"volume_id":$("#id_volume_id").closest(".control-group").show();break;case"volume_image_id":$("#id_image_id, #id_volume_size, #id_device_name, , #id_delete_on_terminate").closest(".control-group").show();break;case"volume_snapshot_id":$("#id_volume_snapshot_id, #id_device_name, #id_delete_on_terminate").closest(".control-group").show();break;}} +$(document).on('change','.workflow #id_source_type',function(evt){update_launch_source_displayed_fields(this);});$('.workflow #id_source_type').change();horizon.modals.addModalInitFunction(function(modal){$(modal).find("#id_source_type").change();});function update_image_id_fields(field){var $this=$(field),volume_opt=$this.val();var $option=$this.find("option:selected");var $form=$this.closest('form');var $volSize=$form.find('input#id_volume_size');$volSize.val($option.data("volume_size"));} +$(document).on('change','.workflow #id_image_id',function(evt){update_image_id_fields(this);});});horizon.alert=function(type,message,extra_tags){safe=false if(typeof(extra_tags)!=="undefined"&&_.contains(extra_tags.split(' '),'safe')){safe=true} var template=horizon.templates.compiled_templates["#alert_message_template"],params={"type":type,"type_capitalized":horizon.utils.capitalize(type),"message":message,"safe":safe};return $(template.render(params)).hide().prependTo("#main_content .messages").fadeIn(100);};horizon.clearErrorMessages=function(){$('#main_content .messages .alert.alert-error').remove();};horizon.clearSuccessMessages=function(){$('#main_content .messages .alert.alert-success').remove();};horizon.clearAllMessages=function(){horizon.clearErrorMessages();horizon.clearSuccessMessages();};horizon.autoDismissAlerts=function(){var $alerts=$('#main_content .messages .alert');$alerts.each(function(index,alert){var $alert=$(this),types=$alert.attr('class').split(' ');if(_.intersection(types,horizon.conf.auto_fade_alerts.types).length>0){setTimeout(function(){$alert.fadeOut(horizon.conf.auto_fade_alerts.fade_duration);},horizon.conf.auto_fade_alerts.delay);}});} -horizon.addInitFunction(function(){$("body").ajaxComplete(function(event,request,settings){var message_array=$.parseJSON(horizon.ajax.get_messages(request));$(message_array).each(function(index,item){horizon.alert(item[0],item[1],item[2]);});});$('a.ajax-modal').click(function(){horizon.clearAllMessages();});$(".alert").alert();horizon.autoDismissAlerts();});horizon.modals={_request:null,spinner:null,_init_functions:[]};horizon.modals.addModalInitFunction=function(f){horizon.modals._init_functions.push(f);};horizon.modals.initModal=function(modal){$(horizon.modals._init_functions).each(function(index,f){f(modal);});};horizon.modals.create=function(title,body,confirm,cancel){if(!cancel){cancel="Cancel";} +horizon.addInitFunction(function(){$("body").ajaxComplete(function(event,request,settings){var message_array=$.parseJSON(horizon.ajax.get_messages(request));$(message_array).each(function(index,item){horizon.alert(item[0],item[1],item[2]);});});$('a.ajax-modal').click(function(){horizon.clearAllMessages();});$(".alert").alert();horizon.autoDismissAlerts();});horizon.modals={_request:null,spinner:null,_init_functions:[]};horizon.modals.addModalInitFunction=function(f){horizon.modals._init_functions.push(f);};horizon.modals.initModal=function(modal){$(horizon.modals._init_functions).each(function(index,f){f(modal);});};horizon.modals.create=function(title,body,confirm,cancel){if(!cancel){cancel=gettext("Cancel");} var template=horizon.templates.compiled_templates["#modal_template"],params={title:title,body:body,confirm:confirm,cancel:cancel},modal=$(template.render(params)).appendTo("#modal_wrapper");return modal;};horizon.modals.success=function(data,textStatus,jqXHR){var modal;$('#modal_wrapper').append(data);$('.modal span.help-block').hide();modal=$('.modal:last');modal.modal();$(modal).trigger("new_modal",modal);return modal;};horizon.modals.modal_spinner=function(text){var template=horizon.templates.compiled_templates["#spinner-modal"];horizon.modals.spinner=$(template.render({text:text}));horizon.modals.spinner.appendTo("#modal_wrapper");horizon.modals.spinner.modal({backdrop:'static'});horizon.modals.spinner.spin(horizon.conf.spinner_options.modal);};horizon.addInitFunction(function(){$('#modal_wrapper').on('new_modal',function(evt,modal){horizon.modals.initModal(modal);});$(document).on('click','.modal .cancel',function(evt){$(this).closest('.modal').modal('hide');evt.preventDefault();});$(document).on('submit','.modal form',function(evt){var $form=$(this),$button=$form.find(".modal-footer .btn-primary"),update_field_id=$form.attr("data-add-to-field"),headers={};if($form.attr("enctype")==="multipart/form-data"){return;} evt.preventDefault();$button.prop("disabled",true);if(update_field_id){headers["X-Horizon-Add-To-Field"]=update_field_id;} $.ajax({type:"POST",url:$form.attr('action'),headers:headers,data:$form.serialize(),beforeSend:function(){$("#modal_wrapper .modal").last().modal("hide");horizon.modals.modal_spinner("Working");},complete:function(){horizon.modals.spinner.modal('hide');$("#modal_wrapper .modal").last().modal("show");$button.prop("disabled",false);},success:function(data,textStatus,jqXHR){var redirect_header=jqXHR.getResponseHeader("X-Horizon-Location"),add_to_field_header=jqXHR.getResponseHeader("X-Horizon-Add-To-Field"),json_data,field_to_update;$form.closest(".modal").modal("hide");if(redirect_header){location.href=redirect_header;} @@ -227,74 +231,243 @@ else{return addition}});},_attachInputHandlers:function(){var scope=this;if(this $(this.user_value_form_inputs).each(function(index,element){$(element).on('keyup',function(evt){var progress_element=$('div[data-progress-indicator-for='+$(evt.target).attr('id')+']');var integers_in_input=$(evt.target).val().match(/\d+/g);var user_integer;if(integers_in_input===null){user_integer=0;}else if(integers_in_input.length>1){user_integer=integers_in_input.join('');}else if(integers_in_input.length==1){user_integer=integers_in_input[0];} var progress_amount=parseInt(user_integer,10);scope.updateUsageFor(progress_element,progress_amount);});});},_initialAnimations:function(){var scope=this;$(this.auto_value_progress_bars).each(function(index,element){var auto_progress=$(element);var update_amount=parseInt(auto_progress.attr('data-progress-indicator-step-by'),10);scope.updateUsageFor(auto_progress,update_amount);});},_initialCreation:function(bars){var scope=this;$(bars).each(function(index,element){var progress_element=$(element);var quota_limit=parseInt(progress_element.attr('data-quota-limit'),10);var quota_used=parseInt(progress_element.attr('data-quota-used'),10);if(!isNaN(quota_limit)&&!isNaN(quota_used)){var percentage_used=((quota_used/quota_limit)*100);}else{var percentage_used=0;} scope.drawUsed($(element).attr('id'),percentage_used);});}};horizon.datatables={update:function(){var $rows_to_update=$('tr.status_unknown.ajax-update');if($rows_to_update.length){var interval=$rows_to_update.attr('data-update-interval'),$table=$rows_to_update.closest('table'),decay_constant=$table.attr('decay_constant');if($rows_to_update.find('.actions_column .btn-group.open').length){setTimeout(horizon.datatables.update,interval);$table.removeAttr('decay_constant');return;} -$rows_to_update.each(function(index,row){var $row=$(this),$table=$row.closest('table.datatable');horizon.ajax.queue({url:$row.attr('data-update-url'),error:function(jqXHR,textStatus,errorThrown){switch(jqXHR.status){case 404:var $footer,row_count,footer_text,colspan,template,params,$empty_row;horizon.datatables.update_footer_count($table,-1);if(row_count===0){colspan=$table.find('th[colspan]').attr('colspan');template=horizon.templates.compiled_templates["#empty_row_template"];params={"colspan":colspan};empty_row=template.render(params);$row.replaceWith(empty_row);}else{$row.remove();} +$rows_to_update.each(function(index,row){var $row=$(this),$table=$row.closest('table.datatable');horizon.ajax.queue({url:$row.attr('data-update-url'),error:function(jqXHR,textStatus,errorThrown){switch(jqXHR.status){case 404:var $footer,row_count,footer_text,colspan,template,params,$empty_row;row_count=horizon.datatables.update_footer_count($table,-1);if(row_count===0){colspan=$table.find('th[colspan]').attr('colspan');template=horizon.templates.compiled_templates["#empty_row_template"];params={"colspan":colspan};empty_row=template.render(params);$row.replaceWith(empty_row);}else{$row.remove();} $table.trigger("update");break;default:horizon.utils.log(gettext("An error occurred while updating."));$row.removeClass("ajax-update");$row.find("i.ajax-updating").remove();break;}},success:function(data,textStatus,jqXHR){var $new_row=$(data);if($new_row.hasClass('status_unknown')){var spinner_elm=$new_row.find("td.status_unknown:last");if($new_row.find('a.btn-action-required').length>0){spinner_elm.prepend($("
    ").addClass("action_required_img").append($("").attr("src","/static/dashboard/img/action_required.png")));}else{spinner_elm.prepend($("
    ").addClass("loading_gif").append($("").attr("src","/static/dashboard/img/loading.gif")));}} if($new_row.html()!=$row.html()){if($row.find(':checkbox').is(':checked')){$new_row.find(':checkbox').prop('checked',true);} $row.replaceWith($new_row);$table.trigger("update");$table.removeAttr('decay_constant');}},complete:function(jqXHR,textStatus){horizon.datatables.validate_button();}});});if(decay_constant===undefined){decay_constant=1;}else{decay_constant++;} $table.attr('decay_constant',decay_constant);next_poll=interval*decay_constant;if(next_poll>30*1000)next_poll=30*1000;setTimeout(horizon.datatables.update,next_poll);}},validate_button:function(){$("form").each(function(i){var checkboxes=$(this).find(":checkbox");if(!checkboxes.length){return;} if(!checkboxes.filter(":checked").length){$(this).find(".table_actions button.btn-danger").addClass("disabled");}});}};horizon.datatables.confirm=function(action){var $action=$(action),$modal_parent=$(action).closest('.modal'),name_array=new Array(),closest_table_id,action_string,name_string,title,body,modal,form;if($action.hasClass("disabled")){return;} -action_string=$action.text();name_string="";closest_table_id=$(action).closest("table").attr("id");if($("#"+closest_table_id+" tr[data-display]").length>0){name_string=gettext("You have selected ");if($(action).closest("div").hasClass("table_actions")){$("#"+closest_table_id+" tr[data-display]").has(":checkbox:checked").each(function(){name_array.push(" \""+$(this).attr("data-display")+"\"");});name_array.join(", ");name_string+=name_array.toString()+". ";}else{name_string+=" \""+$(action).closest("tr").attr("data-display")+"\". ";}} -title=gettext("Confirm ")+action_string;body=name_string+gettext("Please confirm your selection. This action cannot be undone.");modal=horizon.modals.create(title,body,action_string);modal.modal();if($modal_parent.length){var child_backdrop=modal.next('.modal-backdrop');child_backdrop.css('z-index',$modal_parent.css('z-index')+10);modal.css('z-index',child_backdrop.css('z-index')+10);} +action_string=$action.text();name_string="";closest_table_id=$(action).closest("table").attr("id");if($("#"+closest_table_id+" tr[data-display]").length>0){if($(action).closest("div").hasClass("table_actions")){$("#"+closest_table_id+" tr[data-display]").has(":checkbox:checked").each(function(){name_array.push(" \""+$(this).attr("data-display")+"\"");});name_array.join(", ");name_string=name_array.toString();}else{name_string=" \""+$(action).closest("tr").attr("data-display")+"\"";} +name_string=interpolate(gettext("You have selected %s. "),[name_string]);} +title=interpolate(gettext("Confirm %s"),[action_string]);body=name_string+gettext("Please confirm your selection. This action cannot be undone.");modal=horizon.modals.create(title,body,action_string);modal.modal();if($modal_parent.length){var child_backdrop=modal.next('.modal-backdrop');child_backdrop.css('z-index',$modal_parent.css('z-index')+10);modal.css('z-index',child_backdrop.css('z-index')+10);} modal.find('.btn-primary').click(function(evt){form=$action.closest('form');form.append("");form.submit();modal.modal('hide');horizon.modals.modal_spinner(gettext("Working"));return false;});return modal;};$.tablesorter.addParser({id:'sizeSorter',is:function(s){return false;},format:function(s){var sizes={BYTE:0,B:0,KB:1,MB:2,GB:3,TB:4,PB:5};var regex=/([\d\.,]+)\s*(byte|B|KB|MB|GB|TB|PB)+/i;var match=s.match(regex);if(match&&match.length===3){return parseFloat(match[1])*Math.pow(1024,sizes[match[2].toUpperCase()]);} -return parseInt(s,10);},type:'numeric'});horizon.datatables.update_footer_count=function(el,modifier){var $el=$(el),$browser,$footer,row_count,footer_text_template,footer_text;if(!modifier){modifier=0;} +return parseInt(s,10);},type:'numeric'});horizon.datatables.disable_buttons=function(){$("table .table_actions").on("click",".btn.disabled",function(event){event.preventDefault();event.stopPropagation();});};horizon.datatables.update_footer_count=function(el,modifier){var $el=$(el),$browser,$footer,row_count,footer_text_template,footer_text;if(!modifier){modifier=0;} $browser=$el.closest("#browser_wrapper");if($browser.length){$footer=$browser.find('.tfoot span.content_table_count');} else{$footer=$el.find('tfoot span.table_count');} -row_count=$el.find('tbody tr:visible').length+modifier-$el.find('.empty').length;footer_text_template=ngettext("Displaying %s item","Displaying %s items",row_count);footer_text=interpolate(footer_text_template,[row_count]);$footer.text(footer_text);};horizon.datatables.add_no_results_row=function(table){template=horizon.templates.compiled_templates["#empty_row_template"];if(!table.find("tbody tr:visible").length&&typeof(template)!=="undefined"){colspan=table.find("th[colspan]").attr('colspan');params={"colspan":colspan};table.find("tbody").append(template.render(params));}};horizon.datatables.remove_no_results_row=function(table){table.find("tr.empty").remove();};horizon.datatables.fix_row_striping=function(table){table.trigger('applyWidgetId',['zebra']);};horizon.datatables.set_table_sorting=function(parent){$(parent).find("table.datatable").each(function(){var $table=$(this),header_options={};if($table.find('tbody tr').not('.empty').length>1){$table.find("thead th[class!='table_header']").each(function(i,val){$th=$(this);if(!$th.hasClass('sortable')){header_options[i]={sorter:false};}else if($th.data('type')=='size'){header_options[i]={sorter:'sizeSorter'};}else if($th.data('type')=='ip'){header_options[i]={sorter:'ipAddress'};}});$table.tablesorter({headers:header_options,selectorHeaders:"thead th[class!='table_header']",cancelSelection:false});}});};horizon.datatables.add_table_checkboxes=function(parent){$(parent).find('table thead .multi_select_column').each(function(index,thead){if(!$(thead).find(':checkbox').length&&$(thead).parents('table').find('tbody :checkbox').length){$(thead).append('');}});};horizon.datatables.set_table_query_filter=function(parent){$(parent).find('table').each(function(index,elm){var input=$($(elm).find('div.table_search input')),table_selector;if(input.length>0){input.on('keypress',function(evt){if(evt.keyCode===13){return false;}});input.next('button.btn-search').on('click keypress',function(evt){return false;});table_selector='table#'+$(elm).attr('id');input.quicksearch(table_selector+' tbody tr',{'delay':300,'loader':'span.loading','bind':'keyup click','show':this.show,'hide':this.hide,onBefore:function(){var table=$(table_selector);horizon.datatables.remove_no_results_row(table);},onAfter:function(){var template,table,colspan,params;table=$(table_selector);horizon.datatables.update_footer_count(table);horizon.datatables.add_no_results_row(table);horizon.datatables.fix_row_striping(table);},prepareQuery:function(val){return new RegExp(val,"i");},testQuery:function(query,txt,_row){return query.test($(_row).find('td:not(.hidden):not(.actions_column)').text());}});}});};horizon.datatables.set_table_fixed_filter=function(parent){$(parent).find('table.datatable').each(function(index,elm){$(elm).on('click','div.table_filter button',function(evt){var table=$(elm);var category=$(this).val();evt.preventDefault();horizon.datatables.remove_no_results_row(table);table.find('tbody tr').hide();table.find('tbody tr.category-'+category).show();horizon.datatables.update_footer_count(table);horizon.datatables.add_no_results_row(table);horizon.datatables.fix_row_striping(table);});$(elm).find('div.table_filter button').each(function(i,button){if($(button).text().indexOf(' (0)')==-1){$(button).addClass('active');$(button).trigger('click');return false;}});});};horizon.addInitFunction(function(){horizon.datatables.validate_button();$('table.datatable').each(function(idx,el){horizon.datatables.update_footer_count($(el),0);});$('div.table_wrapper, #modal_wrapper').on('click','table thead .multi_select_column :checkbox',function(evt){var $this=$(this),$table=$this.closest('table'),is_checked=$this.prop('checked'),checkboxes=$table.find('tbody :visible:checkbox');checkboxes.prop('checked',is_checked);});$("div.table_wrapper, #modal_wrapper").on("click",'table tbody :checkbox',function(evt){var $table=$(this).closest('table');var $multi_select_checkbox=$table.find('thead .multi_select_column :checkbox');var any_unchecked=$table.find("tbody :checkbox").not(":checked");$multi_select_checkbox.prop('checked',!(any_unchecked.length>0));});$("div.table_wrapper, #modal_wrapper").on("click",':checkbox',function(evt){var $form=$(this).closest("form");var any_checked=$form.find("tbody :checkbox").is(":checked");if(any_checked){$form.find(".table_actions button.btn-danger").removeClass("disabled");}else{$form.find(".table_actions button.btn-danger").addClass("disabled");}});horizon.datatables.add_table_checkboxes($('body'));horizon.datatables.set_table_sorting($('body'));horizon.datatables.set_table_query_filter($('body'));horizon.datatables.set_table_fixed_filter($('body'));horizon.modals.addModalInitFunction(horizon.datatables.add_table_checkboxes);horizon.modals.addModalInitFunction(horizon.datatables.set_table_sorting);horizon.modals.addModalInitFunction(horizon.datatables.set_table_query_filter);horizon.modals.addModalInitFunction(horizon.datatables.set_table_fixed_filter);horizon.datatables.update();});horizon.tabs={};horizon.tabs.load_tab=function(evt){var $this=$(this),tab_id=$this.attr('data-target'),tab_pane=$(tab_id);tab_pane.append(""+gettext("Loading")+"…");tab_pane.spin(horizon.conf.spinner_options.inline);$(tab_pane.data().spinner.el).css('top','9px');$(tab_pane.data().spinner.el).css('left','15px');if(window.location.search.length>0){tab_pane.load(window.location.search+"&tab="+tab_id.replace('#',''));}else{tab_pane.load("?tab="+tab_id.replace('#',''));} -$this.attr("data-loaded","true");evt.preventDefault();};horizon.addInitFunction(function(){var data=horizon.cookies.read('tabs');$(".tab-content").find(".js-tab-pane").addClass("tab-pane");horizon.modals.addModalInitFunction(function(el){$(el).find(".js-tab-pane").addClass("tab-pane");});$(document).on("show",".ajax-tabs a[data-loaded='false']",horizon.tabs.load_tab);$(document).on("shown",".nav-tabs a[data-toggle='tab']",function(evt){var $tab=$(evt.target),$content=$($(evt.target).attr('data-target'));$content.find("table.datatable").each(function(){horizon.datatables.update_footer_count($(this));});horizon.cookies.update("tabs",$tab.closest(".nav-tabs").attr("id"),$tab.attr('data-target'));});$(".nav-tabs[data-sticky-tabs='sticky']").each(function(index,item){var $this=$(this),id=$this.attr("id"),active_tab=data[id];if(active_tab&&window.location.search.indexOf("tab=")<0){$this.find("a[data-target='"+active_tab+"']").tab('show');}});$(document).on("keydown",".tab-pane :input:visible:last",function(evt){var $this=$(this),next_pane=$this.closest(".tab-pane").next(".tab-pane");if(evt.which===9&&!event.shiftKey&&next_pane.length){evt.preventDefault();$(".nav-tabs a[data-target='#"+next_pane.attr("id")+"']").tab('show');}});$(document).on("keydown",".tab-pane :input:visible:first",function(evt){var $this=$(this),prev_pane=$this.closest(".tab-pane").prev(".tab-pane");if(event.shiftKey&&evt.which===9&&prev_pane.length){evt.preventDefault();$(".nav-tabs a[data-target='#"+prev_pane.attr("id")+"']").tab('show');prev_pane.find(":input:last").focus();console.log(prev_pane);}});$(document).on("focus",".tab-content :input",function(){var $this=$(this),tab_pane=$this.closest(".tab-pane"),tab_id=tab_pane.attr('id');if(!tab_pane.hasClass("active")){$(".nav-tabs a[data-target='#"+tab_id+"']").tab('show');}});});horizon.templates={template_ids:["#modal_template","#empty_row_template","#alert_message_template","#spinner-modal","#project_user_template"],compiled_templates:{}};horizon.templates.compile_templates=function(){$.each(horizon.templates.template_ids,function(ind,template_id){horizon.templates.compiled_templates[template_id]=Hogan.compile($(template_id).html());});};horizon.addInitFunction(function(){horizon.templates.compile_templates();});horizon.user={init:function(){$("#id_password").change(function(){if($("#id_confirm_password").val()!=""){horizon.user.check_passwords_match();}});$("#id_confirm_password").change(function(){horizon.user.check_passwords_match();});},check_passwords_match:function(){var row=$("label[for='id_confirm_password']");var error_id="id_confirm_password_error";var msg=""+gettext("Passwords do not match.")+"";var password=$("#id_password").val();var confirm_password=$("#id_confirm_password").val();if(password!=confirm_password&&$("#"+error_id).length==0){$(row).parent().addClass("error");$(row).after(msg);}else if(password==confirm_password){$(row).parent().removeClass("error");$("#"+error_id).remove();}}};horizon.utils={log:function(){if(horizon.conf.debug&&typeof(console)!=="undefined"&&typeof(console.log)!=="undefined"){console.log(arguments);}},capitalize:function(string){return string.charAt(0).toUpperCase()+string.slice(1);},humanizeNumbers:function(number){return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");},truncate:function(string,size,includeEllipsis){if(string.length>size){if(includeEllipsis){return string.substring(0,(size-3))+"…";}else{return string.substring(0,size);}}else{return string;}}};horizon.projects={current_membership:[],users:[],roles:[],has_roles:true,default_role_id:"",get_field_id:function(id_string){return id_string.slice(id_string.lastIndexOf("_")+1);},get_role_element:function(role_id){return $('select[id^="id_role_'+role_id+'"]');},get_user_element:function(user_id){return $('li[data-user-id$='+user_id+']').parent();},init_properties:function(){horizon.projects.has_roles=$(".project_membership").data('show-roles')!=="no";horizon.projects.default_role_id=$('#id_default_role').attr('value');horizon.projects.init_user_list();horizon.projects.init_role_list();horizon.projects.init_current_membership();},init_user_list:function(){horizon.projects.users=[];_.each($(this.get_role_element("")).find("option"),function(option){horizon.projects.users[option.value]=option.text;});},init_role_list:function(){horizon.projects.roles=[];_.each($('label[for^="id_role_"]'),function(role){var id=horizon.projects.get_field_id($(role).attr('for'));horizon.projects.roles[id]=$(role).text();});},init_current_membership:function(){horizon.projects.current_membership=[];var members_list=[];var role_name,role_id,selected_members;_.each(this.get_role_element(''),function(value,key){role_id=horizon.projects.get_field_id($(value).attr('id'));role_name=$('label[for="id_role_'+role_id+'"]').text();selected_members=$(value).find("option:selected");members_list=[];if(selected_members){_.each(selected_members,function(member){members_list.push(member.value);});} -horizon.projects.current_membership[role_id]=members_list;});},get_user_roles:function(user_id){var roles=[];for(var role in horizon.projects.current_membership){if($.inArray(user_id,horizon.projects.current_membership[role])>=0){roles.push(role);}} -return roles;},update_role_lists:function(role_id,new_list){this.get_role_element(role_id).val(new_list);horizon.projects.current_membership[role_id]=new_list;},remove_user:function(user_id,role_id,role_list){var index=role_list.indexOf(user_id);if(index>=0){role_list.splice(index,1);horizon.projects.update_role_lists(role_id,role_list);}},remove_user_from_role:function(user_id,role_id){var role_list;if(role_id){role_list=horizon.projects.current_membership[role_id];horizon.projects.remove_user(user_id,role_id,role_list);} -else{for(var role in horizon.projects.current_membership){role_list=horizon.projects.current_membership[role];horizon.projects.remove_user(user_id,role,role_list);}}},add_user_to_role:function(user_id,role_id){var role_list=horizon.projects.current_membership[role_id];role_list.push(user_id);horizon.projects.update_role_lists(role_id,role_list);},update_user_role_dropdown:function(user_id,role_ids,user_el){if(typeof(role_ids)==='undefined'){role_ids=horizon.projects.get_user_roles(user_id);} -if(typeof(user_el)==='undefined'){user_el=horizon.projects.get_user_element(user_id);} -var $dropdown=user_el.find("li.member").siblings('.dropdown');var $role_items=$dropdown.children('.role_dropdown').children('li');$role_items.each(function(idx,el){if(_.contains(role_ids,$(el).data('role-id'))){$(el).addClass('selected');}else{$(el).removeClass('selected');}});var $roles_display=$dropdown.children('.dropdown-toggle').children('.roles_display');var roles_to_display=[];for(var i=0;i0){$(".project_members").append(this.generate_user_element(user_name,user_id,role_ids,"-"));} -else{$(".available_users").append(this.generate_user_element(user_name,user_id,role_ids,"+"));}} -horizon.projects.detect_no_results();},update_membership:function(){$(".available_users, .project_members").on('click',".btn-group a[href='#add_remove']",function(evt){evt.preventDefault();var available=$(".available_users").has($(this)).length;var user_id=horizon.projects.get_field_id($(this).parent().siblings().attr('data-user-id'));var user_el=$(this).parent().parent();if(available){var default_role=horizon.projects.default_role_id;$(this).text("-");$(".project_members").append(user_el);horizon.projects.add_user_to_role(user_id,default_role);if(horizon.projects.has_roles){$(this).parent().siblings(".role_options").show();horizon.projects.update_user_role_dropdown(user_id,[default_role],user_el);}} -else{$(this).text("+");$(this).parent().siblings(".role_options").hide();$(".available_users").append(user_el);horizon.projects.remove_user_from_role(user_id);} -horizon.projects.list_filtering();horizon.projects.detect_no_results();$("input.filter").val("");});},detect_no_results:function(){$('.filterable').each(function(){var filter=$(this).find('ul').attr('class');if(!$('.'+filter).children('ul').length){$('#no_'+filter).show();$("input[id='"+filter+"']").attr('disabled','disabled');} -else{$('#no_'+filter).hide();$("input[id='"+filter+"']").removeAttr('disabled');}});},select_member_role:function(){$(".available_users, .project_members").on('click','.role_dropdown li',function(evt){evt.preventDefault();evt.stopPropagation();var new_role_id=$(this).attr("data-role-id");var id_str=$(this).parent().parent().siblings(".member").attr("data-user-id");var user_id=horizon.projects.get_field_id(id_str);if($(this).hasClass('selected')){$(this).removeClass('selected');horizon.projects.remove_user_from_role(user_id,new_role_id);}else{$(this).addClass('selected');horizon.projects.add_user_to_role(user_id,new_role_id);} -horizon.projects.update_user_role_dropdown(user_id);});},add_new_user:function(){$("select[id='id_new_user']").on('change',function(evt){var user_name=$(this).find("option").text();var user_id=$(this).find("option").attr("value");var default_role_id=horizon.projects.default_role_id;$(".project_members").append(horizon.projects.generate_user_element(user_name,user_id,[default_role_id],"-"));horizon.projects.users[user_id]=user_name;$("select[multiple='multiple']").append("");horizon.projects.add_user_to_role(user_id,default_role_id);$(this).text("");horizon.projects.list_filtering();horizon.projects.detect_no_results();$("input.filter").val("");$(".project_members .btn-group").removeClass('last_stripe');$(".project_members .btn-group:last").addClass('last_stripe');});},add_new_user_styling:function(){var add_user_el=$("label[for='id_new_user']").parent();$(add_user_el).find("select").hide();$("#add_user").append($(add_user_el));$(add_user_el).addClass("add_user");$(add_user_el).find("label, .input").addClass("add_user_btn");},fix_stripes:function(){$('.fake_table').each(function(){var filter="."+$(this).attr('id');var visible=" .btn-group:visible";var even=" .btn-group:visible:even";var last=" .btn-group:visible:last";$(filter+visible).removeClass('dark_stripe');$(filter+visible).addClass('light_stripe');$(filter+even).removeClass('light_stripe');$(filter+even).addClass('dark_stripe');$(filter+visible).removeClass('last_stripe');$(filter+last).addClass('last_stripe');});},list_filtering:function(){$('input.filter').unbind();$('.filterable').each(function(){var filter=$(this).children().children('ul').attr('class');var input=$("input[id='"+filter+"']");input.quicksearch('ul.'+filter+' ul li span.user_name',{'delay':200,'loader':'span.loading','show':function(){$(this).parent().parent().show();if(filter=="available_users"){$(this).parent('.dropdown-toggle').hide();}},'hide':function(){$(this).parent().parent().hide();},'noResults':'ul#no_'+filter,'onAfter':function(){horizon.projects.fix_stripes();},'prepareQuery':function(val){return new RegExp(val,"i");},'testQuery':function(query,txt,span){if($(input).attr('id')==filter){$(input).prev().removeAttr('disabled');return query.test($(span).text());} +row_count=$el.find('tbody tr:visible').length+modifier-$el.find('.empty').length;footer_text_template=ngettext("Displaying %s item","Displaying %s items",row_count);footer_text=interpolate(footer_text_template,[row_count]);$footer.text(footer_text);return row_count;};horizon.datatables.add_no_results_row=function(table){template=horizon.templates.compiled_templates["#empty_row_template"];if(!table.find("tbody tr:visible").length&&typeof(template)!=="undefined"){colspan=table.find("th[colspan]").attr('colspan');params={"colspan":colspan};table.find("tbody").append(template.render(params));}};horizon.datatables.remove_no_results_row=function(table){table.find("tr.empty").remove();};horizon.datatables.fix_row_striping=function(table){table.trigger('applyWidgetId',['zebra']);};horizon.datatables.set_table_sorting=function(parent){$(parent).find("table.datatable").each(function(){var $table=$(this),header_options={};if($table.find('tbody tr').not('.empty').length>1){$table.find("thead th[class!='table_header']").each(function(i,val){$th=$(this);if(!$th.hasClass('sortable')){header_options[i]={sorter:false};}else if($th.data('type')=='size'){header_options[i]={sorter:'sizeSorter'};}else if($th.data('type')=='ip'){header_options[i]={sorter:'ipAddress'};}});$table.tablesorter({headers:header_options,widgets:['zebra'],selectorHeaders:"thead th[class!='table_header']",cancelSelection:false});}});};horizon.datatables.add_table_checkboxes=function(parent){$(parent).find('table thead .multi_select_column').each(function(index,thead){if(!$(thead).find(':checkbox').length&&$(thead).parents('table').find('tbody :checkbox').length){$(thead).append('');}});};horizon.datatables.set_table_query_filter=function(parent){$(parent).find('table').each(function(index,elm){var input=$($(elm).find('div.table_search input')),table_selector;if(input.length>0){input.on('keypress',function(evt){if(evt.keyCode===13){return false;}});input.next('button.btn-search').on('click keypress',function(evt){return false;});table_selector='table#'+$(elm).attr('id');input.quicksearch(table_selector+' tbody tr',{'delay':300,'loader':'span.loading','bind':'keyup click','show':this.show,'hide':this.hide,onBefore:function(){var table=$(table_selector);horizon.datatables.remove_no_results_row(table);},onAfter:function(){var template,table,colspan,params;table=$(table_selector);horizon.datatables.update_footer_count(table);horizon.datatables.add_no_results_row(table);horizon.datatables.fix_row_striping(table);},prepareQuery:function(val){return new RegExp(val,"i");},testQuery:function(query,txt,_row){return query.test($(_row).find('td:not(.hidden):not(.actions_column)').text());}});}});};horizon.datatables.set_table_fixed_filter=function(parent){$(parent).find('table.datatable').each(function(index,elm){$(elm).on('click','div.table_filter button',function(evt){var table=$(elm);var category=$(this).val();evt.preventDefault();horizon.datatables.remove_no_results_row(table);table.find('tbody tr').hide();table.find('tbody tr.category-'+category).show();horizon.datatables.update_footer_count(table);horizon.datatables.add_no_results_row(table);horizon.datatables.fix_row_striping(table);});$(elm).find('div.table_filter button').each(function(i,button){if($(button).text().indexOf(' (0)')==-1){$(button).addClass('active');$(button).trigger('click');return false;}});});};horizon.addInitFunction(function(){horizon.datatables.validate_button();horizon.datatables.disable_buttons();$('table.datatable').each(function(idx,el){horizon.datatables.update_footer_count($(el),0);});$('div.table_wrapper, #modal_wrapper').on('click','table thead .multi_select_column :checkbox',function(evt){var $this=$(this),$table=$this.closest('table'),is_checked=$this.prop('checked'),checkboxes=$table.find('tbody :visible:checkbox');checkboxes.prop('checked',is_checked);});$("div.table_wrapper, #modal_wrapper").on("click",'table tbody :checkbox',function(evt){var $table=$(this).closest('table');var $multi_select_checkbox=$table.find('thead .multi_select_column :checkbox');var any_unchecked=$table.find("tbody :checkbox").not(":checked");$multi_select_checkbox.prop('checked',!(any_unchecked.length>0));});$("div.table_wrapper, #modal_wrapper").on("click",':checkbox',function(evt){var $form=$(this).closest("form");var any_checked=$form.find("tbody :checkbox").is(":checked");if(any_checked){$form.find(".table_actions button.btn-danger").removeClass("disabled");}else{$form.find(".table_actions button.btn-danger").addClass("disabled");}});horizon.datatables.add_table_checkboxes($('body'));horizon.datatables.set_table_sorting($('body'));horizon.datatables.set_table_query_filter($('body'));horizon.datatables.set_table_fixed_filter($('body'));horizon.modals.addModalInitFunction(horizon.datatables.add_table_checkboxes);horizon.modals.addModalInitFunction(horizon.datatables.set_table_sorting);horizon.modals.addModalInitFunction(horizon.datatables.set_table_query_filter);horizon.modals.addModalInitFunction(horizon.datatables.set_table_fixed_filter);horizon.datatables.update();});horizon.tabs={};horizon.tabs.load_tab=function(evt){var $this=$(this),tab_id=$this.attr('data-target'),tab_pane=$(tab_id);tab_pane.append(""+gettext("Loading")+"…");tab_pane.spin(horizon.conf.spinner_options.inline);$(tab_pane.data().spinner.el).css('top','9px');$(tab_pane.data().spinner.el).css('left','15px');if(window.location.search.length>0){tab_pane.load(window.location.search+"&tab="+tab_id.replace('#',''));}else{tab_pane.load("?tab="+tab_id.replace('#',''));} +$this.attr("data-loaded","true");evt.preventDefault();};horizon.addInitFunction(function(){var data=horizon.cookies.read('tabs');$(".tab-content").find(".js-tab-pane").addClass("tab-pane");horizon.modals.addModalInitFunction(function(el){$(el).find(".js-tab-pane").addClass("tab-pane");});$(document).on("show",".ajax-tabs a[data-loaded='false']",horizon.tabs.load_tab);$(document).on("shown",".nav-tabs a[data-toggle='tab']",function(evt){var $tab=$(evt.target),$content=$($(evt.target).attr('data-target'));$content.find("table.datatable").each(function(){horizon.datatables.update_footer_count($(this));});horizon.cookies.update("tabs",$tab.closest(".nav-tabs").attr("id"),$tab.attr('data-target'));});$(".nav-tabs[data-sticky-tabs='sticky']").each(function(index,item){var $this=$(this),id=$this.attr("id"),active_tab=data[id];if(active_tab&&window.location.search.indexOf("tab=")<0){$this.find("a[data-target='"+active_tab+"']").tab('show');}});$(document).on("keydown",".tab-pane :input:visible:last",function(evt){var $this=$(this),next_pane=$this.closest(".tab-pane").next(".tab-pane");if(evt.which===9&&!event.shiftKey&&next_pane.length){evt.preventDefault();$(".nav-tabs a[data-target='#"+next_pane.attr("id")+"']").tab('show');}});$(document).on("keydown",".tab-pane :input:visible:first",function(evt){var $this=$(this),prev_pane=$this.closest(".tab-pane").prev(".tab-pane");if(event.shiftKey&&evt.which===9&&prev_pane.length){evt.preventDefault();$(".nav-tabs a[data-target='#"+prev_pane.attr("id")+"']").tab('show');prev_pane.find(":input:last").focus();console.log(prev_pane);}});$(document).on("focus",".tab-content :input",function(){var $this=$(this),tab_pane=$this.closest(".tab-pane"),tab_id=tab_pane.attr('id');if(!tab_pane.hasClass("active")){$(".nav-tabs a[data-target='#"+tab_id+"']").tab('show');}});});horizon.templates={template_ids:["#modal_template","#empty_row_template","#alert_message_template","#spinner-modal","#membership_template"],compiled_templates:{}};horizon.templates.compile_templates=function(){$.each(horizon.templates.template_ids,function(ind,template_id){horizon.templates.compiled_templates[template_id]=Hogan.compile($(template_id).html());});};horizon.addInitFunction(function(){horizon.templates.compile_templates();});horizon.user={init:function(){$("#id_password").change(function(){if($("#id_confirm_password").val()!=""){horizon.user.check_passwords_match();}});$("#id_confirm_password").change(function(){horizon.user.check_passwords_match();});},check_passwords_match:function(){var row=$("label[for='id_confirm_password']");var error_id="id_confirm_password_error";var msg=""+gettext("Passwords do not match.")+"";var password=$("#id_password").val();var confirm_password=$("#id_confirm_password").val();if(password!=confirm_password&&$("#"+error_id).length==0){$(row).parent().addClass("error");$(row).after(msg);}else if(password==confirm_password){$(row).parent().removeClass("error");$("#"+error_id).remove();}}};horizon.utils={log:function(){if(horizon.conf.debug&&typeof(console)!=="undefined"&&typeof(console.log)!=="undefined"){console.log(arguments);}},capitalize:function(string){return string.charAt(0).toUpperCase()+string.slice(1);},humanizeNumbers:function(number){return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");},truncate:function(string,size,includeEllipsis){if(string.length>size){if(includeEllipsis){return string.substring(0,(size-3))+"…";}else{return string.substring(0,size);}}else{return string;}}};horizon.membership={current_membership:[],data:[],roles:[],has_roles:[],default_role_id:[],get_field_id:function(id_string){return id_string.slice(id_string.lastIndexOf("_")+1);},get_role_element:function(step_slug,role_id){return $('select[id^="id_'+step_slug+'_role_'+role_id+'"]');},get_member_element:function(step_slug,data_id){return $('li[data-'+step_slug+'-id$='+data_id+']').parent();},init_properties:function(step_slug){horizon.membership.has_roles[step_slug]=$("."+step_slug+"_membership").data('show-roles')!=="False";horizon.membership.default_role_id[step_slug]=$('#id_default_'+step_slug+'_role').attr('value');horizon.membership.init_data_list(step_slug);horizon.membership.init_role_list(step_slug);horizon.membership.init_current_membership(step_slug);},init_data_list:function(step_slug){horizon.membership.data[step_slug]=[];_.each($(this.get_role_element(step_slug,"")).find("option"),function(option){horizon.membership.data[step_slug][option.value]=option.text;});},init_role_list:function(step_slug){horizon.membership.roles[step_slug]=[];_.each($('label[for^="id_'+step_slug+'_role_"]'),function(role){var id=horizon.membership.get_field_id($(role).attr('for'));horizon.membership.roles[step_slug][id]=$(role).text();});},init_current_membership:function(step_slug){horizon.membership.current_membership[step_slug]=[];var members_list=[];var role_name,role_id,selected_members;_.each(this.get_role_element(step_slug,''),function(value,key){role_id=horizon.membership.get_field_id($(value).attr('id'));role_name=$('label[for="id_'+step_slug+'_role_'+role_id+'"]').text();selected_members=$(value).find("option:selected");members_list=[];if(selected_members){_.each(selected_members,function(member){members_list.push(member.value);});} +horizon.membership.current_membership[step_slug][role_id]=members_list;});},get_member_roles:function(step_slug,data_id){var roles=[];for(var role in horizon.membership.current_membership[step_slug]){if($.inArray(data_id,horizon.membership.current_membership[step_slug][role])>=0){roles.push(role);}} +return roles;},update_role_lists:function(step_slug,role_id,new_list){this.get_role_element(step_slug,role_id).val(new_list);horizon.membership.current_membership[step_slug][role_id]=new_list;},remove_member:function(step_slug,data_id,role_id,role_list){var index=role_list.indexOf(data_id);if(index>=0){role_list.splice(index,1);horizon.membership.update_role_lists(step_slug,role_id,role_list);}},remove_member_from_role:function(step_slug,data_id,role_id){var role_list;if(role_id){role_list=horizon.membership.current_membership[step_slug][role_id];horizon.membership.remove_member(step_slug,data_id,role_id,role_list);} +else{for(var role in horizon.membership.current_membership[step_slug]){role_list=horizon.membership.current_membership[step_slug][role];horizon.membership.remove_member(step_slug,data_id,role,role_list);}}},add_member_to_role:function(step_slug,data_id,role_id){var role_list=horizon.membership.current_membership[step_slug][role_id];role_list.push(data_id);horizon.membership.update_role_lists(step_slug,role_id,role_list);},update_member_role_dropdown:function(step_slug,data_id,role_ids,member_el){if(typeof(role_ids)==='undefined'){role_ids=horizon.membership.get_member_roles(step_slug,data_id);} +if(typeof(member_el)==='undefined'){member_el=horizon.membership.get_member_element(step_slug,data_id);} +var $dropdown=member_el.find("li.member").siblings('.dropdown');var $role_items=$dropdown.children('.role_dropdown').children('li');$role_items.each(function(idx,el){if(_.contains(role_ids,$(el).data('role-id'))){$(el).addClass('selected');}else{$(el).removeClass('selected');}});var $roles_display=$dropdown.children('.dropdown-toggle').children('.roles_display');var roles_to_display=[];for(var i=0;i0){$("."+step_slug+"_members").append(this.generate_member_element(step_slug,display_name,data_id,role_ids,"-"));} +else{$(".available_"+step_slug).append(this.generate_member_element(step_slug,display_name,data_id,role_ids,"+"));}} +horizon.membership.detect_no_results(step_slug);},update_membership:function(step_slug){$(".available_"+step_slug+", ."+step_slug+"_members").on('click',".btn-group a[href='#add_remove']",function(evt){evt.preventDefault();var available=$(".available_"+step_slug).has($(this)).length;var data_id=horizon.membership.get_field_id($(this).parent().siblings().attr('data-'+step_slug+'-id'));var member_el=$(this).parent().parent();if(available){var default_role=horizon.membership.default_role_id[step_slug];$(this).text("-");$("."+step_slug+"_members").append(member_el);horizon.membership.add_member_to_role(step_slug,data_id,default_role);if(horizon.membership.has_roles[step_slug]){$(this).parent().siblings(".role_options").show();horizon.membership.update_member_role_dropdown(step_slug,data_id,[default_role],member_el);}} +else{$(this).text("+");$(this).parent().siblings(".role_options").hide();$(".available_"+step_slug).append(member_el);horizon.membership.remove_member_from_role(step_slug,data_id);} +horizon.membership.list_filtering(step_slug);horizon.membership.detect_no_results(step_slug);$("input."+step_slug+"_filter").val("");});},detect_no_results:function(step_slug){$('.'+step_slug+'_filterable').each(function(){var css_class=$(this).find('ul').attr('class');var filter=_.find(css_class.split(' '),function(val){return val.indexOf(step_slug)!=-1;});if(!$('.'+filter).children('ul').length){$('#no_'+filter).show();$("input[id='"+filter+"']").attr('disabled','disabled');} +else{$('#no_'+filter).hide();$("input[id='"+filter+"']").removeAttr('disabled');}});},select_member_role:function(step_slug){$(".available_"+step_slug+", ."+step_slug+"_members").on('click','.role_dropdown li',function(evt){evt.preventDefault();evt.stopPropagation();var new_role_id=$(this).attr("data-role-id");var id_str=$(this).parent().parent().siblings(".member").attr("data-"+step_slug+"-id");var data_id=horizon.membership.get_field_id(id_str);if($(this).hasClass('selected')){$(this).removeClass('selected');horizon.membership.remove_member_from_role(step_slug,data_id,new_role_id);}else{$(this).addClass('selected');horizon.membership.add_member_to_role(step_slug,data_id,new_role_id);} +horizon.membership.update_member_role_dropdown(step_slug,data_id);});},add_new_member:function(step_slug){$("select[id='id_new_"+step_slug+"']").on('change',function(evt){var display_name=$(this).find("option").text();var data_id=$(this).find("option").attr("value");var default_role_id=horizon.membership.default_role_id[step_slug];$("."+step_slug+"_members").append(horizon.membership.generate_member_element(step_slug,display_name,data_id,[default_role_id],"-"));horizon.membership.data[step_slug][data_id]=display_name;$("select[multiple='multiple']").append("");horizon.membership.add_member_to_role(step_slug,data_id,default_role_id);$(this).text("");horizon.membership.list_filtering(step_slug);horizon.membership.detect_no_results(step_slug);$("input.filter").val("");$("."+step_slug+"_members .btn-group").removeClass('last_stripe');$("."+step_slug+"_members .btn-group:last").addClass('last_stripe');});},add_new_member_styling:function(step_slug){var add_member_el=$("label[for='id_new_"+step_slug+"']").parent();$(add_member_el).find("select").hide();$("#add_"+step_slug).append($(add_member_el));$(add_member_el).addClass("add_"+step_slug);$(add_member_el).find("label, .input").addClass("add_"+step_slug+"_btn");},fix_stripes:function(step_slug){$('.fake_'+step_slug+'_table').each(function(){var filter="."+$(this).attr('id');var visible=" .btn-group:visible";var even=" .btn-group:visible:even";var last=" .btn-group:visible:last";$(filter+visible).removeClass('dark_stripe');$(filter+visible).addClass('light_stripe');$(filter+even).removeClass('light_stripe');$(filter+even).addClass('dark_stripe');$(filter+visible).removeClass('last_stripe');$(filter+last).addClass('last_stripe');});},list_filtering:function(step_slug){$('input.'+step_slug+'_filter').unbind();$('.'+step_slug+'_filterable').each(function(){var css_class=$(this).children().children('ul').attr('class');var filter=_.find(css_class.split(' '),function(val){return val.indexOf(step_slug)!=-1;});var input=$("input[id='"+filter+"']");input.quicksearch('ul.'+filter+' ul li span.display_name',{'delay':200,'loader':'span.loading','show':function(){$(this).parent().parent().show();if(filter=="available_"+step_slug){$(this).parent('.dropdown-toggle').hide();}},'hide':function(){$(this).parent().parent().hide();},'noResults':'ul#no_'+filter,'onAfter':function(){horizon.membership.fix_stripes(step_slug);},'prepareQuery':function(val){return new RegExp(val,"i");},'testQuery':function(query,txt,span){if($(input).attr('id')==filter){$(input).prev().removeAttr('disabled');return query.test($(span).text());} else -return true;}});});},workflow_init:function(modal){$(".tab-content, .workflow").addClass("dropdown_fix");$(modal).find('form').each(function(){var $form=$(this);if($form.find('div.project_membership').length==0){return;} -horizon.projects.init_properties();horizon.projects.generate_html();horizon.projects.update_membership();horizon.projects.select_member_role();horizon.projects.add_new_user();$form.find(".available_users .role_options").hide();if(!horizon.projects.has_roles){$form.find(".project_members .role_options").hide();} -$form.find("#update_project__update_members input").blur();$form.find('.project_membership').keydown(function(event){if(event.keyCode==13){event.preventDefault();return false;}});horizon.projects.add_new_user_styling();horizon.projects.list_filtering();horizon.projects.detect_no_results();$form.find('.fake_table').each(function(){var filter="."+$(this).attr('id');$(filter+' .btn-group:even').addClass('dark_stripe');$(filter+' .btn-group:last').addClass('last_stripe');});});}};horizon.network_topology={model:null,network_margin:270,topologyCanvas_padding:120,min_network_height:500,port_margin:20,device_initial_position:40,device_last_position:0,device_left_position:90,device_margin:20,device_min_height:45,port_initial_position:1,network_index:{},network_color_unit:0,network_saturation:1,network_lightness:0.7,reload_duration:10000,spinner:null,init:function(){var self=this;$("#topologyCanvas").spin(horizon.conf.spinner_options.modal);self.retrieve_network_info();setInterval(function(){self.retrieve_network_info();},self.reload_duration);},retrieve_network_info:function(){var self=this;if($("#networktopology").length===0){return;} -$.getJSON($("#networktopology").data("networktopology"),function(data){self.draw_graph(data);});},draw_loading:function(){$("#topologyCanvas").spin(horizon.conf.spinner_options.modal);},draw_graph:function(data){var canvas=$("#topologyCanvas");var networks=$("#topologyCanvas > .networks");var nodata=$("#topologyCanvas > .nodata");networks.show();nodata.hide();canvas.spin(false);networks.empty();this.model=data;this.device_last_position=this.device_initial_position;var network_elements=this.draw_networks();var router_elements=this.draw_routers();var server_elements=this.draw_servers();if((network_elements+router_elements+server_elements)<=0){networks.hide();nodata.show();}else{canvas.height(Math.max(this.device_last_position+this.topologyCanvas_padding,this.min_network_height));networks.width(this.model.networks.length*this.network_margin);}},network_color:function(network_id){var max_hue=360;var num_network=this.model.networks.length;if(num_network<=0){return;} -num_network++;var hue=Math.floor(max_hue/num_network*(this.network_index(network_id)+1));return this.hsv2rgb(hue,this.network_saturation,this.network_lightness);},hsv2rgb:function(h,s,v){var hi=Math.round(h/60)%6;var f=h/60-hi;var p=v*(1-s);var q=v*(1-f*s);var t=v*(1-(1-f)*s);switch(hi){case 0:r=v;g=t;b=p;break;case 1:r=q;g=v;b=p;break;case 2:r=p;g=v;b=t;break;case 3:r=p;g=q;b=v;break;case 4:r=t;g=p;b=v;break;case 5:r=v;g=p;b=q;break;} -return"rgb("+Math.round(r*255)+","+Math.round(g*255)+","+Math.round(b*255)+")";},draw_networks:function(){var self=this;var networks=$("#topologyCanvas > .networks");$.each(self.model.networks,function(index,network){var label=(network.name!="")?network.name:network.id;if(network['router:external']){label+=" (external) ";} -self.network_index[network.id]=index;var network_html=$("
    ").attr("id",network.id);var nicname_html=$("

    "+label+"

    "+self.select_cidr(network.id)+"
    ");if(network.url==undefined){nicname_html.addClass("nourl");}else{nicname_html.click(function(){window.location.href=network.url;});} -nicname_html.css({'background-color':self.network_color(network.id)}).appendTo(network_html);networks.append(network_html);});return self.model.networks.length;},select_cidr:function(network_id){var cidr=[];$.each(this.model.subnets,function(index,subnet){if(subnet.network_id!=network_id){return;} -cidr.push(subnet.cidr);});return cidr.join(', ');},draw_devices:function(type){var self=this;$.each(self.model[type+'s'],function(index,device){var id=device.id;var name=(device.name!="")?device.name:device.id;var ports=self.select_port(id);if(ports.length<=0){return;} -var main_port=self.select_main_port(ports);var parent_network=main_port.network_id;var device_html=$("
    ");device_html.attr('id',device.id).css({top:self.device_last_position,position:'absolute'}).append($(""+type+"")).click(function(e){e.stopPropagation();window.location.href=device.url;});var name_html=$("").html(device.name).attr('title',device.name).appendTo(device_html);var port_position=self.port_initial_position;$.each(ports,function(){var port=this;var port_html=self.port_html(port);port_position+=self.port_margin;self.port_css(port_html,port_position,parent_network,port.network_id);device_html.append(port_html);});port_position+=self.port_margin;device_html.css({height:Math.max(self.device_min_height,port_position)+"px"});self.device_last_position+=device_html.height()+self.device_margin;$("#"+parent_network).append(device_html);$('div.port span.ip').each(function(i,ip){$(ip).css('top','-'+$(ip).height()+'px');});});return self.model[type+'s'].length;},sum_port_length:function(network_id,ports){var self=this;var sum_port_length=0;var base_index=self.network_index(network_id);$.each(ports,function(index,port){sum_port_length+=base_index-self.network_index(port.network_id);});return sum_port_length;},select_main_port:function(ports){var main_port_index=0;var MAX_INT=4294967295;var min_port_length=MAX_INT;$.each(ports,function(index,port){port_length=horizon.network_topology.sum_port_length(port.network_id,ports) -if(port_length
    ');var ip_label="";$.each(port.fixed_ips,function(){ip_label+=this.ip_address+"
    ";}) -var ip_html=$('').html(ip_label);port_html.append(ip_html).css({'background-color':self.network_color(port.network_id)}).click(function(e){e.stopPropagation();if(port.url!=undefined){window.location.href=port.url;}});if(port.url==undefined){port_html.addClass("nourl");} -return port_html;},port_css:function(port_html,position,network_a,network_b){var self=this;var index_diff=self.network_index(network_a)-self.network_index(network_b);var width=self.network_margin*index_diff;var direction="left";if(width<0){direction="right";width+=self.network_margin;} -width=Math.abs(width)+self.device_left_position;var port_css={};port_css['width']=width+"px";port_css['top']=position+"px";port_css[direction]=(-width-3)+"px";port_html.addClass(direction).css(port_css);},network_index:function(network_id){return horizon.network_topology.network_index[network_id];}} -horizon.addInitFunction(function(){horizon.network_topology.init();});horizon.d3_pie_chart={w:100,h:100,r:45,bkgrnd:"#F2F2F2",frgrnd:"#006CCF",full:"#D0342B",nearlyfull:"orange",init:function(){var self=this;var pie_chart_data=$(".d3_pie_chart");self.chart=d3.selectAll(".d3_pie_chart");for(var i=0;i .network_container_small',normal:'#topology_template > .network_container_normal'},router_tmpl:{small:'#topology_template > .router_small',normal:'#topology_template > .router_normal'},instance_tmpl:{small:'#topology_template > .instance_small',normal:'#topology_template > .instance_normal'},balloon_tmpl:null,balloon_device_tmpl:null,balloon_port_tmpl:null,network_index:{},balloon_id:null,reload_duration:10000,draw_mode:'normal',network_height:0,previous_message:null,element_properties:{normal:{network_width:270,network_min_height:500,top_margin:80,default_height:50,margin:20,device_x:98.5,device_width:90,port_margin:16,port_height:6,port_width:82,port_text_margin:{x:6,y:-4},texts_bg_y:32,type_y:46,balloon_margin:{x:12,y:-12}},small:{network_width:100,network_min_height:400,top_margin:50,default_height:20,margin:30,device_x:47.5,device_width:20,port_margin:5,port_height:3,port_width:32.5,port_text_margin:{x:0,y:0},texts_bg_y:0,type_y:0,balloon_margin:{x:12,y:-30}},cidr_margin:5,device_name_max_size:9,device_name_suffix:'..'},init:function(){var self=this;$(self.svg_container).spin(horizon.conf.spinner_options.modal);if($('#networktopology').length===0){return;} +self.color=d3.scale.category10();self.balloon_tmpl=Hogan.compile($('#balloon_container').html());self.balloon_device_tmpl=Hogan.compile($('#balloon_device').html());self.balloon_port_tmpl=Hogan.compile($('#balloon_port').html());$(document).on('click','a.closeTopologyBalloon',function(e){e.preventDefault();self.delete_balloon();}).on('click','.topologyBalloon',function(e){e.stopPropagation();}).on('click','a.vnc_window',function(e){e.preventDefault();var vnc_window=window.open($(this).attr('href'),vnc_window,'width=760,height=560');self.delete_balloon();}).click(function(){self.delete_balloon();});$('.toggleView > .btn').click(function(){self.draw_mode=$(this).data('value');$('g.network').remove();$.cookie('ntp_draw_mode',self.draw_mode);self.data_convert();});$(window).on('message',function(e){var message=JSON.parse(e.originalEvent.data);if(self.previous_message!=message.message){horizon.alert(message.type,message.message);horizon.autoDismissAlerts();self.previous_message=message.message;self.delete_post_message(message.iframe_id);self.load_network_info();setTimeout(function(){self.previous_message=null;},10000);}});self.load_network_info();setInterval(function(){self.load_network_info();},self.reload_duration);},load_network_info:function(){var self=this;if($('#networktopology').length===0){return;} +$.getJSON($('#networktopology').data('networktopology')+'?'+$.now(),function(data){self.model=data;self.data_convert();});},select_draw_mode:function(){var self=this;var draw_mode=$.cookie('ntp_draw_mode');if(draw_mode&&(draw_mode=='normal'|draw_mode=='small')){self.draw_mode=draw_mode;}else{if(self.model.networks.length*self.element_properties.normal.network_width>$('#topologyCanvas').width()){self.draw_mode='small';}else{self.draw_mode='normal';} +$.cookie('ntp_draw_mode',self.draw_mode);} +$('.toggleView > .btn').each(function(){var $this=$(this);if($this.hasClass(self.draw_mode)){$this.addClass('active');}});},data_convert:function(){var self=this;var model=self.model;$.each(model.networks,function(index,network){self.network_index[network.id]=index;});self.select_draw_mode();var element_properties=self.element_properties[self.draw_mode];self.network_height=element_properties.top_margin;$.each([{model:model.routers,type:'router'},{model:model.servers,type:'instance'}],function(index,devices){var type=devices.type;var model=devices.model;$.each(model,function(index,device){device.type=type;device.ports=self.select_port(device.id);var hasports=(device.ports.length<=0)?false:true;device.parent_network=(hasports)?self.select_main_port(device.ports).network_id:self.model.networks[0].id;var height=element_properties.port_margin*(device.ports.length-1);device.height=(self.draw_mode=='normal'&&height>element_properties.default_height)?height:element_properties.default_height;device.pos_y=self.network_height;device.port_height=(self.draw_mode=='small'&&height>device.height)?1:element_properties.port_height;device.port_margin=(self.draw_mode=='small'&&height>device.height)?device.height/device.ports.length:element_properties.port_margin;self.network_height+=device.height+element_properties.margin;});});$.each(model.networks,function(index,network){network.devices=[];$.each([model.routers,model.servers],function(index,devices){$.each(devices,function(index,device){if(network.id==device.parent_network){network.devices.push(device);}});});});self.network_height+=element_properties.top_margin;self.network_height=(self.network_height>element_properties.network_min_height)?self.network_height:element_properties.network_min_height;self.draw_topology();},draw_topology:function(){var self=this;$(self.svg_container).spin(false);$(self.svg_container).removeClass('noinfo');if(self.model.networks.length<=0){$('g.network').remove();$(self.svg_container).addClass('noinfo');return;} +var svg=d3.select(self.svg);var element_properties=self.element_properties[self.draw_mode];svg.attr('width',self.model.networks.length*element_properties.network_width).attr('height',self.network_height);var network=svg.selectAll('g.network').data(self.model.networks);var network_enter=network.enter().append('g').attr('class','network').each(function(d,i){this.appendChild(d3.select(self.network_tmpl[self.draw_mode]).node().cloneNode(true));var $this=d3.select(this).select('.network-rect');if(d.url){var $this=d3.select(this).select('.network-rect');$this.on('mouseover',function(){$this.transition().style('fill',function(){return d3.rgb(self.network_color(d.id)).brighter(0.5)});}).on('mouseout',function(){$this.transition().style('fill',function(){return self.network_color(d.id)});}).on('click',function(){window.location.href=d.url;});}else{$this.classed('nourl',true);}});network.attr('id',function(d){return'id_'+d.id;}).attr('transform',function(d,i){return'translate('+element_properties.network_width*i+','+0+')'}).select('.network-rect').attr('height',function(d){return self.network_height}).style('fill',function(d){return self.network_color(d.id)});network.select('.network-name').attr('x',function(d){return self.network_height/2}).text(function(d){return d.name;});network.select('.network-cidr').attr('x',function(d){return self.network_height-self.element_properties.cidr_margin}).text(function(d){var cidr=$.map(d.subnets,function(n,i){return n.cidr;});return cidr.join(', ');});network.exit().remove();var device=network.selectAll('g.device').data(function(d){return d.devices;});var device_enter=device.enter().append("g").attr('class','device').each(function(d,i){var device_template=self[d.type+'_tmpl'][self.draw_mode];this.appendChild(d3.select(device_template).node().cloneNode(true));});device_enter.on('mouseenter',function(d){var $this=$(this);self.show_balloon(d,$this);}).on('click',function(){d3.event.stopPropagation();});device.attr('id',function(d){return'id_'+d.id;}).attr('transform',function(d,i){return'translate('+element_properties.device_x+','+d.pos_y+')';}).select('.frame').attr('height',function(d){return d.height;});device.select('.texts_bg').attr('y',function(d){return element_properties.texts_bg_y+d.height-element_properties.default_height;});device.select('.type').attr('y',function(d){return element_properties.type_y+d.height-element_properties.default_height;});device.select('.name').text(function(d){return self.string_truncate(d.name);});device.each(function(d){if(d.status=='BUILD'){d3.select(this).classed('loading',true);}else if(d.task=='deleting'){d3.select(this).classed('loading',true);if('bl_'+d.id==self.balloon_id){self.delete_balloon();}}else{d3.select(this).classed('loading',false);if('bl_'+d.id==self.balloon_id){var $this=$(this);self.show_balloon(d,$this);}}});device.exit().each(function(d){if('bl_'+d.id==self.balloon_id){self.delete_balloon();}}).remove();var port=device.select('g.ports').selectAll('g.port').data(function(d){return d.ports;});var port_enter=port.enter().append('g').attr('class','port').attr('id',function(d){return'id_'+d.id;});port_enter.append('line').attr('class','port_line');port_enter.append('text').attr('class','port_text');device.select('g.ports').each(function(d,i){this._portdata={};this._portdata.ports_length=d.ports.length;this._portdata.parent_network=d.parent_network;this._portdata.device_height=d.height;this._portdata.port_height=d.port_height;this._portdata.port_margin=d.port_margin;this._portdata.left=0;this._portdata.right=0;$(this).mouseenter(function(e){e.stopPropagation();});});port.each(function(d,i){var index_diff=self.network_index(this.parentNode._portdata.parent_network)- +self.network_index(d.network_id);this._index_diff=index_diff=(index_diff>=0)?++index_diff:index_diff;this._direction=(this._index_diff<0)?'right':'left';this._index=this.parentNode._portdata[this._direction]++;});port.attr('transform',function(d,i){var x=(this._direction=='left')?0:element_properties.device_width;var ports_length=this.parentNode._portdata[this._direction];var distance=this.parentNode._portdata.port_margin;var y=(this.parentNode._portdata.device_height- +(ports_length-1)*distance)/2+this._index*distance;return'translate('+x+','+y+')';});port.select('.port_line').attr('stroke-width',function(d,i){return this.parentNode.parentNode._portdata.port_height;}).attr('stroke',function(d,i){return self.network_color(d.network_id)}).attr('x1',0).attr('y1',0).attr('y2',0).attr('x2',function(d,i){var parent=this.parentNode;var width=(Math.abs(parent._index_diff)-1)*element_properties.network_width+ +element_properties.port_width;return(parent._direction=='left')?-1*width:width;});port.select('.port_text').attr('x',function(d){var parent=this.parentNode;if(parent._direction=='left'){d3.select(this).classed('left',true);return element_properties.port_text_margin.x*-1;}else{d3.select(this).classed('left',false);return element_properties.port_text_margin.x;}}).attr('y',function(d){return element_properties.port_text_margin.y}).text(function(d){var ip_label=[];$.each(d.fixed_ips,function(){ip_label.push(this.ip_address);});return ip_label.join(',');});port.exit().remove();},network_color:function(network_id){return this.color(this.network_index(network_id));},network_index:function(network_id){return this.network_index[network_id];},select_port:function(device_id){return $.map(this.model.ports,function(port,index){if(port.device_id==device_id){return port;}});},select_main_port:function(ports){var _self=this;var main_port_index=0;var MAX_INT=4294967295;var min_port_length=MAX_INT;$.each(ports,function(index,port){var port_length=_self.sum_port_length(port.network_id,ports);if(port_lengthmax_size){str=str.substr(0,i)+suffix;break;}} +return str;},delete_device:function(type,device_id){var self=this;var message={id:device_id};self.post_message(device_id,type,message);},delete_port:function(router_id,port_id){var self=this;var message={id:port_id};self.post_message(port_id,'router/'+router_id+'/',message);},show_balloon:function(d,element){var self=this;var element_properties=self.element_properties[self.draw_mode];if(self.balloon_id){self.delete_balloon();} +var balloon_tmpl=self.balloon_tmpl;var device_tmpl=self.balloon_device_tmpl;var port_tmpl=self.balloon_port_tmpl;var balloon_id='bl_'+d.id;var ports=[];$.each(d.ports,function(i,port){var object={};object.id=port.id;object.router_id=port.device_id;object.url=port.url;object.port_status=port.status;object.port_status_css=(port.status=="ACTIVE")?'active':'down';var ip_address='';try{ip_address=port.fixed_ips[0].ip_address;}catch(e){ip_address='no info';} +var device_owner='';try{device_owner=port.device_owner.replace('network:','');}catch(e){device_owner='no info';} +object.ip_address=ip_address;object.device_owner=device_owner;object.is_interface=(device_owner=='router_interface')?true:false;ports.push(object);});var html_data={balloon_id:balloon_id,id:d.id,url:d.url,name:d.name,type:d.type,type_capital:d.type.replace(/^\w/,function($0){return $0.toUpperCase()}),id:d.id,status:d.status,status_class:(d.status=="ACTIVE")?'active':'down'};if(d.type=='router'){html_data.port=ports;html=balloon_tmpl.render(html_data,{table1:device_tmpl,table2:port_tmpl});}else if(d.type=='instance'){html_data.console_id=d.id;html_data.console=d.console;html=balloon_tmpl.render(html_data,{table1:device_tmpl});}else{return;} +$(self.svg_container).append(html);var device_position=element.find('.frame');var x=device_position.position().left+ +element_properties.device_width+ +element_properties.balloon_margin.x;var y=device_position.position().top+ +element_properties.balloon_margin.y;$('#'+balloon_id).css({'left':x+'px','top':y+'px'}).show();var $balloon=$('#'+balloon_id);if($balloon.offset().left+$balloon.outerWidth()>$(window).outerWidth()){$balloon.css({'left':0+'px'}).css({'left':device_position.position().left +-$balloon.outerWidth() +-element_properties.balloon_margin.x+'px'}).addClass('leftPosition');} +$balloon.find('.delete-device').click(function(e){var $this=$(this);$this.addClass('deleting');d3.select('#id_'+$this.data('device-id')).classed('loading',true);self.delete_device($this.data('type'),$this.data('device-id'));});$balloon.find('.delete-port').click(function(e){var $this=$(this);self.delete_port($this.data('router-id'),$this.data('port-id'));});self.balloon_id=balloon_id;},delete_balloon:function(){var self=this;if(self.balloon_id){$('#'+self.balloon_id).remove() +self.balloon_id=null;}},post_message:function(id,url,message){var self=this;var iframe_id='ifr_'+id;var iframe=$('