summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRory MacQueen <rorymacqueen@gmail.com>2013-08-16 08:15:06 -0700
committerRory MacQueen <rorymacqueen@gmail.com>2013-08-19 10:23:32 -0700
commitb4a471b9249945aaa004be744c96f5061e3ff23e (patch)
tree2db3658534dae0daf0d52e45a2b66dc03b298413
parent9a2054013dbc65f12a279104547ddd7e569cd9d9 (diff)
Added ability to follow links in wiki webview
[endlessm/eos-sdk#264]
-rw-r--r--wikipedia/PrebuiltArticlesPage.js7
-rw-r--r--wikipedia/WikipediaWebView.js30
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
}
});