diff --git a/src/js/config.js b/src/js/config.js index 979ddcf..7458cf1 100644 --- a/src/js/config.js +++ b/src/js/config.js @@ -1,3 +1,21 @@ +/* Copyright (C) 2014 Alinson Xavier + * + * This file is part of Scholarium. + * + * Scholarium is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this software. If not, see . + */ + var scholarius_options = { }; @@ -32,7 +50,7 @@ var visjs_options = { leaf: { color: { border: '#fff', - background: '#31ae31', + background: '#fff', highlight: { border: '#fff', background: '#dd3' diff --git a/src/js/crawler.js b/src/js/crawler.js index cfa3661..e9cbcdf 100644 --- a/src/js/crawler.js +++ b/src/js/crawler.js @@ -1,3 +1,21 @@ +/* Copyright (C) 2014 Alinson Xavier + * + * This file is part of Scholarium. + * + * Scholarium is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this software. If not, see . + */ + function ScholarCrawler(parser, nodes, edges) { this.stack = []; @@ -21,8 +39,8 @@ ScholarCrawler.prototype.article_to_node = function(article) shape: 'dot', mass: article.n_citations/2 + 1, radius: 3*Math.pow(article.n_citations, 0.8) + 3, - title: "" + article.authors + - " " + title: "" + article.authors + + ". " + article.title + ". " + article.source + ", " + article.year + "." }; }; @@ -126,21 +144,13 @@ ScholarCrawler.prototype._add_child_article = function(child_article, parent_nod } } - if(child_node.article.n_citations == 0) - child_node.group = "standard"; - else if(levels == 0) - child_node.group = "leaf"; - else + if(child_article.n_citations > 0 && levels > 0) this.push(child_node, levels-1); if(this.nodes.getIds().indexOf(child_node._id) < 0) - { this.nodes.add(child_node); - } else - { this.nodes.update(child_node); - } } ScholarCrawler.prototype.push = function(parent_node, levels) @@ -152,9 +162,7 @@ ScholarCrawler.prototype.push = function(parent_node, levels) { parent_node.group = "processing"; if(this.nodes.getIds().indexOf(parent_node._id) >= 0) - { this.nodes.update(parent_node); - } } }; diff --git a/src/js/main.js b/src/js/main.js index a486a43..9386118 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -1,3 +1,21 @@ +/* Copyright (C) 2014 Alinson Xavier + * + * This file is part of Scholarium. + * + * Scholarium is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this software. If not, see . + */ + var assert = require('assert'); var gui = require('nw.gui'); var nedb = require('nedb'); diff --git a/src/js/model/map.js b/src/js/model/map.js index 71d06a7..c02a796 100644 --- a/src/js/model/map.js +++ b/src/js/model/map.js @@ -1,3 +1,21 @@ +/* Copyright (C) 2014 Alinson Xavier + * + * This file is part of Scholarium. + * + * Scholarium is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this software. If not, see . + */ + function ScholarMap(seed_url) { this.edges = []; diff --git a/src/js/parsers/generic_parser.js b/src/js/parsers/generic_parser.js index cd8d9e7..9faed46 100644 --- a/src/js/parsers/generic_parser.js +++ b/src/js/parsers/generic_parser.js @@ -1,3 +1,21 @@ +/* Copyright (C) 2014 Alinson Xavier + * + * This file is part of Scholarium. + * + * Scholarium is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this software. If not, see . + */ + function GenericParser() { this.scopus_parser = new ScopusParser(); diff --git a/src/js/parsers/scopus_parser.js b/src/js/parsers/scopus_parser.js index e1474ca..bc9b7a5 100644 --- a/src/js/parsers/scopus_parser.js +++ b/src/js/parsers/scopus_parser.js @@ -1,68 +1,88 @@ +/* Copyright (C) 2014 Alinson Xavier + * + * This file is part of Scholarium. + * + * Scholarium is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this software. If not, see . + */ + function ScopusParser() { -}; +} ScopusParser.prototype._parse_results_page = function(url, callback) { - var iframe = document.createElement("iframe"); - $(iframe).hide(); - document.body.appendChild(iframe); - iframe.src = url; - $(iframe).load(function() - { - var articles = []; - var ibody = $(iframe).contents()[0]; - - var select_pages = $(ibody.getElementsByName("resultsPerPage").item(0)); - if(select_pages.val() != 200) { - select_pages.val(200); - select_pages.change(); - return; - } + var iframe = document.createElement("iframe"); + $(iframe).hide(); + document.body.appendChild(iframe); + iframe.src = url; + $(iframe).load(function() + { + var articles = []; + var ibody = $(iframe).contents()[0]; - $(ibody).find(".resultItemLists li").each(function(index, li) - { - var article = {}; - - $(li).find(".docTitle a").each(function(index, tag) { - article.url = tag.href; - article.title = $(tag).text(); - }); + var select_pages = $(ibody.getElementsByName("resultsPerPage").item(0)); + if(select_pages.val() != 200) + { + select_pages.val(200); + select_pages.change(); + return; + } - $(li).find("a[href*='citedby']").each(function(index, tag) { - article.citations_url = tag.href; - article.n_citations = parseInt($(tag).text()); - }); - - $(li).find('.hidden-label').each(function(index, tag) { - if($(tag).text().indexOf("Year") == 0) - article.year = parseInt($.trim($(tag).next().text())); + $(ibody).find(".resultItemLists li").each(function(index, li) + { + var article = {}; - if($(tag).text().indexOf("Authors") == 0) - article.authors = $.trim($(tag).next().text()); + $(li).find(".docTitle a").each(function(index, tag) + { + article.url = tag.href; + article.title = $(tag).text(); + }); - if($(tag).text().indexOf("Source") == 0) - article.source = $.trim($(tag).next().text()); - }); + $(li).find("a[href*='citedby']").each(function(index, tag) + { + article.citations_url = tag.href; + article.n_citations = parseInt($(tag).text()); + }); + + $(li).find('.hidden-label').each(function(index, tag) + { + if($(tag).text().indexOf("Year") == 0) + article.year = parseInt($.trim($(tag).next().text())); - if(!('n_citations' in article)) { - article.citations_url = undefined; - article.n_citations = 0; - } - - article._id = $.md5(article.title + article.authors); + if($(tag).text().indexOf("Authors") == 0) + article.authors = $.trim($(tag).next().text()); - articles.push(article); - }); + if($(tag).text().indexOf("Source") == 0) + article.source = $.trim($(tag).next().text()); + }); - callback(articles); - document.body.removeChild(iframe); + if(!('n_citations' in article)) { + article.citations_url = undefined; + article.n_citations = 0; + } + + article._id = $.md5(article.title + article.authors); + articles.push(article); }); + + callback(articles); + document.body.removeChild(iframe); + }); } ScopusParser.prototype.parse = function(url, callback) { - if(url === undefined) return; - //if(url.indexOf("/results/") > 0 || url.indexOf("/search/") > 0) - this._parse_results_page(url, callback); + if(!url) return; + this._parse_results_page(url, callback); } diff --git a/src/js/parsers/web_of_science_parser.js b/src/js/parsers/web_of_science_parser.js index 1ed57a3..622481e 100644 --- a/src/js/parsers/web_of_science_parser.js +++ b/src/js/parsers/web_of_science_parser.js @@ -1,72 +1,91 @@ +/* Copyright (C) 2014 Alinson Xavier + * + * This file is part of Scholarium. + * + * Scholarium is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this software. If not, see . + */ + function WebOfScienceParser() { -}; +} WebOfScienceParser.prototype._parse_results_page = function(url, callback) { - console.log("parsing"); - var iframe = document.createElement("iframe"); - $(iframe).hide(); - document.body.appendChild(iframe); - iframe.src = url; - - $(iframe).load(function() - { - var articles = []; - var ibody = $(iframe).contents()[0]; - - var select_pages = $(ibody.getElementsByName("pageSize").item(0)); - if(select_pages.val() != 50) { - select_pages.val(50); - select_pages.change(); - return; - } - - $(ibody).find(".search-results-content").each(function(index, li) - { - var article = {}; - - $(li).find("a[href^='/full_record']").each(function(index, tag) { - article.url = tag.href; - article.title = $.trim($(tag).text()); - }); + console.log("parsing"); + var iframe = document.createElement("iframe"); + $(iframe).hide(); + document.body.appendChild(iframe); + iframe.src = url; - $(li).next().find("a[href^='/CitingArticles']").each(function(index, tag) { - article.citations_url = tag.href; - article.n_citations = parseInt($(tag).text()); - }); - - $(li).find('span.label').each(function(index, tag) { - //if($(tag).text().indexOf("By:") == 0) - // article.year = parseInt($.trim($(tag).next().text())); + $(iframe).load(function() + { + var articles = []; + var ibody = $(iframe).contents()[0]; - if($(tag).text().indexOf("By:") == 0) { - article.authors = $.trim($(tag).parent().text()).replace(/^By: /,""); - var source_year = $.trim($(tag).parent().next().text()); - article.source = source_year.replace(/Published.*/, "").replace(/\s\s+/g, ", ").replace(/, $/, ""); - article.year = parseInt(source_year.substr(source_year.length-4)); - } - }); + var select_pages = $(ibody.getElementsByName("pageSize").item(0)); + if(select_pages.val() != 50) + { + select_pages.val(50); + select_pages.change(); + return; + } - if(!('n_citations' in article)) { - article.citations_url = undefined; - article.n_citations = 0; - } - - article._id = $.md5(article.title + article.authors); + $(ibody).find(".search-results-content").each(function(index, li) + { + var article = {}; - articles.push(article); + $(li).find("a[href^='/full_record']").each(function(index, tag) + { + article.url = tag.href; + article.title = $.trim($(tag).text()); + }); - console.log(article); - }); + $(li).next().find("a[href^='/CitingArticles']").each(function(index, tag) + { + article.citations_url = tag.href; + article.n_citations = parseInt($(tag).text()); + }); + + $(li).find('span.label').each(function(index, tag) + { + if($(tag).text().indexOf("By:") == 0) + { + article.authors = $.trim($(tag).parent().text()).replace(/^By: /,""); + var source_year = $.trim($(tag).parent().next().text()); + article.source = source_year.replace(/Published.*/, "") + .replace(/\s\s+/g, ", ").replace(/, $/, ""); + article.year = parseInt(source_year.substr(source_year.length-4)); + } + }); - callback(articles); - document.body.removeChild(iframe); + if(!('n_citations' in article)) + { + article.citations_url = undefined; + article.n_citations = 0; + } + + article._id = $.md5(article.title + article.authors); + articles.push(article); }); + + callback(articles); + document.body.removeChild(iframe); + }); } WebOfScienceParser.prototype.parse = function(url, callback) { - if(!url) return; - this._parse_results_page(url, callback); + if(!url) return; + this._parse_results_page(url, callback); } diff --git a/src/js/views/main_menu.js b/src/js/views/main_menu.js index efef700..d0fe327 100644 --- a/src/js/views/main_menu.js +++ b/src/js/views/main_menu.js @@ -1,3 +1,21 @@ +/* Copyright (C) 2014 Alinson Xavier + * + * This file is part of Scholarium. + * + * Scholarium is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this software. If not, see . + */ + function MainMenuView() {}; MainMenuView.prototype.render = function(container) @@ -22,7 +40,8 @@ MainMenuView.prototype.render = function(container) var ul = document.getElementById('saved_maps_container'); var li = document.createElement("li"); var a = document.createElement("a"); - a.onclick = function() { + a.onclick = function() + { new ShowMapView(map).render(container); return false; }; diff --git a/src/js/views/show_map.js b/src/js/views/show_map.js index e695add..0be016b 100644 --- a/src/js/views/show_map.js +++ b/src/js/views/show_map.js @@ -1,6 +1,20 @@ -//function ShowMapView(seed_url) { -// this.seed_url = seed_url; -//}; +/* Copyright (C) 2014 Alinson Xavier + * + * This file is part of Scholarium. + * + * Scholarium is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this software. If not, see . + */ function ShowMapView(map) { this.map = map; @@ -14,6 +28,9 @@ ShowMapView.prototype.render = function(container) this.nodes.add(this.map.nodes); this.edges.add(this.map.edges); + document.nodes = this.nodes; + document.edges = this.edges; + var parser = new GenericParser(); var crawler = new ScholarCrawler(parser, this.nodes, this.edges); crawler.start(); @@ -34,7 +51,8 @@ ShowMapView.prototype.render = function(container) var data = { nodes: this.nodes, edges: this.edges }; this.network = new vis.Network(network_div, data, visjs_options); - this.network.on('doubleClick', function(params) { + this.network.on('doubleClick', function(params) + { if(params.nodes.length > 0) { crawler.push(this.nodes.get(params.nodes[0]), 1); @@ -52,7 +70,8 @@ ShowMapView.prototype.render = function(container) } }.bind(this)); - this.network.on("resize", function(params) { + this.network.on("resize", function(params) + { var height = $(window).height(); var width = $(window).width(); $(".mynetwork").css("width", width);