[PATCH conductor] BZ#790819 Add better labels to X-Deltacloud-Provider field

tsedovic at redhat.com tsedovic at redhat.com
Wed Feb 22 17:29:20 UTC 2012


From: Tomas Sedovic <tomas at sedovic.cz>

https://bugzilla.redhat.com/show_bug.cgi?id=790819

With the javascript on, the X-Deltacloud-Provider field is now labeled
according to the selected provider type. If it's not used at all, the field is
hidden.

When the JS is off, we display a little legend below the text field to help
users figure out what to put in.
---
 src/app/controllers/providers_controller.rb |   15 ++++++++++++++-
 src/app/stylesheets/layout.scss             |   17 +++++++++++++++++
 src/app/views/providers/_form.html.haml     |   24 ++++++++++++++++++++----
 src/config/locales/en.yml                   |   13 +++++++++----
 4 files changed, 60 insertions(+), 9 deletions(-)

diff --git a/src/app/controllers/providers_controller.rb b/src/app/controllers/providers_controller.rb
index 0819b99..eb4c7b0 100644
--- a/src/app/controllers/providers_controller.rb
+++ b/src/app/controllers/providers_controller.rb
@@ -46,6 +46,7 @@ class ProvidersController < ApplicationController
     require_privilege(Privilege::CREATE, Provider)
     @provider = Provider.new
     @provider.url = Provider::DEFAULT_DELTACLOUD_URL
+    @provider.provider_type = ProviderType.find_by_deltacloud_driver('ec2')
     @title = t("providers.new.new_provider")
   end
 
@@ -237,7 +238,19 @@ class ProvidersController < ApplicationController
   end
 
   def load_providers_types
-    @provider_types = ProviderType.where(:name => ["Mock","Amazon EC2","RHEV-M","VMware vSphere"]).collect {|provider_type| [provider_type.name,provider_type.id]}
+    available_providers = ["Mock","Amazon EC2","RHEV-M","VMware vSphere"]
+    provider_types = ProviderType.where(:name => available_providers).map do |type|
+      begin
+        label = I18n.translate!("providers.form.x_deltacloud_provider.#{type.deltacloud_driver}")
+      rescue
+      end
+
+      { :id => type.id,
+        :label => label,
+        :name => type.name }
+    end
+    @labeled_provider_types = provider_types.select {|type| type[:label]}
+    @provider_type_options = provider_types.map {|type| [type[:name], type[:id]]}
   end
 
   def load_provider_tabs
diff --git a/src/app/stylesheets/layout.scss b/src/app/stylesheets/layout.scss
index f433d4c..b067b2e 100644
--- a/src/app/stylesheets/layout.scss
+++ b/src/app/stylesheets/layout.scss
@@ -1811,6 +1811,23 @@ div.lefted.new-catalog-entry-from-image{
     min-height: 32px;
   }
 }
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+New/Edit Provider Form
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+#x-deltacloud-provider-legend {
+
+  dl {
+    margin-left: 190px;
+  }
+
+  dt {
+    margin-top: 1em;
+    font-weight: bold;
+  }
+}
+
+
 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 User Card
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
diff --git a/src/app/views/providers/_form.html.haml b/src/app/views/providers/_form.html.haml
index e66f64a..e0afdb1 100644
--- a/src/app/views/providers/_form.html.haml
+++ b/src/app/views/providers/_form.html.haml
@@ -8,8 +8,24 @@
     = form.label :url, t('providers.form.provider_url')
     = form.text_field :url, :title => t('providers.form.provider_url'), :value => @provider.url, :class => 'long'
   %p
-    = form.label :provider_type, t('providers.form.provider_type')
-    = form.select(:provider_type_id, @provider_types, :prompt => t('providers.form.select_type_of_provider'))
+    = form.label :provider_type_id, t('providers.form.provider_type')
+    = form.select(:provider_type_id, @provider_type_options, :prompt => t('providers.form.select_type_of_provider'))
   %p
-    = form.label :url, t('providers.form.x_deltacloud_provider')
-    = form.text_field :deltacloud_provider, :title => t('providers.form.x_deltacloud_provider'), :value => @provider.deltacloud_provider, :class => 'long'
+    = form.label :deltacloud_provider, t('providers.form.x_deltacloud_provider.generic')
+    = form.text_field :deltacloud_provider, :title => t('providers.form.x_deltacloud_provider.generic'), :value => @provider.deltacloud_provider, :class => 'long'
+  %div#x-deltacloud-provider-legend.clearfix
+    %label= t('providers.form.x_deltacloud_provider_legend')
+    %dl
+      - @labeled_provider_types.each do |type|
+        %dt= type[:name]
+        %dd{ :class => type[:id] }= type[:label]
+:javascript
+  function updateXDeltacloudProviderLabel() {
+    var selected_id = $('#provider_provider_type_id option:selected').val();
+    var label = $('#x-deltacloud-provider-legend .' + selected_id).text();
+    $('label[for=provider_deltacloud_provider]').text(label);
+    $('#provider_deltacloud_provider').toggle(label.length !== 0);
+  }
+  $('#provider_provider_type_id').change(updateXDeltacloudProviderLabel);
+  updateXDeltacloudProviderLabel();
+  $('#x-deltacloud-provider-legend').hide();
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index b7e3057..6f34867 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -1002,10 +1002,15 @@ en:
       enable_configure_providers: "To enable and configure provider, click the slide switch in the upper-right-hand corner of this window."
       provider_unavailable: "The provider %{name} is currently not available."
     form:
-      x_deltacloud_provider: "X-Deltacloud-Provider:"
-      provider_name: "Provider Name:"
-      provider_url: "Provider URL:"
-      provider_type: "Provider Type:"
+      x_deltacloud_provider_legend: Legend for X-Deltacloud-Provider
+      x_deltacloud_provider:
+        generic: X-Deltacloud-Provider
+        ec2: EC2 Region
+        rhevm: RHEV-M API_PROVIDER
+        vsphere: vSphere API hostname
+      provider_name: Provider Name
+      provider_url: Provider URL
+      provider_type: Provider Type
       select_type_of_provider: Select type of provider
       caution_alt_text: Caution
       enter_correct_url_msg: Please enter a correct URL format.
-- 
1.7.6.5




More information about the aeolus-devel mailing list