From efdb1d7d029656ca0e76a1ac8f7d664309d2c74a Mon Sep 17 00:00:00 2001 From: Gabriel Hurley Date: Wed, 19 Oct 2011 17:51:36 -0700 Subject: [PATCH] Fixed broken settings CSS sprite in topbar; Relocated dashboard settings bits. The gear icon sprite in the header had a completely broken hover state, was misaligned, and didn't highlight correctly when on the settings page. This patch fixes those UI problems. In addition, URL pattern and accompanying template have been moved to a logically consolidated home within the dashboard structure. --- .../dash/dashboard_settings.html | 34 ------------- .../django_openstack/dash/settings.html | 44 ++++++++++++++++ django-openstack/django_openstack/urls.py | 7 ++- .../dashboard/static/dashboard/css/style.css | 51 ++++++++++--------- .../dashboard/templates/_topbar.html | 2 +- openstack-dashboard/dashboard/urls.py | 4 -- 6 files changed, 79 insertions(+), 63 deletions(-) delete mode 100644 django-openstack/django_openstack/templates/django_openstack/dash/dashboard_settings.html create mode 100644 django-openstack/django_openstack/templates/django_openstack/dash/settings.html diff --git a/django-openstack/django_openstack/templates/django_openstack/dash/dashboard_settings.html b/django-openstack/django_openstack/templates/django_openstack/dash/dashboard_settings.html deleted file mode 100644 index 39d3272a1..000000000 --- a/django-openstack/django_openstack/templates/django_openstack/dash/dashboard_settings.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends 'django_openstack/dash/base.html' %} -{%load i18n%} - -{% block sidebar %} - {{block.super}} -{% endblock %} - -{% block page_header %} - {% url dash_instances request.user.tenant_id as refresh_link %} - {# to make searchable false, just remove it from the include statement #} - {% include "django_openstack/common/_page_header.html" with title=_("Dashboard Settings") %} -{% endblock page_header %} - -{% block dash_main %} -
-
-

{% trans "Dashboard User Interface Language"%}

-
{% csrf_token %} -

- -
-
-
 
-
-{% endblock %} diff --git a/django-openstack/django_openstack/templates/django_openstack/dash/settings.html b/django-openstack/django_openstack/templates/django_openstack/dash/settings.html new file mode 100644 index 000000000..658e2f500 --- /dev/null +++ b/django-openstack/django_openstack/templates/django_openstack/dash/settings.html @@ -0,0 +1,44 @@ +{% extends 'base.html' %} +{%load i18n%} + +{% block topbar %} + {% with current_topbar="settings" %} + {{block.super}} + {% endwith %} +{% endblock %} + + +{% block sidebar %} + {% include 'django_openstack/dash/_sidebar.html' %} +{% endblock %} + + +{% block main %} + {% block page_header %} + {% url dash_instances request.user.tenant_id as refresh_link %} + {# to make searchable false, just remove it from the include statement #} + {% include "django_openstack/common/_page_header.html" with title=_("Dashboard Settings") %} + {% endblock page_header %} + {% include "_messages.html" %} +
+
+
+

{% trans "Dashboard User Interface Language"%}

+
{% csrf_token %} +

+ +
+
+
 
+
+
+{% endblock %} diff --git a/django-openstack/django_openstack/urls.py b/django-openstack/django_openstack/urls.py index 4bb0908a1..d3b1f5053 100644 --- a/django-openstack/django_openstack/urls.py +++ b/django-openstack/django_openstack/urls.py @@ -18,14 +18,19 @@ # License for the specific language governing permissions and limitations # under the License. -from django.conf.urls.defaults import * +from django.conf.urls.defaults import patterns, url, include from django.conf import settings from django_openstack.signals import * +from django.views.generic import TemplateView urlpatterns = patterns('', url(r'^auth/', include('django_openstack.auth.urls')), url(r'^dash/', include('django_openstack.dash.urls')), url(r'^syspanel/', include('django_openstack.syspanel.urls')), + url(r'^settings/$', TemplateView.as_view( + template_name='django_openstack/dash/settings.html'), + name='dashboard_settings') + ) # import urls from modules diff --git a/openstack-dashboard/dashboard/static/dashboard/css/style.css b/openstack-dashboard/dashboard/static/dashboard/css/style.css index 372c0966d..1caf82ee5 100644 --- a/openstack-dashboard/dashboard/static/dashboard/css/style.css +++ b/openstack-dashboard/dashboard/static/dashboard/css/style.css @@ -95,8 +95,8 @@ input[type="submit"]:active { background-position: 0 -105px; } } #main a.action_link:hover, #main input.action_input:hover { - background: #6fa267; - text-decoration: none; + background: #6fa267; + text-decoration: none; } #main input.action_input { @@ -118,7 +118,7 @@ input[type="submit"]:active { background-position: 0 -105px; } min-width: 1024px; width: 100%; height: 45px; - float: left; + float: left; } h1 { @@ -135,7 +135,7 @@ h1 a{ } #main_nav { - background: #f3f8fa; + background-color: #f3f8fa; text-transform: uppercase; min-width: 800px; width: 84%; @@ -151,7 +151,7 @@ h1 a{ #main_nav li a { color: #8eacb7; - font-size: 12px; + font-size: 12px; margin: -10px 0 0 0; padding: 5px 10px 0; float: left; @@ -161,7 +161,7 @@ h1 a{ height: 33px; } #main_nav li a.active { border-top: 5px solid #8eacb7; } -#main_nav li a:hover { background: #dff2fa; } +#main_nav li a:hover { background-color: #dff2fa; } /* Tenant Dropdown */ @@ -174,7 +174,7 @@ h1 a{ height: 38px; margin: -45px 0 0 0; padding: 5px 0 0 0; - float: right; + float: right; border: 1px solid #d6e4d9; } @@ -203,11 +203,16 @@ h1 a{ #drop_btn:hover { background-color: #bfdec6; } #settings_btn { - background: url(../images/gears_small.png) no-repeat center center; + background-image: url(../images/gears_small.png); + background-repeat: no-repeat; + background-position: center top; width: 23px; height: 29px; } -#settings_btn:hover { background-color: #bfdec6; } +#settings_btn:hover { + background-color: #bfdec6; + text-decoration: none; +} a#current_tenant { background: #f3faf3; @@ -302,7 +307,7 @@ li.title h4{ } #page_header h2 span { color: #6a6a6a; } -#page_header .right { +#page_header .right { float: right; margin-right: 20px; } @@ -389,7 +394,7 @@ label.refreshOption { font-size: 20px; } -table.wide { +table.wide { width: 100%; margin: 0 0 25px 0; } @@ -494,23 +499,23 @@ td#actions input[type="submit"]:hover { text-decoration: underline; } border-radius: 5px; } -.message_box, .status_box.info { +.message_box, .status_box.info { background-color: #e8f8ff; color: #7ab6c5; border-color: #9ac7dc; } -.message_box.success { +.message_box.success { background-color: #e9ffe8; color: #7ec67b; border-color: #9edd9b; } -.message_box.warning { +.message_box.warning { background-color: #ffffe8; color: #d1b12d; border-color: #ffe37b; } -.message_box.error { +.message_box.error { background-color: #ffdbdc; color: #ff8080; border-color: #ff9a99; @@ -519,7 +524,7 @@ td#actions input[type="submit"]:hover { text-decoration: underline; } .message_box h2 { float: left; min-width: 120px; - padding: 20px 20px 20px 20px; + padding: 20px 20px 20px 20px; } .message_box.info h2 { color: #2a7380; border-color: #9ac7dc; } @@ -549,19 +554,19 @@ td#actions input[type="submit"]:hover { text-decoration: underline; } border-radius: 5px; } -.status_box.good { +.status_box.good { background-color: #e9ffe8; color: #7ec67b; border-color: #9edd9b; } -.status_box.medium { +.status_box.medium { background-color: #ffffe8; color: #eada83; border-color: #ffe37b; } -.status_box.bad { +.status_box.bad { background-color: #ffdbdc; color: #ff8080; border-color: #ff9a99; @@ -573,7 +578,7 @@ td#actions input[type="submit"]:hover { text-decoration: underline; } .status_box.medium .status { background: url(../images/status_sprite.png) no-repeat 6px -90px; } .status_box.bad .status { background: url(../images/status_sprite.png) no-repeat 6px -186px; } -.status_box.small { +.status_box.small { width: 100%; min-width: 360px; margin: 0 0 25px 0; @@ -624,7 +629,7 @@ td#actions input[type="submit"]:hover { text-decoration: underline; } text-align: center; } -.status_box p.avail span, .status_box p.used span { +.status_box p.avail span, .status_box p.used span { font-size: 10px; margin-top: -5px; text-transform: uppercase; @@ -674,7 +679,7 @@ td#actions input[type="submit"]:hover { text-decoration: underline; } font-size: 11px; } -#date_form { +#date_form { width: 502px; margin: 18px 0 25px 22px; } @@ -842,7 +847,7 @@ input:focus, textarea:focus { float: left; position: relative; border: 1px solid #d2dce1; - -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.2); + -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.2); -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2); } diff --git a/openstack-dashboard/dashboard/templates/_topbar.html b/openstack-dashboard/dashboard/templates/_topbar.html index 4d367d02c..ea1729e9e 100644 --- a/openstack-dashboard/dashboard/templates/_topbar.html +++ b/openstack-dashboard/dashboard/templates/_topbar.html @@ -11,7 +11,7 @@ {% else %} NOT _LOGGED_IN_TOPBAR {% endif %} -
  •  
  • +
  •  
  • diff --git a/openstack-dashboard/dashboard/urls.py b/openstack-dashboard/dashboard/urls.py index 9aa5e6ccb..1f2c6bd9a 100644 --- a/openstack-dashboard/dashboard/urls.py +++ b/openstack-dashboard/dashboard/urls.py @@ -28,7 +28,6 @@ from django.conf import settings from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.views import generic as generic_views import django.views.i18n -from django.views.generic.simple import direct_to_template from django_openstack import urls as django_openstack_urls @@ -39,9 +38,6 @@ urlpatterns = patterns('', url(r'^syspanel/$', 'django_openstack.syspanel.views.instances.usage', name='syspanel_overview'), url(r'^i18n/', include('django.conf.urls.i18n')), - url(r'^settings/$', direct_to_template, - {'template': 'django_openstack/dash/dashboard_settings.html'}, - name='dashboard_settings') ) # Development static app and project media serving using the staticfiles app.