From 088dcca6dd1a3223d59c0477133ed17b031f0ba9 Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Thu, 31 Oct 2013 13:48:27 -0700 Subject: Query articles with the 'source' parameter We need to pass the 'source' parameter to NodeJS to indicate the source database that an article comes from. This should later be replaced by indicating this information in the database name. [endlessm/eos-sdk#383] --- wikipedia/ArticleList.js | 9 ++++++-- wikipedia/PrebuiltArticlesPage.js | 8 ++++++- wikipedia/WikipediaWebView.js | 31 +++++++++++++++++++++------ wikipedia/models/article_model.js | 5 +++++ wikipedia/presenters/domain_wiki_presenter.js | 4 ++-- wikipedia/views/domain_wiki_view.js | 3 ++- 6 files changed, 48 insertions(+), 12 deletions(-) diff --git a/wikipedia/ArticleList.js b/wikipedia/ArticleList.js index 80c309a..de9eb81 100644 --- a/wikipedia/ArticleList.js +++ b/wikipedia/ArticleList.js @@ -14,7 +14,11 @@ const ArticleList = new Lang.Class({ Signals: { 'article-chosen': { - param_types: [GObject.TYPE_STRING, GObject.TYPE_STRING] + param_types: [ + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING + ] } }, @@ -52,7 +56,8 @@ const ArticleList = new Lang.Class({ let button = new ListTextButton.ListTextButton(HOVER_ARROW_URI, article.title, { hexpand: true }); button.connect('clicked', Lang.bind(this, function() { - this.emit('article-chosen', article.title, article.uri); + this.emit('article-chosen', + article.title, article.source, article.uri); })); this._grid.add(button); diff --git a/wikipedia/PrebuiltArticlesPage.js b/wikipedia/PrebuiltArticlesPage.js index 03cd4a5..7c8d06e 100644 --- a/wikipedia/PrebuiltArticlesPage.js +++ b/wikipedia/PrebuiltArticlesPage.js @@ -15,6 +15,11 @@ const PrebuiltArticlesPage = new Lang.Class({ 'Human-readable title for the article to be displayed', GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT, ''), + 'article-source': GObject.ParamSpec.string('article-source', + 'Article source', + 'Source website or database that the article comes from', + GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT, + 'Wikipedia'), 'article-uri': GObject.ParamSpec.string('article-uri', 'Article URI', 'Wikipedia URI for the article to be displayed', @@ -25,6 +30,7 @@ const PrebuiltArticlesPage = new Lang.Class({ _init: function(props) { this._article_title = null; this._article_uri = null; + this._article_source = null; // Empty array is placeholder until we get baby page rank this._wiki_view = new EndlessWikipedia.WikipediaWebView({ @@ -68,7 +74,7 @@ const PrebuiltArticlesPage = new Lang.Class({ set article_uri(value) { this._article_uri = value; if(value !== null && value !== "") { - this._wiki_view.loadArticleByTitle(this._article_title); + this._wiki_view.loadArticleByTitle(this._article_title, this.article_source); } } }); \ No newline at end of file diff --git a/wikipedia/WikipediaWebView.js b/wikipedia/WikipediaWebView.js index b898ba6..a6f2aaf 100644 --- a/wikipedia/WikipediaWebView.js +++ b/wikipedia/WikipediaWebView.js @@ -82,26 +82,31 @@ const WikipediaWebView = new Lang.Class({ return full_url; }, - loadArticleByURI: function(uri) { + loadArticleByURI: function(uri, source) { let parts = uri.split("/"); let suffix = parts[parts.length - 1]; let title = decodeURI(suffix.replace("_", " ", 'g')); - this.loadArticleByTitle(title); + // FIXME: this is a workaround for not storing the URI in the database + this.loadArticleByTitle(title, source); }, - loadArticleByTitle: function(title) { + loadArticleByTitle: function(title, source) { let params = { title: title, hideLinks: this.hide_links, + source: source, + lang: _systemPersonalityToDatabaseLang(this.system_personality) }; let url = this._getFullURL(hostName + getPageByTitleURI, params); this.load_uri(url); }, - loadArticleBySearchQuery: function(query) { + loadArticleBySearchQuery: function (query, source) { let params = { query: query, hideLinks: this.hide_links, + source: source, + lang: _systemPersonalityToDatabaseLang(this.system_personality) }; let url = this._getFullURL(hostName + getPageByQueryURI, params); this.load_uri(url); @@ -110,7 +115,7 @@ const WikipediaWebView = new Lang.Class({ loadTitlesBySearchQuery: function (query) { let params = { query: query, - lang: this.lang + lang: _systemPersonalityToDatabaseLang(this.system_personality) }; let url = this._getFullURL(hostName + getTitlesByQueryURI, params); this.load_uri(url); @@ -143,7 +148,8 @@ const WikipediaWebView = new Lang.Class({ let parts = uri.split("/"); let suffix = parts[parts.length - 1]; let title = decodeURI(suffix.replace("_", " ", 'g')); - this.loadArticleByTitle(title); + // FIXME: determine the source db from the link format? + this.loadArticleByTitle(title, 'Wikipedia'); return true; } else if (GLib.uri_parse_scheme(uri).startsWith('browser-')) { // Open everything that starts with 'browser-' in the system @@ -161,3 +167,16 @@ const WikipediaWebView = new Lang.Class({ this.setAllowedLinks(); } }); + +/* Temporary helper function; remove this when the original article URI is +stored inside the Elasticsearch database. FIXME */ +function _systemPersonalityToDatabaseLang(personality) { + switch (personality) { + case 'Guatemala': + case 'Mexico': + return 'es'; + case 'Brazil': + return 'pt'; + } + return 'en'; +} diff --git a/wikipedia/models/article_model.js b/wikipedia/models/article_model.js index 5c6cc15..c74da17 100644 --- a/wikipedia/models/article_model.js +++ b/wikipedia/models/article_model.js @@ -11,6 +11,10 @@ const ArticleModel = new Lang.Class({ 'title': GObject.ParamSpec.string('title', 'Article Title', 'Human Readable Article Title', GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY, ""), + 'source': GObject.ParamSpec.string('source', 'Source', + 'Source website or database that the article is from', + GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY, + ''), 'uri': GObject.ParamSpec.string('uri', 'Article URI', 'Title URI as stored in wikipedia database', GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY, "") @@ -92,6 +96,7 @@ const ArticleModel = new Lang.Class({ function newFromJson(json) { let retval = new ArticleModel({ title: json['title'], + source: json['source'], uri: json['url'] }); retval.setCategories(json['categories']); diff --git a/wikipedia/presenters/domain_wiki_presenter.js b/wikipedia/presenters/domain_wiki_presenter.js index 3e59a01..ecd58a3 100644 --- a/wikipedia/presenters/domain_wiki_presenter.js +++ b/wikipedia/presenters/domain_wiki_presenter.js @@ -82,8 +82,8 @@ const DomainWikiPresenter = new Lang.Class({ // Respond to the category page's 'article-clicked' signal by loading that // article and switching to the article page - _onArticleClicked: function (articleList, title, uri) { - this._view.set_article_info(title, uri); + _onArticleClicked: function (articleList, title, source, uri) { + this._view.set_article_info(title, source, uri); this._view.show_article_page(); }, diff --git a/wikipedia/views/domain_wiki_view.js b/wikipedia/views/domain_wiki_view.js index a238f6b..33a942d 100644 --- a/wikipedia/views/domain_wiki_view.js +++ b/wikipedia/views/domain_wiki_view.js @@ -182,9 +182,10 @@ const DomainWikiView = new Lang.Class({ * Method: set_article_info * Proxy method to set the article displaying on the article page */ - set_article_info: function (title, uri) { + set_article_info: function (title, source, uri) { // Note: Must set article title first this._article_view.article_title = title; + this._article_view.article_source = source; this._article_view.article_uri = uri; }, -- cgit v1.2.3