User:HueSatLum/findSources.js

/** * Adds a portal to the sidebar of the page with customizable links for finding sources * * @author HueSatLum * @version 1.1 */

/* To install, add the following line to your common.js:

importScript('User:HueSatLum/findSources.js') // Linkback: User:HueSatLum/findSources.js

See the documentation at User:HueSatLum/findSources for costumization instructions. */

window.FindSources = window.FindSources || {}; if ( FindSources.searchEngines === undefined ) { FindSources.searchEngines = { 'bing': { name: 'Bing', url: 'http://www.bing.com/search?q=$1' },   'duckduckgo': { name: 'DuckDuckGo', url: 'https://duckduckgo.com/?q=$1&ia=about' },   'google': { name: 'Google', url: 'https://www.google.com/search?as_eq=wikipedia&q=$1' },   'googlebooks': { name: 'Google Books', url: 'https://www.google.com/search?tbm=bks&q=$1' },   'googleimages': { name: 'Free images', url: 'https://www.google.com/search?safe=off&tbm=isch&tbs=sur:fmc&as_sitesearch=wikimedia.org&as_dt=e&q=$1+-site:wikipedia.org' },   'googlenews': { name: 'Google News', url: 'https://www.google.com/search?tbm=nws&q=$1' },   'googlenewspapers': { name: 'Newspapers', url: 'https://www.google.com/search?as_sitesearch=news.google.com/newspapers&q=$1' },   'googlescholar': { name: 'Scholar', url: 'https://scholar.google.com/scholar?q=$1' },   'highbeam': { name: 'HighBeam', url: 'http://www.highbeam.com/Search?searchTerm=$1' },   'jstor': { name: 'JSTOR', url: 'http://www.jstor.org/action/doBasicSearch?Query=$1' },   'nytimes': { name: 'NYTimes', url: 'http://query.nytimes.com/search/sitesearch/#/$1/' } }; } if ( FindSources.order === undefined ) { FindSources.order = [ 'google', 'googlebooks', 'googlenews', 'googlenewspapers', 'nytimes', 'googleimages' ]; }

( function ( $, mw ) { if ( [ 0, 1, 118, 118 ].indexOf( mw.config.get( 'wgNamespaceNumber' ) ) === -1 && !mw.config.get( 'wgIsSearchResultPage' ) ) {    // Only run on article and draft namespaces and their talk pages and search pages    return;  }  var searchTitle = mw.config.get( 'wgTitle' );  if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search' ) {    searchTitle = mw.util.getParamValue( 'search' );  }  searchTitle = searchTitle.toLowerCase    .replace( /\((.+?)\)$/, '$1' );  var $portalClone = $( '#p-tb' ).clone;  $portalClone.attr( 'id', 'p-findsources' );  $portalClone.find( 'h3' )    .text( 'Find sources' )    .attr( 'id', function ( _ind, value ) { if ( value ) { var id = 'p-findsources-label'; $portalClone.attr( 'aria-labelledby', id ); return id; }   } );  $portalClone.find( 'ul' ).empty;  $portalClone.insertAfter( '#p-tb' );

FindSources.order.forEach( function ( engine ) {   var engineData = FindSources.searchEngines[ engine ];    if ( !engineData ) {      return console.info( 'findSources.js: \ + engine + '\' was skipped because its data was not found.' );    }    if ( typeof engineData.url !== 'string' ) {      return console.info( 'findSources.js: \ + engine + '\' was skipped because its URL was malformed or not found.' );    }

var url = engineData.url.replace( '$1', encodeURIComponent( searchTitle ) ); var engineLink = mw.util.addPortletLink(     'p-findsources',      url,      engineData.name || engine,      'fs-' + engine    ); $( engineLink ).find( 'a' ).attr( 'target', '_blank' ); } ); } ) ( jQuery, mediaWiki );