Brion VIBBER has submitted this change and it was merged.

Change subject: Make sure dir attribute is set on RTL pages
......................................................................


Make sure dir attribute is set on RTL pages

Bug: 61867
Change-Id: Ib1479511c99e188eb2f79262255048142d2a276d
---
M wikipedia/assets/abusefilter.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/Gruntfile.js
M www/abusefilter.js
A www/js/rtlsupport.js
M www/preview.js
11 files changed, 88 insertions(+), 18 deletions(-)

Approvals:
  Brion VIBBER: Verified; Looks good to me, approved



diff --git a/wikipedia/assets/abusefilter.js b/wikipedia/assets/abusefilter.js
index 0c16147..00a511b 100644
--- a/wikipedia/assets/abusefilter.js
+++ b/wikipedia/assets/abusefilter.js
@@ -21,7 +21,7 @@
     content.appendChild( warning );
 } );
 
-},{"./bridge":2,"./transformer":3}],2:[function(require,module,exports){
+},{"./bridge":2,"./transformer":4}],2:[function(require,module,exports){
 function Bridge() {
 }
 
@@ -60,6 +60,12 @@
     module.exports.sendMessage( "DOMLoaded", {} );
 };
 },{}],3:[function(require,module,exports){
+var bridge = require("./bridge");
+
+bridge.registerListener( "setDirectionality", function( payload ) {
+    document.getElementsByTagName( "html" )[0].setAttribute( "dir", 
payload.dir );
+} );
+},{"./bridge":2}],4:[function(require,module,exports){
 function Transformer() {
 }
 
@@ -83,4 +89,4 @@
 
 module.exports = new Transformer();
 
-},{}]},{},[2,1])
\ No newline at end of file
+},{}]},{},[2,1,3])
\ No newline at end of file
diff --git a/wikipedia/assets/bundle.js b/wikipedia/assets/bundle.js
index 9089297..98ac29b 100644
--- a/wikipedia/assets/bundle.js
+++ b/wikipedia/assets/bundle.js
@@ -98,6 +98,12 @@
 } );
 },{"./bridge":2}],5:[function(require,module,exports){
 var bridge = require("./bridge");
+
+bridge.registerListener( "setDirectionality", function( payload ) {
+    document.getElementsByTagName( "html" )[0].setAttribute( "dir", 
payload.dir );
+} );
+},{"./bridge":2}],6:[function(require,module,exports){
+var bridge = require("./bridge");
 var transformer = require("./transformer");
 
 bridge.registerListener( "displayLeadSection", function( payload ) {
@@ -164,7 +170,7 @@
     window.scrollTo(0, scrollY);
 });
 
-},{"./bridge":2,"./transformer":6}],6:[function(require,module,exports){
+},{"./bridge":2,"./transformer":7}],7:[function(require,module,exports){
 function Transformer() {
 }
 
@@ -188,7 +194,7 @@
 
 module.exports = new Transformer();
 
-},{}],7:[function(require,module,exports){
+},{}],8:[function(require,module,exports){
 var bridge = require("./bridge");
 var transformer = require("./transformer");
 
@@ -226,4 +232,4 @@
     return content;
 } );
 
-},{"./bridge":2,"./transformer":6}]},{},[4,6,7,2,1,3,5])
\ No newline at end of file
+},{"./bridge":2,"./transformer":7}]},{},[4,7,8,2,1,3,6,5])
\ No newline at end of file
diff --git a/wikipedia/assets/preview.js b/wikipedia/assets/preview.js
index da569cf..1e8c969 100644
--- a/wikipedia/assets/preview.js
+++ b/wikipedia/assets/preview.js
@@ -77,4 +77,10 @@
     content.innerHTML = payload.html;
 } );
 
-},{"./bridge":2}]},{},[2,1,3])
\ No newline at end of file
+},{"./bridge":2}],4:[function(require,module,exports){
+var bridge = require("./bridge");
+
+bridge.registerListener( "setDirectionality", function( payload ) {
+    document.getElementsByTagName( "html" )[0].setAttribute( "dir", 
payload.dir );
+} );
+},{"./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 b394b5c..b2b7388 100644
--- a/wikipedia/src/main/java/org/wikipedia/Utils.java
+++ b/wikipedia/src/main/java/org/wikipedia/Utils.java
@@ -305,5 +305,30 @@
             return "wikipedia-android-official";
         }
     }
+
+    /**
+     * List of wiki language codes for which the content is primarily RTL.
+     *
+     * Ensure that this is always sorted alphabetically.
+     */
+    private static String[] rtlLangs = {
+            "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) {
+        JSONObject payload = new JSONObject();
+        try {
+            if (Arrays.binarySearch(rtlLangs, lang, null) < 0) {
+                payload.put("dir", "ltr");
+            } else {
+                payload.put("dir", "rtl");
+            }
+            Log.d("Wikipedia", lang);
+            Log.d("Wikipedia", payload.toString(4));
+        } catch (JSONException e) {
+            throw new RuntimeException(e);
+        }
+        bridge.sendMessage("setDirectionality", payload);
+    }
 }
 
diff --git 
a/wikipedia/src/main/java/org/wikipedia/editing/EditPreviewFragment.java 
b/wikipedia/src/main/java/org/wikipedia/editing/EditPreviewFragment.java
index 64a0f8c..2ba19dd 100644
--- a/wikipedia/src/main/java/org/wikipedia/editing/EditPreviewFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/editing/EditPreviewFragment.java
@@ -1,13 +1,9 @@
 package org.wikipedia.editing;
 
 import android.app.*;
-import android.os.Bundle;
-import android.support.v4.app.*;
+import android.os.*;
 import android.support.v4.app.Fragment;
-import android.util.*;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
+import android.view.*;
 import org.json.*;
 import org.wikipedia.*;
 
@@ -52,12 +48,19 @@
         bridge.sendMessage("displayPreviewHTML", payload);
     }
 
+    private boolean isDirectionSetup = false;
+
     public void showPreview(PageTitle title, String wikiText) {
         Utils.hideSoftKeyboard(getActivity());
         final ProgressDialog dialog = new ProgressDialog(getActivity());
         dialog.setIndeterminate(true);
         
dialog.setMessage(getString(R.string.edit_preview_fetching_dialog_message));
 
+        if (!isDirectionSetup) {
+            Utils.setupDirectionality(title.getSite().getLanguage(), bridge);
+            isDirectionSetup = true;
+        }
+
         new EditPreviewTask(getActivity(), wikiText, title) {
             @Override
             public void onBeforeExecute() {
diff --git 
a/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java 
b/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java
index 0be9a89..b0f7013 100644
--- a/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/editing/EditSectionActivity.java
@@ -73,6 +73,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);
         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 6bc8a34..6a8f075 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
@@ -145,6 +145,8 @@
 
         bridge = new CommunicationBridge(webView, 
"file:///android_asset/index.html");
         setupMessageHandlers();
+        Utils.addUtilityMethodsToBridge(getActivity(), bridge);
+        Utils.setupDirectionality(title.getSite().getLanguage(), bridge);
         linkHandler = new LinkHandler(getActivity(), bridge, title.getSite());
         app = (WikipediaApp)getActivity().getApplicationContext();
         api = 
((WikipediaApp)getActivity().getApplicationContext()).getAPIForSite(title.getSite());
diff --git a/www/Gruntfile.js b/www/Gruntfile.js
index 06be39d..f1dd319 100644
--- a/www/Gruntfile.js
+++ b/www/Gruntfile.js
@@ -7,6 +7,7 @@
         "js/actions.js",
         "js/editaction.js",
         "js/sections.js",
+        "js/rtlsupport.js",
         "tests/*.js"
     ];
     var allStyleFiles = [
@@ -28,7 +29,8 @@
                         "js/bridge.js",
                         "js/actions.js",
                         "js/editaction.js",
-                        "js/sections.js"
+                        "js/sections.js",
+                        "js/rtlsupport.js"
                     ],
                     "bundle-test.js": [
                         "js/main.js",
@@ -37,12 +39,14 @@
                     ],
                     "abusefilter.js": [
                         "js/bridge.js",
-                        "js/abusefilter.js"
+                        "js/abusefilter.js",
+                        "js/rtlsupport.js"
                     ],
                     "preview.js": [
                         "js/bridge.js",
                         "js/actions.js",
-                        "js/preview.js"
+                        "js/preview.js",
+                        "js/rtlsupport.js"
                     ]
                 }
             }
diff --git a/www/abusefilter.js b/www/abusefilter.js
index 0c16147..00a511b 100644
--- a/www/abusefilter.js
+++ b/www/abusefilter.js
@@ -21,7 +21,7 @@
     content.appendChild( warning );
 } );
 
-},{"./bridge":2,"./transformer":3}],2:[function(require,module,exports){
+},{"./bridge":2,"./transformer":4}],2:[function(require,module,exports){
 function Bridge() {
 }
 
@@ -60,6 +60,12 @@
     module.exports.sendMessage( "DOMLoaded", {} );
 };
 },{}],3:[function(require,module,exports){
+var bridge = require("./bridge");
+
+bridge.registerListener( "setDirectionality", function( payload ) {
+    document.getElementsByTagName( "html" )[0].setAttribute( "dir", 
payload.dir );
+} );
+},{"./bridge":2}],4:[function(require,module,exports){
 function Transformer() {
 }
 
@@ -83,4 +89,4 @@
 
 module.exports = new Transformer();
 
-},{}]},{},[2,1])
\ No newline at end of file
+},{}]},{},[2,1,3])
\ No newline at end of file
diff --git a/www/js/rtlsupport.js b/www/js/rtlsupport.js
new file mode 100644
index 0000000..2cc1e85
--- /dev/null
+++ b/www/js/rtlsupport.js
@@ -0,0 +1,5 @@
+var bridge = require("./bridge");
+
+bridge.registerListener( "setDirectionality", function( payload ) {
+    document.getElementsByTagName( "html" )[0].setAttribute( "dir", 
payload.dir );
+} );
\ No newline at end of file
diff --git a/www/preview.js b/www/preview.js
index da569cf..1e8c969 100644
--- a/www/preview.js
+++ b/www/preview.js
@@ -77,4 +77,10 @@
     content.innerHTML = payload.html;
 } );
 
-},{"./bridge":2}]},{},[2,1,3])
\ No newline at end of file
+},{"./bridge":2}],4:[function(require,module,exports){
+var bridge = require("./bridge");
+
+bridge.registerListener( "setDirectionality", function( payload ) {
+    document.getElementsByTagName( "html" )[0].setAttribute( "dir", 
payload.dir );
+} );
+},{"./bridge":2}]},{},[2,1,3,4])
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/115871
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib1479511c99e188eb2f79262255048142d2a276d
Gerrit-PatchSet: 2
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

Reply via email to