From d8411aedcec4427bcc36a6158c709117ac02c53a Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Wed, 27 May 2015 10:36:43 +0200 Subject: [PATCH 1/2] Bug 2795: Added language chooser as select box if there are > 2 locales available --- .../gwt/home/client/shared/footer/Footer.java | 95 ++++++++++++++----- .../home/client/shared/footer/Footer.ui.xml | 25 +++++ 2 files changed, 97 insertions(+), 23 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.java index 8e5f8ea33e1..be8dadc061a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.java @@ -1,14 +1,17 @@ package com.sap.sailing.gwt.home.client.shared.footer; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.DivElement; import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.http.client.UrlBuilder; import com.google.gwt.i18n.client.LocaleInfo; +import com.google.gwt.text.shared.Renderer; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; @@ -16,11 +19,13 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.Window.Location; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.ValueListBox; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.client.app.HomePlacesNavigator; import com.sap.sailing.gwt.home.client.app.PlaceNavigation; import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace; import com.sap.sailing.gwt.home.client.place.whatsnew.WhatsNewPlace.WhatsNewNavigationTabs; +import com.sap.sse.common.Util.Pair; public class Footer extends Composite { private static FooterPanelUiBinder uiBinder = GWT.create(FooterPanelUiBinder.class); @@ -30,17 +35,32 @@ public class Footer extends Composite { @UiField Anchor changeLanguageLink; @UiField DivElement languageSelectionDiv; + @UiField(provided = true) ValueListBox> changeLanguageList = new ValueListBox>(new Renderer>() { + @Override + public String render(Pair object) { + if(object == null) { + return ""; + } + if(object.getB() != null) { + return object.getB(); + } + return object.getA(); + } + + @Override + public void render(Pair object, Appendable appendable) throws IOException { + appendable.append(render(object)); + } + }); + + private String otherLanguage; + private final LocaleInfo currentLocale = LocaleInfo.getCurrentLocale(); - private final Map localeAndLanguages; @UiField(provided = true) final PlaceNavigation releaseNotesNavigation; public Footer(final HomePlacesNavigator navigator) { - localeAndLanguages = new HashMap(); - localeAndLanguages.put("en", "English"); - localeAndLanguages.put("de", "Deutsch"); - FooterResources.INSTANCE.css().ensureInjected(); releaseNotesNavigation = navigator.getWhatsNewNavigation(WhatsNewNavigationTabs.SailingAnalytics); @@ -51,26 +71,55 @@ public class Footer extends Composite { @UiHandler("changeLanguageLink") public void changeLanguage(ClickEvent e) { - String selectedLanguage = changeLanguageLink.getText(); - String selectedLocale = null; - for (Entry entry: localeAndLanguages.entrySet()) { - if (entry.getValue().equals(selectedLanguage)) { - selectedLocale = entry.getKey(); - } + if(otherLanguage != null) { + UrlBuilder builder = Location.createUrlBuilder().setParameter("locale", otherLanguage); + Window.Location.replace(builder.buildString()); } - if(selectedLocale != null) { - UrlBuilder builder = Location.createUrlBuilder().setParameter("locale", selectedLocale); - Window.Location.replace(builder.buildString()); + } + + @UiHandler("changeLanguageList") + void onListSelection(ValueChangeEvent> event) { + String selectedLocaleName = event.getValue().getA(); + if(!currentLocale.getLocaleName().equals(selectedLocaleName)) { + UrlBuilder builder = Location.createUrlBuilder().setParameter("locale", selectedLocaleName); + Window.Location.replace(builder.buildString()); } } private void updateUI() { - LocaleInfo currentLocale = LocaleInfo.getCurrentLocale(); - HashMap languagesToSelectFrom = new HashMap(localeAndLanguages); - languagesToSelectFrom.remove(currentLocale.getLocaleName()); - - if(languagesToSelectFrom.size() == 1) { - changeLanguageLink.setText(languagesToSelectFrom.values().iterator().next()); + Set availableLocales = new HashSet(Arrays.asList(LocaleInfo.getAvailableLocaleNames())); + availableLocales.remove("default"); + + if(availableLocales.size() <= 1) { + // only current language (or removed default) available + changeLanguageLink.removeFromParent(); + changeLanguageList.removeFromParent(); + languageSelectionDiv.removeFromParent(); + return; } + if(availableLocales.size() == 2) { + changeLanguageList.removeFromParent(); + // current language + one we can switch to + for(String localeName : availableLocales) { + if(!currentLocale.getLocaleName().equals(localeName)) { + otherLanguage = localeName; + changeLanguageLink.setText(LocaleInfo.getLocaleNativeDisplayName(otherLanguage)); + return; + } + } + return; + } + changeLanguageLink.removeFromParent(); + Set> values = new HashSet<>(); + Pair selectedValue = null; + for(String localeName : availableLocales) { + Pair value = new Pair(localeName, LocaleInfo.getLocaleNativeDisplayName(localeName)); + values.add(value); + if(currentLocale.getLocaleName().equals(localeName)) { + selectedValue = value; + } + } + changeLanguageList.setValue(selectedValue); + changeLanguageList.setAcceptableValues(values); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.ui.xml index bfae282ac73..e4ff325fece 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.ui.xml @@ -5,6 +5,30 @@ + + .languageSelect { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + appearance: none; + + margin-top: 25px; + color: #efaa00; + line-height: 1.5em; + height: 1.5em; + display: inline-block; + border: transparent; + cursor: pointer; + padding-right: 1.2em; + background: #333; + cursor: pointer; + + background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZlcnNpb249JzEuMScgaGVpZ2h0PScxOHB4JyB3aWR0aD0nMTZweCc+PHRleHQgeD0nMCcgeT0nMTUnIGZpbGw9JyNlZmFhMDAnIGZvbnQtc2l6ZT0nMTYnPiYjOTY2MDs8L3RleHQ+PC9zdmc+"); + background-position: right center; + background-repeat: no-repeat; + + } +
@@ -33,6 +57,7 @@
: +
From 6e24e9c8df8a7542ff2e9e8da96a612eb81f240e Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Wed, 27 May 2015 11:21:10 +0200 Subject: [PATCH 2/2] Bug 2795: Fix for IE --- .../sap/sailing/gwt/home/client/shared/footer/Footer.ui.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.ui.xml index e4ff325fece..93ad10b02e6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/footer/Footer.ui.xml @@ -6,6 +6,9 @@ + .languageSelect::-ms-expand { + display: none; + } .languageSelect { -webkit-appearance: none; -moz-appearance: none;