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 & 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