Brion VIBBER has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/116184

Change subject: When following links with hash/fragments on them, jump to the 
anchor
......................................................................

When following links with hash/fragments on them, jump to the anchor

* Added 'fragment' member to PageTitle
* Added tests for processing the fragment
* Pass the target fragment through to displaySection in webview
* on last section insert, jump to the fragment if present
Bug: 61726
Change-Id: Ic651fd3bd130b48addbc1cb565e3d47836e27f2a
---
M wikipedia-it/src/main/java/org/wikipedia/test/DoEditTaskTests.java
M 
wikipedia-it/src/main/java/org/wikipedia/test/FetchSectionWikitextTaskTests.java
M wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java
M wikipedia-it/src/main/java/org/wikipedia/test/PageTests.java
M wikipedia-it/src/main/java/org/wikipedia/test/PageTitleTests.java
M wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java
M wikipedia-it/src/main/java/org/wikipedia/test/PreviewTaskTests.java
M wikipedia-it/src/main/java/org/wikipedia/test/TriggerAbuseFilterTest.java
M wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java
M wikipedia/assets/bundle-test.js
M wikipedia/assets/bundle.js
M wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
M wikipedia/src/main/java/org/wikipedia/PageTitle.java
M wikipedia/src/main/java/org/wikipedia/Site.java
M 
wikipedia/src/main/java/org/wikipedia/history/HistoryEntryPersistanceHelper.java
M wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksFetchTask.java
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
M 
wikipedia/src/main/java/org/wikipedia/pageimages/PageImagePersistanceHelper.java
M 
wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagePersistanceHelper.java
M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
M www/js/main.js
M www/js/sections.js
22 files changed, 71 insertions(+), 35 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/84/116184/1

diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/DoEditTaskTests.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/DoEditTaskTests.java
index 71072c0..67fbd19 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/DoEditTaskTests.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/DoEditTaskTests.java
@@ -17,7 +17,7 @@
 
     public void testEdit() throws Throwable {
         startActivity(new Intent(), null, null);
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", new Site("test.wikipedia.org"));
+        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", null, new Site("test.wikipedia.org"));
         final String wikitext = "== Section 2 ==\n\nEditing section INSERT 
RANDOM & HERE test at " + System.currentTimeMillis();
         final WikipediaApp app = 
(WikipediaApp)getInstrumentation().getTargetContext().getApplicationContext();
         final CountDownLatch completionLatch = new CountDownLatch(1);
diff --git 
a/wikipedia-it/src/main/java/org/wikipedia/test/FetchSectionWikitextTaskTests.java
 
b/wikipedia-it/src/main/java/org/wikipedia/test/FetchSectionWikitextTaskTests.java
index f538cf4..d930fd0 100644
--- 
a/wikipedia-it/src/main/java/org/wikipedia/test/FetchSectionWikitextTaskTests.java
+++ 
b/wikipedia-it/src/main/java/org/wikipedia/test/FetchSectionWikitextTaskTests.java
@@ -21,7 +21,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", new Site("test.wikipedia.org"));
+                PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", null, new Site("test.wikipedia.org"));
                 new 
FetchSectionWikitextTask(getInstrumentation().getTargetContext(),title, 2) {
                     @Override
                     public void onFinish(String result) {
diff --git 
a/wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java
index ee660da..67979ab 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/PageFetchTaskTests.java
@@ -21,7 +21,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                new SectionsFetchTask(getInstrumentation().getTargetContext(), 
new PageTitle(null, "Test_page_for_app_testing/Section1", new 
Site("test.wikipedia.org")), "all") {
+                new SectionsFetchTask(getInstrumentation().getTargetContext(), 
new PageTitle(null, "Test_page_for_app_testing/Section1", null, new 
Site("test.wikipedia.org")), "all") {
                     @Override
                     public void onFinish(List<Section> result) {
                         assertNotNull(result);
diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/PageTests.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/PageTests.java
index 8e57bcf..147e055 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/PageTests.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/PageTests.java
@@ -15,7 +15,7 @@
         for (int i = 1; i <= 10; i++) {
             sections.add(new Section(i, 1, "Something " + i, "Something_" + i, 
"Content Something" + i ));
         }
-        PageTitle title = new PageTitle(null, "Test", new 
Site("en.wikipedia.org"));
+        PageTitle title = new PageTitle(null, "Test", null, new 
Site("en.wikipedia.org"));
         PageProperties props = new PageProperties(new Date());
         Page page = new Page(title, sections, props);
         assertEquals(page, new Page(page.toJSON()));
diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/PageTitleTests.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/PageTitleTests.java
index 1be7d32..848a9cb 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/PageTitleTests.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/PageTitleTests.java
@@ -6,30 +6,30 @@
 public class PageTitleTests extends TestCase {
 
     public void testEquals() throws Exception {
-        assertTrue(new PageTitle(null, "India", new 
Site("en.wikipedia.org")).equals(new PageTitle(null, "India", new 
Site("en.wikipedia.org"))));
-        assertTrue(new PageTitle("Talk", "India", new 
Site("en.wikipedia.org")).equals(new PageTitle("Talk", "India", new 
Site("en.wikipedia.org"))));
+        assertTrue(new PageTitle(null, "India", null, new 
Site("en.wikipedia.org")).equals(new PageTitle(null, "India", null, new 
Site("en.wikipedia.org"))));
+        assertTrue(new PageTitle("Talk", "India", null,  new 
Site("en.wikipedia.org")).equals(new PageTitle("Talk", "India", null, new 
Site("en.wikipedia.org"))));
 
-        assertFalse(new PageTitle(null, "India", new 
Site("ta.wikipedia.org")).equals(new PageTitle(null, "India", new 
Site("en.wikipedia.org"))));
-        assertFalse(new PageTitle("Talk", "India", new 
Site("ta.wikipedia.org")).equals(new PageTitle("Talk", "India", new 
Site("en.wikipedia.org"))));
-        assertFalse(new PageTitle("Talk", "India", new 
Site("ta.wikipedia.org")).equals("Something else"));
+        assertFalse(new PageTitle(null, "India", null,  new 
Site("ta.wikipedia.org")).equals(new PageTitle(null, "India", null, new 
Site("en.wikipedia.org"))));
+        assertFalse(new PageTitle("Talk", "India", null,  new 
Site("ta.wikipedia.org")).equals(new PageTitle("Talk", "India", null, new 
Site("en.wikipedia.org"))));
+        assertFalse(new PageTitle("Talk", "India", null,  new 
Site("ta.wikipedia.org")).equals("Something else"));
     }
 
     public void testJSONSerialization() throws Exception {
         Site enwiki = new Site("en.wikipedia.org");
-        PageTitle title = new PageTitle(null, "Test title", enwiki);
+        PageTitle title = new PageTitle(null, "Test title", null,  enwiki);
         assertEquals(title, new PageTitle(title.toJSON()));
 
-        title = new PageTitle("Talk", "Test title", enwiki);
+        title = new PageTitle("Talk", "Test title", null,  enwiki);
         assertEquals(title, new PageTitle(title.toJSON()));
     }
 
     public void testPrefixedText() throws Exception {
         Site enwiki = new Site("en.wikipedia.org");
 
-        assertEquals(new PageTitle(null, "Test  title", 
enwiki).getPrefixedText(), "Test  title");
-        assertEquals(new PageTitle(null, "Test title", 
enwiki).getPrefixedText(), "Test title");
-        assertEquals(new PageTitle("Talk", "Test title", 
enwiki).getPrefixedText(), "Talk:Test title");
-        assertEquals(new PageTitle(null, "Test   title", enwiki).getText(), 
"Test   title");
+        assertEquals(new PageTitle(null, "Test  title", null,  
enwiki).getPrefixedText(), "Test  title");
+        assertEquals(new PageTitle(null, "Test title", null,  
enwiki).getPrefixedText(), "Test title");
+        assertEquals(new PageTitle("Talk", "Test title", null,  
enwiki).getPrefixedText(), "Talk:Test title");
+        assertEquals(new PageTitle(null, "Test   title", null,  
enwiki).getText(), "Test   title");
     }
 
     public void testFromInternalLink() throws Exception {
@@ -40,9 +40,15 @@
 
         
assertEquals(enwiki.titleForInternalLink("/wiki/Talk:India").getNamespace(), 
"Talk");
         
assertEquals(enwiki.titleForInternalLink("/wiki/Talk:India").getText(), 
"India");
+        
assertEquals(enwiki.titleForInternalLink("/wiki/Talk:India").getFragment(), 
null);
+
+        
assertEquals(enwiki.titleForInternalLink("/wiki/Talk:India#").getNamespace(), 
"Talk");
+        
assertEquals(enwiki.titleForInternalLink("/wiki/Talk:India#").getText(), 
"India");
+        
assertEquals(enwiki.titleForInternalLink("/wiki/Talk:India#").getFragment(), 
"");
 
         
assertEquals(enwiki.titleForInternalLink("/wiki/Talk:India#History").getNamespace(),
 "Talk");
         
assertEquals(enwiki.titleForInternalLink("/wiki/Talk:India#History").getText(), 
"India");
+        
assertEquals(enwiki.titleForInternalLink("/wiki/Talk:India#History").getFragment(),
 "History");
     }
 
     public void testCanonicalURL() throws Exception {
@@ -56,7 +62,7 @@
     public void testSite() throws Exception {
         Site enwiki = new Site("en.wikipedia.org");
 
-        assertEquals(enwiki, new PageTitle(null, "Test", enwiki).getSite());
+        assertEquals(enwiki, new PageTitle(null, "Test", null, 
enwiki).getSite());
         assertEquals(enwiki, new Site("en.wikipedia.org"));
     }
 }
diff --git a/wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java
index 265472f..5d2b56f 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/ParcelableTest.java
@@ -22,7 +22,7 @@
 
     public void testPageTitle() throws Exception {
         Site site = new Site("en.wikipedia.org");
-        PageTitle origTitle = new PageTitle("Talk", "India", site);
+        PageTitle origTitle = new PageTitle("Talk", "India", null, site);
 
         parcelAndTestObjects(origTitle);
     }
@@ -43,7 +43,7 @@
         for (int i = 1; i <= 10; i++) {
             sections.add(new Section(i, 1, "Something " + i, "Something_" + i, 
"Content Something" + i ));
         }
-        PageTitle title = new PageTitle(null, "Test", new 
Site("en.wikipedia.org"));
+        PageTitle title = new PageTitle(null, "Test", null, new 
Site("en.wikipedia.org"));
         PageProperties props = new PageProperties(new Date());
         Page page = new Page(title, sections, props);
         parcelAndTestObjects(page);
@@ -69,7 +69,7 @@
 
     public void testHistoryEntry() throws Exception {
         Site site = new Site("en.wikipedia.org");
-        PageTitle title = new PageTitle("Talk", "India", site);
+        PageTitle title = new PageTitle("Talk", "India", null, site);
         HistoryEntry historyEntry = new HistoryEntry(title, 
HistoryEntry.SOURCE_EXTERNAL_LINK);
 
         parcelAndTestObjects(historyEntry);
@@ -77,7 +77,7 @@
 
     public void testPageImage() throws Exception {
         Site site = new Site("en.wikipedia.org");
-        PageTitle title = new PageTitle("Talk", "India", site);
+        PageTitle title = new PageTitle("Talk", "India", null, site);
         PageImage pageImage = new PageImage(title, "Testing image");
 
         parcelAndTestObjects(pageImage);
diff --git 
a/wikipedia-it/src/main/java/org/wikipedia/test/PreviewTaskTests.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/PreviewTaskTests.java
index ba87a37..58cf7f3 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/PreviewTaskTests.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/PreviewTaskTests.java
@@ -17,7 +17,7 @@
 
     public void testPreview() throws Throwable {
         startActivity(new Intent(), null, null);
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", new Site("test.wikipedia.org"));
+        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Section1", null, new Site("test.wikipedia.org"));
         long randomTime = System.currentTimeMillis();
         final String wikitext = "== Section 2 ==\n\nEditing section INSERT 
RANDOM & HERE test at " + randomTime;
         final String expected = "<div></div><h2><span class=\"mw-headline\" 
id=\"Section_2\">Section 2</span><a href=\"#editor/1\" data-section=\"1\" 
class=\"edit-page\">Edit</a></h2><div>\n<p>Editing section INSERT RANDOM &amp; 
HERE test at " + randomTime + "</p>\n\n\n\n</div>";
diff --git 
a/wikipedia-it/src/main/java/org/wikipedia/test/TriggerAbuseFilterTest.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/TriggerAbuseFilterTest.java
index c711c84..fb26eda 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/TriggerAbuseFilterTest.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/TriggerAbuseFilterTest.java
@@ -17,7 +17,7 @@
 
     public void testAbuseFilterTriggerWarn() throws Throwable {
         startActivity(new Intent(), null, null);
-        final PageTitle title = new PageTitle(null, "User:Yuvipandaaaaaaaa", 
new Site("test.wikipedia.org"));
+        final PageTitle title = new PageTitle(null, "User:Yuvipandaaaaaaaa", 
null, new Site("test.wikipedia.org"));
         final String wikitext = "Testing Abusefilter by simply editing this 
page. Triggering rule 94 at " + System.currentTimeMillis();
         final CountDownLatch completionLatch = new CountDownLatch(1);
         runTestOnUiThread(new Runnable() {
@@ -39,7 +39,7 @@
 
     public void testAbuseFilterTriggerStop() throws Throwable {
         startActivity(new Intent(), null, null);
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/AbuseFilter", new Site("test.wikipedia.org"));
+        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/AbuseFilter", null, new Site("test.wikipedia.org"));
         final String wikitext = "== Section 2 ==\n\nTriggering AbuseFilter 
number 2 by saying poop many times at " + System.currentTimeMillis();
         final CountDownLatch completionLatch = new CountDownLatch(1);
         runTestOnUiThread(new Runnable() {
diff --git 
a/wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java
index 35648cc..ca33200 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/TriggerEditCaptchaTest.java
@@ -17,7 +17,7 @@
 
     public void testCaptchaTrigger() throws Throwable {
         startActivity(new Intent(), null, null);
-        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Captcha", new Site("test.wikipedia.org"));
+        final PageTitle title = new PageTitle(null, 
"Test_page_for_app_testing/Captcha", null, new Site("test.wikipedia.org"));
         final String wikitext = "== Section 2 ==\n\nEditing by inserting an 
external link https://"; + System.currentTimeMillis();
         final CountDownLatch completionLatch = new CountDownLatch(1);
         runTestOnUiThread(new Runnable() {
diff --git a/wikipedia/assets/bundle-test.js b/wikipedia/assets/bundle-test.js
index 01bacac..470914c 100644
--- a/wikipedia/assets/bundle-test.js
+++ b/wikipedia/assets/bundle-test.js
@@ -54,6 +54,7 @@
     }
     bridge.sendMessage( "imagesListResponse", { "images": imageURLs });
 } );
+
 },{"./bridge":1}],3:[function(require,module,exports){
 var bridge = require("../js/bridge");
 bridge.registerListener( "injectScript", function( payload ) {
diff --git a/wikipedia/assets/bundle.js b/wikipedia/assets/bundle.js
index 84e36b6..b6d18e1 100644
--- a/wikipedia/assets/bundle.js
+++ b/wikipedia/assets/bundle.js
@@ -102,6 +102,7 @@
     }
     bridge.sendMessage( "imagesListResponse", { "images": imageURLs });
 } );
+
 },{"./bridge":2}],5:[function(require,module,exports){
 var bridge = require("./bridge");
 
@@ -137,6 +138,11 @@
     heading.id = "heading_" + section.id;
     heading.setAttribute( 'data-id', section.id );
 
+    // Slip in an anchor element we can scroll to
+    var anchor = document.createElement( "span" );
+    anchor.id = section.anchor;
+    heading.insertBefore(anchor, heading.firstChild);
+
     var editButton = document.createElement( "a" );
     editButton.setAttribute( 'data-id', section.id );
     editButton.setAttribute( 'data-action', "edit_section" );
@@ -161,6 +167,9 @@
         bridge.sendMessage( "requestSection", { index: payload.index + 1 } );
     } else {
         document.getElementById( "loading_sections").className = "";
+        if ( typeof payload.fragment === "string" ) {
+            document.location.hash = "#" + payload.fragment;
+        }
     }
 });
 
diff --git a/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java 
b/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
index cd81ef0..8d13b1b 100644
--- a/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
@@ -38,7 +38,7 @@
             int pageId = Integer.parseInt(key);
             JSONObject pageData = pages.getJSONObject(key);
             String titleString = pageData.getString("title");
-            PageTitle pageTitle = new PageTitle(null, titleString, site);
+            PageTitle pageTitle = new PageTitle(null, titleString, null, site);
             T pageResult = processPage(pageId, pageTitle, pageData);
             map.put(pageTitle, pageResult);
         }
diff --git a/wikipedia/src/main/java/org/wikipedia/PageTitle.java 
b/wikipedia/src/main/java/org/wikipedia/PageTitle.java
index 2e30e9b..e25ef11 100644
--- a/wikipedia/src/main/java/org/wikipedia/PageTitle.java
+++ b/wikipedia/src/main/java/org/wikipedia/PageTitle.java
@@ -15,11 +15,13 @@
 public class PageTitle implements Parcelable {
     private final String namespace;
     private final String text;
+    private final String fragment;
     private final Site site;
 
-    public PageTitle(final String namespace, final String text, final Site 
site) {
+    public PageTitle(final String namespace, final String text, final String 
fragment, final Site site) {
         this.namespace = namespace;
         this.text = text;
+        this.fragment = fragment;
         this.site = site;
     }
 
@@ -35,6 +37,8 @@
         return text;
     }
 
+    public String getFragment() { return fragment; }
+
     public String getDisplayText() {
         return getText().replace("_", " ");
     }
@@ -49,6 +53,7 @@
             json.put("site", site.getDomain());
             json.put("namespace", getNamespace());
             json.put("text", getText());
+            json.put("fragment", getFragment());
             return json;
         } catch (JSONException e) {
             // This will also never happen
@@ -59,16 +64,18 @@
     public PageTitle(JSONObject json) {
         this.site = new Site(json.optString("site"));
         this.namespace = json.optString("namespace", null);
+        this.fragment = json.optString("fragment", null);
         this.text = json.optString("text", null);
     }
 
     public String getCanonicalUri() {
         try {
             return String.format(
-                    "%1$s://%2$s/wiki/%3$s",
+                    "%1$s://%2$s/wiki/%3$s%4$s",
                     WikipediaApp.PROTOCOL,
                     getSite().getDomain(),
-                    URLEncoder.encode(getPrefixedText().replace(" ", "_"), 
"utf-8")
+                    URLEncoder.encode(getPrefixedText().replace(" ", "_"), 
"utf-8"),
+                    (this.fragment != null && this.fragment.length() > 0) ? 
("#" + this.fragment) : ""
             );
         } catch (UnsupportedEncodingException e) {
             // This shouldn't happen
@@ -114,6 +121,7 @@
     private PageTitle(Parcel in) {
         namespace = in.readString();
         text = in.readString();
+        fragment = in.readString();
         site = in.readParcelable(Site.class.getClassLoader());
     }
 
@@ -121,6 +129,7 @@
     public void writeToParcel(Parcel parcel, int flags) {
         parcel.writeString(namespace);
         parcel.writeString(text);
+        parcel.writeString(fragment);
         parcel.writeParcelable(site, flags);
     }
 
diff --git a/wikipedia/src/main/java/org/wikipedia/Site.java 
b/wikipedia/src/main/java/org/wikipedia/Site.java
index e58317c..7763060 100644
--- a/wikipedia/src/main/java/org/wikipedia/Site.java
+++ b/wikipedia/src/main/java/org/wikipedia/Site.java
@@ -68,7 +68,7 @@
      * Start with /wiki/, can contain a Namespace indicator and a fragment.
      * Capturing Group 1 is namespace (or null for no namespace). 2 is Page 
Title text. 3 is Fragment.
      */
-    public static Pattern internalLinkMatchPattern = 
Pattern.compile("/wiki/(?:([^:]+):)?([^#]*)(?:#(.+))?");
+    public static Pattern internalLinkMatchPattern = 
Pattern.compile("/wiki/(?:([^:]+):)?([^#]*)(?:#(.*))?");
 
     /**
      * Create a PageTitle object from an internal link string.
@@ -85,7 +85,8 @@
             try {
                 String namespace = matches.group(1) != null ? 
URLDecoder.decode(matches.group(1), "utf-8") : null;
                 String pageText = URLDecoder.decode(matches.group(2), "utf-8");
-                return new PageTitle(namespace, pageText, this);
+                String fragment = matches.group(3);
+                return new PageTitle(namespace, pageText, fragment, this);
             } catch (UnsupportedEncodingException e) {
                 // NOT HAPPENING! JESUS CHRIST JAVA!
                 throw new RuntimeException(e);
diff --git 
a/wikipedia/src/main/java/org/wikipedia/history/HistoryEntryPersistanceHelper.java
 
b/wikipedia/src/main/java/org/wikipedia/history/HistoryEntryPersistanceHelper.java
index 580657c..0546972 100644
--- 
a/wikipedia/src/main/java/org/wikipedia/history/HistoryEntryPersistanceHelper.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/history/HistoryEntryPersistanceHelper.java
@@ -13,7 +13,7 @@
         // Carefully, get them back by using position only
         Site site = new Site(c.getString(1));
         // FIXME: Does not handle non mainspace pages
-        PageTitle title = new PageTitle(null, c.getString(2), site);
+        PageTitle title = new PageTitle(null, c.getString(2), null, site);
         Date timestamp = new Date(c.getLong(3));
         int source = c.getInt(4);
         return new HistoryEntry(title, timestamp, source);
diff --git 
a/wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksFetchTask.java 
b/wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksFetchTask.java
index ce7f4d4..8d85c20 100644
--- 
a/wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksFetchTask.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/interlanguage/LangLinksFetchTask.java
@@ -52,6 +52,7 @@
             JSONObject langlinkJSON = langlinksJSON.optJSONObject(i);
             PageTitle linkTitle = new PageTitle(null,
                     langlinkJSON.optString("*"),
+                    null,
                     Site.forLang(langlinkJSON.optString("lang")));
             linkTitles.add(linkTitle);
         }
diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java 
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
index 6a8f075..c8da5b7 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
@@ -180,6 +180,7 @@
                     wrapper.put("section", 
page.getSections().get(index).toJSON());
                     wrapper.put("index", index);
                     wrapper.put("isLast", index == page.getSections().size() - 
1);
+                    wrapper.put("fragment", page.getTitle().getFragment());
                     bridge.sendMessage("displaySection", wrapper);
                 } catch (JSONException e) {
                     // Won't happen
diff --git 
a/wikipedia/src/main/java/org/wikipedia/pageimages/PageImagePersistanceHelper.java
 
b/wikipedia/src/main/java/org/wikipedia/pageimages/PageImagePersistanceHelper.java
index 3ec6ba1..1a79389 100644
--- 
a/wikipedia/src/main/java/org/wikipedia/pageimages/PageImagePersistanceHelper.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/pageimages/PageImagePersistanceHelper.java
@@ -11,7 +11,7 @@
         // Carefully, get them back by using position only
         Site site = new Site(c.getString(1));
         // FIXME: Does not handle non mainspace pages
-        PageTitle title = new PageTitle(null, c.getString(2), site);
+        PageTitle title = new PageTitle(null, c.getString(2), null, site);
         String imageName = c.getString(3);
         return new PageImage(title, imageName);
     }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagePersistanceHelper.java
 
b/wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagePersistanceHelper.java
index 2470590..df27c42 100644
--- 
a/wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagePersistanceHelper.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/savedpages/SavedPagePersistanceHelper.java
@@ -13,7 +13,7 @@
         // Carefully, get them back by using position only
         Site site = new Site(c.getString(1));
         // FIXME: Does not handle non mainspace pages
-        PageTitle title = new PageTitle(null, c.getString(2), site);
+        PageTitle title = new PageTitle(null, c.getString(2), null, site);
         Date timestamp = new Date(c.getLong(3));
         return new SavedPage(title, timestamp);
     }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java 
b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
index e2745a4..cfd8a98 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
@@ -33,7 +33,7 @@
 
         ArrayList<PageTitle> pageTitles = new ArrayList<PageTitle>();
         for (int i = 0; i < searchResults.length(); i++) {
-            pageTitles.add(new PageTitle(null, searchResults.optString(i), 
site));
+            pageTitles.add(new PageTitle(null, searchResults.optString(i), 
null, site));
         }
 
         if (WikipediaApp.isWikipediaZeroDevmodeOn()) {
diff --git a/www/js/main.js b/www/js/main.js
index 52c744a..ab9ae9c 100644
--- a/www/js/main.js
+++ b/www/js/main.js
@@ -14,4 +14,4 @@
         imageURLs.push( images[i].src );
     }
     bridge.sendMessage( "imagesListResponse", { "images": imageURLs });
-} );
\ No newline at end of file
+} );
diff --git a/www/js/sections.js b/www/js/sections.js
index 3aa2d4e..b6ccb71 100644
--- a/www/js/sections.js
+++ b/www/js/sections.js
@@ -26,6 +26,11 @@
     heading.id = "heading_" + section.id;
     heading.setAttribute( 'data-id', section.id );
 
+    // Slip in an anchor element we can scroll to
+    var anchor = document.createElement( "span" );
+    anchor.id = section.anchor;
+    heading.insertBefore(anchor, heading.firstChild);
+
     var editButton = document.createElement( "a" );
     editButton.setAttribute( 'data-id', section.id );
     editButton.setAttribute( 'data-action', "edit_section" );
@@ -50,6 +55,9 @@
         bridge.sendMessage( "requestSection", { index: payload.index + 1 } );
     } else {
         document.getElementById( "loading_sections").className = "";
+        if ( typeof payload.fragment === "string" ) {
+            document.location.hash = "#" + payload.fragment;
+        }
     }
 });
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic651fd3bd130b48addbc1cb565e3d47836e27f2a
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: 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