[python-django-horizon: 4/7] Updated patches from master-patches
Matthias Runge
mrunge at fedoraproject.org
Tue Sep 3 12:19:18 UTC 2013
commit 8dbda10d098788cc6382dd81d43d40fbeea50240
Author: Matthias Runge <mrunge at redhat.com>
Date: Fri Aug 30 12:53:13 2013 +0200
Updated patches from master-patches
...eystone-test-data-to-match-openstack_auth.patch | 7 +-
...-Add-a-customization-module-based-on-RHOS.patch | 1716 ++++++++++++++++++++
python-django-horizon.spec | 6 +-
3 files changed, 1722 insertions(+), 7 deletions(-)
---
diff --git a/fix-tests.patch b/0004-Fixed-keystone-test-data-to-match-openstack_auth.patch
similarity index 97%
rename from fix-tests.patch
rename to 0004-Fixed-keystone-test-data-to-match-openstack_auth.patch
index f9d86b4..e019996 100644
--- a/fix-tests.patch
+++ b/0004-Fixed-keystone-test-data-to-match-openstack_auth.patch
@@ -1,4 +1,4 @@
-From 355c9ccf90e9787b4f10fefba156569df79e4e8c Mon Sep 17 00:00:00 2001
+From f53bbe8dd6bc08eb4a771dbbe98350014802ec44 Mon Sep 17 00:00:00 2001
From: Lin Hua Cheng <lin-hua.cheng at hp.com>
Date: Thu, 1 Aug 2013 20:50:51 -0700
Subject: [PATCH] Fixed keystone test data to match openstack_auth.
@@ -14,7 +14,7 @@ diff --git a/openstack_dashboard/test/test_data/keystone_data.py b/openstack_das
index b9d4192..e92131b 100644
--- a/openstack_dashboard/test/test_data/keystone_data.py
+++ b/openstack_dashboard/test/test_data/keystone_data.py
-@@ -17,14 +17,15 @@
+@@ -17,14 +17,15 @@ from datetime import timedelta
from django.conf import settings
from django.utils import datetime_safe
@@ -89,6 +89,3 @@ index b9d4192..e92131b 100644
TEST.tokens.add(scoped_token, unscoped_token)
TEST.token = scoped_token # your "current" token.
TEST.tokens.scoped_token = scoped_token
---
-1.8.1.6
-
diff --git a/0005-Add-a-customization-module-based-on-RHOS.patch b/0005-Add-a-customization-module-based-on-RHOS.patch
new file mode 100644
index 0000000..1b09009
--- /dev/null
+++ b/0005-Add-a-customization-module-based-on-RHOS.patch
@@ -0,0 +1,1716 @@
+From 633decc4abe5641f6c04ac91680c1f9ab5abc05a Mon Sep 17 00:00:00 2001
+From: Matthias Runge <mrunge at redhat.com>
+Date: Thu, 14 Feb 2013 12:55:54 +0100
+Subject: [PATCH] Add a customization module based on RHOS
+
+Change-Id: I8622ffc8e31cf553315077070b2a696de1bd5081
+---
+ openstack_dashboard/settings.py | 14 +-
+ openstack_dashboard_theme/__init__.py | 0
+ openstack_dashboard_theme/models.py | 0
+ .../static/dashboard/less/rhtheme.less | 1594 ++++++++++++++++++++
+ .../templates/_stylesheets.html | 7 +
+ .../templates/horizon/common/_sidebar.html | 35 +
+ 6 files changed, 1645 insertions(+), 5 deletions(-)
+ create mode 100644 openstack_dashboard_theme/__init__.py
+ create mode 100644 openstack_dashboard_theme/models.py
+ create mode 100644 openstack_dashboard_theme/static/dashboard/less/rhtheme.less
+ create mode 100644 openstack_dashboard_theme/templates/_stylesheets.html
+ create mode 100644 openstack_dashboard_theme/templates/horizon/common/_sidebar.html
+
+diff --git a/openstack_dashboard/settings.py b/openstack_dashboard/settings.py
+index 02ac8ba..a28c053 100644
+--- a/openstack_dashboard/settings.py
++++ b/openstack_dashboard/settings.py
+@@ -99,15 +99,10 @@ TEMPLATE_CONTEXT_PROCESSORS = (
+ )
+
+ TEMPLATE_LOADERS = (
+- 'django.template.loaders.filesystem.Loader',
+ 'django.template.loaders.app_directories.Loader',
+ 'horizon.loaders.TemplateLoader'
+ )
+
+-TEMPLATE_DIRS = (
+- os.path.join(ROOT_PATH, 'templates'),
+-)
+-
+ STATICFILES_FINDERS = (
+ 'compressor.finders.CompressorFinder',
+ 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+@@ -144,6 +139,15 @@ INSTALLED_APPS = (
+ 'openstack_auth',
+ )
+
++THEME_APP = 'openstack_dashboard_theme'
++
++try:
++ __import__(THEME_APP)
++ INSTALLED_APPS = (THEME_APP,) + INSTALLED_APPS
++except:
++ pass
++
++
+ TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
+ AUTHENTICATION_BACKENDS = ('openstack_auth.backend.KeystoneBackend',)
+ MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
+diff --git a/openstack_dashboard_theme/__init__.py b/openstack_dashboard_theme/__init__.py
+new file mode 100644
+index 0000000..e69de29
+diff --git a/openstack_dashboard_theme/models.py b/openstack_dashboard_theme/models.py
+new file mode 100644
+index 0000000..e69de29
+diff --git a/openstack_dashboard_theme/static/dashboard/less/rhtheme.less b/openstack_dashboard_theme/static/dashboard/less/rhtheme.less
+new file mode 100644
+index 0000000..72f60c4
+--- /dev/null
++++ b/openstack_dashboard_theme/static/dashboard/less/rhtheme.less
+@@ -0,0 +1,1594 @@
++ at import "../../bootstrap/less/bootstrap.less";
++
++/* new clearfix */
++.clearfix:after {
++ visibility: hidden;
++ display: block;
++ font-size: 0;
++ content: " ";
++ clear: both;
++ height: 0;
++ }
++* html .clearfix { zoom: 1; } /* IE6 */
++*:first-child+html .clearfix { zoom: 1; } /* IE7 */
++
++ at 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');
++ font-weight: normal;
++ font-style: normal;
++}
++
++a {
++ color: #43a1d6;
++}
++
++ul {
++ list-style: none;
++ margin: 0;
++}
++
++dt {
++ font-weight: bold;
++}
++
++#main_content {
++ padding-left: 250px;
++ padding-right: 25px;
++}
++
++.topbar {
++ background: #f2f2f2;
++ border-bottom: 1px solid #e5e5e5;
++ padding: 10px 25px;
++ margin-top: 0;
++ margin-left: -25px;
++ margin-bottom: 20px;
++ margin-right: -25px;
++ min-width: 700px;
++}
++
++.topbar .switcher_bar {
++ display: inline-block;
++ height: auto;
++ width: 160px;
++ background-position: 140px center;
++ margin-bottom: 0;
++ font-size: 11px;
++ margin-left: 20px;
++ padding: 0;
++ background-image: url(/static/dashboard/img/drop_arrow.png);
++ border: 1px solid #c0d9e4;
++ background-color: #e9f5fa;
++ background-repeat: no-repeat;
++}
++
++.topbar .switcher_bar a {
++ padding: 2px 10px 1px;
++ margin-left: 0;
++ display: block;
++}
++
++.topbar .switcher_bar ul {
++ width: 130px;
++}
++
++#user_info {
++ color: #888;
++ margin: auto 0;
++}
++
++#user_info > a {
++ margin-left: 25px;
++ font-size: 11px !important;
++}
++
++.page-header {
++ margin: 0;
++ padding: 0;
++ border: 0;
++ font-family: anivers;
++}
++
++h2 {
++ color: #6a6a6a;
++ font-size: 30px;
++ font-weight: normal;
++}
++
++body {
++ background-color: #fff;
++ min-width: 890px;
++}
++
++/* Login Splash Page */
++
++#splash {
++ background: #fafafa;
++}
++
++#splash .login {
++ background: #fff url(/static/dashboard/img/logo-splash.png) no-repeat center 35px;
++ position: absolute;
++ top: 80px;
++ left: 50%;
++ margin: 0 0 0 -195px;
++ padding-top: 170px;
++ width: 390px;
++ border: 1px solid #e1e1e1;
++ max-height: none;
++ -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-background-clip: padding-box;
++ -moz-background-clip: padding-box;
++ background-clip: padding-box;
++
++ form {
++ .error {
++ width: 100%;
++ }
++ input {
++ width: 350px;
++ }
++ select {
++ width: 360px;
++ }
++ }
++}
++
++#splash .help-block {
++ display: none;
++}
++
++#create_container_form .modal-footer{
++ margin-top: 190px;
++}
++
++.nav li a {
++ color: #8EACB7;
++ text-shadow: none;
++}
++
++.container-fluid {
++ padding-left: 0;
++}
++
++.sidebar {
++ background: #edf9ff;
++ border-right: 5px solid #e5e5e5;
++ border-bottom: 5px solid #e5e5e5;
++ float: left;
++}
++
++.sidebar h4 {
++ margin-left: 14px;
++ color: #999;
++}
++
++.sidebar .nav-tabs {
++ margin-top: -34px;
++}
++
++.sidebar .nav-tabs li.active a {
++ background-color: #edf9ff;
++}
++
++h1.brand {
++ width: 100%;
++ margin: 0;
++ background-color: #f5f5f5;
++ padding-bottom: 40px;
++}
++
++h1.brand a {
++ background: url(/static/dashboard/img/logo.png) top left no-repeat;
++ display: block;
++ float: left;
++ width: 116px;
++ height: 123px;
++ text-indent: -9999px;
++ margin-left: 56px;
++ margin-top: 15px;
++ margin-bottom: 25px;
++}
++
++
++/* Tenant Dropdown */
++
++
++a.current_item {
++ width: 163px;
++ float: left;
++}
++
++a.current_item:hover {
++ text-decoration: none;
++}
++
++a.current_item:hover h3, a.current_item:hover h4 {
++ color: #39738c;
++}
++
++.sidebar .switcher_bar {
++ width: 190px;
++ height: 38px;
++ padding: 5px 0;
++ margin-left: 14px;
++ margin-bottom: 15px;
++}
++
++.sidebar .switcher_bar a.dropdown-toggle {
++ display: block;
++ padding: 5px 0;
++ background-image: url(/static/dashboard/img/drop_arrow.png);
++ border: 1px solid #c0d9e4;
++ background-color: #e9f5fa;
++ background-repeat: no-repeat;
++ background-position: 167px 23px;
++}
++
++.sidebar .switcher_bar a.dropdown-toggle:hover {
++ text-decoration: none;
++ background-color: #cde8f4;
++}
++
++.sidebar .switcher_bar:focus {
++ outline: none;
++}
++
++.sidebar .switcher_bar h3 {
++ color: #4790ae;
++ font-size: 16px;
++ margin: -6px 0 0 14px;
++ padding: 0;
++ overflow: hidden;
++ text-overflow:ellipsis;
++ white-space: nowrap;
++ &:hover {
++ white-space: normal;
++ overflow: visible;
++ text-overflow: none;
++ padding-right: 1em;
++ word-wrap: break-word;
++ }
++}
++
++.sidebar .switcher_bar h4 {
++ color: #6fabc4;
++ font-size: 10px;
++ text-transform: uppercase;
++ font-weight: normal;
++ padding: 0;
++}
++
++
++.sidebar .switcher_bar ul {
++ border: 1px solid #c0d9e4;
++ margin-left: -1px;
++ width: 190px;
++}
++
++.sidebar .switcher_bar li a:hover{
++ background: #92d6f1;
++}
++
++
++#usage {
++ margin-bottom: 25px;
++ height: 125px;
++}
++
++.usage_block {
++ background: #e8f8ff;
++ color: #84b6c5;
++ border: 1px solid #afe3fb;
++ -webkit-border-radius: 5px;
++ -moz-border-radius: 5px;
++ border-radius: 5px;
++ float: left;
++ width: 29%;
++ margin-right: 5%;
++ min-height: 125px;
++}
++
++.usage_block.last {
++ margin-right: 0;
++}
++
++
++.usage_block h3 {
++ background: #cef0ff;
++ color: #4fa5bf;
++ font-weight: normal;
++ padding: 0 0 0 10px;
++ border-bottom: 1px solid #c6e7f5;
++ -webkit-border-top-left-radius: 5px;
++ -webkit-border-top-right-radius: 5px;
++ -moz-border-radius-topleft: 5px;
++ -moz-border-radius-topright: 5px;
++ border-top-left-radius: 5px;
++ border-top-right-radius: 5px;
++}
++.usage_block ul {
++ margin: 10px;
++}
++
++.usage_block .quantity { font-size: 25px; }
++
++.usage_block li {
++ font-size: 11px;
++ margin: 0 0 15px 0;
++}
++
++.usage_block .unit{
++ font-size: 11px;
++ text-transform: uppercase;
++ padding: 0 0 0 1px;
++}
++
++
++.table-bordered {
++ border: none;
++}
++.table_header {
++ min-height: 35px;
++ padding: 5px 0;
++}
++.table_caption th {
++ background-color: transparent;
++ border: none;
++}
++.table-bordered tr.table_caption + tr th {
++ border-top: 1px solid #ddd;
++}
++.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;
++}
++.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;
++}
++.table-bordered tbody tr td:first-child,
++.table-bordered tfoot tr td:first-child {
++ border-left: 1px solid #ddd;
++}
++.table-bordered tbody tr td:last-child,
++.table-bordered tfoot tr td:last-child {
++ border-right: 1px solid #ddd;
++}
++.table-bordered tfoot tr td:first-child {
++ border-bottom: 1px solid #ddd;
++ -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;
++ -moz-border-radius-bottomright: 4px;
++ -webkit-border-bottom-right-radius: 4px;
++ border-bottom-right-radius: 4px;
++}
++.table_title h3, .table_header h3 {
++ font-family: anivers;
++ font-weight: normal;
++ font-size: 24px;
++ margin-bottom: 5px;
++ float: left;
++}
++.table th.header {
++ cursor: pointer;
++}
++.table th.header:hover {
++ background-color: #e8e8e8;
++ text-decoration: underline;
++}
++.table tbody td.anchor a {
++ display: block;
++ padding: 8px;
++}
++.table tr.table_caption th.header:hover {
++ background-color: transparent;
++ cursor: default;
++}
++.table th.headerSortUp:hover,
++.table th.headerSortDown:hover {
++ background-color: #dfdfdf;
++}
++.table th.headerSortUp,
++.table th.headerSortDown {
++ background-color: #dfdfdf;
++ background-repeat: no-repeat;
++ background-position: 98% center;
++}
++.table th.headerSortDown {
++ background-image: url(/static/dashboard/img/drop_arrow.png);
++}
++.table th.headerSortUp {
++ background-image: url(/static/dashboard/img/up_arrow.png);
++}
++.table tr.summation td:first-child,
++.table tr.summation td:last-child {
++ border-radius: 0;
++ border-bottom: 0 none;
++}
++
++th {
++ background: #f1f1f1;
++}
++td.anchor {
++ padding: 0;
++}
++
++
++small {
++ font-size: 11px;
++}
++
++.main_nav {
++ list-style: none;
++ width: 222px;
++ margin: 10px 0 20px 0;
++}
++
++.main_nav a {
++ color: #999;
++ width: 185px;
++ padding: 10px;
++ display: block;
++ margin-left: 20px;
++}
++
++.main_nav a.active {
++ background: #fff;
++ border: 2px solid #d8d8d8;
++ border-right: 0;
++ border-bottom-color: #ccc;
++}
++
++table form {
++ margin-bottom: 0;
++ width: 1px;
++}
++
++.messages {
++ position: fixed;
++ z-index: 9999;
++ top: 20px;
++ right: 20px;
++ width: 300px;
++ .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);
++ &.alert-error {
++ border: 1px solid @red;
++ }
++ &.alert-success {
++ border: 1px solid @green;
++ }
++ }
++}
++
++.alert-block .alert-actions {
++ margin-top: -23px;
++ margin-right: -23px;
++}
++
++.modal > form,
++.login > form,
++.alert-actions > form {
++ margin-bottom: 0;
++}
++
++.alert-block p {
++ overflow: hidden;
++ word-wrap: break-word;
++}
++
++.alert-block p:last-child {
++ margin-bottom: 0;
++}
++
++#actions.single {
++ width: 90px;
++}
++
++.table-striped tr td {
++ transition: background 0.2s;
++ -webkit-transition: background 0.2s;
++ -moz-transition: background 0.2s;
++ -o-transition: background 0.2s;
++}
++
++.inspect {
++ float: left;
++ display: block;
++ margin-top: 5px;
++ margin-right: 25px;
++}
++
++.table {
++ margin-bottom: 25px;
++}
++
++.table tr td {
++ vertical-align: middle;
++}
++
++.table tr.empty td {
++ text-align: center;
++}
++
++.table tfoot tr td {
++ border-top: 1px solid #DDD;
++ background-color: #F1F1F1;
++ font-size: 11px;
++ line-height: 14px;
++}
++
++.table_actions {
++ float: right;
++ min-width: 400px;
++}
++
++.table_actions .table_search {
++ display: inline-block;
++}
++
++.table_search input {
++ background: url(/static/dashboard/img/search.png) no-repeat 195px 5px;
++ display: inline-block;
++ margin-bottom: 0;
++}
++
++.table_actions a, .table_actions button {
++ float: right;
++ margin-left: 10px;
++}
++
++.table_actions button.filter {
++ margin-left: 0;
++}
++
++.table_header .table_actions {
++ min-width: 0;
++}
++
++.table_header .table_actions a, .table_header .table_actions button {
++ display: inline-block;
++ float: none;
++}
++
++.table_actions form {
++ float: right;
++ margin-left: 10px;
++}
++
++.hidden {
++ display: none;
++}
++
++.table-striped tbody tr.status_unknown:nth-child(odd) td {
++ background-color: #ffffb5;
++}
++
++.table-striped tbody tr.status_unknown:nth-child(even) td {
++ background-color: #ffffc6;
++}
++
++.nowrap-col {
++ white-space: nowrap;
++}
++
++.overview {
++ font-size: 24px;
++}
++
++#monitoring {
++ background: #f8f8f8;
++ font-size: 14px;
++ height: 20px;
++ margin: -18px 0 25px;
++ padding: 10px;
++ border: 1px solid #e1e1e1;
++ font-family: "anivers";
++}
++
++#monitoring h3 {
++ font-size: 14px;
++ font-weight: normal;
++ float: left;
++ line-height: 18px;
++}
++
++#external_links, #external_links li {
++ float: left;
++}
++#external_links li { margin: 0 0 0 15px; }
++
++/* Forms */
++
++form label {
++ text-align: left;
++ color: #555;
++ font-weight: bold;
++}
++
++.modal {
++ width: 700px;
++ max-height: none; /* Prevents large modals from scrolling unnecessarily */
++ top: 80px;
++ margin-top: 0;
++ position: absolute;
++}
++
++.modal.loading {
++ width: 150px;
++ height: 150px;
++ margin: 0 auto;
++ overflow: hidden;
++}
++
++.modal.loading p {
++ text-align: center;
++ position: absolute;
++ bottom: 0;
++ width: 150px;
++}
++
++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%;
++}
++
++.modal-body {
++ overflow-y: visible;
++ max-height: none;
++}
++
++.modal-body table {
++ margin-bottom: 30px;
++}
++
++.modal-body ~ hr {
++ margin-bottom: 0;
++}
++
++.static_page {
++ float: left;
++ width: 700px;
++ background-color: #FFF;
++ border: 1px solid #DDD;
++}
++.static_page > form {
++ margin-bottom: 0;
++}
++
++.left {
++ float: left;
++ width: 347px;
++ margin-right: 15px;
++}
++
++.left form {
++ margin: 0;
++}
++
++.right {
++ float: left;
++ width: 308px;
++}
++
++.workflow ul.nav-tabs {
++ padding: 0 10px;
++}
++
++.workflow td.actions {
++ vertical-align: top;
++ width: 308px;
++ padding-right: 10px;
++}
++
++.workflow td.help_text {
++ vertical-align: top;
++ width: 340px;
++ padding-left: 10px;
++ border-left: 1px solid #DDD;
++}
++
++.workflow fieldset > table {
++ margin-bottom: 0;
++}
++
++.clear {
++ clear: both;
++ width: 0;
++ height: 0;
++ padding: 0;
++ margin: 0;
++}
++
++.modal-body fieldset {
++ margin: 0;
++ padding: 0;
++}
++
++.modal-body fieldset ul {
++ width: 90%;
++}
++
++.modal-body fieldset .form-field input,
++.modal-body fieldset .form-field textarea {
++ width: 298px;
++}
++.modal-body fieldset .form-field select {
++ width: 308px;
++}
++.modal-body fieldset .form-field textarea {
++ height: @baseLineHeight * 2;
++}
++
++.modal-footer input {
++ width: auto;
++}
++
++.modal-body .modal-footer {
++ width: 670px;
++ margin-left: -25px;
++ margin-right: -15px;
++}
++
++.modal-footer a.close {
++ margin-top: 0;
++ margin-right: 5px;
++ font-size: 12px;
++ color: #666;
++ font-weight: normal;
++ filter: alpha(opacity=100);
++ -khtml-opacity: 1;
++ -moz-opacity: 1;
++ opacity: 1;
++}
++
++.modal-footer a.close:hover {
++ color: #333;
++ text-decoration: underline;
++}
++
++.modal-body .help-block {
++ text-align: left;
++ float: left;
++ width: 100%;
++ margin-bottom: 10px;
++}
++
++#create_keypair_modal .clearfix {
++ margin-bottom: 115px;
++}
++
++#actions {
++ width: 90px;
++}
++#actions .btn {
++ margin-bottom: 5px;
++}
++#actions a.btn {
++ width: 70px;
++}
++
++#actions input.btn {
++ text-align: left;
++}
++
++#images #actions {
++ width: 100px;
++}
++
++/*New List Patches*/
++.details-modal .modal-body {
++ padding-bottom: 20px;
++}
++
++.form-inline {
++ display: inline;
++ input, button, a.btn {
++ margin-left: 5px;
++ }
++}
++
++td.select {
++ width: 10px;
++}
++
++/* Actions dropdown */
++
++td.actions_column {
++ white-space: nowrap;
++ padding: 10px;
++ position: relative;
++ width: 200px;
++}
++
++td.actions_column .btn-group {
++ display: inline-block;
++}
++
++td.actions_column .row_actions a,
++td.actions_column .row_actions input,
++td.actions_column .row_actions button {
++ background: none;
++ float: none;
++ display: block;
++ padding: 5px 10px;
++ color: black;
++ text-align: left;
++ border-radius: 0;
++ border: 0 none;
++ -webkit-box-shadow: none;
++ -moz-box-shadow: none;
++ box-shadow: none;
++}
++
++td.actions_column .row_actions .hide {
++ display: none;
++}
++
++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 {
++ display: none;
++}
++.btn-group .dropdown-toggle:focus {
++ outline: none;
++}
++.dropdown-menu button {
++ line-height: 18px; /* Matches rule for ".dropdown-menu a" in bootstrap */
++ width: 100%;
++}
++.btn-group .dropdown-menu .btn {
++ border-radius: 0;
++}
++.dropdown-menu .btn.btn-danger,
++.dropdown-menu .btn.btn-danger:hover,
++.dropdown-menu .btn.btn-success,
++.dropdown-menu .btn.btn-success:hover,
++.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;
++}
++
++td.actions_column .dropdown-menu a:hover,
++td.actions_column .dropdown-menu button:hover {
++ background-color: #CDCDCD;
++}
++.dropdown-menu .btn.btn-danger {
++ 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,
++td.actions_column ul.row_actions.single:hover {
++ border: none;
++}
++
++td.actions_column ul.row_actions.single li.action {
++ display: block;
++}
++
++td.actions_column ul.row_actions.single li.action:hover {
++ background-color: transparent;
++}
++
++td.actions_column ul.row_actions.single a,
++td.actions_column ul.row_actions.single input,
++td.actions_column ul.row_actions.single button {
++ color: #43a1d6;
++}
++
++td.actions_column ul.row_actions.single a:hover,
++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 {
++ width: 25px;
++}
++
++th.multi_select_column, td.multi_select_column {
++ text-align: center;
++}
++
++.table-fixed {
++ table-layout: fixed;
++}
++
++.table input[type="checkbox"] {
++ display: inline;
++}
++
++div.input input[type="checkbox"] {
++ float: left;
++ width: 25px;
++}
++
++.table_title a {
++ font-size: 11px;
++ float: right;
++ margin-left: 10px;
++ margin-top: 10px;
++}
++
++tr.terminated {
++ color: #999999;
++}
++
++#instance_tabs {
++ float: left;
++ width: 100%;
++ border-bottom: 1px solid #e1e1e1;
++}
++
++#instance_tabs li a {
++ background: #f2f2f2;
++ display: block;
++ font-size: 14px;
++ float: left;
++ padding: 5px 10px;
++ margin-right: 10px;
++ border: 1px solid #e1e1e1;
++ border-bottom: none;
++}
++
++#instance_tabs li.active a {
++ background: #fff;
++ padding-bottom: 8px;
++ margin-bottom: -5px;
++}
++
++#main_content .nav-tabs {
++ margin-bottom: 0;
++}
++
++#main_content .tab-content {
++ border: 1px solid #ddd;
++ border-top: 0 none;
++ padding: 10px;
++}
++
++#main_content .workflow .modal-body {
++ padding-left: 0;
++ padding-right: 0;
++}
++
++#main_content .workflow .modal-body .tab-content {
++ border-left: 0 none;
++ border-right: 0 none;
++ border-bottom: 0 none;
++}
++
++.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;
++ cursor: pointer;
++ background-image: url(/static/dashboard/img/right_droparrow.png);
++ background-repeat: no-repeat;
++ background-position: 130px center;
++}
++
++.volume_boot_disclosure.on {
++ width: 334px;
++ margin-bottom: 10px;
++ border-bottom: solid 1px #E1E1E1;
++ background-image: url(/static/dashboard/img/drop_arrow.png);
++}
++
++form div.clearfix.error {
++ width: 308px;
++}
++
++.nav-tabs a {
++ cursor: pointer;
++}
++
++.nav-tabs li.error a {
++ color: #B94A48;
++}
++
++.nav-tabs li.error a:after {
++ content: "*";
++}
++
++/* Region selector in header */
++
++#region_selector {
++ position: absolute;
++ z-index: 9999;
++ right: 0;
++ top: 24px;
++}
++
++#region_selector a { margin-left: 0; }
++
++#region_selector ul{
++ float: left;
++ margin-left: 5px;
++ padding-right: 21px;
++ width: 125px;
++}
++#region_selector ul:hover a { display: block; }
++
++#region_selector li a{
++ padding: 3px 3px 3px 5px;
++ display: none;
++ background: #E1E1E1;
++ margin-top: -10px;
++}
++
++#region_selector li:first-child p{
++ background: #EDEDED url(/static/dashboard/img/drop_arrow.png) no-repeat 106px 9px !important;
++ display: block;
++ border: 1px solid #e1e1e1;
++ padding: 5px;
++}
++
++iframe {
++ border: none;
++}
++
++.item_detail ul li label {
++ color: #000;
++ font-weight: bold;
++ display: block;
++ margin-top: 5px;
++}
++
++.progress_bar {
++ height: 100%;
++ width: 100%;
++ border: 1px solid #CCC;
++ background-color: #CCC;
++}
++
++.progress_bar_fill,
++.progress_bar_selected {
++ height: 100%;
++ float: left;
++}
++
++.progress_bar_fill {
++ background-color: #666;
++}
++
++.progress_bar_selected {
++ background-color: #4790AE;
++ width: 0;
++}
++
++.progress_bar_over {
++ background-color: red;
++}
++
++.quota_title {
++ color: #999;
++ padding-bottom: 0;
++ margin-bottom: 8px;
++}
++
++.quota_title strong {
++ color: #000;
++}
++
++.quota_title strong span {
++ font-weight: normal;
++}
++
++.quota_title p {
++ float: right;
++ margin-bottom: 0;
++}
++
++.quota_bar {
++ height: 15px;
++ margin: -8px 0 8px;
++}
++
++div .flavor_table {
++ border: 1px solid #AAA;
++ width: 100%;
++ margin-bottom: 14px;
++}
++
++.flavor_table .flavor_name {
++ white-space: nowrap;
++ font-weight: bold;
++ text-align: left;
++ padding: 7px 12px 7px 7px;
++ width: 160px;
++}
++
++#main_content .row-fluid {
++ margin: 10px 0 20px;
++}
++
++#main_content .row-fluid:last-child {
++ margin-bottom: 0;
++}
++
++.header_rule {
++ margin: 0 0 10px;
++}
++
++.item_detail .detail_section {
++ margin-bottom: 25px;
++ float: left;
++ margin-right: 50px;
++}
++
++.error .help-inline {
++ background: #efdfdf;
++ border: 1px solid #ead5d8;
++ padding: 10px;
++ display: block;
++}
++
++label.log-length {
++ line-height: 28px;
++ margin-right: 10px;
++}
++
++
++.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-repeat: repeat-x;
++ 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-repeat: repeat-x;
++ 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-repeat: repeat-x;
++ 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 {
++ width: 120px;
++}
++
++.warning {
++ background-color: @errorBackground;
++ border-bottom: 1px solid @red;
++ padding: 5px 10px;
++ .warning-text {
++ text-align: center;
++ h3, a {
++ display: inline-block;
++ }
++ h3 {
++ vertical-align: bottom;
++ }
++ }
++}
++#admin_warning_detail {
++ ul {
++ list-style: circle;
++ padding-left: 20px;
++ margin-bottom: 10px;
++ }
++}
++
++.no_split {
++ margin-top: -60px;
++}
++
++/* Project Membership UI */
++.project_membership {
++ min-height: 200px;
++
++ /* Buttons */
++ .btn-group {
++ margin-left:0px;
++ padding: 2px 10px 0 0;
++ margin-bottom: 0px;
++ border: 1px solid #DDD;
++ border-bottom: none;
++ }
++ .btn-group .active {
++ float: right;
++ }
++ a.btn-primary:hover {
++ background-color: #04C;
++ }
++
++ /* Header */
++ .help_text {
++ margin-left: 15px;
++ margin-bottom: 15px;
++ }
++ .users_title {
++ color: #555;
++ font-weight: bold;
++ padding-left: 10px;
++ float: left;
++ }
++ input {
++ background: url(/static/dashboard/img/search.png) no-repeat 105px 5px whiteSmoke;
++ }
++ .fake_table_header {
++ background-color: #F1F1F1;
++ width: 306px;
++ height: 38px;
++ padding-top: 15px;
++ border: 1px solid #DDD;
++ border-bottom: none;
++ }
++
++ /* 'Fake table' body */
++ .fake_table {
++ margin-left: 5px;
++ width: 315px;
++ ul.no_results {
++ width: 298px;
++ }
++ ul.btn-group:hover {
++ background-color: #DDD;
++ }
++ }
++ .left {
++ .fake_table_header {
++ width: 318px;
++ }
++ }
++ .right {
++ .fake_table_header {
++ width: 318px;
++ margin-left: -15px;
++ }
++ .fake_table ul.no_results {
++ margin-left: -20px;
++ }
++ }
++
++ /* User lists */
++ .member {
++ padding: 10px;
++ text-align: left;
++ }
++ .project_members {
++ margin-left: -20px;
++ }
++ .project_members ul.btn-group,
++ .available_users ul.btn-group {
++ width: 308px;
++ }
++ .dark_stripe {
++ background-color: #F9F9F9;
++ }
++ .light_stripe {
++ background-color: white;
++ }
++ .last_stripe {
++ border-bottom: 1px solid #DDD;
++ }
++
++ /* List filtering */
++ .filter {
++ width: 120px;
++ margin: -5px 13px 15px 0px;
++ float: right;
++ }
++ .no_results {
++ border: 1px solid #DDD;
++ padding: 10px;
++ color: #08C;
++ }
++
++ /* Role dropdown menus */
++ .role_dropdown li {
++ cursor: pointer;
++ background: none;
++ float: none;
++ display: block;
++ padding: 5px 10px;
++ color: black;
++ text-align: left;
++ border-radius: 0;
++ border: 0 none;
++ -webkit-box-shadow: none;
++ -moz-box-shadow: none;
++ box-shadow: none;
++ z-index: 99999;
++
++ &:hover {
++ background-color: #CDCDCD;
++ }
++ }
++ .nav .role_options {
++ float: right;
++ padding-right: 5px;
++ }
++}
++
++/* Inline user creation */
++.add_user_btn {
++ display: inline;
++}
++#add_user {
++ clear: both;
++}
++.add_user {
++ 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;
++ padding-top: 2px;
++ padding-right: 5px;
++ float: left;
++}
++
++.action_required_img {
++ width: 35px;
++ height: 13px;
++ padding-top: 2px;
++ padding-right: 5px;
++ float: left;
++}
++
++//ResourceBrowser
++ at dataTableBorderWidth: 1px;
++ at dataTableBorderColor: #DDD;
++
++ at actionsColumnPadding: 10px;
++
++ at smallButtonHeight: 28px;
++ at tdHeight: @smallButtonHeight;
++
++ at tableCellPadding: 8px;
++
++ at contentTableWidth: 70%;
++ at navigationTableWidth: 30%;
++ at browserWrapperWidth: 100%;
++
++/* ResourceBrowser style */
++#browser_wrapper {
++ width: @browserWrapperWidth;
++ min-width: 1000px;
++ background-color: @grayLighter;
++ border: @dataTableBorderWidth solid @dataTableBorderColor;
++ .border-radius(4px);
++ .tfoot {
++ clear: both;
++ padding: 8px;
++ border-top: 1px solid @dataTableBorderColor;
++ background-color: #F1F1F1;
++ font-size: 11px;
++ line-height: 14px;
++ span {
++ display: inline-block;
++ &.navigation_table_count {
++ width: @navigationTableWidth;
++ }
++ }
++ }
++ form, table{
++ margin-bottom: 0;
++ }
++ .navigation_wrapper, .content_wrapper{
++ position: relative;
++ float: left;
++ }
++ div.navigation_wrapper {
++ z-index: 10;
++ width: @navigationTableWidth;
++ div.table_wrapper,
++ thead th.table_header {
++ border-right: 0 none;
++ border-top-right-radius: 0;
++ }
++ td {
++ &:first-child {
++ border-left: 0 none;
++ }
++ &.breadcrumb_td {
++ padding-right: 0px;
++ max-width: 200px;
++ }
++ }
++ tr.current_selected td {
++ background-color: #E9F5FA;
++ }
++ tfoot td {
++ border-right: 0 none;
++ border-bottom-right-radius: 0;
++ }
++ ul.breadcrumb {
++ padding-right: 0px;
++ border-top-right-radius: 0px;
++ border-bottom-right-radius: 0px;
++ border-right: none;
++ white-space: nowrap;
++ }
++ tbody td {
++ border-right: @dataTableBorderWidth solid @dataTableBorderColor;
++ background-color: @white;
++ }
++ }
++ div.content_wrapper {
++ width: @contentTableWidth;
++ div.table_wrapper,
++ thead th.table_header {
++ border-left: 0 none;
++ border-top-left-radius: 0;
++ }
++ td{
++ border-bottom: @dataTableBorderWidth solid @dataTableBorderColor;
++ &:last-child {
++ border-right: 0 none;
++ }
++ &.breadcrumb_td {
++ padding-left: 0px;
++ }
++ }
++ tfoot td {
++ border-left: 0 none;
++ border-bottom-left-radius: 0;
++ }
++ /* 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.
++ */
++ ul.breadcrumb {
++ padding-left: 0px;
++ border-top-left-radius: 0px;
++ border-bottom-left-radius: 0px;
++ border-left: none;
++ li {
++ visibility: hidden;
++ }
++ }
++ }
++ table {
++ border-collapse: collapse;
++ thead {
++ tr th {
++ border-bottom: none;
++ background-color: @grayLighter;
++ }
++ }
++ tbody {
++ tr:last-child td {
++ border-bottom: 1px solid #ddd;
++ border-radius: 0;
++ }
++ tr.empty td {
++ height: @tdHeight;
++ padding: @actionsColumnPadding;
++ }
++ td.actions_column {
++ position: static;
++ }
++ }
++ }
++ .breadcrumb{
++ padding: 6px;
++ margin: 0 0 1px 0;
++ }
++}
++
++/* Styling for inline object creation buttons */
++.btn-inline {
++ margin-bottom: 9px;
++}
++.modal-body fieldset .form-field select[data-add-item-url] {
++ width: 275px;
++ margin-right: 2px;
++}
++
++h1.rhos {
++ width: 100%;
++ margin: 0;
++ background-color: #f5f5f5;
++ padding-bottom: 40px;
++}
++
++h1.rhos a {
++ background: url(/static/dashboard/img/rh-logo.png) top left no-repeat;
++ display: block;
++ float: left;
++ width: 123px;
++ height: 123px;
++ text-indent: -9999px;
++ margin-left: 53px;
++ margin-top: 15px;
++ margin-bottom: 25px;
++}
++
+diff --git a/openstack_dashboard_theme/templates/_stylesheets.html b/openstack_dashboard_theme/templates/_stylesheets.html
+new file mode 100644
+index 0000000..88463e1
+--- /dev/null
++++ b/openstack_dashboard_theme/templates/_stylesheets.html
+@@ -0,0 +1,7 @@
++{% load compress %}
++
++{% compress css %}
++<link href='{{ STATIC_URL }}dashboard/less/rhtheme.less' type='text/less' media='screen' rel='stylesheet' />
++{% endcompress %}
++
++<link rel="shortcut icon" href="{{ STATIC_URL }}dashboard/img/rhfavicon.ico"/>
+diff --git a/openstack_dashboard_theme/templates/horizon/common/_sidebar.html b/openstack_dashboard_theme/templates/horizon/common/_sidebar.html
+new file mode 100644
+index 0000000..5672846
+--- /dev/null
++++ b/openstack_dashboard_theme/templates/horizon/common/_sidebar.html
+@@ -0,0 +1,35 @@
++{% load branding horizon i18n %}
++
++<div class='sidebar'>
++ <h1 class="rhos clearfix"><a href="{% url horizon:user_home %}">{% site_branding %}</a></h1>
++
++ {% horizon_main_nav %}
++
++ {% if request.horizon.dashboard.supports_tenants %}
++ <div id="tenant_switcher" class="dropdown switcher_bar" tabindex="1">
++ {% with num_of_tenants=authorized_tenants|length %}
++ {% if num_of_tenants > 1 %}
++ <a class="dropdown-toggle" data-toggle="dropdown" href="#tenant_switcher">
++ {% endif %}
++ <h4>{% trans "Current Project" %}</h4>
++ <h3>{{ request.user.tenant_name }}</h3>
++ {% if num_of_tenants > 1 %}
++ </a>
++ {% endif %}
++
++ {% if num_of_tenants > 1 %}
++ <ul id="tenant_list" class="dropdown-menu">
++ <li class='divider'></li>
++ {% for tenant in authorized_tenants %}
++ {% if tenant.enabled and tenant.id != request.user.tenant_id %}
++ <li><a href="{% url switch_tenants tenant.id %}">{{ tenant.name }}</a></li>
++ {% endif %}
++ {% endfor %}
++ </ul>
++ {% endif %}
++ {% endwith %}
++ </div>
++ {% endif %}
++
++ {% horizon_dashboard_nav %}
++</div>
diff --git a/python-django-horizon.spec b/python-django-horizon.spec
index 124d4ba..0eb0142 100644
--- a/python-django-horizon.spec
+++ b/python-django-horizon.spec
@@ -21,9 +21,10 @@ Source4: openstack-dashboard-httpd-logging.conf
Patch0001: 0001-Don-t-access-the-net-while-building-docs.patch
Patch0002: 0002-disable-debug-move-web-root.patch
Patch0003: 0003-change-lockfile-location-to-tmp-and-also-add-localho.patch
+Patch0004: 0004-Fixed-keystone-test-data-to-match-openstack_auth.patch
+Patch0005: 0005-Add-a-customization-module-based-on-RHOS.patch
# patch will be included in 2013.2.b3
-Patch99: fix-tests.patch
mkdir -p openstack_dashboard_theme/static/dashboard/img
@@ -148,8 +149,9 @@ RHOS customimization module for OpenStack Dashboard
%patch0001 -p1
%patch0002 -p1
%patch0003 -p1
+%patch0004 -p1
+%patch0005 -p1
-%patch99 -p1
# remove unnecessary .po files
find . -name "django*.po" -exec rm -f '{}' \;
More information about the scm-commits
mailing list