Järjestelmäviesti:Verkkoviite helper.js

Tässä artikkelissa aiomme sukeltaa Järjestelmäviesti:Verkkoviite helper.js:n kiehtovaan maailmaan, tutkia sen monia puolia ja löytää kaiken, mitä tästä jännittävästä aiheesta on tiedettävä. Sen alkuperästä sen merkitykseen nykyään, sen useiden sovellusten ja sen vaikutuksen kautta eri alueilla. Uppoudumme tutkimusmatkalle, joka johtaa meidät ymmärtämään paremmin Järjestelmäviesti:Verkkoviite helper.js:tä ja arvostamaan kaikkea rikkautta, jota tällä aiheella on meille tarjottavanaan. Valmistaudu siis astumaan tietämyksen ja inspiraation maailmaan, joka hämmästyttää sinut.
/*
*  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(/(^| |-)/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=/^((ublicerad:?|ulkaistu:?|aanantai|iistai|eskiviikko|orstai|erjantai|auantai|unnuntai) )?({1,2}\.{1,2}\.{4}),? (- |klo )?{1,2}(:)?\.?$/;
  m = re.exec(input_str.trim());

  if (m)
  {
     return m;
  }
  
  // parsitaan bi3dPubDate: 2014-06-19 12:13:36 
  var re=/^()-(?)-(?) {1,2}:{1,2}:{1,2}$/;
  m = re.exec(input_str);
  if (m)
  {
     var pvm = m + "." + m + "." + m;  // 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(/--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=/^({1,2}\.{1,2})\.? :$/;
  m = re.exec(input_str);
  if (m)
  {
        return m + "." +  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=/(ulkaistu|ublicerad):? ({1,2}\.{1,2}\.{4})/;
  m = re.exec(input_str);
  if (m)
  {
     publish_date=m;
  }
  var re=/(äivitetty|ppdaterad):? ({1,2}\.{1,2}\.{4})/;
  m = re.exec(input_str);
  if (m)
  {
     update_date=m ;
  }

  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,
        (m || 1) - 1,
        m || 1,
        m - (m ? m ? m + m : 0 : lHrs) || 0,
        m - (m ? m ? m + m : 0 : lMin) || 0,
        m || 0,
        ((m || 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;
	$("link").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);
        		}
            });
            item=rss_feed.find("channel > title").text();
        }
    });
    if ((typeof p=='undefined' || p=="") && item.length )
    {
    	p=item;
    }
    if ((typeof p=='undefined' || p=="") && item.length )
    {
    	p=item;
    }
    if ((typeof p=='undefined' || p=="") && item.length )
    {
    	p=item;
    }
    if ((typeof p=='undefined' || p=="") && item.length )
    {
    	p=item;
    }
    return p;
}

function parse_doria() {
  var ret={};
  ret=$("meta").attr("content");
  ret=$("meta").attr("content");
  ret=$("meta").attr("content");
  ret=$("meta").attr("content");
  ret=$("meta").attr("content");
  ret=$("meta").attr("content");
  ret=$("meta").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=$("link").attr("href");
  if (typeof(ret)=="undefined")
  {
     ret=document.location.href;
  }  
  ret="revid:" + mw.config.get("wgRevisionId");
  ret=mw.config.get("wgPageName");
  ret=$("html").attr("lang");
  ret="";
  ret=$("#mw-revision-date").text();
  if (ret=="")
  {
  	ret=$("#footer-info-lastmod").text();
  }
  ret=$("#footer-copyrightico").find("img").attr("alt");
  
  return ret;
}

function parse_turunsanomat() {
  var ret={};
  ret=$("meta").attr("content");
  ret='';
  ret=$("meta").attr("content");
  ret='';
  ret=$(".content-left").find(".author").text();

  if (ret=='')
  {
     // Yritetään hakea ISOLLA kirjoitettu henkilön nimi
     ret=$(".content-left").find(".text").find("p").filter(function () {
        return (/^+$/.test($(this).text().trim()) && !(/(STT|TS|LUE L)/.test($(this).text().trim())));
     }).text();
   }

  ret=(ret + "").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=$("div.info-container").find(".date").attr('title');
  if (typeof(ret)=="undefined")
  {
    ret=$("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)!="undefined" 
      && ret.match("^{1,2}\.{1,2}\.{4} {1,2}:$"))
  {
     ret=ret.split(" ");
  }

  ret=$(".papername").html();
  return ret;
}

function parse_verkkouutiset()
{
  var ret=parse_og_and_bi3d();
  ret=$("article").find("time").first().attr("datetime");
  // mikäli datetime-attribuuttia ei ole asetettu, niin yritetään poimia kohdan tekstisisältö
  if (typeof(ret)=="undefined")
  {
     ret=$("article").find("time").first().text().trim();
  }
  ret=ret.normalizedate();
  ret=$("article").find("div").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=title_parts.trim();
     ret=title_parts.trim();
  }
  ret=$("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=/ulkaistu ({1,2}\.{1,2}\.{4})/;
  m = re.exec(ret);
  if (m) 
  {
     julkaistu_pvm=m;
  }
  var re=/äivitetty ({1,2}\.{1,2}\.{4})/;
  m = re.exec(ret);
  if (m) 
  {
     paivitetty_pvm=m ;
  }
  if (julkaistu_pvm != "" && julkaistu_pvm==paivitetty_pvm)
  {
     ret=julkaistu_pvm;
  }

  return ret;
}

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

  return ret;
}

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

  return ret;
}

function parse_karjalainen()
{
  var ret=parse_generic();
  ret=$("meta").attr("content");
  ret="Karjalainen";
  ret=$("#ja-content-main").find(".date_time").text().normalizedate();

  return ret;
}

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

  return ret;
}

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

  return ret;
}

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

  // DD.MM.YYYY löytyi
  if (pvm.match(/{1,2}\.{1,2}\./))
  {
     ret=pvm.normalizedate();
  }
  else if (pvm.match(/{1,2}:/))
  {
     // Jos löytyy pelkkä kellonaika niin käytetään kuluvaa vuorokautta
     var d=new Date;
     ret=d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear();
  }
  else
  {
     ret=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_str.replace(comment_str, "").normalizedate();

 if (ret=='')
  {
     // Yritetään hakea ISOLLA kirjoitettu henkilön nimi
     ret+=$("isense").find("div.articleBody").find("p").filter(function () {
        return (/^+$/.test($(this).text().trim()));
     }).text();
     ret=ret.trim().ucwords();
   }

  return ret;
}

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

  return ret;
}

function parse_koillissanomat()
{
  var ret=parse_generic();
  ret=$("#contentMain").find(".writer").first().text().trim();
  ret=$("#contentMain").find(".date").first().text().normalizedate();
  ret="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{1,2}:{2}:{2}({2}:{2})/;
  m=re.exec(pvm);
  if (m)
  {
     pvm=pvm.replace(m, "+02:00");
  }
  ret= (typeof(pvm)=="undefined") ? "" : pvm.normalizedate();
  return ret;
}
                   

  


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

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

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

  return ret;
}

function parse_demari()
{
  var ret=parse_generic();
  ret="Demokraatti";
  ret=$(".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=/({1,2})\.({1,2})\.({4})/;
  m = re.exec(pvm);
  if (m)
  {
     ret=m;
  }

  return ret;
}

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

  return ret;
}

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

  ret=$("isense").find(".date").first().text().trim() + " " + $("isense").find(".lastModified").first().text().trim();
  ret=ret.normalizedate();
  ret=$("isense").find("#articleText").find(".author").text().trim();
  ret=$("isense").find("h1.h1_article").text().trim();

  return ret;
}

function parse_forssanlehti()
{
  var ret=parse_generic();
  ret="Forssan Lehti";
  ret=$(".main").find(".scoop_date").text().normalizedate();
  if (ret=="")
  {
     var str=$(".main").find(".scoop_item").find("em").text().trim();
     var re=/({1,2})\.({1,2}) {2}:{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)==day  && parseInt(m) == month )
        {
           ret=get_today_date_str();
        }
        else
        {
           ret=m;
        }  
     }
  }
  ret=$(".main").find(".scoop_item").find("h2").text().trim();
  ret=$(".main").find(".scoop_item").find(".byline").text().trim();

  return ret;
}

function parse_vasabladet()
{
  var ret=parse_generic();
  ret=$("title").text().trim().split(" - ");;
  ret = $("article").find("h1").first().text().trim();

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

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

  var pvm = $("#columnFrontMain").find("p.date").text().trim();
  var re=/Salon Seudun Sanomat ({1,2}\.{1,2}\.{4})/;
  m = re.exec(pvm);
  if (m)
  {
    ret=m;
  }
  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: {1,2}:{2}/))
  {
     ret=get_today_date_str() + " " + updated;
  }
  else
  {
     ret=pvm + " " + updated;
  }
  return ret;
}

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

  ret=$("meta").attr("content");
  ret="Maaseudun tulevaisuus";
  ret="";

  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), :/;
  m = re.exec(pvm);
  if (m)
  {   
    var days=;
    for (pubday=0; pubday<days.length; pubday++) { 
      if (days == m) {       
        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=new_date.getDate() + "." + (new_date.getMonth()+1) + "." + new_date.getFullYear();
        break;
      }
    }
  }
  else 
  {
     var re=/({1,2}\.{1,2}) :/;
     m = re.exec(pvm);
     if (m)
     {
        ret = m + "." +  current_date.getFullYear();
     }
  }
  if (ret == "" )
  {
     ret=($("div.article").find("div.meta").first().text().replace(tag_str, "").trim().split("\n") + "").trim();
  }   
 


  return ret;
}

function parse_aamulehti()
{
  var ret=parse_generic();
  ret="Aamulehti";
  ret=ret.replace(/( \| Aamulehti|Aamulehti \| )/, "");
  var meta=$("div.bodytext").find("span.meta").text().trim().split("|");
  if (meta.length>1)
  {
     ret=meta.trim();
  }
  ret=$("div.bodytext").find("p.Kirjoittaja").text().trim();
  ret=ret.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").attr("content"))!="undefined")
    {
  	  pvm=$("meta").attr("content");
    }
    else if (typeof($("meta").attr("content"))!="undefined")
    {
  	  pvm=$("meta").attr("content");
    }
    else if (typeof($("meta").attr("content"))!="undefined")
    {
  	  pvm=$("meta").attr("content");
    }
    else if (typeof($("meta").attr("content"))!="undefined")
    {
  	  pvm=$("meta").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").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").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 (/ulkaistu.{1,30}/.test(this.innerHTML));
             }).text();
           }

           if (pvm=="")
           {
        	pvm=e.find(".date").text().trim();
           }
          
           if (pvm=="")
           {             
              var re=/?\.?\./g;
              var delim="";
              while (m = re.exec(e.text().trim()))
              {
                 if (pvm.search(m)==-1)
                 {
                    pvm+=delim + m;
                    delim=", ";

                 }
              }             
              if (pvm!="") pvm="TARKISTA: " + pvm;
           }

	}
	return pvm;
}

function parse_og_and_bi3d() {
  var ret={};
  ret=$("link").attr("href");
  if (typeof(ret)=="undefined" 
      || (ret.search("https://")==-1 && ret.search("http://")==-1) )
  {
     ret=$("meta").attr("content");
  }
  ret='';
  ret=$("meta").attr("content");
  if (typeof(ret) == "undefined" || ret=="")
  {
     ret=$("title").text();
  }   
  ret='';
  ret="";
  ret=parse_meta_pubdate();
  if (typeof(ret)=="undefined")
  {
  	 ret=parse_content_pubdate();
  }
  ret=$("meta").attr("content");
  return ret;
}



function parse_helsinginsanomat() {
  var ret=parse_og_and_bi3d();
  ret="";
  $('div.byline.vcard').each(function(i,e) { 
    var delim = i ? ", " : "";
    ret+= delim + $(e).find("p.fn").text(); 
  });
  return ret;
}


function parse_iltasanomat() {
  var ret=parse_og_and_bi3d();
  ret=($('#article-main').find('p.byline').text() + "").trim();
  return ret;
}

function parse_kaleva() {
  var ret=parse_og_and_bi3d();
  ret=$('span.news-info').find('span.author').text();
  return ret;
}

function parse_rumba() {
  var e=get_article_element();
  var ret=parse_generic();
  ret=e.find("em").filter(function () {
     return (/Teksti:/.test(this.innerHTML));
  }).text().replace("Teksti: ", "");

  var pvm=e.find(".main_content_singlestory_timestamp").text();
  var re=/{1,2}:{1,2} -? ?(?\.?\.)/g;
  var m = re.exec(e.text().trim());
  if (m)
  {
     ret=m;
  }

  return ret;
}


function parse_uusisuomi() {
  var ret=parse_og_and_bi3d();
  var e=$("article");
  ret=e.find(".author-wrapper").find(".author-name").text();
  ret=e.find(".author-wrapper").find("span").text().split(" ");
  return ret;
}

function parse_kansanuutiset() {
  var ret=parse_generic();
  ret=ret.replace("| Kansan Uutiset | Verkkolehti", "").trim();
  ret="Kansan uutiset";
  ret=$(".article").find("#author").text().trim();
  return ret;
}

function parse_iltalehti() {
  var ret=parse_og_and_bi3d();
  ret=$('p.juttuaika').text().trim();
  var re=/^+ +({1,2}\.{1,2}\.{4}) +klo +{1,2}$/;
  var m = re.exec(ret);
  if (m)
  {
     ret=m;
  }

  ret=$("meta").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="";
  }
  else if (e.length)
  {
     var tmp=($('div.author').html() + "").split("<br") ;

     tmp=tmp.toLowerCase().split(" ");
     ret="";
     for (var n=0; n<tmp.length; n++)
     {
  	  ret+=tmp.capitalize()+ " ";
     }
     ret=ret.trim();
  }
  return ret;
}

function parse_yle_uutiset() {
  var ret={};
  ret=$("meta").attr("content");
  ret='';
  ret=$("meta").attr("content");
  ret='';
  ret="";
  $("article.content").find('ul.writers').find('a.author').find('span').each(function()
  	{ 
  		var author=$(this).text(); 
  		if (ret=="") ret=author;
  		else ret+=", " + author;
  	});
  ret="";
  $("article.content").find('header').find('span.meta').find('time').each(function()
  	{ 
  		var pvm=$(this).text(); 
  		if (ret=="") ret=pvm;
  		else ret+=", " + pvm;
  	});
  ret=ret.normalizedate();
  ret=$("meta").attr("content");
  return ret;
}

function parse_ksml() {
  var ret={};
  ret=$("meta").attr("content");
  ret='';
  ret=$("isense").find("#artPreHeadAndHead").find("h1").text().trim();
  ret='';
  ret=$("isense").find("p.byline").find('span.authorName').text().trim();
  ret=$("isense").find("span.article-meta").find('time.date-published').find("span.lastModified").text().normalizedate();
  if (ret=="")
  {
  	ret=$("isense").find("span.article-meta").find('time.date-published').find("span.date").text().normalizedate();
  }
  if (ret=="")
  {
  	ret=$("isense").find("span.article-meta").find('time.date-published').text().normalizedate();
  }
  ret="Keskisuomalainen"
  return ret;
}

/* MTV3 uutisparseri alkaa */
function parse_mtv3() {
  var ret={};
  ret=$("meta").attr("content");
  ret='';
  ret=$("meta").attr("content");
  ret='';
  ret="";
  $('.article').find('.article-authors').find('.author').each(function(i,e) { 
    var delim = i ? ", " : "";
    ret+= delim + $(e).find(".author-name").text(); 
  });

  var datetime=$("div.article-info").find('time.dateCreated').attr("datetime");
  if (typeof(datetime) != "undefined")
  {
      ret=datetime.normalizedate();
  }
  ret=$("meta").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=/^(*?)\((.*?)\)/;
  var m = re.exec(title);
  if (m)
  {
  	julkaisu=m.trim();
  	title="VIITATTU_SANA_TÄHÄN";
  	selite="palstat: " + m.trim();
  }
  var tmp=$("table").first().text().trim();
  var re = re=/\((+)\)/m;
  m = re.exec(tmp);
  if (m)
  {
  	pvm=m;
  }

  
  var ret={};
  ret=document.location.href;
  ret=selite;
  ret=title;
  ret='';
  ret="";
  ret=pvm;
  ret=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)=="undefined")
  {
  	ret=document.location.href;
  }
  
  if (typeof(ret)=="undefined")
  {
  	ret=$('title').text();
  }
  
  if (typeof(ret)=="undefined")
  {
  	 ret=parse_content_pubdate();
  }

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

   if (ret=='')
   {
     $("article.post").first().find(".author").each(function (i,e) { 
        if (i) ret += ", " + $(e).text().trim(); 
        else ret   += $(e).text().trim(); 
     });
     ret=ret.replace(/^, /, "");
   }
   
   if (ret=='')
   {
      ret=article_element.find(".meta").find(".assistant").text().trim();
   }

   if (ret=='')
   {
      ret=article_element.find(".meta").find(".author").text();
   }
   if (ret.match("^+$"))
   {
     ret=(ret + "").ucwords();
   }

  // Haetaan koti-liitteen meta-blokki jos kellonaikaa ei olla muuten saatu
  if (ret=='')
  {
     ret=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)
  {
    ret=ret.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=article.find("a.main-link").attr('href');
		ret='';
		ret=article.find("header").text().trim();
		ret='';
 		ret="";
		ret=article.find("div.info").find('time').attr('datetime');
		ret="";
		var julkaisu_tmp=article.find("div.info").find('p.source').text().trim().split("(");
		ret=(julkaisu_tmp + "").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=article.find("a.news-item-headline").attr('href');
		ret='';
		ret=article.find("a.news-item-headline").text().trim();
		ret='';
 		ret="";
		ret=article.find("div.news-item-date").text().trim() + new Date().getFullYear();
		ret="";
		var julkaisu_tmp=article.find("div.news-item-source").text().trim().split("(");
		ret=(julkaisu_tmp + "").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 = typeof(p)=="undefined" ? "" : p;
  p = typeof(p)=="undefined" ? "" : p;
  p=(p != 'fi' ? p : '');
  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      + end_of_line;
  outstr +="| Nimeke = " + p   + end_of_line;
  outstr +="| Tekijä = " + p  + end_of_line;

  if (print_full_info || test_is_set(p) )
  {
     outstr +="| Tiedostomuoto = "          + end_of_line;
  }

  if (print_full_info || test_is_set(p) )
  {
     outstr +="| Selite = " + p   + end_of_line;
  }

  if (print_full_info || test_is_set(p) )	 
  {
     outstr +="| Julkaisu =" +p + end_of_line;
  }

  outstr +="| Ajankohta = " + p   + end_of_line;

  if (print_full_info || test_is_set(p))
  {
     outstr +="| Julkaisupaikka = "         + end_of_line;
  }

  if (print_full_info || test_is_set(p))
  {
     outstr +="| Julkaisija = " + p + end_of_line;
  }

  outstr +="| Viitattu = " + viitattu_pvm + end_of_line;

  if (print_full_info || test_is_set(p))
  {
     outstr +="| Kieli = " + p     + 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").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").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'),
        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();
}