Järjestelmäviesti:Verkkoviite helper dev.js
Siirry navigaatioon
Siirry hakuun
Huomautus: Selaimen välimuisti pitää tyhjentää asetusten tallentamisen jälkeen, jotta muutokset tulisivat voimaan.
- Firefox ja Safari: Napsauta Shift-näppäin pohjassa Päivitä, tai paina Ctrl-F5 tai Ctrl-R (⌘-R Macilla)
- Google Chrome: Paina Ctrl-Shift-R (⌘-Shift-R Macilla)
- Internet Explorer ja Edge: Napsauta Ctrl-näppäin pohjassa Päivitä tai paina Ctrl-F5
- Opera: Paina Ctrl-F5.
/*
* Tämä kaksisainen scripti luo halutulla sivulla sivusta verkkoviitteen.
*
* Scripti muodostuu kahdesta osasta:
* - Bookmarkletista joka lataa tämän sivun
* - Tällä sivulla olevasta koodista joka parsii kohdesivun ja tulostaa verkkoviitteen
*/
/*
* Bookmarkletin koodi:
* "javascript:(function(){document.body.appendChild(document.createElement('script')).src='//fi.wikipedia.org/w/index.php?title=Mediawiki:verkkoviite_helper.js&action=raw&ctype=text/javascript';})();"
*/
/*
* Yksittäisten sivujen parserit
*/
String.prototype.capitalize = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
String.prototype.ucwords = function() {
return this.toLowerCase().replace(/(^| )[a-z]/g, function(letter) { return letter.toUpperCase(); });
}
String.prototype.normalizedate = function() {
// Jätetään pois kellonaika silloin kun päiväys on muodossa "16.6.2014 07:20"
if (this.match("^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4} (klo )?[0-9]{1,2}[.:][0-9][0-9](:[0-9][0-9])?$"))
{
return this.split(" ")[0];
}
// parsitaan bi3dPubDate: 2014-06-19 12:13:36
var re=/^([12][0129][0-9][0-9])-([01]?[0-9])-([0123]?[0-9]) [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/;
m = re.exec(this.trim());
if (m)
{
var pvm = m[3] + "." + m[2] + "." + m[1]; // dd.mm.yyyy
return pvm;
}
// Muutetaan 2014-06-16T06:01:07.000+03:00 muotoon dd.mm.yyyy
if (this.match(/[12][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T/))
{
var d=new Date(this.trim());
if (d.getFullYear())
{
var year = d.getFullYear();
var month = d.getMonth() +1; // GetMonth() is zero based
var day = d.getDate(); // GetMonth() is zero based
return day + "." + month +"." + year;
}
}
return this.trim();
}
String.prototype.parseIso8601 = function() {
var regexIso8601 = /^(\d{4}|\+\d{6})(?:-(\d{2})(?:-(\d{2})(?:T(\d{2}):(\d{2}):(\d{2})\.(\d{1,})(Z|([\-+])(\d{2}):(\d{2}))?)?)?)?$/;
var lOff = -(new Date().getTimezoneOffset());
var lHrs = Math.floor(lOff / 60);
var lMin = lOff % 60;
var m = regexIso8601.exec(this.trim());
if (m) {
return Date.UTC(
m[1],
(m[2] || 1) - 1,
m[3] || 1,
m[4] - (m[8] ? m[9] ? m[9] + m[10] : 0 : lHrs) || 0,
m[5] - (m[8] ? m[9] ? m[9] + m[11] : 0 : lMin) || 0,
m[6] || 0,
((m[7] || 0) + '00').substr(0, 3)
);
}
return Date.parse(this.trim());
}
function get_rss(p)
{
var rss_url="";
var target_url=p['url'];
$("link[rel='alternate']").each(function(){
if (typeof $(this).attr("type") != "undefined" && $(this).attr("type") == "application/rss+xml")
{
if ((rss_url)=="" || (rss_url.length > $(this).attr("href").length ) )
{
rss_url=$(this).attr("href");
}
}
});
var rss_feed="";
var item;
$.ajax({
type: "GET",
url: rss_url,
async: false,
success : function(data) {
rss_feed = $(data);
rss_feed.find("item").each(function() {
var $this = $(this);
if ($this.find("link").text()==target_url)
{
item = {
title: $this.find("title").text(),
link: $this.find("link").text(),
description: $this.find("description").text(),
pubDate: $this.find("pubDate").text(),
author: $this.find("author").text()
}
alert("found" + item['title']);
}
});
item['feed_title']=rss_feed.find("channel > title").text();
}
});
if ((typeof p['nimike']=='undefined' || p['nimike']=="") && item['title'].length )
{
p['nimike']=item['title'];
}
if ((typeof p['pvm']=='undefined' || p['pvm']=="") && item['pubDate'].length )
{
p['pvm']=item['pubDate'];
}
if ((typeof p['julkaisija']=='undefined' || p['julkaisija']=="") && item['feed_title'].length )
{
p['julkaisija']=item['feed_title'];
}
if ((typeof p['authors']=='undefined' || p['authors']=="") && item['author'].length )
{
p['authors']=item['author'];
}
return p;
}
function parse_doria() {
var ret={};
ret['url']=$("meta[name='citation_abstract_html_url']").attr("content");
ret['selite']=$("meta[name='citation_keywords']").attr("content");
ret['nimike']=$("meta[name='citation_title']").attr("content");
ret['kieli']=$("meta[name='citation_language']").attr("content");
ret['authors']=$("meta[name='citation_authors']").attr("content");
ret['pvm']=$("meta[name='citation_date']").attr("content");
ret['julkaisija']=$("meta[name='DC.contributor']").attr("content");
return ret;
}
/*
Vaikkei wikipediaa voikkaan käyttää lähteenä itsellen, niin tuetaan
mediawikiä jotta jengi voi testata linkkiä wikisivulla
*/
function parse_mediawiki() {
var ret={};
ret['url']=$("link[rel='canonical']").attr("href");
if (typeof(ret['url'])=="undefined")
{
ret['url']=document.location.href;
}
ret['selite']="revid:" + mw.config.get("wgRevisionId");
ret['nimike']=mw.config.get("wgPageName");
ret['kieli']=$("html").attr("lang");
ret['authors']="";
ret['pvm']=$("#mw-revision-date").text();
if (ret['pvm']=="")
{
ret['pvm']=$("#footer-info-lastmod").text();
}
ret['julkaisija']=$("#footer-copyrightico").find("img").attr("alt");
return ret;
}
function parse_turunsanomat() {
var ret={};
ret['url']=$("meta[property='og:url']").attr("content");
ret['selite']='';
ret['nimike']=$("meta[property='og:title']").attr("content");
ret['kieli']='';
ret['authors']=$(".content-left").find(".author").text();
if (ret['authors']=='')
{
// Yritetään hakea ISOLLA kirjoitettu henkilön nimi
ret['authors']=$(".content-left").find(".text").find("p").filter(function () {
return (/^[A-ZÄÖÅ ]+$/.test($(this).text()) && !(/(STT|TS|LUE L)/.test($(this).text())));
}).text();
}
ret['authors']=(ret['authors'] + "").ucwords();
// title-attribuutissa on pelkästään kuluvan päivän päivämäärä
// muiden kohdalla päiväys haetaan tagin sisältä.
ret['pvm']=$("div.info-container").find(".date").attr('title');
if (typeof(ret['pvm'])=="undefined")
{
ret['pvm']=$("div.info-container").find(".date").html();
}
// Jätetään pois kellonaika silloin kun päiväys on muodossa "16.6.2014 07:20"
if (ret['pvm'].match("^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4} [0-9]{1,2}:[0-9][0-9]$"))
{
ret['pvm']=ret['pvm'].split(" ")[0];
}
ret['julkaisu']=$(".papername").html();
return ret;
}
// Funktio hakee artikkelin header-tiedoista yms julkaisupäivämäärän
function parse_meta_pubdate()
{
var pvm;
if (typeof($("meta[property='og:updated_time']").attr("content"))!="undefined")
{
pvm=$("meta[property='og:updated_time']").attr("content");
}
else if (typeof($("meta[property='article:modified_time']").attr("content"))!="undefined")
{
pvm=$("meta[property='article:modified_time']").attr("content");
}
else if (typeof($("meta[property='article:published_time']").attr("content"))!="undefined")
{
pvm=$("meta[property='article:published_time']").attr("content");
}
else if (typeof($("meta[name='bi3dPubDate']").attr("content"))!="undefined")
{
pvm=$("meta[name='bi3dPubDate']").attr("content").normalizedate();
}
return pvm;
}
function get_article_element()
{
var e=$(".should_be_not_found");
// Haetaan isensellä;
if ($("isense").length)
{
e=$("isense").first();
}
else if ($("article").length)
{
e=$("article").first();
}
else if ($("div.article").length)
{
e=$("div.article").first();
}
return e;
}
// Funktio yrittää arvata sisällönperusteella sen mikä on julkaisupäivä
function parse_content_pubdate()
{
var e=get_article_element();
if (e.length)
{
// Sisällön tulkitseminen
var pvm=e.find("*").filter(function () {
return (/[Jj]ulkaistu.{1,30}[12][0129][0-9][0-9]/.test(this.innerHTML));
}).text();
if (pvm=="")
{
pvm=e.find(".date").text().trim();
}
if (pvm=="")
{
var re=/[0123]?[0-9]\.[0123]?[0-9]\.[12][0129][0-9][0-9]/g;
var delim="";
while (m = re.exec(e.text().trim()))
{
if (pvm.search(m[0])==-1)
{
pvm+=delim + m[0];
delim=", ";
}
}
if (pvm!="") pvm="TARKISTA_PÄIVÄYS:" + pvm;
}
}
return pvm;
}
function parse_og_and_bi3d() {
var ret={};
ret['url']=$("link[rel='canonical']").attr("href");
if (typeof(ret['url'])=="undefined"
|| (ret['url'].search("https://")==-1 && ret['url'].search("http://")==-1) )
{
ret['url']=$("meta[property='og:url']").attr("content");
}
ret['selite']='';
ret['nimike']=$("meta[property='og:title']").attr("content");
ret['kieli']='';
ret['authors']="";
ret['pvm']=parse_meta_pubdate();
if (typeof(ret['pvm'])=="undefined")
{
ret['pvm']=parse_content_pubdate();
}
ret['julkaisu']=$("meta[property='og:site_name']").attr("content");
return ret;
}
function parse_helsinginsanomat() {
var ret=parse_og_and_bi3d();
ret['authors']="";
$('div.byline.vcard').each(function(i,e) {
var delim = i ? ", " : "";
ret['authors']+= delim + $(e).find("p.fn").text();
});
return ret;
}
function parse_iltasanomat() {
var ret=parse_og_and_bi3d();
ret['authors']=($('#article-main').find('p.byline').text() + "").trim();
return ret;
}
function parse_kaleva() {
var ret=parse_og_and_bi3d();
ret['authors']=$('span.news-info').find('span.author').text();
return ret;
}
function parse_rumba() {
var e=get_article_element();
var ret=parse_generic();
ret['authors']=e.find("em").filter(function () {
return (/Teksti:/.test(this.innerHTML));
}).text().replace("Teksti: ", "");
var pvm=e.find(".main_content_singlestory_timestamp").text();
var re=/[0-9]{1,2}:[0-9]{1,2} -? ?([0123]?[0-9]\.[0123]?[0-9]\.[12][0129][0-9][0-9])/g;
var m = re.exec(e.text().trim());
if (m)
{
ret['pvm']=m[1];
}
return ret;
}
function parse_uusisuomi() {
var ret=parse_og_and_bi3d();
var e=$("article");
ret['authors']=e.find(".author-wrapper").find(".author-name").text();
ret['pvm']=e.find(".author-wrapper").find("span[property='dc:date']").text().split(" ")[0];
return ret;
}
function parse_kansanuutiset() {
var ret=parse_generic();
ret['nimike']=ret['nimike'].replace("| Kansan Uutiset | Verkkolehti", "").trim();
ret['julkaisu']="Kansan uutiset";
ret['authors']=$(".article").find("#author").text().trim();
return ret;
}
function parse_iltalehti() {
var ret=parse_og_and_bi3d();
ret['pvm']=$('p.juttuaika').text().trim();
var re=/^[A-Z][a-z]+ +([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4}) +klo +[0-9]{1,2}[.:][0-9][0-9]$/;
var m = re.exec(ret['pvm']);
if (m)
{
ret['pvm']=m[1];
}
ret['julkaisu']=$("meta[name='application-name']").attr("content");
// Muutetaan authorin capseilla kirjoitetut nimet muotoon Ville Pekka Vallaton
var e=$('div.author');
//Tekijä on aina henkilö
if (e.first().text().trim().match(/(IS|STT|STT-IS|IS-STT)/))
{
ret['authors']="";
}
else if (e.length)
{
var tmp=($('div.author').html() + "").split("<br") ;
tmp=tmp[0].toLowerCase().split(" ");
ret['authors']="";
for (var n=0; n<tmp.length; n++)
{
ret['authors']+=tmp[n].capitalize()+ " ";
}
ret['authors']=ret['authors'].trim();
}
return ret;
}
function parse_yle_uutiset() {
var ret={};
ret['url']=$("meta[property='og:url']").attr("content");
ret['selite']='';
ret['nimike']=$("meta[property='og:title']").attr("content");
ret['kieli']='';
ret['authors']="";
$("article.content").find('ul.writers').find('a.author').find('span').each(function()
{
var author=$(this).text();
if (ret['authors']=="") ret['authors']=author;
else ret['authors']+=", " + author;
});
ret['pvm']="";
$("article.content").find('header').find('span.meta').find('time').each(function()
{
var pvm=$(this).text();
if (ret['pvm']=="") ret['pvm']=pvm;
else ret['pvm']+=", " + pvm;
});
ret['pvm']=ret['pvm'].normalizedate();
ret['julkaisija']=$("meta[property='og:site_name']").attr("content");
return ret;
}
function parse_ksml() {
var ret={};
ret['url']=$("meta[property='og:url']").attr("content");
ret['selite']='';
ret['nimike']=$("isense").find("#artPreHeadAndHead").find("h1").text().trim();
ret['kieli']='';
ret['authors']=$("isense").find("p.byline").find('span.authorName').text().trim();
ret['pvm']=$("isense").find("span.article-meta").find('time.date-published').find("span.lastModified").text();
if (typeof(ret['pvm'])=="undefined")
{
ret['pvm']=$("isense").find("span.article-meta").find('time.date-published').find("span.date").text();
}
ret['julkaisu']="Keskisuomalainen"
return ret;
}
/* MTV3 uutisparseri alkaa */
function parse_mtv3() {
var ret={};
ret['url']=$("meta[property='og:url']").attr("content");
ret['selite']='';
ret['nimike']=$("meta[property='og:title']").attr("content");
ret['kieli']='';
ret['authors']="";
$('.article').find('.article-authors').find('.author').each(function(i,e) {
var delim = i ? ", " : "";
ret['authors']+= delim + $(e).find(".author-name").text();
});
var datetime=$("div.article-info").find('time.dateCreated').attr("datetime");
if (datetime != "undefined")
{
ret['pvm']=datetime.normalizedate();
}
ret['julkaisija']=$("meta[property='og:site_name']").attr("content");
return ret;
}
/* MTV3 uutisparseri loppuu */
function parse_generic() {
var ret=parse_og_and_bi3d();
var article_element=get_article_element();
if (typeof(ret['url'])=="undefined")
{
ret['url']=document.location.href;
}
if (typeof(ret['nimike'])=="undefined")
{
ret['nimike']=$('title').text();
}
if (typeof(ret['pvm'])=="undefined")
{
ret['pvm']=parse_content_pubdate();
}
if (ret['authors']=='')
{
ret['authors']=article_element.find(".meta").find(".assistant").text().trim();
}
if (ret['authors']=='')
{
ret['authors']=article_element.find(".meta").find(".author").text();
}
if (ret['authors'].match("^[A-ZÄÖÅ ]+$"))
{
ret['authors']=(ret['authors'] + "").ucwords();
}
// Haetaan koti-liitteen meta-blokki jos kellonaikaa ei olla muuten saatu
if (ret['pvm']=='')
{
ret['pvm']=article_element.find(".meta").find("time").text().trim();
}
// Jätetään pois kellonaika silloin kun päiväys on muodossa "16.6.2014 07:20"
if (ret['pvm'])
{
ret['pvm']=ret['pvm'].normalizedate();
}
return ret;
}
function parse_highfi_list()
{
if ($("li.verkkoviite-bookmarklet").length) return undefined;
var link=$("<a>W</a>");
link.css('color', 'silver');
link.hover(function() {
$(this).css({'color': 'black'});
}, function() {
$(this).css({'color': 'silver'});
});
link.attr('href','#');
link.click(function(){
var article=$(this).parent().parent().parent();;
var ret={};
ret['url']=article.find("a.main-link").attr('href');
ret['selite']='';
ret['nimike']=article.find("header").text().trim();
ret['kieli']='';
ret['authors']="";
ret['pvm']=article.find("div.info").find('time').attr('datetime');
ret['julkaisija']="";
var julkaisu_tmp=article.find("div.info").find('p.source').text().trim().split("(");
ret['julkaisu']=(julkaisu_tmp[0] + "").trim();
var outstr=print_verkkoviite(ret);
alert(outstr);
return false;
});
var list_e=$("<li>");
list_e.attr('class','verkkoviite-bookmarklet');
list_e.css('vertical-align','top');
list_e.append(link);
$("ul.actions").append(list_e);
}
function parse_ampparit_list()
{
if ($("div.verkkoviite-bookmarklet").length) return undefined;
var link=$("<a>W</a>");
link.css('color', 'silver');
link.hover(function() {
$(this).css({'color': 'black'});
}, function() {
$(this).css({'color': 'silver'});
});
link.attr('href','#');
link.click(function(){
var article=$(this).parent().parent().parent();
var ret={};
ret['url']=article.find("a.news-item-headline").attr('href');
ret['selite']='';
ret['nimike']=article.find("a.news-item-headline").text().trim();
ret['kieli']='';
ret['authors']="";
ret['pvm']=article.find("div.news-item-date").text().trim() + new Date().getFullYear();
ret['julkaisija']="";
var julkaisu_tmp=article.find("div.news-item-source").text().trim().split("(");
ret['julkaisu']=(julkaisu_tmp[0] + "").trim();
var outstr=print_verkkoviite(ret);
alert(outstr);
return false;
});
var list_e=$("<div>");
list_e.attr('class','verkkoviite-bookmarklet');
list_e.css('vertical-align','top');
list_e.css('float','right');
list_e.css('padding-left', '1em');
list_e.append(link);
$("div.news-item-wrapper").find(".news-item-info").append(list_e);
}
function test_is_set(value)
{
return (typeof value != 'undefined' && value != '');
}
/*
* Verkkoviitteen tulostus
*/
function print_verkkoviite(p, print_full_info)
{
print_full_info = print_full_info == 1 ? 1 : 0;
p['julkaisu'] = typeof(p['julkaisu'])=="undefined" ? "" : p['julkaisu'];
p['julkaisija'] = typeof(p['julkaisija'])=="undefined" ? "" : p['julkaisija'];
p['kieli']=(p['kieli'] != 'fi' ? p['kieli'] : '');
var current_date = new Date();
var viitattu_pvm=current_date.getDate() + "." + (current_date.getMonth()+1) + "." + current_date.getFullYear();
var end_of_line="";
if (print_full_info)
{
end_of_line="\n";
}
var outstr="<ref>" + end_of_line;
outstr +="{{Verkkoviite " + end_of_line;
outstr +="| Osoite = " + p['url'] + end_of_line;
outstr +="| Nimeke = " + p['nimike'] + end_of_line;
outstr +="| Tekijä = " + p['authors'] + end_of_line;
if (print_full_info || test_is_set(p['tiedostomuoto']) )
{
outstr +="| Tiedostomuoto = " + end_of_line;
}
if (print_full_info || test_is_set(p['selite']) )
{
outstr +="| Selite = " + p['selite'] + end_of_line;
}
if (print_full_info || test_is_set(p['julkaisu']) )
{
outstr +="| Julkaisu =" +p['julkaisu'] + end_of_line;
}
outstr +="| Ajankohta = " + p['pvm'] + end_of_line;
if (print_full_info || test_is_set(p['julkaisupaikka']))
{
outstr +="| Julkaisupaikka = " + end_of_line;
}
if (print_full_info || test_is_set(p['julkaisija']))
{
outstr +="| Julkaisija = " + p['julkaisija'] + end_of_line;
}
outstr +="| Viitattu = " + viitattu_pvm + end_of_line;
if (print_full_info || test_is_set(p['kieli']))
{
outstr +="| Kieli = " + p['kieli'] + end_of_line;
}
outstr +="}}" + end_of_line;
outstr +="</ref>" + end_of_line;
return outstr;
}
/*
* Logiikka sille mitä tehdään.
*/
function handle_request() {
if (typeof($("meta[name='citation_abstract_html_url']").attr("content")) != "undefined" )
{
// Käsittelee tieteelliset tietokannat jotka julkaisevat head-osiossa citation tiedot
// https://www.doria.fi/
// http://www.theseus.fi
//
var p=parse_doria();
}
else if (($("meta[name='generator']").attr("content")+"").search("MediaWiki") != -1 )
{
// Käsittelee tieteelliset tietokannat jotka julkaisevat head-osiossa citation tiedot
// https://www.doria.fi/
// http://www.theseus.fi
//
var p=parse_mediawiki();
}
else if (document.location.href.search("www.ts.fi")!=-1)
{
var p=parse_turunsanomat();
}
else if (document.location.href.search("kansanuutiset.fi")!=-1)
{
var p=parse_kansanuutiset();
}
else if (document.location.href.search("koti.ts.fi")!=-1)
{
var p=parse_generic();
}
else if (document.location.href.search("www.hs.fi")!=-1)
{
var p=parse_helsinginsanomat();
}
else if ((document.location.href.search("yle.fi/uutiset")!=-1) || (document.location.href.search("yle.fi/urheilu")!=-1))
{
var p=parse_yle_uutiset();
}
else if (document.location.href.search("mtv.fi")!=-1)
{
var p=parse_mtv3();
}
else if (document.location.href.search("iltasanomat.fi")!=-1)
{
var p=parse_iltasanomat();
}
else if (document.location.href.search("iltalehti.fi")!=-1)
{
var p=parse_iltalehti();
}
else if (document.location.href.search("kaleva.fi")!=-1)
{
var p=parse_kaleva();
}
else if (document.location.href.search("ksml.fi")!=-1)
{
var p=parse_ksml();
}
else if (document.location.href.search("uusisuomi.fi")!=-1)
{
var p=parse_uusisuomi();
}
else if (document.location.href.search("www.rumba.fi")!=-1)
{
var p=parse_rumba();
}
else if (document.location.href.search("high.fi")!=-1)
{
var p=parse_highfi_list();
}
else if (document.location.href.search("www.ampparit.com")!=-1)
{
var p=parse_ampparit_list();
}
else
{
var p=parse_generic();
}
//p=get_rss(p);
if (typeof(p)!="undefined")
{
var full_ref=print_verkkoviite(p,1);
var one_line_ref=print_verkkoviite(p,0);
prompt(full_ref, one_line_ref);
}
else
{
alert("ERROR: no data parsed");
}
}
// http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet/
// more or less stolen form jquery core and adapted by paul irish
function getScript(url,success){
var script=document.createElement('script');
script.src=url;
var head=document.getElementsByTagName('head')[0],
done=false;
// Attach handlers for all browsers
script.onload=script.onreadystatechange = function(){
if ( !done && (!this.readyState
|| this.readyState == 'loaded'
|| this.readyState == 'complete') ) {
done=true;
success();
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
// $("body")==null tarkistus on sitä varten, että jokiin muu
if (typeof(window.jQuery) == "undefined" ) {
var jquery_url="//code.jquery.com/jquery-1.9.1.js";
getScript(jquery_url,function() {
if (typeof jQuery=='undefined') {
alert("JQuery loading failed");
} else {
handle_request();
}
});
}
else
{
handle_request();
}