From b4a471b9249945aaa004be744c96f5061e3ff23e Mon Sep 17 00:00:00 2001 From: Rory MacQueen Date: Fri, 16 Aug 2013 08:15:06 -0700 Subject: Added ability to follow links in wiki webview [endlessm/eos-sdk#264] --- wikipedia/PrebuiltArticlesPage.js | 7 ++----- wikipedia/WikipediaWebView.js | 30 ++++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/wikipedia/PrebuiltArticlesPage.js b/wikipedia/PrebuiltArticlesPage.js index 59935ac..74f69a0 100644 --- a/wikipedia/PrebuiltArticlesPage.js +++ b/wikipedia/PrebuiltArticlesPage.js @@ -54,10 +54,7 @@ const PrebuiltArticlesPage = new Lang.Class({ set article_uri(value) { this._article_uri = value; if(value !== null && value !== "") { - this._wiki_view.loadArticleByTitle(this._article_uri); + this._wiki_view.loadArticleByURI(this._article_uri); } - }, - - - + } }); \ No newline at end of file diff --git a/wikipedia/WikipediaWebView.js b/wikipedia/WikipediaWebView.js index c820c8f..c937781 100644 --- a/wikipedia/WikipediaWebView.js +++ b/wikipedia/WikipediaWebView.js @@ -5,7 +5,8 @@ const Soup = imports.gi.Soup; const WebKit = imports.gi.WebKit2; const Utils = imports.wikipedia.utils; -const getPageURL = "http://127.0.0.1:3000/getDomainSpecificArticle?title="; +const hostName = "http://127.0.0.1:3000/" +const getPageURI = "getDomainSpecificArticle?title="; // Interpret image:// URIs as wikipedia images WebKit.WebContext.get_default().register_uri_scheme('image', function(request) { @@ -29,17 +30,38 @@ const WikipediaWebView = new Lang.Class({ //settings.set_enable_developer_extras(true); //this.set_settings(settings); this.connect('context-menu', Lang.bind(this, function(){return true})); + + this.connect('decide-policy', + Lang.bind(this, this._onNavigation)); }, - loadArticleByTitle: function(url) { - let parts = url.split("/"); + loadArticleByURI: function(uri) { + let parts = uri.split("/"); let suffix = parts[parts.length - 1]; let title = decodeURI(suffix.replace("_", " ", 'g')); - this.load_uri(getPageURL + title); + this.load_uri(hostName + getPageURI + title); + }, + + loadArticleByTitle: function(title) { + this.load_uri(hostName + getPageURI + title); }, _getArticleImagesPath: function() { let cur_exec = this.get_toplevel().get_application().application_base_path; return cur_exec + "/web_view/article_images/"; + }, + + _onNavigation: function(webview, decision, decision_type) { + if (decision_type == WebKit.PolicyDecisionType.NAVIGATION_ACTION) { + let uri = decision.request.uri; + if (uri.startsWith(hostName + "wiki/")) { + let parts = uri.split("/"); + let suffix = parts[parts.length - 1]; + let title = decodeURI(suffix.replace("_", " ", 'g')); + this.loadArticleByTitle(title); + return true; + } + } + return false; // not handled, default behavior } }); -- cgit v1.2.3