ScholarChart

A charting userscript for Google Scholar distinguishing articles by the publication year and the number of citations

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        ScholarChart
// @namespace   ScholarChartNameSpace
// @description A charting userscript for Google Scholar distinguishing articles by the publication year and the number of citations
// @include     http://scholar.google.ca/*
// @include     https://scholar.google.ca/*
// @include     http://scholar.google.com/*
// @include     https://scholar.google.com/*
// @version     1.0
// @license     Creative Commons Attribution-NonCommercial-ShareAlike 3.0; http://creativecommons.org/licenses/by-nc-sa/3.0/
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js

// @require     http://code.highcharts.com/highcharts.js
// @require     http://code.highcharts.com/highcharts-more.js
// @require     http://code.highcharts.com/modules/exporting.js

// @grant       none
// ==/UserScript==

    document.body.style.background = '#F8F8FF';

    // Code to remove User Profile h3 if searching for people by adding an id    

    if ($("h3").first().text().substring(0, 17) == "User profiles for")
    {
        $("h3").first().attr('id', 'UserProfile');
    }

    // end user profile code
    
    var elemNumber = 0;

    $("h3[id!='UserProfile']").each(function() {
    elemNumber++;
        });
    
    
    var resultObject = new Array(elemNumber);
    var resultObjectYear = new Array(elemNumber);
    var resultObjectCitation = new Array(elemNumber);
    
    var resultObjectCitationLink = new Array(elemNumber);

    var resultObjectUrl = new Array(elemNumber);
   
    $("h3[id!='UserProfile']").each(function(i, l) {
       resultObject[i]=$(l).text();
       resultObjectUrl[i] = $(this).find('a[href]').first().attr('href');
    });


    var yearLessArticleFound = false;
    
     $(".gs_a").each(function(i , l) {
         
         try {
                 resultObjectYear[i] = parseInt($(this).text().match(/\s(19|20)\d\d/)[0]);//replace(/[^0-9$]/gi, ''));
                   
          }
          catch(err) { // if no year is found
               yearLessArticleFound = true;
               
               yearToUseInstead = new Date().getFullYear() + 5;
               resultObjectYear[i] =  yearToUseInstead;
          }
         
         
         resultObjectYear[i] = resultObjectYear[i] + ((Math.random()/4)-0.125);
      
    });
    
    var chartSubtitleText = "";
    if (yearLessArticleFound == true)
         chartSubtitleText = "No year is found for one or more articles. The year " +     (yearToUseInstead.toString())    + " is used instead.";

    
    
    
    $(".gs_fl:not(.gs_ggs)").each(function(i, l) {
    if($(this).find( "a:contains('Cited by')").html() != null)
    {
        resultObjectCitation[i] = parseInt($(this).find( "a:contains('Cited by')").html().replace(/[^0-9]/gi, ''));
        resultObjectCitationLink[i] = window.location.host + $(this).find( "a:contains('Cited by')").attr( "href" );
    }
    else
    {
    	resultObjectCitation[i] = 0;
    }
    });
   
    var resultObjectCombined = new Array(elemNumber);
    
    for (i = 0; i < elemNumber; i++) {
       resultObjectCombined[i]=
           {"x": resultObjectYear[i],
            "y": resultObjectCitation[i],
            "name": resultObject[i],
            "url" : resultObjectUrl[i],
            "url_citation" : resultObjectCitationLink[i]
           }
        
    };
    
    

    //Cloning google navigation to the top below the chart    

    var itm = document.getElementById("gs_n");

    if (itm != null)
    {
        var cln = itm.cloneNode(true);

        $("#gs_ccl").prepend(cln);
    }

    //end clone
    
    $("#gs_ccl").prepend("<div id='container'> text to be replaced </div>"); // the div for the chart


    document.getElementById("container").style.border = "thin solid #000000"; //setting border for the chart

    
    chart = new Highcharts.Chart({

        chart: { renderTo:'container', defaultSeriesType: 'scatter', zoomType: 'xy' }, 
		legend: { align: 'left', backgroundColor: '#FFFFFF', borderWidth: 1, floating: true, layout: 'vertical', verticalAlign: 'top', x: 100, y: 50 }, 
		plotOptions: { 
        
                    series: {
                cursor: 'pointer',
                point: {
                events: {
                    click: function (event) {
                        //alert(this.name + ' clicked\n' +
                          //    'Alt: ' + event.altKey + '\n' +
                            //  'Control: ' + event.ctrlKey + '\n' +
                              //'Shift: ' + event.shiftKey + '\n');
                        if(event.altKey) 
                        {
                            if (typeof  this.options.url_citation != "undefined")
                            {
                               window.location.href = this.options.url_citation;    
                            }
                            else
                            {
                                alert("no citation");
                            }                                                            
                        }
                        else if (event.ctrlKey)
                        {
                            var linksForScroll = $('a[href="'+ this.options.url +'"]').first(); 
                            linksForScroll.get(0).scrollIntoView(); // "get" to get DOM element instead of JQuery
                            
                            $('a[href="'+ this.options.url +'"]').each(function()
                                                                      
                            {                                
                               $(this).parent().parent().fadeOut("slow");
                               $(this).parent().parent().fadeIn("slow");                                                                
                            }                                          
                                                                                                                                                                                                               
                            );
                            
                            
                            // Changed because PDF links were the same as the one on the right
                            //linksForScroll.fadeOut("slow");
                            //linksForScroll.fadeIn("slow");                                                     
                            
                        }
                        else
                        {
                            window.location.href = this.options.url;
                        }
                        
                        
                    }
                    }
                }
            },
        
        scatter: { marker: { radius: 5, states: { hover: { enabled: true, lineColor: '#646464' } } }, states: { hover: { enabled: false } } } }, 
        subtitle: { text: chartSubtitleText}, 
		title: { text: 'Click for the paper, alt+click for citations, ctrl+click for scroll' }, 
        tooltip: {
                style: {
                padding: 10,
                fontWeight: 'bold',
                fontSize: '14px',
               },
            
            formatter: function() {return this.point.name +', year: '+ Math.round(this.x) +', citation: '+ this.y +' ' +  ' ' ; } }, 
        Axis: { allowDecimals : false, endOnTick: true, showLastLabel: true, startOnTick: true, title: { text: 'year ' } }, 
        yAxis: { min : 0, title: { text: 'Citation' }, allowDecimals : false,
                labels: {
            style: {
                color: '#525151',
                font: '14px Helvetica',
                fontWeight: 'bold'
            },
            formatter: function () {
                return this.value;
            }
        },
 
        }, //, type: 'logarithmic' }, 
		series: [{ data: [{ name: 'OQLC Extending C with an Object Query Capability', x: 1995, y: 14 }, { name: 'Transaction Management in Multidatabase Systems', x: 1995, y: 22 }, { name: 'Overview of the ADDS System', x: 1995, y: 0 }, { name: 'Multimedia Information Systems Issues and Approaches', x: 1995, y: 25 }, { name: 'Active Database Systems', x: 1995, y: 0 }], name: 'Cat1', color: 'rgba(0, 100, 0, .5)' }]//'rgba(223, 83, 83, .5)' }]	
    });
    
    chart.series[0].setData(resultObjectCombined);