Brion VIBBER has submitted this change and it was merged. Change subject: Make license footer display with UI lang directionality ......................................................................
Make license footer display with UI lang directionality Adds ways to access the directionality of content language and UI language separately in the JS. Bug: 39048 Change-Id: I8eecaf647b37f072c0ef2acba25f1d384cb8781a --- M wikipedia/assets/abusefilter.js M wikipedia/assets/bundle-test.js M wikipedia/assets/bundle.js M wikipedia/assets/preview.js M wikipedia/src/main/java/org/wikipedia/Utils.java M wikipedia/src/main/java/org/wikipedia/editing/EditPreviewFragment.java M wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java M wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java M www/abusefilter.js M www/js/main.js M www/js/rtlsupport.js M www/preview.js 12 files changed, 76 insertions(+), 17 deletions(-) Approvals: Brion VIBBER: Verified; Looks good to me, approved diff --git a/wikipedia/assets/abusefilter.js b/wikipedia/assets/abusefilter.js index 00a511b..12fc2ea 100644 --- a/wikipedia/assets/abusefilter.js +++ b/wikipedia/assets/abusefilter.js @@ -63,8 +63,12 @@ var bridge = require("./bridge"); bridge.registerListener( "setDirectionality", function( payload ) { - document.getElementsByTagName( "html" )[0].setAttribute( "dir", payload.dir ); + var html = document.getElementsByTagName( "html" )[0]; + html.setAttribute( "dir", payload.contentDirection ); + html.classList.add( "content-" + payload.contentDirection ); + html.classList.add( "ui-" + payload.uiDirection ); } ); + },{"./bridge":2}],4:[function(require,module,exports){ function Transformer() { } diff --git a/wikipedia/assets/bundle-test.js b/wikipedia/assets/bundle-test.js index 470914c..b5b27b0 100644 --- a/wikipedia/assets/bundle-test.js +++ b/wikipedia/assets/bundle-test.js @@ -39,6 +39,10 @@ },{}],2:[function(require,module,exports){ var bridge = require("./bridge"); bridge.registerListener( "displayAttribution", function( payload ) { + var directionality = document.getElementsByTagName( "html" )[0].classList.contains( "ui-rtl" ) ? "rtl" : "ltr"; + + var lastUpdatedDiv = document.getElementById( "lastupdated" ); + lastUpdatedDiv.setAttribute( "dir", directionality ); var lastUpdatedA = document.getElementById( "lastupdated" ); lastUpdatedA.innerText = payload.historyText; lastUpdatedA.href = payload.historyTarget; diff --git a/wikipedia/assets/bundle.js b/wikipedia/assets/bundle.js index 14a419e..77ae0ce 100644 --- a/wikipedia/assets/bundle.js +++ b/wikipedia/assets/bundle.js @@ -87,6 +87,10 @@ },{"./actions":1,"./bridge":2}],4:[function(require,module,exports){ var bridge = require("./bridge"); bridge.registerListener( "displayAttribution", function( payload ) { + var directionality = document.getElementsByTagName( "html" )[0].classList.contains( "ui-rtl" ) ? "rtl" : "ltr"; + + var lastUpdatedDiv = document.getElementById( "lastupdated" ); + lastUpdatedDiv.setAttribute( "dir", directionality ); var lastUpdatedA = document.getElementById( "lastupdated" ); lastUpdatedA.innerText = payload.historyText; lastUpdatedA.href = payload.historyTarget; @@ -107,8 +111,12 @@ var bridge = require("./bridge"); bridge.registerListener( "setDirectionality", function( payload ) { - document.getElementsByTagName( "html" )[0].setAttribute( "dir", payload.dir ); + var html = document.getElementsByTagName( "html" )[0]; + html.setAttribute( "dir", payload.contentDirection ); + html.classList.add( "content-" + payload.contentDirection ); + html.classList.add( "ui-" + payload.uiDirection ); } ); + },{"./bridge":2}],6:[function(require,module,exports){ var bridge = require("./bridge"); var transformer = require("./transformer"); diff --git a/wikipedia/assets/preview.js b/wikipedia/assets/preview.js index e6f488c..065b5db 100644 --- a/wikipedia/assets/preview.js +++ b/wikipedia/assets/preview.js @@ -87,6 +87,10 @@ var bridge = require("./bridge"); bridge.registerListener( "setDirectionality", function( payload ) { - document.getElementsByTagName( "html" )[0].setAttribute( "dir", payload.dir ); + var html = document.getElementsByTagName( "html" )[0]; + html.setAttribute( "dir", payload.contentDirection ); + html.classList.add( "content-" + payload.contentDirection ); + html.classList.add( "ui-" + payload.uiDirection ); } ); + },{"./bridge":2}]},{},[2,1,3,4]) \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/Utils.java b/wikipedia/src/main/java/org/wikipedia/Utils.java index aaaa5f4..670d1bc 100644 --- a/wikipedia/src/main/java/org/wikipedia/Utils.java +++ b/wikipedia/src/main/java/org/wikipedia/Utils.java @@ -325,20 +325,40 @@ "arc", "arz", "ar", "bcc", "bqi", "ckb", "dv", "fa", "glk", "ha", "he", "khw", "ks", "mzn", "pnb", "ps", "sd", "ug", "ur", "yi" }; - public static void setupDirectionality(String lang, CommunicationBridge bridge) { + + /** + * Setup directionality for both UI and content elements in a webview. + * + * @param contentLang The Content language to use to set directionality. Wiki Language code. + * @param uiLang The UI language to use to set directionality. Java language code. + * @param bridge The CommunicationBridge to use to communicate with the WebView + */ + public static void setupDirectionality(String contentLang, String uiLang, CommunicationBridge bridge) { JSONObject payload = new JSONObject(); try { - if (Arrays.binarySearch(rtlLangs, lang, null) < 0) { - payload.put("dir", "ltr"); + if (isLangRTL(contentLang)) { + payload.put("contentDirection", "rtl"); } else { - payload.put("dir", "rtl"); + payload.put("contentDirection", "ltr"); } - Log.d("Wikipedia", lang); - Log.d("Wikipedia", payload.toString(4)); + if (isLangRTL(langCodeToWikiLang(uiLang))) { + payload.put("uiDirection", "rtl"); + } else { + payload.put("uiDirection", "ltr"); + } } catch (JSONException e) { throw new RuntimeException(e); } bridge.sendMessage("setDirectionality", payload); } -} + /** + * Returns true if the given wiki language is to be displayed RTL. + * + * @param lang Wiki code for the language to check for directionality + * @return true if it is RTL, false if LTR + */ + public static boolean isLangRTL(String lang) { + return Arrays.binarySearch(rtlLangs, lang, null) >= 0; + } +} diff --git a/wikipedia/src/main/java/org/wikipedia/editing/EditPreviewFragment.java b/wikipedia/src/main/java/org/wikipedia/editing/EditPreviewFragment.java index 88b82ab..129f354 100644 --- a/wikipedia/src/main/java/org/wikipedia/editing/EditPreviewFragment.java +++ b/wikipedia/src/main/java/org/wikipedia/editing/EditPreviewFragment.java @@ -8,6 +8,8 @@ import org.wikipedia.*; import org.wikipedia.editing.summaries.*; +import java.util.*; + public class EditPreviewFragment extends Fragment { private ObservableWebView webview; private View previewContainer; @@ -65,7 +67,7 @@ dialog.setMessage(getString(R.string.edit_preview_fetching_dialog_message)); if (!isDirectionSetup) { - Utils.setupDirectionality(title.getSite().getLanguage(), bridge); + Utils.setupDirectionality(title.getSite().getLanguage(), Locale.getDefault().getLanguage(), bridge); isDirectionSetup = true; } diff --git a/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java b/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java index 87259ee..3aff0cc 100644 --- a/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java +++ b/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java @@ -17,6 +17,8 @@ import org.wikipedia.login.*; import org.wikipedia.page.*; +import java.util.*; + public class EditSectionActivity extends ActionBarActivity { public static final String ACTION_EDIT_SECTION = "org.wikipedia.edit_section"; public static final String EXTRA_TITLE = "org.wikipedia.edit_section.title"; @@ -79,7 +81,7 @@ abusefilterContainer = findViewById(R.id.edit_section_abusefilter_container); abusefilterWebView = (WebView) findViewById(R.id.edit_section_abusefilter_webview); abusefilterBridge = new CommunicationBridge(abusefilterWebView, "file:///android_asset/abusefilter.html"); - Utils.setupDirectionality(title.getSite().getLanguage(), abusefilterBridge); + Utils.setupDirectionality(title.getSite().getLanguage(), Locale.getDefault().getLanguage(), abusefilterBridge); abuseFilterBackAction = findViewById(R.id.edit_section_abusefilter_back); captchaHandler = new CaptchaHandler(this, title.getSite(), progressDialog, sectionContainer, R.string.edit_section_activity_title); diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java index b8cde8c..e4eed65 100644 --- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java +++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java @@ -146,7 +146,7 @@ bridge = new CommunicationBridge(webView, "file:///android_asset/index.html"); setupMessageHandlers(); Utils.addUtilityMethodsToBridge(getActivity(), bridge); - Utils.setupDirectionality(title.getSite().getLanguage(), bridge); + Utils.setupDirectionality(title.getSite().getLanguage(), Locale.getDefault().getLanguage(), bridge); linkHandler = new LinkHandler(getActivity(), bridge, title.getSite()); app = (WikipediaApp)getActivity().getApplicationContext(); api = ((WikipediaApp)getActivity().getApplicationContext()).getAPIForSite(title.getSite()); diff --git a/www/abusefilter.js b/www/abusefilter.js index 00a511b..12fc2ea 100644 --- a/www/abusefilter.js +++ b/www/abusefilter.js @@ -63,8 +63,12 @@ var bridge = require("./bridge"); bridge.registerListener( "setDirectionality", function( payload ) { - document.getElementsByTagName( "html" )[0].setAttribute( "dir", payload.dir ); + var html = document.getElementsByTagName( "html" )[0]; + html.setAttribute( "dir", payload.contentDirection ); + html.classList.add( "content-" + payload.contentDirection ); + html.classList.add( "ui-" + payload.uiDirection ); } ); + },{"./bridge":2}],4:[function(require,module,exports){ function Transformer() { } diff --git a/www/js/main.js b/www/js/main.js index ab9ae9c..ceceb75 100644 --- a/www/js/main.js +++ b/www/js/main.js @@ -1,5 +1,9 @@ var bridge = require("./bridge"); bridge.registerListener( "displayAttribution", function( payload ) { + var directionality = document.getElementsByTagName( "html" )[0].classList.contains( "ui-rtl" ) ? "rtl" : "ltr"; + + var lastUpdatedDiv = document.getElementById( "lastupdated" ); + lastUpdatedDiv.setAttribute( "dir", directionality ); var lastUpdatedA = document.getElementById( "lastupdated" ); lastUpdatedA.innerText = payload.historyText; lastUpdatedA.href = payload.historyTarget; diff --git a/www/js/rtlsupport.js b/www/js/rtlsupport.js index 2cc1e85..1ed05f0 100644 --- a/www/js/rtlsupport.js +++ b/www/js/rtlsupport.js @@ -1,5 +1,8 @@ var bridge = require("./bridge"); bridge.registerListener( "setDirectionality", function( payload ) { - document.getElementsByTagName( "html" )[0].setAttribute( "dir", payload.dir ); -} ); \ No newline at end of file + var html = document.getElementsByTagName( "html" )[0]; + html.setAttribute( "dir", payload.contentDirection ); + html.classList.add( "content-" + payload.contentDirection ); + html.classList.add( "ui-" + payload.uiDirection ); +} ); diff --git a/www/preview.js b/www/preview.js index e6f488c..065b5db 100644 --- a/www/preview.js +++ b/www/preview.js @@ -87,6 +87,10 @@ var bridge = require("./bridge"); bridge.registerListener( "setDirectionality", function( payload ) { - document.getElementsByTagName( "html" )[0].setAttribute( "dir", payload.dir ); + var html = document.getElementsByTagName( "html" )[0]; + html.setAttribute( "dir", payload.contentDirection ); + html.classList.add( "content-" + payload.contentDirection ); + html.classList.add( "ui-" + payload.uiDirection ); } ); + },{"./bridge":2}]},{},[2,1,3,4]) \ No newline at end of file -- To view, visit https://gerrit.wikimedia.org/r/122560 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I8eecaf647b37f072c0ef2acba25f1d384cb8781a Gerrit-PatchSet: 6 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Yuvipanda <yuvipa...@gmail.com> Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits