Järjestelmäviesti:Verkkoviite helper.js

Wikipediasta
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() {
  var input_str=this.replace(/\s+/g,' ').trim();


  // Jätetään pois kellonaika silloin kun päiväys on muodossa "(Maanantai)? 16.6.2014 klo? 07:20"
  var re=/^(([Pp]ublicerad:?|[Jj]ulkaistu:?|[Mm]aanantai|[Tt]iistai|[Kk]eskiviikko|[Tt]orstai|[Pp]erjantai|[Ll]auantai|[Ss]unnuntai) )?([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4}),? (- |klo )?[0-9]{1,2}[.:][0-9][0-9](:[0-9][0-9])?\.?$/;
  m = re.exec(input_str.trim());

  if (m)
  {
     return m[3];
  }
  
  // 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(input_str);
  if (m)
  {
     var pvm = m[3] + "." + m[2] + "." + m[1];  // dd.mm.yyyy
     return pvm;
  }
//2014-06-24T21:40:14+00:00
  // Muutetaan 2014-06-16T06:01:07.000+03:00 muotoon dd.mm.yyyy
  if (input_str.match(/[12][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T/))
  {
     var d=new Date(input_str);
     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;
     }
  }

  // Mikäli löytyy pelkkä päiväys ilman vuotta, niin täydennetään vuosi ja poistetaan kellonaika
  var d=new Date();
  var re=/^([0-9]{1,2}\.[0-9]{1,2})\.? [0-9][0-9]:[0-9][0-9]$/;
  m = re.exec(input_str);
  if (m)
  {
        return m[1] + "." +  d.getFullYear();
  }


// Mikäli julkaistu ja päivitetty päivämäärä on sama niin tiivistetään teksti julkaistu-päivämääräksi
  var publish_date="";
  var update_date="";
  var re=/([Jj]ulkaistu|[Pp]ublicerad):? ([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4})/;
  m = re.exec(input_str);
  if (m)
  {
     publish_date=m[2];
  }
  var re=/([Pp]äivitetty|[Uu]ppdaterad):? ([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4})/;
  m = re.exec(input_str);
  if (m)
  {
     update_date=m[2] ;
  }

  if (publish_date != "" && publish_date==update_date)
  {
     return publish_date;
  }
  return input_str;
}

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_today_date_str()
{
  var d=new Date;
  return d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear();
}

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().trim()) && !(/(STT|TS|LUE L)/.test($(this).text().trim())));
     }).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 (typeof(ret['pvm'])!="undefined" 
      && 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;
}

function parse_verkkouutiset()
{
  var ret=parse_og_and_bi3d();
  ret['pvm']=$("article").find("time[itemprop='datePublished']").first().attr("datetime");
  // mikäli datetime-attribuuttia ei ole asetettu, niin yritetään poimia kohdan tekstisisältö
  if (typeof(ret['pvm'])=="undefined")
  {
     ret['pvm']=$("article").find("time[itemprop='datePublished']").first().text().trim();
  }
  ret['pvm']=ret['pvm'].normalizedate();
  ret['authors']=$("article").find("div[itemprop='author']").first().text().trim().normalizedate();

  return ret;

}

// Parseri Satakunnan Kansan ja Lapin Kansan käyttämälle julkaisumoottorille
function parse_lapinkansa()
{
  var ret=parse_generic();
  var title=$("title").first().text().trim();
  var title_parts=title.split("|");
  if (title_parts.length>1)
  {
     ret['julkaisu']=title_parts[1].trim();
     ret['nimike']=title_parts[0].trim();
  }
  ret['authors']=$("isense").find(".meta").find("strong").text().trim();

// Mikäli julkaistu ja päivitetty päivämäärä on sama niin tiivistetään teksti julkaistu-päivämääräksi
  var julkaistu_pvm="";
  var paivitetty_pvm="";
  var re=/[Jj]ulkaistu ([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4})/;
  m = re.exec(ret['pvm']);
  if (m) 
  {
     julkaistu_pvm=m[1];
  }
  var re=/[Pp]äivitetty ([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4})/;
  m = re.exec(ret['pvm']);
  if (m) 
  {
     paivitetty_pvm=m[1] ;
  }
  if (julkaistu_pvm != "" && julkaistu_pvm==paivitetty_pvm)
  {
     ret['pvm']=julkaistu_pvm;
  }

  return ret;
}

function parse_kauppalehti()
{
  var ret=parse_generic();
  ret['julkaisu']="Kauppalehti";
  ret['nimike']=ret['nimike'].replace(" | Kauppalehti.fi", "");
  if ($("div#textcontent > p.timestamp").length)
  {
     ret['authors']=$("div#textcontent > p.timestamp").first().html().split("<br>")[0].trim();
  }
  ret['pvm']=$("isense").find("p.timestamp").first().text().trim().split("\n")[0].normalizedate();
  if (ret['pvm']=="")
  {
     ret['pvm']= $("#content").find("p.timestamp").text().trim().split("\n")[0].normalizedate();
  }

  return ret;
}

function parse_taloussanomat()
{
  var ret=parse_generic();
  ret['nimike']=ret['nimike'].replace(" | Taloussanomat", "");
  ret['authors']=$("article").find("div.authorInfo").find(".author").text().trim();
  ret['pvm']=$("article").find("div.authorInfo").find(".time").text().normalizedate();

  return ret;
}

function parse_karjalainen()
{
  var ret=parse_generic();
  ret['authors']=$("meta[name='author']").attr("content");
  ret['julkaisu']="Karjalainen";
  ret['pvm']=$("#ja-content-main").find(".date_time").text().normalizedate();

  return ret;
}

function parse_lansisavo()
{
  var ret=parse_generic();
  if (ret['authors']=="")
  {
     ret['authors']=$("article").find(".author").find("h3").first().text().trim();
  }

  return ret;
}

function parse_esaimaa()
{
  var ret=parse_generic();
  ret['authors']=$(".news-item").find("#main_text").find(".signeeraus").text().replace("|", " ").trim();
  if (ret['authors']=="")
  {
     ret['authors']=$(".news-item").find(".author").text().trim();
  }
  ret['pvm']=$(".news-item").find(".news-info").find(".date").text().normalizedate();

  return ret;
}

function parse_savonsanomat()
{
  var ret=parse_generic();
  ret['authors']=$("isense").find(".byline").find(".authorName").text().trim();
  ret['julkaisu']="Savon sanomat";
 
  var pvm=$("isense").find(".article-meta").first().text();

  // DD.MM.YYYY löytyi
  if (pvm.match(/[0-9]{1,2}\.[0-9]{1,2}\.[12][0-9][0-9][0-9]/))
  {
     ret['pvm']=pvm.normalizedate();
  }
  else if (pvm.match(/[0-9]{1,2}:[0-9][0-9]/))
  {
     // Jos löytyy pelkkä kellonaika niin käytetään kuluvaa vuorokautta
     var d=new Date;
     ret['pvm']=d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear();
  }
  else
  {
     ret['pvm']=pvm.trim();;
  }

  return ret;
}

function parse_ilkka()
{
  var ret=parse_generic();
  var pvm_e=$("isense").find("p.date").first();
  var pvm_str=pvm_e.text().trim();
  var comment_str=pvm_e.find(".commentsBubble").text().trim();
  ret['pvm']=pvm_str.replace(comment_str, "").normalizedate();

 if (ret['authors']=='')
  {
     // Yritetään hakea ISOLLA kirjoitettu henkilön nimi
     ret['authors']+=$("isense").find("div.articleBody").find("p").filter(function () {
        return (/^[A-ZÄÖÅ\- ]+$/.test($(this).text().trim()));
     }).text();
     ret['authors']=ret['authors'].trim().ucwords();
   }

  return ret;
}

function parse_ess()
{
  var ret=parse_generic();
  ret['authors']="";
  $("article").find("ul.authors").find("li").each(function(i,e) { 
     if (i==0) { ret['authors']+=$(e).find(".author-name").text().trim(); }
     else { ret['authors']+=", " + $(e).find(".author-name").text().trim(); }
  });
  ret['julkaisu']="Etelä-Suomen Sanomat";
  ret['pvm']=$("article").find("time.article-date").first().text().normalizedate();

  return ret;
}

function parse_koillissanomat()
{
  var ret=parse_generic();
  ret['authors']=$("#contentMain").find(".writer").first().text().trim();
  ret['pvm']=$("#contentMain").find(".date").first().text().normalizedate();
  ret['julkaisu']="Koillissanomat";

  return ret;
}

function parse_abounderrattelser()
{
  var ret=parse_generic();

// Korjataan päiväyksen virheellinen aikavyöhyke
  pvm=$("#content").find(".post").first().find(".entry-info").find(".published").attr("title");
  var re=/T[0-9]{1,2}:[0-9]{2}:[0-9]{2}([+-][0-9]{2}:[0-9]{2})/;
  m=re.exec(pvm);
  if (m)
  {
     pvm=pvm.replace(m[1], "+02:00");
  }
  ret['pvm']= (typeof(pvm)=="undefined") ? "" : pvm.normalizedate();
  return ret;
}
                   

  


function parse_hbl()
{
  var ret=parse_generic();
  ret['authors']=$("article").find("#publishedinfo").first().find(".article-author").text().trim();
  ret['pvm']=$("article").find("#publishedinfo").first().find(".article-published").text().normalizedate();
  var title=$("title").text().trim();;

  if (title.match("Hbl.fi")) {  ret['julkaisu']="Hufvudstadsbladet"; }
  else if (title.match("Bbl.fi")) {  ret['julkaisu']="Borgåbladet"; }
  else if (title.match("Vastranyland.fi")) {  ret['julkaisu']="Västra Nyland"; }
  else ret['julkaisu']=title;
   
  return ret;
}

function parse_kp24()
{
  var ret=parse_generic();
  ret['julkaisu']="KP24";
  ret['pvm']="TARKISTA: " + $("isense").find("#pvm2").text().normalizedate();

  return ret;
}

function parse_demari()
{
  var ret=parse_generic();
  ret['julkaisu']="Demokraatti";
  ret['authors']=$(".content-block").find(".meta-holder").find(".info").text().replace(/\s+/g, " ").trim();

  var e=$(".content-block").find(".meta-holder").first();

  var pvm=e.text().trim().replace(e.find(".time").text().trim(), "").trim();
  var re=/([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})/;
  m = re.exec(pvm);
  if (m)
  {
     ret['pvm']=m[0];
  }

  return ret;
}

function parse_itahame()
{
  var ret=parse_generic();
  ret['julkaisu']="Itä-Häme";

  return ret;
}

function parse_iisalmensanomat()
{
  var ret=parse_generic();
  if (document.location.href.match("iisalmensanomat"))
  {
    ret['julkaisu']="Iisalmen sanomat";
  }
  else if (document.location.href.match("warkaudenlehti"))
  {
    ret['julkaisu']="Warkauden Lehti";
  }

  ret['pvm']=$("isense").find(".date").first().text().trim() + " " + $("isense").find(".lastModified").first().text().trim();
  ret['pvm']=ret['pvm'].normalizedate();
  ret['authors']=$("isense").find("#articleText").find(".author").text().trim();
  ret['nimike']=$("isense").find("h1.h1_article").text().trim();

  return ret;
}

function parse_forssanlehti()
{
  var ret=parse_generic();
  ret['julkaisu']="Forssan Lehti";
  ret['pvm']=$(".main").find(".scoop_date").text().normalizedate();
  if (ret['pvm']=="")
  {
     var str=$(".main").find(".scoop_item").find("em").text().trim();
     var re=/([0-9]{1,2})\.([0-9]{1,2}) [0-9]{2}:[0-9]{2}/;
     m = re.exec(str);
     if (m) 
     {
        var d=new Date();
        var month = d.getMonth() +1; // GetMonth() is zero based
        var day = d.getDate(); 
        if (parseInt(m[1])==day  && parseInt(m[2]) == month )
        {
           ret['pvm']=get_today_date_str();
        }
        else
        {
           ret['pvm']=m[0];
        }  
     }
  }
  ret['nimike']=$(".main").find(".scoop_item").find("h2").text().trim();
  ret['authors']=$(".main").find(".scoop_item").find(".byline").text().trim();

  return ret;
}

function parse_vasabladet()
{
  var ret=parse_generic();
  ret['julkaisu']=$("title").text().trim().split(" - ")[0];;
  ret['nimike'] = $("article").find("h1").first().text().trim();

  var pvm=$("article").find("div.published").find("time").first().attr("datetime");
  if (typeof(pvm) != "undefined")
  {
     ret['pvm']=pvm.normalizedate();
  }
  return ret;
}

function parse_salonseudunsanomat()
{
  var ret=parse_generic();
  ret['julkaisu']="Salon Seudun Sanomat";
  ret['nimike'] = $("#columnFrontMain").find("h1").text().trim();

  var pvm = $("#columnFrontMain").find("p.date").text().trim();
  var re=/Salon Seudun Sanomat ([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4})/;
  m = re.exec(pvm);
  if (m)
  {
    ret['pvm']=m[1];
  }
  return ret;
}

function parse_hameensanomat()
{
  var ret=parse_generic();
  var pvm=$("isense").find(".submitted-info").find(".published").first().text().trim();
  var updated=$("isense").find(".submitted-info").find(".updated").first().text().trim();
  if (pvm.match(/Julkaistu: [0-9]{1,2}:[0-9]{2}/))
  {
     ret['pvm']=get_today_date_str() + " " + updated;
  }
  else
  {
     ret['pvm']=pvm + " " + updated;
  }
  return ret;
}

function parse_maaseuduntulevaisuus()
{
  var ret=parse_generic();
  var current_date   = new Date();
  var new_date = new Date();

  ret['authors']=$("meta[name='author']").attr("content");
  ret['julkaisu']="Maaseudun tulevaisuus";
  ret['pvm']="";

  var pvm=$("div.article").find("div.meta").first().text().trim();
  var tag_str=$("div.article").find("div.meta").find(".tag").first().text().trim();
  var re=/(maanantai|tiistai|keskiviikko|torstai|perjantai|lauantai|sunnuntai), [0-9][0-9]:[0-9][0-9]/;
  m = re.exec(pvm);
  if (m)
  {   
    var days=[ 'sunnuntai', 'maanantai', 'tiistai', 'keskiviikko', 'torstai', 'perjantai', 'lauantai'];
    for (pubday=0; pubday<days.length; pubday++) { 
      if (days[pubday] == m[1]) {       
        if (current_date.getDay() != pubday)
        {
          // Siirretään päivä-indeksi edelliseen sunnuntaihin
          var distance = (current_date.getDay() == 0 ? 7 : current_date.getDay()) * -1;
          // Siirretään päivä-indeksiä eteenpäin julkaisuviikonpäivän verran
          distance+=pubday;       
          new_date.setDate(current_date.getDate() + distance);
        }

        ret['pvm']=new_date.getDate() + "." + (new_date.getMonth()+1) + "." + new_date.getFullYear();
        break;
      }
    }
  }
  else 
  {
     var re=/([0-9]{1,2}\.[0-9]{1,2}) [0-9][0-9]:[0-9][0-9]/;
     m = re.exec(pvm);
     if (m)
     {
        ret['pvm'] = m[1] + "." +  current_date.getFullYear();
     }
  }
  if (ret['pvm'] == "" )
  {
     ret['pvm']=($("div.article").find("div.meta").first().text().replace(tag_str, "").trim().split("\n")[0] + "").trim();
  }   
 


  return ret;
}

function parse_aamulehti()
{
  var ret=parse_generic();
  ret['julkaisu']="Aamulehti";
  ret['nimike']=ret['nimike'].replace(/( \| Aamulehti|Aamulehti \| )/, "");
  var meta=$("div.bodytext").find("span.meta").text().trim().split("|");
  if (meta.length>1)
  {
     ret['pvm']=meta[1].trim();
  }
  ret['authors']=$("div.bodytext").find("p.Kirjoittaja").text().trim();
  ret['authors']=ret['authors'].replace(/Aamulehti, |Aamulehti|STT, |STT/, "");
  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();
	}
        else if ($("div#content").find(".post").first().find(".entry-info").length)
        {
                // WordPress
                e=$("div#content").find(".post").first();
        }
	return e;
}

// Funktio yrittää arvata julkaisupäivän
function parse_content_pubdate()
{
	var e=get_article_element();
	
	if (e.length)
	{
           // Etsitään time:datePublished-elementtiä
           var pvm=e.find("time[itemProp='datePublished']").text().trim().normalizedate();

           // Parse Drupal 7 date
           if (pvm=="")
           {
              var created_date=$("article").find(".time-container").find(".created-date").text().trim();
              var created_year=$("article").find(".time-container").find(".created-year").text().trim();
              if (created_year != "" && created_date != "")
              {
                 return created_date + "." + created_year; 
              }
           }

           // Parse Drupal 7 date 2

           if (pvm=="")
           {
               var generator=$("meta[name='generator']").attr("content");
               if ((typeof(generator) != "undefined") && (generator.search("Drupal") != -1))
               {
                  pvm=$("article").find(".field-name-post-date").first().text().normalizedate();
               }
           }
           // WordPress
           if (pvm=="")
           {
               pvm=$("article.post").first().find(".entry-date").text().normalizedate();
           }

           if (pvm=="")
           {		
             // 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: " + 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");
  if (typeof(ret['nimike']) == "undefined" || ret['nimike']=="")
  {
     ret['nimike']=$("title").text();
  }   
  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().normalizedate();
  if (ret['pvm']=="")
  {
  	ret['pvm']=$("isense").find("span.article-meta").find('time.date-published').find("span.date").text().normalizedate();
  }
  if (ret['pvm']=="")
  {
  	ret['pvm']=$("isense").find("span.article-meta").find('time.date-published').text().normalizedate();
  }
  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 (typeof(datetime) != "undefined")
  {
      ret['pvm']=datetime.normalizedate();
  }
  ret['julkaisija']=$("meta[property='og:site_name']").attr("content");
  return ret;
}
/* MTV3 uutisparseri loppuu */

/* Project Runebergin Tietosanakirja alkaa */


function parse_runeberg_tieto() {
  var title=$("title").first().text().trim();
  var selite="";
  var julkaisu="";
  var pvm="";
  var re = re=/^([0-9 -]*?)\((.*?)\)/;
  var m = re.exec(title);
  if (m)
  {
  	julkaisu=m[2].trim();
  	title="VIITATTU_SANA_TÄHÄN";
  	selite="palstat: " + m[1].trim();
  }
  var tmp=$("table").first().text().trim();
  var re = re=/\(([0-9 -]+)\)/m;
  m = re.exec(tmp);
  if (m)
  {
  	pvm=m[1];
  }

  
  var ret={};
  ret['url']=document.location.href;
  ret['selite']=selite;
  ret['nimike']=title;
  ret['kieli']='';
  ret['authors']="";
  ret['pvm']=pvm;
  ret['julkaisu']=julkaisu;

  return ret;
}

/* Project Runebergin Tietosanakirja 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();
  }

  // Drupal 7
   if (ret['authors']=='')
   {
     ret['authors']=$("article").find(".field-name-field-creator").text().trim(); 
   }
  // WordPress
   if (ret['authors']=='')
   {
     $("#content").find(".post").first().find(".entry-info").find(".author").each(function (i,e) { 
        if (i) ret['authors'] += ", " + $(e).text().trim(); 
        else ret['authors']   += $(e).text().trim(); 
     });
   }
  // WordPress 2

   if (ret['authors']=='')
   {
     $("article.post").first().find(".author").each(function (i,e) { 
        if (i) ret['authors'] += ", " + $(e).text().trim(); 
        else ret['authors']   += $(e).text().trim(); 
     });
     ret['authors']=ret['authors'].replace(/^, /, "");
   }
   
   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.match("(lansi-uusimaa.fi|www.uusimaa.fi)"))
   {
	var p=parse_lansisavo();	
   }
   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("www.forssanlehti.fi")!=-1)
   {
        var p=parse_forssanlehti();	
   }
   else if (document.location.href.search("www.verkkouutiset.fi")!=-1)
   {
        var p=parse_verkkouutiset();	
   }
   else if (document.location.href.match(
"(www.lapinkansa.fi"
+ "|www.satakunnankansa.fi"
+ "|www.jamsanseutu.fi"
+ "|www.janakkalansanomat.fi"
+ "|www.kankaanpaanseutu.fi"
+ "|www.kmvlehti.fi" 
+ "|www.kuriirilehti.fi" 
+ "|www.lounaislappi.fi" 
+ "|www.luoteisvayla.fi" 
+ "|www.merikarvialehti.fi" 
+ "|www.nokianuutiset.fi" 
+ "|www.pohjolansanomat.fi"
+ "|www.pyhajokiseutu.fi" 
+ "|www.raahenseutu.fi" 
+ "|www.rannikkoseutu.fi" 
+ "|www.suurkeuruu.fi" 
+ "|www.sydansatakunta.fi" 
+ "|www.tyrvaansanomat.fi" 
+ "|www.uusirovaniemi.fi" 
+ "|www.valkeakoskensanomat.fi)"))
   {
        var p=parse_lapinkansa();	
   }
   else if (document.location.href.search("www.kauppalehti.fi")!=-1)
   {
        var p=parse_kauppalehti();	
   }
   else if (document.location.href.search("taloussanomat.fi")!=-1)
   {
        var p=parse_taloussanomat();	
   }
   else if (document.location.href.search("maaseuduntulevaisuus.fi")!=-1)
   {
        var p=parse_maaseuduntulevaisuus();	
   }
   else if (document.location.href.search("ess.fi")!=-1)
   {
        var p=parse_ess();	
   }
   else if (document.location.href.search("koillissanomat.fi")!=-1)
   {
        var p=parse_koillissanomat();	
   }
   else if (document.location.href.search("itahame.fi")!=-1)
   {
        var p=parse_itahame();	
   }
   else if (document.location.href.search("sss.fi")!=-1)
   {
        var p=parse_salonseudunsanomat();	
   }
   else if (document.location.href.search("hameensanomat.fi")!=-1)
   {
        var p=parse_hameensanomat();	
   }
   else if (document.location.href.search("savonsanomat.fi")!=-1)
   {
        var p=parse_savonsanomat();	
   }
   else if (document.location.href.match("hbl.fi|bbl.fi|vastranyland.fi"))
   {
        var p=parse_hbl();	
   }
   else if (document.location.href.match("abounderrattelser.fi"))
   {
        var p=parse_abounderrattelser();	
   }
   else if (document.location.href.match("(vasabladet.fi|online.osterbottenstidning.fi)"))
   {
        var p=parse_vasabladet();	
   }
   else if (document.location.href.search("kp24.fi")!=-1)
   {
        var p=parse_kp24();	
   }
   else if (document.location.href.search("demari.fi")!=-1)
   {
        var p=parse_demari();	
   }
   else if (document.location.href.match("(www.iisalmensanomat.fi|www.warkaudenlehti.fi)"))
   {
        var p=parse_iisalmensanomat();	
   }
   else if (document.location.href.search("www.karjalainen.fi")!=-1)
   {
        var p=parse_karjalainen();	
   }
   else if (document.location.href.match("(www.esaimaa.fi|www.kouvolansanomat.fi|www.kymensanomat.fi)"))
   {
        var p=parse_esaimaa();	
   }
   else if (document.location.href.match("(www.ilkka.fi|www.pohjalainen.fi)"))
   {
        var p=parse_ilkka();	
   }
   else if (document.location.href.match("runeberg.org"))
   {
        var p=parse_runeberg_tieto();	
   }
   else if (document.location.href.search("www.aamulehti.fi")!=-1)
   {
        var p=parse_aamulehti();	
   }
   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" 
    || typeof($) == "undefined" 
    || $("body") == null 
    || (parseFloat($().jquery) < 1.7) ) 
{
   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();
}