jenkins-bot has submitted this change and it was merged.

Change subject: Put disambiguation links into a popup dialog.
......................................................................


Put disambiguation links into a popup dialog.

- Also update the styling for page-issues/disambig buttons.
- No longer show redundant "multiple page issues" container
- No longer show "ambox-notice" type boxes

Change-Id: Idfc1a57b3d58f4eae608cd3dbfb7d9030fc4a4f2
---
M wikipedia/assets/bundle.js
M wikipedia/assets/night.css
M wikipedia/assets/preview.css
M wikipedia/assets/preview.js
M wikipedia/assets/styles.css
A wikipedia/res/layout/dialog_disambig.xml
A wikipedia/res/layout/item_disambig.xml
M wikipedia/res/values-qq/strings.xml
M wikipedia/res/values/strings.xml
M wikipedia/src/main/java/org/wikipedia/page/DisambigHandler.java
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
M www/js/actions.js
M www/js/disambig.js
M www/js/issues.js
M www/js/sections.js
15 files changed, 239 insertions(+), 98 deletions(-)

Approvals:
  BearND: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/wikipedia/assets/bundle.js b/wikipedia/assets/bundle.js
index fdafb6b..8675efd 100644
--- a/wikipedia/assets/bundle.js
+++ b/wikipedia/assets/bundle.js
@@ -65,8 +65,14 @@
     }
 
     function handleDisambig( sourceNode ) {
-        var title = sourceNode.getAttribute("title");
-        bridge.sendMessage( 'disambigClicked', { "title": title } );
+        var res = [];
+        var hatnotes = sourceNode.parentNode.querySelectorAll( 'div.hatnote' );
+        var i = 0,
+            len = hatnotes.length;
+        for (; i < len; i++) {
+            res.push( hatnotes[i].innerHTML );
+        }
+        bridge.sendMessage( 'disambigClicked', { "hatnotes": res } );
     }
 
     if (sourceNode) {
@@ -140,26 +146,20 @@
 
 transformer.register( 'displayDisambigLink', function( content ) {
     var hatnotes = content.querySelectorAll( "div.hatnote" );
-    var i = 0;
-    for (; i<hatnotes.length; i++) {
-        var el = hatnotes[i];
-        //only care about the first hatnote, and remove all others...
-        if (i === 0) {
-            var links = el.querySelectorAll("a");
-            // use the last link in the hatnote!
-            if (links.length > 0) {
-                var container = document.getElementById("issues_container");
-                var newlink = document.createElement('a');
-                newlink.setAttribute('href', '#disambig');
-                newlink.id = "disambig_button";
-                newlink.className = 'disambig_button';
-                newlink.setAttribute("title", links[links.length - 
1].getAttribute("href"));
-                container.appendChild(newlink);
-                el.parentNode.removeChild(el);
-            }
-        } else {
-            el.parentNode.removeChild(el);
+    if ( hatnotes.length > 0 ) {
+        var container = document.getElementById( "issues_container" );
+        var wrapper = document.createElement( 'div' );
+        var link = document.createElement( 'a' );
+        link.setAttribute( 'href', '#disambig' );
+        link.className = 'disambig_button';
+        link.id = 'disambig_button';
+        wrapper.appendChild( link );
+        var i = 0,
+            len = hatnotes.length;
+        for (; i < len; i++) {
+            wrapper.appendChild( hatnotes[i] );
         }
+        container.appendChild( wrapper );
     }
     return content;
 } );
@@ -177,7 +177,7 @@
 var transformer = require('./transformer');
 
 transformer.register( 'displayIssuesLink', function( content ) {
-    var issues = content.querySelectorAll( "table.ambox" );
+    var issues = content.querySelectorAll( 
"table.ambox:not([class*='ambox-multiple_issues']):not([class*='ambox-notice'])"
 );
     if ( issues.length > 0 ) {
         var el = issues[0];
         var container = document.getElementById( "issues_container" );
@@ -185,6 +185,7 @@
         var link = document.createElement( 'a' );
         link.setAttribute( 'href', '#issues' );
         link.className = 'issues_button';
+        link.id = 'issues_button';
         wrapper.appendChild( link );
         el.parentNode.replaceChild( wrapper, el );
         var i = 0,
@@ -419,9 +420,21 @@
         document.getElementById( "content" ).removeChild(issuesContainer);
     }
     //update the text of the disambiguation link, if there is one
-    var disambig = document.getElementById( "disambig_button" );
-    if (disambig !== null) {
-        disambig.innerText = payload.string_page_similar_titles;
+    var disambigBtn = document.getElementById( "disambig_button" );
+    if (disambigBtn !== null) {
+        disambigBtn.innerText = payload.string_page_similar_titles;
+    }
+    //update the text of the page-issues link, if there is one
+    var issuesBtn = document.getElementById( "issues_button" );
+    if (issuesBtn !== null) {
+        issuesBtn.innerText = payload.string_page_issues;
+    }
+    //if we have both issues and disambiguation, then insert the separator
+    if (issuesBtn !== null && disambigBtn !== null) {
+        var separator = document.createElement( 'span' );
+        separator.innerText = '|';
+        separator.className = 'issues_separator';
+        issuesContainer.insertBefore(separator, issuesBtn.parentNode);
     }
 
     document.getElementById( "content" ).appendChild( content );
diff --git a/wikipedia/assets/night.css b/wikipedia/assets/night.css
index ae144a8..8e06a9c 100644
--- a/wikipedia/assets/night.css
+++ b/wikipedia/assets/night.css
@@ -1,6 +1,5 @@
 /* Same specificity as in less/content/main.less */
 /* Same specificity as in less/content/hacks.less */
-/* See also less/issues.less */
 body {
   color: #999;
   background: #000;
@@ -26,20 +25,4 @@
 }
 .content table.infobox {
   background: #000;
-}
-a.issues_button {
-  background: 
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAADBElEQVR4nO3aX0hTURwH8O/v3q3co1CgERQY/rtK5EMR+hT44tgGRfbSm4EV1RaRYNFLD75kuVkJ+VJBBWkUmxYU1EvYP1TK3CzTKCywGQRSodu999dDChJEeXe2s+h8GAwuO+d8+bJ7Lzt3gKIoiqIo/ytyOrA8dGs9EW1wWa4vTFbaInOm6qOV7O1ttEQGzDbHBVSGoq3E1PbLYQboLQHDDAyD7IcF36efDXU3pzPMmTUuwfMRwCUMlADYCSbMeYq/GaHYABhR3W3eGGnfnhS8ZkZEfwP+xALwAKAr87Z+feJsw7zT9RdV7+svtNxck+j03XcyXss0wDLpAOoBvrxSM98Zh6InNh28s9rpZBWhvhp7hf0Imr3Z6RyiT4HlKALRyRSZx4xg7CpIPxcPe5//zcCyA9E1Ll1rBaMZgDuTEDILWFQAoAlsNRnBvpfE6IdmD2iW+4V7furTUHdzeuvhHs+s6SmFjjpibmBgG8AFIhbPhwKW4GomVIMJlmbC8hTDCMYwawPQGPj5EirX14C8owqQHUA2VYDsALKpAmQHkE0VIDuAbKoA2QFkUwXIDiCbKkB2ANlUAbIDyCZsR4iAJwz0sKYNwjZTBG0tAWUM1ANUC3BGe3fZIqwAG7iUiPgvLDn0dOG9rfRI3yq3hd1g7AFgiFpThJzsCY6f9n0GEAY4YgRjPjAdB8HxVrZIOb4GEMcjgVi807+FiHcAmBIwaZLTrmtOB0u7CI6GAzeRnqtkQjtATp8dzpDG3rHz3vdOc0i9C8S7Gr8mwv6jlq5VMaEHy9v1fmwz1Y52BAYzyZAXt8FXZ7zjibB/lw6uAPgUQJO/++zCk+e98cLhurFO35tM186rByMjkcBrAC0AWoz9t4vg5o1gex00ssF2EhoSox2BCZFr5lUBS8W7vNMAprO9Tl6cAjKpAmQHkE0VIDuAbKoA2QFkUwXIDiCbKkB2ANmEFUDMc6LmyiVBP4ZoEqZ+V8xcueW4AEq5LmouvgfdTJV/SCX+tb/JK4qiKIqi/ABBuOy9cIEOvwAAAABJRU5ErkJggg==)
 no-repeat center;
-  background: 
url(//bits.beta.wmflabs.org/static-master/extensions/MobileApp/less/../images/flag-night.png?2014-07-29T19:15:00Z)
 no-repeat center!ie;
-  border: 1px solid #2B6FB2;
-}
-a.issues_button:active {
-  border: 4px solid #2B6FB2;
-}
-a.disambig_button {
-  border: 1px solid #2B6FB2;
-  color: #2B6FB2;
-}
-a.disambig_button:active {
-  background-color: #2B6FB2;
-  color: #b0b0b0;
 }
\ No newline at end of file
diff --git a/wikipedia/assets/preview.css b/wikipedia/assets/preview.css
index a5aaa60..1c4c720 100644
--- a/wikipedia/assets/preview.css
+++ b/wikipedia/assets/preview.css
@@ -199,7 +199,7 @@
   font-size: .8em;
   line-height: 1.5;
   padding: 0 !important;
-  color: #777;
+  color: #555;
   width: auto !important;
 }
 .content .thumbborder {
diff --git a/wikipedia/assets/preview.js b/wikipedia/assets/preview.js
index af9d02c..3f71254 100644
--- a/wikipedia/assets/preview.js
+++ b/wikipedia/assets/preview.js
@@ -65,8 +65,14 @@
     }
 
     function handleDisambig( sourceNode ) {
-        var title = sourceNode.getAttribute("title");
-        bridge.sendMessage( 'disambigClicked', { "title": title } );
+        var res = [];
+        var hatnotes = sourceNode.parentNode.querySelectorAll( 'div.hatnote' );
+        var i = 0,
+            len = hatnotes.length;
+        for (; i < len; i++) {
+            res.push( hatnotes[i].innerHTML );
+        }
+        bridge.sendMessage( 'disambigClicked', { "hatnotes": res } );
     }
 
     if (sourceNode) {
diff --git a/wikipedia/assets/styles.css b/wikipedia/assets/styles.css
index 21b14a5..56f912a 100644
--- a/wikipedia/assets/styles.css
+++ b/wikipedia/assets/styles.css
@@ -199,7 +199,7 @@
   font-size: .8em;
   line-height: 1.5;
   padding: 0 !important;
-  color: #777;
+  color: #555;
   width: auto !important;
 }
 .content .thumbborder {
@@ -597,20 +597,25 @@
 }
 
 div.issues_container {
-  margin: 0px;
+  margin-top: -0.9em;
+  /* a bit hacky that it assumes it's right below an h1 heading */
+  margin-bottom: 3.5em;
   padding: 0px;
   width: 100%;
-  display: inline-block;
+  display: block;
+  font-size: .95em;
+  letter-spacing: 0.02em;
+  color: #555555;
+}
+span.issues_separator {
+  padding-left: 0.6em;
+  padding-right: 0.6em;
+  float: left;
 }
 a.issues_button {
-  height: 32px;
-  width: 36px;
-  background-size: 24px 24px;
-  background: 
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAACzklEQVR4nO3aP2gTYRjH8e+TpK2iiIIFEUFpi/+D1qb+oZ2UOujgIOIiLnVwcXCwtAlCkKQKOgjiYBHUxaEVQXGxq1Tb9FJRsai14h8otVVcFLXXu8fBDsFByuWSN+L7WQJH3vf58YO7I7kDy7Isy7L+VxJ04c5OXePFaPCEL3i4AtN1Y0z19YkXZsBSC1xAc1K7VOj+47ACbwRGfBgRnwf6mVy+R9ziYpZOLOT9BKhXqBc4RASklm+JlA4I3PlZxa2naZkKeWZRImWYsQjYq3C52mUikdL+RFKPNpzQmjA2j3fqsuak7gm6vhwFFIoCbQg3li7hbVNSTzd2aW3QzZqSuq0mykNge9A9yl1AoRUinIlGeJ9I6dXmpG6d78LGtK5MpPSSCIPA+mJChH0NCGIB0K5CeyKlz1S4h89ArJonsxN8zPeIu+ukLvQWs9ZXWlH24bJ7bl3RKqGAQnFR4gh4LkgtJFKKC+CXZqDJU6Ai2AJMBzDNFmA6gGm2ANMBTLMFmA5gmi3AdADTbAGmA5hmCzAdwDRbgOkApoX2j5DAoAq9vocjMWbEZxWwDmgDWoCqsGaFKbQCVLjuZORKwaGhuc/uprQuF5cjwDFgU1gzw1CWUyCflk9OVi46WeIIB4BcOebOR5mvAaJORu46WdkhwkHgQ9E7wtSscDPoemMXweGM3P5exUaFC0DQZ4fTAvsfZ+Vd0BxG7wLP0/I1n5VTEZ/NKvTy++Hq/AiPokJLLitOMRkq4jaYOyuv8hk5jLAB4Tww/pevjyAcd2K0DmVkrNjZFfVgxMnIS6AD6GhO6wpvhi1RYbWv+BJhyp9ldOScvA5zZkUVUGg4LZPAZKnnVMQpYJItwHQA02wBpgOYZgswHcA0W4DpAKbZAkwHMC20AlT5EdZe5RRWAeORKu6HtFdZBf81WM0136NfYKbuBaP/2mvylmVZlmVZvwDZmcBBeFfe1QAAAABJRU5ErkJggg==)
 no-repeat center;
-  background: 
url(//bits.beta.wmflabs.org/static-master/extensions/MobileApp/less/../images/flag-light.png?2014-07-29T19:15:00Z)
 no-repeat center!ie;
-  border: 1px solid #347BFF;
-  border-radius: 4px;
-  display: inline-block;
+  text-decoration: none;
+  color: #555555;
+  float: left;
 }
 .content-rtl a.issues_button {
   /* Flip it! */
@@ -618,25 +623,19 @@
   transform: scaleX(-1);
 }
 a.issues_button:active {
-  border: 4px solid #347BFF;
+  color: #b0b0b0;
 }
 
+div.hatnote {
+  display: none;
+}
 a.disambig_button {
-  height: 32px;
-  padding-left: 8px;
-  padding-right: 8px;
-  padding-top: 2px;
-  margin-right: 8px;
-  border: 1px solid #347BFF;
-  border-radius: 4px;
-  display: inline-block;
   text-decoration: none;
-  color: #347BFF;
+  color: #555555;
   float: left;
 }
 a.disambig_button:active {
-  background-color: #347BFF;
-  color: #ffffff;
+  color: #b0b0b0;
 }
 
 /* FIXME: Copied over from 
http://en.wikipedia.org/w/index.php?title=MediaWiki:Mobile.css&oldid=609508028
diff --git a/wikipedia/res/layout/dialog_disambig.xml 
b/wikipedia/res/layout/dialog_disambig.xml
new file mode 100644
index 0000000..d36c08b
--- /dev/null
+++ b/wikipedia/res/layout/dialog_disambig.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<ListView xmlns:android="http://schemas.android.com/apk/res/android";
+          android:id="@+id/list"
+          android:layout_width="match_parent"
+          android:layout_height="match_parent"/>
diff --git a/wikipedia/res/layout/item_disambig.xml 
b/wikipedia/res/layout/item_disambig.xml
new file mode 100644
index 0000000..2645ead
--- /dev/null
+++ b/wikipedia/res/layout/item_disambig.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:orientation="horizontal"
+              android:padding="8dp">
+
+    <ImageView
+            android:id="@+id/disambig_icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="8dp"
+            android:layout_gravity="center_vertical"
+            android:src="@drawable/link" />
+
+    <TextView
+            android:id="@+id/disambig_text"
+            android:padding="8dp"
+            style="?android:textAppearanceMedium"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:textColorLink="?attr/link_color"/>
+
+</LinearLayout>
diff --git a/wikipedia/res/values-qq/strings.xml 
b/wikipedia/res/values-qq/strings.xml
index 5ccd6bd..cb80992 100644
--- a/wikipedia/res/values-qq/strings.xml
+++ b/wikipedia/res/values-qq/strings.xml
@@ -278,6 +278,7 @@
   <string name="abusefilter_text_warn">Explanation of why the edit may be 
flagged as unconstructive: Typing in all caps, Blanking articles or Spamming, 
Irrelevant external links or images, Repeating characters</string>
   <string name="abusefilter_text_disallow">Explanation of why the edit was not 
allowed: potentially unconstructive, or potential vandalism.</string>
   <string name="dialog_page_issues">Dialog title for page/article issues 
list</string>
+  <string name="button_page_issues">Label for button that shows the Page 
issues dialog</string>
   <string name="menu_themechooser">Menu item for choosing text size and color 
scheme</string>
   <string name="text_size_select">Label that describes text size 
selection</string>
   <string name="color_theme_select">Label that describes color theme selection
diff --git a/wikipedia/res/values/strings.xml b/wikipedia/res/values/strings.xml
index 5fe38e0..5e6a664 100644
--- a/wikipedia/res/values/strings.xml
+++ b/wikipedia/res/values/strings.xml
@@ -208,12 +208,13 @@
     <string name="abusefilter_text_warn"><![CDATA[An automated filter has 
identified this edit as potentially unconstructive. It may contain one or more 
of the following:<br /><br />· Typing in all caps<br />· Blanking articles or 
spamming<br />· Irrelevant external links or images<br />· Repeating 
characters]]></string>
     <string name="abusefilter_text_disallow"><![CDATA[An automated filter has 
identified this edit as potentially unconstructive, or potential vandalism.<br 
/><br />Wikipedia is an encyclopedia and only neutral, notable content belongs 
here.]]></string>
     <string name="dialog_page_issues">Page issues</string>
+    <string name="button_page_issues">Page issues</string>
     <string name="menu_themechooser">Font and theme</string>
     <string name="text_size_select">Font size</string>
     <string name="color_theme_select">Theme</string>
     <string name="color_theme_light">Light</string>
     <string name="color_theme_dark">Dark</string>
-    <string name="page_similar_titles">Similar titles</string>
+    <string name="page_similar_titles">Did you mean…</string>
     <string name="app_store_description">Official Wikipedia App for Android. 
Wikipedia is the free encyclopedia containing more than 32 million articles in 
280 languages, and is the most comprehensive and widely used reference work 
humans have ever compiled. The app has been rewritten from scratch and is 
better than ever before.
 
 Features:
diff --git a/wikipedia/src/main/java/org/wikipedia/page/DisambigHandler.java 
b/wikipedia/src/main/java/org/wikipedia/page/DisambigHandler.java
index 9677d46..aa91da2 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/DisambigHandler.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/DisambigHandler.java
@@ -1,7 +1,25 @@
 package org.wikipedia.page;
 
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.text.Html;
+import android.text.Spannable;
+import android.text.TextPaint;
+import android.text.style.URLSpan;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.ListAdapter;
+import android.widget.TextView;
 import org.json.JSONException;
 import org.json.JSONObject;
+import org.wikipedia.R;
+import org.wikipedia.Utils;
+import org.wikipedia.WikipediaApp;
 import org.wikipedia.bridge.CommunicationBridge;
 
 /**
@@ -9,10 +27,12 @@
  * Automatically goes to the disambiguation page for the selected item.
  */
 public class DisambigHandler implements CommunicationBridge.JSEventListener {
-
+    private final Activity activity;
     private LinkHandler linkHandler;
+    private Dialog dlg;
 
-    public DisambigHandler(LinkHandler linkHandler, CommunicationBridge 
bridge) {
+    public DisambigHandler(Activity activity, LinkHandler linkHandler, 
CommunicationBridge bridge) {
+        this.activity = activity;
         this.linkHandler = linkHandler;
         bridge.addListener("disambigClicked", this);
     }
@@ -21,10 +41,82 @@
     @Override
     public void onMessage(String messageType, JSONObject messagePayload) {
         try {
-            linkHandler.onUrlClick(messagePayload.getString("title"));
+            
show(Utils.jsonArrayToStringArray(messagePayload.getJSONArray("hatnotes")));
         } catch (JSONException e) {
             throw new RuntimeException(e);
         }
     }
 
+    public void show(final String[] items) {
+        final WikipediaApp app = (WikipediaApp) 
activity.getApplicationContext();
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+        ListAdapter adapter = new ArrayAdapter<String>(activity, 0, items) {
+            private ViewHolder holder;
+
+            class ViewHolder {
+                private ImageView icon;
+                private TextView text;
+            }
+
+            @Override
+            public boolean isEnabled(int position) {
+                return false; // don't make it appear clickable
+            }
+
+            public View getView(int position, View convertView, ViewGroup 
parent) {
+                LayoutInflater inflater = activity.getLayoutInflater();
+                if (convertView == null) {
+                    convertView = inflater.inflate(R.layout.item_disambig, 
null);
+                    holder = new ViewHolder();
+                    holder.icon = (ImageView) 
convertView.findViewById(R.id.disambig_icon);
+                    holder.text = (TextView) 
convertView.findViewById(R.id.disambig_text);
+                    convertView.setTag(holder);
+                } else {
+                    // view already defined, retrieve view holder
+                    holder = (ViewHolder) convertView.getTag();
+                }
+
+                holder.text.setText(Html.fromHtml(items[position]));
+                holder.text.setMovementMethod(new 
LinkMovementMethodExt(linkHandler) {
+                    @Override
+                    public boolean onTouchEvent(final TextView widget, final 
Spannable buffer, final MotionEvent event) {
+                        boolean ret = super.onTouchEvent(widget, buffer, 
event);
+                        if (ret && event.getAction() == MotionEvent.ACTION_UP 
&& dlg != null) {
+                            dlg.dismiss();
+                        }
+                        return ret;
+                    }
+                });
+                stripUnderlines(holder.text);
+                app.adjustLinkDrawableToTheme(holder.icon.getDrawable());
+                return convertView;
+            }
+
+            private void stripUnderlines(TextView textView) {
+                Spannable s = (Spannable)textView.getText();
+                URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
+                for (URLSpan span: spans) {
+                    int start = s.getSpanStart(span);
+                    int end = s.getSpanEnd(span);
+                    s.removeSpan(span);
+                    span = new URLSpan(span.getURL()){
+                        @Override
+                        public void updateDrawState(TextPaint ds) {
+                            super.updateDrawState(ds);
+                            ds.setUnderlineText(false);
+                        }
+                    };
+                    s.setSpan(span, start, end, 0);
+                }
+                textView.setText(s);
+            }
+        };
+
+        builder.setAdapter(adapter, null);
+        builder.setTitle(R.string.page_similar_titles);
+        dlg = builder.create();
+        dlg.show();
+    }
+
 }
diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java 
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
index 5a8b40f..5fe8c34 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
@@ -223,6 +223,7 @@
             leadSectionPayload.put("title", page.getDisplayTitle());
             leadSectionPayload.put("section", 
page.getSections().get(0).toJSON());
             leadSectionPayload.put("string_page_similar_titles", 
getString(R.string.page_similar_titles));
+            leadSectionPayload.put("string_page_issues", 
getString(R.string.button_page_issues));
 
             bridge.sendMessage("displayLeadSection", leadSectionPayload);
 
@@ -368,7 +369,7 @@
         };
 
         issuesHandler = new IssuesHandler(getActivity(), bridge);
-        disambigHandler = new DisambigHandler(linkHandler, bridge);
+        disambigHandler = new DisambigHandler(getActivity(), linkHandler, 
bridge);
 
         api = 
((WikipediaApp)getActivity().getApplicationContext()).getAPIForSite(title.getSite());
 
diff --git a/www/js/actions.js b/www/js/actions.js
index 51d1f1c..ba39735 100644
--- a/www/js/actions.js
+++ b/www/js/actions.js
@@ -64,8 +64,14 @@
     }
 
     function handleDisambig( sourceNode ) {
-        var title = sourceNode.getAttribute("title");
-        bridge.sendMessage( 'disambigClicked', { "title": title } );
+        var res = [];
+        var hatnotes = sourceNode.parentNode.querySelectorAll( 'div.hatnote' );
+        var i = 0,
+            len = hatnotes.length;
+        for (; i < len; i++) {
+            res.push( hatnotes[i].innerHTML );
+        }
+        bridge.sendMessage( 'disambigClicked', { "hatnotes": res } );
     }
 
     if (sourceNode) {
diff --git a/www/js/disambig.js b/www/js/disambig.js
index 98298a0..57cdb36 100644
--- a/www/js/disambig.js
+++ b/www/js/disambig.js
@@ -2,26 +2,20 @@
 
 transformer.register( 'displayDisambigLink', function( content ) {
     var hatnotes = content.querySelectorAll( "div.hatnote" );
-    var i = 0;
-    for (; i<hatnotes.length; i++) {
-        var el = hatnotes[i];
-        //only care about the first hatnote, and remove all others...
-        if (i === 0) {
-            var links = el.querySelectorAll("a");
-            // use the last link in the hatnote!
-            if (links.length > 0) {
-                var container = document.getElementById("issues_container");
-                var newlink = document.createElement('a');
-                newlink.setAttribute('href', '#disambig');
-                newlink.id = "disambig_button";
-                newlink.className = 'disambig_button';
-                newlink.setAttribute("title", links[links.length - 
1].getAttribute("href"));
-                container.appendChild(newlink);
-                el.parentNode.removeChild(el);
-            }
-        } else {
-            el.parentNode.removeChild(el);
+    if ( hatnotes.length > 0 ) {
+        var container = document.getElementById( "issues_container" );
+        var wrapper = document.createElement( 'div' );
+        var link = document.createElement( 'a' );
+        link.setAttribute( 'href', '#disambig' );
+        link.className = 'disambig_button';
+        link.id = 'disambig_button';
+        wrapper.appendChild( link );
+        var i = 0,
+            len = hatnotes.length;
+        for (; i < len; i++) {
+            wrapper.appendChild( hatnotes[i] );
         }
+        container.appendChild( wrapper );
     }
     return content;
 } );
diff --git a/www/js/issues.js b/www/js/issues.js
index 1db6f17..098c1c9 100644
--- a/www/js/issues.js
+++ b/www/js/issues.js
@@ -1,7 +1,7 @@
 var transformer = require('./transformer');
 
 transformer.register( 'displayIssuesLink', function( content ) {
-    var issues = content.querySelectorAll( "table.ambox" );
+    var issues = content.querySelectorAll( 
"table.ambox:not([class*='ambox-multiple_issues']):not([class*='ambox-notice'])"
 );
     if ( issues.length > 0 ) {
         var el = issues[0];
         var container = document.getElementById( "issues_container" );
@@ -9,6 +9,7 @@
         var link = document.createElement( 'a' );
         link.setAttribute( 'href', '#issues' );
         link.className = 'issues_button';
+        link.id = 'issues_button';
         wrapper.appendChild( link );
         el.parentNode.replaceChild( wrapper, el );
         var i = 0,
diff --git a/www/js/sections.js b/www/js/sections.js
index b0f7027..ae980a7 100644
--- a/www/js/sections.js
+++ b/www/js/sections.js
@@ -41,9 +41,21 @@
         document.getElementById( "content" ).removeChild(issuesContainer);
     }
     //update the text of the disambiguation link, if there is one
-    var disambig = document.getElementById( "disambig_button" );
-    if (disambig !== null) {
-        disambig.innerText = payload.string_page_similar_titles;
+    var disambigBtn = document.getElementById( "disambig_button" );
+    if (disambigBtn !== null) {
+        disambigBtn.innerText = payload.string_page_similar_titles;
+    }
+    //update the text of the page-issues link, if there is one
+    var issuesBtn = document.getElementById( "issues_button" );
+    if (issuesBtn !== null) {
+        issuesBtn.innerText = payload.string_page_issues;
+    }
+    //if we have both issues and disambiguation, then insert the separator
+    if (issuesBtn !== null && disambigBtn !== null) {
+        var separator = document.createElement( 'span' );
+        separator.innerText = '|';
+        separator.className = 'issues_separator';
+        issuesContainer.insertBefore(separator, issuesBtn.parentNode);
     }
 
     document.getElementById( "content" ).appendChild( content );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Idfc1a57b3d58f4eae608cd3dbfb7d9030fc4a4f2
Gerrit-PatchSet: 6
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Yuvipanda <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to