diff options
author | P. F. Chimento <philip.chimento@gmail.com> | 2013-08-19 10:39:06 -0700 |
---|---|---|
committer | P. F. Chimento <philip.chimento@gmail.com> | 2013-08-19 10:39:06 -0700 |
commit | 17f450b7e26eaf555512d58493aec9fc8b25cee3 (patch) | |
tree | 3d694d3832436df27c13fcf802fd4be7759c98f4 /wikipedia | |
parent | 0ee1f9032dd5dab4205881798a9b9b6e938d5a03 (diff) | |
parent | b4a471b9249945aaa004be744c96f5061e3ff23e (diff) |
Merge pull request #266 from endlessm/issues/264
#264 Added ability to follow links in wiki webview
Diffstat (limited to 'wikipedia')
-rw-r--r-- | wikipedia/PrebuiltArticlesPage.js | 7 | ||||
-rw-r--r-- | 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 7f0fc39..05b64c3 100644 --- a/wikipedia/WikipediaWebView.js +++ b/wikipedia/WikipediaWebView.js @@ -4,7 +4,8 @@ const Lang = imports.lang; 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) { @@ -33,17 +34,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 } }); |